Dragos'un Dersliği

Users who are viewing this thread

dragos

QAZ4ly.png


Merhaba, bu başlıkta benim tarafımdan yazılmış veya İngilizce'den tercüme edilmiş bazı ders anlatımlarını bulabilirsiniz.
Lütfen kopyala yapıştır yapmak yerine işin mantığını kavramaya çalışalım ve derslerden faydalanmanız durumunda belirtilen kişilere teşekkür kısmında yer vermeyi unutmayalım.​

 
Bu sayde kodlama öğrenebilirler ama bu sadece kodlama programlarini tanitan bi program olmuş yine de iyi birde bannerlordun kodlama sistemi python olmiycakmiş o yüzden bu ders bannerlorda işlemez ama yararli bi ders olmuş
 
aaer213 said:
Bu sayde kodlama öğrenebilirler ama bu sadece kodlama programlarini tanitan bi program olmuş yine de iyi birde bannerlordun kodlama sistemi python olmiycakmiş o yüzden bu ders bannerlorda işlemez ama yararli bi ders olmuş

Mod yapmak küçük resim, kodlamayı öğrenmek ise büyük resim. Biz büyük resmi görelim de küçüğünü hallederiz :smile:

Bannerlord'la ilgili bir bilgim yoktu, yeni öğrendim :shock: :facepalm:
 
dragos said:
aaer213 said:
Bu sayde kodlama öğrenebilirler ama bu sadece kodlama programlarini tanitan bi program olmuş yine de iyi birde bannerlordun kodlama sistemi python olmiycakmiş o yüzden bu ders bannerlorda işlemez ama yararli bi ders olmuş

Mod yapmak küçük resim, kodlamayı öğrenmek ise büyük resim. Biz büyük resmi görelim de küçüğünü hallederiz :smile:

Bannerlord'la ilgili bir bilgim yoktu, yeni öğrendim :shock: :facepalm:

Bannerlordun hangi kodla yapılacıği daha önce açıklanmıştı araştirisan bulursun :wink:
 
vaayt dragos hocam döktürmüşsün hemen derse başlıyorum sorum olursa da buraya yazarım çok sağolun kolay gelsin
 
aaer213 said:
dragos said:
aaer213 said:
Bu sayde kodlama öğrenebilirler ama bu sadece kodlama programlarini tanitan bi program olmuş yine de iyi birde bannerlordun kodlama sistemi python olmiycakmiş o yüzden bu ders bannerlorda işlemez ama yararli bi ders olmuş

Mod yapmak küçük resim, kodlamayı öğrenmek ise büyük resim. Biz büyük resmi görelim de küçüğünü hallederiz :smile:

Bannerlord'la ilgili bir bilgim yoktu, yeni öğrendim :shock: :facepalm:

Bannerlordun hangi kodla yapılacıği daha önce açıklanmıştı araştirisan bulursun :wink:

açıklanmadı diye biliyorum.Belki C++ sözleri geçmiştir bannerlord konusunda.Ama C++ olmaması lazım.Derlenmesi gerek python gibi.  :meh:

aaer213 said:
Bu sayde kodlama öğrenebilirler ama bu sadece kodlama programlarini tanitan bi program olmuş yine de iyi birde bannerlordun kodlama sistemi python olmiycakmiş o yüzden bu ders bannerlorda işlemez ama yararli bi ders olmuş

Pythonu öğrenmek daha geniş şeyler yapmanıza olanak verir.mesela,bir modül dosyası yapıp,modül dosyasının sonuna bir kaç satır kod yazarak istediğin dosyanın istediğin yerine ekleyebiliyorsun.Mesela ben at ıslığını ekledim,Bunu lead_charge'e eklemek istiyorum.Şöyle yapmam gerekir:

Code:
for i in range(len(orig_mission_templates)):
		mt_name = orig_mission_templates[i][0]
		if(   mt_name=="lead_charge"):
			orig_mission_templates[i][5].extend(horse_whistle)

module_mission_templates'i arar,aradığı misyonun onun içinde olup olmadığını tarar,eğer misyon ismi lead_charge ise,module_mission_templates'i horse_whistle triggerını lead_charge misyonuna eklenecek şekilde değiştirir.
böylece başka bir dosyadan olan belirli bir kodu,module_mission_templates'in lead_charge misyonuna eklemiş olurum.

Yani python sadece program yazma aracı değil.  :smile:
 
dragos said:
HyperCharge said:
aaer213 said:
dragos said:
aaer213 said:
Bu sayde kodlama öğrenebilirler ama bu sadece kodlama programlarini tanitan bi program olmuş yine de iyi birde bannerlordun kodlama sistemi python olmiycakmiş o yüzden bu ders bannerlorda işlemez ama yararli bi ders olmuş

Mod yapmak küçük resim, kodlamayı öğrenmek ise büyük resim. Biz büyük resmi görelim de küçüğünü hallederiz :smile:

Bannerlord'la ilgili bir bilgim yoktu, yeni öğrendim :shock: :facepalm:

Bannerlordun hangi kodla yapılacıği daha önce açıklanmıştı araştirisan bulursun :wink:

açıklanmadı diye biliyorum.Belki C++ sözleri geçmiştir bannerlord konusunda.Ama C++ olmaması lazım.Derlenmesi gerek python gibi.  :meh:

aaer213 said:
Bu sayde kodlama öğrenebilirler ama bu sadece kodlama programlarini tanitan bi program olmuş yine de iyi birde bannerlordun kodlama sistemi python olmiycakmiş o yüzden bu ders bannerlorda işlemez ama yararli bi ders olmuş

Pythonu öğrenmek daha geniş şeyler yapmanıza olanak verir.mesela,bir modül dosyası yapıp,modül dosyasının sonuna bir kaç satır kod yazarak istediğin dosyanın istediğin yerine ekleyebiliyorsun.Mesela ben at ıslığını ekledim,Bunu lead_charge'e eklemek istiyorum.Şöyle yapmam gerekir:

Code:
for i in range(len(orig_mission_templates)):
		mt_name = orig_mission_templates[i][0]
		if(   mt_name=="lead_charge"):
			orig_mission_templates[i][5].extend(horse_whistle)

