Skip to content

Commit c4cb52d

Browse files
committedJun 11, 2018
Update - fixed teleport segment, started Bank
1 parent 5ffa6d1 commit c4cb52d

18 files changed

+193
-49
lines changed
 

‎VirtueOS.iml

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module external.linked.project.id="VirtueOS" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
3+
<component name="NewModuleRootManager" inherit-compiler-output="true">
4+
<exclude-output />
5+
<content url="file://$MODULE_DIR$">
6+
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
7+
<excludeFolder url="file://$MODULE_DIR$/build" />
8+
<excludeFolder url="file://$MODULE_DIR$/out" />
9+
</content>
10+
<orderEntry type="inheritedJdk" />
11+
<orderEntry type="sourceFolder" forTests="false" />
12+
</component>
13+
</module>

‎src/com/oldscape/client/Player.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,9 @@ static void processPlayerUpdateFlags(final PacketBuffer buffer, final int player
271271

272272
//Temp movement??
273273
if((flags & 4096) != 0) {
274-
class93.field1429[playerIdx] = buffer.method3634();
274+
int type = buffer.method3634();
275+
System.out.println(type);
276+
class93.field1429[playerIdx] = (byte)type;
275277
}
276278

277279
//Appearance

‎src/com/oldscape/server/game/model/MobileEntity.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,18 @@ public abstract class MobileEntity extends Node {
7878

7979
protected Region region;
8080

81+
protected Position lastKnownRegion = null;
82+
83+
public Position getLastKnownRegion()
84+
{
85+
return lastKnownRegion;
86+
}
87+
88+
public void setLastKnownRegion(Position lastKnownRegion)
89+
{
90+
this.lastKnownRegion = lastKnownRegion;
91+
}
92+
8193
/**
8294
* Sets the entity's current position
8395
*
@@ -322,10 +334,12 @@ public final boolean isTeleporting() {
322334
* The position.
323335
*/
324336
public void teleport(Position position) {
337+
setLastPosition(getPosition());
325338
setPosition(position);
339+
walkingQueue.handleRegionChange();
326340
teleporting = true;
327341
walkingQueue.clear();
328-
342+
addBlock(SynchronizationBlock.createMovementTypeBlock(getWalkingQueue().runningQueue(), isTeleporting()));
329343
}
330344

331345
/**

‎src/com/oldscape/server/game/model/WalkingQueue.java

+50
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import java.util.Queue;
66

77
import com.google.common.base.MoreObjects;
8+
import com.oldscape.server.game.model.player.Player;
9+
import com.oldscape.server.game.model.sync.block.SynchronizationBlock;
810
import com.oldscape.server.game.model.sync.reference.Direction;
911
import com.oldscape.shared.model.Position;
1012
import com.oldscape.shared.model.region.RegionManager;
@@ -280,9 +282,55 @@ public void pulse() {
280282
position = next.position;
281283
}
282284
}
285+
mob.setLastPosition(mob.getPosition().clone());
283286
mob.setPosition(position);
284287
}
285288
mob.setDirections(first, second);
289+
290+
handleRegionChange();
291+
}
292+
293+
public void handleRegionChange()
294+
{
295+
if(!(mob instanceof Player))
296+
{
297+
return;
298+
}
299+
300+
Player player = (Player)mob;
301+
302+
if (!player.hasLastKnownPosition() || needsRegionUpdate()) {
303+
player.setRegionChange(true);
304+
305+
Position position = player.getPosition().clone();
306+
307+
player.setLastKnownRegion(position);
308+
309+
player.sendRegionUpdate(position);
310+
}
311+
}
312+
313+
314+
/**
315+
* Checks if a sector update is required.
316+
*
317+
* @return {@code true} if so, {@code false} otherwise.
318+
*/
319+
private boolean needsRegionUpdate() {
320+
if(!(mob instanceof Player))
321+
{
322+
return false;
323+
}
324+
325+
Player player = (Player)mob;
326+
327+
Position current = player.getPosition();
328+
Position last = player.getLastKnownRegion();
329+
330+
int deltaX = current.getLocalX(last);
331+
int deltaY = current.getLocalY(last);
332+
333+
return deltaX < 16 || deltaX >= 88 || deltaY < 16 || deltaY >= 88;
286334
}
287335

288336
/**
@@ -293,6 +341,8 @@ public void pulse() {
293341
*/
294342
public void flipRunningQueue() {
295343
runningQueue ^= true;
344+
345+
mob.addBlock(SynchronizationBlock.createMovementTypeBlock(mob.getWalkingQueue().runningQueue(), mob.isTeleporting()));
296346
}
297347

298348
public boolean runningQueue() {

‎src/com/oldscape/server/game/model/player/Player.java

+20-1
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,21 @@ public class Player extends MobileEntity {
103103
*/
104104
protected final ItemContainer bank = new ItemContainer(ContainerConstants.BANK_CAPACITY, StackMode.STACK_ALWAYS);
105105

106+
/**
107+
* Amount of items in each bank tab
108+
*/
109+
protected int[] bankTabItems = new int[10];
110+
111+
public int[] getBankTabItems()
112+
{
113+
return bankTabItems;
114+
}
115+
116+
public void setBankTabItems(int[] bankTabItems)
117+
{
118+
this.bankTabItems = bankTabItems;
119+
}
120+
106121
/**
107122
* This mob's inventory.
108123
*/
@@ -678,6 +693,10 @@ public void sendInterfaceSetClickMask(int root, int component, int from, int to,
678693
write(new InterfaceSetClickMaskEvent(root, component, from, to, settings));
679694
}
680695

696+
public void sendInterfaceSetClickMask(int from, int to, int option, int interfaceHash) {
697+
write(new InterfaceSetClickMaskEvent(interfaceHash>>16, interfaceHash&65535, from, to, option));
698+
}
699+
681700
public void sendRegionUpdate(Position position) {
682701
write(new RegionUpdateEvent(position));
683702
}
@@ -706,7 +725,7 @@ public void sendSetRootInterface(int interfaceId) {
706725
write(new SetRootInterfaceEvent(interfaceId));
707726
}
708727

709-
public void sendCS2Script(int id, Object[] params) {
728+
public void sendCS2Script(int id, Object... params) {
710729
// TODO Temp Fix. params are encoded/decoded backwards.
711730
write(new CS2ScriptEvent(id, Lists.reverse(Arrays.asList(params)).toArray()));
712731
}

‎src/com/oldscape/server/game/model/sync/block/MovementTypeBlock.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@
2828
public class MovementTypeBlock extends SynchronizationBlock {
2929

3030
private final byte type;
31-
31+
3232
public MovementTypeBlock(byte type) {
3333
this.type = type;
3434
}
35-
35+
3636
public byte getMovementType() {
3737
return type;
3838
}
39-
39+
4040
/* (non-Javadoc)
4141
* @see com.oldscape.server.game.model.sync.block.SynchronizationBlock#getType()
4242
*/

‎src/com/oldscape/server/game/model/sync/block/SynchronizationBlock.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ public static SynchronizationBlock createMovementTypeBlock(boolean running, bool
161161
if(teleporting) {
162162
return new MovementTypeBlock((byte) 127);
163163
} else {
164-
return new MovementTypeBlock((byte) (running ? 2 : 1));
164+
return new TemporaryMovementTypeBlock((byte) (running ? 2 : 1));
165165
}
166166
}
167167

‎src/com/oldscape/server/game/model/sync/block/encode/MovementTypeBlockEncoder.java

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.oldscape.server.game.model.sync.block.BlockType;
2525
import com.oldscape.server.game.model.sync.block.MovementTypeBlock;
2626
import com.oldscape.server.game.model.sync.block.SynchronizationBlock;
27+
import com.oldscape.shared.network.game.DataTransformation;
2728
import com.oldscape.shared.network.game.DataType;
2829
import com.oldscape.shared.network.game.GameFrameBuilder;
2930

‎src/com/oldscape/server/game/model/sync/block/encode/TemporaryMovementTypeBlockEncoder.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.oldscape.server.game.model.sync.block.BlockType;
2525
import com.oldscape.server.game.model.sync.block.SynchronizationBlock;
2626
import com.oldscape.server.game.model.sync.block.TemporaryMovementTypeBlock;
27+
import com.oldscape.shared.network.game.DataTransformation;
2728
import com.oldscape.shared.network.game.DataType;
2829
import com.oldscape.shared.network.game.GameFrameBuilder;
2930

@@ -42,7 +43,7 @@ public TemporaryMovementTypeBlockEncoder() {
4243
*/
4344
@Override
4445
public void encodeBlock(SynchronizationBlock block, GameFrameBuilder builder, boolean player) {
45-
builder.put(DataType.BYTE, ((TemporaryMovementTypeBlock) block).getMovementType());
46+
builder.put(DataType.BYTE, DataTransformation.SUBTRACT, ((TemporaryMovementTypeBlock) block).getMovementType());
4647
}
4748

4849
/* (non-Javadoc)

‎src/com/oldscape/server/game/model/sync/descriptor/PlayerTeleportDescriptor.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -41,23 +41,23 @@ public void encodeDescriptor(Event event, SynchronizationSegment segment, GameFr
4141
Position start = ((TeleportSegment) segment).getStart();
4242
Position destination = ((TeleportSegment) segment).getDestination();
4343

44-
System.out.println("start x"+start.getX()+" y"+start.getY()+" z"+start.getHeight());
45-
System.out.println("destination x"+destination.getX()+" y"+destination.getY()+" z"+destination.getHeight());
44+
System.out.println("start x" + start.getX() + " y" + start.getY() + " z" + start.getHeight());
45+
System.out.println("destination x" + destination.getX() + " y" + destination.getY() + " z" + destination.getHeight());
4646

4747
int xOff = destination.getX() - start.getX();
4848
int yOff = destination.getY() - start.getY();
4949
int zOff = destination.getHeight() - start.getHeight();
5050

5151
boolean exterior = (Math.abs(xOff) > 15 || Math.abs(yOff) > 15);//Actually needs to be 15
52-
52+
5353
builder.putBit(true);
5454
builder.putBit(segment.getBlockSet().size() > 0);
5555
builder.putBits(2, 3);
56-
56+
5757
builder.putBit(exterior);
5858

59-
System.out.println("sending teleport "+exterior+" x"+xOff+" y"+yOff+" z"+zOff);
60-
59+
System.out.println("sending teleport " + exterior + " x" + xOff + " y" + yOff + " z" + zOff);
60+
6161
if (exterior) {//TODO seems to read incorrectly on client 3: if negatice*
6262
builder.putBits(30, (yOff & 0x3fff) + ((xOff & 0x3fff) << 14) + ((zOff & 0x3) << 28));
6363
} else {
@@ -71,10 +71,10 @@ public void encodeDescriptor(Event event, SynchronizationSegment segment, GameFr
7171
*/
7272
builder.putBits(12,
7373
(yOff & 0x1F)
74-
+ ((xOff & 0x1F ) << 5)
74+
+ ((xOff & 0x1F) << 5)
7575
+ ((zOff & 0x3) << 10)
7676
);
77-
}
77+
}
7878
}
7979

8080
}

‎src/com/oldscape/server/game/model/sync/task/PostPlayerSynchronizationTask.java

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ public PostPlayerSynchronizationTask(Player player) {
3131
public void run() {
3232
if(player.isTeleporting()) {
3333
player.setTeleporting(false);
34-
player.addBlock(SynchronizationBlock.createMovementTypeBlock(player.getWalkingQueue().runningQueue(), player.isTeleporting()));//TODO is this the best way to do this?
3534
}
3635

3736
player.setRegionChange(false);

‎src/com/oldscape/server/game/model/sync/task/PrePlayerSynchronizationTask.java

-26
Original file line numberDiff line numberDiff line change
@@ -28,38 +28,12 @@ public PrePlayerSynchronizationTask(Player player) {
2828
this.player = player;
2929
}
3030

31-
/**
32-
* Checks if a sector update is required.
33-
*
34-
* @return {@code true} if so, {@code false} otherwise.
35-
*/
36-
private boolean needsRegionUpdate() {
37-
Position current = player.getPosition();
38-
Position last = player.getLastPosition();
39-
40-
int deltaX = current.getLocalX(last);
41-
int deltaY = current.getLocalY(last);
42-
43-
return deltaX < 16 || deltaX >= 88 || deltaY < 16 || deltaY >= 88;
44-
}
45-
4631
@Override
4732
public void run() {
4833
player.getWalkingQueue().pulse();
4934

5035
if (player.isTeleporting()) {
5136
player.getViewport().resetViewingDistance();
52-
player.addBlock(SynchronizationBlock.createMovementTypeBlock(player.getWalkingQueue().runningQueue(), player.isTeleporting()));//TODO is this the best way to do this?
53-
}
54-
55-
if (!player.hasLastKnownPosition() || needsRegionUpdate()) {
56-
player.setRegionChange(true);
57-
58-
Position position = player.getPosition();
59-
System.out.println("Sending position "+position.toString());
60-
if(!player.hasLastKnownPosition() || !player.isTeleporting())
61-
player.setLastPosition(position);
62-
player.sendRegionUpdate(position);
6337
}
6438
}
6539

‎src/com/oldscape/server/game/network/game/listeners/ButtonClickEventListener.java

+3
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ public void onEvent(ButtonClickEvent event, GameSessionContext context) {
6161
player.sendOpenInterfaceSub(548, 22, 595, true);
6262
// player.setInterfaceClickMask(595, 17, 0, 4, 2);//TODO
6363
break;
64+
case 22:
65+
player.getWalkingQueue().flipRunningQueue();
66+
break;
6467
}
6568
}
6669

‎src/com/oldscape/server/game/network/game/listeners/NpcClickListener.java

+58-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.oldscape.server.game.model.npc.Npc;
44
import com.oldscape.server.game.model.player.Player;
5+
import com.oldscape.server.game.model.player.inv.ContainerConstants;
56
import com.oldscape.server.game.network.game.GameSessionContext;
67
import com.oldscape.shared.event.EventListener;
78
import com.oldscape.shared.network.game.event.impl.NpcActionEvent;
@@ -23,9 +24,64 @@ public void onEvent(NpcActionEvent event, GameSessionContext context) {
2324
System.out.println(npc.getId());
2425

2526
if(npc.getId() == 394) {
26-
player.sendCS2Script(917, new Object[]{-1, -2});//ii
2727
player.sendOpenInterfaceSub(548, 21, 12, false);
28-
player.sendOpenInterfaceSub(161, 66, 15, false);
28+
29+
player.sendVarp(115, 0);
30+
//player.sendItems(ContainerConstants.BANK_ID, 95, player.getBank().getItems());
31+
//player.sendItems(ContainerConstants.INVENTORY_CHANNEL, 93, player.getInventory().getItems());
32+
//setItemContainer(player.getLootingBag().getItems(), 516).
33+
/*player.sendInterfaceSetClickMask(0, 815, 1312766, 786455);//bankOptions
34+
player.sendInterfaceSetClickMask(825, 833, 2, 786455);
35+
player.sendInterfaceSetClickMask(834, 843, 1048576, 786455);
36+
player.sendInterfaceSetClickMask(10, 10, 1048706, 786453);
37+
player.sendInterfaceSetClickMask(11, 19, 1179842, 786453);
38+
player.sendInterfaceSetClickMask(0, 27, 1181438, 983043);//interfaceOptions
39+
player.sendInterfaceSetClickMask(0, 27, 1054, 983050);
40+
player.sendInterfaceSetClickMask(1, 816, 2, 786478);
41+
player.sendInterfaceSetClickMask(0, 3, 2, 786481);
42+
player.sendCS2Script(917, -2, -1);*/
43+
player.sendOpenInterfaceSub(161, 66, 15, false);
44+
player.sendCS2Script(1495, 786487, 786450, "Non-members' capacity: 400<br>+8 for your PIN<br>+8 for your Authenticator");
45+
46+
47+
player.sendSetInterfaceText(12, 18, ContainerConstants.BANK_CAPACITY+"");
48+
49+
int[] tabItems = player.getBankTabItems();
50+
51+
int varpOne = 0;
52+
int varpTwo = 0;
53+
int varpThree = 0;
54+
55+
varpOne += tabItems[0];
56+
varpOne += tabItems[1]<<10;
57+
varpOne += tabItems[2]<<20;
58+
59+
varpTwo += tabItems[3];
60+
varpTwo += tabItems[4]<<10;
61+
varpTwo += tabItems[5]<<20;
62+
varpTwo += tabItems[6]<<30;
63+
64+
varpThree += tabItems[7];
65+
varpThree += tabItems[8]<<10;
66+
varpThree += tabItems[9]<<20;
67+
68+
if(false)
69+
{
70+
varpTwo += 1 << 30;//if placeholders are enabled
71+
}
72+
73+
player.sendVarp(867, varpOne);
74+
player.sendVarp(867, varpOne);
75+
player.sendVarp(867, varpOne);
76+
77+
player.sendVarp(1052, varpTwo);
78+
player.sendVarp(1052, varpTwo);
79+
player.sendVarp(1052, varpTwo);
80+
81+
player.sendVarp(1053, varpThree);
82+
player.sendVarp(1053, varpThree);
83+
player.sendVarp(1053, varpThree);
84+
2985
}
3086

3187

‎src/com/oldscape/server/game/network/game/listeners/WalkEventListener.java

+8-2
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,14 @@ public void onEvent(WalkEvent event, GameSessionContext context) {
4747
//Close any open interfaces
4848
player.sendCloseInterfaceSub(548, 22);
4949

50-
player.getWalkingQueue().clear();
51-
player.getWalkingQueue().addStep(new Position((event.getX()), (event.getY()), player.getPosition().getHeight()), context.getServer().getRegionManager());
50+
if(event.getType() == 0) {
51+
player.getWalkingQueue().clear();
52+
player.getWalkingQueue().addStep(new Position((event.getX()), (event.getY()), player.getPosition().getHeight()), context.getServer().getRegionManager());
53+
}
54+
else
55+
{
56+
player.teleport(new Position((event.getX()), (event.getY()), player.getPosition().getHeight()));
57+
}
5258
}
5359

5460
}

‎src/com/oldscape/shared/gson/PlayerSerializer.java

+1
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ public Player deserialize(JsonElement json, Type typeOfT, JsonDeserializationCon
108108
Player player = new Player(1, credentials, mode);
109109
player.setPosition(position);
110110
player.setLastPosition(position);
111+
player.setLastKnownRegion(position);
111112

112113
/**
113114
* Returns the {@code com.oldscape.shared.model.player.AccountCredentials}.

‎src/com/oldscape/shared/model/Position.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,12 @@ public int getHeight() {
134134
public RegionSize getMapSize() {
135135
return mapSize;
136136
}
137-
137+
138+
public Position clone()
139+
{
140+
return new Position(this.getX(), this.getY(), this.getHeight());
141+
}
142+
138143
@Override
139144
public String toString() {
140145
return "X: " + getX() + ", Y: " + getY() + ", Height: " + getHeight();

‎src/com/oldscape/shared/network/game/event/GameEventDecoder.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ protected void decode(ChannelHandlerContext ctx, GameFrame msg, List<Object> out
3838
if (decoder == null) {
3939

4040
System.err.println("No Decoder for: " + msg.getOpcode() + ", " + msg.getPayload().readableBytes());
41-
41+
new GameFrameReader(msg).getBytes(new byte[msg.getPayload().readableBytes()]);
4242
return;
4343
} else {
4444
//System.err.println("Decoder for: " + msg.getOpcode() + ", " + msg.getPayload().readableBytes()+" "+decoder.getClass().getCanonicalName());

0 commit comments

Comments
 (0)
Please sign in to comment.