Files
2006Scape/2006Redone Server/src/com/rebotted/world/ObjectHandler.java
T
Mr Extremez c5c1c2fc35 Cats/kalphite queen/random (#313)
- Did some work with the kalphite queen
2019-12-22 15:59:26 -05:00

275 lines
7.8 KiB
Java

package com.rebotted.world;
import java.util.ArrayList;
import java.util.List;
import com.rebotted.GameEngine;
import com.rebotted.game.content.skills.core.Mining;
import com.rebotted.game.content.skills.core.Woodcutting;
import com.rebotted.game.objects.Objects;
import com.rebotted.game.players.Client;
import com.rebotted.game.players.Player;
import com.rebotted.game.players.PlayerHandler;
import com.rebotted.util.Misc;
import com.rebotted.world.clip.Region;
/**
* @author Sanity
*/
public class ObjectHandler {
public List<Objects> globalObjects = new ArrayList<Objects>();
public static List<Objects> mapObjects = new ArrayList<Objects>();
public static List<Objects> removedObjects = new ArrayList<Objects>();
public ObjectHandler() {
}
public Objects getObjectByPosition(int x, int y) {
for (Objects o : globalObjects) {
for(int j = 0; j < globalObjects.size(); j++) {
globalObjects.get(j);
globalObjects.get(j);
if(o.objectX == x && o.objectY == y) {
return globalObjects.get(j);
}
}
}
return null;
}
public void createAnObject(int id, int x, int y, int face) {
Objects OBJECT = new Objects(id, x, y, 0, face, 10, 0);
if (id == -1) {
removeObject(OBJECT);
} else {
addObject(OBJECT);
}
//Server.canLoadObjects = true;
GameEngine.objectHandler.placeObject(OBJECT);
}
public void createAnObject(Player c, int id, int x, int y) {
Objects OBJECT = new Objects(id, x, y, c.heightLevel, 0, 10, 0);
if (id == -1) {
removeObject(OBJECT);
} else {
addObject(OBJECT);
}
GameEngine.objectHandler.placeObject(OBJECT);
}
public void createAnObject(Player player, int id, int x, int y, int face) {
Objects OBJECT = new Objects(id, x, y, 0, face, 10, 0);
if (id == -1) {
removeObject(OBJECT);
} else {
addObject(OBJECT);
}
GameEngine.objectHandler.placeObject(OBJECT);
}
public void createAnObject(int id, int x, int y) {
Objects OBJECT = new Objects(id, x, y, 0, 0, 10, 0);
if (id == -1) {
removeObject(OBJECT);
} else {
addObject(OBJECT);
}
GameEngine.objectHandler.placeObject(OBJECT);
}
/**
* Adds object to list
**/
public void addObject(Objects object) {
globalObjects.add(object);
}
/**
* Removes object from list
**/
public void removeObject(Objects object) {
globalObjects.remove(object);
}
/**
* Does object exist
**/
public Objects objectExists(int objectX, int objectY, int objectHeight) {
for (Objects o : globalObjects) {
if (o.getObjectX() == objectX && o.getObjectY() == objectY
&& o.getObjectHeight() == objectHeight) {
return o;
}
}
return null;
}
/**
* Update objects when entering a new region or logging in
**/
public void updateObjects(Player c) {
for (Objects o : globalObjects) {
if (c != null) {
if (c.heightLevel == 0 && o.objectTicks == 0 && c.distanceToPoint(o.getObjectX(), o.getObjectY()) <= 60) {
if (Woodcutting.playerTrees(c, o.getObjectId()) || Mining.rockExists(o.getObjectId())) {
c.getPacketSender().object(o.getObjectId(), o.getObjectX(), o.getObjectY(), 0, o.getObjectFace(), o.getObjectType());
}
}
if (c.heightLevel == o.getObjectHeight() && !Woodcutting.playerTrees(c, o.getObjectId()) && !Mining.rockExists(o.getObjectId()) && o.objectTicks == 0 && c.distanceToPoint(o.getObjectX(), o.getObjectY()) <= 60) {
c.getPacketSender().object(o.getObjectId(), o.getObjectX(), o.getObjectY(), c.heightLevel, o.getObjectFace(), o.getObjectType());
}
}
}
}
/**
* Creates the object for anyone who is within 60 squares of the object
**/
public void placeObject(Objects o) {
Region.addClipping(o.getObjectX(), o.getObjectY(), o.getObjectHeight(), 0);
for (Player p : PlayerHandler.players) {
if (p != null) {
Client person = (Client) p;
if (person.heightLevel == o.getObjectHeight()
&& o.objectTicks == 0) {
if (person.distanceToPoint(o.getObjectX(),
o.getObjectY()) <= 60) {
removeAllObjects(o);
globalObjects.add(o);
person.getPacketSender().object(
o.getObjectId(), o.getObjectX(),
o.getObjectY(), o.getObjectFace(),
o.getObjectType());
//Region.addObject(o.getObjectId(), o.getObjectX(), o.getObjectY(), o.getObjectHeight(), o.getObjectType(), o.getObjectFace(), true);
}
}
}
}
}
public void removeAllObjects(Objects o) {
//Using Iterator for concurrency
globalObjects.removeIf(s -> s.getObjectX() == o.getObjectX() &&
s.getObjectY() == o.getObjectY() &&
s.getObjectHeight() == o.getObjectHeight());
}
public void process() {
for (int j = 0; j < globalObjects.size(); j++) {
if (globalObjects.get(j) != null) {
Objects o = globalObjects.get(j);
if (o.objectTicks > 0) {
o.objectTicks--;
}
if (o.objectTicks == 1) {
Objects deleteObject = objectExists(o.getObjectX(),
o.getObjectY(), o.getObjectHeight());
removeObject(deleteObject);
o.objectTicks = 0;
placeObject(o);
removeObject(o);
if (isObelisk(o.objectId)) {
int index = getObeliskIndex(o.objectId);
if (activated[index]) {
activated[index] = false;
teleportObelisk(index);
}
}
}
}
}
}
public final int IN_USE_ID = 14825;
public boolean isObelisk(int id) {
for (int obeliskId : obeliskIds) {
if (obeliskId == id) {
return true;
}
}
return false;
}
public int[] obeliskIds = { 14829, 14830, 111235, 14828, 14826, 14831 };
public int[][] obeliskCoords = { { 3154, 3618 }, { 3225, 3665 },
{ 3033, 3730 }, { 3104, 3792 }, { 2978, 3864 }, { 3305, 3914 } };
public boolean[] activated = { false, false, false, false, false, false };
public void startObelisk(int obeliskId) {
int index = getObeliskIndex(obeliskId);
if (index >= 0) {
if (!activated[index]) {
activated[index] = true;
Objects obby1 = new Objects(14825, obeliskCoords[index][0],
obeliskCoords[index][1], 0, -1, 10, 0);
Objects obby2 = new Objects(14825, obeliskCoords[index][0] + 4,
obeliskCoords[index][1], 0, -1, 10, 0);
Objects obby3 = new Objects(14825, obeliskCoords[index][0],
obeliskCoords[index][1] + 4, 0, -1, 10, 0);
Objects obby4 = new Objects(14825, obeliskCoords[index][0] + 4,
obeliskCoords[index][1] + 4, 0, -1, 10, 0);
addObject(obby1);
addObject(obby2);
addObject(obby3);
addObject(obby4);
GameEngine.objectHandler.placeObject(obby1);
GameEngine.objectHandler.placeObject(obby2);
GameEngine.objectHandler.placeObject(obby3);
GameEngine.objectHandler.placeObject(obby4);
Objects obby5 = new Objects(obeliskIds[index],
obeliskCoords[index][0], obeliskCoords[index][1], 0,
-1, 10, 10);
Objects obby6 = new Objects(obeliskIds[index],
obeliskCoords[index][0] + 4, obeliskCoords[index][1],
0, -1, 10, 10);
Objects obby7 = new Objects(obeliskIds[index],
obeliskCoords[index][0], obeliskCoords[index][1] + 4,
0, -1, 10, 10);
Objects obby8 = new Objects(obeliskIds[index],
obeliskCoords[index][0] + 4,
obeliskCoords[index][1] + 4, 0, -1, 10, 10);
addObject(obby5);
addObject(obby6);
addObject(obby7);
addObject(obby8);
}
}
}
public int getObeliskIndex(int id) {
for (int j = 0; j < obeliskIds.length; j++) {
if (obeliskIds[j] == id) {
return j;
}
}
return -1;
}
public void teleportObelisk(int port) {
int random = Misc.random(5);
while (random == port) {
random = Misc.random(5);
}
for (Player player : PlayerHandler.players) {
if (player != null) {
Client c = (Client) player;
if (Misc.goodDistance(c.getX(), c.getY(),
obeliskCoords[port][0] + 2, obeliskCoords[port][1] + 2,
1)) {
c.getPlayerAssistant().startTeleport(
obeliskCoords[random][0] + 2,
obeliskCoords[random][1] + 2, 0, "null");
}
}
}
}
}