[OSP][Kod] Karargah

Users who are viewing this thread

erennuman_mb

Grandmaster Knight
WF&SWBNWVC
Bugün istediğimiz zaman askerlerimizi  bırakabileceğimiz bir üs yapmayı göstereceğim. Basit bir kod, bugün sırf buna uğraştım. Modül sistemi de kavramaya başladım.
İlk önce module_parties'i açalım:
Code:
("zendar","Zendar",pf_disabled|icon_town|pf_is_static|pf_always_visible|pf_hide_defenders, no_menu, pt_none, fac_neutral,0,ai_bhvr_hold,0,(18,60),[]),
satırının altına
Code:
("quarters","Troop Quarters",pf_disabled|icon_camp|pf_always_visible, no_menu, pt_none, fac_neutral,0,ai_bhvr_hold,0,(20,60),[]),
satırını ekleyelim. Bu üssümüzün kodudur. Koordinatlarını rastgele yazabilirsiniz.

Ardından module_game_menus'te
Code:
("action_retire",[],"Retire from adventuring.",
       [(jump_to_menu, "mnu_retirement_verify"),
        ]
       ),
nın altına
Code:
("camp_leave_troops",[(neg|party_is_active, "p_quarters"),],"Leave some of your troops here.",
	   [
      (jump_to_menu, "mnu_quarters_built"),
      ]
	  ),
bunu ekleyin. Böylece kamp mensündeki bir işe giriş bölümünden üssümüzü kurabileceğiz.
Sonra
Code:
("camp_action_4",[],"Back to camp menu.",
       [(jump_to_menu, "mnu_camp"),
        ]
       ),
      ]
  ),
bunun altına bir satır boşluk bırakarak
Code:
("quarters_built",mnf_disable_all_keys,
   "The quarters are ready.",
   "none",
   [(enable_party, "p_quarters"),
   (party_get_position, pos50, "p_main_party"),
    (party_set_position, "p_quarters", pos50),
     ],
   
 [
	("quarters_leave",[],"Leave.",
	 [(party_add_members, "p_quarters", "trp_quartermaster",1),
	 (change_screen_return),
	 ]
	),
 ]
  ), 
bunu ekleyin. Böylece bu menü çıktığı zaman haritada görünmeyen üssümüz oyuncunun yanında belirecek. trp_quartermaster ise parti yok olmasın diye konulacak.
Ardından bir satır boşluk bırakarak altına şunu ekleyin:
Code:
("quarters",mnf_disable_all_keys,
   "You can leave troops in your quarters and take them later.",
   "none",
   [],
     [
	  ("quarters_manage_troops",[],"Manage your troops.",
	   [
	    (change_screen_exchange_members,0),
	   ]
	  ),
	  ("quarters_destroy",[],"Disband the quarters.",
	   [
		(party_get_num_companion_stacks, ":num_stacks", "p_quarters"),
        (party_get_num_companions, ":num_companions", "p_quarters"),
        (party_get_free_companions_capacity, ":party_room", "p_main_party"),
		(try_begin),
		  (le, ":num_companions", ":party_room"),
		    (try_for_range, ":i_stack", 0, ":num_stacks"),
		      (party_stack_get_troop_id, ":stack_troop", "p_quarters", ":i_stack"),
			  (try_begin),
		        (neq, ":stack_troop", "trp_quartermaster"),
                (party_stack_get_size, ":stack_size", "p_quarters", ":i_stack"),
		        (party_remove_members, "p_quarters", ":stack_troop", ":stack_size"),
		        (party_add_members, "p_main_party", ":stack_troop", ":stack_size"),
				(disable_party, "p_quarters"),
	            (change_screen_return),
			  (else_try),
			    (jump_to_menu, "mnu_quarters_are_you_sure"),
			  (try_end),
			(try_end),
		(try_end),
	   ]
	  ),
	  ("quarters_leave_2",[],"Leave.",
	   [(change_screen_return),]
	  ),
	 ]
  ),
  
  ("quarters_are_you_sure",mnf_disable_all_keys,
  "Your party doesn't have room for {reg1} of your soldiers. These troops will be destroyed. Do you still want to continue?",
  "none",
  [],
    [
      ("quarters_yes",[],"Yes.",
	  [
	      (party_get_num_companion_stacks, ":num_stacks", "p_quarters"),
          (party_get_free_companions_capacity, ":party_room", "p_main_party"),
		    (try_for_range_backwards, ":selected_stack", 0, ":num_stacks"),
			  (party_stack_get_troop_id, ":stack_troop", "p_quarters", ":selected_stack"),
		      (party_stack_get_size, ":stack_size", "p_quarters", ":selected_stack"),
			  (try_begin),
			    (neq, ":stack_troop", "trp_quartermaster"),
				(try_begin),
			      (le, ":stack_size", ":party_room"),
		          (party_remove_members, "p_quarters", ":selected_stack", ":stack_size"),
		          (party_add_members, "p_main_party", ":stack_troop", ":stack_size"),
				(else_try),
			      (gt, ":stack_size", ":party_room"),
				  (val_sub, ":stack_size", ":party_room"),
				  (party_remove_members, "p_quarters", ":stack_troop", ":stack_size"),
		          (party_add_members, "p_main_party", ":stack_troop", ":stack_size"),
				(try_end),
		      (else_try),
			    (eq, ":party_room", 0),
	            (change_screen_return),				
		      (try_end),
		    (try_end),
			(change_screen_return),
	  ]
	  ),
	  ("quarters_no",[],"No.",
	  [(jump_to_menu, "mnu_quarters"),]
	  ),
    ]
  ),
