Skilleri Etkileyen Objeler [DERS]

Users who are viewing this thread

kerosima

Knight
Evet, burada skilleri veya attributeleri etkileyen, yani bonusu olan objeleri nasıl yapacağımızı yazacağım...
Değiştireceğimiz dosyalar module_items ve module_triggers...
Yazacağım örnek, bir kitap."Nasıl Yön Bulunur?" diye, dolayısıyla bir kere aldığımızda, pathfinding skilli 1 artıtracak, sonra satsak da farketmeyecek.
İşte açıklamalı tutorial:
Module_items'i açıyoruz, uygun bir yere etkileyecek obje olan kitabı giriyoruz...
Code:
["bookpathfinding","The Trackers Handbook", [("book1",0)], itp_merchandise|itp_type_goods, 0, 53,weight(7)|abundance(70),imodbits_none],
Açıklama: "bookpathfinding" isim, bir önemi yok... Tırnak içindeki "Yön Bulma" ise asıl oyunda göreceğimiz isimi...[()] içerisindeki kelime model bilgisi, buraya kitabınızın modelini, brfye nasıl kaydettiyseniz onu yazacaksınız.itp_ ile başlayanlar "bayrak"lar, yani objenin ne olduğunu oyuna anlatan kelimecikler, weight(:cool: ağırlığı, bir kitap için 5-10 arası bir değer iyi olabilir.abundance ise, bulunurluk, yüksek bir değer verirseniz, satıcılarda daha kolay bulunur...imodbits_none ise, bu kitabın bir sıfatı(Sakat,Çentilmiş,Paslı,Çatlak) olmadığını anlatıyor...

Bunu kaydedip kapattıktan sonra, module_triggers'i açıyoruz,
En altta şu kodu buluyoruz ve orada gösterilen yere az sonra söyleyeceğim kodu giriyoruz...

Code:
(2.0, 0, 0,
   [
      (check_quest_active,"qst_kidnapped_girl"),
      (main_party_has_troop,"trp_kidnapped_girl"),
      (eq,"$kidnapped_girl_bandits_attacked",1),
      (eq,"$kidnapped_girl_joined",0),
    ],
   [
      (assign,"$kidnapped_girl_joined",1),
    ]
   ),
---KODU BURAYA GİRİN---

Gireceğimiz kodlar şunlar, açıklaması ile birlikte geliyor:

Code:
 (0.1, 5, 1, #Bu satırdaki rakamların anlamları: 1.rakam, alttaki koşulları hangi aralarla test edeciğimizi belirler(saniye olarak), ikinci rakam uygulama süresi, koşullar                  doğruldandıktan ne kadar sonra uygulamanın gerçekleşeceğidir, son rakamı boşverin...
    [
	    
		(player_has_item, "itm_bookpathfinding"), #Burası koşul kısmı, yani alt kısmın gerçekleşmesi için, buradaki koşullar doğrulanmalı.Burası oyuncunun kitaba sahip olup  olmadığına baktığımız kısım...
		(eq, "$bonus_given", 0),#burada daha önce bonusu almadığından emin oluyoruz...
                (store_skill_level, reg(1), "skl_pathfinding", "trp_player"), #Burada oyuncumuzun pathfinding skillini kaydediyoruz(eski halini)
                (lt, reg(1),10), #Burada pathfindingimizin 9dan düşük olduğundan emin oluyoruz.Bunun sebebi, pathfinding 10 olup da 1 eklemeye çalışırsak, hata verecek  olmasıdır.
	],
	[
		(troop_raise_skill, "trp_player", "skl_pathfinding", 1), #Burada artık, koşullar doğrulanırsa olacak şeylerin bulunduğu kısma geçip, bonusu veriyoruz
		(assign, "$bonus_given", 1), #Tekrar bonus almaması için bonus_giveni 1 yapıyoruz...
	]
  ),

Hepinize iyi şanslar, bundan sonraki tutorial bir pusula olacak, onun farkı ise sattığımızda bonusun geri düşecek olması...

PUSULA: şimdi de geri sattığımızda bonusu giden obje tutoriali yazıyorum.
Açıklamalı:
Önce item ekleriz:
Code:
["compass","Compass", [("compass",0)], itp_merchandise|itp_type_goods, 0, 53,weight(7)|abundance(70),imodbits_none], #bunu module_items'te istediğiniz yere ekleyin.Buradaki obje pusula, 70 abundance ile her yerde bulunabilir.
Şimdi triggersi açın, ilk dersten tek farkı başka bir tetikleyici(trigger) ile bonusu silmemiz.İlk dersi okursanız daha rahat anlarsınız; çünkü burada açıklama yazmadım.
Code:
(0.1, 0, 1,
    [
	    
		(player_has_item, "itm_compass"),
		(eq, "$bonus_given", 0),
	],
	[
		(troop_raise_skill, "trp_player", "skl_pathfinding", 1),
		(assign, "$bonus_given", 1),
	]
  ),
  (0.1, 0, 1,
   [
         
		 (eq, "bonus_given", 1), #Bonusu almadıysak silmemesi için koşulların arasında bonusun verilmiş olup olmadığını sorguluyoruz.
         (neq|player_has_item, "itm_compas"), #Oyuncumuzda artık pusula yoksa bonusu sileceğiz, anahtar kısım burası.
	],
	[
		 (troop_raise_skill, "trp_player", "skl_pathfinding", -1),#Olay kısmında bu satırda azıcık hile yapıyoruz.Skill'i -1 oranında artırıyoruz, dolayısıyla bonus düşüyor.
		 (assign, "$bonus_given", 0), #Artık oyuncumuzun bir bonusu yok, bunu yazmazsak bir daha pusula alınca skill artmayacaktır.
	],
  ),
 
Güzel bir ders olmuş, şimdilik 894'Ün modülüne bakmadığım için inceleme fırsatım olmadı. Bir iki örnek daha yapsan daha anlaşılır olur kanaatindeyim. :roll:
 
Aslında bu tür kodlar,genelde büyü modları ile uğraşan kişilere yarıyor...Bir sağlık iksiri satın alınca,ironflesh'in artması gibi...(aklıma birşey geldi,iyi bir boot satın alınca,athletics artması)
Kodlar için sağol,foruma yararlı olacağından eminim,bu ders evdeki bilgisayarımda hazırdı,koymaya üşendim bir ara,ama benden daha güzel hazırlamışsın... :grin: İyiki yayınlamamışım... :wink:
 
Yorumun için sağol, senin emeğine de yazık etmişim ya neyse...
Ben pusula için yaptım, haritanın altındaki pusulayı obje olarak ekledim oyuna...
Sırf kendimi geliştirmek için.
 
Bir gün tekrar mod yaparsam, bu ders kesinlikle işime yarayacaktır. Bir şey sorabilir miyim; yeni modulesystemle yeni özellikler oyuna eklenebiliyor mu?(powerdraw, ironflesh... gibi)
 
Evet eklenebiliyor.
Ben şimdi Obliviondaki persuade gibi bir şey yapacağım...
Yani "İkna yeteneği"
ya da "etkili konuşma"...
 
Şimdi deniyorum, bakalım olursa dersini koyarım...
Çok kötü bir denemem oldu; saece aklımdaki çalışma mantığını gösterebilmek için...
Artık devamını getirebilirsiniz...
module_skills'e sadece persuade diye bir skill ekleyin, sonra ya benim gibi bir test troopu oluşturun veya kendi bildiğiniz gibi yapın..
Diyaloglarda ise sadece şunu yaptım; fakat dediğim gibi bu sadece başlangıç...
Code:
[trp_persuade_tester, "start", [] , "Hi there, persuade me if you can! Hehehe!", "persuade_him",[]],
  [trp_persuade_tester|plyr, "persuade_him", [] , "I like you too much...", "persuade_result",
  [
          (store_skill_level, reg(1), "skl_persuade", "trp_player"),
		  (val_add, reg(1), 10),
		  (call_script, "script_change_player_relation_with_troop", "trp_persuade_tester", reg(1))
		  
  ]],
  [trp_persuade_tester|plyr, "persuade_him", [] , "I think you are good but... YOu aren't perfect...", "persuade_result",
  [
          (store_skill_level, reg(1), "skl_persuade", "trp_player"),
		  (val_add, reg(1), 1),
		  (call_script, "script_change_player_relation_with_troop", "trp_persuade_tester", reg(1))
		  
  ]],
  [trp_persuade_tester|plyr, "persuade_him", [] , "I hate you! You bastard!", "persuade_result",
  [
          (store_skill_level, reg(1), "skl_persuade", "trp_player"),
		  (val_mul, reg(1), 10),
		  (call_script, "script_change_player_relation_with_troop", "trp_persuade_tester", reg(1))
		  
  ]],
  [trp_persuade_tester, "persuade_result", [(lt, "$g_talk_troop_relation", 0)], "I will KILL YOU!Little Bastard!!","close_window",[]],
  [trp_persuade_tester, "persuade_result", [(eq, "$g_talk_troop_relation", 0)], "I'm neutral with you, I don't know you, you can go now...","close_window",[]],
  [trp_persuade_tester, "persuade_result", [(ge, "$g_talk_troop_relation", 0)], "I.. I.. I will give you all of my money, you are a hero!","close_window",[]],
 
Sağolokan; fakat daha önce hata olmayan kodlarda saçma hatalar çıktı, her şey karıştı, bugünlük bu kadar, bir daha açtığımda bakarım, hem İng. forumda yapamadığım şeylerin cevapları da gelmiş olur...
 
Bu arada aklıma bir soru geldi. Heybemize(Inventory'mize) aldığımızda a özelliğimizi artıran ve de görev için lazım olduğundan satamayacağımız eşya nasıl yapılır? Yani herhangi bir eşyanın satılmasını engellemek için ne kodu gerekir? 
 
Evet satılamayan item yapılırsa güzel olabilir.Ya da bir kere okunup sonra yok olan kitap yapılsa o da güzel olur.
 
Bir saniye, işte çalışıyor, şimdi de geri sattığımızda bonusu giden obje tutoriali yazıyorum.
Açıklamalı:
Önce item ekleriz:
Code:
["compass","Compass", [("compass",0)], itp_merchandise|itp_type_goods, 0, 53,weight(7)|abundance(70),imodbits_none], #bunu module_items'te istediğiniz yere ekleyin.Buradaki obje pusula, 70 abundance ile her yerde bulunabilir.
Şimdi triggersi açın, ilk dersten tek farkı başka bir tetikleyici(trigger) ile bonusu silmemiz.İlk dersi okursanız daha rahat anlarsınız; çünkü burada açıklama yazmadım.
Code:
(0.1, 0, 1,
    [
	    
		(player_has_item, "itm_compass"),
		(eq, "$bonus_given", 0),
	],
	[
		(troop_raise_skill, "trp_player", "skl_pathfinding", 1),
		(assign, "$bonus_given", 1),
	]
  ),
  (0.1, 0, 1,
   [
         
		 (eq, "bonus_given", 1), #Bonusu almadıysak silmemesi için koşulların arasında bonusun verilmiş olup olmadığını sorguluyoruz.
         (neq|player_has_item, "itm_compas"), #Oyuncumuzda artık pusula yoksa bonusu sileceğiz, anahtar kısım burası.
	],
	[
		 (troop_raise_skill, "trp_player", "skl_pathfinding", -1),#Olay kısmında bu satırda azıcık hile yapıyoruz.Skill'i -1 oranında artırıyoruz, dolayısıyla bonus düşüyor.
		 (assign, "$bonus_given", 0), #Artık oyuncumuzun bir bonusu yok, bunu yazmazsak bir daha pusula alınca skill artmayacaktır.
	],
  ),
 
Arkadaşlar bu işi aktif bi şekilde yapan var mı. Mesela konu bana ilginç geldi.Bu şekilde silinen ya da satılmayan item yapılması ve görevlere eklenmesi ilginç olabilir.Baya eski bi konu ama ilgimi çekti.Kolay gelsin
 
ALPaGUT said:
Arkadaşlar bu işi aktif bi şekilde yapan var mı. Mesela konu bana ilginç geldi.Bu şekilde silinen ya da satılmayan item yapılması ve görevlere eklenmesi ilginç olabilir.Baya eski bi konu ama ilgimi çekti.Kolay gelsin
Silinen derken neyi kastettiğin tam anlamadım ama burdaki konuşma örneğindeki komut işine yarayabilir;
  [trp_marnid|plyr,"marnid_intro_talk", [(eq,"$marnid_joined_party")], "Would you fight in my service if I gave you a padded cloth?", "marnid_leather_hauberk_1",[]],
  [trp_marnid,"marnid_leather_hauberk_1", [(eq,"$marnid_join_party_answered")], "Well... Of course, why not? For all I know, you could be as good a captain as anyone else.\
Yes I would gladly follow you to battle if you gave me a padded cloth.", "marnid_leather_hauberk_2",[(assign,"$marnid_join_party_answered",1)]],
  [trp_marnid,"marnid_leather_hauberk_1", [], "Yes, I haven't changed my mind. I would.", "marnid_leather_hauberk_2",[]],
  [trp_marnid|plyr,"marnid_leather_hauberk_2", [(player_has_item,"itm_padded_cloth")], "Then, take this padded cloth I have. I want you to join .", "marnid_leather_hauberk_3_cloth",[]],
  [trp_marnid|plyr,"marnid_leather_hauberk_2", [(player_has_item,"itm_padded_leather"),(neg|player_has_item,"itm_padded_cloth")], "Then, take this padded leather I have. I want you to join me.", "marnid_leather_hauberk_3_leather",[]],
  [trp_marnid|plyr,"marnid_leather_hauberk_2", [], "Hmm. Let me think about this then.", "close_window",[]],
  [trp_marnid,"marnid_leather_hauberk_3_cloth", [(neg|hero_can_join,0)], "I would like to, friend. But I am afraid you don't have room for me in your party. Once you make room, let me know. I'm eager to leave this place.", "close_window",[]],
  [trp_marnid,"marnid_leather_hauberk_3_cloth", [], "Well, look at this. I feel that my luck is starting to turn back after all. I am at your service, friend. Let us hit the road and discover what adventures await us.", "close_window",[
(troop_remove_item,0,"itm_padded_cloth"),(troop_add_item,"trp_marnid","itm_padded_cloth"),
(troop_join,"trp_marnid"),(remove_troop_from_site,"trp_marnid"),(assign,"$marnid_joined_party",1)]],
Bir eşyanın satılmasını sağlamak için itp_merchandise komutu yeterli, dolayısıyla bunu silmek eşyanın satılmasını engelleyecektir;
["iron_greaves", "Iron Greaves", [("iron_greavesL",0)], itp_merchandise| itp_type_foot_armor  ,0, 434 , weight(3.5)|abundance(100)|head_armor(0)|body_armor(0)|leg_armor(33)|difficulty(0) ,imodbits_armor ],
["black_greaves", "Black Greaves", [("black_greavesL",0)], itp_type_foot_armor  ,0, 661 , weight(3.5)|abundance(100)|head_armor(0)|body_armor(0)|leg_armor(35)|difficulty(0) ,imodbits_armor ],
Bildiğimiz gibi demir çizme satılmakta ama kara çizme satılmamakta, yukarıda sebebi açıkça görülüyor.

Ayrıca herhangi bir eşyanın savaş ganimeti olarak çıkmasını istemiyorsak da itp_unique komutu işimizi görecektir ki benim TRForum Savaşları modunda özel eşyaların ele geçirilmesini engellemek için sıkça kullandığım gibi.
* * * * * * * * * *
Bu arada "İlim ilim bilmektir. İlim kendin bilmektir. Sen kendin bilmezsin. Bu nice okumaktır." diye olması gerekiyor. İyi günler.

 
Back
Top Bottom