Beispiel #1
0
        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);
            }
        }
Beispiel #3
0
        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);
                    }
                }
            }
        }
Beispiel #5
0
        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));
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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();
        }
Beispiel #9
0
        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));
        }
Beispiel #10
0
        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");
            }
        }
Beispiel #11
0
        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);
        }
Beispiel #13
0
        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));
        }
Beispiel #14
0
        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");
            }
        }
Beispiel #15
0
        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);
 }
Beispiel #17
0
        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;
                    }
                }
            }
        }
Beispiel #18
0
        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);
        }
Beispiel #19
0
        /*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);
            }
        }
Beispiel #20
0
        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);
                }
            }
        }
Beispiel #22
0
 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));
     }
 }
Beispiel #23
0
        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));
        }
Beispiel #24
0
        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);
                }
            }
        }
Beispiel #25
0
        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)");
                }
            }
        }
Beispiel #26
0
        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);
        }
Beispiel #27
0
        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
                    {
                    }
                }
            }
        }
Beispiel #30
0
        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);
        }