Bu üssümüze girdiğimizde çıkan kod. İlk seçenek içeri adam koyup almayı sağlıyor. İkinci seçenek üssü topluyor. Üçüncüsü de ayrıl.

Sonra module_scripts'te
Code:
(eq, "$g_encountered_party", "p_zendar"),
           (jump_to_menu, "mnu_zendar"),
satırının altına
Code:
(else_try),
(eq, "$g_encountered_party", "p_quarters"),
		   (jump_to_menu, "mnu_quarters"),
Satırını ekleyin. Bu üssümüze girdiğimiz anda menüsünün çıkmasını sağlayacak.
Bir de
Code:
(try_begin),
        (is_between, ":troop_id", companions_begin, companions_end),
        (val_mul, ":wage", 2),
      (try_end),
Bunun altına
Code:
(try_begin),
	    (eq, ":troop_id", "trp_quartermaster"),
		(assign, ":wage", 0),
	  (try_end),
Bunu ekleyin. Böylece Quartermaster'a para ödemeyeceğiz.

Ve üssümüzün yok olmaması için orada duracak bir npc lazım(önceki adımlarda söylemiştim). Bunun için module_troops'ta
Code:
["fugitive","Nervous Man","Nervous Men",tf_guarantee_boots|tf_guarantee_armor,0,0,fac_commoners,
   [itm_short_tunic,itm_linen_tunic,itm_coarse_tunic, itm_tabard, itm_leather_vest, itm_woolen_hose, itm_nomad_boots, itm_blue_hose, itm_wrapping_boots, itm_fur_hat, itm_leather_cap, itm_sword_medieval_b, itm_throwing_daggers],
   def_attrib|str_24|agi_25|level(26),wp(180),knows_common|knows_power_throw_6|knows_power_strike_6|knows_ironflesh_9,man_face_middle_1, man_face_old_2],
Bunun altına
Code:
["quartermaster","Quartermaster","Quartermaster",tf_guarantee_boots|tf_guarantee_armor|tf_hero|tf_unmoveable_in_party_window,0,0,fac_commoners,
  [itm_rich_outfit,itm_hide_boots],
  str_6|agi_6|int_4|cha_5|level(5),wp(10),knows_common,0x0000000ab000318136db6db6db6db6db6db00000000001db6db0000000000000000],
ekliyoruz. Face code, ekipman vs. yi kendi kafanıza göre yapabilirsiniz.

Sonra module_presentations'ta
Code:
(this_or_next|eq, ":party_no", "p_main_party"),
		             (eq, ":garrison_troop", 1),
        (assign, ":total_wage", 0),
        (party_get_num_companion_stacks, ":num_stacks", ":party_no"),
        (try_for_range, ":i_stack", 0, ":num_stacks"),
          (party_stack_get_troop_id, ":stack_troop", ":party_no", ":i_stack"),
          (party_stack_get_size, ":stack_size", ":party_no", ":i_stack"),
          (call_script, "script_game_get_troop_wage", ":stack_troop", ":party_no"),
          (assign, ":cur_wage", reg0),
          (val_mul, ":cur_wage", ":stack_size"),
          (val_add, ":total_wage", ":cur_wage"),
        (try_end),
        (try_begin),
          (eq, ":garrison_troop", 1),
          (val_div, ":total_wage", 2), #Half payment for garrisons
        (else_try),
          (eq, ":party_no", "p_main_party"),
          (store_sub, ":total_payment_ratio", 14, "$g_cur_week_half_daily_wage_payments"), #between 0 and 7
          (val_mul, ":total_wage", ":total_payment_ratio"),
          (val_div, ":total_wage", 14),
        (try_end),
##        (gt, ":total_wage", 0),
        (val_mul, ":total_wage", -1),
        (val_add, ":net_change", ":total_wage"),
        (str_store_party_name, s0, ":party_no"),
        (try_begin),
          (eq, ":party_no", "p_main_party"),
          (str_store_string, s0, "str_s0s_party"),
        (try_end),
        (create_text_overlay, reg1, "str_wages_for_s0", 0),
        (position_set_x, pos1, 900),
        (position_set_y, pos1, 900),
        (overlay_set_size, reg1, pos1),
        (position_set_x, pos1, 25),
        (position_set_y, pos1, ":cur_y"),
        (overlay_set_position, reg1, pos1),
        (try_begin),
          (lt, ":total_wage", 0),
          (assign, reg0, ":total_wage"),
          (create_text_overlay, reg1, "@{!}{reg0}", tf_right_align|tf_single_line),
          (overlay_set_color, reg1, 0xFF0000),
        (else_try),
          (create_text_overlay, reg1, "@None", tf_right_align|tf_single_line),
        (try_end),
        (position_set_x, pos1, 900),
        (position_set_y, pos1, 900),
        (overlay_set_size, reg1, pos1),
        (position_set_x, pos1, 500),
        (position_set_y, pos1, ":cur_y"),
        (overlay_set_position, reg1, pos1),
        (val_sub, ":cur_y", 27),
      (try_end),
