[OSP][KOD]Module_system OSP'leri

Users who are viewing this thread

AI Party lordlarını savaşta yenilince kaçmasını engelleme
Merhaba kendi modumda da kullanılan bu özelliği nasıl kullanacağınızı göstermek istedim başlayalım kullanmak için kredi verin.
öncelikle module_scripts.py dosyasında şu kodu aratıyoruz ("cf_check_hero_can_escape_from_player",
daha sonra yaklaşık 35 satır altta (eq, ": continue", 1), bu var bu aralıktaki kod kümesini kod kümesini yazarken oto çeviri acık olmasın:

Code:
  ( "cf_check_hero_can_escape_from_player",
    [
      (store_script_param_1, ": troop_no"),
      (assign, ":quest_target", 0),
      (try_begin),
        (check_quest_active, "qst_persuade_lords_to_make_peace"),
        (this_or_next | quest_slot_eq, "qst_persuade_lords_to_make_peace", slot_quest_target_troop, ": troop_no"),
        (quest_slot_eq, "qst_persuade_lords_to_make_peace", slot_quest_object_troop, ": troop_no"),
        (assign, ":quest_target", 1),
      (else_try),
     (is_between, ":troop_no", lord_begin, lord_end),
        (try_begin),
  (assign, ":quest_target", 1), # always catched
(else_try),
          (assign, ":quest_target", -1), always run
(try_end),
  (else_try),
(ge, " troop_no", "trp_sea_raider_leader"),
        (lt, ":troop_no", "trp_bandit_leaders_end"),
(try_begin),
          (check_quest_active, "qst_learn_where_merchant_brother_is"),
          (assign, ":quest_target", 1), # always catched
        (else_try),
          (assign, ":quest_target", -1), # always run
        (try_end),
      (try_end),

      (assign, ":continue", 0),
      (try_begin),
        (eq, ":quest_target", 0), #  make quest
        (store_random_in_range, ": rand", 0, 100),
        (lt, ": rand", hero_escape_after_defeat_chance),
        (assign, ":continue", 1),
      (else_try),
        (eq, ":quest_target", -1),
        (assign, ":continue", 1),
      (try_end),

      (eq, ":continue", 1),
  ]),
Şimdi module_constants.py yi herhangi bir yere bakın ekleyin:
Code:
 lord_begin = "trp_knight_1_1"
lord_end = "trp_knight_6_20"
build.module diyip kullanabilirsiniz kredi vermeyi unutmayın

Balta Tuzağı
Asıl konu
Uyarı: Bu OSP'yi uygulamak için kodlama becerileri yeterli değil, aynı zamanda en azından temel sahne editörü deneyimine sahip olmalısınız. Yapmazsanız, hiner'ın öğreticisi harika bir başlangıç noktasıdır.

Bu kodun herhangi bir satın alma uygulaması. Bunu geliştirmekte ya da olduğu gibi kullanmakta özgürsünüz, sadece çeviri için bana ve asılc sahibi Dalion'a kredi vermeyi unutmayın.

O nasıl çalışır? Tuzak, gizli ve hareketli olmak üzere iki moda sahip büyük bir kaplı çift baltadan oluşur. Hareketli modda, soldan sağa durmadan hareket edecek ve herhangi bir zamanda teslim edilecek. Gizli bir modda, statik ve zararsız, bu kadar basit. İstediğiniz zaman, bekleme süresi olmadan Num_Enter geçiş bu modlar geçiş geçiş yapabilirsiniz. Tuzakta çarpışma olmaz, bu yüzden ajan hareketini kesintiye uğratmaz. İstediğiniz kadar açabilirsiniz, "makas" tuzakları vb oluşturmak için bunlar için ters tarafa çevirebilirsiniz, bunun için çok sayıda yaratıcı kullanabilirsiniz.


1) Her şeyden önce, balta ağına ihtiyacımız var. Native'in çift çiftli bir baltası var (weapon_meshes1.brf içinde dblhead_ax), ancak o kadar bulanık ve düşük kaliteli ki ikiz bardiche çift tercih yapmak. Bilirsiniz, daha az “sadece dev bir silah” titreşimi ve daha fazla cesaret sahibi olmak. Bunun gerçekleşmesi için OpenBRF aracına ihtiyacımız olacak. - Warband'ın ana dizinine (.exe olduğu yerde) gidin ve CommonRes adlı bir klasör bulun - içinde bir arms_e.brf dosyası bulun ve açmak için OpenBRF kullanın - two_handed_battle_axe_d mesh'i arayın, ihtiyacımız olan bardiche. Fareyle sağ tıklayın -> Çoğaltın, ardından kopyasını kopyalayın, orijinal ve 2 klonumuz var - kopyalarından sağ tıklayın -> Ayna - onun ikisini de kullanın Ctrl web tutun -> Sağ fare ile tıklayın -> Kafesleri birleştirin. Bu, sadece iki kafes de aynı malzemeyi (bizim durumumuz tam olarak) kullanıyorsa gerçekleştirilebilir, aksi takdirde oyun 1 mesh olarak işlem görmesi için aynı isimle yeniden adlandırmamız gerekir, ancak brf'de ayrı tutulur - kombine ağımızı "guilliotine" olarak yeniden adlandırın - sağ tıklayın -> Roto-translate-rescale ... Burada onu asmak için belirli bir şekilde çevirmeliyiz ve koordinatların başlangıç noktası sapın üstünde olmalıdır. Başlangıç noktasını görmek için, program penceresinin orta onayının yanında etkin emin olun. Z eksenini 0.25 üzerinde hareket ettirerek ve X ve Z eksenini -90 üzerinde döndürerek gerekli pozisyona ulaşabildim. Ayrıca 4 kat artırın ölçeğini. Normalde ağ planlaması gereken ölçeği bilmiyoruz, sadece sonra bir sahne düzenleyicide görülüyor,

