Sahne İçindeki Troopları Hareket Ettirmek

Users who are viewing this thread

Osmanlı Senaryosu V2 ile uğraşmaya bir 10 dakikalık ara verdim :smile: Bu 10 dakika da size bir ders hazırlayım diye düşündüm. Neyse daha fazla lafı uzatmadan derse geçelim.

Bugün sizlere sahne içindeki troopları entry pointler arasında nasıl dolaştıracağımızı göstereceğim. Sahneye dolaşacak troop'u eklediğinizi varsayıyorum;

1) Module_Scripts'den aşağıdakini bulun;

  # script_init_town_walker_agents
  # Input: none
  # Output: none
  ("init_town_walker_agents",
    [(assign, ":num_walkers", 0),
    (try_for_agents, ":cur_agent"),
      (agent_get_troop_id, ":cur_troop", ":cur_agent"),
        (is_between, ":cur_troop", walkers_begin, walkers_end),
      (val_add, ":num_walkers", 1),
      (agent_get_position, pos1, ":cur_agent"),
      (try_for_range, ":i_e_p", 9, 40),#Entry points
        (entry_point_get_position, pos2, ":i_e_p"),
        (get_distance_between_positions, ":distance", pos1, pos2),
        (lt, ":distance", 200),
        (agent_set_slot, ":cur_agent", 0, ":i_e_p"),
      (try_end),
      (call_script, "script_set_town_walker_destination", ":cur_agent"),
    (try_end),
  ]),

Bunu aşağıdaki ile değiştirin;

  # script_init_town_walker_agents
  # Input: none
  # Output: none
  ("init_town_walker_agents",
    [(assign, ":num_walkers", 0),
    (try_for_agents, ":cur_agent"),
      (agent_get_troop_id, ":cur_troop", ":cur_agent"),
(eq, ":cur_troop", "trp_TROOP"),
        (this_or_next|is_between, ":cur_troop", walkers_begin, walkers_end),
      (val_add, ":num_walkers", 1),
      (agent_get_position, pos1, ":cur_agent"),
      (try_for_range, ":i_e_p", 9, 40),#Entry points
        (entry_point_get_position, pos2, ":i_e_p"),
        (get_distance_between_positions, ":distance", pos1, pos2),
        (lt, ":distance", 200),
        (agent_set_slot, ":cur_agent", 0, ":i_e_p"),
      (try_end),
      (call_script, "script_set_town_walker_destination", ":cur_agent"),
    (try_end),
  ]),

Kırmızı ile belirttiğim TROOP yazısına kendi istediğiniz troop'u.

