本帖最后由 杰喵喵 于 2024-9-8 14:30 编辑
学习场景道具使用,使用场景道具制作载具成功分享,简易坦克大战实现思路与配套代码。
一、感谢:
1.阿格兰,提供了最初的完整场景道具制作载具学习参考代码,十分完整强大,AE86永远的神!
2.九章,分享不少场景道具帖子,指导过我。
3.vegetto的理论帖子与换皮思想思路。
4.其他使用场景道具作为载具的MOD。
二、效果演示:
三、代码具备功能:
1.读取agent(步兵)速度,通过转换变成控制坦克底盘的控制,agent的look作为炮台控制;这样基本可以直接沿用战团agent自带AI和相关指挥指令。
2.简易的碰撞判断,判断到其他场景道具后,修改agent(步兵)的目的地,来实现控制避障功能。
3.troop装别马匹(坦克),进场后马匹(坦克)通过逃跑、隐形、去除,生成场景载具;实现马匹变场景道具软转换。
4.其他部分功能直接看MOD里面的完整代码吧。
四、坦克部分核心代码,剩下部分代码在后续的MS。
- tank_ai = [
- #保护防止坦克驾驶员直接被打死
- (ti_on_agent_hit, 0, 0, [],
- [
- (store_trigger_param_1, ":agent_no"),
- (agent_is_human,":agent_no"),
-
- (try_begin),
- (agent_slot_ge,":agent_no",slot_agent_driving_vehicle,1),
- (set_trigger_result, 0),
- (else_try),
- (agent_slot_eq, ":agent_no", slot_agent_ready_driving, 1),
- (set_trigger_result, 0),
- (else_try),
- (get_player_agent_no, ":player"),
- (eq,":player",":agent_no"),
- #(set_trigger_result, 0),
- (try_end),
-
- ]),
-
- #坦克(马)-出场的处理隐身掉骑马的人(坦克驾驶人员),坦克(马)也隐身同时逃跑,同时设置产生坦克(场景道具)标志位
- (ti_on_agent_spawn, 0, 0, [],
- [
- (set_fixed_point_multiplier, 100),
-
- (store_trigger_param_1, ":agent_no"),
-
- (try_begin),
- (agent_is_alive,":agent_no"),
- (neg|agent_is_human,":agent_no"),
- (agent_get_item_id, ":item_id", ":agent_no"),
- (str_store_item_name,s30,":item_id"),
- #(display_message, "@ti_on_agent_spawn item_id {s30}"),
- (eq,":item_id","itm_tank"),
- (agent_set_visibility,":agent_no",0),
- (agent_set_no_dynamics,":agent_no",1),#set no dynamics
- (agent_get_rider,":rider",":agent_no"),
- (agent_is_alive,":rider"),
- (agent_is_human,":rider"),
- (agent_set_visibility,":rider",0),
- (str_store_agent_name,s30,":rider"),
- (agent_get_position,pos2,":rider"),
- (position_get_y,":pos_y",pos2),
- (position_get_x,":pos_x",pos2),
- (position_get_rotation_around_z,":around_z",pos2),
- (agent_set_slot, ":rider", slot_agent_positon_y, ":pos_y"),
- (agent_set_slot, ":rider", slot_agent_positon_x, ":pos_x"),
- (agent_set_slot, ":rider", slot_agent_rotation_around_z,":around_z"),
- (agent_set_slot, ":rider", slot_agent_ready_driving, 1),#同时设置产生坦克(场景道具)标志位
- (agent_set_horse_speed_factor,":rider",0),
- (agent_start_running_away,":agent_no"),
- #(display_message, "@ti_on_agent_spawn rider name {s30}"),
- (else_try),
- (agent_is_alive,":agent_no"),
- (agent_is_human,":agent_no"),
- (agent_get_troop_id,":troop_id",":agent_no"),
- (eq|this_or_next,":troop_id","trp_assault_infantry"),
- (eq,":troop_id","trp_tank_force"),
- (agent_get_position,pos2,":agent_no"),
- (store_random_in_range,":move_y",1,25),
- (store_random_in_range,":move_x",-100,100),
- (val_mul,":move_y",50),
- (val_mul,":move_x",100),
- (position_move_y, pos2, ":move_y"),
- (position_move_x, pos2, ":move_x"),
- (position_set_z_to_ground_level,pos2),
- (agent_set_position,":agent_no",pos2),
- (assign,":item_slot_num",4),
- (try_for_range, ":item_slot", 0, ":item_slot_num"),
- (agent_get_item_slot, ":wielded_item_id",":agent_no",":item_slot"),
- (try_begin),
- (eq,":item_slot",3),
- (agent_equip_item,":agent_no","itm_grenade",":item_slot"),
- (else_try),
- (le, ":wielded_item_id",0),
- (agent_equip_item,":agent_no","itm_tak47_shell",":item_slot"),
- (try_end),
- (try_end),
-
- (neg|agent_is_ally,":agent_no"),
- (agent_equip_item,":agent_no","itm_arena_armor_blue",5),
- ]),
-
- #马转换为坦克场景道具代码,使用产生坦克标志位,产生坦克(场景道具)将驾驶员与其绑定
- (1, 0, 0,
- [],
- [
- (set_fixed_point_multiplier, 100),
- #转换为坦克场景道具
- (try_for_agents,":agent_no"),
- (agent_is_alive,":agent_no"),
- (agent_is_human,":agent_no"),
- (agent_get_horse,":horse",":agent_no"),
- (le,":horse",0),
- (agent_slot_eq, ":agent_no", slot_agent_ready_driving, 1),
- (agent_set_slot, ":agent_no", slot_agent_ready_driving, 0),
- (agent_get_slot,":pos_y", ":agent_no", slot_agent_positon_y),
- (agent_get_slot,":pos_x", ":agent_no", slot_agent_positon_x),
- (agent_get_slot, ":around_z", ":agent_no",slot_agent_rotation_around_z),
- (init_position,pos3),
- (position_set_y,pos3,":pos_y"),
- (position_set_x,pos3,":pos_x"),
- (position_set_z,pos3,0),
- (position_set_z_to_ground_level,pos3),
- (call_script,"script_set_pos_around_z",pos3,":around_z"),
- (try_begin),
- (get_player_agent_no, ":player"),
- (neq,":player",":agent_no"),
- (store_random_in_range,":move_y",25,50),
- (store_random_in_range,":move_x",-100,100),
- (val_mul,":move_y",50),
- (val_mul,":move_x",100),
- (position_move_y, pos3, ":move_y"),
- (position_move_x, pos3, ":move_x"),
- (position_set_z_to_ground_level,pos3),
- (try_end),
- (agent_set_position,":agent_no",pos3),
- (call_script,"script_spawn_tank_for_agent",":agent_no"),
- (agent_set_visibility,":agent_no",1),
- (try_end),
-
- #清除马
- (try_for_agents,":agent_no"),
- (agent_is_alive,":agent_no"),
- (neg|agent_is_human,":agent_no"),
- (agent_get_item_id, ":item_id", ":agent_no"),
- (eq,":item_id","itm_tank"),
- (agent_get_rider,":rider",":agent_no"),
- (le,":rider",0),
- (agent_set_visibility,":agent_no",0),
- (remove_agent,":agent_no"),
- (try_end),
- ]),
- #简易的障碍物判断,修正驾驶员agent目的地来实现
- (0.1, 0, 0,
- [
- (assign, ":scene_prop_no","spr_abrams_chassis"),
- (scene_prop_get_num_instances, ":num_instances_of_scene_prop", ":scene_prop_no"),
- (gt,":num_instances_of_scene_prop",0),
- ],
- [
- (set_fixed_point_multiplier, 100),
- (try_for_agents, ":agent_no"),
- (gt,":agent_no",-1),
- (agent_is_non_player,":agent_no"),
- (agent_is_alive, ":agent_no"),
- (agent_is_human, ":agent_no"),
- (agent_get_slot, ":sprop_instance", ":agent_no", slot_agent_driving_vehicle),
- (gt,":sprop_instance",0),
- (init_position,pos21),
- (prop_instance_get_position, pos21, ":sprop_instance"),
- (init_position,pos22),
- (agent_get_speed,pos22,":agent_no"),
- (position_get_y,":speed_y",pos22),
- (position_get_x,":speed_x",pos22),
- (assign,":no_can_animation_forward",0),
- (assign,":no_can_animation_backward",0),
- (assign,":no_can_animation_left",0),
- (assign,":no_can_animation_right",0),
-
- #障碍判断开始
- (try_begin),
- (gt,":speed_y",0),
- (init_position,pos22),
- (copy_position,pos22,pos21),
- (position_move_y,pos22,750),
- (position_move_x,pos22,250),
- (position_move_z,pos22,120),
- (position_rotate_z,pos22,90),
- #(particle_system_burst,"psys_torch_fire_big",pos50,5),
- (call_script,"script_cf_cast_ray_pos_is_terrain",pos22,300),
- (assign,":no_can_animation_forward",reg63),
- (else_try),
- (lt,":speed_y",0),
- (init_position,pos22),
- (copy_position,pos22,pos21),
- (position_move_y,pos22,-750),
- (position_move_x,pos22,250),
- (position_move_z,pos22,120),
- (position_rotate_z,pos22,90),
- #(particle_system_burst,"psys_torch_fire_big",pos50,5),
- (call_script,"script_cf_cast_ray_pos_is_terrain",pos22,300),
- (assign,":no_can_animation_backward",reg63),
- (try_end),
-
-
- #障碍判断右部分
- (try_begin),
- (gt,":speed_x",0),
- (init_position,pos22),
- (copy_position,pos22,pos21),
- (position_move_y,pos22,-500),
- (position_move_x,pos22,250),
- (position_move_z,pos22,90),
- #(particle_system_burst,"psys_torch_fire_big",pos50,5),
- (call_script,"script_cf_cast_ray_pos_is_terrain",pos22,700),
- (assign,":no_can_animation_right",reg63),
- (else_try),
- #障碍判断左部分
- (lt,":speed_x",0),
- (init_position,pos22),
- (copy_position,pos22,pos21),
- (position_move_y,pos22,-500),
- (position_move_x,pos22,-250),
- (position_move_z,pos22,90),
- #(particle_system_burst,"psys_torch_fire_big",pos50,5),
- (call_script,"script_cf_cast_ray_pos_is_terrain",pos22,700),
- (assign,":no_can_animation_left",reg63),
- (try_end),
- (try_begin),
- (ge|this_or_next,":no_can_animation_forward",1),
- (ge|this_or_next,":no_can_animation_backward",1),
- (ge|this_or_next,":no_can_animation_left",1),
- (ge,":no_can_animation_right",1),
-
- (try_begin),#前后有障碍物
- (ge|this_or_next,":no_can_animation_forward",1),
- (ge,":no_can_animation_backward",1),
- (try_begin),
- (ge,":no_can_animation_forward",1),
- (position_move_y,pos21,-500),
- (else_try),
- (ge,":no_can_animation_backward",1),
- (position_move_y,pos21,500),
- (else_try),
- (try_end),
- #前后有碍物,且左右也有
- (try_begin),
- (ge,":no_can_animation_right",1),
- (position_move_x,pos21,-1000),
- (else_try),
- (ge,":no_can_animation_left",1),
- (position_move_x,pos21,1000),
- (else_try),
- (position_move_x,pos21,-1000),
- (try_end),
- (else_try),#前后无障碍物,只考虑左右
- (try_begin),
- (ge,":no_can_animation_right",1),
- (position_move_x,pos21,-1000),
- (else_try),
- (ge,":no_can_animation_left",1),
- (position_move_x,pos21,1000),
- (try_end),
- (try_end),
- (agent_set_scripted_destination_no_attack, ":agent_no", pos21,1),
- (else_try),
- (agent_clear_scripted_mode, ":agent_no"),
- (try_end),
- (try_end),
- ]
- ),
- #非玩家的agent地盘控制及开炮
- (0, 0, 0,
- [
- (assign, ":scene_prop_no","spr_abrams_chassis"),
- (scene_prop_get_num_instances, ":num_instances_of_scene_prop", ":scene_prop_no"),
- (gt,":num_instances_of_scene_prop",0),
- ],
- [
- (set_fixed_point_multiplier, 100),
- (try_for_agents, ":agent_no"),
- (gt,":agent_no",-1),
- (agent_is_non_player,":agent_no"),
- (agent_is_alive, ":agent_no"),
- (agent_is_human, ":agent_no"),
- (agent_get_slot, ":sprop_instance", ":agent_no", slot_agent_driving_vehicle),
- (gt,":sprop_instance",0),
- (init_position,pos20),
- (init_position,pos21),
- (init_position,pos23),
- (prop_instance_get_position, pos21, ":sprop_instance"),
- (agent_get_position,pos23,":agent_no"),
- #根据agent(步行)的移动速度和方向来控制车辆底盘这段代码,根据agent(步行)的方向与速度来处理,
- #比如agent(步行)左右移动地盘需要与agent(步行)看的方向形成90度夹角来模拟坦克地盘前进,炮塔依然瞄准
- (init_position,pos22),
- (agent_get_speed,pos22,":agent_no"),
- (init_position,pos24),
- (position_transform_position_to_local, pos24, pos23, pos21),
- (position_get_y,":speed_y",pos22),
- (position_get_x,":speed_x",pos22),
- (position_get_rotation_around_z,":local_around_z",pos24),
- (assign,":y_move",0),
- (try_begin),
- (gt,":speed_y",0),
- (store_mul,":y_move",12,1),
- (else_try),
- (lt,":speed_y",0),
- (store_mul,":y_move",12,-1),
- (try_end),
- (try_begin),
- (is_between,":local_around_z",181,360),
- (val_sub,":local_around_z",360),
- (try_end),
- (try_begin),
- (neq,":speed_x",0),
- (try_begin),
- (gt,":speed_x",0),
- (gt,":local_around_z",-90),
- (assign,":around_z_move",-1),
- (else_try),
- (lt,":speed_x",0),
- (lt,":local_around_z",90),
- (assign,":around_z_move",1),
- (try_end),
-
- (try_begin),
- (eq,":y_move",0),
- (assign,":y_move",12),
- (try_end),
- (else_try),
- (try_begin),
- (lt,":local_around_z",0),
- (assign,":around_z_move",1),
- (else_try),
- (gt,":local_around_z",0),
- (assign,":around_z_move",-1),
- (try_end),
- (try_end),
- (scene_prop_set_slot,":sprop_instance", scene_prop_slot_animation_speed,":y_move"),
- (position_move_y,pos21,":y_move"),
- (position_rotate_z,pos21,":around_z_move"),
- (call_script,"script_set_vehicle_X_and_Y_axis_processing",pos21),
- (prop_instance_set_position,":sprop_instance",pos21),
- (init_position,pos22),
- (copy_position,pos22,pos21),
- (position_move_z,pos22,35),
- (position_copy_rotation,pos22,pos23),
- (agent_set_position,":agent_no",pos22),
- ##尘土烟雾
- (try_begin),
- (neq,":y_move",0),
- (init_position,pos24),
- (copy_position,pos24,pos21),
- (try_begin),
- (gt,":y_move",0),
- (position_move_y,pos24,-325),
- (else_try),
- (position_move_y,pos24,325),
- (try_end),
- (position_move_x,pos24,200),
- (particle_system_burst,"psys_game_hoof_dust_big",pos24,1),
- (particle_system_burst,"psys_game_hoof_dust_mud_big",pos24,1),
- (position_move_x,pos24,-400),
- (particle_system_burst,"psys_game_hoof_dust_big",pos24,1),
- (particle_system_burst,"psys_game_hoof_dust_mud_big",pos24,1),
- (try_end),
- ####################################
- (scene_prop_get_slot, ":sprop_instance_turret", ":sprop_instance", scene_prop_slot_turret),
- (gt, ":sprop_instance_turret",0),
- (init_position,pos22),
- (agent_get_look_position,pos22,":agent_no"),
- (position_get_rotation_around_z,":around_z",pos22),
- (position_get_rotation_around_x,":around_x",pos22),
- (assign,":move_x",0),
- (assign,":move_y",0),
- (assign,":move_z",135),
- (position_move_x, pos21, ":move_x"),
- (position_move_y, pos21, ":move_y"),
- (position_move_z, pos21, ":move_z"),
- (call_script,"script_set_pos_around_z",pos21,":around_z"),
- (prop_instance_get_position,pos22,":sprop_instance_turret"),
- #设定pos的新值为目标pos的值,但是around_z是缓慢靠近
- (call_script,"script_pos_around_z_to_other_pos_around_z",pos22,pos21),
- (prop_instance_set_position,":sprop_instance_turret",pos22),
- (scene_prop_get_slot, ":sprop_instance_gun", ":sprop_instance", scene_prop_slot_gun),
- (gt, ":sprop_instance_gun",0),
-
- #新的炮管运动处理 炮管直接在炮塔上进行处理
- (assign,":move_x",2.5),
- (assign,":move_y",190),
- (assign,":move_z",0),
- (position_move_x, pos22, ":move_x"),
- (position_move_y, pos22, ":move_y"),
- (position_move_z, pos22, ":move_z"),
- (try_begin),
- (is_between,":around_x",180,360),
- (val_sub,":around_x",360),
- (try_end),
- (val_min,":around_x",30),
- (val_max,":around_x",-5),
- (call_script,"script_set_pos_around_x",pos22,":around_x"),
- (prop_instance_get_position, pos23, ":sprop_instance_gun"),
- #设定pos的新值为目标pos的值,但是around_x是缓慢靠近
- (call_script,"script_pos_around_x_to_other_pos_around_x",pos23,pos22),
- (prop_instance_set_position,":sprop_instance_gun",pos23),
-
- (assign,":open_fire",0),
- (agent_ai_get_look_target,":ai_look_target",":agent_no"),
- (try_begin),
- (gt,":ai_look_target",-1),
- (init_position,pos24),
- (agent_get_bone_position, pos24, ":ai_look_target", hb_head,1),
- #对准敌人,先计算发炮点
- (copy_position,pos34,pos23),
- (assign,":move_y",410),
- (position_move_y, pos23, ":move_y"),
- #判断是否开炮
- (assign,":line_of_sight",0),
- (try_begin),
- (agent_slot_ge,":ai_look_target",slot_agent_driving_vehicle,1),
- (cast_ray,":destination", pos52,pos23,30000),
- (gt,":destination",-1),
- (agent_get_slot, ":target_sprop_instance", ":ai_look_target", slot_agent_driving_vehicle),
- (prop_instance_get_scene_prop_kind,":target_scene_prop_kind",":target_sprop_instance"),
- (prop_instance_get_scene_prop_kind,":destination_scene_prop_kind",":destination"),
- (eq,":destination_scene_prop_kind",":target_scene_prop_kind"),
- (scene_prop_get_team,":team",":destination"),
- (scene_prop_get_team,":team_1",":target_sprop_instance"),
- (eq,":team",":team_1"),
- (assign,":line_of_sight",1),
- (else_try),
- (position_has_line_of_sight_to_position,pos23,pos24),
- (assign,":line_of_sight",1),
- (try_end),
-
- (eq,":line_of_sight",1),
- (get_distance_between_positions_in_meters,":meters",pos23,pos24),
- (gt,":meters",2),
- (assign,":open_fire",1),
- (try_end),
- #开炮设置开始
- (scene_prop_get_slot, ":opnen_fire_cnt_time", ":sprop_instance", scene_prop_slot_opnen_fire_cnt_time),
- (scene_prop_get_slot, ":opnen_fire_cnt_time_sec", ":sprop_instance", scene_prop_slot_opnen_fire_cnt_time_sec),
- (try_begin),
- (gt,":open_fire",0),
- (le,":opnen_fire_cnt_time",0),
- (assign,":opnen_fire_cnt_time",100),
- (particle_system_burst, "psys_pistol_smoke_big_a", pos23,25),
- (particle_system_burst,"psys_torch_fire_big_a",pos23,10),
- (play_sound_at_position,"snd_tank_fire_3",pos23,0),
- (add_missile, ":agent_no", pos23, 40000, "itm_gun_tank", 0, "itm_tank_shell", 0),
- (else_try),
- (gt,":opnen_fire_cnt_time",0),
- (val_sub,":opnen_fire_cnt_time",1),
- (try_end),
-
- #副武器同轴机枪
- (try_begin),
- (gt,":open_fire",0),
- (le,":opnen_fire_cnt_time_sec",0),
- (assign,":opnen_fire_cnt_time_sec",5),
- (position_move_z, pos34, 25),
- (position_move_y, pos34, 70),
- (position_move_x, pos34, 25),
- (play_sound_at_position,"snd_ak47_shoot",pos34),
- (particle_system_burst, "psys_buqianghuoyan", pos34, 10),
- (position_move_y, pos34, 180),
- (add_missile, ":agent_no", pos34, 20000, "itm_gun_ak47", 0, "itm_tak47_shell", 0),
- (else_try),
- (gt,":opnen_fire_cnt_time_sec",0),
- (val_sub,":opnen_fire_cnt_time_sec",1),
- (try_end),
- (scene_prop_set_slot, ":sprop_instance", scene_prop_slot_opnen_fire_cnt_time,":opnen_fire_cnt_time"),
- (scene_prop_set_slot, ":sprop_instance", scene_prop_slot_opnen_fire_cnt_time_sec,":opnen_fire_cnt_time_sec"),
- #开炮设置结束
- (try_end),
- ]
- ),
-
- #坦克生命值检查与冒烟
- (1, 0, 0,
- [
- (assign, ":scene_prop_no","spr_abrams_chassis"),
- (scene_prop_get_num_instances, ":num_instances_of_scene_prop", ":scene_prop_no"),
- (gt,":num_instances_of_scene_prop",0),
- ],
- [
- (set_fixed_point_multiplier, 100),
- (try_for_agents, ":agent_no"),
- (call_script,"script_tank_hp_check",":agent_no"),
- (try_end),
- ]),
-
- #坦克碰撞伤害处理
- (0.25, 0, 0,
- [
- (assign, ":scene_prop_no","spr_abrams_chassis"),
- (scene_prop_get_num_instances, ":num_instances_of_scene_prop", ":scene_prop_no"),
- (gt,":num_instances_of_scene_prop",0),
- ],
- [
-
- (try_for_agents, ":agent_no"),
- (gt,":agent_no",-1),
- (agent_is_alive, ":agent_no"),
- (agent_is_human, ":agent_no"),
- (agent_get_slot, ":sprop_instance", ":agent_no", slot_agent_driving_vehicle),
- (gt,":sprop_instance",0),
- (init_position,pos21),
- (prop_instance_get_position, pos21, ":sprop_instance"),
- (scene_prop_get_slot, ":animation_speed", ":sprop_instance", scene_prop_slot_animation_speed),
- (neq,":animation_speed",0),
- #150*150+350*350 = 14500000 根号14500000 = 380 380+50 = 430
- (try_for_agents,":other_agents_no",pos21,430),
- (gt,":other_agents_no",-1),
- (neq,":agent_no",":other_agents_no"),
- (agent_is_alive,":other_agents_no"),
- (agent_is_human,":other_agents_no"),
- (agent_get_slot, ":other_sprop_instance", ":other_agents_no", slot_agent_driving_vehicle),
- (le,":other_sprop_instance",0),
- (init_position,pos22),
- (agent_get_position,pos22,":other_agents_no"),
- (init_position,pos23),
- (position_transform_position_to_local,pos23,pos22,pos21),
- (position_get_y,":relative_y",pos23),
- (position_get_x,":relative_x",pos23),
- (is_between,":relative_y",-430,430),
- (is_between,":relative_x",-150,150),
-
- (assign,":relative_x_temp",":relative_x"),
- (val_abs,":relative_x_temp"),
- (store_sub,":relative_x_temp",300,":relative_x_temp"),
- (val_abs,":relative_x_temp"),
- (gt,":relative_x_temp",0),
-
- (try_begin),
- (gt,":relative_x",0),
- (val_mul,":relative_x_temp",1),
- (else_try),
- (val_mul,":relative_x_temp",-1),
- (try_end),
-
- (init_position,pos23),
- (copy_position,pos23,pos22),
- (position_move_y,pos23,":relative_y"),
- (position_move_x,pos23,":relative_x_temp"),
- (position_copy_rotation,pos23,pos22),
- (agent_set_position,":other_agents_no",pos23),
-
- (assign,reg61,":relative_y"),
- (assign,reg62,":relative_x_temp"),
- (assign,reg63,":relative_x"),
- #(display_message,"@relative_y{reg61},relative_x_temp{reg62},relative_x{reg63}"),
- (agent_get_team,":agent_team",":agent_no"),
- (agent_get_team,":other_agent_team",":other_agents_no"),
- (teams_are_enemies,":agent_team",":other_agent_team"),
- (agent_deliver_damage_to_agent, ":agent_no", ":other_agents_no",300,"itm_sword_of_war"),
- (try_end),
- (try_end),
- ]
- ),
- ]
复制代码 五、完整MS和MOD体验
MOD里面自带最新MS代码
动员兵坦克大战 - 骑砍中文站下载中心 - 骑马与砍杀中文站论坛 (mountblade.com.cn)
|