Ejemplo n.º 1
0
        /// <summary>
        /// Accepts a buddy request and notifies the sender (if online) and the receiver.
        /// </summary>
        /// <param name="Session">The Woodpecker.Sessions.Session object of the user that accepts the request.</param>
        /// <param name="senderID">The database ID of the user that sent the request.</param>
        public void acceptBuddyRequest(ref Session Session, int senderID)
        {
            Database Database = new Database(false, false);
            Database.addParameterWithValue("userid", Session.User.ID);
            Database.addParameterWithValue("senderid", senderID);
            Database.Open();

            if (Database.findsResult("SELECT userid FROM messenger_buddylist WHERE userid = @senderid AND buddyid = @userid AND accepted = '0' LIMIT 1"))
            {
                Database.runQuery("UPDATE messenger_buddylist SET accepted = '1' WHERE userid = @senderid AND buddyid = @userid LIMIT 1");
                Database.Close();

                serverMessage Message = new serverMessage();
                if (ObjectTree.Game.Users.userIsLoggedIn(senderID)) // Sender is online!
                {
                    Message.Initialize(137); // "BI"
                    Message.Append(getBuddy(Session.User.ID).ToString());
                    ObjectTree.Game.Users.trySendGameMessage(senderID, Message);
                }

                Message.Initialize(137); // "BI"
                Message.Append(getBuddy(senderID).ToString());
                Session.gameConnection.sendMessage(Message);
            }
            else
                Database.Close();
        }
        private void saveItemDefinition(itemDefinition pDefinition)
        {
            Database dbClient = new Database(false, false);
            dbClient.addParameterWithValue("definitionid", pDefinition.ID);
            dbClient.addParameterWithValue("directoryid", pDefinition.directoryID);
            dbClient.addParameterWithValue("sprite", pDefinition.Sprite);
            dbClient.addParameterWithValue("color", pDefinition.Color);
            dbClient.addParameterWithValue("length", pDefinition.Length);
            dbClient.addParameterWithValue("width", pDefinition.Width);
            dbClient.addParameterWithValue("topheight", pDefinition.topHeight);
            dbClient.addParameterWithValue("behaviour", pDefinition.Behaviour.ToString());

            dbClient.Open();
            if (dbClient.Ready)
            {
                dbClient.runQuery("DELETE FROM items_definitions WHERE id = @definitionid LIMIT 1"); // Drop old definition
                dbClient.runQuery( // Insert new/edited definition
                    "INSERT INTO items_definitions " +
                    "VALUES " +
                    "(@definitionid,@directoryid,@sprite,@color,@length,@width,@topheight,@behaviour)");
                dbClient.Close();
            }
        }
        private void deleteItemDefinition(int ID)
        {
            Database dbClient = new Database(false, false);
            dbClient.addParameterWithValue("definitionid", ID);

            dbClient.Open();
            if (dbClient.Ready)
            {
                dbClient.runQuery("DELETE FROM items_definitions WHERE id = @definitionid LIMIT 1"); // Drop definition
                dbClient.runQuery("DELETE FROM store_catalogue_sales WHERE item_definitionid = @definitionid"); // Drop single-item sales with this item definition
                dbClient.runQuery("DELETE FROM store_catalogue_sales_packages WHERE definitionid = @definitionid"); // Drop this item definition from packages
                dbClient.Close();
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Creates a new user flat room by writing the given details in the 'rooms' table of the database. The new room's ID is returned upon success.
        /// </summary>
        /// <param name="Details">The Woodpecker.Game.Rooms.roomInformation object containing the details of the new room.</param>
        public int createFlat(roomInformation Details)
        {
            int roomID = 0;
            Database Database = new Database(false, false);
            Database.addParameterWithValue("roomname", Details.Name);
            Database.addParameterWithValue("ownerid", Details.ownerID);
            Database.addParameterWithValue("modeltype", Details.modelType);
            Database.addParameterWithValue("accesstype", ((int)Details.accessType).ToString());
            Database.addParameterWithValue("showname", Details.showOwner.ToString().ToLower());
            Database.Open();

            if (Database.Ready)
            {
                Database.runQuery("INSERT INTO rooms(ownerid,roomname,modeltype,showname,accesstype) VALUES (@ownerid,@roomname,@modeltype,@showname,@accesstype)");
                roomID = Database.getInteger("SELECT MAX(id) FROM rooms WHERE ownerid = @ownerid LIMIT 1");
                Database.Close();
            }

            return roomID;
        }
Ejemplo n.º 5
0
        public roomInformation[] getUserFlatsSearchResult(string Criteria)
        {
            List<roomInformation> Rooms = new List<roomInformation>();
            Database Database = new Database(false, false);
            Database.addParameterWithValue("criteria", "%" + Criteria); // Only search for rooms with names starting with the criteria
            Database.addParameterWithValue("owner", Criteria); // Also search for rooms who's ownername is equal to the criteria
            Database.Open();

            if (Database.Ready)
            {
                DataTable dTable = Database.getTable("SELECT rooms.*,users.username AS owner FROM rooms LEFT JOIN users ON (rooms.ownerid = users.id) WHERE rooms.ownerid > 0 AND (users.username = @owner OR rooms.roomname LIKE @criteria) ORDER BY visitors_now DESC LIMIT 30");
                foreach (DataRow dRow in dTable.Rows)
                {
                    Rooms.Add(roomInformation.ParseFlat(dRow));
                }
            }
            Database.Close();

            return Rooms.ToArray();
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Deletes a given user flat from the database,
        /// </summary>
        /// <param name="roomID">The database ID of the room to delete.</param>
        public void deleteFlat(int roomID)
        {
            Database Database = new Database(false, false);
            Database.addParameterWithValue("roomid", roomID);
            Database.Open();

            if (Database.Ready)
            {
                Database.runQuery("DELETE FROM rooms WHERE id = @roomid LIMIT 1");
                Database.runQuery("DELETE FROM rooms_rights WHERE roomid = @roomid");
                Database.Close();
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Swaps the trade offer items of two trade partners and updates the database, hand item collection etc. The swap is aborted if the trade is invalid.
        /// </summary>
        /// <param name="partnerItemStrip">The itemStripHandler object of the trade partner session.</param>
        public void swapTradeOffers(itemStripHandler partnerItemStrip)
        {
            if (this.isTrading && partnerItemStrip.isTrading && (this.tradeOfferItemCount > 0 || partnerItemStrip.tradeOfferItemCount > 0)) // Can swap items
            {
                Database dbClient = new Database(true, false);
                if (!dbClient.Ready)
                    return;

                foreach (int myTradeOfferItemID in this.tradeOfferItemIDs)
                {
                    stripItem lItem = this.getHandItem(myTradeOfferItemID);
                    if (lItem == null)
                        return; // Trade invalid

                    this.removeHandItem(myTradeOfferItemID, false); // Remove from this item strip
                    partnerItemStrip.addHandItem(lItem); // Add to partner item strip
                    dbClient.runQuery("UPDATE items SET ownerid = '" + partnerItemStrip.userID + "' WHERE id = '" + lItem.ID + "' LIMIT 1"); // Update database
                }

                foreach (int partnerTradeOfferItemID in partnerItemStrip.tradeOfferItemIDs)
                {
                    stripItem lItem = partnerItemStrip.getHandItem(partnerTradeOfferItemID);
                    if (lItem == null)
                        return; // Trade invalid

                    partnerItemStrip.removeHandItem(partnerTradeOfferItemID, false); // Remove from partner item strip
                    this.addHandItem(lItem); // Add to this item strip
                    dbClient.runQuery("UPDATE items SET ownerid = '" + this.userID + "' WHERE id = '" + lItem.ID + "' LIMIT 1"); // Update database
                }

                dbClient.Close(); // Close database connection
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Lists various statistics about the registered users in the textbox on the GUI.
        /// </summary>
        public void listUserStats()
        {
            Database db = new Database(false, false);
            DataTable dTable = null;
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            int Counter = 0;

            Logging.Log("Listing user statistics...\n");

            db.Open();

            sb.Append("Role user amounts:\n");
            for (int roleID = 0; roleID <= 6; roleID++)
            {
                int Count = db.getInteger("SELECT COUNT(id) FROM users WHERE role = '" + roleID + "'");
                sb.Append("Role '" + ((userRole)roleID).ToString() + "' has " + Count + " users.\n");
            }

            sb.Append("\n> Top 20 of richest normal users:\n");
            dTable = db.getTable("SELECT id,username,credits FROM users WHERE role <= '3' ORDER BY credits DESC LIMIT 20");
            foreach (DataRow dRow in dTable.Rows)
            {
                Counter++;
                int userID = (int)dRow["id"];
                string Username = (string)dRow["username"];
                int Credits = (int)dRow["credits"];
                sb.Append(Counter + ") " + Username + " [id: " + userID + "] has " + Credits + " credits.\n");
            }
            Logging.Log(sb.ToString());
            Logging.Log("User statistics listed.\n");

            db.Close();
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Gives a badge to user, after checking if the user doesn't already have this badge. A boolean is returned that indicates if the badge is given or not.
        /// </summary>
        /// <param name="userID">The database ID of the user to give the badge to.</param>
        /// <param name="Badge">The badge of the user to </param>
        public bool giveBadgeToUser(int userID, string Badge)
        {
            Database Database = new Database(false, false);
            Database.addParameterWithValue("userid", userID);
            Database.addParameterWithValue("badge", Badge);
            Database.Open();
            if (Database.Ready)
            {
                if (!Database.findsResult("SELECT userid FROM users_badges WHERE userid = @userid AND badge = @badge LIMIT 1"))
                {
                    Database.runQuery("INSERT INTO users_badges(userid,badge) VALUES (@userid,@badge)");
                    return true;
                }
                Database.Close();
            }

            return false;
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Tries to redeem a credit/item voucher for a user session.
        /// </summary>
        /// <param name="Session">The Woodpecker.Sessions.Session object to redeem the voucher with.</param>
        /// <param name="Code">The vouchercode the user entered.</param>
        public void redeemVoucher(ref Session Session, string Code)
        {
            serverMessage Response = new serverMessage();
            Database Database = new Database(false, false);
            Database.addParameterWithValue("code", Code);

            Database.Open();
            if (Database.Ready)
            {
                DataRow dRow = Database.getRow("SELECT type,value FROM users_vouchers WHERE code = @code AND ISNULL(redeemer_userid)");
                if (dRow != null) // Voucher found
                {
                    // Mark voucher as redeemed
                    Database.addParameterWithValue("userid", Session.User.ID);
                    Database.runQuery("UPDATE users_vouchers SET redeemer_userid = @userid WHERE code = @code");
                    Database.Close();

                    string Type = (string)dRow["type"];
                    if (Type == "credits")
                    {
                        int Credits = int.Parse(dRow["value"].ToString());
                        Session.User.Credits += Credits;
                        Session.User.updateValueables();
                        this.logTransaction(Session.User.ID, "win_voucher", Credits);

                        Session.refreshCredits();
                    }
                    else if (Type == "item")
                    {
                        string[] Items = ((string)dRow["value"]).Split(';');

                    }

                    // Success!
                    Response.Initialize(212); // "CT"
                    Session.gameConnection.sendMessage(Response);
                    return;
                }
                else
                {
                    // Error 1! (not found)
                    Response.Initialize(213); // "CU"
                    Response.Append(1);
                }
                Session.gameConnection.sendMessage(Response);
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Initializes the sales sold in the catalogue.
        /// </summary>
        public void loadSales()
        {
            if (this.Sales != null)
                this.Sales.Clear();
            this.Sales = new Dictionary<string, storeCatalogueSale>();

            Database dbClient = new Database(true, false);
            if (dbClient.Ready)
            {
                foreach (DataRow dSale in dbClient.getTable("SELECT * FROM store_catalogue_sales").Rows)
                {
                    storeCatalogueSale pSale = new storeCatalogueSale((string)dSale["salecode"], (int)dSale["price"]); // Create blank sale object
                    bool isPackage = (
                        (dSale["ispackage"].ToString() == "true")
                        && dSale["package_name"] != DBNull.Value
                        && dSale["package_description"] != DBNull.Value);

                    if (isPackage)
                    {
                        pSale.setPackage((string)dSale["package_name"], (string)dSale["package_description"]);
                        foreach (DataRow dPackageItem in dbClient.getTable("SELECT definitionid,amount,specialspriteid FROM store_catalogue_sales_packages WHERE salecode = '" + pSale.saleCode + "'").Rows)
                        {
                            itemDefinition pItemDefinition = ObjectTree.Game.Items.getItemDefinition((int)dPackageItem["definitionid"]);
                            if (pItemDefinition != null)
                                pSale.addPackageItem(pItemDefinition, (int)dPackageItem["amount"], (int)dPackageItem["specialspriteid"]);
                        }
                    }
                    else
                    {
                        itemDefinition pItemDefinition = ObjectTree.Game.Items.getItemDefinition((int)dSale["item_definitionid"]);
                        if (pItemDefinition != null)
                            pSale.setItem(pItemDefinition, (int)dSale["item_specialspriteid"]);
                    }
                    this.Sales.Add(pSale.saleCode, pSale);
                }
                dbClient.Close();
            }
        }
Ejemplo n.º 12
0
        public void removeBuddy(int userID, int buddyID)
        {
            Database Database = new Database(false, false);
            Database.addParameterWithValue("userid", userID);
            Database.addParameterWithValue("buddyid", buddyID);
            Database.Open();

            if (Database.Ready)
            {
                Database.runQuery("DELETE FROM messenger_buddylist WHERE (userid = @userid AND buddyid = @buddyid) OR (userid = @buddyid AND buddyid = @userid) AND accepted = '1' LIMIT 1");
                Database.runQuery("DELETE FROM messenger_messages WHERE (receiverid = @userid AND senderid = @buddyid) OR (receiverid = @buddyid AND senderid = @userid)"); // Delete messages between users

                Database.Close();
            }

            if (ObjectTree.Game.Users.userIsLoggedIn(buddyID)) // Victim is online
            {
                serverMessage Message = new serverMessage(138); // "BJ"
                Message.appendWired(1);
                Message.appendWired(userID);
                ObjectTree.Game.Users.trySendGameMessage(buddyID,Message);
            }
        }
Ejemplo n.º 13
0
        private void _launchBird(int[] receiverIDs, messengerMessage pMessage)
        {
            Database Database = new Database(false, false);
            Database.addParameterWithValue("senderid", pMessage.senderID);
            Database.addParameterWithValue("sent", pMessage.Sent);
            Database.addParameterWithValue("body", pMessage.Body);
            Database.Open();
            if (Database.Ready)
            {
                //DateTime now = DateTime.Now;
                //Woodpecker.Core.Logging.Log("Start: " + now.ToString("hh:mm:ss:fff"));
                foreach (int receiverID in receiverIDs)
                {
                    if (ObjectTree.Game.Users.userIsLoggedIn(receiverID)) // Receiver is logged in, retrieve the next message ID, write the message in the database & send it to the receiver
                    {
                        int messageID = Database.getInteger("SELECT MAX(messageid) + 1 FROM messenger_messages WHERE receiverid = '" + receiverID + "' LIMIT 1");
                        Database.runQuery("INSERT INTO messenger_messages(receiverid,messageid,senderid,sent,body) VALUES ('" + receiverID + "','" + messageID + "',@senderid,@sent,@body)");

                        serverMessage Message = new serverMessage(134); // "BF"
                        Message.appendWired(1);
                        pMessage.ID = messageID;
                        Message.Append(pMessage.ToString());
                        ObjectTree.Game.Users.trySendGameMessage(receiverID, Message);
                    }
                    else // Receiver is not online, no need for getting our hands on the next message ID etc
                    {
                        Database.runQuery(
                        "INSERT INTO messenger_messages(receiverid,messageid,senderid,sent,body) " +
                        "SELECT " +
                            "'" + receiverID + "'," +
                            "(MAX(messageid) + 1)," +
                            "@senderid," +
                            "@sent," +
                            "@body " +
                       "FROM messenger_messages WHERE receiverid = '" + receiverID + "' LIMIT 1");
                    }
                }
                //now = DateTime.Now;
                //Woodpecker.Core.Logging.Log("Stop: " + now.ToString("hh:mm:ss:fff"));

                Database.Close();
            }
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Processes the current chatlog stack and writes it into the 'moderation_chatlog' table of the database.
        /// </summary>
        private void processChatLogStack()
        {
            while (true)
            {
                Thread.Sleep(15000); // Every 15 seconds
                if (this.chatLogStack.Count > 0) // Log chatlogs at min 10 logs @ stack
                {
                    MySqlParameter dtParameter = new MySqlParameter("moment", MySqlDbType.DateTime);
                    MySqlParameter txtParameter = new MySqlParameter("text", MySqlDbType.Text);
                    Database dbClient = new Database(false, false);
                    dbClient.addRawParameter(dtParameter);
                    dbClient.addRawParameter(txtParameter);

                    dbClient.Open();
                    if (dbClient.Ready)
                    {
                        lock (this.chatLogStack)
                        {
                            foreach (chatLog Log in this.chatLogStack)
                            {
                                dtParameter.Value = Log.Timestamp;
                                txtParameter.Value = Log.Text;
                                dbClient.runQuery(Log.ToString());
                            }
                        }
                        dbClient.Close();
                    }
                    chatLogStack.Clear();
                }
            }
        }
Ejemplo n.º 15
0
        public bool requestBan(int userID, int targetUserID, int banHours, bool banIP, bool banMachine, string Message, string extraInfo)
        {
            userInformation Caster = ObjectTree.Game.Users.getUserInfo(userID, false);
            userInformation Target = ObjectTree.Game.Users.getUserInfo(targetUserID, false);
            if (Caster != null && Target != null)
            {
                if (Caster.Role > Target.Role) // Able to ban this user
                {
                    if (banHours >= 2
                        && banHours <= 100000
                        && !(banHours >= 168 && !Caster.hasFuseRight("fuse_superban"))) // Ban condition valid
                    {
                        userAccessInformation lastAccess = null;
                        Session targetSession = ObjectTree.Game.Users.getUserSession(targetUserID);

                        #region Determine last access
                        if (targetSession == null)
                            lastAccess = ObjectTree.Game.Users.getLastAccess(targetUserID);
                        else
                            lastAccess = targetSession.Access;

                        if ((banIP || banMachine) && lastAccess == null)
                            return false; // Can't ban IP and/or machine with no access log
                        #endregion

                        if (this.requestUnban(userID, targetUserID, lastAccess.IP, lastAccess.machineID)) // Removed old bans succeeded
                        {
                            #region Write ban entry
                            Database dbClient = new Database(false, false);
                            dbClient.addParameterWithValue("userid", targetUserID);
                            dbClient.addParameterWithValue("appliedby", userID);
                            dbClient.addParameterWithValue("expires", DateTime.Now.AddHours(banHours));
                            dbClient.addParameterWithValue("reason", Message);

                            // Handle access parameters
                            if (banIP)
                                dbClient.addParameterWithValue("ip", lastAccess.IP);
                            else
                                dbClient.addParameterWithValue("ip", DBNull.Value);
                            if (banMachine)
                                dbClient.addParameterWithValue("machineid", lastAccess.machineID);
                            else
                                dbClient.addParameterWithValue("machineid", DBNull.Value);

                            dbClient.Open();
                            if (!dbClient.Ready)
                                return false; // Failed to write entry

                            dbClient.runQuery("INSERT INTO moderation_bans VALUES (@userid,@ip,@machineid,NOW(),@appliedby,@expires,@reason)");
                            dbClient.Close();
                            dbClient = null;
                            #endregion

                            #region Notify & disconnect affected users
                            List<Session> toNotify = new List<Session>();
                            if (targetSession != null)
                                toNotify.Add(targetSession);

                            if (banIP)
                                ObjectTree.Sessions.addSessionsByIpToList(ref toNotify, lastAccess.IP);

                            serverMessage banCast = genericMessageFactory.createBanCast(Message);
                            foreach (Session lSession in toNotify)
                            {
                                lSession.isValid = false;
                                lSession.leaveRoom(true);
                                lSession.gameConnection.sendMessage(banCast);
                            }
                            #endregion

                            this.logModerationAction(userID, "ban", targetUserID, Message, extraInfo);

                            return true;
                        }
                    }
                }
            }

            return false;
        }