Mount&Blade Ders Haritası (Grup Büyüklüğünü Değiştirme)

Users who are viewing this thread

Evet arkadaşlar bu dersimizde oyunda var olan kitap okuma sistemini baştan aşağı değiştireceğiz. Aynı zamanda bir çok yeni kitap ekleyecek ve o kitaplara istediğimiz özellikleri verebileceğiz. Ayrıca limitlerde koyabileceğiz.

Bu dersimizde yapacaklarımızı sıralamam gerekirse;
  • Yeni kitaplar ekleyeceğiz.
  • Her kitaba slot tanımlayacağız.
  • Okuma yeteneği ekleyeceğiz.
  • Menüdeki okuma seçeneğine eklemeler yapacağız.
  • Kitaplara extra text ekleyeceğiz.
  • Kitap satıcılarına otomatik güncelleme.
  • Gezginlere kitap satıcılarını sorabileceiz.

Değiştireceğimiz dosyalar;
Code:
header_skills.py
module_constants.py
module_items.py
module_scripts.py
module_skills.py
module_game_menus.py
module_dialogs.py
module_simple_triggers.py
module_triggers.py

Değiştirilecek dil dosyaları;
Code:
skills.csv
dialogs.csv
quick_strings.csv
item_kinds.csv

Düzenlemeye başlamadan önce yedek almayı unutmayınız.

Evet ilk olarak okuma sistemini yazmadan önce okuma yeteneğimizi kodlayalım. Module_skills.py dosyasını açıyoruz ve şu satırı buluyoruz;

Code:
  ("reserved_5","Reserved Skill 5",sf_base_att_int|sf_inactive,10,"This is a reserved skill."),

Bununla değiştiriyoruz;

Code:
  ("reading", "Reading", sf_base_att_int, 10, "Every level of this skill reduces the time of reading book by 5%%."),

"reading" kısmı yeteneğimizin benzersiz ismidir yani skl_reading.
"Reading" skillin oyunda görüneceği isimdir. (Dil dosyasından değiştirilebilir.)
sf_base_att_int yeteneğimizin int yani intelligence (zeka) tabanlı olmasını sağladık. (Brada bir üste dikkat ederseniz sf_inactive bölümünü kaldırdık, çünkü kaldırmazsak eğer, yetenek oyunda görünmez.)
10 yeteneğin en fazla kaça kadar yükseleceğini gösterir.
"Every level of this skill reduces the time of reading book by 5%%." Burada skill açıklamasına "bu yeteneğin her bir seviyesi kitap okuma süresini %%5 düşürür." dedik.

Dikkat: Eğer burada reserved_5 yerine başka bir yeteneği değiştirdiyseniz, header_skills.py de ona göre değişiklikler yapmanız gerekecektir.

Bu dosyayı kayıt edip çıkıyoruz.

Yeteneğimizi tanımlamak için 2. ve son adıma geçiyoruz. Header_skills.py dosyasını açıyoruz ve şu satırı buluyoruz;

Code:
skl_reserved_5 = 18

Bu satırı bununla değiştiriyoruz;

Code:
skl_reading = 18

Burada skl_reading tanımının 18. yani bizim üst tarafta tanımladığımız "reading" e eşit olmasını sağladık. Eğer 0 dan başlatıp sırayla yetenekleri sayarsanız 18. yeteneğin "reading" yada önceki adı ile "reserved_5" e denk geldiğini göreceksiniz.

Aynı dosya içerisinde şu satırları bulalım;

Code:
knows_reserved_5_1 = 4722366482869645213696
knows_reserved_5_2 = 9444732965739290427392
knows_reserved_5_3 = 14167099448608935641088
knows_reserved_5_4 = 18889465931478580854784
knows_reserved_5_5 = 23611832414348226068480
knows_reserved_5_6 = 28334198897217871282176
knows_reserved_5_7 = 33056565380087516495872
knows_reserved_5_8 = 37778931862957161709568
knows_reserved_5_9 = 42501298345826806923264
knows_reserved_5_10 = 47223664828696452136960

Dikkat çekmek istiyorum, biz reserved_5 üzerinde değişiklik yaptığımız için knows_reserved_5 tanımlarını kullanıyoruz. Siz başka bir yetenek seçtiyseniz onu kullanmalısınız.

Bu satırları alttaki ile değişiyoruz;

Code:
knows_reading_1 = 4722366482869645213696
knows_reading_2 = 9444732965739290427392
knows_reading_3 = 14167099448608935641088
knows_reading_4 = 18889465931478580854784
knows_reading_5 = 23611832414348226068480
knows_reading_6 = 28334198897217871282176
knows_reading_7 = 33056565380087516495872
knows_reading_8 = 37778931862957161709568
knows_reading_9 = 42501298345826806923264
knows_reading_10 = 47223664828696452136960

Burada artık reading (okuma) yeteneğimizi ekledik. Dosyayı kayıt edip çıkıyoruz.

Şimdi öncelikle yeni sistemde kullanacağımız slotları tanımlayalım... Module_constants.py dosyasını açıyoruz ve bu satırı buluyoruz;

Code:
slot_item_multiplayer_availability_linked_list_begin = 61 #temporary, can be moved to higher values

Hemen altına şunları ekliyoruz;

Code:
slot_item_book_raise_skill              = 100
slot_item_book_raise_skill_level        = 101
slot_item_book_raise_skill_limit        = 102
slot_item_book_raise_attribute          = 103
slot_item_book_raise_attribute_level    = 104
slot_item_book_raise_attribute_limit    = 105
slot_item_book_raise_proficiency        = 106
slot_item_book_raise_proficiency_level  = 107
slot_item_book_raise_proficiency_limit  = 108

Burada kitaplar için, skill (yetenek), attribute (özellik), proficiency (beceri) slotları tanımladık. "_level" ekleri ne kadar getirisi olacağı, "_limit" ekleri ise en fazla kaça kadar çıkacağını gösterir.

Yani basitce açıklamak gerekirse kodda şöyle tanımladığımız bir kitabı düşünelim;
Code:
(item_set_slot, "itm_book", slot_item_intelligence_requirement, 9),
(item_set_slot, "itm_book", slot_item_book_raise_skill, skl_reading),
(item_set_slot, "itm_book", slot_item_book_raise_skill_level, 2),
(item_set_slot, "itm_book", slot_item_book_raise_skill_limit, 5),

Code:
(item_set_slot, "itm_book", slot_item_intelligence_requirement, 9),
Bu kısım kitabın okunması için gereken en düşük zeka seviyesini gösterir. Biz burada 9 tanımladık.

Code:
(item_set_slot, "itm_book", slot_item_book_raise_skill, skl_reading),
Bu kısım kitabın yükselteceği skill'i gösterir. Biz burada skl_reading yani okuma yeteneğini yükseltmek istedik. "slot_item_book_raise_skill, skl_reading" yerine "slot_item_book_raise_attribute, ca_intelligence" demiş olsaydık burada zeka özelliğini yükseltmesini sağlardık. skill yerine attribute kullanmışsak bir altındaki skill_level, skill_limit kısımlarınıda attribute_level attribute_limit şeklinde değiştirmek gerekir.

Code:
(item_set_slot, "itm_book", slot_item_book_raise_skill_level, 2),
Burada bir önceden tanımladığımız skl_reading yeteneğine kitabı okuyunca +kaç ekleyeceğini gösterir. Biz burada 2 tanımladık buda bu kitabı okuyunca skl_reading yeteneğimizin +2 artacağını gösterir.

Code:
(item_set_slot, "itm_book", slot_item_book_raise_skill_limit, 5),
Bu kısım ise bu kitabı okuyarak yine slot_item_book_raise_skill kısmında belirlediğimiz yeteneğin en fazla kaça kadar yükselebileceğini gösterir. Buradaki durumda ise eğer reading yeteneğimiz +4 ise bir önceki seçenekte +2 arttırdığımız için +6 olacağını düşünebilirsiniz ancak limite göre kodlayacağımız için +4 den en fazla +5 e çıkacaktır. Yani bir önceki yeteneğin +2 yeteneği otomatik olarak devre dışı kalacaktır. Aynı zamanda kitap okumadan önce zaten limitin üstünde bir yeteneğiniz varsa, hiç bir kazanç sağlamayacaktır.

Buna ek olarak bir kitaba aynı zamanda yetenek, özellik ve beceri arttırması verebilirsiniz. Örneğin;

Code:
(item_set_slot, "itm_book", slot_item_intelligence_requirement, 17),
(item_set_slot, "itm_book", slot_item_book_raise_skill, skl_power_throw),
(item_set_slot, "itm_book", slot_item_book_raise_skill_level, 2),
(item_set_slot, "itm_book", slot_item_book_raise_skill_limit, 10),
(item_set_slot, "itm_book", slot_item_book_raise_attribute, ca_agility),
(item_set_slot, "itm_book", slot_item_book_raise_attribute_level, 2),
(item_set_slot, "itm_book", slot_item_book_raise_attribute_limit, 35),
(item_set_slot, "itm_book", slot_item_book_raise_proficiency, wpt_throwing),
(item_set_slot, "itm_book", slot_item_book_raise_proficiency_level, 15),
(item_set_slot, "itm_book", slot_item_book_raise_proficiency_limit, 420),

Evet öncelikle yeni kitaplarımızı ekleyelim, bunun içinde module_items.py dosyasını açıp şu satırı bulalım;

Code:
 ["book_engineering","Method of Mechanical Theorems", [("book_open",0)], itp_type_book, 0, 4000,weight(2)|abundance(100),imodbits_none],

Hemen altına şunları ekleyelim;

Code:
#New Books
 ["book_spotting", "Improve Your Range", [("book_a",0)], itp_type_book, 0, 2450,
  weight(2)|abundance(100), imodbits_none],
 ["book_pathfinding", "Fast Travel on Calradia", [("book_f",0)], itp_type_book, 0, 2450,
  weight(2)|abundance(100), imodbits_none],
 ["book_inventory_management", "How to Carry More Items", [("book_open",0)], itp_type_book, 0, 3050,
  weight(2)|abundance(100), imodbits_none],
 ["book_prisoner_management", "Catching Fire", [("book_e",0)], itp_type_book, 0, 2090,
  weight(2)|abundance(100), imodbits_none],
 ["book_athletics", "Become a Athlete", [("book_open",0)], itp_type_book, 0, 1890,
  weight(2)|abundance(100), imodbits_none],
 ["book_looting", "Spoils of War", [("book_c",0)], itp_type_book, 0, 2590,
  weight(2)|abundance(100), imodbits_none],
 ["book_ironflesh", "Ironman", [("book_c",0)], itp_type_book, 0, 2590,
  weight(2)|abundance(100), imodbits_none],

#Series
 ["book_first_aid", "Emergency Treatment: First Aid", [("book_c",0)], itp_type_book, 0, 2250,
  weight(2)|abundance(100), imodbits_none],
 ["book_surgery", "Emergency Treatment: Surgery", [("book_c",0)], itp_type_book, 0, 2750,
  weight(2)|abundance(100), imodbits_none],
 ["book_wound_treatment", "Emergency Treatment: Wound Treatment", [("book_c",0)], itp_type_book, 0, 1940,
  weight(2)|abundance(100), imodbits_none],

 ["book_horse_archery", "Horse Riding: Archery on Horse", [("book_a",0)], itp_type_book, 0, 3250,
  weight(2)|abundance(100), imodbits_none],
 ["book_riding", "Horse Riding: Ride a Better Horse", [("book_a",0)], itp_type_book, 0, 2550,
  weight(2)|abundance(100), imodbits_none],

 ["book_power_strike", "Weapon Training: Strong Damage", [("book_d",0)], itp_type_book, 0, 2250,
  weight(2)|abundance(100), imodbits_none],
 ["book_power_strike_2", "Weapon Training: Using a Two Handed Weapon", [("book_d",0)], itp_type_book, 0, 2550,
  weight(2)|abundance(100), imodbits_none],
 ["book_power_throw", "Weapon Training: Throwing Weapons", [("book_d",0)], itp_type_book, 0, 2750,
  weight(2)|abundance(100), imodbits_none],
 ["book_power_draw", "Weapon Training: Being a Good Archer", [("book_d",0)], itp_type_book, 0, 2150,
  weight(2)|abundance(100), imodbits_none],
 ["book_power_draw_2", "Weapon Training: Using a Crossbow", [("book_d",0)], itp_type_book, 0, 2550,
  weight(2)|abundance(100), imodbits_none],
 ["book_shield", "Weapon Training: Block the Attack", [("book_d",0)], itp_type_book, 0, 2130,
  weight(2)|abundance(100), imodbits_none],

