Closes #343. Allows multiple players to steal from a stall at the same tick. (#344)

This commit is contained in:
MitchvanWijngaarden
2020-01-01 18:51:12 +01:00
committed by Daniel Ginovker
parent d1c2150c60
commit 33ef596bd3
2 changed files with 84 additions and 68 deletions
@@ -10,7 +10,6 @@ import com.rebotted.game.content.skills.SkillHandler;
import com.rebotted.game.items.ItemAssistant; import com.rebotted.game.items.ItemAssistant;
import com.rebotted.game.items.ItemList; import com.rebotted.game.items.ItemList;
import com.rebotted.game.npcs.NpcHandler; import com.rebotted.game.npcs.NpcHandler;
import com.rebotted.game.objects.Object;
import com.rebotted.game.players.Player; import com.rebotted.game.players.Player;
import com.rebotted.util.Misc; import com.rebotted.util.Misc;
@@ -121,9 +120,14 @@ public class Stalls {
if(objectId == s.getObject()) { if(objectId == s.getObject()) {
// Wait for respawn // Wait for respawn
if (System.currentTimeMillis() < s.respawnTime) { if (System.currentTimeMillis() < s.respawnTime) {
long timeFirstStealFromStall = s.respawnTime - (GameConstants.CYCLE_TIME * getRespawnTime(s.objectId));
// If stealing from stall at the same tick as another player
if(p.hasThievedStall() || System.currentTimeMillis() - timeFirstStealFromStall >= GameConstants.CYCLE_TIME) {
p.getPacketSender().sendMessage("You need to wait longer before you can thieve this stall!"); p.getPacketSender().sendMessage("You need to wait longer before you can thieve this stall!");
return; return;
} }
}
// Thieving level too low // Thieving level too low
if (p.playerLevel[p.playerThieving] < s.getLevel()) { if (p.playerLevel[p.playerThieving] < s.getLevel()) {
p.getDialogueHandler().sendStatement("You must have a thieving level of " + s.getLevel() + " to steal from this stall."); p.getDialogueHandler().sendStatement("You must have a thieving level of " + s.getLevel() + " to steal from this stall.");
@@ -144,11 +148,13 @@ public class Stalls {
s.respawnTime = System.currentTimeMillis() + (respawnTime * GameConstants.CYCLE_TIME); s.respawnTime = System.currentTimeMillis() + (respawnTime * GameConstants.CYCLE_TIME);
p.getPacketSender().sendMessage("You steal a " + ItemAssistant.getItemName(random[0]) + " from the stall."); p.getPacketSender().sendMessage("You steal a " + ItemAssistant.getItemName(random[0]) + " from the stall.");
p.getItemAssistant().addItem(random[0], random[1]); p.getItemAssistant().addItem(random[0], random[1]);
p.setHasThievedStall(true);
CycleEventHandler.getSingleton().addEvent(p, new CycleEvent() { CycleEventHandler.getSingleton().addEvent(p, new CycleEvent() {
@Override @Override
public void execute(CycleEventContainer container) { public void execute(CycleEventContainer container) {
GameEngine.objectHandler.createAnObject(p, s.getObject(), x, y, s.getFace()); GameEngine.objectHandler.createAnObject(p, s.getObject(), x, y, s.getFace());
//new Object(objectId, x, y, 0, s.getFace(), 10, j, getRespawnTime(objectId)); //new Object(objectId, x, y, 0, s.getFace(), 10, j, getRespawnTime(objectId));
p.setHasThievedStall(false);
container.stop(); container.stop();
} }
@Override @Override
@@ -1582,6 +1582,16 @@ public abstract class Player {
public int XremoveSlot, XinterfaceID, XremoveID, Xamount; public int XremoveSlot, XinterfaceID, XremoveID, Xamount;
public boolean isMining; public boolean isMining;
public boolean hasThievedStall;
public boolean hasThievedStall() {
return hasThievedStall;
}
public void setHasThievedStall(boolean hasThievedStall) {
this.hasThievedStall = hasThievedStall;
}
public boolean antiFirePot = false; public boolean antiFirePot = false;
public boolean underWater = false; public boolean underWater = false;