Esempio n. 1
0
 public void LoadSpawns(byte TileX, byte TileY, uint TileMap, uint TileInstance)
 {
     checked
     {
         float MinX = (32 - TileX) * WorldServiceLocator._Global_Constants.SIZE;
         float MaxX = (32 - (TileX + 1)) * WorldServiceLocator._Global_Constants.SIZE;
         float MinY = (32 - TileY) * WorldServiceLocator._Global_Constants.SIZE;
         float MaxY = (32 - (TileY + 1)) * WorldServiceLocator._Global_Constants.SIZE;
         if (MinX > MaxX)
         {
             float tmpSng2 = MinX;
             MinX = MaxX;
             MaxX = tmpSng2;
         }
         if (MinY > MaxY)
         {
             float tmpSng = MinY;
             MinY = MaxY;
             MaxY = tmpSng;
         }
         ulong InstanceGuidAdd = 0uL;
         if (TileInstance > 0L)
         {
             InstanceGuidAdd = Convert.ToUInt64(decimal.Add(new decimal(1000000L), decimal.Multiply(new decimal(TileInstance - 1L), new decimal(100000L))));
         }
         DataTable MysqlQuery = new DataTable();
         WorldServiceLocator._WorldServer.WorldDatabase.Query($"SELECT * FROM creature LEFT OUTER JOIN game_event_creature ON creature.guid = game_event_creature.guid WHERE map={TileMap} AND position_X BETWEEN '{MinX}' AND '{MaxX}' AND position_Y BETWEEN '{MinY}' AND '{MaxY}';", ref MysqlQuery);
         IEnumerator enumerator = default;
         try
         {
             enumerator = MysqlQuery.Rows.GetEnumerator();
             while (enumerator.MoveNext())
             {
                 DataRow row = (DataRow)enumerator.Current;
                 if (WorldServiceLocator._WorldServer.WORLD_CREATUREs.ContainsKey(Convert.ToUInt64(decimal.Add(decimal.Add(new decimal(row.As <long>("guid")), new decimal(InstanceGuidAdd)), new decimal(WorldServiceLocator._Global_Constants.GUID_UNIT)))))
                 {
                     continue;
                 }
                 try
                 {
                     WS_Creatures.CreatureObject tmpCr = new WS_Creatures.CreatureObject(Convert.ToUInt64(decimal.Add(new decimal(row.As <long>("guid")), new decimal(InstanceGuidAdd))), row);
                     if (tmpCr.GameEvent == 0)
                     {
                         tmpCr.instance = TileInstance;
                         tmpCr.AddToWorld();
                     }
                 }
                 catch (Exception ex5)
                 {
                     ProjectData.SetProjectError(ex5);
                     Exception ex4 = ex5;
                     WorldServiceLocator._WorldServer.Log.WriteLine(LogType.CRITICAL, "Error when creating creature [{0}].{1}{2}", row["id"], Environment.NewLine, ex4.ToString());
                     ProjectData.ClearProjectError();
                 }
             }
         }
         finally
         {
             if (enumerator is IDisposable)
             {
                 (enumerator as IDisposable).Dispose();
             }
         }
         MysqlQuery.Clear();
         WorldServiceLocator._WorldServer.WorldDatabase.Query($"SELECT * FROM gameobject LEFT OUTER JOIN game_event_gameobject ON gameobject.guid = game_event_gameobject.guid WHERE map={TileMap} AND spawntimesecs>=0 AND position_X BETWEEN '{MinX}' AND '{MaxX}' AND position_Y BETWEEN '{MinY}' AND '{MaxY}';", ref MysqlQuery);
         IEnumerator enumerator2 = default;
         try
         {
             enumerator2 = MysqlQuery.Rows.GetEnumerator();
             while (enumerator2.MoveNext())
             {
                 DataRow row = (DataRow)enumerator2.Current;
                 if (WorldServiceLocator._WorldServer.WORLD_GAMEOBJECTs.ContainsKey(row.As <ulong>("guid") + InstanceGuidAdd + WorldServiceLocator._Global_Constants.GUID_GAMEOBJECT) || WorldServiceLocator._WorldServer.WORLD_GAMEOBJECTs.ContainsKey(row.As <ulong>("guid") + InstanceGuidAdd + WorldServiceLocator._Global_Constants.GUID_TRANSPORT))
                 {
                     continue;
                 }
                 try
                 {
                     WS_GameObjects.GameObjectObject tmpGo = new WS_GameObjects.GameObjectObject(row.As <ulong>("guid") + InstanceGuidAdd, row);
                     if (tmpGo.GameEvent == 0)
                     {
                         tmpGo.instance = TileInstance;
                         tmpGo.AddToWorld();
                     }
                 }
                 catch (Exception ex6)
                 {
                     ProjectData.SetProjectError(ex6);
                     Exception ex3 = ex6;
                     WorldServiceLocator._WorldServer.Log.WriteLine(LogType.CRITICAL, "Error when creating gameobject [{0}].{1}{2}", row["id"], Environment.NewLine, ex3.ToString());
                     ProjectData.ClearProjectError();
                 }
             }
         }
         finally
         {
             if (enumerator2 is IDisposable)
             {
                 (enumerator2 as IDisposable).Dispose();
             }
         }
         MysqlQuery.Clear();
         WorldServiceLocator._WorldServer.CharacterDatabase.Query(string.Format("SELECT * FROM corpse WHERE map={0} AND instance={5} AND position_x BETWEEN '{1}' AND '{2}' AND position_y BETWEEN '{3}' AND '{4}';", TileMap, MinX, MaxX, MinY, MaxY, TileInstance), ref MysqlQuery);
         IEnumerator enumerator3 = default;
         try
         {
             enumerator3 = MysqlQuery.Rows.GetEnumerator();
             while (enumerator3.MoveNext())
             {
                 DataRow InfoRow = (DataRow)enumerator3.Current;
                 if (!WorldServiceLocator._WorldServer.WORLD_CORPSEOBJECTs.ContainsKey(Conversions.ToULong(InfoRow["guid"]) + WorldServiceLocator._Global_Constants.GUID_CORPSE))
                 {
                     try
                     {
                         WS_Corpses.CorpseObject tmpCorpse = new WS_Corpses.CorpseObject(Conversions.ToULong(InfoRow["guid"]), InfoRow)
                         {
                             instance = TileInstance
                         };
                         tmpCorpse.AddToWorld();
                     }
                     catch (Exception ex7)
                     {
                         ProjectData.SetProjectError(ex7);
                         Exception ex2 = ex7;
                         WorldServiceLocator._WorldServer.Log.WriteLine(LogType.CRITICAL, "Error when creating corpse [{0}].{1}{2}", InfoRow["guid"], Environment.NewLine, ex2.ToString());
                         ProjectData.ClearProjectError();
                     }
                 }
             }
         }
         finally
         {
             if (enumerator3 is IDisposable)
             {
                 (enumerator3 as IDisposable).Dispose();
             }
         }
         try
         {
             WorldServiceLocator._WorldServer.WORLD_TRANSPORTs_Lock.AcquireReaderLock(1000);
             foreach (KeyValuePair <ulong, WS_Transports.TransportObject> Transport in WorldServiceLocator._WorldServer.WORLD_TRANSPORTs)
             {
                 try
                 {
                     if (Transport.Value.MapID == TileMap && Transport.Value.positionX >= MinX && Transport.Value.positionX <= MaxX && Transport.Value.positionY >= MinY && Transport.Value.positionY <= MaxY)
                     {
                         if (!Maps[TileMap].Tiles[TileX, TileY].GameObjectsHere.Contains(Transport.Value.GUID))
                         {
                             Maps[TileMap].Tiles[TileX, TileY].GameObjectsHere.Add(Transport.Value.GUID);
                         }
                         Transport.Value.NotifyEnter();
                     }
                 }
                 catch (Exception ex8)
                 {
                     ProjectData.SetProjectError(ex8);
                     Exception ex = ex8;
                     WorldServiceLocator._WorldServer.Log.WriteLine(LogType.CRITICAL, "Error when creating transport [{0}].{1}{2}", Transport.Key - WorldServiceLocator._Global_Constants.GUID_MO_TRANSPORT, Environment.NewLine, ex.ToString());
                     ProjectData.ClearProjectError();
                 }
             }
         }
         catch (Exception projectError)
         {
             ProjectData.SetProjectError(projectError);
             ProjectData.ClearProjectError();
         }
         finally
         {
             WorldServiceLocator._WorldServer.WORLD_TRANSPORTs_Lock.ReleaseReaderLock();
         }
     }
 }
