Давно хотел сделать чтобы танк в этой игре стрелял.
И вот наконец разогнал лень и сделал.
Как работает: Сесть в танк, выбрать его для управления и щелкая правой кнопкой по месту перед танком - будет стрелять.
Сектор обстрела от 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