2) Module_Scripts'den şimdi de bunu bulun;

  # script_set_town_walker_destination
  # Input: arg1 = agent_no
  # Output: none
  ("set_town_walker_destination",
    [(store_script_param_1, ":agent_no"),
    (assign, reg0, 9),
    (assign, reg1, 10),
    (assign, reg2, 12),
    (assign, reg3, 32),
    (assign, reg4, 33),
    (assign, reg5, 34),
    (assign, reg6, 35),
    (assign, reg7, 36),
    (assign, reg8, 37),
    (assign, reg9, 3:cool:,
    (assign, reg10, 39),
    (try_for_agents, ":cur_agent"),
      (agent_get_troop_id, ":cur_troop", ":cur_agent"),
      (is_between, ":cur_troop", walkers_begin, walkers_end),
      (agent_get_slot, ":target_entry_point", ":cur_agent", 0),
      (try_begin),
        (eq, ":target_entry_point", 9),
        (assign, reg0, 0),
      (else_try),
        (eq, ":target_entry_point", 10),
        (assign, reg1, 0),
      (else_try),
        (eq, ":target_entry_point", 12),
        (assign, reg2, 0),
      (else_try),
        (eq, ":target_entry_point", 32),
        (assign, reg3, 0),
      (else_try),
        (eq, ":target_entry_point", 33),
        (assign, reg4, 0),
      (else_try),
        (eq, ":target_entry_point", 34),
        (assign, reg5, 0),
      (else_try),
        (eq, ":target_entry_point", 35),
        (assign, reg6, 0),
      (else_try),
        (eq, ":target_entry_point", 36),
        (assign, reg7, 0),
      (else_try),
        (eq, ":target_entry_point", 37),
        (assign, reg8, 0),
      (else_try),
        (eq, ":target_entry_point", 3:cool:,
        (assign, reg9, 0),
      (else_try),
        (eq, ":target_entry_point", 39),
        (assign, reg10, 0),
      (try_end),
    (try_end),
    (assign, ":try_limit", 100),
    (assign, ":target_entry_point", 0),
    (try_for_range, ":unused", 0, ":try_limit"),
      (shuffle_range, 0, 11),
      (gt, reg0, 0),
      (assign, ":target_entry_point", reg0),
      (assign, ":try_limit", 0),
    (try_end),
    (try_begin),
      (gt, ":target_entry_point", 0),
      (agent_set_slot, ":agent_no", 0, ":target_entry_point"),
      (entry_point_get_position, pos1, ":target_entry_point"),
      (try_begin),
        (lt, ":target_entry_point", 32),
        (init_position, pos2),
        (position_set_y, pos2, 250),
        (position_transform_position_to_parent, pos1, pos1, pos2),
      (try_end),
      (agent_set_scripted_destination, ":agent_no", pos1, 0),
      (agent_set_speed_limit, ":agent_no", 5),
    (try_end),
  ]),

Aşağıdaki ile değiştirin;

  # script_set_town_walker_destination
  # Input: arg1 = agent_no
  # Output: none
  ("set_town_walker_destination",
    [(store_script_param_1, ":agent_no"),
    (assign, reg0, 9),
    (assign, reg1, 10),
    (assign, reg2, 12),
    (assign, reg3, 32),
    (assign, reg4, 33),
    (assign, reg5, 34),
    (assign, reg6, 35),
    (assign, reg7, 36),
    (assign, reg8, 37),
    (assign, reg9, 3:cool:,
    (assign, reg10, 39),
    (try_for_agents, ":cur_agent"),
      (agent_get_troop_id, ":cur_troop", ":cur_agent"),
      (eq, ":cur_troop", "trp_TROOP"),
      (this_or_next|is_between, ":cur_troop", walkers_begin, walkers_end),
      (agent_get_slot, ":target_entry_point", ":cur_agent", 0),
      (try_begin),
        (eq, ":target_entry_point", 9),
        (assign, reg0, 0),
      (else_try),
        (eq, ":target_entry_point", 10),
        (assign, reg1, 0),
      (else_try),
        (eq, ":target_entry_point", 12),
        (assign, reg2, 0),
      (else_try),
        (eq, ":target_entry_point", 32),
        (assign, reg3, 0),
      (else_try),
        (eq, ":target_entry_point", 33),
        (assign, reg4, 0),
      (else_try),
        (eq, ":target_entry_point", 34),
        (assign, reg5, 0),
      (else_try),
        (eq, ":target_entry_point", 35),
        (assign, reg6, 0),
      (else_try),
        (eq, ":target_entry_point", 36),
        (assign, reg7, 0),
      (else_try),
        (eq, ":target_entry_point", 37),
        (assign, reg8, 0),
      (else_try),
        (eq, ":target_entry_point", 3:cool:,
        (assign, reg9, 0),
      (else_try),
        (eq, ":target_entry_point", 39),
        (assign, reg10, 0),
      (try_end),
    (try_end),
    (assign, ":try_limit", 100),
    (assign, ":target_entry_point", 0),
    (try_for_range, ":unused", 0, ":try_limit"),
      (shuffle_range, 0, 11),
      (gt, reg0, 0),
      (assign, ":target_entry_point", reg0),
      (assign, ":try_limit", 0),
    (try_end),
    (try_begin),
      (gt, ":target_entry_point", 0),
      (agent_set_slot, ":agent_no", 0, ":target_entry_point"),
      (entry_point_get_position, pos1, ":target_entry_point"),
      (try_begin),
        (lt, ":target_entry_point", 32),
        (init_position, pos2),
        (position_set_y, pos2, 250),
        (position_transform_position_to_parent, pos1, pos1, pos2),
      (try_end),
      (agent_set_scripted_destination, ":agent_no", pos1, 0),
      (agent_set_speed_limit, ":agent_no", 5),
    (try_end),
  ]),

Aynı şekilde TROOP yazan yere kendi troop'unuzu yazın.

3) Bunları uyguladıktan sonra sahneye girdiğinizde 9,10,12,32,33,34,35,36,37,38,39 entry pointlerini elips* şeklinde sahneye dizin. Entry pointlerin arasında nesne olmamasına dikkat edin. Yapay zeka karşısında bir nesne gördüğü zaman kendisine en yakın entry pointe gitmeyi tercih edecektir. Kendisine yakın entry point nesnenin arkasında ise o nesneye çarpacaktır.

*Elips olması zorunlu değil Çember vs. şekillerde olabilir. Kolay gelsin şimdiden.



ANALİZ

1. aşama da yaptığımız trp_TROOP trop'unu hareket eden troopların arasına almak oldu. burada :cur_troop yerel değişkeni yürüyen troopları belirtiyordu. bizde :cur_troop değişkenini kendi troop'umuza eşitledik. Böylece troop'umuzu yürüyen troopların arasına aldık.

:cur_troop= yürüyen troopları belirten yerel değişken
eq= eşit demek
is_between= arasında
this_or_next= Ya da demek.
walkers_begin= bunlar module_constants'da bulunur ve muhtemelen birşeye eşdeğerdir. Mesela "trp_town_walker"a eşdeğerdir.
walkers_end= Yukarıdakiyle hemen hemen aynı.

(eq, ":cur_troop", "trp_TROOP"),
        (this_or_next|is_between, ":cur_troop", walkers_begin, walkers_end),

2.Aşamada hangi walkerların  9,10,12,32,33,34,35,36,37,38,39 entry pointleri arasında dolaşacağını belirttik. yukarıdakinin aynısını yaptık belirtmek için. Peki  9,10,12,32,33,34,35,36,37,38,39 entry pointleri arasında dolaşacağını nasıl anladık? 2. aşamadaki script'i incelerseniz, :target_entry_point yerel değişkenlerinde hangi entry pointlere gitmesi gerektiğini belirtmiş. bakınız;

  # script_set_town_walker_destination
  # Input: arg1 = agent_no
  # Output: none
  ("set_town_walker_destination",
    [(store_script_param_1, ":agent_no"),
    (assign, reg0, 9),
    (assign, reg1, 10),
    (assign, reg2, 12),
    (assign, reg3, 32),
    (assign, reg4, 33),
    (assign, reg5, 34),
    (assign, reg6, 35),
    (assign, reg7, 36),
    (assign, reg8, 37),
    (assign, reg9, 3:cool:,
    (assign, reg10, 39),
    (try_for_agents, ":cur_agent"),
      (agent_get_troop_id, ":cur_troop", ":cur_agent"),
      (eq, ":cur_troop", "trp_TROOP"),
      (this_or_next|is_between, ":cur_troop", walkers_begin, walkers_end),
      (agent_get_slot, ":target_entry_point", ":cur_agent", 0),
      (try_begin),
        (eq, ":target_entry_point", 9),
        (assign, reg0, 0),

      (else_try),
        (eq, ":target_entry_point", 10),
        (assign, reg1, 0),
      (else_try),
        (eq, ":target_entry_point", 12),
        (assign, reg2, 0),
      (else_try),
        (eq, ":target_entry_point", 32),
        (assign, reg3, 0),
      (else_try),
        (eq, ":target_entry_point", 33),
        (assign, reg4, 0),
      (else_try),
        (eq, ":target_entry_point", 34),
        (assign, reg5, 0),
      (else_try),
        (eq, ":target_entry_point", 35),
        (assign, reg6, 0),
      (else_try),
        (eq, ":target_entry_point", 36),
        (assign, reg7, 0),
      (else_try),
        (eq, ":target_entry_point", 37),
        (assign, reg8, 0),
      (else_try),
        (eq, ":target_entry_point", 3:cool:,
        (assign, reg9, 0),
      (else_try),
        (eq, ":target_entry_point", 39),
        (assign, reg10, 0),
      (try_end),
    (try_end),
    (assign, ":try_limit", 100),
    (assign, ":target_entry_point", 0),
    (try_for_range, ":unused", 0, ":try_limit"),
      (shuffle_range, 0, 11),
      (gt, reg0, 0),
      (assign, ":target_entry_point", reg0),
      (assign, ":try_limit", 0),
    (try_end),
    (try_begin),
      (gt, ":target_entry_point", 0),
      (agent_set_slot, ":agent_no", 0, ":target_entry_point"),
      (entry_point_get_position, pos1, ":target_entry_point"),
      (try_begin),
        (lt, ":target_entry_point", 32),
        (init_position, pos2),
        (position_set_y, pos2, 250),
        (position_transform_position_to_parent, pos1, pos1, pos2),
      (try_end),
      (agent_set_scripted_destination, ":agent_no", pos1, 0),
      (agent_set_speed_limit, ":agent_no", 5),
    (try_end),
  ]),

Burada mavi ile belirttiğim yerde reg0'a 9 değerini atamış böylece reg0=9 oldu. Ardından turuncu ile belirttiğim yerde walker 9.entry point'e geldiğinde reg0 değerine 0'ı atamış(reg0=0). Böylece bir kere 9. entry point'e uğrayan walker bir daha aynı entry point'e uğramaya çalışmayacak ve bugta kalmayacaktır.

assign= değer atamak.  Yukarıdaki reg0 örneği gibi.
:target_entry_point= hedef entry point

assign ve eq operasyonlarını anlamayanlar oluyor. Birçok kişi işin başlarında bu operasyonları sürekli karıştırırlar. Tüfekçi başı aşağıda bunları çok güzel tanıtmış.

Tüfekçi Başı said:
assign yani ata demek "sana 10 numaralı formayı veriyorum" demek.
eq yani eşit demek "senin forman numaran 10" demek.
 
frozenpainter said:
Peki bunu yapınca trooplar git-gel mi yapacak?Eğer öyleyse sadece gitmeyi nasıl yaparız?Yani 9 dan 10 gitsin ve orda dursun.

Entry pointlere rastgele gidiyor bu şekilde. İkinci dediğini yapmak içinse;

buz said:
module_game_menus'te npc eklemek istediğin yerin menüsünü bulup giriş seçeneğini aşağıdaki gibi düzenle
Code:
("gir",[],"Falan yere gir.",
[
(modify_visitors_at_site,"scn_falan_sahne"),
(reset_visitors),
(set_visitor, 1, "trp_falan_npc"),
(set_jump_mission,"mt_falan_şablon"),
(jump_to_scene,"scn_falan_sahne"),
(change_screen_mission),
]),

module_mission_templates'te kullandığın falan_şablon'u bul
npc ekleyeceğin giriş noktasında (1 yazdık yukarıda) scene_source değil visitor_source yazmalı onu kontrol et
daha sonra aşağıdaki kodları ekle
Code:
	  (0, 0, 0, 
	   [(eq,"$hedefe_vardim",0)],
	   [
       (entry_point_get_position, pos2, 2),
       (try_for_agents, ":agent_no"),
         (agent_get_troop_id, ":troop_no", ":agent_no"),
         (eq, ":troop_no", "trp_falan_npc"),
         (agent_get_position, pos1, ":agent_no"),    
         (agent_set_scripted_destination, ":agent_no", pos2),
         (get_distance_between_positions, ":dist", pos1, pos2),
         (le, ":dist", 100),
         (assign,"$hedefe_vardim",1),
       (try_end),
	   ]),

	  (0, 0, 0, 
	   [(eq,"$hedefe_vardim",1)],
	   [
       (entry_point_get_position, pos3, 3),
       (try_for_agents, ":agent_no"),
         (agent_get_troop_id, ":troop_no", ":agent_no"),
         (eq, ":troop_no", "trp_falan_npc"),
         (agent_get_position, pos1, ":agent_no"), 
         (agent_set_scripted_destination, ":agent_no", pos3),
         (get_distance_between_positions, ":dist", pos1, pos3),
         (le, ":dist", 100),
         (assign,"$hedefe_vardim",0),
       (try_end),
	   ]),

bunları yaptığında 1 nolu noktaya eklediğin adamın 2 ve 3 nolu noktalar arasında gidip gelmesi lazım.


ok talimi yaptırmayı ben de bilmiyorum ama module_mission_templates'te "tutorial_training_ground" bölümünü inceleyebilirsin.

bunu kullanabilirsin.
 
Güzel, ellerine sağlık Ahmet. Bence biraz da ne yaptığını açıkla, kopyala yapıştır olmasın :smile:
 
Deli Kurt said:
Osmanlı Senaryosu V2 ile uğraşmaya bir 10 dakikalık ara verdim :smile: Bu 10 dakika da size bir ders hazırlayım diye düşündüm. Neyse daha fazla lafı uzatmadan derse geçelim.

Bugün sizlere sahne içindeki troopları entry pointler arasında nasıl dolaştıracağımızı göstereceğim. Sahneye dolaşacak troop'u eklediğinizi varsayıyorum;

1) Module_Scripts'den aşağıdakini bulun;

  # script_init_town_walker_agents
  # Input: none
  # Output: none
  ("init_town_walker_agents",
    [(assign, ":num_walkers", 0),
    (try_for_agents, ":cur_agent"),
      (agent_get_troop_id, ":cur_troop", ":cur_agent"),
        (is_between, ":cur_troop", walkers_begin, walkers_end),
      (val_add, ":num_walkers", 1),
      (agent_get_position, pos1, ":cur_agent"),
      (try_for_range, ":i_e_p", 9, 40),#Entry points
        (entry_point_get_position, pos2, ":i_e_p"),
        (get_distance_between_positions, ":distance", pos1, pos2),
        (lt, ":distance", 200),
        (agent_set_slot, ":cur_agent", 0, ":i_e_p"),
      (try_end),
      (call_script, "script_set_town_walker_destination", ":cur_agent"),
    (try_end),
  ]),

Bunu aşağıdaki ile değiştirin;

  # script_init_town_walker_agents
  # Input: none
  # Output: none
  ("init_town_walker_agents",
    [(assign, ":num_walkers", 0),
    (try_for_agents, ":cur_agent"),
      (agent_get_troop_id, ":cur_troop", ":cur_agent"),
(eq, ":cur_troop", "trp_TROOP"),
        (this_or_next|is_between, ":cur_troop", walkers_begin, walkers_end),
      (val_add, ":num_walkers", 1),
      (agent_get_position, pos1, ":cur_agent"),
      (try_for_range, ":i_e_p", 9, 40),#Entry points
        (entry_point_get_position, pos2, ":i_e_p"),
        (get_distance_between_positions, ":distance", pos1, pos2),
        (lt, ":distance", 200),
        (agent_set_slot, ":cur_agent", 0, ":i_e_p"),
      (try_end),
      (call_script, "script_set_town_walker_destination", ":cur_agent"),
    (try_end),
  ]),

Kırmızı ile belirttiğim TROOP yazısına kendi istediğiniz troop'u.

2) Module_Scripts'den şimdi de bunu bulun;

  # script_set_town_walker_destination
  # Input: arg1 = agent_no
  # Output: none
  ("set_town_walker_destination",
    [(store_script_param_1, ":agent_no"),
    (assign, reg0, 9),
    (assign, reg1, 10),
    (assign, reg2, 12),
    (assign, reg3, 32),
    (assign, reg4, 33),
    (assign, reg5, 34),
    (assign, reg6, 35),
    (assign, reg7, 36),
    (assign, reg8, 37),
    (assign, reg9, 3:cool:,
    (assign, reg10, 39),
    (try_for_agents, ":cur_agent"),
      (agent_get_troop_id, ":cur_troop", ":cur_agent"),
      (is_between, ":cur_troop", walkers_begin, walkers_end),
      (agent_get_slot, ":target_entry_point", ":cur_agent", 0),
      (try_begin),
        (eq, ":target_entry_point", 9),
        (assign, reg0, 0),
      (else_try),
        (eq, ":target_entry_point", 10),
        (assign, reg1, 0),
      (else_try),
        (eq, ":target_entry_point", 12),
        (assign, reg2, 0),
      (else_try),
        (eq, ":target_entry_point", 32),
        (assign, reg3, 0),
      (else_try),
        (eq, ":target_entry_point", 33),
        (assign, reg4, 0),
      (else_try),
        (eq, ":target_entry_point", 34),
        (assign, reg5, 0),
      (else_try),
        (eq, ":target_entry_point", 35),
        (assign, reg6, 0),
      (else_try),
        (eq, ":target_entry_point", 36),
        (assign, reg7, 0),
      (else_try),
        (eq, ":target_entry_point", 37),
        (assign, reg8, 0),
      (else_try),
        (eq, ":target_entry_point", 3:cool:,
        (assign, reg9, 0),
      (else_try),
        (eq, ":target_entry_point", 39),
        (assign, reg10, 0),
      (try_end),
    (try_end),
    (assign, ":try_limit", 100),
    (assign, ":target_entry_point", 0),
    (try_for_range, ":unused", 0, ":try_limit"),
      (shuffle_range, 0, 11),
      (gt, reg0, 0),
      (assign, ":target_entry_point", reg0),
      (assign, ":try_limit", 0),
    (try_end),
    (try_begin),
      (gt, ":target_entry_point", 0),
      (agent_set_slot, ":agent_no", 0, ":target_entry_point"),
      (entry_point_get_position, pos1, ":target_entry_point"),
      (try_begin),
        (lt, ":target_entry_point", 32),
        (init_position, pos2),
        (position_set_y, pos2, 250),
        (position_transform_position_to_parent, pos1, pos1, pos2),
      (try_end),
      (agent_set_scripted_destination, ":agent_no", pos1, 0),
      (agent_set_speed_limit, ":agent_no", 5),
    (try_end),
  ]),

Aşağıdaki ile değiştirin;

  # script_set_town_walker_destination
  # Input: arg1 = agent_no
  # Output: none
  ("set_town_walker_destination",
    [(store_script_param_1, ":agent_no"),
    (assign, reg0, 9),
    (assign, reg1, 10),
    (assign, reg2, 12),
    (assign, reg3, 32),
    (assign, reg4, 33),
    (assign, reg5, 34),
    (assign, reg6, 35),
    (assign, reg7, 36),
    (assign, reg8, 37),
    (assign, reg9, 3:cool:,
    (assign, reg10, 39),
    (try_for_agents, ":cur_agent"),
      (agent_get_troop_id, ":cur_troop", ":cur_agent"),
      (eq, ":cur_troop", "trp_TROOP"),
      (this_or_next|is_between, ":cur_troop", walkers_begin, walkers_end),
      (agent_get_slot, ":target_entry_point", ":cur_agent", 0),
      (try_begin),
        (eq, ":target_entry_point", 9),
        (assign, reg0, 0),
      (else_try),
        (eq, ":target_entry_point", 10),
        (assign, reg1, 0),
      (else_try),
        (eq, ":target_entry_point", 12),
        (assign, reg2, 0),
      (else_try),
        (eq, ":target_entry_point", 32),
        (assign, reg3, 0),
      (else_try),
        (eq, ":target_entry_point", 33),
        (assign, reg4, 0),
      (else_try),
        (eq, ":target_entry_point", 34),
        (assign, reg5, 0),
      (else_try),
        (eq, ":target_entry_point", 35),
        (assign, reg6, 0),
      (else_try),
        (eq, ":target_entry_point", 36),
        (assign, reg7, 0),
      (else_try),
        (eq, ":target_entry_point", 37),
        (assign, reg8, 0),
      (else_try),
        (eq, ":target_entry_point", 3:cool:,
        (assign, reg9, 0),
      (else_try),
        (eq, ":target_entry_point", 39),
        (assign, reg10, 0),
      (try_end),
    (try_end),
    (assign, ":try_limit", 100),
    (assign, ":target_entry_point", 0),
    (try_for_range, ":unused", 0, ":try_limit"),
      (shuffle_range, 0, 11),
      (gt, reg0, 0),
      (assign, ":target_entry_point", reg0),
      (assign, ":try_limit", 0),
    (try_end),
    (try_begin),
      (gt, ":target_entry_point", 0),
      (agent_set_slot, ":agent_no", 0, ":target_entry_point"),
      (entry_point_get_position, pos1, ":target_entry_point"),
      (try_begin),
        (lt, ":target_entry_point", 32),
        (init_position, pos2),
        (position_set_y, pos2, 250),
        (position_transform_position_to_parent, pos1, pos1, pos2),
      (try_end),
      (agent_set_scripted_destination, ":agent_no", pos1, 0),
      (agent_set_speed_limit, ":agent_no", 5),
    (try_end),
  ]),

Aynı şekilde TROOP yazan yere kendi troop'unuzu yazın.

3) Bunları uyguladıktan sonra sahneye girdiğinizde 9,10,12,32,33,34,35,36,37,38,39 entry pointlerini elips* şeklinde sahneye dizin. Entry pointlerin arasında nesne olmamasına dikkat edin. Yapay zeka karşısında bir nesne gördüğü zaman kendisine en yakın entry pointe gitmeyi tercih edecektir. Kendisine yakın entry point nesnenin arkasında ise o nesneye çarpacaktır.

*Elips olması zorunlu değil Çember vs. şekillerde olabilir. Kolay gelsin şimdiden.



ANALİZ

1. aşama da yaptığımız trp_TROOP trop'unu hareket eden troopların arasına almak oldu. burada :cur_troop yerel değişkeni yürüyen troopları belirtiyordu. bizde :cur_troop değişkenini kendi troop'umuza eşitledik. Böylece troop'umuzu yürüyen troopların arasına aldık.

:cur_troop= yürüyen troopları belirten yerel değişken
eq= eşit demek
is_between= arasında
this_or_next= Ya da demek.
walkers_begin= bunlar module_constants'da bulunur ve muhtemelen birşeye eşdeğerdir. Mesela "trp_town_walker"a eşdeğerdir.
walkers_end= Yukarıdakiyle hemen hemen aynı.

(eq, ":cur_troop", "trp_TROOP"),
        (this_or_next|is_between, ":cur_troop", walkers_begin, walkers_end),

2.Aşamada hangi walkerların  9,10,12,32,33,34,35,36,37,38,39 entry pointleri arasında dolaşacağını belirttik. yukarıdakinin aynısını yaptık belirtmek için. Peki  9,10,12,32,33,34,35,36,37,38,39 entry pointleri arasında dolaşacağını nasıl anladık? 2. aşamadaki script'i incelerseniz, :target_entry_point yerel değişkenlerinde hangi entry pointlere gitmesi gerektiğini belirtmiş. bakınız;

  # script_set_town_walker_destination
  # Input: arg1 = agent_no
  # Output: none
  ("set_town_walker_destination",
    [(store_script_param_1, ":agent_no"),
    (assign, reg0, 9),
    (assign, reg1, 10),
    (assign, reg2, 12),
    (assign, reg3, 32),
    (assign, reg4, 33),
    (assign, reg5, 34),
    (assign, reg6, 35),
    (assign, reg7, 36),
    (assign, reg8, 37),
    (assign, reg9, 3:cool:,
    (assign, reg10, 39),
    (try_for_agents, ":cur_agent"),
      (agent_get_troop_id, ":cur_troop", ":cur_agent"),
      (eq, ":cur_troop", "trp_TROOP"),
      (this_or_next|is_between, ":cur_troop", walkers_begin, walkers_end),
      (agent_get_slot, ":target_entry_point", ":cur_agent", 0),
      (try_begin),
        (eq, ":target_entry_point", 9),
        (assign, reg0, 0),

      (else_try),
        (eq, ":target_entry_point", 10),
        (assign, reg1, 0),
      (else_try),
        (eq, ":target_entry_point", 12),
        (assign, reg2, 0),
      (else_try),
        (eq, ":target_entry_point", 32),
        (assign, reg3, 0),
      (else_try),
        (eq, ":target_entry_point", 33),
        (assign, reg4, 0),
      (else_try),
        (eq, ":target_entry_point", 34),
        (assign, reg5, 0),
      (else_try),
        (eq, ":target_entry_point", 35),
        (assign, reg6, 0),
      (else_try),
        (eq, ":target_entry_point", 36),
        (assign, reg7, 0),
      (else_try),
        (eq, ":target_entry_point", 37),
        (assign, reg8, 0),
      (else_try),
        (eq, ":target_entry_point", 3:cool:,
        (assign, reg9, 0),
      (else_try),
        (eq, ":target_entry_point", 39),
        (assign, reg10, 0),
      (try_end),
    (try_end),
    (assign, ":try_limit", 100),
    (assign, ":target_entry_point", 0),
    (try_for_range, ":unused", 0, ":try_limit"),
      (shuffle_range, 0, 11),
      (gt, reg0, 0),
      (assign, ":target_entry_point", reg0),
      (assign, ":try_limit", 0),
    (try_end),
    (try_begin),
      (gt, ":target_entry_point", 0),
      (agent_set_slot, ":agent_no", 0, ":target_entry_point"),
      (entry_point_get_position, pos1, ":target_entry_point"),
      (try_begin),
        (lt, ":target_entry_point", 32),
        (init_position, pos2),
        (position_set_y, pos2, 250),
        (position_transform_position_to_parent, pos1, pos1, pos2),
      (try_end),
      (agent_set_scripted_destination, ":agent_no", pos1, 0),
      (agent_set_speed_limit, ":agent_no", 5),
    (try_end),
  ]),

Burada mavi ile belirttiğim yerde reg0'a 9 değerini atamış böylece reg0=9 oldu. Ardından turuncu ile belirttiğim yerde walker 9.entry point'e geldiğinde reg0 değerine 0'ı atamış(reg0=0). Böylece bir kere 9. entry point'e uğrayan walker bir daha aynı entry point'e uğramaya çalışmayacak ve bugta kalmayacaktır.

assign= değer atamak.  Yukarıdaki reg0 örneği gibi.
:target_entry_point= hedef entry point

assign ve eq operasyonlarını anlamayanlar oluyor. Birçok kişi işin başlarında bu operasyonları sürekli karıştırırlar. Tüfekçi başı aşağıda bunları çok güzel tanıtmış.

Tüfekçi Başı said:
assign yani ata demek "sana 10 numaralı formayı veriyorum" demek.
eq yani eşit demek "senin forman numaran 10" demek.

Şimdi yüklüyo inşallah olmuştur...
 
Dersi aşama aşama atlamadan uyguladım ve sonuç eklediğim troop sadece bazı yerlere gidip takılı kalıyordu daire çizsem dahi ve şehir köy gibi yerlerdeki tüm köylüler haraketsiz kalıyordu, başka bir çözümü olmalı.
 
Back
Top Bottom