Dinleme ve modül kullanarak (nereye kaydedeceğinizi gerçekten önemli değil, modülünüzün Kaynak klasörüne kesebilir ve diğer kaynakların yanında modül.ini dosyasında listeleyebilir veya kaydedebilirsiniz. Nerede, arms_e.brf zaten Native'da listelenmiştir).

2) module_scene_props.py yi açın ve en alta bunu ekleyin:
Code:
("guilliotine", 0, "guilliotine", "0", [

    (ti_on_scene_prop_init,[  # this will put our trap in a hidden mode when mission starts. I highly recommend commenting it out when modifying the scene,
                              # and activating only when all is ready and placed on its places.

    (store_trigger_param_1, ":instance_no"),
    (prop_instance_get_position, pos4, ":instance_no"),
    (position_move_z, pos4, 320),
    (prop_instance_set_position, ":instance_no", pos4),
    ]),

    (ti_on_scene_prop_is_animating,[  # this is the damage dealing part. Triggers only while axe is moving

    (store_trigger_param_1, ":instance_no"),
    (set_fixed_point_multiplier, 100),
    (prop_instance_get_position, pos3, ":instance_no"),
    (position_move_z, pos3, -540),
   #(particle_system_burst, "psys_torch_fire", pos3, 1), # I used this particle to determine the position of damage dealing, but you can go crazy with your own
                                                         # particles here! Trap looks much more spectacular when it's glowing or burning or whatever...
    (try_for_agents, ":agent", pos3, 50),
        (agent_is_alive, ":agent"),
        (agent_deliver_damage_to_agent, ":agent", ":agent", 70, "itm_bardiche"), # when adjusting the damage keep in mind it is dealt every frame of the animation
        (agent_play_sound, ":agent", "snd_metal_hit_low_armor_high_damage"),
        (particle_system_burst, "psys_game_blood_2", pos3),
    (try_end),
    ]),

    (ti_on_scene_prop_animation_finished,[  # this one is responsible for most animations. When adjusting, keep in mind that second X rotation must be
                                            # two times bigger than first one (like 90 is x2 of 45)
    (store_trigger_param_1, ":instance_no"),
    (prop_instance_get_position, pos2, ":instance_no"),
    (try_begin),
        (scene_prop_slot_eq, ":instance_no", scene_prop_open_or_close_slot, 1), # start of animation cycle, moving right
        (position_rotate_x, pos2, 45),
        (prop_instance_animate_to_position, ":instance_no", pos2, 50),
        (scene_prop_set_slot, ":instance_no", scene_prop_open_or_close_slot, 2),
        (prop_instance_play_sound, ":instance_no", "snd_draw_axe", sf_vol_15),
    (else_try),
        (scene_prop_slot_eq, ":instance_no", scene_prop_open_or_close_slot, 2), # middle of animation cycle, moving sideways
        (position_get_rotation_around_x, ":x", pos2),
        (eq, ":x", 45),
        (position_rotate_x, pos2, -90),
        (prop_instance_animate_to_position, ":instance_no", pos2, 100),
        (prop_instance_play_sound, ":instance_no", "snd_axe_pass_by", sf_vol_15),
    (else_try),
        (scene_prop_slot_eq, ":instance_no", scene_prop_open_or_close_slot, 2),
        (position_get_rotation_around_x, ":x", pos2),
        (neq, ":x", 45),
        (position_rotate_x, pos2, 90),
        (prop_instance_animate_to_position, ":instance_no", pos2, 100),
        (prop_instance_play_sound, ":instance_no", "snd_axe_pass_by", sf_vol_15),
    (else_try),
        (scene_prop_slot_eq, ":instance_no", scene_prop_open_or_close_slot, 3), # end of animation cycle, hiding the trap
        (position_move_z, pos2, 320),
        (prop_instance_animate_to_position, ":instance_no", pos2, 50),
        (scene_prop_set_slot, ":instance_no", scene_prop_open_or_close_slot, 0),
        (prop_instance_play_sound, ":instance_no", "snd_draw_greatsword", sf_vol_15),
    (try_end),
    ]),
]),
Bunu module_mission_templates.py de af_castle_lord = af_override_horse | af_override_weapons | af_require_civilian ekleyin
Code:
axe_trap_control = (0, 0, 0,
    [(key_clicked, key_numpad_enter),],
    [
    (try_for_prop_instances, ":axe", "spr_guilliotine"),
        (try_begin),
            (scene_prop_slot_eq, ":axe", scene_prop_open_or_close_slot, 0), # if the trap is hidden - activate
            (prop_instance_get_position, pos2, ":axe"),   
            (position_move_z, pos2, -320),
            (prop_instance_animate_to_position, ":axe", pos2, 50),
            (scene_prop_set_slot, ":axe", scene_prop_open_or_close_slot, 1),
            (prop_instance_play_sound, ":axe", "snd_draw_greatsword", sf_vol_15),   
        (else_try),                                                         # if it is active - hide
            (prop_instance_get_starting_position, pos1, ":axe"),
            (prop_instance_animate_to_position, ":axe", pos1, 50),
            (scene_prop_set_slot, ":axe", scene_prop_open_or_close_slot, 3),
            (prop_instance_play_sound, ":axe", "snd_draw_greataxe", sf_vol_15),
        (try_end),
    (try_end),
    ])
