Beispiel #1
0
        public MsgText(string s) : this()
        {
            Lines = TextHelper.SplitString(s);

            int f = Lines.FindIndex(s => s.StartsWith("AREA:"));

            if (f >= 0)
            {
                Area = Lines[f].Substring(5).Trim();
                Lines.RemoveAt(f);
            }

            f = Lines.FindLastIndex(s => s.StartsWith("--- "));
            if (f >= 0)
            {
                Tear = Lines[f].Substring(4).Trim();
                Lines.RemoveAt(f);
            }

            f = Lines.FindIndex(s => s.Trim().StartsWith("* Origin: "));
            if (f >= 0)
            {
                Origin = Lines[f].Trim().Substring(9).Trim();
                Lines.RemoveAt(f);
            }

            f = Lines.FindIndex(s => s.StartsWith("\u0001MSGID: "));
            if (f >= 0)
            {
                MsgId = Lines[f].Substring(7).Trim();
                Lines.RemoveAt(f);
            }

            f = Lines.FindIndex(s => s.StartsWith("\u0001REPLY: "));
            if (f >= 0)
            {
                ReplyId = Lines[f].Substring(7).Trim();
                Lines.RemoveAt(f);
            }

            f = Lines.FindIndex(s => s.StartsWith("SEEN-BY"));
            while (f >= 0)
            {
                SeenBy.Add(Lines[f].Substring(8).Trim());
                Lines.RemoveAt(f);
                f = Lines.FindIndex(s => s.StartsWith("SEEN-BY"));
            }

            f = Lines.FindIndex(s => s.StartsWith("\u0001PATH"));
            while (f >= 0)
            {
                Path.Add(Lines[f].Substring(6).Trim());
                Lines.RemoveAt(f);
                f = Lines.FindIndex(s => s.StartsWith("\u0001PATH"));
            }
        }
Beispiel #2
0
 public void RemoveFromWorld()
 {
     WorldServiceLocator._WS_Maps.GetMapTile(positionX, positionY, ref CellX, ref CellY);
     WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[CellX, CellY].DynamicObjectsHere.Remove(GUID);
     ulong[] array = SeenBy.ToArray();
     foreach (ulong plGUID in array)
     {
         if (WorldServiceLocator._WorldServer.CHARACTERs[plGUID].dynamicObjectsNear.Contains(GUID))
         {
             WorldServiceLocator._WorldServer.CHARACTERs[plGUID].guidsForRemoving_Lock.AcquireWriterLock(WorldServiceLocator._Global_Constants.DEFAULT_LOCK_TIMEOUT);
             WorldServiceLocator._WorldServer.CHARACTERs[plGUID].guidsForRemoving.Add(GUID);
             WorldServiceLocator._WorldServer.CHARACTERs[plGUID].guidsForRemoving_Lock.ReleaseWriterLock();
             WorldServiceLocator._WorldServer.CHARACTERs[plGUID].dynamicObjectsNear.Remove(GUID);
         }
     }
 }
