public void AddActivationIfCharacterNotSeen(PacketHitList hitlist, Combat.ICharacter target) { if (target == GetActiveRecruit()) return; SeenCharacter seencharacter; if (target.CharacterType == Enums.CharacterType.Recruit) { bool shouldActivate = false; lock (seenPlayers) { if (!seenPlayers.TryGetValue(((Recruit)target).Owner.Player.CharID, out seencharacter)) { seencharacter = new SeenCharacter(); seenPlayers.Add(((Recruit)target).Owner.Player.CharID, seencharacter); shouldActivate = true; } else { if (!seencharacter.InSight) { shouldActivate = true; } } } if (shouldActivate) { if (seencharacter.LocationOutdated) { //add location data hitlist.AddPacket(client, PacketBuilder.CreatePlayerXY(((Recruit)target).Owner)); hitlist.AddPacket(client, PacketBuilder.CreatePlayerDir(((Recruit)target).Owner)); seencharacter.LocationOutdated = false; } if (seencharacter.ConditionOutdated) { //add condition data hitlist.AddPacket(client, PacketBuilder.CreatePlayerStatusAilment(((Recruit)target).Owner)); //hitlist.AddPacket(client, PacketBuilder.CreatePlayerConfusion(((Recruit)target).Owner)); hitlist.AddPacket(client, PacketBuilder.CreatePlayerVolatileStatus(((Recruit)target).Owner)); seencharacter.ConditionOutdated = false; } //add activation param hitlist.AddPacket(client, PacketBuilder.CreatePlayerActivation(((Recruit)target).Owner, true)); //set isseen to true seencharacter.InSight = true; } } else if (target.CharacterType == Enums.CharacterType.MapNpc) { MapNpc npcTarget = (MapNpc)target; bool shouldActivate = false; lock (seenNpcs) { Dictionary<int, SeenCharacter> mapSeenNpcs = null; if (!seenNpcs.TryGetValue(npcTarget.MapID, out mapSeenNpcs)) { mapSeenNpcs = new Dictionary<int, SeenCharacter>(); seenNpcs.Add(npcTarget.MapID, mapSeenNpcs); shouldActivate = true; } if (!mapSeenNpcs.TryGetValue(npcTarget.MapSlot, out seencharacter)) { seencharacter = new SeenCharacter(); mapSeenNpcs.Add(npcTarget.MapSlot, seencharacter); shouldActivate = true; } else { if (!seencharacter.InSight) { shouldActivate = true; } } } if (shouldActivate) { if (seencharacter.LocationOutdated) { //add location data hitlist.AddPacket(client, PacketBuilder.CreateNpcXY(npcTarget)); hitlist.AddPacket(client, PacketBuilder.CreateNpcDir(npcTarget)); seencharacter.LocationOutdated = false; } if (seencharacter.ConditionOutdated) { //add condition data hitlist.AddPacket(client, PacketBuilder.CreateNpcHP(npcTarget)); hitlist.AddPacket(client, PacketBuilder.CreateNpcStatusAilment(npcTarget)); //hitlist.AddPacket(client, PacketBuilder.CreateNpcConfusion(npcTarget)); hitlist.AddPacket(client, PacketBuilder.CreateNpcVolatileStatus(npcTarget)); seencharacter.ConditionOutdated = false; } //add activation param hitlist.AddPacket(client, PacketBuilder.CreateNpcActivation(npcTarget, true)); //set isseen to true seencharacter.InSight = true; } } }
public void RecreateSeenCharacters() { IMap currentMap = GetCurrentMap(); seenNpcs = new Dictionary<string, Dictionary<int, SeenCharacter>>(); seenPlayers = new Dictionary<string, SeenCharacter>(); Enums.MapID[] mapIDs = new Enums.MapID[9] { Enums.MapID.Active, Enums.MapID.Up, Enums.MapID.Down, Enums.MapID.Left, Enums.MapID.Right, Enums.MapID.TopLeft, Enums.MapID.BottomLeft, Enums.MapID.TopRight, Enums.MapID.BottomRight }; for (int i = 0; i < mapIDs.Length; i++) { IMap mapToTest = MapManager.RetrieveBorderingMap(currentMap, mapIDs[i], true); if (mapToTest != null) { Dictionary<int, SeenCharacter> mapSeenNpcs = null; lock (seenNpcs) { if (!seenNpcs.TryGetValue(mapToTest.MapID, out mapSeenNpcs)) { mapSeenNpcs = new Dictionary<int, SeenCharacter>(); seenNpcs.Add(mapToTest.MapID, mapSeenNpcs); } } for (int n = 0; n < Constants.MAX_MAP_NPCS; n++) { SeenCharacter seenCharacter = null; lock (seenNpcs) { if (!mapSeenNpcs.TryGetValue(n, out seenCharacter)) { seenCharacter = new SeenCharacter(); mapSeenNpcs.Add(n, seenCharacter); } } if (AI.MovementProcessor.WillCharacterSeeCharacter(currentMap, GetActiveRecruit(), mapToTest, mapIDs[i], mapToTest.ActiveNpc[n])) { seenCharacter.InSight = true; } //new seencharacter //if canbeseen, then isseen //server cannot unsee } foreach (Client n in mapToTest.GetClients()) { SeenCharacter seenCharacter = null; lock (seenPlayers) { if (!seenPlayers.TryGetValue(n.Player.CharID, out seenCharacter)) { seenCharacter = new SeenCharacter(); seenPlayers.Add(n.Player.CharID, seenCharacter); } } if (AI.MovementProcessor.WillCharacterSeeCharacter(currentMap, GetActiveRecruit(), mapToTest, mapIDs[i], n.Player.GetActiveRecruit())) { seenCharacter.InSight = true; } //add new seencharacter based on player //if canbeseen, then isseen } } } }
public void SeeNewCharacter(Combat.ICharacter target) { IMap currentMap = GetCurrentMap(); IMap targetMap = MapManager.RetrieveMap(target.MapID); SeenCharacter seenCharacter = null; if (target.CharacterType == Enums.CharacterType.Recruit) { lock (seenPlayers) { Recruit recruitTarget = (Recruit)target; if (!seenPlayers.TryGetValue(recruitTarget.Owner.Player.CharID, out seenCharacter)) { seenCharacter = new SeenCharacter(); seenPlayers.Add(recruitTarget.Owner.Player.CharID, seenCharacter); } } } else if (target.CharacterType == Enums.CharacterType.MapNpc) { MapNpc npcTarget = (MapNpc)target; lock (seenNpcs) { Dictionary<int, SeenCharacter> mapSeenNpcs = null; if (!seenNpcs.TryGetValue(npcTarget.MapID, out mapSeenNpcs)) { mapSeenNpcs = new Dictionary<int, SeenCharacter>(); seenNpcs.Add(npcTarget.MapID, mapSeenNpcs); } if (!mapSeenNpcs.TryGetValue(npcTarget.MapSlot, out seenCharacter)) { seenCharacter = new SeenCharacter(); mapSeenNpcs.Add(npcTarget.MapSlot, seenCharacter); } } } seenCharacter.InSight = AI.MovementProcessor.WillCharacterSeeCharacter(Map, GetActiveRecruit(), targetMap, SeamlessWorldHelper.GetBorderingMapID(Map, targetMap), target); seenCharacter.LocationOutdated = false; seenCharacter.ConditionOutdated = false; }
public void OutdateCharacter(Combat.ICharacter target, Enums.OutdateType outdateType) { SeenCharacter seencharacter = null; if (target.CharacterType == Enums.CharacterType.Recruit) { string charID = ((Recruit)target).Owner.Player.CharID; lock (seenPlayers) { if (!seenPlayers.TryGetValue(charID, out seencharacter)) { seencharacter = new SeenCharacter(); seenPlayers.Add(charID, seencharacter); } } } else if (target.CharacterType == Enums.CharacterType.MapNpc) { //if (Map.ActiveNpc[((MapNpc)target).MapSlot] != target) { // return false; //} MapNpc npcTarget = (MapNpc)target; lock (seenNpcs) { Dictionary<int, SeenCharacter> mapNpcSeenCharacterList; if (!seenNpcs.TryGetValue(npcTarget.MapID, out mapNpcSeenCharacterList)) { mapNpcSeenCharacterList = new Dictionary<int, SeenCharacter>(); seenNpcs.Add(npcTarget.MapID, mapNpcSeenCharacterList); } if (!mapNpcSeenCharacterList.TryGetValue(npcTarget.MapSlot, out seencharacter)) { seencharacter = new SeenCharacter(); mapNpcSeenCharacterList.Add(npcTarget.MapSlot, seencharacter); } } } if (outdateType == Enums.OutdateType.Location) { seencharacter.LocationOutdated = true; } else if (outdateType == Enums.OutdateType.Condition) { seencharacter.ConditionOutdated = true; } }