mirror of
https://github.com/2006-Scape/apollo.git
synced 2026-07-07 16:49:12 +00:00
Add item on item decoder; minor mining changes.
This commit is contained in:
+8
-1
@@ -72,4 +72,11 @@
|
|||||||
<handler>org.apollo.game.event.handler.impl.EnteredAmountEventHandler</handler>
|
<handler>org.apollo.game.event.handler.impl.EnteredAmountEventHandler</handler>
|
||||||
</chain>
|
</chain>
|
||||||
</event>
|
</event>
|
||||||
</events>
|
<event>
|
||||||
|
<type>org.apollo.game.event.impl.ItemOnItemEvent</type>
|
||||||
|
<chain>
|
||||||
|
<handler>org.apollo.game.event.handler.impl.ItemVerificationHandler</handler>
|
||||||
|
<handler>org.apollo.game.event.handler.impl.ItemOnItemVerificationHandler</handler>
|
||||||
|
</chain>
|
||||||
|
</event>
|
||||||
|
</events>
|
||||||
@@ -30,4 +30,4 @@ on :event, :object_action do |ctx, player, event|
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: when we have NPCs/dialogue, also respond to clicking on them
|
# TODO: when we have NPCs/dialogue, also respond to clicking on them
|
||||||
@@ -16,4 +16,4 @@ on :command, :tele, RIGHTS_ADMIN do |player, command|
|
|||||||
else
|
else
|
||||||
player.send_message "Syntax: ::tele [x] [y] [z=0]"
|
player.send_message "Syntax: ::tele [x] [y] [z=0]"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -2,4 +2,4 @@ LOGOUT_BUTTON_ID = 2458
|
|||||||
|
|
||||||
on :button, LOGOUT_BUTTON_ID do |player|
|
on :button, LOGOUT_BUTTON_ID do |player|
|
||||||
player.logout
|
player.logout
|
||||||
end
|
end
|
||||||
@@ -16,4 +16,4 @@ end
|
|||||||
append_gem(Gemstone.new(1623, 0)) # uncut sapphire
|
append_gem(Gemstone.new(1623, 0)) # uncut sapphire
|
||||||
append_gem(Gemstone.new(1605, 0)) # uncut emerald
|
append_gem(Gemstone.new(1605, 0)) # uncut emerald
|
||||||
append_gem(Gemstone.new(1619, 0)) # uncut ruby
|
append_gem(Gemstone.new(1619, 0)) # uncut ruby
|
||||||
append_gem(Gemstone.new(1617, 0)) # uncut diamond
|
append_gem(Gemstone.new(1617, 0)) # uncut diamond
|
||||||
@@ -160,4 +160,4 @@ on :event, :object_action do |ctx, player, event|
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -93,4 +93,4 @@ append_ore Ore.new(449, ADAMANT_OBJECTS, 70, 95, 800 ) # adamant ore
|
|||||||
append_ore Ore.new(451, RUNITE_OBJECTS, 85, 125, 2500) # runite ore
|
append_ore Ore.new(451, RUNITE_OBJECTS, 85, 125, 2500) # runite ore
|
||||||
|
|
||||||
# TODO: rune essence object id = 2491
|
# TODO: rune essence object id = 2491
|
||||||
# level 1, exp 5, rune ess = 1436, pure ess = 7936
|
# level 1, exp 5, rune ess = 1436, pure ess = 7936
|
||||||
@@ -28,4 +28,4 @@ append_pickaxe(Pickaxe.new(1273, 21, 629, 5)) # mithril pickaxe
|
|||||||
append_pickaxe(Pickaxe.new(1271, 31, 628, 4)) # adamant pickaxe
|
append_pickaxe(Pickaxe.new(1271, 31, 628, 4)) # adamant pickaxe
|
||||||
append_pickaxe(Pickaxe.new(1275, 41, 624, 3)) # rune pickaxe
|
append_pickaxe(Pickaxe.new(1275, 41, 624, 3)) # rune pickaxe
|
||||||
|
|
||||||
PICKAXE_IDS.reverse!
|
PICKAXE_IDS.reverse!
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
MAX_PLAYERS = 2000 # TODO: obtain from a Java class
|
|
||||||
|
|
||||||
# Calculates the number of pulses it takes for an ore to respawn based on the
|
# Calculates the number of pulses it takes for an ore to respawn based on the
|
||||||
# number of players currently online.
|
# number of players currently online.
|
||||||
#
|
#
|
||||||
@@ -14,5 +12,5 @@ MAX_PLAYERS = 2000 # TODO: obtain from a Java class
|
|||||||
# function. The rest of the mining plugin rounds the base respawn times in
|
# function. The rest of the mining plugin rounds the base respawn times in
|
||||||
# pulses down where appropriate.
|
# pulses down where appropriate.
|
||||||
def respawn_pulses(base, players)
|
def respawn_pulses(base, players)
|
||||||
base - players * base / (MAX_PLAYERS * 2)
|
base - players * base / (World.world.player_repository.size * 2)
|
||||||
end
|
end
|
||||||
@@ -24,9 +24,9 @@ public final class BankButtonEventHandler extends EventHandler<ButtonEvent> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(EventHandlerContext ctx, Player player, ButtonEvent event) {
|
public void handle(EventHandlerContext ctx, Player player, ButtonEvent event) {
|
||||||
if (event.getInterfaceId() == WITHDRAW_AS_ITEM) {
|
if (event.getWidgetId() == WITHDRAW_AS_ITEM) {
|
||||||
player.setWithdrawingNotes(false);
|
player.setWithdrawingNotes(false);
|
||||||
} else if (event.getInterfaceId() == WITHDRAW_AS_NOTE) {
|
} else if (event.getWidgetId() == WITHDRAW_AS_NOTE) {
|
||||||
player.setWithdrawingNotes(true);
|
player.setWithdrawingNotes(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package org.apollo.game.event.handler.impl;
|
||||||
|
|
||||||
|
import org.apollo.game.event.handler.EventHandler;
|
||||||
|
import org.apollo.game.event.handler.EventHandlerContext;
|
||||||
|
import org.apollo.game.event.impl.ItemOnItemEvent;
|
||||||
|
import org.apollo.game.model.Inventory;
|
||||||
|
import org.apollo.game.model.Item;
|
||||||
|
import org.apollo.game.model.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An {@link EventHandler} which verifies the target item in {@link ItemOnItemEvent}s.
|
||||||
|
*
|
||||||
|
* @author Chris Fletcher
|
||||||
|
*/
|
||||||
|
public final class ItemOnItemVerificationHandler extends EventHandler<ItemOnItemEvent> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(EventHandlerContext ctx, Player player, ItemOnItemEvent event) {
|
||||||
|
Inventory inventory = ItemVerificationHandler.interfaceToInventory(player, event.getTargetInterfaceId());
|
||||||
|
|
||||||
|
int slot = event.getTargetSlot();
|
||||||
|
if (slot < 0 || slot >= inventory.capacity()) {
|
||||||
|
ctx.breakHandlerChain();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Item item = inventory.get(slot);
|
||||||
|
if (item == null || item.getId() != event.getTargetId()) {
|
||||||
|
ctx.breakHandlerChain();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -19,12 +19,11 @@ public final class ItemVerificationHandler extends EventHandler<InventoryItemEve
|
|||||||
/**
|
/**
|
||||||
* Gets the inventory based on the interface id.
|
* Gets the inventory based on the interface id.
|
||||||
*
|
*
|
||||||
* @param player The player.
|
|
||||||
* @param interfaceId The interface id.
|
* @param interfaceId The interface id.
|
||||||
* @return The proper inventory.
|
* @return The proper inventory.
|
||||||
* @throws IllegalArgumentException If the interface id is illegal.
|
* @throws IllegalArgumentException If the interface id is not legal.
|
||||||
*/
|
*/
|
||||||
private static Inventory interfaceToInventory(Player player, int interfaceId) {
|
public static Inventory interfaceToInventory(Player player, int interfaceId) {
|
||||||
switch (interfaceId) {
|
switch (interfaceId) {
|
||||||
|
|
||||||
case SynchronizationInventoryListener.INVENTORY_ID:
|
case SynchronizationInventoryListener.INVENTORY_ID:
|
||||||
@@ -38,7 +37,7 @@ public final class ItemVerificationHandler extends EventHandler<InventoryItemEve
|
|||||||
return player.getBank();
|
return player.getBank();
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Unknown interface id: " + interfaceId);
|
throw new IllegalArgumentException("unknown interface id: " + interfaceId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,33 +3,33 @@ package org.apollo.game.event.impl;
|
|||||||
import org.apollo.game.event.Event;
|
import org.apollo.game.event.Event;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An event sent when the client clicks a button.
|
* An event sent when a player clicks a button.
|
||||||
*
|
*
|
||||||
* @author Graham
|
* @author Graham
|
||||||
*/
|
*/
|
||||||
public final class ButtonEvent extends Event {
|
public final class ButtonEvent extends Event {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The interface id.
|
* The widget id.
|
||||||
*/
|
*/
|
||||||
private final int interfaceId;
|
private final int widgetId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the button event.
|
* Creates the button event.
|
||||||
*
|
*
|
||||||
* @param interfaceId The interface id.
|
* @param widgetId The widget id.
|
||||||
*/
|
*/
|
||||||
public ButtonEvent(int interfaceId) {
|
public ButtonEvent(int widgetId) {
|
||||||
this.interfaceId = interfaceId;
|
this.widgetId = widgetId;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the interface id.
|
* Gets the widget id.
|
||||||
*
|
*
|
||||||
* @return The interface id.
|
* @return The widget id.
|
||||||
*/
|
*/
|
||||||
public int getInterfaceId() {
|
public int getWidgetId() {
|
||||||
return interfaceId;
|
return widgetId;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
package org.apollo.game.event.impl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An event which is sent by the client when a player uses one inventory item on another.
|
||||||
|
*
|
||||||
|
* @author Chris Fletcher
|
||||||
|
*/
|
||||||
|
public final class ItemOnItemEvent extends InventoryItemEvent {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The interface id of the target item.
|
||||||
|
*/
|
||||||
|
private final int targetInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The id of the target item.
|
||||||
|
*/
|
||||||
|
private final int targetId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The slot of the target item.
|
||||||
|
*/
|
||||||
|
private final int targetSlot;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new item-on-item event.
|
||||||
|
*
|
||||||
|
* @param usedInterface The interface id of the used item.
|
||||||
|
* @param usedId The id of the used item.
|
||||||
|
* @param usedSlot The slot of the target item.
|
||||||
|
* @param targetInterface The interface id of the target item.
|
||||||
|
* @param targetId The id of the target item.
|
||||||
|
* @param targetSlot The slot of the target item.
|
||||||
|
*/
|
||||||
|
public ItemOnItemEvent(int usedInterface, int usedId, int usedSlot, int targetInterface, int targetId,
|
||||||
|
int targetSlot) {
|
||||||
|
super(0, usedInterface, usedId, usedSlot);
|
||||||
|
this.targetInterface = targetInterface;
|
||||||
|
this.targetSlot = targetSlot;
|
||||||
|
this.targetId = targetId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the interface id of the target item.
|
||||||
|
*
|
||||||
|
* @return The target item's interface id.
|
||||||
|
*/
|
||||||
|
public int getTargetInterfaceId() {
|
||||||
|
return targetInterface;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the id of the target item.
|
||||||
|
*
|
||||||
|
* @return The target item's interface id.
|
||||||
|
*/
|
||||||
|
public int getTargetId() {
|
||||||
|
return targetId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the slot of the target item.
|
||||||
|
*
|
||||||
|
* @return The slot of the target item.
|
||||||
|
*/
|
||||||
|
public int getTargetSlot() {
|
||||||
|
return targetSlot;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package org.apollo.net.release.r317;
|
||||||
|
|
||||||
|
import org.apollo.game.event.impl.ItemOnItemEvent;
|
||||||
|
import org.apollo.net.codec.game.DataOrder;
|
||||||
|
import org.apollo.net.codec.game.DataTransformation;
|
||||||
|
import org.apollo.net.codec.game.DataType;
|
||||||
|
import org.apollo.net.codec.game.GamePacket;
|
||||||
|
import org.apollo.net.codec.game.GamePacketReader;
|
||||||
|
import org.apollo.net.release.EventDecoder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An {@link EventDecoder} for the {@link ItemOnItemEventDecoder}.
|
||||||
|
*
|
||||||
|
* @author Chris Fletcher
|
||||||
|
*/
|
||||||
|
final class ItemOnItemEventDecoder extends EventDecoder<ItemOnItemEvent> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemOnItemEvent decode(GamePacket packet) {
|
||||||
|
GamePacketReader reader = new GamePacketReader(packet);
|
||||||
|
|
||||||
|
int targetSlot = (int) reader.getUnsigned(DataType.SHORT);
|
||||||
|
int usedSlot = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
|
||||||
|
|
||||||
|
int targetId = (int) reader.getSigned(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD);
|
||||||
|
int targetInterface = (int) reader.getUnsigned(DataType.SHORT);
|
||||||
|
|
||||||
|
int usedId = (int) reader.getSigned(DataType.SHORT, DataOrder.LITTLE);
|
||||||
|
int usedInterface = (int) reader.getUnsigned(DataType.SHORT);
|
||||||
|
|
||||||
|
return new ItemOnItemEvent(usedInterface, usedId, usedSlot, targetInterface, targetId, targetSlot);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -94,6 +94,7 @@ public final class Release317 extends Release {
|
|||||||
register(135, new FifthItemActionEventDecoder());
|
register(135, new FifthItemActionEventDecoder());
|
||||||
register(130, new ClosedInterfaceEventDecoder());
|
register(130, new ClosedInterfaceEventDecoder());
|
||||||
register(208, new EnteredAmountEventDecoder());
|
register(208, new EnteredAmountEventDecoder());
|
||||||
|
register(53, new ItemOnItemEventDecoder());
|
||||||
|
|
||||||
// register encoders
|
// register encoders
|
||||||
register(IdAssignmentEvent.class, new IdAssignmentEventEncoder());
|
register(IdAssignmentEvent.class, new IdAssignmentEventEncoder());
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package org.apollo.net.release.r377;
|
||||||
|
|
||||||
|
import org.apollo.game.event.impl.ItemOnItemEvent;
|
||||||
|
import org.apollo.net.codec.game.DataOrder;
|
||||||
|
import org.apollo.net.codec.game.DataTransformation;
|
||||||
|
import org.apollo.net.codec.game.DataType;
|
||||||
|
import org.apollo.net.codec.game.GamePacket;
|
||||||
|
import org.apollo.net.codec.game.GamePacketReader;
|
||||||
|
import org.apollo.net.release.EventDecoder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An {@link EventDecoder} for the {@link ItemOnItemEventDecoder}.
|
||||||
|
*
|
||||||
|
* @author Chris Fletcher
|
||||||
|
*/
|
||||||
|
final class ItemOnItemEventDecoder extends EventDecoder<ItemOnItemEvent> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemOnItemEvent decode(GamePacket packet) {
|
||||||
|
GamePacketReader reader = new GamePacketReader(packet);
|
||||||
|
|
||||||
|
int targetId = (int) reader.getUnsigned(DataType.SHORT);
|
||||||
|
int usedSlot = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
|
||||||
|
|
||||||
|
int usedId = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
|
||||||
|
int targetInterface = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD);
|
||||||
|
|
||||||
|
int targetSlot = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
|
||||||
|
int usedInterface = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
|
||||||
|
|
||||||
|
return new ItemOnItemEvent(usedInterface, usedId, usedSlot, targetInterface, targetId, targetSlot);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -94,7 +94,8 @@ public final class Release377 extends Release {
|
|||||||
register(158, new FifthItemActionEventDecoder());
|
register(158, new FifthItemActionEventDecoder());
|
||||||
register(110, new ClosedInterfaceEventDecoder());
|
register(110, new ClosedInterfaceEventDecoder());
|
||||||
register(75, new EnteredAmountEventDecoder());
|
register(75, new EnteredAmountEventDecoder());
|
||||||
|
register(1, new ItemOnItemEventDecoder());
|
||||||
|
|
||||||
// register encoders
|
// register encoders
|
||||||
register(IdAssignmentEvent.class, new IdAssignmentEventEncoder());
|
register(IdAssignmentEvent.class, new IdAssignmentEventEncoder());
|
||||||
register(RegionChangeEvent.class, new RegionChangeEventEncoder());
|
register(RegionChangeEvent.class, new RegionChangeEventEncoder());
|
||||||
|
|||||||
Reference in New Issue
Block a user