Beispiel #3
0
 public void AddToWorld()
 {
     WorldServiceLocator._WS_Maps.GetMapTile(positionX, positionY, ref CellX, ref CellY);
     if (WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[CellX, CellY] == null)
     {
         WorldServiceLocator._WS_CharMovement.MAP_Load(CellX, CellY, MapID);
     }
     WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[CellX, CellY].CorpseObjectsHere.Add(GUID);
     Packets.PacketClass packet = new Packets.PacketClass(Opcodes.SMSG_UPDATE_OBJECT);
     checked
     {
         try
         {
             Packets.UpdateClass tmpUpdate = new Packets.UpdateClass(WorldServiceLocator._Global_Constants.FIELD_MASK_SIZE_CORPSE);
             try
             {
                 packet.AddInt32(1);
                 packet.AddInt8(0);
                 FillAllUpdateFlags(ref tmpUpdate);
                 Packets.UpdateClass updateClass  = tmpUpdate;
                 CorpseObject        updateObject = this;
                 updateClass.AddToPacket(ref packet, ObjectUpdateType.UPDATETYPE_CREATE_OBJECT, ref updateObject);
             }
             finally
             {
                 tmpUpdate.Dispose();
             }
             short i = -1;
             do
             {
                 short j = -1;
                 do
                 {
                     if ((short)unchecked (CellX + i) >= 0 && (short)unchecked (CellX + i) <= 63 && (short)unchecked (CellY + j) >= 0 && (short)unchecked (CellY + j) <= 63 && WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[(short)unchecked (CellX + i), (short)unchecked (CellY + j)] != null && WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[(short)unchecked (CellX + i), (short)unchecked (CellY + j)].PlayersHere.Count > 0)
                     {
                         WS_Maps.TMapTile tMapTile = WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[(short)unchecked (CellX + i), (short)unchecked (CellY + j)];
                         ulong[]          list     = tMapTile.PlayersHere.ToArray();
                         ulong[]          array    = list;
                         foreach (ulong plGUID in array)
                         {
                             int num;
                             if (WorldServiceLocator._WorldServer.CHARACTERs.ContainsKey(plGUID))
                             {
                                 WS_PlayerData.CharacterObject characterObject = WorldServiceLocator._WorldServer.CHARACTERs[plGUID];
                                 WS_Base.BaseObject            objCharacter    = this;
                                 num = (characterObject.CanSee(ref objCharacter) ? 1 : 0);
                             }
                             else
                             {
                                 num = 0;
                             }
                             if (num != 0)
                             {
                                 WorldServiceLocator._WorldServer.CHARACTERs[plGUID].client.SendMultiplyPackets(ref packet);
                                 WorldServiceLocator._WorldServer.CHARACTERs[plGUID].corpseObjectsNear.Add(GUID);
                                 SeenBy.Add(plGUID);
                             }
                         }
                     }
                     j = (short)unchecked (j + 1);
                 }while (j <= 1);
                 i = (short)unchecked (i + 1);
             }while (i <= 1);
         }
         finally
         {
             packet.Dispose();
         }
     }
 }
        public void AddToWorld()
        {
            WorldServiceLocator._WS_Maps.GetMapTile(positionX, positionY, ref CellX, ref CellY);
            if (WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[CellX, CellY] == null)
            {
                WorldServiceLocator._WS_CharMovement.MAP_Load(CellX, CellY, MapID);
            }
            try
            {
                WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[CellX, CellY].DynamicObjectsHere.Add(GUID);
            }
            catch (Exception projectError)
            {
                ProjectData.SetProjectError(projectError);
                WorldServiceLocator._WorldServer.Log.WriteLine(LogType.WARNING, "AddToWorld failed MapId: {0} Tile XY: {1} {2} GUID: {3}", MapID, CellX, CellY, GUID);
                ProjectData.ClearProjectError();
                return;
            }
            Packets.PacketClass packet = new(Opcodes.SMSG_UPDATE_OBJECT);
            packet.AddInt32(1);
            packet.AddInt8(0);
            Packets.UpdateClass tmpUpdate = new(WorldServiceLocator._Global_Constants.FIELD_MASK_SIZE_DYNAMICOBJECT);
            FillAllUpdateFlags(ref tmpUpdate);
            var updateClass  = tmpUpdate;
            var updateObject = this;

            updateClass.AddToPacket(ref packet, ObjectUpdateType.UPDATETYPE_CREATE_OBJECT_SELF, ref updateObject);
            tmpUpdate.Dispose();
            short i = -1;

            checked
            {
                do
                {
                    short j = -1;
                    do
                    {
                        if ((short)unchecked (CellX + i) >= 0 && (short)unchecked (CellX + i) <= 63 && (short)unchecked (CellY + j) >= 0 && (short)unchecked (CellY + j) <= 63 && WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[(short)unchecked (CellX + i), (short)unchecked (CellY + j)] != null && WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[(short)unchecked (CellX + i), (short)unchecked (CellY + j)].PlayersHere.Count > 0)
                        {
                            var tMapTile = WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[(short)unchecked (CellX + i), (short)unchecked (CellY + j)];
                            var list     = tMapTile.PlayersHere.ToArray();
                            var array    = list;
                            foreach (var plGUID in array)
                            {
                                int num;
                                if (WorldServiceLocator._WorldServer.CHARACTERs.ContainsKey(plGUID))
                                {
                                    var characterObject             = WorldServiceLocator._WorldServer.CHARACTERs[plGUID];
                                    WS_Base.BaseObject objCharacter = this;
                                    num = characterObject.CanSee(ref objCharacter) ? 1 : 0;
                                }
                                else
                                {
                                    num = 0;
                                }
                                if (num != 0)
                                {
                                    WorldServiceLocator._WorldServer.CHARACTERs[plGUID].client.SendMultiplyPackets(ref packet);
                                    WorldServiceLocator._WorldServer.CHARACTERs[plGUID].dynamicObjectsNear.Add(GUID);
                                    SeenBy.Add(plGUID);
                                }
                            }
                        }
                        j = (short)unchecked (j + 1);
                    }while (j <= 1);
                    i = (short)unchecked (i + 1);
                }while (i <= 1);
                packet.Dispose();
            }
        }