Burada yeni kitaplar ekledik, hepsini tek tek açıklamaya gerek yok kalkan kitabını tanımlayalım.

Code:
 ["book_shield", "Weapon Training: Block the Attack", [("book_d",0)], itp_type_book, 0, 2130,
  weight(2)|abundance(100), imodbits_none],

"book_shield" kısmı kitabımızın benzersiz id kısmı. (itm_book_shield)
"Weapon Training: Block the Attack" Kitabın ismi.
[("book_d", 0)] burada book_d kısmı kitabın oyundaki görünüş şeklidir.
itp_type_book kısmı ise bunun bir kitap olduğunu gösterir.
2130 kısmı ise satış fiyatını gösterir. Ancak sanırım satış sırasında oyun ek olarak belli bir yüzde ekliyor bu ücrete.
weight(2) kitabın ağırlığı.

Bu dosyadada işimiz bitti kayıt edip çıkalım.

Artık kitaplarımıza slotları tanımlayalım. Module_scripts.py dosyasını açalım ve bu satırları bulalım;

Code:
      # Setting book intelligence requirements
      (item_set_slot, "itm_book_tactics", slot_item_intelligence_requirement, 9),
      (item_set_slot, "itm_book_persuasion", slot_item_intelligence_requirement, 8),
      (item_set_slot, "itm_book_leadership", slot_item_intelligence_requirement, 7),
      (item_set_slot, "itm_book_intelligence", slot_item_intelligence_requirement, 10),
      (item_set_slot, "itm_book_trade", slot_item_intelligence_requirement, 11),
      (item_set_slot, "itm_book_weapon_mastery", slot_item_intelligence_requirement, 9),
      (item_set_slot, "itm_book_engineering", slot_item_intelligence_requirement, 12),

Alttaki ile değiştirin;