Kısmının altına
Code:
(try_begin),
	    (party_is_active, "p_quarters"),
		(assign, ":total_wage", 0),
		(party_get_num_companion_stacks, ":num_stacks", "p_quarters"),
		(try_for_range, ":i_stack", 0, ":num_stacks"),
		  (party_stack_get_troop_id, ":stack_troop", "p_quarters", ":i_stack"),
          (party_stack_get_size, ":stack_size", "p_quarters", ":i_stack"),
          (call_script, "script_game_get_troop_wage", ":stack_troop", "p_quarters"),
          (assign, ":cur_wage", reg0),
          (val_mul, ":cur_wage", ":stack_size"),
          (val_add, ":total_wage", ":cur_wage"),
		(try_end),
		(val_mul, ":total_wage", -1),
        (val_add, ":net_change", ":total_wage"),
        (str_store_party_name, s0, "p_quarters"),
		(create_text_overlay, reg1, "str_wages_for_s0", 0),
        (position_set_x, pos1, 900),
        (position_set_y, pos1, 900),
        (overlay_set_size, reg1, pos1),
        (position_set_x, pos1, 25),
        (position_set_y, pos1, ":cur_y"),
        (overlay_set_position, reg1, pos1),
        (try_begin),
          (lt, ":total_wage", 0),
          (assign, reg0, ":total_wage"),
          (create_text_overlay, reg1, "@{!}{reg0}", tf_right_align|tf_single_line),
          (overlay_set_color, reg1, 0xFF0000),
        (else_try),
          (create_text_overlay, reg1, "@None", tf_right_align|tf_single_line),
        (try_end),
        (position_set_x, pos1, 900),
        (position_set_y, pos1, 900),
        (overlay_set_size, reg1, pos1),
        (position_set_x, pos1, 500),
        (position_set_y, pos1, ":cur_y"),
        (overlay_set_position, reg1, pos1),
        (val_sub, ":cur_y", 27),
      (try_end),
Kısmını ekliyoruz.
Bunu da yaptıktan sonra kaydedip build module'ü çalıştırıyoruz ve oyuna girip tadını çıkarıyoruz :smile:
yRQ83j.jpg

68O7Xv.jpg

RBMLPR.jpg

p91qWa.jpg

kJo3WD.jpg

a0WJGQ.jpg

YJ02NZ.jpg

D9ZVdv.jpg

EponRZ.jpg

jjZPWm.jpg

25Am9A.jpg
Bunu test ettim ve bir bug ile karşılaştım buraya koyduğumuz askerlere para ödemiyoruz. Şimdilik kullanmayın derim. Veya kendiniz ayarlayın ben çözüm bulana kadar. Hallettim.
Kodu tamamen gözden geçirip eksiklerini düzelttim. Gönül rahatlığıyla kullanabilirsiniz.
 

Sultan Berkuk

Sergeant at Arms
Çok güzel olmuş. Sahne eklenebilirmi ve eklediğimiz sahne örneğin Tulga yakınlarında oldu ve ben kampı toplayıp Rodokların orda tekrar kurdum. Oluşturduğum sayne aynı kalırmı? 
bunu ekleyin. Böylece bu menü çıktığı zaman haritada görünmeyen üssümüz oyuncunun yanında belirecek. trp_quartermaster ise parti yok olmasın diye konulacak.
Ardından bir satır boşluk bırakarak altına şunu ekleyin:
Kampın görünmesi ve köy gibi az asker varken yağmalanması mümkünmü?
 

erennuman_mb

Grandmaster Knight
WF&SWBNWVC
JanakirKağan said:
Çok güzel olmuş. Sahne eklenebilirmi ve eklediğimiz sahne örneğin Tulga yakınlarında oldu ve ben kampı toplayıp Rodokların orda tekrar kurdum. Oluşturduğum sayne aynı kalırmı? 
bunu ekleyin. Böylece bu menü çıktığı zaman haritada görünmeyen üssümüz oyuncunun yanında belirecek. trp_quartermaster ise parti yok olmasın diye konulacak.
Ardından bir satır boşluk bırakarak altına şunu ekleyin:
Kampın görünmesi ve köy gibi az asker varken yağmalanması mümkünmü?
Yorumun için teşekkürler. Buraya bir sahne eklemek elbette mümkün. Eklediğin zaman haritadaki yerine göre değişip değişmemesini ayarlayabilirsin. Normalde değişmez. Fakat arazisini rastgele yaparsan bulunduğun yere göre olur.
Yapay zekanın kampla nasıl etkileşim kurduğunu test etmedim. Fakat tahminim kampı fark etmeyecekleri yönünde.
 
Top Bottom