besiege_inner_battle_castle aratın ve altına ekleyin
Code:
 axe_trap_control,
Kod bitti kısmı şimdi sahne kısmı:
Simdi hazırız ve tuzağı oyunumuza sahneye hazırız. Sahne düzenleyiciyi keşfedin, spr_guilliotine bulun ve hayal gücünüzü gerisini alın (ancak ti_on_scene_prop_init tetikleyicisi sahne başlangıcında yukarı doğru hareket ettireceğinden, eksenlerinizin tam uzunlukta durduğundan emin olun):

eksenlerim birbirine 180 açık, bu yüzden zıt yönlerde hareket ederler. Daha fazla daldırma için Bunları [0,03, 0,3, 0,3] izleyen spr_belfry_wheel_old üzerine asabilirsiniz (kuşatmaesi komut dosyalarına katıldığı için ortak bir spr_belfry_wheel kullanmaktan kaçının) ve size yardımcı olacak 2 spr_siege_ladder_8mğini örnek kullanacak örnekleri kullanacakları yerde kullandık.

Bu kadar. Olası "beyaz metal" aksaklık ve diğer hoş olmayan sürprizlerden kaçınmak için sahne bisikletinizi bitirdikten sonra oyun istemcisini yeniden başlatmanızı tavsiye ederim.
[MEDIA = flash] Bvot8ADRKT4 [/MEDIA]
Koşma özelliği ekleme
Bu yazıda oyuncuya koşma özelliği nasıl sunulacak bunu göstericem kullanmak için bana kredi verin şimdi module_mission_templates.py dosyasında af_castle_lord = af_override_horse | af_override_weapons diye aratın ve altına bu kodunu ekleyin
Code:
### run start
run = (0,0,0,
[(this_or_next | key_is_down, key_left_control),
(key_is_down, key_right_control),
(key_clicked, key_w)],
[(get_player_agent_no, ":player"),
(agent_set_speed_modifier, ":player", 250) # 200 u arttirabilirsiniz max 1000 yaziniz
])
### run end
Daha sonra istediğiniz görev şablonu içine (lead_charge vs ..) ekleyin
Code:
run,
Bu kadar oyuna girin ve hangi şablona eklendişe girin sonra önce ctrl sonra w tuşuna basın ve adamınız koşsun
Hileyi devre dışı bırakma cheat menü inactive
Bu yazıda ise oyundaki hilelerin tamamını etkisiz hale getirmeden bahsedeceğim @Efe Karacar ın bunla ilgili bir konusu vardı ama bu tüm hileleri kapatıp sadece belirtileni açık bırakır şimdi module_scripts.py de en alta ] bundan bir satır önce şunu ekleyin;
Code:
######################################################
#######Cheat inactive
######################################################
  ("cheat_mode_inactive",
    [(assign, "$cheat_mode",0),
    (eq, jump_to_menu, "mnu_camp"),
    (assign, "$cheat_mode",1),

     ]),
######################################################
########Cheat inactive
######################################################
Burda ben sadece bir eşya bul kısmını açık bıraktım diğer kısımlar kapalı şimdi ise module_triggers da Refresh Horse sellers diye aratın ve altına ekleyin
Code:
# Cheat is inactive
  (0.0, 0, 0.01, [],
  [

    (call_script, "script_cheat_mode_inactive"),
                      ]),
Sonuç olarak böyle gözükmeli
Code:
# Refresh Horse sellers
  (0.0, 0, 168.0, [],
  [
    (call_script, "script_refresh_center_stables"),
                     ]),

# Cheat is inactive
  (0.0, 0, 0.01, [],
  [

    (call_script, "script_cheat_mode_inactive"),
                      ]),
Dediğim gibi hileyi tekrar aktif etmeniz gereken yerleri düzenleyebilirsiniz kullanmak için bana kredi verin
 
Last edited:

Similar threads

Replies
0
Views
960
dragos
Back
Top Bottom