Code:
      # Setting book intelligence requirements
      (item_set_slot, "itm_book_tactics", slot_item_intelligence_requirement, 9),
      (item_set_slot, "itm_book_tactics", slot_item_book_raise_skill, skl_tactics),
      (item_set_slot, "itm_book_tactics", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_tactics", slot_item_book_raise_skill_limit, 5),
      
      (item_set_slot, "itm_book_persuasion", slot_item_intelligence_requirement, 10),
      (item_set_slot, "itm_book_persuasion", slot_item_book_raise_skill, skl_persuasion),
      (item_set_slot, "itm_book_persuasion", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_persuasion", slot_item_book_raise_skill_limit, 6),

      (item_set_slot, "itm_book_leadership", slot_item_intelligence_requirement, 8),
      (item_set_slot, "itm_book_leadership", slot_item_book_raise_skill, skl_leadership),
      (item_set_slot, "itm_book_leadership", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_leadership", slot_item_book_raise_skill_limit, 7),
      (item_set_slot, "itm_book_leadership", slot_item_book_raise_attribute, ca_charisma),
      (item_set_slot, "itm_book_leadership", slot_item_book_raise_attribute_level, 2),
      (item_set_slot, "itm_book_leadership", slot_item_book_raise_attribute_limit, 25),
      
      (item_set_slot, "itm_book_intelligence", slot_item_intelligence_requirement, 10),
      (item_set_slot, "itm_book_intelligence", slot_item_book_raise_attribute, ca_intelligence),
      (item_set_slot, "itm_book_intelligence", slot_item_book_raise_attribute_level, 1),
      (item_set_slot, "itm_book_intelligence", slot_item_book_raise_attribute_limit, 20),

      (item_set_slot, "itm_book_trade", slot_item_intelligence_requirement, 11),
      (item_set_slot, "itm_book_trade", slot_item_book_raise_skill, skl_leadership),
      (item_set_slot, "itm_book_trade", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_trade", slot_item_book_raise_skill_limit, 7),
      
      (item_set_slot, "itm_book_weapon_mastery", slot_item_intelligence_requirement, 12),
      (item_set_slot, "itm_book_weapon_mastery", slot_item_book_raise_skill, skl_weapon_master),
      (item_set_slot, "itm_book_weapon_mastery", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_weapon_mastery", slot_item_book_raise_skill_limit, 7),
      (item_set_slot, "itm_book_weapon_mastery", slot_item_book_raise_proficiency, wpt_one_handed_weapon),
      (item_set_slot, "itm_book_weapon_mastery", slot_item_book_raise_proficiency_level, 15),
      (item_set_slot, "itm_book_weapon_mastery", slot_item_book_raise_proficiency_limit, 250),

      (item_set_slot, "itm_book_engineering", slot_item_intelligence_requirement, 14),
      (item_set_slot, "itm_book_engineering", slot_item_book_raise_skill, skl_engineer),
      (item_set_slot, "itm_book_engineering", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_engineering", slot_item_book_raise_skill_limit, 8),

      (item_set_slot, "itm_book_spotting", slot_item_intelligence_requirement, 12),
      (item_set_slot, "itm_book_spotting", slot_item_book_raise_skill, skl_spotting),
      (item_set_slot, "itm_book_spotting", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_spotting", slot_item_book_raise_skill_limit, 5),

      (item_set_slot, "itm_book_pathfinding", slot_item_intelligence_requirement, 16),
      (item_set_slot, "itm_book_pathfinding", slot_item_book_raise_skill, skl_pathfinding),
      (item_set_slot, "itm_book_pathfinding", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_pathfinding", slot_item_book_raise_skill_limit, 9),

      (item_set_slot, "itm_book_inventory_management", slot_item_intelligence_requirement, 20),
      (item_set_slot, "itm_book_inventory_management", slot_item_book_raise_skill, skl_inventory_management),
      (item_set_slot, "itm_book_inventory_management", slot_item_book_raise_skill_level, 2),
      (item_set_slot, "itm_book_inventory_management", slot_item_book_raise_skill_limit, 10),

      (item_set_slot, "itm_book_prisoner_management", slot_item_intelligence_requirement, 18),
      (item_set_slot, "itm_book_prisoner_management", slot_item_book_raise_skill, skl_prisoner_management),
      (item_set_slot, "itm_book_prisoner_management", slot_item_book_raise_skill_level, 2),
      (item_set_slot, "itm_book_prisoner_management", slot_item_book_raise_skill_limit, 8),
      (item_set_slot, "itm_book_prisoner_management", slot_item_book_raise_attribute, ca_charisma),
      (item_set_slot, "itm_book_prisoner_management", slot_item_book_raise_attribute_level, 1),
      (item_set_slot, "itm_book_prisoner_management", slot_item_book_raise_attribute_limit, 30),

      (item_set_slot, "itm_book_athletics", slot_item_intelligence_requirement, 10),
      (item_set_slot, "itm_book_athletics", slot_item_book_raise_skill, skl_athletics),
      (item_set_slot, "itm_book_athletics", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_athletics", slot_item_book_raise_skill_limit, 7),

      (item_set_slot, "itm_book_looting", slot_item_intelligence_requirement, 12),
      (item_set_slot, "itm_book_looting", slot_item_book_raise_skill, skl_looting),
      (item_set_slot, "itm_book_looting", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_looting", slot_item_book_raise_skill_limit, 8),

      (item_set_slot, "itm_book_ironflesh", slot_item_intelligence_requirement, 15),
      (item_set_slot, "itm_book_ironflesh", slot_item_book_raise_skill, skl_ironflesh),
      (item_set_slot, "itm_book_ironflesh", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_ironflesh", slot_item_book_raise_skill_limit, 8),
      (item_set_slot, "itm_book_ironflesh", slot_item_book_raise_attribute, ca_strength),
      (item_set_slot, "itm_book_ironflesh", slot_item_book_raise_attribute_level, 3),
      (item_set_slot, "itm_book_ironflesh", slot_item_book_raise_attribute_limit, 25),
      
      (item_set_slot, "itm_book_first_aid", slot_item_intelligence_requirement, 16),
      (item_set_slot, "itm_book_first_aid", slot_item_book_raise_skill, skl_first_aid),
      (item_set_slot, "itm_book_first_aid", slot_item_book_raise_skill_level, 2),
      (item_set_slot, "itm_book_first_aid", slot_item_book_raise_skill_limit, 10),

      (item_set_slot, "itm_book_surgery", slot_item_intelligence_requirement, 16),
      (item_set_slot, "itm_book_surgery", slot_item_book_raise_skill, skl_surgery),
      (item_set_slot, "itm_book_surgery", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_surgery", slot_item_book_raise_skill_limit, 6),
      (item_set_slot, "itm_book_surgery", slot_item_book_raise_attribute, ca_intelligence),
      (item_set_slot, "itm_book_surgery", slot_item_book_raise_attribute_level, 2),
      (item_set_slot, "itm_book_surgery", slot_item_book_raise_attribute_limit, 32),

      (item_set_slot, "itm_book_wound_treatment", slot_item_intelligence_requirement, 15),
      (item_set_slot, "itm_book_wound_treatment", slot_item_book_raise_skill, skl_wound_treatment),
      (item_set_slot, "itm_book_wound_treatment", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_wound_treatment", slot_item_book_raise_skill_limit, 8),
      (item_set_slot, "itm_book_wound_treatment", slot_item_book_raise_attribute, ca_intelligence),
      (item_set_slot, "itm_book_wound_treatment", slot_item_book_raise_attribute_level, 1),
      (item_set_slot, "itm_book_wound_treatment", slot_item_book_raise_attribute_limit, 35),

      (item_set_slot, "itm_book_horse_archery", slot_item_intelligence_requirement, 13),
      (item_set_slot, "itm_book_horse_archery", slot_item_book_raise_skill, skl_horse_archery),
      (item_set_slot, "itm_book_horse_archery", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_horse_archery", slot_item_book_raise_skill_limit, 8),
      (item_set_slot, "itm_book_horse_archery", slot_item_book_raise_proficiency, wpt_archery),
      (item_set_slot, "itm_book_horse_archery", slot_item_book_raise_proficiency_level, 15),
      (item_set_slot, "itm_book_horse_archery", slot_item_book_raise_proficiency_limit, 300),

      (item_set_slot, "itm_book_riding", slot_item_intelligence_requirement, 10),
      (item_set_slot, "itm_book_riding", slot_item_book_raise_skill, skl_riding),
      (item_set_slot, "itm_book_riding", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_riding", slot_item_book_raise_skill_limit, 6),

      (item_set_slot, "itm_book_power_strike", slot_item_intelligence_requirement, 14),
      (item_set_slot, "itm_book_power_strike", slot_item_book_raise_skill, skl_power_strike),
      (item_set_slot, "itm_book_power_strike", slot_item_book_raise_skill_level, 2),
      (item_set_slot, "itm_book_power_strike", slot_item_book_raise_skill_limit, 8),
      (item_set_slot, "itm_book_power_strike", slot_item_book_raise_proficiency, wpt_one_handed_weapon),
      (item_set_slot, "itm_book_power_strike", slot_item_book_raise_proficiency_level, 15),
      (item_set_slot, "itm_book_power_strike", slot_item_book_raise_proficiency_limit, 400),

      (item_set_slot, "itm_book_power_strike_2", slot_item_intelligence_requirement, 16),
      (item_set_slot, "itm_book_power_strike_2", slot_item_book_raise_skill, skl_power_strike),
      (item_set_slot, "itm_book_power_strike_2", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_power_strike_2", slot_item_book_raise_skill_limit, 8),
      (item_set_slot, "itm_book_power_strike_2", slot_item_book_raise_proficiency, wpt_two_handed_weapon),
      (item_set_slot, "itm_book_power_strike_2", slot_item_book_raise_proficiency_level, 25),
      (item_set_slot, "itm_book_power_strike_2", slot_item_book_raise_proficiency_limit, 450),

      (item_set_slot, "itm_book_power_throw", slot_item_intelligence_requirement, 17),
      (item_set_slot, "itm_book_power_throw", slot_item_book_raise_skill, skl_power_throw),
      (item_set_slot, "itm_book_power_throw", slot_item_book_raise_skill_level, 2),
      (item_set_slot, "itm_book_power_throw", slot_item_book_raise_skill_limit, 10),
      (item_set_slot, "itm_book_power_throw", slot_item_book_raise_attribute, ca_agility),
      (item_set_slot, "itm_book_power_throw", slot_item_book_raise_attribute_level, 2),
      (item_set_slot, "itm_book_power_throw", slot_item_book_raise_attribute_limit, 35),
      (item_set_slot, "itm_book_power_throw", slot_item_book_raise_proficiency, wpt_throwing),
      (item_set_slot, "itm_book_power_throw", slot_item_book_raise_proficiency_level, 15),
      (item_set_slot, "itm_book_power_throw", slot_item_book_raise_proficiency_limit, 420),

      (item_set_slot, "itm_book_power_draw", slot_item_intelligence_requirement, 12),
      (item_set_slot, "itm_book_power_draw", slot_item_book_raise_skill, skl_power_draw),
      (item_set_slot, "itm_book_power_draw", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_power_draw", slot_item_book_raise_skill_limit, 6),
      (item_set_slot, "itm_book_power_draw", slot_item_book_raise_attribute, ca_agility),
      (item_set_slot, "itm_book_power_draw", slot_item_book_raise_attribute_level, 1),
      (item_set_slot, "itm_book_power_draw", slot_item_book_raise_attribute_limit, 25),
      (item_set_slot, "itm_book_power_draw", slot_item_book_raise_proficiency, wpt_archery),
      (item_set_slot, "itm_book_power_draw", slot_item_book_raise_proficiency_level, 10),
      (item_set_slot, "itm_book_power_draw", slot_item_book_raise_proficiency_limit, 370),

      (item_set_slot, "itm_book_power_draw_2", slot_item_intelligence_requirement, 14),
      (item_set_slot, "itm_book_power_draw_2", slot_item_book_raise_skill, skl_power_draw),
      (item_set_slot, "itm_book_power_draw_2", slot_item_book_raise_skill_level, 2),
      (item_set_slot, "itm_book_power_draw_2", slot_item_book_raise_skill_limit, 10),
      (item_set_slot, "itm_book_power_draw_2", slot_item_book_raise_attribute, ca_agility),
      (item_set_slot, "itm_book_power_draw_2", slot_item_book_raise_attribute_level, 2),
      (item_set_slot, "itm_book_power_draw_2", slot_item_book_raise_attribute_limit, 30),
      (item_set_slot, "itm_book_power_draw_2", slot_item_book_raise_proficiency, wpt_crossbow),
      (item_set_slot, "itm_book_power_draw_2", slot_item_book_raise_proficiency_level, 15),
      (item_set_slot, "itm_book_power_draw_2", slot_item_book_raise_proficiency_limit, 425),

      (item_set_slot, "itm_book_shield", slot_item_intelligence_requirement, 17),
      (item_set_slot, "itm_book_shield", slot_item_book_raise_skill, skl_shield),
      (item_set_slot, "itm_book_shield", slot_item_book_raise_skill_level, 1),
      (item_set_slot, "itm_book_shield", slot_item_book_raise_skill_limit, 8),
      (item_set_slot, "itm_book_shield", slot_item_book_raise_attribute, ca_strength),
      (item_set_slot, "itm_book_shield", slot_item_book_raise_attribute_level, 3),
      (item_set_slot, "itm_book_shield", slot_item_book_raise_attribute_limit, 45),

Burada kitapların hangi yetenekleri, özellikleri ve beceri geliştireceğini tanımladık. Nasıl çalıştığını üstte nasıl çalıştığını anlatmıştım, o yüzden tekrar açıklamayacağım.

Aynı dosya içerisinde şu satırları bulalım;

Code:
        (is_between, ":item_no", readable_books_begin, readable_books_end),
        (try_begin),
          (eq, ":extra_text_id", 0),
          (item_get_slot, reg1, ":item_no", slot_item_intelligence_requirement),
          (set_result_string, "@Requires {reg1} intelligence to read"),
          (set_trigger_result, 0xFFEEDD),
        (else_try),
          (eq, ":extra_text_id", 1),
          (item_get_slot, ":progress", ":item_no", slot_item_book_reading_progress),
          (val_div, ":progress", 10),
          (assign, reg1, ":progress"),
          (set_result_string, "@Reading Progress: {reg1}%"),
          (set_trigger_result, 0xFFEEDD),
        (try_end),

Bununla değiştirelim;

Code:
         (is_between, ":item_no", readable_books_begin, readable_books_end),
          (try_begin),
              (eq, ":extra_text_id", 0),
              (item_get_slot, reg1, ":item_no", slot_item_intelligence_requirement),
              (set_result_string, "@Requires {reg1} intelligence to read"),
              (set_trigger_result, 0xFFEEDD),
          (else_try),
              (eq, ":extra_text_id", 1),
              (item_get_slot, ":progress", ":item_no", slot_item_book_reading_progress),

              (store_skill_level, ":reading", skl_reading, "trp_player"),
              (val_mul, ":reading", 50),
              (store_sub, ":reading_end", 1000, ":reading"),
              (val_mul, ":progress", 100),
              (val_div, ":progress", ":reading_end"),


              (try_begin),
                  (gt, ":progress", 100),
                  (assign, ":progress", 100),
              (try_end),
      
              (assign, reg1, ":progress"),
              (set_result_string, "@Reading Progress: {reg1}%"),
              (set_trigger_result, 0xFFEEDD),
          (else_try),
              (eq, ":extra_text_id", 2),
              (item_get_slot, reg10, ":item_no", slot_item_book_raise_skill),
              (item_get_slot, reg11, ":item_no", slot_item_book_raise_skill_level),
              (item_get_slot, reg12, ":item_no", slot_item_book_raise_skill_limit),
              (ge, reg10, 0),
              (gt, reg11, 0),

              (try_begin),
                  (le, reg12, 0),
                  (assign, reg12, 10),
              (try_end),
      
              (assign, ":cont", 0),
              (call_script, "script_get_skill_name", reg10),
              (store_skill_level, ":skill_no", reg10),
              (try_begin),
                  (ge, ":skill_no", reg12),
#                  (set_result_string, "@Your {s2} skill too high to read this book."),
#                  (set_trigger_result, 0xFF0000),
                  (assign, ":cont", 1),
              (else_try),
                  (store_sub, ":skill_dif", reg12, ":skill_no"),
                  (gt, reg11, ":skill_dif"),
                  (item_set_slot, ":item_no", slot_item_book_raise_skill_level, ":skill_dif"),
                  (assign, reg11, ":skill_dif"),
              (try_end),
              (eq, ":cont", 0),
              (set_result_string, "@+{reg11} to {s2} skill (Max {s2}: {reg12})"),
              (set_trigger_result, 0x4444FF),
          (else_try),
              (eq, ":extra_text_id", 3),
              (item_get_slot, reg10, ":item_no", slot_item_book_raise_attribute),
              (item_get_slot, reg11, ":item_no", slot_item_book_raise_attribute_level),
              (item_get_slot, reg12, ":item_no", slot_item_book_raise_attribute_limit),
              (ge, reg10, 0),
              (gt, reg11, 0),

              (try_begin),
                  (le, reg12, 0),
                  (assign, reg12, 63),
              (try_end),
      
              (assign, ":cont", 0),
              (call_script, "script_get_attribute_name", reg10),
              (store_attribute_level, ":attribute_no", "trp_player", reg10),
              (try_begin),
                  (ge, ":attribute_no", reg12),
#                  (set_result_string, "@Your {s2} attribute too high to read this book."),
#                  (set_trigger_result, 0xFF0000),
                  (assign, ":cont", 1),
              (else_try),
                  (store_sub, ":attribute_dif", reg12, ":attribute_no"),
                  (gt, reg11, ":attribute_dif"),
                  (item_set_slot, ":item_no", slot_item_book_raise_attribute_level, ":attribute_dif"),
                  (assign, reg11, ":attribute_dif"),
              (try_end),
              (eq, ":cont", 0),
              (set_result_string, "@+{reg11} to {s2} attribute (Max {s2}: {reg12})"),
              (set_trigger_result, 0xFF00FF),
          (else_try),
              (eq, ":extra_text_id", 4),
              (item_get_slot, reg10, ":item_no", slot_item_book_raise_proficiency),
              (item_get_slot, reg11, ":item_no", slot_item_book_raise_proficiency_level),
              (item_get_slot, reg12, ":item_no", slot_item_book_raise_proficiency_limit),
              (ge, reg10, 0),
              (gt, reg11, 0),

              (try_begin),
                  (le, reg12, 0),
                  (assign, reg12, 600),
              (try_end),
      
              (assign, ":cont", 0),
              (call_script, "script_get_proficiency_name", reg10),
              (store_proficiency_level, ":proficiency_no", "trp_player", reg10),
              (try_begin),
                  (ge, ":proficiency_no", reg12),
#                  (set_result_string, "@Your {s2} proficiency too high to read this book."),
#                  (set_trigger_result, 0xFF0000),
                  (assign, ":cont", 1),
              (else_try),
                  (store_sub, ":proficiency_dif", reg12, ":proficiency_no"),
                  (gt, reg11, ":proficiency_dif"),
                  (item_set_slot, ":item_no", slot_item_book_raise_proficiency_level, ":proficiency_dif"),
                  (assign, reg11, ":proficiency_dif"),
              (try_end),
              (eq, ":cont", 0),
              (set_result_string, "@+{reg11} to {s2} proficiency (Max {s2}: {reg12})"),
              (set_trigger_result, 0x00FF00),
          (try_end),

Burada kitabın üzerine gelindiğinde kitabın vereceği yetenekleri gösterecektir.

Dersin devamı bir sonraki mesajda...
 
Aynı dosya içerisinde şu satırları bulalım;
Code:
  #script_game_on_disembark:
  # This script is called from the game engine when the player reaches the shore with a ship.
  # INPUT: pos0 = disembark position
  # OUTPUT: none
  ("game_on_disembark",
   [(jump_to_menu, "mnu_disembark"),
  ]),

Hemen üst sıraya şu kodları ekleyelim;

Code:
  ("get_proficiency_name", [
      (store_script_param, ":input", 1),
      (try_begin),
          (eq, ":input", 0),
          (str_store_string, s2, "@One Handed Weapon"),
      (else_try),
          (eq, ":input", 1),
          (str_store_string, s2, "@Two Handed Weapon"),
      (else_try),
          (eq, ":input", 2),
          (str_store_string, s2, "@Polearm"),
      (else_try),
          (eq, ":input", 3),
          (str_store_string, s2, "@Archery"),
      (else_try),
          (eq, ":input", 4),
          (str_store_string, s2, "@Crossbow"),
      (else_try),
          (eq, ":input", 5),
          (str_store_string, s2, "@Throwing"),
      (else_try),
          (eq, ":input", 6),
          (str_store_string, s2, "@Firearm"),
      (else_try),
          (str_store_string, s2, "@DEBUG: Unknown Proficiency"),
      (end_try),
    ]),

  ("get_attribute_name", [
      (store_script_param, ":input", 1),
      (try_begin),
          (eq, ":input", 0),
          (str_store_string, s2, "@Strength"),
      (else_try),
          (eq, ":input", 1),
          (str_store_string, s2, "@Agility"),
      (else_try),
          (eq, ":input", 2),
          (str_store_string, s2, "@Intelligence"),
      (else_try),
          (eq, ":input", 3),
          (str_store_string, s2, "@Charisma"),
      (else_try),
          (str_store_string, s2, "@DEBUG: Unknown Attribute"),
      (end_try),
    ]),

  ("get_skill_name", [
      (store_script_param, ":input", 1),
      (try_begin),
          (eq, ":input", 0),
          (str_store_string, s2, "@Trade"),
      (else_try),
          (eq, ":input", 1),
          (str_store_string, s2, "@Leadership"),
      (else_try),
          (eq, ":input", 2),
          (str_store_string, s2, "@Prisoner Management"),
      (else_try),
          (eq, ":input", 3),
          (str_store_string, s2, "@Reserved Skill 1"),
      (else_try),
          (eq, ":input", 4),
          (str_store_string, s2, "@Reserved Skill 2"),
      (else_try),
          (eq, ":input", 5),
          (str_store_string, s2, "@Reserved Skill 3"),
      (else_try),
          (eq, ":input", 6),
          (str_store_string, s2, "@Reserved Skill 4"),
      (else_try),
          (eq, ":input", 7),
          (str_store_string, s2, "@Persuasion"),
      (else_try),
          (eq, ":input", 8),
          (str_store_string, s2, "@Engineer"),
      (else_try),
          (eq, ":input", 9),
          (str_store_string, s2, "@First Aid"),
      (else_try),
          (eq, ":input", 10),
          (str_store_string, s2, "@Surgery"),
      (else_try),
          (eq, ":input", 11),
          (str_store_string, s2, "@Wound Treatment"),
      (else_try),
          (eq, ":input", 12),
          (str_store_string, s2, "@Inventory Management"),
      (else_try),
          (eq, ":input", 13),
          (str_store_string, s2, "@Spotting"),
      (else_try),
          (eq, ":input", 14),
          (str_store_string, s2, "@Path-finding"),
      (else_try),
          (eq, ":input", 15),
          (str_store_string, s2, "@Tactics"),
      (else_try),
          (eq, ":input", 16),
          (str_store_string, s2, "@Tracking"),
      (else_try),
          (eq, ":input", 17),
          (str_store_string, s2, "@Trainer"),
      (else_try),
          (eq, ":input", 18),
          (str_store_string, s2, "@Reading"),
      (else_try),
          (eq, ":input", 19),
          (str_store_string, s2, "@Reserved Skill 6"),
      (else_try),
          (eq, ":input", 20),
          (str_store_string, s2, "@Reserved Skill 7"),
      (else_try),
          (eq, ":input", 21),
          (str_store_string, s2, "@Reserved Skill 8"),
      (else_try),
          (eq, ":input", 22),
          (str_store_string, s2, "@Looting"),
      (else_try),
          (eq, ":input", 23),
          (str_store_string, s2, "@Horse Archery"),
      (else_try),
          (eq, ":input", 24),
          (str_store_string, s2, "@Riding"),
      (else_try),
          (eq, ":input", 25),
          (str_store_string, s2, "@Athletics"),
      (else_try),
          (eq, ":input", 26),
          (str_store_string, s2, "@Shield"),
      (else_try),
          (eq, ":input", 27),
          (str_store_string, s2, "@Weapon Master"),
      (else_try),
          (eq, ":input", 28),
          (str_store_string, s2, "@Reserved Skill 9"),
      (else_try),
          (eq, ":input", 29),
          (str_store_string, s2, "@Reserved Skill 10"),
      (else_try),
          (eq, ":input", 30),
          (str_store_string, s2, "@Reserved Skill 11"),
      (else_try),
          (eq, ":input", 31),
          (str_store_string, s2, "@Reserved Skill 12"),
      (else_try),
          (eq, ":input", 32),
          (str_store_string, s2, "@Reserved Skill 13"),
      (else_try),
          (eq, ":input", 33),
          (str_store_string, s2, "@Power Draw"),
      (else_try),
          (eq, ":input", 34),
          (str_store_string, s2, "@Power Throw"),
      (else_try),
          (eq, ":input", 35),
          (str_store_string, s2, "@Power Strike"),
      (else_try),
          (eq, ":input", 36),
          (str_store_string, s2, "@Ironflesh"),
      (else_try),
          (eq, ":input", 37),
          (str_store_string, s2, "@Reserved Skill 14"),
      (else_try),
          (eq, ":input", 38),
          (str_store_string, s2, "@Reserved Skill 15"),
      (else_try),
          (eq, ":input", 39),
          (str_store_string, s2, "@Reserved Skill 16"),
      (else_try),
          (eq, ":input", 40),
          (str_store_string, s2, "@Reserved Skill 17"),
      (else_try),
          (eq, ":input", 41),
          (str_store_string, s2, "@Reserved Skill 18"),
      (else_try),
          (str_store_string, s2, "@DEBUG: Unknown Skill"),
      (end_try),
    ]), 

Burada yetenek, özellik ve beceri isimlerini çekebilmek için script yazdık. Yani;

Code:
(call_script, "script_get_skill_name", 0),
Trade (Ticaret) olarak dönecektir.

Son olarakta kitap satıcılarımızı güncellemek için kullanacağımız scripti ekleyelim;

Bu kodu bulalım;
Code:
  # script_refresh_center_stables
  ("refresh_center_stables",
  [
    (reset_item_probabilities, 100),
    (set_merchandise_modifier_quality, 150),
    (try_for_range, ":cur_merchant", horse_merchants_begin, horse_merchants_end),
	  (troop_clear_inventory, ":cur_merchant"),
      (store_sub, ":cur_town", ":cur_merchant", horse_merchants_begin),
      (val_add, ":cur_town", towns_begin),
      (party_get_slot, ":cur_faction", ":cur_town", slot_center_original_faction),
      (troop_add_merchandise_with_faction, ":cur_merchant", ":cur_faction", itp_type_horse, 5),
      (troop_ensure_inventory_space, ":cur_merchant", 65),
      (troop_sort_inventory, ":cur_merchant"),
      (store_troop_gold, ":cur_gold", ":cur_merchant"),
      (lt, ":cur_gold", 600),
      (store_random_in_range, ":new_gold", 250, 500),
      (call_script, "script_troop_add_gold", ":cur_merchant", ":new_gold"),
    (try_end),
  ]),

hemen altına şunu ekleyelim;

Code:
  # script_refresh_booksellers
  ("refresh_booksellers", [
      (try_for_range, ":cur_merchant", tavern_booksellers_begin, tavern_booksellers_end),
          (troop_clear_inventory, ":cur_merchant"),

          (store_random_in_range, ":max_item", 6, 14),
          (try_for_range, ":item_no", 1, ":max_item"),
              (store_random_in_range, ":book_no", books_begin, books_end),
              (troop_add_item, ":cur_merchant", ":book_no", 0),
              (assign, ":new_gold", ":item_no"),
          (try_end),

          (val_mul, ":new_gold", 250),
          (store_random_in_range, ":add_gold", 100, 350),
          (val_add, ":new_gold", ":add_gold"),
          (call_script, "script_troop_add_gold", ":cur_merchant", ":new_gold"),
      (try_end),
    ]),

Bu dosyadaki işimizde bitti, kayıt edip çıkabiliriz.

Kitap okuma menüsünü düzenlemek için module_game_menus.py dosyasını açıyoruz. Bu dosyada şu satırları buluyoruz;

Code:
      ("action_read_book_1",[(player_has_item, "itm_book_tactics"),
                             (item_slot_eq, "itm_book_tactics", slot_item_book_read, 0),
                             (str_store_item_name, s1, "itm_book_tactics"),
                             ],"{s1}.",
       [(assign, "$temp", "itm_book_tactics"),
        (jump_to_menu, "mnu_camp_action_read_book_start"),
        ]
       ),
      ("action_read_book_2",[(player_has_item, "itm_book_persuasion"),
                             (item_slot_eq, "itm_book_persuasion", slot_item_book_read, 0),
                             (str_store_item_name, s1, "itm_book_persuasion"),
                             ],"{s1}.",
       [(assign, "$temp", "itm_book_persuasion"),
        (jump_to_menu, "mnu_camp_action_read_book_start"),
        ]
       ),
      ("action_read_book_3",[(player_has_item, "itm_book_leadership"),
                             (item_slot_eq, "itm_book_leadership", slot_item_book_read, 0),
                             (str_store_item_name, s1, "itm_book_leadership"),
                             ],"{s1}.",
       [(assign, "$temp", "itm_book_leadership"),
        (jump_to_menu, "mnu_camp_action_read_book_start"),
        ]
       ),
      ("action_read_book_4",[(player_has_item, "itm_book_intelligence"),
                             (item_slot_eq, "itm_book_intelligence", slot_item_book_read, 0),
                             (str_store_item_name, s1, "itm_book_intelligence"),
                             ],"{s1}.",
       [(assign, "$temp", "itm_book_intelligence"),
        (jump_to_menu, "mnu_camp_action_read_book_start"),
        ]
       ),
      ("action_read_book_5",[(player_has_item, "itm_book_trade"),
                             (item_slot_eq, "itm_book_trade", slot_item_book_read, 0),
                             (str_store_item_name, s1, "itm_book_trade"),
                             ],"{s1}.",
       [(assign, "$temp", "itm_book_trade"),
        (jump_to_menu, "mnu_camp_action_read_book_start"),
        ]
       ),
      ("action_read_book_6",[(player_has_item, "itm_book_weapon_mastery"),
                             (item_slot_eq, "itm_book_weapon_mastery", slot_item_book_read, 0),
                             (str_store_item_name, s1, "itm_book_weapon_mastery"),
                             ],"{s1}.",
       [(assign, "$temp", "itm_book_weapon_mastery"),
        (jump_to_menu, "mnu_camp_action_read_book_start"),
        ]
       ),
      ("action_read_book_7",[(player_has_item, "itm_book_engineering"),
                             (item_slot_eq, "itm_book_engineering", slot_item_book_read, 0),
                             (str_store_item_name, s1, "itm_book_engineering"),
                             ],"{s1}.",
       [(assign, "$temp", "itm_book_engineering"),
        (jump_to_menu, "mnu_camp_action_read_book_start"),
        ]
       ),
      ("camp_action_4",[],"Back to camp menu.",
       [(jump_to_menu, "mnu_camp"),
        ]
       ),

Bunlarla değişiyoruz;

Code:
       ("action_read_book_1",[(assign, reg1, "itm_book_tactics"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_tactics"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_2",[(assign, reg1, "itm_book_persuasion"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_persuasion"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_3",[(assign, reg1, "itm_book_leadership"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_leadership"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_4",[(assign, reg1, "itm_book_intelligence"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_intelligence"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_5",[(assign, reg1, "itm_book_trade"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_trade"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_6",[(assign, reg1, "itm_book_weapon_mastery"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_weapon_mastery"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_7",[(assign, reg1, "itm_book_engineering"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_engineering"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),

       ("action_read_book_8",[(assign, reg1, "itm_book_spotting"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_spotting"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_9",[(assign, reg1, "itm_book_pathfinding"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_pathfinding"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_10",[(assign, reg1, "itm_book_inventory_management"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_inventory_management"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_11",[(assign, reg1, "itm_book_prisoner_management"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_prisoner_management"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_12",[(assign, reg1, "itm_book_athletics"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_athletics"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_13",[(assign, reg1, "itm_book_looting"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_looting"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_14",[(assign, reg1, "itm_book_ironflesh"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_ironflesh"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),

       ("action_read_book_15",[(assign, reg1, "itm_book_first_aid"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_first_aid"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_16",[(assign, reg1, "itm_book_surgery"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_surgery"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_17",[(assign, reg1, "itm_book_wound_treatment"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_wound_treatment"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),

       ("action_read_book_18",[(assign, reg1, "itm_book_horse_archery"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_horse_archery"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_19",[(assign, reg1, "itm_book_riding"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_riding"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),

       ("action_read_book_20",[(assign, reg1, "itm_book_power_strike"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_power_strike"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_21",[(assign, reg1, "itm_book_power_strike_2"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_power_strike_2"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_22",[(assign, reg1, "itm_book_power_throw"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_power_throw"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_23",[(assign, reg1, "itm_book_power_draw"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_power_draw"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_24",[(assign, reg1, "itm_book_power_draw_2"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_power_draw_2"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("action_read_book_25",[(assign, reg1, "itm_book_shield"),(player_has_item, reg1),(item_slot_eq, reg1, slot_item_book_read, 0),(str_store_item_name, s1, reg1),], "{s1}.", [(assign, "$temp", "itm_book_shield"),(jump_to_menu, "mnu_camp_action_read_book_start"),]),
       ("camp_action_4", [], "Back to camp menu.", [(jump_to_menu, "mnu_camp"),]),

Aynı dosyada şu satırı bulalım;

Code:
        (eq,"$background_answer_3",cb3_student),

Bunun hemen altına;

Code:
        (troop_raise_skill, "trp_player", "skl_reading", 2),

ekleyelim. Böylece kişi öğrenci olarak başlarsa reading becerisi 2 olarak başlayacaktır.

Bu dosyadaki işimizde bitti kayıt edip çıkalım.

Son olarak kitap okuma sisteminide yapalım. Module_simple_triggers.py dosyasını açalım ve bu kodu bulalım;

Code:
  # Read books if player is resting.
  (1, [(neg|map_free),
       (gt, "$g_player_reading_book", 0),
       (player_has_item, "$g_player_reading_book"),
       (store_attribute_level, ":int", "trp_player", ca_intelligence),
       (item_get_slot, ":int_req", "$g_player_reading_book", slot_item_intelligence_requirement),
       (le, ":int_req", ":int"),
       (item_get_slot, ":book_reading_progress", "$g_player_reading_book", slot_item_book_reading_progress),
       (item_get_slot, ":book_read", "$g_player_reading_book", slot_item_book_read),
       (eq, ":book_read", 0),
       (val_add, ":book_reading_progress", 7),
       (item_set_slot, "$g_player_reading_book", slot_item_book_reading_progress, ":book_reading_progress"),
       (ge, ":book_reading_progress", 1000),
       (item_set_slot, "$g_player_reading_book", slot_item_book_read, 1),
       (str_store_item_name, s1, "$g_player_reading_book"),
       (str_clear, s2),
       (try_begin),
         (eq, "$g_player_reading_book", "itm_book_tactics"),
         (troop_raise_skill, "trp_player", "skl_tactics", 1),
         (str_store_string, s2, "@ Your tactics skill has increased by 1."),
       (else_try),
         (eq, "$g_player_reading_book", "itm_book_persuasion"),
         (troop_raise_skill, "trp_player", "skl_persuasion", 1),
         (str_store_string, s2, "@ Your persuasion skill has increased by 1."),
       (else_try),
         (eq, "$g_player_reading_book", "itm_book_leadership"),
         (troop_raise_skill, "trp_player", "skl_leadership", 1),
         (str_store_string, s2, "@ Your leadership skill has increased by 1."),
       (else_try),
         (eq, "$g_player_reading_book", "itm_book_intelligence"),
         (troop_raise_attribute, "trp_player", ca_intelligence, 1),
         (str_store_string, s2, "@ Your intelligence has increased by 1."),
       (else_try),
         (eq, "$g_player_reading_book", "itm_book_trade"),
         (troop_raise_skill, "trp_player", "skl_trade", 1),
         (str_store_string, s2, "@ Your trade skill has increased by 1."),
       (else_try),
         (eq, "$g_player_reading_book", "itm_book_weapon_mastery"),
         (troop_raise_skill, "trp_player", "skl_weapon_master", 1),
         (str_store_string, s2, "@ Your weapon master skill has increased by 1."),
       (else_try),
         (eq, "$g_player_reading_book", "itm_book_engineering"),
         (troop_raise_skill, "trp_player", "skl_engineer", 1),
         (str_store_string, s2, "@ Your engineer skill has increased by 1."),
       (try_end),
       
       (unlock_achievement, ACHIEVEMENT_BOOK_WORM),

       (try_begin),
         (eq, "$g_infinite_camping", 0),
         (dialog_box, "@You have finished reading {s1}.{s2}", "@Book Read"),
       (try_end),  
              
       (assign, "$g_player_reading_book", 0),	   	   
       ]),

Kodun tamamını şu şekilde değiştirelim;

Code:
  # Read books if player is resting.
  (1, [
      (neg|map_free),
      (gt, "$g_player_reading_book", 0),
      (player_has_item, "$g_player_reading_book"),
      (store_attribute_level, ":int", "trp_player", ca_intelligence),
      (item_get_slot, ":int_req", "$g_player_reading_book", slot_item_intelligence_requirement),
      (le, ":int_req", ":int"),
      (item_get_slot, ":book_reading_progress", "$g_player_reading_book", slot_item_book_reading_progress),
      (item_get_slot, ":book_read", "$g_player_reading_book", slot_item_book_read),
      (eq, ":book_read", 0),
      (try_begin),
          (ge, "$cheat_mode", 1),
          (val_add, ":book_reading_progress", 1000),
      (else_try),
          (val_add, ":book_reading_progress", 7),
      (try_end),
      (item_set_slot, "$g_player_reading_book", slot_item_book_reading_progress, ":book_reading_progress"),

      #Skl_Reading
      (store_skill_level, ":reading_skill", skl_reading, "trp_player"),
      (store_mul, ":reading", ":reading_skill", 50), #%5 reduce

      (store_sub, ":reading_end", 1000, ":reading"),
      (ge, ":book_reading_progress", ":reading_end"),
      (store_div, ":reading_level_up_chance", ":int_req", 10),
      (val_add, ":reading_level_up_chance", 2),
      (store_div, ":reading_level_up_chance_sub", ":reading_skill", 4),
      (val_sub, ":reading_level_up_chance", ":reading_level_up_chance_sub"),
      (try_begin),
          (ge, ":reading_skill", 10),
          (assign, ":reading_level_up_chance", 0),
      (try_end),
#      (store_add, ":writing_level_up_chance", ":reading_level_up_chance", 2), #Writing
      (try_begin),
          (store_random_in_range, ":reading_level_up", 0, 100),
          (lt, ":reading_level_up", ":reading_level_up_chance"),
          (troop_raise_skill, "trp_player", skl_reading, 1),
          (call_script, "script_get_skill_name", skl_reading),
          (display_message, "@Your {s2} skill has increased by 1.", 0xFF0000),
      (try_end),
#      (try_begin),
#          (store_random_in_range, ":writing_level_up", 0, 100),
#          (ge, ":writing_level_up", ":writing_level_up_chance"),
#          (troop_raise_skill, "trp_player", skl_writing, 1),
#      (try_end),
      (item_set_slot, "$g_player_reading_book", slot_item_book_read, 1),
      (str_store_item_name, s1, "$g_player_reading_book"),
      (str_clear, s2),
      
      (try_begin),
          (item_get_slot, reg10, "$g_player_reading_book", slot_item_book_raise_skill),
          (item_get_slot, reg11, "$g_player_reading_book", slot_item_book_raise_skill_level),
          (item_get_slot, reg12, "$g_player_reading_book", slot_item_book_raise_skill_limit),
          (ge, reg10, 0),
          (gt, reg11, 0),

          (try_begin),
              (le, reg12, 0),
              (assign, reg12, 10),
          (try_end),
      
          (assign, ":cont", 0),
          (call_script, "script_get_skill_name", reg10),
          (store_skill_level, ":skill_no", reg10),
          (try_begin),
              (ge, ":skill_no", reg12),
              (display_message, "@ES: You have finished reading {s1}. Your did not learn any skill from {s1}.", 0xFF0000),
              (assign, ":cont", 1),
          (else_try),
              (store_sub, ":skill_dif", reg12, ":skill_no"),
              (gt, reg11, ":skill_dif"),
              (item_set_slot, "$g_player_reading_book", slot_item_book_raise_skill_level, ":skill_dif"),
              (assign, reg11, ":skill_dif"),
          (try_end),
          (eq, ":cont", 0),
          (display_message, "@Skill: You have finished reading {s1}. Your {s2} skill has increased by {reg11}.", 0x008000),
          (troop_raise_skill, "trp_player", reg10, reg11),
      (try_end),

      (try_begin),
          (item_get_slot, reg10, "$g_player_reading_book", slot_item_book_raise_attribute),
          (item_get_slot, reg11, "$g_player_reading_book", slot_item_book_raise_attribute_level),
          (item_get_slot, reg12, "$g_player_reading_book", slot_item_book_raise_attribute_limit),
          (ge, reg10, 0),
          (gt, reg11, 0),

          (try_begin),
              (le, reg12, 0),
              (assign, reg12, 10),
          (try_end),
      
          (assign, ":cont", 0),
          (call_script, "script_get_attribute_name", reg10),
          (store_attribute_level, ":attribute_no", "trp_player", reg10),
          (try_begin),
              (ge, ":attribute_no", reg12),
              (display_message, "@EA: You have finished reading {s1}. Your did not learn any attribute from {s1}.", 0xFF0000),
              (assign, ":cont", 1),
          (else_try),
              (store_sub, ":attribute_dif", reg12, ":attribute_no"),
              (gt, reg11, ":attribute_dif"),
              (item_set_slot, "$g_player_reading_book", slot_item_book_raise_skill_level, ":attribute_dif"),
              (assign, reg11, ":attribute_dif"),
          (try_end),
          (eq, ":cont", 0),
          (display_message, "@Attribute: You have finished reading {s1}. Your {s2} attribute has increased by {reg11}.", 0x008000),
          (troop_raise_attribute, "trp_player", reg10, reg11),
      (try_end),

      (try_begin),
          (item_get_slot, reg10, "$g_player_reading_book", slot_item_book_raise_proficiency),
          (item_get_slot, reg11, "$g_player_reading_book", slot_item_book_raise_proficiency_level),
          (item_get_slot, reg12, "$g_player_reading_book", slot_item_book_raise_proficiency_limit),
          (ge, reg10, 0),
          (gt, reg11, 0),

          (try_begin),
              (le, reg12, 0),
              (assign, reg12, 10),
          (try_end),
      
          (assign, ":cont", 0),
          (call_script, "script_get_proficiency_name", reg10),
          (store_proficiency_level, ":proficiency_no", "trp_player", reg10),
          (try_begin),
              (ge, ":proficiency_no", reg12),
              (display_message, "@EP: You have finished reading {s1}. Your did not learn any proficiency from {s1}.", 0xFF0000),
              (assign, ":cont", 1),
          (else_try),
              (store_sub, ":proficiency_dif", reg12, ":proficiency_no"),
              (gt, reg11, ":proficiency_dif"),
              (item_set_slot, "$g_player_reading_book", slot_item_book_raise_skill_level, ":proficiency_dif"),
              (assign, reg11, ":proficiency_dif"),
          (try_end),
          (eq, ":cont", 0),
          (display_message, "@Proficiency: You have finished reading {s1}. Your {s2} proficiency has increased by {reg11}.", 0x008000),
          (troop_raise_proficiency, "trp_player", reg10, reg11),
      (try_end),
      
      (unlock_achievement, ACHIEVEMENT_BOOK_WORM),              
      (assign, "$g_player_reading_book", 0),
    ]),

Burada kodun çalışma mantığını tamamen değiştirdik.

Kitap satıcılarını güncellemeye geçelim. Module_triggers.py dosyasını açalım ve şu kodu bulalım;

Code:
(call_script, "script_refresh_center_stables"),

Hemen altına şunu ekleyelim;

Code:
(call_script, "script_refresh_booksellers"),

Burada kitap satıcılarının haftada bir yenilenmesini sağladık.

Son olarakta module_dialogs.py dosyasını açıp, kitap satıcılarının yerini gezgine sormayı ekleyelim.

Şu kodu bulalım;

Code:
  [anyone, "tavern_traveler_pretender_location_tell", [], "{s15} is currently at {s11}.", "tavern_traveler_pretalk",
   [
     (str_store_troop_name, s15, "$temp"),
     (troop_get_slot, ":cur_center", "$temp", slot_troop_cur_center),
     (str_store_party_name, s11, ":cur_center"),
   ]],

Hemen altına şunları ekleyelim;

Code:
  [anyone|plyr, "tavern_traveler_talk", [], "I am looking for book seller...", "tavern_traveler_bookseller_location", []],
  
  [anyone, "tavern_traveler_bookseller_location", [
      (try_for_range, ":town_no", towns_begin, towns_end),
          (party_get_slot, ":tavern_bookseller", ":town_no", slot_center_tavern_bookseller),
          (assign, ":tavern_bookseller", 1),
      (try_end),
      (gt, ":tavern_bookseller", 0),
    ], "I guess I know where the bookseller is. For 30 denars, I'll tell you.", "tavern_traveler_bookseller_location_ask_money", []],

  [anyone, "tavern_traveler_bookseller_location", [
      (try_for_range, ":town_no", towns_begin, towns_end),
          (party_get_slot, ":tavern_bookseller", ":town_no", slot_center_tavern_bookseller),
          (assign, ":tavern_bookseller", 1),
      (try_end),
      (le, ":tavern_bookseller", 0),
    ], "I do not know where bookseller is.", "tavern_traveler_pretalk", []],

  [anyone|plyr, "tavern_traveler_bookseller_location_ask_money", [
      (store_troop_gold, ":cur_gold", "trp_player"),
      (ge, ":cur_gold", 30),
    ], "All right. Here is 30 denars.", "tavern_traveler_bookseller_location_tell", [(troop_remove_gold, "trp_player", 30),]],

  [anyone|plyr, "tavern_traveler_bookseller_location_ask_money", [], "Never mind.", "tavern_traveler_pretalk", []],

  [anyone, "tavern_traveler_bookseller_location_tell", [], "{reg3?Booksellers are:Bookseller is} currently at {s65}.", "tavern_traveler_pretalk", [
      (assign, ":total_bookseller", 0),
      (try_for_range, ":town_no", towns_begin, towns_end),
          (party_get_slot, ":tavern_bookseller", ":town_no", slot_center_tavern_bookseller),
          (gt, ":tavern_bookseller", 0),
          (val_add, ":total_bookseller", 1),

          (str_store_party_name, s67, ":town_no"),
          (try_begin),
              (eq, ":total_bookseller", 1),
              (str_store_string, s65, "@{s67}"),
          (else_try),
              (eq, ":total_bookseller", 2),
              (str_store_string, s65, "@{s65} and {s67}"),
          (try_end),
      (try_end),
      (store_sub, "::reg3", ":total_bookseller", 1),
      (assign, reg3, "::reg3"),
      (eq, ":total_bookseller", 0),
      (str_store_string, s65, "@Sorry but I do not know where he is."),
    ]],

Burada da işimiz bitti kayıt edip çıkalım.

Umarım hiç bir kodu atlamamışımdır. Atladıysam bildirirseniz ekleriz.

Şimdi dil dosyasına girecek satırları kopyalayım;

quick_strings.csv içerisine
Code:
qstr_DEBUG:_Unknown_Attri|DEBUG: Bilinmeyen Özellik.
qstr_DEBUG:_Unknown_Skill|DEBUG: Bilinmeyen Yetenek.
qstr_DEBUG:_Unknown_Profi|DEBUG: Bilinmeyen Beceri.
qstr_Trade|Ticaret
qstr_Leadership|Liderlik
qstr_Prisoner_Management|Esir Yönetimi
qstr_Reserved_1|Reserved Skill 1
qstr_Reserved_2|Reserved Skill 2
qstr_Reserved_3|Reserved Skill 3
qstr_Reserved_4|Reserved Skill 4
qstr_Persuasion|İkna
qstr_Engineer|Mühendislik
qstr_First_Aid|İlk Yardım
qstr_Surgery|Cerrahlık
qstr_Wound_Treatment|Yara Bakımı
qstr_Inventory_Management|Envanter Yönetimi
qstr_Spotting|Tespit Etme
qstr_Pathfinding|Yön Bulma
qstr_Tactics|Taktik
qstr_Tracking|İz Sürme
qstr_Trainer|Talimci
qstr_Reading|Okuma
qstr_Reserved_6|Reserved Skill 6
qstr_Reserved_7|Reserved Skill 7
qstr_Reserved_8|Reserved Skill 8
qstr_Looting|Yağma
qstr_Horse_Archery|Atlı Okçuluk
qstr_Riding|Binicilik
qstr_Athletics|Atletizm
qstr_Shield|Kalkan
qstr_Weapon_Master|Silah Ustası
qstr_Reserved_9|Reserved Skill 9
qstr_Reserved_10|Reserved Skill 10
qstr_Reserved_11|Reserved Skill 11
qstr_Reserved_12|Reserved Skill 12
qstr_Reserved_13|Reserved Skill 13
qstr_Power_Draw|Güçlü Germe
qstr_Power_Throw|Güçlü Fırlatma
qstr_Power_Strike|Güçlü Darbe
qstr_Ironflesh|Demir Vücut
qstr_Reserved_14|Reserved Skill 14
qstr_Reserved_15|Reserved Skill 15
qstr_Reserved_16|Reserved Skill 16
qstr_Reserved_17|Reserved Skill 17
qstr_Reserved_18|Reserved Skill 18
qstr_Strength|Güç
qstr_Agility|Çeviklik
qstr_Intelligence|Zeka
qstr_Charisma|Karizma
qstr_One_Handed_Weapon|Tek Elli Silah
qstr_Two_Handed_Weapon|Çift Elli Silah
qstr_Polearm|Gönderli Silah
qstr_Archery|Okçuluk
qstr_Crossbow|Kundaklı Yay
qstr_Throwing|Fırlatma
qstr_Firearm|Ateşli Silah
qstr_Your_{s2}_attribute_|{s2} özelliğin bu kitabı okumak için çok yüksek.
qstr_+{reg11}_to_{s2}_att|{s2} özelliğine +{reg11} (Azami {s2}: {reg12})
qstr_Your_{s2}_skill_too_|{s2} yeteneğin bu kitabı okumak için çok yüksek.
qstr_+{reg11}_to_{s2}_ski|{s2} yeteneğine +{reg11} (Azami {s2}: {reg12})
qstr_Your_{s2}_proficienc|{s2} becerin bu kitabı okumak için çok yüksek.
qstr_+{reg11}_to_{s2}_pro|{s2} becerisine +{reg11} (Azami {s2}: {reg12})
qstr_{s67}|{s67} tavernası
qstr_{s65}_and_{s67}|{s65} ve {s67} tavernası
qstr_Sorry_but_I_do_not_k|Üzgünüm, nerede olduklarını bilmiyorum.
qstr_ES:_You_have_finishe|{s1} kitabını okumayı bitirdin. Fakat bu kitaptan herhangi bir yetenek öğrenemediniz.
qstr_Skill:_You_have_fini|{s1} kitabını okumayı bitirdiniz. {s2} yeteneğin {reg11} arttı.
qstr_EA:_You_have_finishe|{s1} kitabını okumayı bitirdin. Fakat bu kitaptan herhangi bir özellik öğrenemediniz.
qstr_Attribute:_You_have_|{s1} kitabını okumayı bitirdiniz. {s2} özelliğin {reg11} arttı.
qstr_EP:_You_have_finishe|{s1} kitabını okumayı bitirdin. Fakat bu kitaptan herhangi bir beceri öğrenemediniz.
qstr_Proficiency:_You_hav|{s1} kitabını okumayı bitirdiniz. {s2} becerin {reg11} arttı.

skills.csv içinde;
Code:
skl_reserved_5|Reserved Skill 5
skl_reserved_5_desc|This is a reserved skill.

bulup bununla değişelim;

Code:
skl_reading|Okuma
skl_reading_desc|Bu yeteneğin her düzeyi kitap okuma süresini %%5 düşürür.

dialogs.csv içine;
Code:
dlga_tavern_traveler_talk:tavern_traveler_bookseller_location|Kitap satıcılarından birini arıyorum.
dlga_tavern_traveler_bookseller_location:tavern_traveler_bookseller_location_ask_money|Bu bilgiyi sana 30 dinar karşılığında açıklayabilirim.. Ne dersin?
dlga_tavern_traveler_bookseller_location:tavern_traveler_pretalk|Üzgünüm, nerede olduklarını bilmiyorum.
dlga_tavern_traveler_bookseller_location_ask_money:tavern_traveler_bookseller_location_tell|Pekala, işte 30 dinar.
dlga_tavern_traveler_bookseller_location_ask_money:tavern_traveler_pretalk|Boşver.
dlga_tavern_traveler_bookseller_location_tell:tavern_traveler_pretalk|{reg3?Kitap satıcıları:Kitap satıcısı} şuanda {s65}nda.

item_kinds.csv içine;
Code:
itm_book_spotting|Görüşünü Genişlet
itm_book_spotting_pl|Görüşünü Genişlet
itm_book_pathfinding|Calradia'da Hızlı Gezmek
itm_book_pathfinding_pl|Calradia'da Hızlı Gezmek
itm_book_inventory_management|Daha Çok Eşya Taşıma Yöntemleri
itm_book_inventory_management_pl|Daha Çok Eşya Taşıma Yöntemleri
itm_book_prisoner_management|Ateşi Yakala
itm_book_prisoner_management_pl|Ateşi Yakala
itm_book_athletics|Atlet Olmak
itm_book_athletics_pl|Atlet Olmak
itm_book_looting|Savaş Ganimeti
itm_book_looting_pl|Savaş Ganimeti
itm_book_ironflesh|Demir Adam
itm_book_ironflesh_pl|Demir Adam
itm_book_first_aid|Acil Tedavi: İlk Yardım
itm_book_first_aid_pl|Acil Tedavi: İlk Yardım
itm_book_surgery|Acil Tedavi: Cerrahlık
itm_book_surgery_pl|Acil Tedavi: Cerrahlık
itm_book_wound_treatment|Acil Tedavi: Yara Bakımı
itm_book_wound_treatment_pl|Acil Tedavi: Yara Bakımı
itm_book_horse_archery|Binicilik: At Üstünde Okculuk
itm_book_horse_archery_pl|Binicilik: At Üstünde Okculuk
itm_book_riding|Binicilik: Daha İyi At Sürmek
itm_book_riding_pl|Binicilik: Daha İyi At Sürmek
itm_book_power_strike|Silah Talimi: Güçlü Hasar
itm_book_power_strike_pl|Silah Talimi: Güçlü Hasar
itm_book_power_strike_2|Silah Talimi: Çift Elli Silah Kullanmak
itm_book_power_strike_2_pl|Silah Talimi: Çift Elli Silah Kullanmak
itm_book_power_throw|Silah Talimi: Fırlatmalı Silahlar
itm_book_power_throw_pl|Silah Talimi: Fırlatmalı Silahlar
itm_book_power_draw|Silah Talimi: İyi Bir Okcu Olmak
itm_book_power_draw_pl|Silah Talimi: İyi Bir Okcu Olmak
itm_book_power_draw_2|Silah Talimi: Kundaklı Yay Kullanmak
itm_book_power_draw_2_pl|Silah Talimi: Kundaklı Yay Kullanmak
itm_book_shield|Silah Talimi: Saldırıyı Engelle
itm_book_shield_pl|Silah Talimi: Saldırıyı Engelle
 
Bir kaç resim paylaşayım önceki kod ile ilgili;
4705BF069E343311D7D22177E2EE8749186A1520

D4C142D850D73FB32F7179503FB4CC1AF38167EC

F60836227834A8085EDC5EE2027320EDE3B34529

7B269B82F0330E861CC8281273C695C19D4E31AF

6EF5ED7FEEC762D7E5FA2E0B18013242B3A4EDB9

DBA37600FCE0AD86A273893B48BDB349B1282BE5
 
Teşekkürler arkadaşlar, bu arada kodu incelerken hata fark ettim kodlama yaparken %3 şansı yanlışlıkla %97 yapmışım :grin: Kodu kullanan olduysa, module_simple_triggers.py içinde şu satırı bulup;

Code:
          (ge, ":reading_level_up", ":reading_level_up_chance"),

bununla değiştirsin

Code:
          (lt, ":reading_level_up", ":reading_level_up_chance"),

ayrıca

Code:
      (val_sub, ":reading_level_up_chance", ":reading_level_up_chance_sub"),

altınada 10 level olunca yükselmemesi için

Code:
      (try_begin),
          (ge, ":reading_skill", 10),
          (assign, ":reading_level_up_chance", 0),
      (try_end),

ekleyelim.
 
Bu dersimizde yapacaklarımız:

  • Grup büyüklüğü limitini ve esir limitini değiştireceğiz.
  • Limitleri sabit bir değere tabi tutacağız.
  • Rapor menüsünde grup büyüklüğüne tanımlayacağız.
  • Türkçeleştireceğiz.

Bu dersimizde değiştireceğimiz dosyalar:
Code:
module_scripts.py
module_constants.py
module_game_menus.py

Değiştireceğimiz dil dosyaları:
Code:
quick_strings.csv

Düzenlemeye başlamadan önce dosyaları yedeklemeyi unutmayınız.

Öncelikle dersimize limitleri tanımlama ile başlayalım. Bunun için module_constants.py dosyasını açıyoruz ve bu satırları buluyoruz;

Code:
price_adjustment = 25 #the percent by which a trade at a center alters price

fire_duration = 4 #fires takes 4 hours

Hemen altına şunları ekliyoruz;

Code:
party_size_base = 50
party_size_per_level = 2
party_size_per_skill = 50
party_size_renown = 20
party_size_without_level = 1
party_prisoner_base = 25
party_prisoner_per_level = 1
party_prisoner_per_skill = 25
party_prisoner_renown = 50
party_prisoner_without_level = 0

party_size_base: Grup büyüklüğü için temel başlangıç değeridir.
party_size_per_level: Her level başına kazanılacak yer sayısıdır.
party_size_per_skill: Liderlik seviyesi başına kazanılacak yer sayısıdır.
party_size_renown: Belirlenen değer başına 1 yer kazanılır. Burada her 20 namda 1 ekstra yer kazanılmasına ayarladık.
party_size_without_level: Liderlik seviyesi 0 iken yinede partiye adam alınabilsin mi? (1: evet, 0:hayır)

party_prisoner_base: Esir limitinin temel başlangıç değeridir.
party_prisoner_per_level: Her level başına kazanılacak yer sayısıdır.
party_prisoner_per_skill: Her esir yönetimi seviyesi başına kazanılacak yer sayısı.
party_prisoner_renown: Belirlenen değer başına 1 yer kazanılır.
party_prisoner_without_level: Esir yönetimi seviyesi 0 iken yinede esir alınabilsin mi? (1: evet, 0:hayır)

Burada bu değerleri sürekli her kodda yazmamak ve işimizi kolaylaştırmak için sabitledik.

Şimdi parti limitlerini ayarlamak için module_scripts.py dosyasını açalım.

Bu kodu buluyoruz:
Code:
  ("game_get_party_companion_limit",
    [
      (assign, ":troop_no", "trp_player"),

      (assign, ":limit", 30),
      (store_skill_level, ":skill", "skl_leadership", ":troop_no"),
      (store_attribute_level, ":charisma", ":troop_no", ca_charisma),
      (val_mul, ":skill", 5),
      (val_add, ":limit", ":skill"),
      (val_add, ":limit", ":charisma"),

      (troop_get_slot, ":troop_renown", ":troop_no", slot_troop_renown),
      (store_div, ":renown_bonus", ":troop_renown", 25),
      (val_add, ":limit", ":renown_bonus"),

      (assign, reg0, ":limit"),
      (set_trigger_result, reg0),
  ]),

Bununla değiştiriyoruz:
Code:
  ("game_get_party_companion_limit", [
      (assign, ":troop_no", "trp_player"),

      (assign, ":limit", party_size_base),
      (store_character_level, ":level", "trp_player"),
      (val_mul, ":level", party_size_per_level),
      (val_add, ":limit", ":level"),

      (store_attribute_level, ":charisma", ":troop_no", ca_charisma),
      (val_add, ":limit", ":charisma"),
      
      (store_skill_level, ":skill", "skl_leadership", ":troop_no"),
      (val_mul, ":skill", party_size_per_skill),
      (val_add, ":limit", ":skill"),

      (troop_get_slot, ":renown", ":troop_no", slot_troop_renown),
      (val_div, ":renown", party_size_renown),
      (val_add, ":limit", ":renown"),

      (try_begin),
          (eq, party_size_without_level, 0),
          (eq, ":skill", 0),
          (assign, ":limit", 0),
      (try_end),

      (assign, reg0, ":limit"),
      (set_trigger_result, reg0),
  ]),

Sonra ise şu kodu buluyoruz:
Code:
  ("game_get_party_prisoner_limit",
    [
#      (store_script_param_1, ":party_no"),
      (assign, ":troop_no", "trp_player"),

      (assign, ":limit", 0),
      (store_skill_level, ":skill", "skl_prisoner_management", ":troop_no"),
      (store_mul, ":limit", ":skill", 5),
      (assign, reg0, ":limit"),
      (set_trigger_result, reg0),
  ]),

Bununla değiştiriyoruz:
Code:
  ("game_get_party_prisoner_limit",
    [
#      (store_script_param_1, ":party_no"),
      (assign, ":troop_no", "trp_player"),

      (assign, ":limit", party_prisoner_base),
      
      (store_character_level, ":level", "trp_player"),
      (val_mul, ":level", party_prisoner_per_level),
      (val_add, ":limit", ":level"),
      
      (store_skill_level, ":skill", "skl_prisoner_management", ":troop_no"),
      (val_mul, ":skill", party_prisoner_per_skill),
      (val_add, ":limit", ":skill"),

      (troop_get_slot, ":renown", ":troop_no", slot_troop_renown),
      (val_div, ":renown", party_prisoner_renown),
      (val_add, ":limit", ":renown"),

      (try_begin),
          (eq, party_prisoner_without_level, 0),
          (eq, ":skill", 0),
          (assign, ":limit", 0),
      (try_end),

      (assign, reg0, ":limit"),
      (set_trigger_result, reg0),
  ]),

Bu dosyadada işimiz bitti kayıt edip çıkıyoruz.

Son olarak Raporlar>Grup büyüklüğü raporunu görüntüledeki farklı değerleri düzeltmek için ayarlarımızı yapalım. Module_game_menus.py dosyasını açıp şunu buluyoruz;

Code:
  ("party_size_report",0,
   "{s1}",
   "none",
   [(call_script, "script_game_get_party_companion_limit"),
    (assign, ":party_size_limit", reg0),

    (store_skill_level, ":leadership", "skl_leadership", "trp_player"),
    (val_mul, ":leadership", 5),
    (store_attribute_level, ":charisma", "trp_player", ca_charisma),

    (troop_get_slot, ":renown", "trp_player", slot_troop_renown),
    (val_div, ":renown", 25),
    (try_begin),
      (gt, ":leadership", 0),
      (str_store_string, s2, "@{!} +"),
    (else_try),
      (str_store_string, s2, "str_space"),
    (try_end),
    (try_begin),
      (gt, ":charisma", 0),
      (str_store_string, s3, "@{!} +"),
    (else_try),
      (str_store_string, s3, "str_space"),
    (try_end),
    (try_begin),
      (gt, ":renown", 0),
      (str_store_string, s4, "@{!} +"),
    (else_try),
      (str_store_string, s4, "str_space"),
    (try_end),
    (assign, reg5, ":party_size_limit"),
    (assign, reg1, ":leadership"),
    (assign, reg2, ":charisma"),
    (assign, reg3, ":renown"),
    (str_store_string, s1, "@Current party size limit is {reg5}.^Current party size modifiers are:^^Base size:  +30^Leadership: {s2}{reg1}^Charisma: {s3}{reg2}^Renown: {s4}{reg3}^TOTAL:  {reg5}"),
    ],
    [
      ("continue",[],"Continue...",
       [(jump_to_menu, "mnu_reports"),
        ]
       ),
      ]
  ),

Bulup bununla değiştiriyoruz;

Code:
  ("party_size_report",0,
   "{s1}",
   "none", [
       (store_skill_level, ":leadership", "skl_leadership", "trp_player"),
       (store_skill_level, ":prisoner_management", "skl_prisoner_management", "trp_player"),
       (store_character_level, ":level", "trp_player"),
       (store_attribute_level, ":charisma", "trp_player", ca_charisma),
       (troop_get_slot, ":renown", "trp_player", slot_troop_renown),
       
       (call_script, "script_game_get_party_companion_limit"), #Party Limit
       (assign, reg1, reg0),
       (assign, reg2, party_size_base),
       (assign, reg3, party_size_per_skill),
       (store_mul, reg4, reg3, ":leadership"), 
       (assign, reg5, party_size_renown),
       (store_div, reg6, ":renown", reg5), #Actual
       (assign, reg7, ":charisma"),
       (assign, reg8, party_size_per_level),
       (store_mul, reg9, reg8, ":level"),
       
       (call_script, "script_game_get_party_prisoner_limit"), #Prisoner Limit
       (assign, reg11, reg0),
       (assign, reg12, party_prisoner_base),
       (assign, reg13, party_prisoner_per_level),
       (store_mul, reg14, reg13, ":prisoner_management"),
       (assign, reg15, party_prisoner_renown),
       (store_div, reg16, ":renown", reg15),
       (assign, reg18, party_prisoner_per_level),
       (store_mul, reg19, reg18, ":level"),
       (str_store_string, s1, "@Current party size limit is {reg1} and party prisoner limit is {reg11}.{reg1?^^Current party size modifiers are:^Base size: +{reg2}^Level bonus: {reg9} (+{reg8} per Level)^Charisma bonus: +{reg7}^Leadership bonus: +{reg4} (+{reg3} per Leadership)^Renown bonus: +{reg6} (+1 per {reg5} Renown)^Total: {reg1}: }{reg11?^^Current party prisoner size modifiers are:^Base size: +{reg12}^Level bonus: {reg19} (+{reg18} per Level)^Prisoner Management bonus: +{reg14} (+{reg13} per Prisoner Management)^Renown bonus: +{reg16} (+1 per {reg15} Renown)^Total: {reg11}: }"),
    ], [
        ("continue",[],"Continue...", [(jump_to_menu, "mnu_reports"),]),
    ]),

Bu dosyadaki işimizde bitti kayıt edip çıkıyoruz.

Son olarakta dil dosyasını ayarlayalım. quick_strings.csv dosyasını açalım.

Önceden var olan bir string olduğu için;
Code:
qstr_Current_party_size_l|
ile başlayan satırı bulalım ve silelim, dosyanın en altına şunu ekleyelim;

Code:
qstr_Current_party_size_l|Şuanki grup büyüklüğü limiti {reg1} ve alınabilecek esir limiti {reg11}.{reg1?^^Şuanki grup büyüklüğü bileşenleri:^Temel: +{reg2}^Seviye bonusu: {reg9} (her seviye başına +{reg8})^Karizma bonusu: +{reg7}^Liderlik bonusu: +{reg4} (her Liderlik seviyesi başına +{reg3})^Nam bonusu: +{reg6} (her {reg5} nam başına +1)^Toplam: {reg1}: }{reg11?^^Şuanki esir limiti bileşenleri:^Temel: +{reg12}^Seviye bonusu: {reg19} (her seviye başına +{reg18})^Esir Yönetimi bonusu: +{reg14} (her Esir Yönetimi seviyesi başına +{reg13})^Nam bonusu: +{reg16} (her {reg15} nam başına +1)^Toplam: {reg11}: }

Bu dosyadada işimiz bitti kayıt edip çıkabilirsiniz.
 
Porshy ders anlatımlarını çok beğeniyorum, teşekkürler emeğin için :smile:

edit: Bu arada bir yerde hata olmuş, özel mesaj attım.
 
dragos said:
Porshy ders anlatımlarını çok beğeniyorum, teşekkürler emeğin için :smile:

Ben teşekkür ederim, yardımcı olabildiysem ne mutlu. Bu arada module_scripts yerine module_game_menus yazmıştım kitap okuma sisteminde, onuda bildirdiğin için teşekkür ederim, düzelttim.

aliemre461 said:
Porsy güzel olmuş kodlamasi iyi olanlar anlarlar bunuda yeni başlayanlar için iyi bi ders olmuş

Elbette, zaten kolay konular bunlar, bende yeni yeni öğreniyorum, öğrendikcede insanlara öğretmeye çalışıyorum, umarım yararlı oluyordur, çünkü en güzel sistemler hep yabancı forumlardan çıkıyor, halbuki buradada işini bilen iyi kodlama yapan kişiler vardır, niye taleworlds hep yabancı kodlamacılara kendi modlarını satma yetkisi versin ki, bizde kendimizi geliştirelimde, yarın bir gün taleworlds bize gelip mod istesin. NW yi pek oynamadım ama bugün bu forumda VQ nun tamamen aynısını yapabilecek bir çok kodlamacı vardır, bu kişilerin neyi eksik ki hep yabancılar buluyor bu şansları :sad: Aslında bir nevi beni foruma döndüren şeyde bu.

Hele bir bakın diğer forumlara, en iyi forumun bile toplam mesaj sayısı, bizim konu sayımız ile denk. Bizim mod geliştirme bölümünde 56, mod bölümünde 98, geliştirme bölümünde 54 sayfamız var, herkesin girdiği forumda 147 sayfa, biz sadece tek dilde toplam 208 sayfadayız. Yani bizim aramızdaki yardımlaşma hiç bir forumda yok, hiç bir millette yok, ama ne yazık ki biz bunu kullanamıyoruz.
 
Porshy said:
Bu dersimizde yeni yetenek eklemeyi öğreneceğiz.

Değiştireceğimiz dosyalar;
Code:
module_skills.py
header_skills.py

Aslında bu konu en basit konulardan birisidir. Çünkü bizim için 10 adet reserve skill bırakılmış.

Düzenlemeye başlamadan önce yedek almayı unutmayınız.

ilk olarak module_skills.py dosyasını açalım.

Code:
  ("reserved_1","Reserved Skill 1",sf_base_att_cha|sf_inactive,10,"This is a reserved skill."),

Ben burada reserved_1 skillini seçtim, siz istediğiniz bir taneyi seçebilirsiniz.

Okuma yeteneği ekleyeceğimizi var sayalım yani "skl_reading".

Code:
  ("reading","Reading",sf_base_att_int,10,"This is a reading skill."),

Burada kesinlikle dikkat edilmesi gereken kısım düzenlediğimiz yeteneğin yerini değişmemek çünkü birazdan header_skills.py içinde direkt olarak konum belirteceğimiz için eğer 1 skillin yeri değişirse diğer skillerinde sayıları 1 azalacak veya artacağından bütün ayarları tekrardan yapmanız gerekecektir.

Burada "reserved_1" yerine "reading" yazdık. Bu skl_reading'e denk geliyor.
"Reading" kısmı ise skillin görünen ismi olacaktır. (Dil dosyasında skl_reading|Okuma)
sf_base_att_int kısmı ise yeteneğimizin temelidir "cha" Karizma, "int" Zeka, "agi" Çeviklik ve "str" Güç değerlerini temsil eder. Okuma bir zeka yeteneği olduğundan ben sf_base_att_int olarak değiştirdim.
sf_inactive kısmı ise skill in karakter ekranında gizlenmesini sağlar, bu nedenle kaldırdık.
10 kısmı ise skill in en yüksek gelebileceği değerdir. Yani oraya 5 yazarsak skilli en fazla 5 e kadar yükseltebilirsiniz.
"This is a reading skill." kısmı ise skill açıklamasıdır, yani skill üzerine geldiğimizde sağ üste yazan bilgidir. (Dil dosyasında skl_reading_desc|Bu okuma yeteneğidir.)

Gel gelelim şimdi skl_reading tanımlamasını yapmaya, header_skills.py dosyasını açalım ve değiştirdiğimiz skilli bulalım. Burada reserved_1'i değiştirdiğimiz için skl_reserved_1 kısmını bulalım.

Code:
skl_reserved_1 = 3

bunu skl_reading olarak değiştirelim.

Code:
skl_reading = 3

Bu kısmı yapmazsak eğer skl_reading tanımlanamadı hatası ile karşılaşırsınız.

Aynı dosya içerisinde edeğiştirdiğimiz yeteneğin knows_ kısmını bulalım yani knows_reserved_1

Code:
knows_reserved_1_1 = 4096
knows_reserved_1_2 = 8192
knows_reserved_1_3 = 12288
knows_reserved_1_4 = 16384
knows_reserved_1_5 = 20480
knows_reserved_1_6 = 24576
knows_reserved_1_7 = 28672
knows_reserved_1_8 = 32768
knows_reserved_1_9 = 36864
knows_reserved_1_10 = 40960

reserved_1 kısımlarını reading olarak değişelim yani;

Code:
knows_reading_1 = 4096
knows_reading_2 = 8192
knows_reading_3 = 12288
knows_reading_4 = 16384
knows_reading_5 = 20480
knows_reading_6 = 24576
knows_reading_7 = 28672
knows_reading_8 = 32768
knows_reading_9 = 36864
knows_reading_10 = 40960

Peki buradaki 4096, 8192 kısımları nedir. Her skill in ilk değeri bir öncekinin 16 ile çarpımına eşittir yani;

Code:
knows_trade_1 = 1
knows_leadership_1 = 16
knows_prisoner_management_1 = 256
knows_reserved_1_1 = 4096

burada gördüğünüz gibi trade_1 = 1 bunu 16 ile çarpınca leadership_1 e eşit oluyor yani 16, bunu 16 ile çarpnca bir sonraki yetenek yani prisoner_managementin başlangıcını buluyoruz yani 256 bunuda 16 ile çarptığımızda 4096 ile bir sonraki yeteneğin başlangıcını buluyoruz ve bu böyle gidiyor.

Aynı zamanda her skill ise kendi içinde ilk döngünün sırayla katına sahiptir yani demek istediğim şu ki taban başlangıç 4096 ise _2 kısmı bunun 2 katı _3 kısmı bu sayının 3 katı olacaktır yani örnek olarak göstermek gerekirse;

Code:
knows_reserved_1_1 = 4096 (4096 x 1)
knows_reserved_1_2 = 8192 (4096 x 2)
knows_reserved_1_3 = 12288 (4096 x 3)
knows_reserved_1_4 = 16384 (4096 x 4)
knows_reserved_1_5 = 20480 (4096 x 5)
knows_reserved_1_6 = 24576 (4096 x 6)
knows_reserved_1_7 = 28672 (4096 x 7)
knows_reserved_1_8 = 32768 (4096 x 8)
knows_reserved_1_9 = 36864 (4096 x 9)
knows_reserved_1_10 = 40960 (4096 x 10)


Türkçeleştirmek için ise skill.csv dosyasına
Code:
skl_reading|Okuma
skl_reading_desc|Bu bir okuma yeteneğidir.

Gibi yazmanız yeterli olacaktır.

Her hangi bir kodun içinde sorgulamak için ise diğer kodlardaki gibi

Code:
(store_skill_level, ":reading", skl_reading, "trp_player"),
(try_begin),
  (gt, ":reading", 0),
  ...
(try_end),

Gibi kullanabilirsiniz. Ek olarak eğer isterseniz bu bir okuma yeteneği olduğu için module_game_menus.py içerisinde

Code:
        (eq,"$background_answer_3",cb3_student),

aratıp hemen altına;

Code:
        (troop_raise_skill, "trp_player", skl_reading, 1),

şeklinde ekleyip öğrenci başlayanların başlangıçta 1 okuma yeteneği ile başlamasını sağlayabilirsiniz.
Bu eklediğimiz skilin bir işe yarsmasını nasıl sağlıyoruz?
 
erennuman_mb said:
Porshy said:
Bu dersimizde yeni yetenek eklemeyi öğreneceğiz.

Değiştireceğimiz dosyalar;
Code:
module_skills.py
header_skills.py

Aslında bu konu en basit konulardan birisidir. Çünkü bizim için 10 adet reserve skill bırakılmış.

Düzenlemeye başlamadan önce yedek almayı unutmayınız.

ilk olarak module_skills.py dosyasını açalım.

Code:
  ("reserved_1","Reserved Skill 1",sf_base_att_cha|sf_inactive,10,"This is a reserved skill."),

Ben burada reserved_1 skillini seçtim, siz istediğiniz bir taneyi seçebilirsiniz.

Okuma yeteneği ekleyeceğimizi var sayalım yani "skl_reading".

Code:
  ("reading","Reading",sf_base_att_int,10,"This is a reading skill."),

Burada kesinlikle dikkat edilmesi gereken kısım düzenlediğimiz yeteneğin yerini değişmemek çünkü birazdan header_skills.py içinde direkt olarak konum belirteceğimiz için eğer 1 skillin yeri değişirse diğer skillerinde sayıları 1 azalacak veya artacağından bütün ayarları tekrardan yapmanız gerekecektir.

Burada "reserved_1" yerine "reading" yazdık. Bu skl_reading'e denk geliyor.
"Reading" kısmı ise skillin görünen ismi olacaktır. (Dil dosyasında skl_reading|Okuma)
sf_base_att_int kısmı ise yeteneğimizin temelidir "cha" Karizma, "int" Zeka, "agi" Çeviklik ve "str" Güç değerlerini temsil eder. Okuma bir zeka yeteneği olduğundan ben sf_base_att_int olarak değiştirdim.
sf_inactive kısmı ise skill in karakter ekranında gizlenmesini sağlar, bu nedenle kaldırdık.
10 kısmı ise skill in en yüksek gelebileceği değerdir. Yani oraya 5 yazarsak skilli en fazla 5 e kadar yükseltebilirsiniz.
"This is a reading skill." kısmı ise skill açıklamasıdır, yani skill üzerine geldiğimizde sağ üste yazan bilgidir. (Dil dosyasında skl_reading_desc|Bu okuma yeteneğidir.)

Gel gelelim şimdi skl_reading tanımlamasını yapmaya, header_skills.py dosyasını açalım ve değiştirdiğimiz skilli bulalım. Burada reserved_1'i değiştirdiğimiz için skl_reserved_1 kısmını bulalım.

Code:
skl_reserved_1 = 3

bunu skl_reading olarak değiştirelim.

Code:
skl_reading = 3

Bu kısmı yapmazsak eğer skl_reading tanımlanamadı hatası ile karşılaşırsınız.

Aynı dosya içerisinde edeğiştirdiğimiz yeteneğin knows_ kısmını bulalım yani knows_reserved_1

Code:
knows_reserved_1_1 = 4096
knows_reserved_1_2 = 8192
knows_reserved_1_3 = 12288
knows_reserved_1_4 = 16384
knows_reserved_1_5 = 20480
knows_reserved_1_6 = 24576
knows_reserved_1_7 = 28672
knows_reserved_1_8 = 32768
knows_reserved_1_9 = 36864
knows_reserved_1_10 = 40960

reserved_1 kısımlarını reading olarak değişelim yani;

Code:
knows_reading_1 = 4096
knows_reading_2 = 8192
knows_reading_3 = 12288
knows_reading_4 = 16384
knows_reading_5 = 20480
knows_reading_6 = 24576
knows_reading_7 = 28672
knows_reading_8 = 32768
knows_reading_9 = 36864
knows_reading_10 = 40960

Peki buradaki 4096, 8192 kısımları nedir. Her skill in ilk değeri bir öncekinin 16 ile çarpımına eşittir yani;

Code:
knows_trade_1 = 1
knows_leadership_1 = 16
knows_prisoner_management_1 = 256
knows_reserved_1_1 = 4096

burada gördüğünüz gibi trade_1 = 1 bunu 16 ile çarpınca leadership_1 e eşit oluyor yani 16, bunu 16 ile çarpnca bir sonraki yetenek yani prisoner_managementin başlangıcını buluyoruz yani 256 bunuda 16 ile çarptığımızda 4096 ile bir sonraki yeteneğin başlangıcını buluyoruz ve bu böyle gidiyor.

Aynı zamanda her skill ise kendi içinde ilk döngünün sırayla katına sahiptir yani demek istediğim şu ki taban başlangıç 4096 ise _2 kısmı bunun 2 katı _3 kısmı bu sayının 3 katı olacaktır yani örnek olarak göstermek gerekirse;

Code:
knows_reserved_1_1 = 4096 (4096 x 1)
knows_reserved_1_2 = 8192 (4096 x 2)
knows_reserved_1_3 = 12288 (4096 x 3)
knows_reserved_1_4 = 16384 (4096 x 4)
knows_reserved_1_5 = 20480 (4096 x 5)
knows_reserved_1_6 = 24576 (4096 x 6)
knows_reserved_1_7 = 28672 (4096 x 7)
knows_reserved_1_8 = 32768 (4096 x 8)
knows_reserved_1_9 = 36864 (4096 x 9)
knows_reserved_1_10 = 40960 (4096 x 10)


Türkçeleştirmek için ise skill.csv dosyasına
Code:
skl_reading|Okuma
skl_reading_desc|Bu bir okuma yeteneğidir.

Gibi yazmanız yeterli olacaktır.

Her hangi bir kodun içinde sorgulamak için ise diğer kodlardaki gibi

Code:
(store_skill_level, ":reading", skl_reading, "trp_player"),
(try_begin),
  (gt, ":reading", 0),
  ...
(try_end),

Gibi kullanabilirsiniz. Ek olarak eğer isterseniz bu bir okuma yeteneği olduğu için module_game_menus.py içerisinde

Code:
        (eq,"$background_answer_3",cb3_student),

aratıp hemen altına;

Code:
        (troop_raise_skill, "trp_player", skl_reading, 1),

şeklinde ekleyip öğrenci başlayanların başlangıçta 1 okuma yeteneği ile başlamasını sağlayabilirsiniz.
Bu eklediğimiz skilin bir işe yarsmasını nasıl sağlıyoruz?

Onu sen ayarlayacaksın. Nerede kullanmak istiyorsan koşul komutları vs ile kullanabilrsin

Şu alttaki kodlar işine yarayabilir

Code:
(troop_raise_skill, "trp_player", skl_leadership, 7),

Code:
(store_skill_level, ":leadership", "skl_leadership", "trp_player"),
    (val_mul, ":leadership", 5),
    (store_attribute_level, ":charisma", "trp_player", ca_charisma),

Code:
(try_begin),
       (eq, ":max_skill_owner", "trp_player"),
       (assign, reg3, 1),

bu kodlar işine yarayabilir. Daha fazlasını Header Operations dosyasında bulabilirsin. İyi forumlar
 
Eğer Modül Sistem üzerinden oyunun tarihini değiştirmek isterseniz de,

module_scripts
dosyasına giriyoruz.
"game_get_date_text"
scriptini buluyoruz sonra biraz altta
      (assign, ":cur_year", 1257),
satırını buluyoruz, turuncu ile yazılan oyunun başlangıç tarihidir.
Bu tarihi istediğiniz gibi değiştirebilirsiniz :smile:
 
fightlord123 said:
Eğer Modül Sistem üzerinden oyunun tarihini değiştirmek isterseniz de,

module_scripts
dosyasına giriyoruz.
"game_get_date_text"
scriptini buluyoruz sonra biraz altta
      (assign, ":cur_year", 1257),
satırını buluyoruz, turuncu ile yazılan oyunun başlangıç tarihidir.
Bu tarihi istediğiniz gibi değiştirebilirsiniz :smile:
Eski karakter hesabı sıfırlanır mı yapsam. Oyun datalarına girip keşfetmeyi falan istiyorum. Bi ara denedim de oyun kafayı yedi.
 
yaa şu moduleyi bir kullanmayı beceremiyorum yardımcı olur musun acaba nerede hata yaptığıma dair sen ne dediysen aynısını yaptım sadece sende değil farklı modlarda da becere miyom?napcam bilmiyorum yazıları kopyala yapıştır yapıyorum sorun ordamı acaba?
 
abi ben module giremiyorum phytonmudur nedir indirdim path e yerini belirledim falan module system gelmiyo masaüstüne falan aratıyom yok module system 1558 die falan filen  :oops: :oops:
 
Back
Top Bottom