Пример #1
0
        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;
                }
            }
        }
Пример #2
0
        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
                    }
                }
            }
        }
Пример #3
0
 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;
 }
Пример #4
0
        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;
            }
        }