private static void GetUserInfo(Session Session, ClientMessage Message) { if (!Session.HasRight("moderation_tool")) { return; } CharacterInfo Info = null; using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { Info = CharacterInfoLoader.GetCharacterInfo(MySqlClient, Message.PopWiredUInt32()); } if (Info == null) { Session.SendData(NotificationMessageComposer.Compose("Could not retrieve user information.")); return; } Session.SendData(ModerationUserInfoComposer.Compose(Info, SessionManager.GetSessionByCharacterId(Info.Id))); }
public static void FillCache(SqlDatabaseClient MySqlClient, uint LinkedItemId) { if (mCache.ContainsKey(LinkedItemId)) { mCache.Remove(LinkedItemId); } uint IdValue = 0; MySqlClient.SetParameter("id", LinkedItemId); object Result = MySqlClient.ExecuteScalar("SELECT room_id FROM items WHERE id = @id LIMIT 1"); if (Result != null) { IdValue = (uint)Result; } if (IdValue > 0) { mCache.Add(LinkedItemId, IdValue); } }
private static void IsNameTaken(Session Session, ClientMessage Message) { String Username = Message.PopString(); using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { MySqlClient.SetParameter("username", Username); DataRow Taken = MySqlClient.ExecuteQueryRow("SELECT null FROM characters WHERE username = @username LIMIT 1"); if (Taken == null) { ServerMessage awnser = new ServerMessage(571); awnser.AppendInt32(0); awnser.AppendStringWithBreak(Username); awnser.AppendInt32(0); Session.SendData(awnser); } else { Session.SendData(NameTaken.Compose(Username)); } } }
private static void ProcessThread(object state) { Dictionary <uint, Session> Sessions = SessionManager.Sessions; if (Sessions.Count > 0) { using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { foreach (Session Session in Sessions.Values) { if (!Session.Authenticated || Session.CharacterInfo.TimeSinceLastActivityPointsUpdate <= Interval) { continue; } Session.CharacterInfo.UpdateActivityPointsBalance(MySqlClient, Amount); Session.SendData(ActivityPointsBalanceComposer.Compose(Session.CharacterInfo.ActivityPointsBalance, Amount)); Session.CharacterInfo.SetLastActivityPointsUpdate(MySqlClient); } } } }
public static Pet CreatePet(SqlDatabaseClient MySqlClient, uint UserId, int Type, string Name, int Race, String color) { MySqlClient.SetParameter("userid", UserId); MySqlClient.SetParameter("type", Type); MySqlClient.SetParameter("name", Name); MySqlClient.SetParameter("race", Race); MySqlClient.SetParameter("timestamp", UnixTimestamp.GetCurrent()); MySqlClient.SetParameter("color", color); string RawId = MySqlClient.ExecuteScalar("INSERT INTO pets (user_id,type,name,race,timestamp,color) VALUES (@userid,@type,@name,@race,@timestamp,@color); SELECT LAST_INSERT_ID();").ToString(); uint Id = 0; uint.TryParse(RawId, out Id); if (Id == 0) { return(null); } return(new Pet(Id, Name, Type, Race, UserId, 0, new Vector3(0, 0, 0), UnixTimestamp.GetCurrent(), 0, 120, 100, 0, color)); }
private static void OnFriendRequest(Session Session, ClientMessage Message) { string RequestName = UserInputFilter.FilterString(Message.PopString()); uint TargetId = CharacterResolverCache.GetUidFromName(RequestName); if (TargetId < 1 || TargetId == Session.CharacterId) { return; } CharacterInfo TargetUserInfo = null; using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { TargetUserInfo = CharacterInfoLoader.GetCharacterInfo(MySqlClient, TargetId); if (!TargetUserInfo.PrivacyAcceptFriends) { Session.SendData(MessengerErrorEvent.Compose(39, 3)); return; } if (FriendshipExists(MySqlClient, Session.CharacterId, TargetUserInfo.Id, false)) { return; } CreateFriendship(MySqlClient, Session.CharacterId, TargetUserInfo.Id, false); } Session NotifySession = SessionManager.GetSessionByCharacterId(TargetUserInfo.Id); if (NotifySession != null) { NotifySession.SendData(MessengerRequestNoficiationComposer.Compose(Session.CharacterId, Session.CharacterInfo.Username)); } QuestManager.ProgressUserQuest(Session, QuestType.SOCIAL_FRIEND); }
private static void OnFriendRemove(Session Session, ClientMessage Message) { int Amount = Message.PopWiredInt32(); // Precaution: limit queries to 50 if (Amount > 50) { Amount = 50; } List <MessengerUpdate> LocalUpdates = new List <MessengerUpdate>(); using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { for (int i = 0; i < Amount; i++) { uint FriendId = Message.PopWiredUInt32(); if (DestroyFriendship(MySqlClient, Session.CharacterId, FriendId)) { Session.MessengerFriendCache.RemoveFromCache(FriendId); LocalUpdates.Add(new MessengerUpdate(-1, CharacterInfoLoader.GenerateNullCharacter(FriendId))); Session TargetSession = SessionManager.GetSessionByCharacterId(FriendId);; if (TargetSession != null) { TargetSession.MessengerFriendCache.RemoveFromCache(Session.CharacterId); TargetSession.SendData(MessengerUpdateListComposer.Compose(new List <MessengerUpdate>() { new MessengerUpdate(-1, CharacterInfoLoader.GenerateNullCharacter(Session.CharacterId)) })); } } } } Session.SendData(MessengerUpdateListComposer.Compose(LocalUpdates)); }
/// <summary> /// Constructs a new world. /// /// <para>With the given world id, it will find the configurations /// set in the database, and configure this world using them. This /// allows you to create multiple worlds, yet connect to the same /// world, with the same players etc.</para> /// </summary> /// <param name="worldId">The id of this world.</param> public GameWorld(uint worldId) { // World initializations this.Id = worldId; DataRow vars; // Grab the rest of the world-specific variables from the database. using (SqlDatabaseClient client = GameServer.Database.GetClient()) { client.AddParameter("id", worldId); vars = client.ReadDataRow( "SELECT * FROM worlds WHERE world_id = @id LIMIT 1;" + "UPDATE characters SET online = '0' WHERE online = '1';" + "UPDATE worlds SET startup_time = NOW() WHERE world_id = @id;"); } if (vars != null) { this.Name = (string)vars["world_name"]; this.WelcomeMessage = (string)vars["welcome_message"]; string[] coords = vars["spawn_point"].ToString().Split(','); this.SpawnPoint = Location.Create( short.Parse(coords[0]), short.Parse(coords[1]), byte.Parse(coords[2])); this.Motw = (string)vars["motw"]; this.ExperienceRate = (int)vars["exp_rate"]; this.AccountCreationEnabled = true; this.IdlingEnabled = (bool)vars["enable_idling"]; } else { throw new ArgumentException("No existing world with id '" + worldId + "'."); } // Load bad words. BadWords.Load(); }
private static void OnMessengerSearch(Session Session, ClientMessage Message) { string SearchQuery = UserInputFilter.FilterString(Message.PopString().Replace('%', ' ')); if (SearchQuery.Length < 1) { return; } List <CharacterInfo> Results = new List <CharacterInfo>(); using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { MySqlClient.SetParameter("query", SearchQuery + "%"); DataTable Table = MySqlClient.ExecuteQueryTable("SELECT id FROM characters WHERE username LIKE @query LIMIT 50"); foreach (DataRow Row in Table.Rows) { Results.Add(CharacterInfoLoader.GetCharacterInfo(MySqlClient, (uint)Row["id"])); } } ReadOnlyCollection <uint> CurrentFriends = Session.MessengerFriendCache.Friends; List <CharacterInfo> Friends = new List <CharacterInfo>(); List <CharacterInfo> NonFriends = new List <CharacterInfo>(); foreach (CharacterInfo Info in Results) { if (CurrentFriends.Contains(Info.Id)) { Friends.Add(Info); continue; } NonFriends.Add(Info); } Session.SendData(MessengerSearchResultsComposer.Compose(Friends, NonFriends)); }
public void SynchronizeDatabase(SqlDatabaseClient MySqlClient, bool FlagsOnly = false) { MySqlClient.SetParameter("id", mId); MySqlClient.SetParameter("flags", mFlags); MySqlClient.SetParameter("flagsd", mDisplayFlags); if (FlagsOnly) { MySqlClient.ExecuteNonQuery("UPDATE items SET flags = @flags, flags_display = @flagsd WHERE id = @id LIMIT 1"); } else { MySqlClient.SetParameter("userid", mUserId); MySqlClient.SetParameter("roomid", mRoomId); MySqlClient.SetParameter("roompos", mRoomPos.ToString()); MySqlClient.SetParameter("roomwallpos", mRoomWallPos); MySqlClient.SetParameter("roomrot", mRoomRot); MySqlClient.SetParameter("soundmgrid", mSoundManagerId); MySqlClient.SetParameter("soundmgrorder", mSoundManagerOrder); MySqlClient.ExecuteNonQuery("UPDATE items SET user_id = @userid, room_id = @roomid, room_pos = @roompos, room_wall_pos = @roomwallpos, room_rot = @roomrot, flags = @flags, flags_display = @flagsd, soundmanager_id = @soundmgrid, soundmanager_order = @soundmgrorder WHERE id = @id LIMIT 1"); } }
public static void Initialize(SqlDatabaseClient MySqlClient) { mPages = new Dictionary <int, CatalogPage>(); mCatalogItems = new Dictionary <int, List <CatalogItem> >(); mCatalogItemsIdIndex = new Dictionary <uint, CatalogItem>(); mCatalogItemsNameIndex = new Dictionary <string, CatalogItem>(); mClubOffers = new Dictionary <uint, CatalogClubOffer>(); if ((bool)ConfigManager.GetValue("cache.catalog.enabled")) { mCacheController = new ResponseCacheController((int)ConfigManager.GetValue("cache.catalog.lifetime")); } RefreshCatalogData(MySqlClient, false); DataRouter.RegisterHandler(OpcodesIn.CATALOG_GET_INDEX, new ProcessRequestCallback(GetCatalogIndex)); DataRouter.RegisterHandler(OpcodesIn.CATALOG_GET_PAGE, new ProcessRequestCallback(GetCatalogPage)); DataRouter.RegisterHandler(OpcodesIn.CATALOG_GET_CLUB_OFFERS, new ProcessRequestCallback(GetClubOffers)); DataRouter.RegisterHandler(OpcodesIn.CATALOG_REDEEM_VOUCHER, new ProcessRequestCallback(RedeemVoucher)); DataRouter.RegisterHandler(OpcodesIn.CATALOG_GET_PET_DATA, new ProcessRequestCallback(GetPetData)); DataRouter.RegisterHandler(OpcodesIn.CATALOG_VERIFY_PET_NAME, new ProcessRequestCallback(CheckPetName)); }
public static void LoadPendingTickets(SqlDatabaseClient MySqlClient) { int i = 0; lock (mSyncRoot) { mTickets.Clear(); DataTable Table = MySqlClient.ExecuteQueryTable("SELECT * FROM moderation_tickets WHERE status = '0' OR status = '1' ORDER BY id ASC"); foreach (DataRow Row in Table.Rows) { mTickets.Add((uint)Row["id"], new ModerationTicket((uint)Row["id"], (uint)Row["category"], (ModerationTicketStatus)int.Parse(Row["status"].ToString()), (uint)Row["reported_user_id"], (uint)Row["reportee_user_id"], (uint)Row["moderator_user_id"], (uint)Row["room_id"], (double)Row["timestamp"], (string)Row["message"])); i++; } } Output.WriteLine("Loaded " + i + " pending moderation ticket(s) from the database.", OutputLevel.DebugInformation); }
private static void RespectPet(Session Session, ClientMessage Message) { if (Session.CharacterInfo.RespectCreditPets <= 0) { return; } RoomInstance Instance = RoomManager.GetInstanceByRoomId(Session.CurrentRoomId); if (Instance == null) { return; } RoomActor Actor = Instance.GetActorByReferenceId(Message.PopWiredUInt32(), RoomActorType.AiBot); if (Actor == null) { return; } Pet PetData = ((Bot)Actor.ReferenceObject).PetData; if (PetData == null) { return; } Session.CharacterInfo.RespectCreditPets = 500;/*--;*/ PetData.Score++; using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { Session.CharacterInfo.SynchronizeRespectData(MySqlClient); PetData.SynchronizeDatabase(MySqlClient); } Instance.BroadcastMessage(RoomPetUpdateComposer.Compose(Actor.ReferenceId, PetData)); }
public void SetWardrobeSlot(SqlDatabaseClient MySqlClient, int SlotId, string Figure, CharacterGender Gender) { lock (mWardrobe) { WardrobeItem Item = new WardrobeItem(Figure, Gender); MySqlClient.SetParameter("userid", mId); MySqlClient.SetParameter("slotid", SlotId); MySqlClient.SetParameter("figure", Figure); MySqlClient.SetParameter("gender", Gender == CharacterGender.Male ? "M" : "F"); if (!mWardrobe.ContainsKey(SlotId)) { mWardrobe.Add(SlotId, Item); MySqlClient.ExecuteNonQuery("INSERT INTO wardrobe (user_id,slot_id,figure,gender) VALUES (@userid,@slotid,@figure,@gender)"); return; } mWardrobe[SlotId] = Item; MySqlClient.ExecuteNonQuery("UPDATE wardrobe SET figure = @figure, gender = @gender WHERE user_id = @userid AND slot_id = @slotid LIMIT 1"); } }
public static void ReloadData(SqlDatabaseClient MySqlClient) { Dictionary <int, List <PetRaceData> > NewRaceData = new Dictionary <int, List <PetRaceData> >(); Dictionary <int, List <string> > NewTrickData = new Dictionary <int, List <string> >(); DataTable RaceTable = MySqlClient.ExecuteQueryTable("SELECT * FROM pet_races"); foreach (DataRow Row in RaceTable.Rows) { int PetType = (int)Row["pet_type"]; if (!NewRaceData.ContainsKey(PetType)) { NewRaceData.Add(PetType, new List <PetRaceData>()); } NewRaceData[PetType].Add(new PetRaceData((int)Row["data1"], (int)Row["data2"], (int)Row["data3"])); } DataTable TrickTable = MySqlClient.ExecuteQueryTable("SELECT * FROM pet_tricks"); foreach (DataRow Row in TrickTable.Rows) { int PetType = (int)Row["type"]; if (!NewTrickData.ContainsKey(PetType)) { NewTrickData.Add(PetType, new List <string>()); } NewTrickData[PetType].Add((string)Row["trick"]); } lock (mSyncRoot) { mRaces = NewRaceData; mTricks = NewTrickData; } }
public static void ReCacheNews() { list_0.Clear(); uint_0 = 0; using (SqlDatabaseClient client = SqlDatabaseManager.GetClient()) { DataTable table = client.ExecuteQueryTable("SELECT * FROM site_noticias ORDER BY fecha DESC LIMIT 40"); if (table != null) { foreach (DataRow row in table.Rows) { list_0.Add(new Notice( uint.Parse(row["id"].ToString()), double.Parse(row["fecha"].ToString()), (string)row["titulo"], (string)row["contenido"], (string)row["imagen"])); uint_0++; } } } Output.WriteLine("Reloaded " + uint_0 + " news in to news cache.", OutputLevel.DebugInformation); }
public static void RemoveRoomFromStaffPicked(uint RoomId) { uint CategoryId = (uint)(int)ConfigManager.GetValue("rooms.staffpicked.category"); lock (mOfficialItems) { using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { MySqlClient.SetParameter("id", RoomId); MySqlClient.SetParameter("parentid", CategoryId); MySqlClient.ExecuteNonQuery("DELETE FROM navigator_frontpage WHERE room_id = @id AND parent_id = @parentid LIMIT 1"); } foreach (NavigatorOfficialItem Item in mOfficialItems) { if (Item.RoomId == RoomId) { mOfficialItems.Remove(Item); return; } } } }
public static CharacterInfo GetCharacterInfo(SqlDatabaseClient MySqlClient, uint CharacterId, uint LinkedClientId, bool IgnoreCache) { if (SessionManager.ContainsCharacterId(CharacterId)) { return(SessionManager.GetSessionByCharacterId(CharacterId).CharacterInfo); } if (!IgnoreCache) { CharacterInfo info = smethod_1(CharacterId); if (info != null) { return(info); } } MySqlClient.SetParameter("id", CharacterId); DataRow row = MySqlClient.ExecuteQueryRow("SELECT * FROM usuarios WHERE id = @id LIMIT 1"); if (row != null) { return(GenerateCharacterInfoFromRow(MySqlClient, LinkedClientId, row)); } return(null); }
/*public static void DoRoomItems(SqlDatabaseClient Phoenix, SqlDatabaseClient Butterfly) * { * DataTable items = Phoenix.ExecuteQueryTable("SELECT * FROM items WHERE room_id > 0 AND wall_pos NOT LIKE ':w=%'"); * * foreach (DataRow item in items.Rows) * { * uint Id = (uint)item["id"]; * uint RoomId = (uint)item["room_id"]; * int CombinedXY = Combine((double)item["x"], (double)item["y"]); * double Z = (double)item["z"]; * int Rotation = (int)item["rot"]; * int BaseItem = (int)item["base_item"]; * string ExtraData = (string)item["extra_data"]; * * Butterfly.ExecuteNonQuery("REPLACE INTO items_rooms(item_id, room_id, x, y, n) VALUES ('" + Id + "', '" + RoomId + "', '" + CombinedXY + "', '" + Z + "', '" + Rotation + "')"); * Butterfly.ExecuteNonQuery("REPLACE INTO items(item_id, base_id) VALUES ('" + Id + "', '" + BaseItem + "')"); * * if (ExtraData != "") * { * string SafeExtraData = AddSlashes(ExtraData); * Butterfly.ExecuteNonQuery("REPLACE INTO items_extradata (item_id, data) VALUES ('" + Id + "', '" + SafeExtraData + "')"); * } * items.Rows.Remove(item); * } * }*/ public static void DoUserItems(SqlDatabaseClient Phoenix, SqlDatabaseClient Butterfly) { DataTable items = Phoenix.ExecuteQueryTable("SELECT * FROM items WHERE room_id = 0 AND wall_pos NOT LIKE ':w=%'"); foreach (DataRow item in items.Rows) { uint Id = (uint)item["id"]; int UserId = (int)item["user_id"]; int BaseItem = (int)item["base_item"]; string ExtraData = (string)item["extra_data"]; Butterfly.ExecuteNonQuery("REPLACE INTO items_users(item_id, user_id) VALUES ('" + Id + "', '" + UserId + "')"); Butterfly.ExecuteNonQuery("REPLACE INTO items(item_id, base_id) VALUES ('" + Id + "', '" + BaseItem + "')"); if (ExtraData != "") { string SafeExtraData = AddSlashes(ExtraData); Butterfly.ExecuteNonQuery("REPLACE INTO items_extradata (item_id, data) VALUES ('" + Id + "', '" + SafeExtraData + "')"); } items.Rows.Remove(item); } }
public static ServerMessage Compose(String Username) { DataTable Data = null; using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { Data = MySqlClient.ExecuteQueryTable("SELECT SQL_NO_CACHE * FROM tags ORDER BY rand() LIMIT 6"); } ServerMessage Message = new ServerMessage(571); Message.AppendInt32(5); Message.AppendStringWithBreak(Username); Message.AppendInt32(Data.Rows.Count); foreach (DataRow Row in Data.Rows) { Message.AppendStringWithBreak(Username + (string)Row["tag"]); } return(Message); }
private static void smethod_5(Session session_0, ClientMessage clientMessage_0) { uint characterId = clientMessage_0.ReadUnsignedInteger(); if ((characterId >= 1) && (characterId != session_0.CharacterId)) { CharacterInfo characterInfo = null; using (SqlDatabaseClient client = SqlDatabaseManager.GetClient()) { characterInfo = CharacterInfoLoader.GetCharacterInfo(client, characterId); if (FriendshipExists(client, session_0.CharacterId, characterInfo.UInt32_0, false)) { return; } CreateFriendship(client, session_0.CharacterId, characterInfo.UInt32_0, false); } Session sessionByCharacterId = SessionManager.GetSessionByCharacterId(characterInfo.UInt32_0); if (sessionByCharacterId != null) { sessionByCharacterId.SendData(LaptopRequestNotificationComposer.Compose(session_0.CharacterInfo), false); } } }
public ServerMessage ComposeUpdateList() { lock (this.dictionary_0) { List <LaptopUpdate> updates = new List <LaptopUpdate>(); using (SqlDatabaseClient client = SqlDatabaseManager.GetClient()) { foreach (uint num in this.list_0) { if (this.dictionary_0.ContainsKey(num)) { CharacterInfo characterInfo = CharacterInfoLoader.GetCharacterInfo(client, num); if (characterInfo != null) { updates.Add(new LaptopUpdate(this.dictionary_0[num], characterInfo)); } } } this.dictionary_0.Clear(); } return(LaptopUpdateListComposer.Compose(updates)); } }
public static Item CreateItem(SqlDatabaseClient MySqlClient, uint DefinitionId, uint UserId, string Flags, string FlagsDisplay, double ExpireTimestamp, bool Untradable = false) { MySqlClient.SetParameter("definitionid", DefinitionId); MySqlClient.SetParameter("userid", UserId); MySqlClient.SetParameter("flags", Flags); MySqlClient.SetParameter("flagsd", FlagsDisplay); MySqlClient.SetParameter("untradable", Untradable ? "1" : "0"); MySqlClient.SetParameter("expiretimestamp", ExpireTimestamp); string RawId = MySqlClient.ExecuteScalar("INSERT INTO items (definition_id,user_id,flags,flags_display,untradable,expire_timestamp) VALUES (@definitionid,@userid,@flags,@flagsd,@untradable,@expiretimestamp); SELECT LAST_INSERT_ID();").ToString(); uint Id = 0; uint.TryParse(RawId, out Id); if (Id == 0) { return(null); } return(new Item(Id, DefinitionId, UserId, 0, new Vector3(), string.Empty, 0, Flags, Flags, Untradable, 0, 0, ExpireTimestamp)); }
public void TryAuthenticate(string Username, string Password, string RemoteAddress, bool Register = false) { using (SqlDatabaseClient client = SqlDatabaseManager.GetClient()) { uint characterId = UserCredentialsAuthenticator.TryAuthenticate(client, Username, Password, RemoteAddress); if (characterId == 0) { SendData(LoginKoComposer.Compose()); } else { Game.Characters.CharacterInfo info = CharacterInfoLoader.GetCharacterInfo(client, characterId, mId, true); /*if (ModerationBanManager.IsUserIdBlacklisted(info.Id)) * { * SendData(ModerationBanComposer.Compose(ModerationBanManager.GetBanDetails(info.UInt32_0)), false); * SessionManager.StopSession(this.Id); * }*/ if ((info != null) && info.HasLinkedSession) { mCharacterInfo = info; mCharacterInfo.TimestampLastOnline = UnixTimestamp.GetCurrent(); CharacterResolverCache.AddToCache(this.mCharacterInfo.Id, this.mCharacterInfo.Username, true); sessionLaptopFriendCache = new SessionLaptopFriendCache(client, this.CharacterId); this.userIgnoreCache = new UserIgnoreCache(client, this.CharacterId); Authenticated = true; SendData(LoginOkComposer.Compose(this.mCharacterInfo)); } else { SessionManager.StopSession(this.mId); } LaptopHandler.MarkUpdateNeeded(this, 0, true); } } }
public void AddOrUpdateData(SqlDatabaseClient MySqlClient, uint QuestId, int Progress, bool ActiveQuest) { if (ActiveQuest) { if (mCurrentQuest > 0) { MySqlClient.SetParameter("userid", mUserId); MySqlClient.SetParameter("questid", mCurrentQuest); MySqlClient.ExecuteNonQuery("UPDATE user_quests SET is_current = '0' WHERE user_id = @userid AND quest_id = @questid LIMIT 1"); } mCurrentQuest = QuestId; } else if (mCurrentQuest == QuestId) { mCurrentQuest = 0; } MySqlClient.SetParameter("userid", mUserId); MySqlClient.SetParameter("questid", QuestId); MySqlClient.SetParameter("progress", Progress); MySqlClient.SetParameter("iscurrent", ActiveQuest ? "1" : "0"); lock (mSyncRoot) { if (mInner.ContainsKey(QuestId)) { mInner[QuestId] = Progress; MySqlClient.ExecuteNonQuery("UPDATE user_quests SET progress = @progress, is_current = @iscurrent WHERE user_id = @userid AND quest_id = @questid LIMIT 1"); } else { mInner.Add(QuestId, Progress); MySqlClient.ExecuteNonQuery("INSERT INTO user_quests (user_id,quest_id,progress,is_current) VALUES (@userid,@questid,@progress,@iscurrent)"); } } }
public void Write_read_and_compare_records() { var target = new SqlDatabaseClient(false) { ConnectionString = _connectionString }; var deleteDataCommand = @" DELETE [dbo].[Product]; DELETE [dbo].[Category]; DELETE [dbo].[Supplier]; "; target.ExecuteCommand(deleteDataCommand); var datasetXml = @" <dataset name=""suppliers"" setIdentityInsert=""true"" table=""Supplier""> <data> <row Id=""1"" Name=""supplier-1"" ContactName=""contact-name-1"" ContactPhone=""100-200-0001"" ContactEmail=""*****@*****.**"" /> <row Id=""2"" Name=""supplier-2"" ContactName=""contact-name-2"" ContactPhone=""100-200-0002"" ContactEmail=""*****@*****.**"" /> <row Id=""3"" Name=""supplier-3"" ContactName=""contact-name-3"" ContactPhone=""100-200-0003"" ContactEmail=""*****@*****.**"" /> </data> </dataset> "; var xml = XElement.Parse(datasetXml); var dataset = DatasetElement.Load(xml); target.WriteTable(dataset); var formatterManager = new FormatterManager(); var selectRecordsQuery = "SELECT * FROM [dbo].[Supplier];"; var actual = target.ReadTable(selectRecordsQuery, formatterManager); DbSafeManagerHelper.CompareDatasets(dataset, actual, new string[] { "Id" }, false, false); }
public void PickAllToUserInventory(Session Session) { List <Item> Copy = new List <Item>(); lock (mItemSyncRoot) { Copy = mItems.Values.ToList(); } foreach (Item Item in Copy) { if (Item.Definition.Behavior == ItemBehavior.StickyNote) { continue; } TakeItem(Item.Id); Session.InventoryCache.Add(Item); } using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { MySqlClient.SetParameter("roomid", RoomId); MySqlClient.SetParameter("userid", Session.CharacterId); MySqlClient.ExecuteNonQuery("UPDATE items SET user_id = @userid, room_pos = '0|0|0', room_wall_pos = '', room_rot = '0', room_id = '0' WHERE room_id = @roomid"); } lock (mItemSyncRoot) { mItems.Clear(); mItemLimitCache.Clear(); } RegenerateRelativeHeightmap(); Session.SendData(InventoryRefreshComposer.Compose()); }
/// <summary> /// Handles connection requests. /// </summary> /// <param name="async">The asynchronous handle result.</param> public void OnConnectionRequest(IAsyncResult result) { try { Socket socket = this.listener.EndAcceptSocket(result); StandBy(); if (this.CheckBlacklist) { using (SqlDatabaseClient client = GameServer.Database.GetClient()) { client.AddParameter("ip", socket.RemoteEndPoint.ToString().Split(':')[0]); DataRow row = client.ReadDataRow("SELECT * FROM blacklist WHERE ip_address = @ip LIMIT 1;"); if (row != null) { Program.Logger.WriteDebug("Connection attempt from " + socket.RemoteEndPoint + " denied."); socket.Close(); socket = null; } } } Node node = this.factory.Create(socket); if (node != null) { this.manager.HandleNewConnection(node); } } catch (ObjectDisposedException) { } catch (Exception ex) { Program.Logger.WriteException(ex); } }
public static void spawnchest1(Session session_0, ClientMessage clientMessage_0) { uint itemId = clientMessage_0.ReadUnsignedInteger(); SpaceInstance instanceBySpaceId = SpaceManager.GetInstanceBySpaceId(session_0.CurrentSpaceId); if (instanceBySpaceId != null) { SpaceActor actorByReferenceId = instanceBySpaceId.GetActorByReferenceId(session_0.CharacterId, SpaceActorType.UserCharacter); if (actorByReferenceId != null) { CharacterInfo referenceObject = (CharacterInfo)actorByReferenceId.ReferenceObject; try { ContestItem item = instanceBySpaceId.Items[itemId]; if ((item != null) && item.IsActive) { using (SqlDatabaseClient client = SqlDatabaseManager.GetClient()) { item.CatchItem(client, (int)session_0.CharacterId); string definitionName = item.DefinitionName; instanceBySpaceId.BroadcastChatMessage(actorByReferenceId, string.Concat(new object[] { actorByReferenceId.Name, " ha atrapado un cofre y obtiene: ", item.GoldCredits, " monedas de oro." }), false, 3); instanceBySpaceId.BroadcastChatMessage(actorByReferenceId, string.Concat(new object[] { actorByReferenceId.Name, " has caught a chest and obtained: ", item.GoldCredits, " Gold Credits!" }), false, 3); referenceObject.UpdateGoldCreditsBalance(client, (int)item.GoldCredits); session_0.SendData(CharacterCoinsComposer.AddGoldCompose(item.GoldCredits), false); instanceBySpaceId.BroadcastMessage(SpaceCatchItemComposer.Compose(itemId), 0, false); instanceBySpaceId.BroadcastMessage(SpaceRemoveItemComposer.Compose(itemId), 0, false); } } } catch { } } } }
public bool TakeItem(uint ItemId) { Item Item = null; lock (mItemSyncRoot) { Item = GetItem(ItemId); if (Item == null) { return(false); } using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { WiredManager.RemoveWired(Item.Id, MySqlClient); } mItems.Remove(ItemId); DecrecementFurniLimitCache(Item.Definition.Behavior); } switch (Item.Definition.Type) { default: BroadcastMessage(RoomFloorItemRemovedComposer.Compose(ItemId)); break; case ItemType.WallItem: BroadcastMessage(RoomWallItemRemovedComposer.Compose(ItemId)); break; } return(true); }