def create_shoot_menu(entity, target_id): _tx, _ty = movement.get_position_via_id(target_id) _weapon = entities.get_entity(items.get_items_in_holder(entity, 'weapon')[0]) _menu = ui_menu.create(_tx-camera.X+2, _ty-camera.Y-4, title='Shoot') _accuracy = stats.get_accuracy(entity, _weapon['_id']) _x, _y = movement.get_position(entity) _direction = numbers.direction_to((_x, _y), (_tx, _ty)) _final_direction = _direction + (_accuracy * numbers.distance((_x, _y), (_tx, _ty))) _spray_accuracy = (100 * (_direction / float(_final_direction))) entities.trigger_event(_weapon, 'get_actions', menu=_menu) ui_menu.add_selectable(_menu, 'Spray (Acc: %.2d)' % _spray_accuracy, lambda: entities.trigger_event(entity, 'shoot', target_id=target_id) and settings.set_tick_mode('normal')) ui_menu.add_selectable(_menu, 'Snipe (Acc: %s)' % _accuracy, lambda: _)
def _shoot_weapon(entity, weapon_id, target_id): _weapon = entities.get_entity(weapon_id) _x, _y = movement.get_position( entities.get_entity(_weapon['stats']['owner'])) if not target_id in entities.ENTITIES: logging.warning('Target deleted during shooting.') return _tx, _ty = movement.get_position(entities.get_entity(target_id)) _direction = numbers.direction_to((_x, _y), (_tx, _ty)) effects.muzzle_flash(_x, _y, _direction) entities.trigger_event(_weapon, 'flag_sub', flag='ammo', value=1) entities.trigger_event(entity, 'create_noise', volume=80, direction=numbers.direction_to((_x, _y), (_tx, _ty)), text='BAM', callback=lambda t, x, y: entities.trigger_event( t, 'update_target_memory', target_id=entity['_id'], key='last_seen_at', value=[x, y]), context_callback=lambda x, y: ui_dialog.create( x, y, 'Gunshot (Unknown)', title='Noise')) entity['stats']['action_points'] -= stats.get_shoot_cost(entity, weapon_id) entities.trigger_event(entity, 'get_accuracy') _accuracy = stats.get_accuracy(entity, weapon_id) _damage = flags.get_flag(_weapon, 'damage') effects.light(_x, _y, random.randint(3, 5), r=1.5, g=1.5, b=0) if _weapon['stats']['kind'] == 'explosive': items.explosive(entity, _x, _y, _tx, _ty, 4, _accuracy, _damage) else: items.bullet(entity, _x, _y, _tx, _ty, 1, _accuracy, _damage)
def create_shoot_menu(entity, target_id): _tx, _ty = movement.get_position_via_id(target_id) _weapon = entities.get_entity( items.get_items_in_holder(entity, 'weapon')[0]) _menu = ui_menu.create(_tx - camera.X + 2, _ty - camera.Y - 4, title='Shoot') _accuracy = stats.get_accuracy(entity, _weapon['_id']) _x, _y = movement.get_position(entity) _direction = numbers.direction_to((_x, _y), (_tx, _ty)) _final_direction = _direction + (_accuracy * numbers.distance((_x, _y), (_tx, _ty))) _spray_accuracy = (100 * (_direction / float(_final_direction))) entities.trigger_event(_weapon, 'get_actions', menu=_menu) ui_menu.add_selectable( _menu, 'Spray (Acc: %.2d)' % _spray_accuracy, lambda: entities.trigger_event(entity, 'shoot', target_id=target_id ) and settings.set_tick_mode('normal')) ui_menu.add_selectable(_menu, 'Snipe (Acc: %s)' % _accuracy, lambda: _)
def _shoot_weapon(entity, weapon_id, target_id): _weapon = entities.get_entity(weapon_id) _x, _y = movement.get_position(entities.get_entity(_weapon['stats']['owner'])) if not target_id in entities.ENTITIES: logging.warning('Target deleted during shooting.') return _tx, _ty = movement.get_position(entities.get_entity(target_id)) _direction = numbers.direction_to((_x, _y), (_tx, _ty)) effects.muzzle_flash(_x, _y, _direction) entities.trigger_event(_weapon, 'flag_sub', flag='ammo', value=1) entities.trigger_event(entity, 'create_noise', volume=80, direction=numbers.direction_to((_x, _y), (_tx, _ty)), text='BAM', callback=lambda t, x, y: entities.trigger_event(t, 'update_target_memory', target_id=entity['_id'], key='last_seen_at', value=[x, y]), context_callback=lambda x, y: ui_dialog.create(x, y, 'Gunshot (Unknown)', title='Noise')) entity['stats']['action_points'] -= stats.get_shoot_cost(entity, weapon_id) entities.trigger_event(entity, 'get_accuracy') _accuracy = stats.get_accuracy(entity, weapon_id) _damage = flags.get_flag(_weapon, 'damage') effects.light(_x, _y, random.randint(3, 5), r=1.5, g=1.5, b=0) if _weapon['stats']['kind'] == 'explosive': items.explosive(entity, _x, _y, _tx, _ty, 4, _accuracy, _damage) else: items.bullet(entity, _x, _y, _tx, _ty, 1, _accuracy, _damage)