Давно хотел сделать чтобы танк в этой игре стрелял.
И вот наконец разогнал лень и сделал.
Как работает: Сесть в танк, выбрать его для управления и щелкая правой кнопкой по месту перед танком - будет стрелять.
Сектор обстрела от 12 до 60м 20 градусов.
Основной код в файле system_events.py
Код в def on_finally_initialized():
# Create active land region from exit regions _,y1,x1,_ = system.get_region('REGION_EXIT_WEST') x2,_,_,y2 = system.get_region('REGION_EXIT_OST') system.add_region('REGION_LAND',x1,y1,x2,y2)
Позволит определить куда щелкнули на карте - добавляет регион отталкиваясь от координат зон выхода.Без него следующая функция бесполезна. (код в любом месте функции)
Код в def on_region_click( regionname, x, y ):
if regionname == "REGION_LAND" and system.get_selected_pcs() == [] and system.camera_in_follow_mode(): _x=x/2 _y=y/2 for v in system.get_vehicles(): if not objects.is_destroyed(v) and objects.get_attribute(v, "typeid") == "SET_WHEELTANK" and vehicle.get_char_from_seat(v, 0) in system.get_pcs(): dist = objects.get_distance_to_position(v, _x, _y) if dist < 80 and dist > 12 and abs(abs(objects.get_direction(v)+180)-objects.get_direction_to_position(v,_x,_y)) < 10: objects.set_attribute(v,"ammo","SET_AMMOPACK_M79_M203") radius=amount_of_piercing=value_structure=value_organic=0.0 # TODO: Reduse ammo in inventory if objects.has_attribute(v, "ammo"): system.start_effect_object(v, "Dummy_muzzleflash", global_defines.fx_explosion) sounds.play_3d_sound_object("shot_m_79", v, None, None) system.start_effect(_x,_y,0.2,_x,_y,0.6,global_defines.fx_explosion_big) sounds.play_3d_sound("c4_small_explo", _x, _y, 0.2) ammo = objects.get_attribute(v, "ammo") if objects.has_attribute(ammo, "schaden_organisch_max") and objects.has_attribute(ammo, "schaden_organisch_min"): value_organic = random.randint(objects.get_attribute(ammo, "schaden_organisch_min"), objects.get_attribute(ammo, "schaden_organisch_max")) if objects.has_attribute(ammo, "schaden_struktur_max") and objects.has_attribute(ammo, "schaden_struktur_min"): value_structure = random.randint(objects.get_attribute(ammo, "schaden_struktur_min"), objects.get_attribute(ammo, "schaden_struktur_max")) if objects.has_attribute(ammo, "durchschlag"): amount_of_piercing = objects.get_attribute(ammo, "durchschlag") if objects.has_attribute(ammo, "wirkungsbereich"): radius = objects.get_attribute(ammo, "wirkungsbereich") system.hit_objects_in_ambit( vehicle.get_char_from_seat(v, 0), _x, _y, 0.5, radius, amount_of_piercing, 0, value_structure, value_organic ) print "Tank Fire on (%.3f, %.3f )"%( _x, _y ) else: system.add_text("Цель вне сектора обстрела.")
И выполняет все дейтвия - возможность выстрела и расчет сектора обстрела. (код размещен в начале тела функции)
И конечно не забываем заменить весь блок import на вот это(не помню что добавлял)
import global_defines from global_defines import Lambda from global_defines import data import character import vehicle import globaltext import system import music import sounds import random import math import string import comments import timerepr import object_events import random import objects import zone_ambients import spawnanimals import helpfile