Тэкс... небольшая, немного глючная разработочка для "магии" в мульте. Суть: игрок выбирает в презентации(кнопка m) заклинание(призыв бота, лечение союзника, огненный шар, вампиризм, отравление, прямой контроль бота), затем зажимает среднюю клавишу мыши и "заклинание" срабатывает. Ниже приведены файлы, в которые надобно вставить строчки. Точно не знаю, всё ли я перекинул правильно, работать должно. Ищу заинтересованных людей, желающих протестировать всё это и помочь в усовершенствовании.
В header_common.py в низ списка #server events вставить:
multiplayer_event_magic = 123 #rusmod
в module_constants в список AGENT SLOTS :
slot_agent_is_mague = 45#rusmod
slot_agent_target = 60#rusmod
slot_agent_vampire = 70#rusmod
в список PLAYER SLOTS:
slot_player_reload_spell = 45#rusmod
slot_player_is_mague = 46#rusmod
slot_player_new_agent = 47#rusmod
slot_player_wait_spell = 51#rusmod
в список SCENE PROP SLOTS:
scene_prop_missile_used = 7 #rusmod
scene_prop_shooter_agent = 16 #rusmod
В файл module_mission_templates вставляем триггеры:
magic_menu_mod = (0, 0, 0, [],
[
(key_clicked, key_m),
(neg|is_presentation_active, "prsnt_multiplayer_escape_menu"),
(neg|is_presentation_active, "prsnt_multiplayer_stats_chart_deathmatch"),
(eq, "$g_waiting_for_confirmation_to_terminate", 0),
(start_presentation, "prsnt_multiplayer_magic_menu"),
])
spell_mod = (2, 0, 0, [],
[
(key_is_down, key_middle_mouse_button),
(multiplayer_send_2_int_to_server, multiplayer_event_magic, 1,0),
])
fireball_mod = (0, 0, 0, [],[ #rusmod_fireball v1
(multiplayer_is_server),
(try_for_agents,":agents"),
(agent_get_position,pos1,":agents"),
(position_move_z, pos1, 100),
(try_for_range, ":prop_id", "spr_skeleton_bone_spell_dark", "spr_maneken_lamellar_vest"),
(scene_prop_get_num_instances, ":count_of_fireball", ":prop_id"),
(try_for_range, ":cur_fireball", 0, ":count_of_fireball"),
(scene_prop_get_instance, ":fireball_instance", ":prop_id", ":cur_fireball"),
(scene_prop_get_slot,":mage_p", ":fireball_instance", scene_prop_shooter_agent),
(player_get_agent_id, ":mage", ":mage_p"),
(scene_prop_slot_eq,":fireball_instance",scene_prop_missile_used,10),
(prop_instance_get_position,pos2,":fireball_instance"),
(try_begin),
(agent_get_position,pos3,":mage"),
(get_distance_between_positions,":hide_missile",pos3,pos2),
(gt, ":hide_missile", 3000),
(prop_instance_stop_animating, ":fireball_instance"),
(position_move_z, pos2, -5000),
(prop_instance_set_position, ":fireball_instance", pos2),
(try_end),
(store_agent_hit_points,":hp",":agents"),
(gt, ":hp",0),
(get_distance_between_positions,":missile_hit",pos1,pos2),
(lt,":missile_hit",100),
(neq,":mage",":agents"),
(prop_instance_get_scene_prop_kind, ":scene_prop_id", ":fireball_instance"),
(assign, ":health", 10),
(assign, ":damage", 30),
(try_begin),
(eq, ":scene_prop_id", "spr_skeleton_head_spell"),#fireball
(agent_deliver_damage_to_agent,":mage",":agents", ":damage"),
(else_try),
(eq, ":scene_prop_id", "spr_skeleton_bone_spell_dark"),#vampire
(agent_set_slot, ":agents", slot_agent_vampire,":mage"),
(else_try),
(eq, ":scene_prop_id", "spr_skeleton_bone_poison"),#poison
(agent_set_slot, ":agents", slot_agent_vampire,":agents"),
(else_try),
(eq, ":scene_prop_id", "spr_magic_apple"),#healer
(store_add,":new_hp", ":hp", ":health"),
(agent_set_hit_points,":agents",":new_hp"),
(else_try),
(eq, ":scene_prop_id", "spr_hipnose_apple"),#hipnose
(agent_set_slot, ":mage", slot_agent_is_mague, ":mage_p"),
(player_control_agent, ":mage_p", ":agents"),
(player_set_slot, ":mage_p", slot_player_new_agent,":agents"),
(try_end),
(try_end),
(try_end),
(try_end),
])
hipnose_mod = (0, 0, 0, [],[ #rusmod_hipnose v2
(multiplayer_is_server),
(try_for_agents,":agent"),
(agent_get_player_id, ":mage", ":agent"),
(ge, ":mage", 0),
(agent_get_slot, ":old_player",":agent", slot_agent_is_mague),
(player_get_slot, ":new", ":mage", slot_player_new_agent),
(gt, ":new", 0),
(store_agent_hit_points,":hp",":new"),
(le, ":hp",40),
(player_set_slot, ":mage", slot_player_new_agent,-1),
(agent_set_slot, ":agent", slot_agent_is_mague, -1),
(player_control_agent, ":old_player",":agent"),
(try_end),
])
timer_magic = (1, 0, 0, [],[ #rusmod_magic 2 v2
(multiplayer_is_server),
(try_for_agents,":agents"),
(agent_get_position,pos1,":agents"),
(agent_get_slot,":mage1", ":agents", slot_agent_vampire),
(agent_get_slot,":destination", ":agents", slot_agent_target),
(try_begin),#followers
(gt,":destination",0),
(agent_get_position, pos3, ":destination"),
(position_move_y, pos3, 50),
(position_move_x, pos3, 100),
(agent_set_scripted_destination,":agents",pos3,1),
(try_end),
(gt,":mage1",0),
(agent_get_position,pos2,":mage1"),
(store_agent_hit_points,":hp",":agents"),
(store_agent_hit_points,":hpp",":mage1"),
(get_distance_between_positions,":hit",pos1,pos2),
(try_begin),
(neq, ":agents",":mage1"),
(gt, ":hp", 0),
(gt, ":hpp", 0),
(le,":hit",500),
(store_sub, ":hp_1",":hp", 5), #vampire
(store_add, ":hpp_1",":hpp", 5),
(agent_set_hit_points,":agents",":hp_1",0),
(agent_set_hit_points,":mage1",":hpp_1",0),
(le,":hp", 10),
(agent_deliver_damage_to_agent,":mage1",":agents"),
(else_try),
(eq, ":agents",":mage1"),
(gt, ":hp", 0),
(gt, ":hpp", 0),
(store_random_in_range, ":chance", 0, 5),
(store_random_in_range, ":poison", 0, 21),
(store_sub, ":hp_1",":hp", ":poison"), #poison
(agent_set_hit_points,":agents",":hp_1",0),
(ge, ":chance", 4),
(agent_set_slot, ":agents", slot_agent_vampire,0),
(else_try),
(this_or_next|le, ":hp", 0),
(this_or_next|le, ":hpp", 0),
(gt,":hit",500),
(agent_set_slot, ":agents", slot_agent_vampire,0),
(try_end),
(try_end),
])
как вставить триггер в режимы игры - надо объяснить?
в файл module_presentation:
("multiplayer_magic_menu", prsntf_manual_end_only, 0, [
(ti_on_presentation_load,
[(set_fixed_point_multiplier, 1000),
(create_mesh_overlay, reg0, "mesh_mp_ingame_menu"),
(position_set_x, pos1, 250),
(position_set_y, pos1, 80),
(overlay_set_position, reg0, pos1),
(position_set_x, pos1, 1000),
(position_set_y, pos1, 1000),
(overlay_set_size, reg0, pos1),
(str_clear, s0),
(create_text_overlay, "$g_presentation_obj_escape_menu_container", s0, tf_scrollable_style_2),
(position_set_x, pos1, 285),
(position_set_y, pos1, 75),
(overlay_set_position, "$g_presentation_obj_escape_menu_container", pos1),
(position_set_x, pos1, 405),
(position_set_y, pos1, 550),
(overlay_set_area_size, "$g_presentation_obj_escape_menu_container", pos1),
(set_container_overlay, "$g_presentation_obj_escape_menu_container"),
(assign, ":cur_y", 500),
(create_text_overlay, reg0, "str_magic", 0),
(overlay_set_color, reg0, 0xFFFFFF),
(position_set_x, pos1, 0),
(position_set_y, pos1, ":cur_y"),
(overlay_set_position, reg0, pos1),
(val_sub, ":cur_y", escape_menu_item_height),
(multiplayer_get_my_team, ":my_team"),
(lt, ":my_team", multi_team_spectator),
(multiplayer_get_my_troop, ":my_troop"),
(multiplayer_get_my_player, ":my_player"),
#(eq, ":my_troop", "trp_vaegir_archer_multiplayer"),
#(this_or_next|eq, ":my_troop", "trp_fetisheer"),
#(eq, ":my_troop", "trp_mage"),
#(player_slot_eq, ":my_player", slot_player_level, 1),
(try_begin),
# (player_slot_eq, ":my_player", slot_player_simple_spell, 1),
(create_button_overlay, "$g_magic_fireball", "str_fireball", 0),#fireball
(overlay_set_color, "$g_magic_fireball", 0xFFFFFF),
(position_set_x, pos1, 130),
(position_set_y, pos1, ":cur_y"),
(overlay_set_position, "$g_magic_fireball", pos1),
(try_end),
(try_begin),
# (player_slot_eq, ":my_player", slot_player_dark_spell, 1),
(create_button_overlay, "$g_magic_vampire", "str_vampire", 0),
(overlay_set_color, "$g_magic_vampire", 0xFFFFFF),
(val_sub, ":cur_y", escape_menu_item_height),
(position_set_y, pos1, ":cur_y"),
(overlay_set_position, "$g_magic_vampire", pos1),
(try_end),
(try_begin),
# (player_slot_eq, ":my_player", slot_player_simple_spell, 1),
(create_button_overlay, "$g_magic_healer", "str_healer", 0),
(overlay_set_color, "$g_magic_healer", 0xFFFFFF),
(val_sub, ":cur_y", escape_menu_item_height),
(position_set_y, pos1, ":cur_y"),
(overlay_set_position, "$g_magic_healer", pos1),
(try_end),
(try_begin),
# (player_slot_eq, ":my_player", slot_player_sum_spell, 1),
(create_button_overlay, "$g_magic_hipnose", "str_hipnose", 0),
(overlay_set_color, "$g_magic_hipnose", 0xFFFFFF),
(val_sub, ":cur_y", escape_menu_item_height),
(position_set_y, pos1, ":cur_y"),
(overlay_set_position, "$g_magic_hipnose", pos1),
(try_end),
(try_begin),
# (player_slot_eq, ":my_player", slot_player_dark_spell, 1),
(create_button_overlay, "$g_magic_poison", "str_poison", 0),
(overlay_set_color, "$g_magic_poison", 0xFFFFFF),
(val_sub, ":cur_y", escape_menu_item_height),
(position_set_y, pos1, ":cur_y"),
(overlay_set_position, "$g_magic_poison", pos1),
(try_end),
(try_begin),
# (player_slot_eq, ":my_player", slot_player_sum_spell, 1),
(create_button_overlay, "$g_magic_friend", "str_friend", 0),
(overlay_set_color, "$g_magic_friend", 0xFFFFFF),
(val_sub, ":cur_y", escape_menu_item_height),
(position_set_y, pos1, ":cur_y"),
(overlay_set_position, "$g_magic_friend", pos1),
(try_end),
(presentation_set_duration, 999999),
]),
(ti_on_presentation_event_state_change,
[(store_trigger_param_1, ":object"),
(try_begin),
(eq, ":object", "$g_magic_fireball"),
(presentation_set_duration, 0),
(multiplayer_send_2_int_to_server, multiplayer_event_magic, 0, "spr_skeleton_head_spell"),
(try_end),
(try_begin),
(eq, ":object", "$g_magic_vampire"),
(presentation_set_duration, 0),
(multiplayer_send_2_int_to_server, multiplayer_event_magic, 0, "spr_skeleton_bone_spell_dark"),
(try_end),
(try_begin),
(eq, ":object", "$g_magic_healer"),
(presentation_set_duration, 0),
(multiplayer_send_2_int_to_server, multiplayer_event_magic, 0, "spr_magic_apple"),
(try_end),
(try_begin),
(eq, ":object", "$g_magic_hipnose"),
(presentation_set_duration, 0),
(multiplayer_send_2_int_to_server, multiplayer_event_magic, 0, "spr_hipnose_apple"),
(try_end),
(try_begin),
(eq, ":object", "$g_magic_poison"),
(presentation_set_duration, 0),
(multiplayer_send_2_int_to_server, multiplayer_event_magic, 0, "spr_skeleton_bone_poison"),
(try_end),
(try_begin),
(eq, ":object", "$g_magic_friend"),
(presentation_set_duration, 0),
(multiplayer_send_2_int_to_server, multiplayer_event_magic, 0, "spr_friend_apple"),
(try_end),
]),
(ti_on_presentation_run,
[(store_trigger_param_1, ":cur_time"),
(try_begin),
# (multiplayer_get_my_troop, ":my_troop"),
# (this_or_next|neq, ":my_troop", "trp_fetisheer"),
#(this_or_next|neq, ":my_troop", "trp_mage"),
# (key_clicked, key_m),
(key_clicked, key_escape),
(gt, ":cur_time", 200),
(presentation_set_duration, 0),
(try_end),
]),
]),
В файл module_scripts:
#script_magic #rusmod
# INPUT: arg1 = scene_prop_no
# OUTPUT: none
("magic",
[
(store_script_param, ":player_no", 1),
(store_script_param, ":fly", 2),
(store_script_param, ":spell", 3),
(player_get_agent_id, ":agent", ":player_no"),
(agent_get_look_position, pos1, ":agent"),
(position_move_z, pos1, 105),
(position_move_y, pos1, -10),
(position_move_x, pos1, 30),
(try_begin),
(gt, ":spell", 0),
(player_set_slot, ":player_no", slot_player_reload_spell, ":spell"),
(try_end),
(try_begin),
(le, ":fly", 0),
(player_set_slot, ":player_no", slot_player_is_mague, 0),
(try_end),
(assign, ":distance", 5000),
(try_begin),
(this_or_next|eq, ":spell","spr_skeleton_head_spell"),
(eq, ":spell","spr_magic_apple"),
(assign, ":speed", 400),
(else_try),
(eq, ":spell","spr_skeleton_bone_spell_dark"),
(assign, ":speed", 600),
(else_try),
(eq, ":spell","spr_hipnose_apple"),
(assign, ":speed", 800),
(else_try),
(eq, ":spell","spr_skeleton_bone_poison"),
(assign, ":speed", 600),
(try_end),
(try_begin),
(eq, ":spell","spr_friend_apple"),
(ge, ":fly", 1),
(set_spawn_position, pos1),
(spawn_agent, "trp_sum_agent"),
(agent_add_relation_with_agent, reg0, ":agent", 1),
(agent_set_slot, reg0, slot_agent_target, ":agent"),
(agent_ai_set_aggressiveness, reg0, 1000),
(try_end),
(try_begin),
(neq, ":spell","spr_friend_apple"),
(ge, ":fly", 1),
(gt, ":spell", 0),
(store_agent_hit_points,":hp",":agent"),
(gt, ":hp",0),
# (try_begin),
# (player_get_slot, ":limit", ":player_no", slot_player_wait_spell),
# (try_begin),
# (player_slot_eq, ":player_no", slot_player_health_spell, 0),
# (eq, ":spell","spr_magic_apple"),
# (store_sub, ":l", ":limit", 1),
# (else_try),
# (eq, ":spell","spr_skeleton_bone_spell_dark"),
# (store_sub, ":l",":limit", 1),
# (else_try),
# (eq, ":spell","spr_hipnose_apple"),
# (store_sub, ":l",":limit", 1),
# (try_end),
# (player_set_slot, ":player_no", slot_player_wait_spell, ":l"),
# (try_end),
# (player_slot_ge, ":player_no", slot_player_wait_spell, 0),
(try_begin),
(multiplayer_is_server),
(scene_prop_get_num_instances, ":count_of_fireball", ":spell"),
(try_for_range, ":cur_fireball", 0, ":count_of_fireball"),
(scene_prop_get_instance, ":fireball_instance",":spell", ":cur_fireball"),
(scene_prop_slot_eq,":fireball_instance",scene_prop_shooter_agent, ":player_no"),
(scene_prop_slot_eq,":fireball_instance",scene_prop_missile_used,10),
#(display_log_message, "@Ha"),
(player_set_slot, ":player_no", slot_player_is_mague, 1),
(prop_instance_stop_animating, ":fireball_instance"),
(prop_instance_set_position, ":fireball_instance", pos1),
(position_move_y, pos1, ":distance"),
(prop_instance_animate_to_position,":fireball_instance", pos1, ":speed"),
#(assign,":allow",1),
(try_end),
(try_end),
(try_begin),
(multiplayer_is_server),
(player_slot_eq, ":player_no", slot_player_is_mague, 0),
#(display_log_message, "@heh"),
(set_spawn_position, pos1),
(spawn_scene_prop, ":spell"),
(scene_prop_set_slot, reg0, scene_prop_missile_used, 10),
(scene_prop_set_slot, reg0, scene_prop_shooter_agent,":player_no"),
(position_move_y, pos1, ":distance"),
(prop_instance_animate_to_position,reg0, pos1, ":speed"),
(player_set_slot, ":player_no", slot_player_is_mague, 1),
(try_end),
#(else_try),
#(eq, ":allow", 0),
#(try_end),
(try_end),
]),
затем после строчек
(eq, ":event_type", multiplayer_event_use_item),
(store_script_param, ":value", 3),
(store_script_param, ":value_2", 4),
(call_script, "script_use_item", ":value", ":value_2"),
вставляем:
(else_try),#rusmod
(eq, ":event_type", multiplayer_event_magic),
(store_script_param, ":value", 3),
(store_script_param, ":value_2", 4),
(try_begin),
(eq,":value_2",0),
(eq,":value",1),
(player_get_slot,":sp", ":player_no", slot_player_reload_spell),
(gt, ":sp", 0),
(call_script, "script_magic", ":player_no", ":value", ":sp"),
(else_try),
(call_script, "script_magic", ":player_no", ":value", ":value_2"),
(try_end),
В файл module_scene_props:
#missiles
("skeleton_bone_spell_dark",0,"skeleton_bone",0, [
(ti_on_init_scene_prop,
[(set_position_delta,0,0,20),
(particle_system_add_new, "psys_flue_smoke_x"), ]), ]),
("skeleton_bone_poison",0,"skeleton_bone","0", [
(ti_on_init_scene_prop,
[(set_position_delta,0,0,20),
(particle_system_add_new, "psys_flue_smoke_green"), ]), ]),
("skeleton_head_spell",sokf_moveable,"skeleton_head",0, [
(ti_on_init_scene_prop,
[(set_position_delta,0,0,20),
(particle_system_add_new, "psys_torch_fire"),
(particle_system_add_new, "psys_torch_smoke"),
]),]),
("magic_apple",sokf_moveable,"apple_a","0", [
(ti_on_init_scene_prop,
[ (set_position_delta,0,0,20),
(particle_system_add_new, "psys_flue_smoke_blue"),
]),]),
("hipnose_apple",0,"apple_a","0", [
(ti_on_init_scene_prop,
[ (set_position_delta,0,0,20),
(particle_system_add_new, "psys_flue_smoke_y"),
]),]),
("friend_apple",0,"apple_a","0", []),
бот:
["sum_agent","Alive Armor","Alive Armor",tf_guarantee_all,0,0,fac_neutral,
[itm_heraldic_mail_with_surcoat_for_tableau, itm_strange_boots, itm_great_sword,itm_kettle_hat_for_bot, itm_leather_gloves],
def_attrib_multiplayer|level(25),wpe(150,90,60,110),knows_ironflesh_10|knows_power_strike_8, tf_randomize_face],
шлем:
["kettle_hat_for_bot", "Kettle Hat", [("kettle_hat_new",0)], itp_merchandise| itp_type_head_armor|itp_covers_head,0,
240 , weight(1.75)|abundance(100)|head_armor(35)|body_armor(0)|leg_armor(0)|difficulty(7) ,imodbits_plate ],
Добавлено: [time]13 Ноябрь, 2010, 08:41:20 [/time]
системы частиц для заклов. просто так.
#rusmod
("flue_smoke_green", psf_billboard_3d|psf_global_emit_dir|psf_always_emit|psf_randomize_rotation|psf_randomize_size, "prtcl_dust_a",
15, 3, 0.5, -0.0, 15.0, 12,#num_particles, life, damping, gravity_strength, turbulance_size, turbulance_strength
(0, 0.35), (1, 0), #alpha keys
(0.0, 0.3), (1, 0.1), #red keys
(1.0, 1.3),(1, 1.1), #green keys
(0.0, 0.3), (1, 0.1), #blue keys
(0, 2), (1, 7), #scale keys
(0, 0, 0), #emit box size
(0, 0, 1.5), #emit velocity
0.1, #emit dir randomness
150,
0.5,
),
("flue_smoke_red", psf_billboard_3d|psf_global_emit_dir|psf_always_emit|psf_randomize_rotation|psf_randomize_size, "prtcl_dust_a",
3, 3, 0.5, 0.2, 5.0, 1,#num_particles, life, damping, gravity_strength, turbulance_size, turbulance_strength
(0, 0.35), (1, 0), #alpha keys
(1.0, 1.3), (3, 1.1), #red keys
(0.0, 0.3),(1, 0.1), #green keys
(0.0, 0.3), (1, 0.1), #blue keys
(0, 2), (1, 7), #scale keys
(0, 0, 0), #emit box size
(0, 0, 1.5), #emit velocity
0.1, #emit dir randomness
150,
0.5,
),
("flue_smoke_blue", psf_billboard_3d|psf_global_emit_dir|psf_always_emit|psf_randomize_rotation|psf_randomize_size, "prtcl_dust_a",
3, 3, 0.5, 0.2, 5.0, 1,#num_particles, life, damping, gravity_strength, turbulance_size, turbulance_strength
(0, 0.35), (1, 0), #alpha keys
(0.0, 0.3), (1, 0.1), #red keys
(0.0, 0.3),(1, 0.1), #green keys
(1.0, 1.3), (1, 0.1), #blue keys
(0, 2), (1, 7), #scale keys
(0, 0, 0), #emit box size
(0, 0, 1.5), #emit velocity
0.1, #emit dir randomness
150,
0.5,
),
("flue_smoke_y", psf_billboard_3d|psf_global_emit_dir|psf_always_emit|psf_randomize_rotation|psf_randomize_size, "prtcl_dust_a",
3, 3, 0.5, 0.2, 5.0, 1,#num_particles, life, damping, gravity_strength, turbulance_size, turbulance_strength
(0, 0.35), (1, 0), #alpha keys
(0.0, 0.3), (1, 0.1), #red keys
(1.0, 1.3),(2, 0.1), #green keys
(1.0, 1.3), (2, 0.1), #blue keys
(0, 2), (1, 7), #scale keys
(0, 0, 0), #emit box size
(0, 0, 1.5), #emit velocity
0.1, #emit dir randomness
150,
0.5,
),
("flue_smoke_x", psf_billboard_3d|psf_global_emit_dir|psf_always_emit|psf_randomize_rotation|psf_randomize_size, "prtcl_dust_a",
3, 3, 0.5, 0.2, 5.0, 1,#num_particles, life, damping, gravity_strength, turbulance_size, turbulance_strength
(0, 0.35), (1, 0), #alpha keys
(1.0, 1.3), (3, 1.3), #red keys
(1.5, 0.5),(2, 0.8), #green keys
(1.0, 1.0), (3, 1.0), #blue keys
(0, 2), (1, 7), #scale keys
(0, 0, 0), #emit box size
(0, 0, 1.5), #emit velocity
0.1, #emit dir randomness
150,
0.5,
),