Esempio n. 2
0
 public void AddToPacket(ref PacketClass packet, ObjectUpdateType updateType, ref WS_GameObjects.GameObjectObject updateObject)
 {
     checked
     {
         packet.AddInt8((byte)updateType);
         packet.AddPackGUID(updateObject.GUID);
         switch (updateObject.Type)
         {
         case GameObjectType.GAMEOBJECT_TYPE_TRAP:
         case GameObjectType.GAMEOBJECT_TYPE_DUEL_ARBITER:
         case GameObjectType.GAMEOBJECT_TYPE_FLAGSTAND:
         case GameObjectType.GAMEOBJECT_TYPE_FLAGDROP:
             updateType = ObjectUpdateType.UPDATETYPE_CREATE_OBJECT_SELF;
             break;
         }
         if (updateType == ObjectUpdateType.UPDATETYPE_CREATE_OBJECT || updateType == ObjectUpdateType.UPDATETYPE_CREATE_OBJECT_SELF)
         {
             packet.AddInt8(5);
             if (updateObject.Type == GameObjectType.GAMEOBJECT_TYPE_TRANSPORT || updateObject.Type == GameObjectType.GAMEOBJECT_TYPE_MO_TRANSPORT)
             {
                 packet.AddInt8(82);
             }
             else
             {
                 packet.AddInt8(80);
             }
             if (updateObject.Type == GameObjectType.GAMEOBJECT_TYPE_MO_TRANSPORT)
             {
                 packet.AddSingle(0f);
                 packet.AddSingle(0f);
                 packet.AddSingle(0f);
                 packet.AddSingle(updateObject.orientation);
             }
             else
             {
                 packet.AddSingle(updateObject.positionX);
                 packet.AddSingle(updateObject.positionY);
                 packet.AddSingle(updateObject.positionZ);
                 packet.AddSingle(updateObject.orientation);
             }
             packet.AddUInt32(WorldServiceLocator._CommonGlobalFunctions.GuidHigh(updateObject.GUID));
             if (updateObject.Type == GameObjectType.GAMEOBJECT_TYPE_TRANSPORT || updateObject.Type == GameObjectType.GAMEOBJECT_TYPE_MO_TRANSPORT)
             {
                 packet.AddInt32(WorldServiceLocator._WS_Network.MsTime());
             }
         }
         if (updateType == ObjectUpdateType.UPDATETYPE_CREATE_OBJECT || updateType == ObjectUpdateType.UPDATETYPE_CREATE_OBJECT_SELF || updateType == ObjectUpdateType.UPDATETYPE_VALUES)
         {
             int updateCount = 0;
             int num         = UpdateMask.Count - 1;
             for (int i = 0; i <= num; i++)
             {
                 if (UpdateMask.Get(i))
                 {
                     updateCount = i;
                 }
             }
             packet.AddInt8((byte)(checked (updateCount + 32) / 32));
             packet.AddBitArray(UpdateMask, checked ((byte)(checked (updateCount + 32) / 32)) * 4);
             int num2 = UpdateMask.Count - 1;
             for (int j = 0; j <= num2; j++)
             {
                 if (UpdateMask.Get(j))
                 {
                     if (UpdateData[j] is uint)
                     {
                         packet.AddUInt32(Conversions.ToUInteger(UpdateData[j]));
                     }
                     else if (UpdateData[j] is float)
                     {
                         packet.AddSingle(Conversions.ToSingle(UpdateData[j]));
                     }
                     else
                     {
                         packet.AddInt32(Conversions.ToInteger(UpdateData[j]));
                     }
                 }
             }
             UpdateMask.SetAll(value: false);
         }
         if (packet is UpdatePacketClass @class)
         {
             @class.UpdatesCount++;
         }
     }
 }
Esempio n. 3
0
 public virtual void OnQuestCastSpell(ref WS_PlayerData.CharacterObject objCharacter, ref WS_GameObjects.GameObjectObject GameObject, int SpellID)
 {
 }