def _pre_on_take_damage(args): info = make_object(TakeDamageInfo, args[1]) entity = Entity(info.attacker) if info.attacker else None if entity is not None and entity.is_player(): attacker = wcgo.player.Player(entity.index) else: attacker = None victim = wcgo.player.Player(index_from_pointer(args[0])) eargs = { 'attacker': attacker, 'victim': victim, 'info': info, } # Adds the weapon argument dependent on scenario if attacker is not None and attacker.active_weapon != -1: eargs['weapon'] = Weapon(index_from_inthandle(attacker.active_weapon)) else: eargs['weapon'] = None if attacker is None or attacker.userid == victim.userid: victim.hero.execute_skills('player_pre_self_injury', player=victim, **eargs) return if not (attacker.steamid == 'BOT' and attacker.hero is None): attacker.hero.execute_skills('player_pre_attack', player=attacker, **eargs) if not (victim.steamid == 'BOT' and victim.hero is None): victim.hero.execute_skills('player_pre_victim', player=victim, **eargs)
def pre_on_take_damage(args): # Get the victim victim = make_object(Player, args[0]) # Get TakeDamageInfo object info = make_object(TakeDamageInfo, args[1]) # Was it a self-inflicted damage? if info.attacker == victim.index: return # Check if attacker is a player entity = Entity(info.attacker) if not entity.is_player(): return # Get the attacker attacker = Player(info.attacker) # Do our thing if attacker.is_bot() and not victim.is_bot(): info.damage *= caches_from[victim.index].multiplier elif not attacker.is_bot() and victim.is_bot(): info.damage *= caches_to[attacker.index].multiplier
def _pre_damage_call_events(stack_data): take_damage_info = make_object(TakeDamageInfo, stack_data[1]) if not take_damage_info.attacker: return entity = Entity(take_damage_info.attacker) attacker = players[entity.index] if entity.is_player() else None victim = players[index_from_pointer(stack_data[0])] event_args = { 'attacker': attacker, 'victim': victim, 'take_damage_info': take_damage_info, } if attacker: if victim.team == attacker.team: attacker.hero.call_events('player_pre_teammate_attack', player=attacker, **event_args) victim.hero.call_events('player_pre_teammate_victim', player=victim, **event_args) return attacker.hero.call_events('player_pre_attack', player=attacker, **event_args) victim.hero.call_events('player_pre_victim', player=victim, **event_args) if victim.health <= take_damage_info.damage: attacker.hero.call_events('player_pre_death', player=victim, **event_args)