module_mission_templates'i arar,aradığı misyonun onun içinde olup olmadığını tarar,eğer misyon ismi lead_charge ise,module_mission_templates'i horse_whistle triggerını lead_charge misyonuna eklenecek şekilde değiştirir.
böylece başka bir dosyadan olan belirli bir kodu,module_mission_templates'in lead_charge misyonuna eklemiş olurum.

Yani python sadece program yazma aracı değil.  :smile:

Bende açıklandığını hiç duymadım :neutral: Neyse, bekleyip göreceğiz ama bence de Phyton olmalı.

Bende python istiyorum ama bence olmaz
 
1. Ders
  Merhaba arkadaşlar, bu derste kodlamaya hevesli dostlarıma bir nebze yardımcı olmak amacıyla Python'u anlatacağım. Bu sayede kodlama konusunda az veya çok kendimizi geliştirebilir ve belki Warband için biraz geç olsa da Bannerlord için daha etkili modlar ortaya koyabiliriz. Derse başlamadan önce Python (2.7.x) veya PyCharm'ı indirip bilgisayarınıza kurunuz. Ben şahsen yeni başlayanlar için PyCharm'ı öneriyorum. PyCharm'da kodlama yaparken program size hatalı kısımları gösterir ve kod yazdığınız sırada tamamlama özelliği ile kolaylık sağlar.



KODLAMAYA GİRİŞ Python

Giriş
  Python üst seviye (high level) programlama dilidir. Bunun anlamı Python tıpkı diğer üst düzey programlama dilleri olan C, C++, Java gibi insanlar içindir. Alt düzey (low level) programlama dilleri olan Assembly, Embedded ise makineler içindir.

Interpreter
  Interpreter (yorumlayıcı) üst düzey programlarda komutu okur ve kısa bir süre içerisinde işleme sokar. Yani kaynak kodu çalıştıran ve başka bir koda tercüme eden interpreter'dır. 2 çeşit (mode) interpreter vardır, bunlar interactive mode ve script mode. Interactive mode'da Python kodunu yazarsınız ve interpreter sonucu hesaplar. IDLE'de kodunuzu yazarken gördüğünüz chevron (>>> işareti) interpreter'i yönlendirir.

Debugging
  Kodlama sırasında herkes birçok hata yapar. Bu hatalara bug denir. Bu hataların izini bulmaya da (tracking down) debugging (hata ayıklama) denir. Şimdi bazı hata çeşitlerinden bahsedeceğim, bunlarla sık sık mod yaparken karşılaşıyoruz :smile:
  Syntax
  Syntax Türkçe'de sözdizimi anlamına gelir, dolayısıyla syntax hataları sözdizimi hatalarıdır. Bu hataya genellikle yanlış nokta, virgül vs kullanımı sebep olur.
  Runtime
  Programın çalışması sırasında meydana gelen hatalardır. Kural dışı durumlar (exceptions) olarak da bilinir.
  Semantic
  Program her ne kadar hata mesajı vermese de output (bilgisaydan alınan bilgi) hatalıysa semantic yani anlamsal hatalardan bahsediyoruz demektir.

İlk Program
  Hadi ilk programımızı yapalım. Açtığımız zaman programımız bize "Hoşgeldiniz" desin, nasıl? Bunun için print yani yazdır kodunu kullanacağız.

Code:
>>> print ("Hoşgeldiniz!")
Hoşgeldiniz!

Gördüğünüz gibi önce kodumu yazdım, daha sonra parantez içine de değişkenimi. Hoşgeldiniz! yazısını tırnak içine almamın nedeni bunun bir dize yani string olmasıdır. Eğer tırnak içine almasaydım "Invalid Syntax" yani geçersiz sözdizimi hatası alacaktım. Konusu açılmışken hadi değişken türlerine bir göz atalım.

Değişkenler
  Değişkenlerin türleri (types) vardır. Bu türlerden bahsedeceğiz. Aslında yazdığınız bir şeyin hangi tür değişken olduğunu IDLE size söyler. Mesela IDLE'ye girip type(17) yazdığınız zaman başka type("dragos") yazdığınız zaman başka bir değişken türü kısaltması çıkar.
  String
  String dize demektir. Parantez içinde yazdığımız her şey string değişkeni olarak geçer. Bunu test etmek için IDLE'de type("herhangi bir şey") yazarsanız <type 'str'> yani string olduğunu görürsünüz.
  Integer
  Integer tam sayı demektir. Kodlama sırasında yazdığımız rakamlar integer değişkenine girer. Yine de kodlama sırasında yazdığımız 17 ile "17" aynı değişken türünü ifade etmezler. Bunu yine IDLE'de test edebilirsiniz. Bunun nedeni, string'in tanımını hatırlayalım, 17 bir integer iken "17" bir string'tir.
  Float
  Float'ın tam olarak Türkçe karşılığını bilmiyorum ama bizim için float ondalık sayı demektir bundan sonra :smile:

Operators ve Operands
  Operators işleçler, operands işlenenler anlamına gelmektedir. Bunların sayesinde IDLE'de toplama, çıkarma, karesini alma gibi basit işlemleri gerçekleştirebiliriz. Diyelim ki 3 ve 5 sayılarını toplamak istiyoruz, bunun için işlemimizi 7 + 5 yazıp enter'a basarsak sonucu elde ederiz. Diğer işlemlerde aynı şekilde yazılır. Toplama işlemi için + kullandık. Çıkarma için -, çarpma için * ve bölme içinde / kullanacağız. Hadi biraz örnek yapalım.

Code:
>>> 7 + 15 + 8
30

Code:
>>> 33 - 10 + 25 + 5.5 - 100
-46.5

Code:
>>> (15 / (3 + 2)) / 3
1

Dikkat ederseniz son işlemde iki defa parantez kullandım. Bu sayede önce 3 ile 2'yi toplayıp 5 buldu, daha sonra 15'i 5'e böldü ve bunun sonucu elde ettiği 3'ü de 3'e bölerek 1 buldu. Parantezleri kullanmadan yazsaydım 15'in 3'e bölümü ile 2'nin 3'e bölümünü toplayacak ve yanlış sonuca ulaşacaktı. Şimdi birazda karesini ve karekökünü almaya bakalım. Bu işlem için ** kullanacağız.

