public override void Handle(User usr) { if (usr.room != null) { return; } SubCodes opcode = (SubCodes)int.Parse(getBlock(0)); switch (opcode) { case SubCodes.OnItemShopOpen: { usr.RefreshCash(); break; } case SubCodes.OnItemBuy: { string itemcode = getBlock(6).ToUpper(); int period = int.Parse(getBlock(3)); ushort days = (ushort)Inventory.GetDaysFromPeriod(period); Item item = ItemManager.GetItem(itemcode); if (item != null) { if (days > 0) { if (item.Buyable || Configs.Server.ItemShop.hiddenItems.Contains(itemcode)) { int inventorySlot = Inventory.GetFreeItemSlotCount(usr); if (inventorySlot > 0) { uint price = (uint)item.GetCashPrice(period); usr.RefreshCash(); if (price > 0) { bool px_item = (itemcode.ToLower().StartsWith("cz") || itemcode.ToLower().StartsWith("cb")); //>--- PremiumUsersOnly int result = (int)(usr.cash - price); if (item.Premium && usr.premium < 1) { usr.send(new SP_DinarItemBuy(SP_DinarItemBuy.ErrorCodes.PremiumUsersOnly)); } /*else if (usr.level < item.Level && usr.rank < 2) // >--- Comentado en origen * { * usr.send(new SP_DinarItemBuy(SP_DinarItemBuy.ErrorCodes.LevelLow)); * }*/ else if (item.accruable && Inventory.GetEAItem(usr, item.Code) >= item.maxAccrueCount) { usr.send(new SP_DinarItemBuy(SP_DinarItemBuy.ErrorCodes.CannotBeBougth)); } else if (result < 0) { usr.send(new SP_DinarItemBuy(SP_DinarItemBuy.ErrorCodes.NotEnoughDinar)); } else { if (px_item) { days = 3600; } ushort count = 1; if (item.accruable) { ushort d = (ushort)item.GetEACount(period); if (d >= 1) { count = d; } } switch (itemcode) { case "CB53": //>--- CHG_CLANEXTEND { if (usr.clan == null || usr.clan.maxUsers >= 100) { usr.send(new SP_DinarItemBuy(SP_DinarItemBuy.ErrorCodes.CannotBeBougth)); return; } usr.clan.maxUsers += 20; usr.send(new SP_Chat(Configs.Server.SystemName, SP_Chat.ChatType.Clan, Configs.Server.SystemName + " >> Clan expanded, please re-open clan tab to see changes.", 999, Configs.Server.SystemName)); usr.send(new SP_DinarItemBuy(usr, itemcode)); usr.send(new SP_Clan.MyClanInformation(usr)); DB.RunQuery("UPDATE clans SET maxusers='" + usr.clan.maxUsers + "' WHERE id='" + usr.clan.id + "'"); return; } default: { if ((itemcode.StartsWith("CZ") || itemcode.StartsWith("CC") || itemcode.StartsWith("CR") || itemcode.StartsWith("CB")) && !itemcode.StartsWith("CC0") && itemcode != "CC38") { days = 3600; } Inventory.AddOutBoxItem(usr, itemcode, (ushort)days, count); break; } } //DB.RunQuery("INSERT INTO purchases_logs (userid, log, timestamp) VALUES ('" + usr.userId + "', '" + usr.nickname + " bought " + item.Name + " for " + days + " days [" + price + " Cash - Game]', '" + Generic.timestamp + "')"); usr.cash = result; DB.RunQuery("UPDATE users SET cash=" + result + " WHERE id='" + usr.userId + "'"); usr.send(new SP_CashItemBuy(usr)); usr.send(new SP_OutboxSend(usr)); } } else { usr.send(new SP_DinarItemBuy(SP_DinarItemBuy.ErrorCodes.CannotBeBougth)); } } else { usr.send(new SP_DinarItemBuy(SP_DinarItemBuy.ErrorCodes.InventoryFull)); } } else { usr.send(new SP_DinarItemBuy(SP_DinarItemBuy.ErrorCodes.NoLongerValid)); } } else { usr.send(new SP_DinarItemBuy(SP_DinarItemBuy.ErrorCodes.NoLongerValid)); } } break; } case SubCodes.Storage: { usr.send(new SP_CustomMessageBox("The storage system has been disabled because it's useless.")); return; /* atm it has some few bugs but working and itself it's useless*/ /* * int action = int.Parse(getBlock(1)); * * switch(action) * { * case 2: // Move to storage box * { * string itemCode = getBlock(3); * int invIndex = int.Parse(getBlock(2)); * string[] data = usr.inventory[invIndex].Split('-'); * if(data[0] == itemCode) * { * int emptyIndex = Array.IndexOf(usr.storageInventory, "^"); * if(emptyIndex >= 0 && emptyIndex < usr.storageInventoryMax) * { * usr.storageInventory[emptyIndex] = usr.inventory[invIndex]; * usr.inventory[invIndex] = "^"; * * string invCode = Inventory.calculateInventory(invIndex); * * for (int i = 0; i < 5; i++) * { * for (int j = 0; j < 8; j++) * { * if (usr.equipment[i, j] == "I" + invCode || usr.equipment[i, j] == itemCode) * { * usr.equipment[i, j] = "^"; * } * else if (usr.equipment[i, j].Contains("-")) * { * string[] multipleSlot = usr.equipment[i, j].Split('-'); * if (multipleSlot[0] == "I" + invCode) * { * usr.equipment[i, j] = multipleSlot[1]; * } * else if (multipleSlot[1] == "I" + invCode) * { * usr.equipment[i, j] = multipleSlot[0]; * } * } * } * } * * usr.SaveEquipment(); * * usr.send(new SP_StorageInventoryUpdate(usr, action, invIndex, itemCode)); * * usr.send(new SP_UpdateInventory(usr, null)); * * DB.RunQuery("UPDATE equipment SET inventory = '" + Inventory.Itemlist(usr) + "', storage = '" + Inventory.Storage(usr) + "' WHERE ownerid = '" + usr.userId + "'"); * } * else * { * usr.send(new SP_StorageInventoryUpdate(SP_StorageInventoryUpdate.ErrorCode.NoStorageFreeSpace)); * } * } * break; * } * case 3: // Move to inventory * { * string itemCode = getBlock(3); * int invIndex = int.Parse(getBlock(2)); * int wrTime = Generic.WarRockDateTime; * string[] data = usr.storageInventory[invIndex].Split('-'); * if (data[0] == itemCode) * { * int time = int.Parse(data[3]); * if (time > wrTime) * { * if (usr.HasItem(itemCode)) * { * usr.storageInventory[invIndex] = "^"; * * int inventoryIndex = usr.GetItemIndex(itemCode); * * string[] inventoryString = usr.inventory[inventoryIndex].Split('-'); * * DateTime dtStored = DateTime.ParseExact(inventoryString[3], "yyMMddHH", null); * * TimeSpan ts = dtStored - DateTime.Now; * * Inventory.AddItem(usr, itemCode, (int)ts.TotalDays); * * usr.send(new SP_StorageInventoryUpdate(usr, action, invIndex, itemCode)); * } * else * { * int emptyIndex = Array.IndexOf(usr.inventory, "^"); * if (emptyIndex >= 0) * { * usr.inventory[emptyIndex] = usr.storageInventory[invIndex]; * usr.storageInventory[invIndex] = "^"; * * usr.send(new SP_StorageInventoryUpdate(usr, action, invIndex, itemCode)); * } * else * { * usr.send(new SP_StorageInventoryUpdate(SP_StorageInventoryUpdate.ErrorCode.NoInventoryFreeSpace)); * } * } * } * else * { * usr.storageInventory[invIndex] = "^"; * * usr.send(new SP_StorageInventoryList(usr)); * } * DB.RunQuery("UPDATE equipment SET inventory = '" + Inventory.Itemlist(usr) + "', storage = '" + Inventory.Storage(usr) + "' WHERE ownerid = '" + usr.userId + "'"); * } * break; * } * case 4: // Remove all expired items * { * int wrTime = Generic.WarRockDateTime; * for (int i = 0; i < usr.storageInventory.Length; i++) * { * try * { * string data = usr.storageInventory[i]; * if (data != "^") * { * string[] split = data.Split('-'); * int time = int.Parse(split[3]); * if (time < wrTime) * { * usr.storageInventory[i] = "^"; * } * } * } * catch { } * } * * * usr.send(new SP_StorageInventoryList(usr)); * DB.RunQuery("UPDATE equipment SET inventory = '" + Inventory.Itemlist(usr) + "', storage = '" + Inventory.Storage(usr) + "' WHERE ownerid = '" + usr.userId + "'"); * break; * } * } * * break; */ } case SubCodes.OnItemUse: { string itemcode = getBlock(4); if (!usr.HasItem(itemcode)) { return; } //Log.WriteLine("CashItemBuy-299 INCOMING PACKET :: " + string.Join(" ", getAllBlocks)); if (PackageManager.AddItem(usr, itemcode)) { usr.send(new SP_UseItem(usr, itemcode)); } else { switch (itemcode) { case "CB01": // Change Nickname { string nickname = getBlock(5); if (!Generic.IsAlphaNumeric(nickname)) { return; } DataTable dt = DB.RunReader("SELECT * FROM users WHERE nickname='" + nickname + "'"); if (dt.Rows.Count == 0) { DB.RunQuery("INSERT INTO changenick_logs (userId, oldnick, newnick, date, timestamp) VALUES ('" + usr.userId + "', '" + usr.nickname + "', '" + nickname + "', '" + Generic.currentDate + "', '" + Generic.timestamp + "')"); Log.WriteLine("---" + usr.nickname + " is now known as " + nickname + "---"); usr.nickname = nickname; DB.RunQuery("UPDATE users SET nickname='" + usr.nickname + "' WHERE id='" + usr.userId + "'"); usr.deleteItem(itemcode); usr.send(new SP_CashItemUse(usr, itemcode)); int clanrank = usr.clan.clanRank(usr); switch (clanrank) { default: { ClanUsers cu = usr.clan.GetUser(usr.userId); if (cu != null) { cu.EXP = usr.exp.ToString(); cu.nickname = usr.nickname; } break; } case 9: { ClanPendingUsers cu = usr.clan.getPendingUser(usr.userId); if (cu != null) { cu.EXP = usr.exp.ToString(); cu.nickname = usr.nickname; } break; } } } break; } case "CB03": // Kill / Death Reset { usr.kills = usr.deaths = 0; DB.RunQuery("UPDATE users SET kills = '" + usr.kills + "', deaths = '" + usr.deaths + "' WHERE id='" + usr.userId + "'"); usr.deleteItem(itemcode); usr.send(new SP_CashItemUse(usr, itemcode)); break; } case "CZ73": // Ham Radio { string message = getBlock(5); Inventory.DecreaseEAItem(usr, itemcode); string[] m = message.Split(' '); for (int i = 0; i < m.Length; i++) { m[i] = WordFilterManager.Replace(m[i]); } message = string.Join(" ", m); usr.send(new SP_CashItemUse(usr, "CB03")); usr.AddAdminCPLog(usr.nickname + " sent message " + message.Replace((char)0x1D, (char)0x20) + " [HAM_RADIO]"); UserManager.sendToServer(new SP_Chat(usr.nickname, SP_Chat.ChatType.Notice1, message, 0, usr.nickname)); break; } case "CC56": // Random Box 1 case "CC57": // Random Box 2 case "CC36": // Random Box 3 case "CC37": // Random Box 4 { Item boxItem = ItemManager.GetItem(itemcode); if (boxItem != null) { List <PackageItem> randomItems = boxItem.packageItems; if (randomItems.Count > 0) { if (Inventory.GetFreeItemSlotCount(usr) > 0) { int index = Generic.random(0, randomItems.Count - 1); if (index == 0 && Generic.random(100, 1000) > 200) { index = Generic.random(1, randomItems.Count - 1); } PackageItem item = randomItems[index]; Managers.Item i = Managers.ItemManager.GetItem(item.item); if (i != null) { int days = item.days; Inventory.AddItem(usr, item.item, days); Inventory.DecreaseEAItem(usr, itemcode); usr.send(new SP_WinItem(usr, item.item, days)); } else { Log.WriteError(item + " is not a valid item @ random box!"); } } } } break; } case "CZ99": // Random Box { if (Inventory.GetFreeItemSlotCount(usr) > 0) { string[] randomItems = Configs.Server.RandomBoxEvent.items; int index = Generic.random(0, randomItems.Length - 1); string item = randomItems[index]; Managers.Item i = Managers.ItemManager.GetItem(item); if (i != null) { int days = new Random().Next(Configs.Server.RandomBoxEvent.MinDays, Configs.Server.RandomBoxEvent.MaxDays); if (item.ToUpper().StartsWith("B")) { Inventory.AddCostume(usr, item, days); } else { Inventory.AddItem(usr, item, days); } Inventory.DecreaseEAItem(usr, itemcode); usr.send(new SP_WinItem(usr, item, days)); } else { Log.WriteError(item + " is not a valid item @ random box event!"); } } break; } case "CR16": // Attendance Box { if (Inventory.GetFreeItemSlotCount(usr) > 0) { string[] randomItems = Configs.Server.ItemShop.attendanceBox; int index = Generic.random(0, randomItems.Length - 1); string item = randomItems[index]; Managers.Item i = Managers.ItemManager.GetItem(item); if (i != null) { int days = new Random().Next(3, 14); if (item.ToUpper().StartsWith("B")) { Inventory.AddCostume(usr, item, days); } else { Inventory.AddItem(usr, item, days); } Inventory.DecreaseEAItem(usr, itemcode); usr.send(new SP_WinItem(usr, item, days)); } else { Log.WriteError(item + " is not a valid item @ attendance box box event!"); } } break; } case "CR05": // WarRock Gift Box { if (Inventory.GetFreeItemSlotCount(usr) > 0) { string[] randomItems = Configs.Server.ChristmasBoxEvent.items; int index = Generic.random(0, randomItems.Length - 1); string item = randomItems[index]; Managers.Item i = Managers.ItemManager.GetItem(item); if (i != null) { int days = new Random().Next(Configs.Server.ChristmasBoxEvent.MinDays, Configs.Server.ChristmasBoxEvent.MaxDays); if (item.ToUpper().StartsWith("B")) { Inventory.AddCostume(usr, item, days); } else { Inventory.AddItem(usr, item, days); } Inventory.DecreaseEAItem(usr, itemcode); usr.send(new SP_WinItem(usr, item, days)); } else { Log.WriteError(item + " is not a valid item @ random box event!"); } } break; } } break; } } break; } }