private bool RemoveEntity(GameObject other) { BasePlayerCharacterEntity player = null; BaseMonsterCharacterEntity monster = null; NpcEntity npc = null; ItemDropEntity itemDrop = null; BuildingEntity building = null; FindEntity(other, out player, out monster, out npc, out itemDrop, out building, false); if (player != null) { return(characters.Remove(player) && players.Remove(player)); } if (monster != null) { return(characters.Remove(monster) && monsters.Remove(monster)); } if (npc != null) { return(npcs.Remove(npc)); } if (itemDrop != null) { return(itemDrops.Remove(itemDrop)); } if (building != null) { return(buildings.Remove(building)); } return(false); }
private bool AddEntity(GameObject other) { BasePlayerCharacterEntity player = null; BaseMonsterCharacterEntity monster = null; NpcEntity npc = null; ItemDropEntity itemDrop = null; BuildingEntity building = null; FindEntity(other, out player, out monster, out npc, out itemDrop, out building); if (player != null) { if (!characters.Contains(player)) { characters.Add(player); } if (!players.Contains(player)) { players.Add(player); } return(true); } if (monster != null) { if (!characters.Contains(monster)) { characters.Add(monster); } if (!monsters.Contains(monster)) { monsters.Add(monster); } return(true); } if (npc != null) { if (!npcs.Contains(npc)) { npcs.Add(npc); } return(true); } if (building != null) { if (!buildings.Contains(building)) { buildings.Add(building); } return(true); } if (itemDrop != null) { if (!itemDrops.Contains(itemDrop)) { itemDrops.Add(itemDrop); } return(true); } return(false); }
public override bool IsAlly(BaseCharacterEntity characterEntity) { if (characterEntity == null) { return(false); } if (IsSummoned) { // If summoned by someone, will have same allies with summoner return(characterEntity == Summoner || characterEntity.IsAlly(Summoner)); } if (characterEntity is BaseMonsterCharacterEntity) { // If another monster has same allyId so it is ally BaseMonsterCharacterEntity monsterCharacterEntity = characterEntity as BaseMonsterCharacterEntity; if (monsterCharacterEntity != null) { if (monsterCharacterEntity.IsSummoned) { return(IsAlly(monsterCharacterEntity.Summoner)); } return(monsterCharacterEntity.monsterCharacter.allyId == monsterCharacter.allyId); } } return(false); }
public static void AddCharacterEntities(IEnumerable <BaseCharacterEntity> characterEntities) { if (characterEntities == null) { return; } foreach (BaseCharacterEntity characterEntity in characterEntities) { if (characterEntity == null || AllCharacterEntities.ContainsKey(characterEntity.Identity.HashAssetId)) { continue; } AllCharacterEntities[characterEntity.Identity.HashAssetId] = characterEntity; if (characterEntity is BasePlayerCharacterEntity) { BasePlayerCharacterEntity playerCharacterEntity = characterEntity as BasePlayerCharacterEntity; PlayerCharacterEntities[characterEntity.Identity.HashAssetId] = playerCharacterEntity; } else if (characterEntity is BaseMonsterCharacterEntity) { BaseMonsterCharacterEntity monsterCharacterEntity = characterEntity as BaseMonsterCharacterEntity; MonsterCharacterEntities[characterEntity.Identity.HashAssetId] = monsterCharacterEntity; } } }
IEnumerator SpawnRoutine(float delay) { yield return(new WaitForSecondsRealtime(delay)); Vector3 spawnPosition = GetRandomPosition(); Quaternion spawnRotation = GetRandomRotation(); GameObject spawnObj = Instantiate(monsterCharacterEntity.gameObject, spawnPosition, spawnRotation); BaseMonsterCharacterEntity entity = spawnObj.GetComponent <BaseMonsterCharacterEntity>(); entity.Level = level; entity.SetSpawnArea(this, spawnPosition); BaseGameNetworkManager.Singleton.Assets.NetworkSpawn(spawnObj); }
/// <summary> /// Event that occurs on death. Used primarily to trigger dropping of loot bag. /// </summary> protected virtual void OnDeath() { characterDB = this.GetDatabase(); if (characterDB == null) { Debug.Log("character DB is null"); return; } if (!characterDB.useLootBag) { return; } // Determine which loot bag entity to use based on character DB. switch (characterDB.lootBagEntity) { case LootBagEntitySelection.Visible: if (GameInstance.Singleton.LootBagEntities.ContainsKey(visibleLootBagName)) { lootBagEntity = GameInstance.Singleton.LootBagEntities[visibleLootBagName]; } break; case LootBagEntitySelection.Invisible: if (GameInstance.Singleton.LootBagEntities.ContainsKey(invisibleLootBagName)) { lootBagEntity = GameInstance.Singleton.LootBagEntities[invisibleLootBagName]; } break; case LootBagEntitySelection.Override: lootBagEntity = characterDB.lootBagEntityOverride; break; } DropLootBag(); // If character is a monster, set body destroy delay according to character DB settings. BaseMonsterCharacterEntity bmce = this as BaseMonsterCharacterEntity; if (bmce != null && characterDB is MonsterCharacter) { var monsterDB = characterDB as MonsterCharacter; if (monsterDB != null && monsterDB.syncDestroyDelayWithBody) { bmce.SetDestroyDelay(monsterDB.lootBagDestroyDelay); } } }
public virtual void OnKillMonster(BaseMonsterCharacterEntity monsterCharacterEntity) { if (!IsServer || monsterCharacterEntity == null) { return; } for (int i = 0; i < Quests.Count; ++i) { CharacterQuest quest = Quests[i]; if (quest.AddKillMonster(monsterCharacterEntity, 1)) { quests[i] = quest; } } }
protected override BaseMonsterCharacterEntity SpawnInternal(BaseMonsterCharacterEntity prefab, short level) { if (characterObjectIds.Count <= 0) { // Spawn monster when there are player characters inside this collider return(null); } BaseMonsterCharacterEntity spawnedMonster = base.SpawnInternal(prefab, level); if (spawnedMonster != null) { monsterEntities.Add(spawnedMonster); return(spawnedMonster); } return(null); }
public override bool IsAlly(BaseCharacterEntity characterEntity) { if (characterEntity == null) { return(false); } if (characterEntity is BasePlayerCharacterEntity) { // If this character is in same party or guild with another character so it is ally BasePlayerCharacterEntity playerCharacterEntity = characterEntity as BasePlayerCharacterEntity; return((PartyId > 0 && PartyId == playerCharacterEntity.PartyId) || (GuildId > 0 && GuildId == playerCharacterEntity.GuildId)); } if (characterEntity is BaseMonsterCharacterEntity) { // If this character is summoner so it is ally BaseMonsterCharacterEntity monsterCharacterEntity = characterEntity as BaseMonsterCharacterEntity; return(monsterCharacterEntity.Summoner != null && monsterCharacterEntity.Summoner == this); } return(false); }
public override bool IsEnemy(BaseCharacterEntity characterEntity) { if (characterEntity == null) { return(false); } if (characterEntity is BasePlayerCharacterEntity) { // If not ally while this is Pvp map, assume that it is enemy while both characters are not in safe zone if (!IsAlly(characterEntity) && gameManager.CurrentMapInfo.canPvp) { return(!isInSafeArea && !characterEntity.isInSafeArea); } } if (characterEntity is BaseMonsterCharacterEntity) { // If this character is not summoner so it is enemy BaseMonsterCharacterEntity monsterCharacterEntity = characterEntity as BaseMonsterCharacterEntity; return(monsterCharacterEntity.Summoner == null || monsterCharacterEntity.Summoner != this); } return(false); }
private void FindEntity(GameObject other, out BasePlayerCharacterEntity player, out BaseMonsterCharacterEntity monster, out NpcEntity npc, out ItemDropEntity itemDrop, out BuildingEntity building, bool findWithAdvanceOptions = true) { player = null; if (findPlayer) { player = other.GetComponent <BasePlayerCharacterEntity>(); if (player == BasePlayerCharacterController.OwningCharacter) { player = null; } if (findWithAdvanceOptions) { if (findOnlyAlivePlayers && player != null && player.IsDead()) { player = null; } if (findPlayerToAttack && player != null && player.IsAlly(BasePlayerCharacterController.OwningCharacter)) { player = null; } } } monster = null; if (findMonster) { monster = other.GetComponent <BaseMonsterCharacterEntity>(); if (findWithAdvanceOptions) { if (findOnlyAliveMonsters && monster != null && monster.IsDead()) { monster = null; } if (findMonsterToAttack && monster != null && monster.IsAlly(BasePlayerCharacterController.OwningCharacter)) { monster = null; } } } npc = null; if (findNpc) { npc = other.GetComponent <NpcEntity>(); } itemDrop = null; if (findItemDrop) { itemDrop = other.GetComponent <ItemDropEntity>(); } building = null; if (findBuilding) { BuildingMaterial buildingMaterial = other.GetComponent <BuildingMaterial>(); if (buildingMaterial != null) { building = buildingMaterial.buildingEntity; } if (findWithAdvanceOptions) { if (findOnlyAliveBuildings && building != null && building.IsDead()) { building = null; } if (findOnlyActivatableBuildings && building != null && !building.Activatable) { building = null; } } } }