Code:
>>> 15 ** 2
225

Gördüğünüz gibi ** yazdıktan sonra karesini almak istediğim için 2 yazdım ve sonucu buldum. Mesela küpünü almak için de 3 yazalım.

Code:
>>> 15 ** 3
3375

Karekökünü alırken de benzer bir şekilde 2 veya 3 yerine 0.5 yazarak sonucu elde edebiliriz. Bu işlemlere benzer olarak büyüktür >, küçüktür < ve eşittir == işlemlerini de uygulayarak sonuca ulaşabiliriz. Hadi bu sefer integer değil, string değişkeni kullanalım.

Code:
>>> a = 17

Bu yazdığım kod ile her yalnız a karakterine 17 sayısını yüklemiş oluyorum. Mod yapımı sırasında bu işlemi çoğu kez (assign, reg0, 100) şeklinde reg0'a 100 değerini yükleyerek yapıyoruz mesela :smile: Devam edelim.

Code:
>>> b = 12

String'lere integer'ları yükledik. Şimdi mesela a acaba b'den büyük müymüş onu bir test edelim. Bunun için şunu yazıp enter'a basıyorum.

Code:
>>> a > b
True

True yani doğru dediğine göre doğruymuş :smile: False deseydi yanlış manasına gelecekti. Demek ki a'ya yüklediğim integer b'ye yüklediğimden büyükmüş. Bir de string ile integer'ı karşılaştırmayı deneyelim. Önce string'imize integer'ı yüklüyorum.

Code:
>>> blop = 75

Şimdi blop'un 80'den büyük olup olmadığını görmek istiyorum.

Code:
>>> blop > 80
False

Tüh, yanlışmış :sad: Sanırım mantığını kavradınız. Şimdi buradan yola çıkarak işi biraz zorlaştıralım ve if, elif ve else'leri öğrenelim. Bunları da mod yapımında (try_begin), (try_else) gibi benzeri şekillerde görebiliriz. Ha hazır işi zorlaştırmışken o zaman raw_input'u da öğrenelim, ne dersiniz? Bunları bir örnek ile açıklamaya çalışacağım. İnanın böyle okuyunca karışık geliyor ama PyCharm'ı açıp biraz kurcalarsanız ne kadar basit ve eğlenceli olduğunu görebilirsiniz. Hata yapmaktan korkmayın, sürekli deneyin.

Şimdi ben öyle bir program yapmak istiyorum ki girdiğim iki değerin hangisinin büyük veya eşitlerse eşit olduklarını bana söylesin. Öncelikle giriş açılış cümlemizi yazalım.

Code:
>>> print ("Hoşgeldiniz. Lütfen karşılaştırmak istediğiniz rakamları giriniz.")

Şimdi de rakamları gireceğimiz string'leri oluşturacağız. Burada raw_input kullanacağız.

Code:
>>> rakam1 = "Birinci rakamı giriniz: "
birinci = int(raw_input(rakam1))

Hemen açıklıyorum. Rakam1 string'i ile rakamı gireceğimiz yeri oluşturduk. Programımızı açtığımızda burası "Birinci rakamı giriniz: " şeklinde gözükecek ve mesela 5 girdiğimizde "Birinci rakamı giriniz: 5" olacak. Gelelim birinci isimli string'imize, bu string'te önce int() kullandık. Yani bu string'e bir integer yükleyeceğimizi belirttik. Böylece programımız birinci string'ine yazdığımız şeyin bir integer olduğunu anladı. Neden raw_input() kullandığımıza gelince, raw_input(rakam1) sayesinde rakam1 string'ine yazdığımız mesela 5 rakamı birinci isimli string'imize yüklenmiş oldu. Böylece şunu elde ettik:

Code:
>>> birinci = 5

Aynı şekilde ikinci sayımız içinde string'lerimizi oluşturalım.

Code:
>>> rakam2 = "İkinci rakamı giriniz: "
ikinci = int(raw_input(rakam2))

Birinci rakamı 5 girmiştik, ikincisi de 7 olsun. Artık rakam girdiğimiz yerler tamam, şimdi bunları karşılaştırmamız lazım ki sonucumuza ulaşalım. Kodumuza şöyle devam ediyoruz:

Code:
>>> if birinci > ikinci:
print (birinci + " rakamı " + ikinci + " rakamından büyüktür.")

Şimdi ne yaptık? If Türkçe'de eğer anlamına gelir. Yani ilk satırda "if birinci > ikinci:" yazarak "eğer birinci rakam ikinci rakamdan büyükse bu koda devam et" komutunu vermiş olduk. Yani birinci rakamımız ikinciden büyükse eğer programımız hemen alttaki print koduna geçecek. Peki bu print kodu ne ayak? String ve integer tanımlarını hatırlayın. Burada kullandığımız birinci ve ikinci'ler print komutu sonrası ilk başta girdiğimiz sayılar şeklinde gözükecek. Tıpkı mod yapımı sırasında yazdığımız kodla reg0'ın 100 rakamına dönüşmesi gibi. Parantez içinde yazdığım kısımlar ise tıpkı yazdığım şekilde gözükecek. Yani eğer birinci rakam ikinciden büyükse karşımıza şöyle bir yazı çıkacak:

Code:
5 rakamı 7 rakamından büyüktür.

Ancak bu sonucun doğru olmadığını biliyoruz. O halde birde ikinci rakam birinciden büyüktür diye bir kod yazıyoruz, yine önceki kod ile aynı şekilde. Bu sefer en baştaki if (eğer) yerine elif kullanacağız. Elif, else (başka) ve if (eğer) kelimelerinin birleşiminden oluşturulmuştur. Veya anlamına geliyor diyebiliriz. Hadi yazalım.

Code:
>>> elif birinci < ikinci:
print (birinci + " rakamı " + ikinci + " rakamından küçüktür.")

Gördüğünüz gibi neredeyse aynı şekilde bu kodu da yazdık. Ama hala bir ihtimal daha var, o da eşit olmak mıdır dersiniz? :smile: Son ihtimalimiz olduğu için else'i (başka) kullanacağız. Else yukarıda belirttiğimiz ihtimallerin ikisi de yanlış ise geriye kalan ihtimal veya ihtimalleri doğru kabul eder ve else'in altında kodladığımız print'i yazar. Hadi bunu da yazalım dostlar.

Code:
>>> else:
print (birinci + " ve " + ikinci + " rakamları eşittir.")

Gördüğünüz üzere if ve elif'te olduğu gibi else yazdıktan sonra birinci = ikinci tarzı bir şey yazmadım. Çünkü else geriye kalan bütün ihtimaller demiştik ve geriye kalan tek ihtimalimiz de zaten eşit olmaları. Eğer ilk iki ihtimalimiz doğru çıkmazsa programımız birinci ve ikinci rakamların eşit olduğu sonucuna ulaşacak. Böylece programımızı ve ilk dersimizi bitiriyoruz :mrgreen:



  Az önce de dediğim gibi ilk dersimizin sonuna geldik. Bu dersi tamamiyle kendim yazmış olup, kodlamayı İngilizce öğrendiğim için belki Türkçe karşılıkları yazma da yanlışlıklar yapmış olabilirim. Hatamız, yanlışımız veya eksiğimiz varsa affola. Bilenler konuya yazarak müdahale edebilirler. Siz de sorularınız varsa özelden veya konuya yazarak sorabilirsiniz. Konuya yazmanızı tavsiye ederim, bu sayede diğer kodlama bilen arkadaşlar da sizlere yardımcı olabilirler. Derse gösterilen ilgi, alaka ve geri dönüşlere göre derslere devam etmeyi planlıyorum ve şimdiden hepinize teşekkür ediyorum! Bu arada dersle ilgili pratik (practice) yapmak isteyenler şu sorular için kod yazmayı deneyebilirler:

1- Pi sayısını 3.14 kabul ederek çapı 3 ve yüksekliği 10 cm olan bir silindirin hacmini bulunuz. (Silindirin hacmi: Formül)
282.6

2- Üsküdar'da hava 10 santigrad derece is kaç fahrenheit'tır? (Santigrad ve fahrenheit: Formül)
42

