Как работает isPlayer()

PieceOfChaos

Новичок
19 Май 2024
5
0
Language: typescript
Режим запуска: hammer dev tools

Всем привет!
В пустом шаблоне кастомки подписываюсь на событие "entity_killed".
Запускаю игру, выбираю персонажа, Акса. Умираю им от крипов, получаю вызов события
JavaScript:
private OnEntityKilled(event: EntityKilledEvent): void {
    const killedUnit = EntIndexToHScript(event.entindex_killed)!;

    print("IsBaseNPC " + killedUnit.IsBaseNPC());
    print("IsDOTANPC " + killedUnit.IsDOTANPC());
    print("IsNPC " + killedUnit.IsNPC());
    print("IsNull " + killedUnit.IsNull());
    print("IsPlayer " + killedUnit.IsPlayer());
    print("IsPlayerController " + killedUnit.IsPlayerController());
    print("IsPlayerPawn " + killedUnit.IsPlayerPawn());
}

и получаю такой вывод:
Код:
IsBaseNPC true
IsDOTANPC true
IsNPC false
IsNull false
IsPlayer false
IsPlayerController false
IsPlayerPawn false

Подскажите, почему мой персонаж не считается игроком?
Может это быть связано с тем, что я запустил кастомку из Hammer-а?
 
Решил проблему, нужно использовать событие "dota_player_killed"
JavaScript:
private OnPlayerKilled(event: DotaPlayerKilledEvent): void {
    const playerId = event.PlayerID;
    const player: CDOTAPlayerController = PlayerResource.GetPlayer(playerId)!;
    const playerHero: CDOTA_BaseNPC_Hero = player.GetAssignedHero();

    print("IsPlayer " + player.IsPlayer());
    print("IsPlayerController " + player.IsPlayerController());
    print("IsPlayerPawn " + player.IsPlayerPawn());
    print("IsRealHero " + playerHero.IsRealHero());

}

Вывод
Код:
IsPlayer true
IsPlayerController true
IsPlayerPawn false
IsRealHero true
 
в первом случае ты получаешь сущность героя( EntIndexToHScript возвращает CDOTA_BaseNPC), что не является игроком, во втором случае ты получаешь playerID и по нему находишь самого игрока(плеера) ( GetPlayer(id) возвращает CDOTAPlayerController), если ты хочешь чтобы в 1 случае тебе возвращался player, используй killedUnit:GetPlayerOwner() , что и будет являтся CDOTAPlayerController
 
Реклама: