コード例 #1
0
ファイル: wcgo.py プロジェクト: Ayuto/Warcraft-GO
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)
コード例 #2
0
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
コード例 #3
0
ファイル: calls.py プロジェクト: EhrmannWCS/SP-Warcraft-Mod
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)
コード例 #4
0
ファイル: calls.py プロジェクト: Predz/SP-Warcraft-Mod
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)