3- (3,4) ile (6,:cool: koordinat noktaları arasındaki uzaklığı bulunuz. (İki nokta arasındaki uzaklık: Formül)
5

Edit: İlgi olmadığı için 2. ders gelmeyecektir. Kodlama öğrenmek isteyenler şu kitaptaki dersleri takip edebilirler, oldukça kısa ve okuması zevkli bir kitaptır: Python For Software Design, How To Think Like A Computer Scientist (Allen B. Downey)
 
İyi günler. Yeni bir dersle karşınızdayım. Bu derste Mount & Blade Warband'a altın ve demir madenleri eklemeyi öğreneceğiz.
Click here to look at the English thread.

Altın ve demir köylere rastgele dağılacaktır. Bir köyde demir bulunma oranı %15, altın bulunma oranı %5'tir. Altın madeni köyün refahını %4 artırır. Demir madeni ise %1 artırır ve köylerden demir satın alımını etkinleştirir.

Kurulum

1.module_constants.py dosyasını açıyoruz ve şunları ekliyoruz;

slot_village_has_goldmine    = 555 #Veya herhangi kullanılmamış bir slot kodu
slot_village_give_goldcoin    = 556 #Veya herhangi kullanılmamış bir slot kodu
slot_village_has_iron_ore    = 557 #Veya herhangi kullanılmamış bir slot kodu

"slot_center_has_manor" ve "slot_center_has_messenger_post" satırlarını buluyoruz ve bunların arasına şu kodları gösterildiği şekilde ekliyoruz;

slot_center_has_manor              =  128 #village
#ALTIN VE DEMİR MADENİ
slot_center_has_iron_mine        =  129 #village
slot_center_has_gold_mine        =  130 #village
#ALTIN VE DEMİR MADENİ

Eklediğimiz kodları şu şekilde de yeniden numaralandırabiliriz;

slot_center_has_manor            = 454 #village
slot_center_has_fish_pond        = 455 #village
slot_center_has_watch_tower      = 456 #village
slot_center_has_school          = 457 #village
slot_center_has_iron_mine        = 458 #village
slot_center_has_gold_mine        = 459 #village
slot_center_has_messenger_post  = 460 #town, castle, village
slot_center_has_prisoner_tower  = 461 #town, castle
slot_center_has_blacksmith      = 462 #town, castle

village_improvements_begin = slot_center_has_manor
village_improvements_end  = slot_center_has_prisoner_tower

walled_center_improvements_begin = slot_center_has_messenger_post
walled_center_improvements_end  = slot_center_has_blacksmith

2.module_game_menus.py dosyasını açıyoruz ve "center_build_manor" satırını buluyoruz. Kodları ekliyoruz;

        ("center_build_manor",
  [(eq, reg6, 0),
            (party_slot_eq, "$g_encountered_party", slot_party_type, spt_village),
            (party_slot_eq, "$g_encountered_party", slot_center_has_manor, 0),
          ],
    "Build a manor.",[(assign, "$g_improvement_type", slot_center_has_manor),
                      (jump_to_menu, "mnu_center_improve"),]),

###ALTIN VE DEMİR MADENİ ###

        ("center_build_iron_mine",[(eq, reg6, 0),
                              (party_slot_eq, "$g_encountered_party", slot_party_type, spt_village),
                              (party_slot_eq, "$g_encountered_party", slot_center_has_iron_mine, 0),
  (party_slot_eq, "$g_encountered_party", slot_village_has_iron_ore, 1),
                                  ],
      "Build an iron mine.",[(assign, "$g_improvement_type", slot_center_has_iron_mine),
                          (jump_to_menu, "mnu_center_improve"),]),

        ("center_build_gold_mine",[(eq, reg6, 0),
                              (party_slot_eq, "$g_encountered_party", slot_party_type, spt_village),
                              (party_slot_eq, "$g_encountered_party", slot_center_has_gold_mine, 0),
  (party_slot_eq, "$g_encountered_party", slot_village_has_goldmine, 1),
                                  ],
      "Build a gold mine.",[(assign, "$g_improvement_type", slot_center_has_gold_mine),
                          (jump_to_menu, "mnu_center_improve"),]),

### ALTIN VE DEMİR MADENİ ###

        ("center_build_fish_pond",
  [(eq, reg6, 0),
            (party_slot_eq, "$g_encountered_party", slot_party_type, spt_village),
            (party_slot_eq, "$g_encountered_party", slot_center_has_fish_pond, 0),
            ],
    "Build a mill.",[(assign, "$g_improvement_type", slot_center_has_fish_pond),
                    (jump_to_menu, "mnu_center_improve"),]),

3.Eğer Diplomasi modu kullanıyorsak module_dialogs.py dosyasında "[(assign, "$g_improvement_type", slot_center_has_manor),]]," satırının altına şunları ekleyelim;

[anyone|plyr, "dplmc_chamberlain_manage_fiefs_build_ask2",
[
(party_slot_eq, "$diplomacy_var", slot_party_type, spt_village),
(party_slot_eq, "$diplomacy_var", slot_center_has_manor, 0),
],
"Build a manor.", "dplmc_chamberlain_manage_fiefs_build_confirm_ask",
[(assign, "$g_improvement_type", slot_center_has_manor),]
],

### ALTIN VE DEMİR MADENİ ###

[anyone|plyr, "dplmc_chamberlain_manage_fiefs_build_ask2",
[
(party_slot_eq, "$diplomacy_var", slot_party_type, spt_village),
(party_slot_eq, "$diplomacy_var", slot_center_has_iron_mine, 0),
(party_slot_eq, "$diplomacy_var", slot_village_has_iron_ore,1),
],
"Build an iron mine.", "dplmc_chamberlain_manage_fiefs_build_confirm_ask",
[(assign, "$g_improvement_type", slot_center_has_iron_mine),]
],

[anyone|plyr, "dplmc_chamberlain_manage_fiefs_build_ask2",
[
(party_slot_eq, "$diplomacy_var", slot_party_type, spt_village),
(party_slot_eq, "$diplomacy_var", slot_center_has_gold_mine, 0),
(party_slot_eq, "$diplomacy_var", slot_village_has_goldmine,1),
],
"Build a gold mine.", "dplmc_chamberlain_manage_fiefs_build_confirm_ask",
[(assign, "$g_improvement_type", slot_center_has_gold_mine),]
],

### ALTIN VE DEMİR MADENİ ###

[anyone|plyr, "dplmc_chamberlain_manage_fiefs_build_ask2",
[
(party_slot_eq, "$diplomacy_var", slot_party_type, spt_village),
(party_slot_eq, "$diplomacy_var", slot_center_has_fish_pond, 0),
],
"Build a mill.", "dplmc_chamberlain_manage_fiefs_build_confirm_ask",
[(assign, "$g_improvement_type", slot_center_has_fish_pond),]
],

4.module_scripts.py'i açıyoruz ve şu adımları takip ediyoruz.

4.1.En alttaki "])" işaretinden önce şunları ekleyelim;

### ALTIN VE DEMİR MADENİ ###

    (try_for_range,":cur_village",villages_begin,villages_end),
(store_random_in_range, ":ir_mine",1,20),
  (try_begin),
    (is_between,":ir_mine",1,3), #15% chance of iron
(party_set_slot, ":cur_village", slot_village_has_iron_ore,1),
  (else_try),
    (eq,":ir_mine",5),# 5% chance of gold
(party_set_slot, ":cur_village", slot_village_has_goldmine,1),
  (try_end),
    (try_end),
              (party_set_slot, "p_village_57", slot_village_has_iron_ore,1), # test
(party_set_slot, "p_village_7", slot_village_has_goldmine,1),  # test

### ALTIN VE DEMİR MADENİ ###

    ]),

  #script_game_get_use_string
  #This script is called from the game engine for getting using information text

4.2"get_improvement_details" kısmına da şunları ekleyelim;

    (try_begin),
      (eq, ":improvement_no", slot_center_has_manor),
      (str_store_string, s0, "@Manor"),
      (str_store_string, s1, "@A manor lets you rest at the village and pay your troops half wages while you rest."),
      (assign, reg0, 12000),#12000
    (else_try),
### ALTIN VE DEMİR MADENİ ###

        (eq, ":improvement_no", slot_center_has_gold_mine),
        (str_store_string, s0, "@Gold mine"),
        (str_store_string, s1, "@A gold mine increases village prosperity by 4% every month. Income 100-1000 denars per week."),
        (assign, reg0, 5500),#5500
      (else_try),
        (eq, ":improvement_no", slot_center_has_iron_mine),
        (str_store_string, s0, "@Iron mine"),
        (str_store_string, s1, "@An iron mine increases village prosperity by 1% every month and allows iron to be purchased from the village."),
        (assign, reg0, 4500),
      (else_try),  

### ALTIN VE DEMİR MADENİ ###
      (eq, ":improvement_no", slot_center_has_fish_pond),
      (str_store_string, s0, "@Mill"),
      (str_store_string, s1, "@A mill increases village prosperity once by 5%. "),
      (assign, reg0, 6000),#6000
    (else_try),

4.3."refresh_village_merchant_inventory" satırını bulalım ve en sondaki "])" işaretinden önce bunları ekleyelim;

### ALTIN VE DEMİR MADENİ ###
      (try_begin),
        (party_slot_eq, ":village_no", slot_center_has_iron_mine, 1),
        (store_random_in_range,":rand",1,5),
        (try_for_range, ":unused", 0, ":rand"),
          (troop_add_item,":merchant_troop",itm_iron,0), # add 1-5 iron bars
        (try_end),
      (try_end), 
### ALTIN VE DEMİR MADENİ ### 
  ]),

  # script_refresh_village_defenders

5.module_simple_triggers.py dosyasını açalım ve en sona kodları ekleyelim;

5.1.

