A lot of fixes (#242)

* Fixed stuff related to shop trading

> Refactored stuff to facilitate resolving an issue regarding sellnig item to a full shop
> Removed double value message in shop

* Fixed some stuff related to agility

-Removed a useless obstacle in wilderness course that alowed insane xp gains;
-Added some 'flexibility' to some obstacles at agility pyramid;
-Removed useless vars;
-Added proper xp to obstacles;
-Added bonus xp for completing agility pyramid
-Most likely more;

***Animations still missing: Crossing gaps and jumping gaps***

* resolve conflicts

* delete old files

* A lot of fixes

Christmas Cracker (anim other player & text & admin right & rare protection)
Added check in stack value when withdrawing from bank to prevent losing items when max int value is reached
fixed double message on pickpocketing when in combat
Renamed methods
Removed unused methods
Removed admin restriction when trying to use the cannon
Cleaned KBD drops
Boots of lightness weight reduction is fixed
More...
This commit is contained in:
Gptaqbc
2019-12-07 21:16:18 -05:00
committed by Daniel Ginovker
parent 8e524cdcda
commit 55a35a26b2
13 changed files with 152 additions and 141 deletions
@@ -225,7 +225,7 @@ public class Dueling {
player.getPacketSender().sendMessage("You can't do that in a duel!");
return false;
}
if (!RareProtection.doOtherDupe(player, itemID)) {
if (!RareProtection.removeItemOtherActions(player, itemID)) {
return false;
}
if (amount <= 0) {
@@ -195,32 +195,6 @@ public class ItemAssistant {
return c.playerEquipment[slot] == itemID;
}
public void removeItem(int slot) {
if (c.getOutStream() != null && c != null) {
if (c.playerEquipment[slot] > -1) {
if (addItem(c.playerEquipment[slot], c.playerEquipmentN[slot])) {
c.playerEquipment[slot] = -1;
c.playerEquipmentN[slot] = 0;
sendWeapon(c.playerEquipment[c.playerWeapon],
getItemName(c.playerEquipment[c.playerWeapon]));
resetBonus();
getBonus();
writeBonus();
c.getCombatAssistant().getPlayerAnimIndex();
c.getOutStream().createFrame(34);
c.getOutStream().writeWord(6);
c.getOutStream().writeWord(1688);
c.getOutStream().writeByte(slot);
c.getOutStream().writeWord(0);
c.getOutStream().writeByte(0);
c.flushOutStream();
c.updateRequired = true;
c.setAppearanceUpdateRequired(true);
}
}
}
}
public void addItemToBank(int itemId, int amount) {
itemId++;
for (int i = 0; i < GameConstants.BANK_SIZE; i++) {
@@ -2095,7 +2069,7 @@ public class ItemAssistant {
return freeS;
}
public int getBankQuantitiy(int itemID)
public int getBankQuantity(int itemID)
{
for (int i = 0; i < c.bankItems.length; i++) {
if (c.bankItems[i] == itemID)
@@ -2107,19 +2081,67 @@ public class ItemAssistant {
}
public void fromBank(int itemID, int fromSlot, int amount) {
boolean cantWithdrawCuzMaxStack = false;
if (amount > 0) {
if (c.bankItems[fromSlot] > 0) {
if (!c.takeAsNote) {
if (Item.itemStackable[c.bankItems[fromSlot] - 1]) {
if (c.getItemAssistant().playerHasItem(itemID))
{
for (int i = 0; i <= 27;i++)
{
if (itemID == c.playerItems[i] || (itemID == 995 && c.playerItems[i] - 1 == 995))
{
if ((c.playerItemsN[i] + amount + 1) < -1)
{
cantWithdrawCuzMaxStack = true;
break;
}
}
}
}
if (!cantWithdrawCuzMaxStack)
{
if (!c.takeAsNote) {
if (Item.itemStackable[c.bankItems[fromSlot] - 1]) {
if (c.bankItemsN[fromSlot] > amount) {
if (addItem(c.bankItems[fromSlot] - 1, amount)) {
c.bankItemsN[fromSlot] -= amount;
resetBank();
resetItems(5064);
}
} else {
if (addItem(c.bankItems[fromSlot] - 1,
c.bankItemsN[fromSlot])) {
c.bankItems[fromSlot] = 0;
c.bankItemsN[fromSlot] = 0;
resetBank();
resetItems(5064);
}
}
} else {
while (amount > 0) {
if (c.bankItemsN[fromSlot] > 0) {
if (addItem(c.bankItems[fromSlot] - 1, 1)) {
c.bankItemsN[fromSlot] += -1;
amount--;
} else {
amount = 0;
}
} else {
amount = 0;
}
}
resetBank();
resetItems(5064);
}
} else if (c.takeAsNote && Item.itemIsNote[c.bankItems[fromSlot]]) {
if (c.bankItemsN[fromSlot] > amount) {
if (addItem(c.bankItems[fromSlot] - 1, amount)) {
if (addItem(c.bankItems[fromSlot], amount)) {
c.bankItemsN[fromSlot] -= amount;
resetBank();
resetItems(5064);
}
} else {
if (addItem(c.bankItems[fromSlot] - 1,
c.bankItemsN[fromSlot])) {
if (addItem(c.bankItems[fromSlot], c.bankItemsN[fromSlot])) {
c.bankItems[fromSlot] = 0;
c.bankItemsN[fromSlot] = 0;
resetBank();
@@ -2127,71 +2149,45 @@ public class ItemAssistant {
}
}
} else {
while (amount > 0) {
if (c.bankItemsN[fromSlot] > 0) {
if (addItem(c.bankItems[fromSlot] - 1, 1)) {
c.bankItemsN[fromSlot] += -1;
amount--;
} else {
amount = 0;
c.getPacketSender().sendMessage("This item can't be withdrawn as a note.");
if (Item.itemStackable[c.bankItems[fromSlot] - 1]) {
if (c.bankItemsN[fromSlot] > amount) {
if (addItem(c.bankItems[fromSlot] - 1, amount)) {
c.bankItemsN[fromSlot] -= amount;
resetBank();
resetItems(5064);
}
} else {
amount = 0;
}
}
resetBank();
resetItems(5064);
}
} else if (c.takeAsNote && Item.itemIsNote[c.bankItems[fromSlot]]) {
if (c.bankItemsN[fromSlot] > amount) {
if (addItem(c.bankItems[fromSlot], amount)) {
c.bankItemsN[fromSlot] -= amount;
resetBank();
resetItems(5064);
}
} else {
if (addItem(c.bankItems[fromSlot], c.bankItemsN[fromSlot])) {
c.bankItems[fromSlot] = 0;
c.bankItemsN[fromSlot] = 0;
resetBank();
resetItems(5064);
}
}
} else {
c.getPacketSender().sendMessage("This item can't be withdrawn as a note.");
if (Item.itemStackable[c.bankItems[fromSlot] - 1]) {
if (c.bankItemsN[fromSlot] > amount) {
if (addItem(c.bankItems[fromSlot] - 1, amount)) {
c.bankItemsN[fromSlot] -= amount;
resetBank();
resetItems(5064);
if (addItem(c.bankItems[fromSlot] - 1,
c.bankItemsN[fromSlot])) {
c.bankItems[fromSlot] = 0;
c.bankItemsN[fromSlot] = 0;
resetBank();
resetItems(5064);
}
}
} else {
if (addItem(c.bankItems[fromSlot] - 1,
c.bankItemsN[fromSlot])) {
c.bankItems[fromSlot] = 0;
c.bankItemsN[fromSlot] = 0;
resetBank();
resetItems(5064);
}
}
} else {
while (amount > 0) {
if (c.bankItemsN[fromSlot] > 0) {
if (addItem(c.bankItems[fromSlot] - 1, 1)) {
c.bankItemsN[fromSlot] += -1;
amount--;
while (amount > 0) {
if (c.bankItemsN[fromSlot] > 0) {
if (addItem(c.bankItems[fromSlot] - 1, 1)) {
c.bankItemsN[fromSlot] += -1;
amount--;
} else {
amount = 0;
}
} else {
amount = 0;
}
} else {
amount = 0;
}
resetBank();
resetItems(5064);
}
resetBank();
resetItems(5064);
}
}
else
{
c.getPacketSender().sendMessage("Can't withdraw more of that item!");
}
}
}
}
@@ -9,14 +9,14 @@ import com.rebotted.game.players.Player;
public class RareProtection {
public static final boolean RARES = true, CRACKERS = false;
public static final boolean RARES = true, CRACKERS = true;
private static final int[] RARE_ITEMS = { 1037, 1038, 1039, 1040, 1041,
1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 962, 963, 1959, 1961, 1989 };
private static final int[] EDIBLE_RARES = { 1959, 1961, 1989 };
public static boolean equipItem(Player c) {// check when wearing, removing
for (int element : RARE_ITEMS) {
if (c.wearId == element && c.playerRights < 3) {
if (c.wearId == element && (RARES || CRACKERS)) {
c.getPacketSender().sendMessage("You shouldn't have that item!");
int amountToDelete = c.getItemAssistant().getItemCount(element);
c.getItemAssistant().deleteItem(element, amountToDelete);
@@ -25,10 +25,20 @@ public class RareProtection {
}
return true;
}
public static boolean removeItemOtherActions(Player player, int itemId) {
for (int element : RARE_ITEMS) {
if (player.getItemAssistant().playerHasItem(element) && (RARES || CRACKERS)) {
player.getPacketSender().sendMessage("You shouldn't have that item!");
int amountToDelete = player.getItemAssistant().getItemCount(element);
player.getItemAssistant().deleteItem(element, amountToDelete);
return false;
}
}
return true;
}
public static boolean removeItem(Player c, int itemId) {
for (int element : RARE_ITEMS) {
if (itemId == element && c.playerRights < 3) {
if (itemId == element && (RARES || CRACKERS)) {
c.getPacketSender().sendMessage("You shouldn't have that item!");
c.getItemAssistant().deleteEquipment(element, 0);
return false;
@@ -39,7 +49,7 @@ public class RareProtection {
public static boolean hasDupedItem(Player c) {// check on login
for (int element : RARE_ITEMS) {
if (c.getItemAssistant().playerHasItem(element) && c.playerRights < 3) {
if (c.getItemAssistant().playerHasItem(element)) {
c.getPacketSender().sendMessage("You can't have these items!");
int amountToDelete = c.getItemAssistant().getItemCount(element);
c.getItemAssistant().deleteItem(element, amountToDelete);
@@ -51,7 +61,7 @@ public class RareProtection {
public static boolean eatDupedItem(Player c, int itemId) {
for (int element : EDIBLE_RARES) {
if (itemId == element && c.playerRights < 3) {
if (itemId == element && RARES) {
c.getPacketSender().sendMessage("You can't eat that item!");
int amountToDelete = c.getItemAssistant().getItemCount(element);
c.getItemAssistant().deleteItem(element, amountToDelete);
@@ -60,16 +70,4 @@ public class RareProtection {
}
return true;
}
public static boolean doOtherDupe(Player player, int itemId) {
for (int element : RARE_ITEMS) {
if (player.getItemAssistant().playerHasItem(element) && player.playerRights < 3) {
player.getPacketSender().sendMessage("You shouldnt have that item!");
int amountToDelete = player.getItemAssistant().getItemCount(element);
player.getItemAssistant().deleteItem(element, amountToDelete);
return false;
}
}
return true;
}
}
@@ -1773,15 +1773,19 @@ public class NPCDrops extends NPCDropsHandler {
public static final ItemDrop[] kingblackdragon = {
new ItemDrop( i("dragon bones"), 1, ALWAYS ),
new ItemDrop( i("black dragonhide"), 1, ALWAYS ),
new ItemDrop( i("rune longsword"), 1, UNCOMMON ),
new ItemDrop( i("rune battleaxe"), 1, UNCOMMON ),
new ItemDrop( i("blood rune"), 50, COMMON ),
new ItemDrop( i("death rune"), 50, COMMON ),
new ItemDrop( i("iron arrow"), 690, COMMON ),
new ItemDrop( i("law rune"), 50, UNCOMMON ),
new ItemDrop( i("mithril arrow"), 250, UNCOMMON ),
new ItemDrop( i("rune arrow"), 50, UNCOMMON ),
new ItemDrop( i("rune sq shield"), 1, UNCOMMON ),
new ItemDrop( i("rune platebody"), 1, UNCOMMON ),
new ItemDrop( i("rune longsword"), 1, UNCOMMON ),
new ItemDrop( i("rune battleaxe"), 1, UNCOMMON ),
new ItemDrop( 1319, 1, UNCOMMON ), //Rune 2h sword
new ItemDrop( 1201, 1, UNCOMMON ), //Rune kiteshield
new ItemDrop( 1615, 1, UNCOMMON ), //Dragonstone
new ItemDrop( i("dragon med helm"), 1, RARE ),
new ItemDrop( 2361, new int[]{1, 4}, UNCOMMON ),
new ItemDrop( 2363, new int[]{1, 2}, UNCOMMON ),
@@ -62,10 +62,6 @@ public class ObjectsActions {
player.faceUpdate(0);
player.clickObjectType = 0;
player.turnPlayerTo(objectX, objectY);
if (!Region.objectExists(objectType, objectX, objectY, player.heightLevel) && player.playerRights > 1) {
player.getPacketSender().sendMessage("[DEBUG] This object does not exist.");
return;
}
if (Webs.webs(player, objectType)) {
Webs.slashWeb(player, objectType, objectX, objectY);
return;
@@ -2558,10 +2554,10 @@ public class ObjectsActions {
player.faceUpdate(0);
player.clickObjectType = 0;
player.turnPlayerTo(obX, obY);
if (!Region.objectExists(objectType, obX, obY, player.heightLevel) && player.playerRights > 1) {
player.getPacketSender().sendMessage("[DEBUG] This object does not exist.");
return;
}
//if (!Region.objectExists(objectType, obX, obY, player.heightLevel) && player.playerRights > 1) {
// player.getPacketSender().sendMessage("[DEBUG] This object does not exist.");
// return;
//}
LogCutting.resetFletching(player);
switch (objectType) {
case 6:
@@ -2818,10 +2814,10 @@ public class ObjectsActions {
if (player.playerRights == 3) {
player.getPacketSender().sendMessage("Object type: " + objectType);
}
if (!Region.objectExists(objectType, obX, obY, player.heightLevel) && player.playerRights > 1) {
player.getPacketSender().sendMessage("[DEBUG] This object does not exist.");
return;
}
//if (!Region.objectExists(objectType, obX, obY, player.heightLevel) && player.playerRights > 1) {
// player.getPacketSender().sendMessage("[DEBUG] This object does not exist.");
// return;
//}
if (Stalls.isObject(objectType)) {
Stalls.attemptStall(player, objectType, obX, obY);
return;
@@ -2864,10 +2860,10 @@ public class ObjectsActions {
if (player.playerRights == 3) {
player.getPacketSender().sendMessage("Object type: " + objectType);
}
if (!Region.objectExists(objectType, obX, obY, player.heightLevel) && player.playerRights > 1) {
player.getPacketSender().sendMessage("[DEBUG] This object does not exist.");
return;
}
//if (!Region.objectExists(objectType, obX, obY, player.heightLevel) && player.playerRights > 1) {
// player.getPacketSender().sendMessage("[DEBUG] This object does not exist.");
// return;
//}
Farming.openGuide(player, player.objectId);
switch (objectType) {
@@ -2458,6 +2458,6 @@ public class PlayerAssistant {
}
public int totalGold() {
return player.getItemAssistant().getBankQuantitiy(996) + player.getItemAssistant().getItemAmount(995);
return player.getItemAssistant().getBankQuantity(996) + player.getItemAssistant().getItemAmount(995);
}
}
@@ -1,5 +1,6 @@
package com.rebotted.net.packets.impl;
import com.rebotted.GameConstants;
import com.rebotted.game.content.random.PartyRoom;
import com.rebotted.game.items.GameItem;
import com.rebotted.game.items.Item;
@@ -74,8 +75,25 @@ public class BankAll implements PacketType {
break;
case 5382:
player.getItemAssistant().fromBank(player.bankItems[removeSlot], removeSlot,
player.bankItemsN[removeSlot]);
if (player.getItemAssistant().playerHasItem(removeId)) {
for (int i = 0; i <= 27; i++) {
if (removeId == player.playerItems[i] - 1)
{
if ((player.playerItemsN[i] + player.bankItemsN[removeSlot] + 1) < -1) {
player.getPacketSender().sendMessage("Can't withdraw more of that item!");
break;
} else {
player.getItemAssistant().fromBank(player.bankItems[removeSlot], removeSlot,
player.bankItemsN[removeSlot]);
}
}
}
}
else
{
player.getItemAssistant().fromBank(player.bankItems[removeSlot], removeSlot,
player.bankItemsN[removeSlot]);
}
break;
case 3322:
@@ -33,7 +33,7 @@ public class BankX2 implements PacketType {
break;
case 5382:
player.getItemAssistant().fromBank(player.bankItems[player.xRemoveSlot], player.xRemoveSlot, Xamount);
player.getItemAssistant().fromBank(player.bankItems[player.xRemoveSlot], player.xRemoveSlot, Xamount);
break;
case 7423:
@@ -270,7 +270,6 @@ public class ClickNPC implements PacketType {
}, 1);
}
break;
case SECOND_CLICK:
client.npcClickIndex = client.inStream.readUnsignedWordBigEndianA();
client.npcType = NpcHandler.npcs[client.npcClickIndex].npcType;
@@ -281,7 +280,7 @@ public class ClickNPC implements PacketType {
NpcHandler.npcs[client.npcClickIndex].getY());
NpcHandler.npcs[client.npcClickIndex].facePlayer(client.playerId);
client.getNpcs().secondClickNpc(client.npcType);
if (Pickpocket.isNPC(client, client.npcType)) {
if (Pickpocket.isNPC(client, client.npcType) && !((client.underAttackBy > 0 || client.underAttackBy2 > 0))) {
Pickpocket.attemptPickpocket(client, client.npcType);
return;
}
@@ -23,7 +23,7 @@ public class DropItem implements PacketType {
player.getInStream().readUnsignedByte();
player.getInStream().readUnsignedByte();
int slot = player.getInStream().readUnsignedWordA();
if (!player.getItemAssistant().playerHasItem(itemId) || !RareProtection.doOtherDupe(player, itemId) || System.currentTimeMillis() - player.alchDelay < 1800 || player.stopPlayerPacket || System.currentTimeMillis() - player.buryDelay < 1800 || !CastleWars.deleteCastleWarsItems(player, itemId)) {
if (!player.getItemAssistant().playerHasItem(itemId) || !RareProtection.removeItemOtherActions(player, itemId) || System.currentTimeMillis() - player.alchDelay < 1800 || player.stopPlayerPacket || System.currentTimeMillis() - player.buryDelay < 1800 || !CastleWars.deleteCastleWarsItems(player, itemId)) {
return;
}
for (LogData logData : LogData.values()) {
@@ -21,34 +21,36 @@ public class ItemOnPlayer implements PacketType {
case 962:
Player o = (Player) PlayerHandler.players[playerId];
if (!RareProtection.CRACKERS && c.playerRights < 3) {
if (RareProtection.CRACKERS) {
int delete = c.getItemAssistant().getItemCount(962);
c.getItemAssistant().deleteItem(962, delete);
c.getPacketSender().sendMessage("You can't do that!");
return;
}
c.turnPlayerTo(o.absX, o.absY);
o.turnPlayerTo(c.absX, c.absY);
o.gfx0(176);
c.gfx0(176);
c.startAnimation(451);
o.startAnimation(451);
c.getPacketSender().sendMessage(
"You pull the Christmas Cracker...");
"You pull the Christmas Cracker...");
o.getPacketSender().sendMessage(
"You pull the Christmas Cracker...");
c.playerName.toUpperCase() + " need your help... You pull the Christmas Cracker...");
c.getItemAssistant().deleteItem(962, 1);
if (Misc.random(3) == 1) {
o.forcedText = "Yay I got the Cracker!";
o.forcedText = "Yay! I got the Cracker!";
o.forcedChatUpdateRequired = true;
o.getItemAssistant().addItem(1038 + Misc.random(5) * 2, 1);
} else {
c.forcedText = "Yay I got the Cracker!";
c.forcedText = "Yay! I got the Cracker!";
c.forcedChatUpdateRequired = true;
c.getItemAssistant().addItem(1038 + Misc.random(5) * 2, 1);
}
c.turnPlayerTo(o.absX, o.absY);
break;
default:
c.getPacketSender().sendMessage("Nothing interesting happens.");
break;
}
}
}
@@ -44,7 +44,7 @@ public class PickupItem implements PacketType {
if (!CastleWars.deleteCastleWarsItems(player, player.pItemId)) {
return;
}
if (!RareProtection.doOtherDupe(player, player.pItemId)) {
if (!RareProtection.removeItemOtherActions(player, player.pItemId)) {
return;
}
if (player.pItemY > 9817 && player.pItemY < 9825 && player.pItemX > 3186 && player.pItemX < 3197 || player.pItemX > 3107 && player.pItemX < 3113 && player.pItemY > 3155 && player.pItemY < 3159 && player.heightLevel == 2) {
@@ -47,12 +47,10 @@ public class WearItem implements PacketType {
player.getPlayerAssistant().emptyPouch(pouch);
return;
}
if (player.wearId == 88) {
if (player.wearId == 88 && player.playerEquipment[10] != 88) {
player.weight -= 4.5;
player.getPacketSender().writeWeight((int) player.weight);
}
if (player.wearSlot == player.playerHat) {
player.getPacketSender().setConfig(491, 0);
}