Всадники Кальрадии
Модификации => Обмен опытом: Mount&Blade => Обмен опытом (в помощь мододелу) => Вопросы и ответы по модостроению => Тема начата: Перевоспитанный Доктор от 15 Апреля, 2013, 13:25
-
я не знаю рабочий ли он
вот кусок кода из mision_teplate
а точнее "lead_charge"
(1, 4, ti_once, [(main_hero_fallen)],
[
(team_give_order, 0, grc_everyone, mordr_charge),
(team_give_order, 1, grc_everyone, mordr_charge),
(team_give_order, 2, grc_everyone, mordr_charge),
(team_give_order, 3, grc_everyone, mordr_charge),
(assign, "$pin_player_fallen", 1),
(assign, ":num_player_alive", 0),
(try_for_agents,":cur_agent"),
(agent_is_human, ":cur_agent"),
(agent_get_party_id, ":agent_party", ":cur_agent"),
(try_begin),
(eq, ":agent_party", "p_main_party"),
(try_begin),
(agent_is_alive, ":cur_agent"),
(eq, ":num_player_alive", 0),
(str_store_string, s5, "str_retreat"),
(call_script, "script_simulate_retreat", 10, 20, 1),
(assign, "$g_battle_result", -1),
(set_mission_result,-1),
(call_script, "script_count_mission_casualties_from_agents"),
(finish_mission,0)
(else_try),
(agent_is_alive, ":cur_agent"),
(ge, ":num_player_alive", 1),
(player_is_active, ":player_no"),
(player_get_team_no, ":player_team", ":player_no"),
(assign, ":is_found", 0),
(try_for_agents, ":cur_agent"),
(eq, ":is_found", 0),
(agent_is_alive, ":cur_agent"),
(agent_is_human, ":cur_agent"),
(agent_is_non_player, ":cur_agent"),
(agent_get_team ,":cur_team", ":cur_agent"),
(eq, ":cur_team", ":player_team"),
(assign, ":is_found", 1),
(try_end),
(try_begin),
(eq, ":is_found", 1),
(call_script, "single_player_find_most_suitable_bot_to_control", ":player_no"),
(player_control_agent, ":player_no", reg0),
(try_end),
(try_end),
(try_end),
(try_end),
]),
и есть скрипт
SCRITT
#script_find_most_suitable_bot_to_control
# INPUT: arg1 = value
("single_player_find_most_suitable_bot_to_control",
[
(set_fixed_point_multiplier, 100),
(store_script_param, ":player_no", 1),
(player_get_team_no, ":player_team", ":player_no"),
(player_get_slot, ":x_coor", ":player_no", slot_player_death_pos_x),
(player_get_slot, ":y_coor", ":player_no", slot_player_death_pos_y),
(player_get_slot, ":z_coor", ":player_no", slot_player_death_pos_z),
(init_position, pos0),
(position_set_x, pos0, ":x_coor"),
(position_set_y, pos0, ":y_coor"),
(position_set_z, pos0, ":z_coor"),
(assign, ":most_suitable_bot", -1),
(assign, ":max_bot_score", -1),
(try_for_agents, ":cur_agent"),
(agent_is_alive, ":cur_agent"),
(agent_is_human, ":cur_agent"),
(agent_is_non_player, ":cur_agent"),
(agent_get_team ,":cur_team", ":cur_agent"),
(eq, ":cur_team", ":player_team"),
(agent_get_position, pos1, ":cur_agent"),
#getting score for distance of agent to death point (0..3000)
(get_distance_between_positions_in_meters, ":dist", pos0, pos1),
(try_begin),
(lt, ":dist", 500),
(store_sub, ":bot_score", 500, ":dist"),
(else_try),
(assign, ":bot_score", 0),
(try_end),
(val_mul, ":bot_score", 6),
#getting score for distance of agent to enemy & friend agents (0..300 x agents)
(try_for_agents, ":cur_agent_2"),
(agent_is_alive, ":cur_agent_2"),
(agent_is_human, ":cur_agent_2"),
(neq, ":cur_agent", ":cur_agent_2"),
(agent_get_team ,":cur_team_2", ":cur_agent_2"),
(try_begin),
(neq, ":cur_team_2", ":player_team"),
(agent_get_position, pos1, ":cur_agent_2"),
(get_distance_between_positions, ":dist_2", pos0, pos1),
(try_begin),
(lt, ":dist_2", 300),
(assign, ":enemy_near_score", ":dist_2"),
(else_try),
(assign, ":enemy_near_score", 300),
(try_end),
(val_add, ":bot_score", ":enemy_near_score"),
(else_try),
(agent_get_position, pos1, ":cur_agent_2"),
(get_distance_between_positions, ":dist_2", pos0, pos1),
(try_begin),
(lt, ":dist_2", 300),
(assign, ":friend_near_score", 300, ":dist_2"),
(else_try),
(assign, ":friend_near_score", 0),
(try_end),
(val_add, ":bot_score", ":friend_near_score"),
(try_end),
(try_end),
#getting score for health (0..200)
(store_agent_hit_points, ":agent_hit_points", ":cur_agent"),
(val_mul, ":agent_hit_points", 2),
(val_add, ":bot_score", ":agent_hit_points"),
(ge, ":bot_score", ":max_bot_score"),
(assign, ":max_bot_score", ":bot_score"),
(assign, ":most_suitable_bot", ":cur_agent"),
(try_end),
(assign, reg0, ":most_suitable_bot"),
]),
вот по сути оно должно работать следущим образом
например во время битвы если игрок убит(оглушен), то этот кусок кода считывает если в живых союзников на поле битвы равно нулю то происходит конец битвы, если равно или больше одного, то игрок переключается сразу на любого бота союзника, и так до тех пор пока на поле боя не останется живых союзников
Я сам если честно не умею программировать, это взято из путем сплава их мультиплеера из режима разружение объектов и мини карты с отображением живых союзников
-
Если кто ещё помнит! поясните как сделать что бы после оглушения отряд продолжал битву.
а то против 200 моих 50 противника и вариант только сдаться.
если можно подробнее что откуда взять и куда поставить.
-
выдает ошибку
NameError:name "player_get_team_no" is not definet
-
скрипт не рабочий...
во всех модах есть продолжение битвы. как вы его сделали facepalm ?
-
как вы его сделали ?
скрипт не рабочий...
во всех модах есть продолжение битвы. как вы его сделали facepalm ?
прописал в скрипты и mision_teplate как написано выше
-
Если кто ещё помнит! поясните как сделать что бы после оглушения отряд продолжал битву.
В "Дипломатии" это всё сделано.
Можно ещё здесь посмотреть:
http://rusmnb.ru/index.php?topic=14483.0;topicseen (http://rusmnb.ru/index.php?topic=14483.0;topicseen)