### ALTIN VE DEMİR MADENİ ###
## Monthly change prosperity of villages
  (30 * 24,
    [(try_for_range, ":center_no", villages_begin, villages_end),

    (try_begin),
            (party_slot_eq, ":center_no", slot_center_has_iron_mine, 1),
            (call_script, "script_change_center_prosperity", ":center_no", 1),
        (try_end),

    (try_begin),
            (party_slot_eq, ":center_no", slot_center_has_gold_mine, 1),
            (call_script, "script_change_center_prosperity", ":center_no", 4),
        (try_end),
(try_end),
### ALTIN VE DEMİR MADENİ ###

5.2.

### ALTIN VE DEMİR MADENİ ###
### weekly rent from goldmine
  (24 * 7,
  [(try_for_range, ":center_no", villages_begin, villages_end),
    (party_slot_ge, ":center_no", slot_town_lord, 0), #unassigned centers do not accumulate rents
(party_slot_eq, ":center_no", slot_village_state, svs_normal),
            (party_slot_eq, ":center_no", slot_center_has_gold_mine, 1),
(store_random_in_range, ":goldmine_rent",100,1000),
            (party_set_slot, ":center_no", slot_village_give_goldcoin, ":goldmine_rent"),
    (try_end), 
    ]),
### ALTIN VE DEMİR MADENİ ###

6.module_presentations.py. dosyasını açalım. "#Enterprise ends, taxes begin" kısmını bulup ekleyelim;

    #Enterprise ends, taxes begin
        (party_slot_eq, ":center_no", slot_town_lord, "trp_player"),
        (party_get_slot, ":accumulated_rents", ":center_no", slot_center_accumulated_rents),
        (party_get_slot, ":accumulated_tariffs", ":center_no", slot_center_accumulated_tariffs),

### ALTIN VE DEMİR MADENİ ###
        (try_begin),
            (party_slot_eq, ":center_no", slot_center_has_gold_mine, 1),
            (party_get_slot, ":goldm_rent", ":center_no", slot_village_give_goldcoin),
            (val_add, ":accumulated_tariffs", ":goldm_rent"),
        (try_end),
### ALTIN VE DEMİR MADENİ ###

        (store_add, ":accumulated_total", ":accumulated_rents", ":accumulated_tariffs"),
        (val_add, ":all_centers_accumulated_total", ":accumulated_total"),
        (val_add, ":all_centers_accumulated_taxes_and_rents", ":accumulated_total"),
        (val_add, ":net_change", ":accumulated_total"),
        (str_store_party_name, s0, ":center_no"),
        ##diplomacy begin
        (try_begin),
          (neg|is_between, ":center_no", castles_begin, castles_end),
          (party_get_slot, ":tax_rate", ":center_no", dplmc_slot_center_taxation),
          (neq, ":tax_rate", 0),
          (call_script, "script_dplmc_describe_tax_rate_to_s50", ":tax_rate"),
          (str_store_string, s0, "@{s0} ({s50})"),
        (try_end),
        ##diplomacy end
        (create_text_overlay, reg1, "str_rents_from_s0", 0),
        ##diplomacy begin
        (str_store_party_name, s0, ":center_no"),
        ##diplomacy end
        (position_set_x, pos1, 900),
        (position_set_y, pos1, 900),
        (overlay_set_size, reg1, pos1),
        (position_set_x, pos1, 25),
        (position_set_y, pos1, ":cur_y"),
        (overlay_set_position, reg1, pos1),
        (try_begin),
          (gt, ":accumulated_rents", 0),
          (assign, reg0, ":accumulated_rents"),
          (create_text_overlay, reg1, "@{!}{reg0}", tf_right_align|tf_single_line),
          (overlay_set_color, reg1, 0x00AA00),
        (else_try),
          (create_text_overlay, reg1, "@None", tf_right_align|tf_single_line),
        (try_end),
        (position_set_x, pos1, 900),
        (position_set_y, pos1, 900),
        (overlay_set_size, reg1, pos1),
        (position_set_x, pos1, 500),
        (position_set_y, pos1, ":cur_y"),
        (overlay_set_position, reg1, pos1),
        (val_sub, ":cur_y", 27),

### ALTIN VE DEMİR MADENİ ###
      (try_begin),
          (is_between, ":center_no", villages_begin, villages_end),
                (party_slot_eq, ":center_no", slot_center_has_gold_mine, 1),
  (party_slot_eq, ":center_no", slot_town_lord, "trp_player"),
  (str_store_party_name, s0, ":center_no"),
  (create_text_overlay, reg1, "@Rents from gold mine in {s0}: ", 0),
  (position_set_x, pos1, 900),
                (position_set_y, pos1, 900),
                (overlay_set_size, reg1, pos1),
                (position_set_x, pos1, 25),
                (position_set_y, pos1, ":cur_y"),
                (overlay_set_position, reg1, pos1),
                (party_get_slot, ":goldm_rent", ":center_no", slot_village_give_goldcoin),
            (try_begin),
                      (gt, ":goldm_rent", 0),
                      (assign, reg0, ":goldm_rent"),
                      (create_text_overlay, reg1, "@{!}{reg0}", tf_right_align|tf_single_line),
                      (overlay_set_color, reg1, 0x00AA00),
            (else_try),
                    (create_text_overlay, reg1, "@None", tf_right_align|tf_single_line),
          (try_end),
              (position_set_x, pos1, 900),
              (position_set_y, pos1, 900),
              (overlay_set_size, reg1, pos1),
              (position_set_x, pos1, 500),
              (position_set_y, pos1, ":cur_y"),
              (overlay_set_position, reg1, pos1),
              (val_sub, ":cur_y", 27),
        (try_end),
### ALTIN VE DEMİR MADENİ ###

        (try_begin),
          (is_between, ":center_no", towns_begin, towns_end),
          (create_text_overlay, reg1, "str_tariffs_from_s0", 0),

Madenlerimiz eklenmiştir, hayırlı olsun :smile:

AndyYa'nın paylaştığı oyun içi görüntülerde madenler:

Yönetim Ekranı
mb9_800.jpg

Haftalık Bütçe Hesaplaması
mb5.jpg

Tüccar ile Sohbet
mb10.jpg

Kullanım durumunda teşekkür edilmesi gerekenler:
AndyYa (Kod Sahibi)
Dragos (Çevirmen)
 
İyi günler, yeni bir ders ile karşınızdayım :smile:
Click here to look at the English thread.

Öncelikle şu linkteki dosyaları indirmemiz gerekiyor: İNDİR

Değiştireceğimiz dosyalar (Yedeklerini almanız önerilir):
1- module_scene_props.py
2- module_items.py

Öncelikle module_scene_props.py dosyasını açıyoruz ve şu kodları en alta ekliyoruz:
Code:
   ("labyrinth_corner",0,"labcorn","bo_labcorn", []),
   ("labyrinth_corner_sharp",0,"labcornsha","bo_labcornsha", []),
   ("labyrinth_crossing",0,"labcross","bo_labcross", []),
   ("labyrinth_6ways",0,"labcross6","bo_labcross6", []),
   ("labyrinth_room",0,"labend","bo_labend", []),
   ("labyrinth_stairs",0,"labstairs","bo_labstairs", []),
   ("labyrinth_way",0,"labway","bo_labway", []),

Daha sonra module_items.py dosyasını açıyoruz ve yine en alta şu kodları ekliyoruz:
Code:
["am_hammer",   "Magnus Hammer", [("am_hammer",0)], itp_type_two_handed_wpn|itp_merchandise| itp_two_handed|itp_primary|itp_bonus_against_shield|itp_wooden_parry|itp_unbalanced, itc_nodachi|itcf_carry_axe_back,
 90 , weight(5.5)|difficulty(10)|spd_rtng(90) | weapon_length(90)|swing_damage(38 , blunt) | thrust_damage(0 ,  blunt),imodbits_mace ],
Bu kod oyuna eklediğimiz çekicin ismini ve gücünü ayarladığımız yer, kod üzerinde oynayarak istediğiniz gibi değişiklik yapabilirsiniz.

Bu işlemleri yaptıktan sonra modül sistem klasöründen çıkıp modumuzun klasörüne, yani oyunumuzun kurulu olduğu yerde bulunan modules klasörü içindeki modlardan hangisine az önceki kodları eklediysek onun klasörüne giriyoruz ve oradaki module.ini metin belgesinin en altına şunu ekliyoruz:
Code:
load_mod_resource = OSP_AM_labyrinth

Daha sonra indirdiğimiz dosyalardan .brf uzantılı olanı modumuzun resource bölümüne, .dds uzantılı olanları ise texure bölümüne atıyoruz.

Bütün bu işlemler sonucunda bir adet çekicin yanı sıra oyun editörümüze şunlar eklenmiş olacak:
1- Way
2- Corner
3- Sharp Corner
4- Crossing
5- 6-way Crossing
6- Room
7- Stairs

Oyun editörünü kullanmak için öncelikle oyun simgesine ilk tıkladığımızda gelen ekrandan ayarlara girip editörü aktif etmemiz gerekiyor. Daha sonra oyun içinde herhangi bir şehir, kale veya köyün içerisindeyken CTRL+e ve alt+enter yaparak editöre ulaşabiliriz.

Artık oyununuza girerek istediğiniz şehir, kale veya köyde oyun editörünü kullanarak labirentinizi dilediğiniz gibi inşa edebilirsiniz.

Bu da the Dracaena Marginata modumda inşa ettiğim labirentlerden bir örnek:
jvA7nD.jpg

Edit: Dersin devamı gelecektir.

Kullanım durumunda teşekkür edilmesi gerekenler:
Albertus Magnus (Kod Sahibi)
Dragos (Çevirmen)
 
Merhaba, bu derste herhangi bir moda banka özelliği eklemeyi öğreneceğiz.
Click to look at the English thread.

Bu kodu kullanarak banka sistemi eklemeniz durumunda lonca başkanları ile konuşarak 1000 dinar karşılığında banka hesabı açabilir ve para yatırabilirsiniz. Paranız her hafta %10 artar.

1. module_constants.py

Aşağıdaki kodu herhangi bir yere yapıştırın.

Code:
slot_bank_money = 0

2. module_scripts.py

Şu kodu bulun:

Code:
#Warband changes begin -- set this early 
     (try_for_range, ":npc", 0, kingdom_ladies_end),
       (this_or_next|eq, ":npc", "trp_player"),
      (is_between, ":npc", active_npcs_begin, kingdom_ladies_end),
      (troop_set_slot, ":npc", slot_troop_father, -1),
      (troop_set_slot, ":npc", slot_troop_mother, -1),
      (troop_set_slot, ":npc", slot_troop_guardian, -1),
      (troop_set_slot, ":npc", slot_troop_spouse, -1),
      (troop_set_slot, ":npc", slot_troop_betrothed, -1),
        (troop_set_slot, ":npc", slot_troop_prisoner_of_party, -1),      
        (troop_set_slot, ":npc", slot_lady_last_suitor, -1),      
        (troop_set_slot, ":npc", slot_troop_stance_on_faction_issue, -1),      
      
      (store_random_in_range, ":decision_seed", 0, 10000),
        (troop_set_slot, ":npc", slot_troop_set_decision_seed, ":decision_seed"),   #currently not used
        (troop_set_slot, ":npc", slot_troop_temp_decision_seed, ":decision_seed"),   #currently not used, holds for at least 24 hours         
     (try_end),

Daha sonra altına şunu yapıştırın:

Code:
(troop_set_slot, "trp_player", slot_bank_money, 0),
     (assign, "$g_bank", 0),

3. module_dialogs.py

Şu diyaloğu bulun:

Code:
[anyone|plyr,"mayor_talk", [(store_partner_quest, ":partner_quest"),
                              (lt, ":partner_quest", 0),
                              (neq, "$merchant_quest_last_offerer", "$g_talk_troop")],
   "Do you happen to have a job for me?", "merchant_quest_requested",[
     (assign,"$merchant_quest_last_offerer", "$g_talk_troop"),
     (call_script, "script_get_quest", "$g_talk_troop"),
     (assign, "$random_merchant_quest_no", reg0),
     (assign,"$merchant_offered_quest","$random_merchant_quest_no"),
     ]],

Altına bunu yapıştırın:

Code:
[anyone|plyr,"mayor_talk", [],
   "I want to talk about bank.", "mayor_bank",[]],

[anyone,"mayor_bank", [(eq, "$g_bank", 0)],
   "Fine. It looks you don't have bank account yet. You must pay amount of 1000 denars to create bank account. You can make deposits and hand out money from bank. Your money will be 10% bigger every week.", "mayor_bank_1",[]],

[anyone,"mayor_bank", [(eq, "$g_bank", 1), (troop_get_slot, reg1, "trp_player", slot_bank_money)],
   "Actual balance of your bank account is {reg1} denars. What do you want to do?", "mayor_bank_3",[]],

[anyone|plyr,"mayor_bank_3", [(store_troop_gold, ":money", "trp_player"), (ge, ":money", 100)],
   "[Make a deposit of 100 denars]", "mayor_bank",[
   (troop_get_slot, reg1, "trp_player", slot_bank_money),
   (val_add, reg1, 100),
   (troop_set_slot, "trp_player", slot_bank_money, reg1),
   (troop_remove_gold, "trp_player", 100)]],

[anyone|plyr,"mayor_bank_3", [(store_troop_gold, ":money", "trp_player"), (ge, ":money", 1000)],
   "[Make a deposit of 1000 denars]", "mayor_bank",[
   (troop_get_slot, reg1, "trp_player", slot_bank_money),
   (val_add, reg1, 1000),
   (troop_set_slot, "trp_player", slot_bank_money, reg1),
   (troop_remove_gold, "trp_player", 1000)]],

[anyone|plyr,"mayor_bank_3", [(store_troop_gold, ":money", "trp_player"), (ge, ":money", 10000)],
   "[Make a deposit of 10000 denars]", "mayor_bank",[
   (troop_get_slot, reg1, "trp_player", slot_bank_money),
   (val_add, reg1, 10000),
   (troop_set_slot, "trp_player", slot_bank_money, reg1),
   (troop_remove_gold, "trp_player", 10000)]],

[anyone|plyr,"mayor_bank_3", [(troop_get_slot, reg1, "trp_player", slot_bank_money), (ge, reg1, 100)],
   "[Hand out 100 denars]", "mayor_bank",[
   (troop_get_slot, reg1, "trp_player", slot_bank_money),
   (val_add, reg1, -100),
   (troop_set_slot, "trp_player", slot_bank_money, reg1),
   (troop_add_gold, "trp_player", 100)]],

[anyone|plyr,"mayor_bank_3", [(troop_get_slot, reg1, "trp_player", slot_bank_money), (ge, reg1, 1000)],
   "[Hand out 1000 denars]", "mayor_bank",[
   (troop_get_slot, reg1, "trp_player", slot_bank_money),
   (val_add, reg1, -1000),
   (troop_set_slot, "trp_player", slot_bank_money, reg1),
   (troop_add_gold, "trp_player", 1000)]],

[anyone|plyr,"mayor_bank_3", [(troop_get_slot, reg1, "trp_player", slot_bank_money), (ge, reg1, 10000)],
   "[Hand out 10000 denars]", "mayor_bank",[
   (troop_get_slot, reg1, "trp_player", slot_bank_money),
   (val_add, reg1, -10000),
   (troop_set_slot, "trp_player", slot_bank_money, reg1),
   (troop_add_gold, "trp_player", 10000)]],

[anyone|plyr,"mayor_bank_3", [],
   "Nothing. I've only wanted to check balance of my account.", "mayor_pretalk",[]],    
   
[anyone|plyr,"mayor_bank_1", [(store_troop_gold, ":money", "trp_player"), (ge, ":money", 1000)],
   "Good! I want to create account. Here are my 1000 denars.", "mayor_bank_zalozenie",[(troop_remove_gold, "trp_player", 1000), (assign, "$g_bank", 1), (troop_set_slot, "trp_player", slot_bank_money, 1000), (display_message, "@Your bank account is now open.")]],

[anyone|plyr,"mayor_bank_1", [],
   "Ok, it's all I wanted to know. I don't have enough money.", "mayor_pretalk",[]],

[anyone,"mayor_bank_zalozenie", [],
   "Fine, your bank account is now open.", "mayor_pretalk",[]],

4. module_simple_triggers

En sondaki ] işaretinden önce şu kodu yapıştırın:

Code:
# Bank
  (24*7,
   [(eq, "$g_bank", 1),
   (try_begin),
   (troop_get_slot, ":current_money", "trp_player", slot_bank_money), 
   (assign,":income",":current_money"),
   (val_div,":income",10),
   (val_add,":current_money",":income"),
   (troop_set_slot, "trp_player", slot_bank_money, ":current_money"),
   (assign, reg1, ":income"),
   (try_end),
   (try_begin),
   (troop_get_slot, reg2, "trp_player", slot_bank_money),
   (display_message, "@{reg1} denars added to bank.", 0x2EFEF7),
   (display_message, "@Balance is now {reg2} denars.", 0x2EFEF7),
   (try_end),   
    ]),

Lütfen sadece kopyala yapıştır yapmayın, kodu kendinize göre düzenlemeye çalışın. Böylece hem kendinizi geliştirebilecek bir şeyler öğrenebilir hem de banka sistemini modunuza özel bir hale getirebilirsiniz. Zaten diyaloglar vs her şey İngilizce şu anda, bilerek ellemedim. Birazcık kurcalayın :smile:

Teşekkür edilmesi gereken kişiler:
Masterancza
fladin
Dragos

Edit:
dragos said:
Youtube'da uv mapping ilgili basit düzeyde Türkçe bir videoya hiç denk gelmediğim için çok çok amatör olarak şöyle bir video hazırladım, en azından kaplama yapmak isteyen ama İngilizce bilmeyen arkadaşlara bir nebze olsun fikir verir diye umuyorum.

 
karaoğlan said:
bankayı dediğin gibi yapıyom menuye gelmiyo dragos lütfen yardım et

menüye değil lonaca başkanına geliyo. abi çok sol uzun zamandır arıyordum.
 
Back
Top Bottom