mirror of
https://github.com/ProjectSWGCore/NGECore2.git
synced 2026-08-27 17:57:22 -04:00
more cleanup + fixes
Harvesters and house terminal work now
This commit is contained in:
@@ -60,6 +60,7 @@ odb/chatRooms/je.info.*
|
||||
odb/resourcehistory/je.info.*
|
||||
odb/resourceroots/je.info.*
|
||||
odb/resources/je.info.*
|
||||
odb/auction/je.info.*
|
||||
|
||||
# External tool builders
|
||||
.externalToolBuilders/
|
||||
|
||||
@@ -150,7 +150,10 @@ public class BuildingObject extends TangibleObject implements IPersistent {
|
||||
|
||||
public Vector<TangibleObject> getItemsList() {
|
||||
Vector<TangibleObject> items = new Vector<TangibleObject>();
|
||||
getCells().forEach(c -> c.viewChildren(c, true, false, (item) -> items.add((TangibleObject) item)));
|
||||
getCells().forEach(c -> c.viewChildren(c, true, false, (item) -> {
|
||||
if(!(item instanceof CreatureObject))
|
||||
items.add((TangibleObject) item);
|
||||
}));
|
||||
return items;
|
||||
}
|
||||
|
||||
@@ -237,8 +240,11 @@ public class BuildingObject extends TangibleObject implements IPersistent {
|
||||
}
|
||||
|
||||
public Vector<CellObject> getCells() {
|
||||
Vector<CellObject> cells = new Vector<CellObject>();
|
||||
this.viewChildren(this, true, false, (cell) -> cells.add((CellObject) cell));
|
||||
final Vector<CellObject> cells = new Vector<CellObject>();
|
||||
this.viewChildren(this, true, false, (obj) -> {
|
||||
if(obj instanceof CellObject)
|
||||
cells.add((CellObject) obj);
|
||||
});
|
||||
return cells;
|
||||
}
|
||||
|
||||
|
||||
@@ -394,97 +394,7 @@ public class HarvesterObject extends InstallationObject {
|
||||
public void placeHarvester(){
|
||||
NGECore.getInstance().objectService.getObject(owner).getClient().getSession().write(messageBuilder.buildResourceHarvesterActivatePageMessage(this));
|
||||
}
|
||||
|
||||
public static void createAndPlaceHarvester(SWGObject object){
|
||||
CreatureObject actor = (CreatureObject) object.getAttachment("Owner");
|
||||
|
||||
String structureTemplate = (String)object.getAttachment("Deed_StructureTemplate");
|
||||
HarvesterObject harvester = (HarvesterObject) NGECore.getInstance().objectService.createObject(structureTemplate, actor.getPlanet());
|
||||
long objectId = harvester.getObjectID();
|
||||
|
||||
Vector<String> adminList = harvester.getAdminList();
|
||||
String[] fullName = ((CreatureObject)actor).getCustomName().split(" ");
|
||||
adminList.add(fullName[0]);
|
||||
harvester.setAdminList(adminList);
|
||||
// Set BER and outputhopper capacity here, take it from deed
|
||||
harvester.setBER((int)object.getAttachment("Deed_BER"));
|
||||
harvester.setSpecRate((int)(1.5F*(int)object.getAttachment("Deed_BER")));
|
||||
harvester.setOutputHopperCapacity((int)object.getAttachment("Deed_Capacity"));
|
||||
harvester.setDeedTemplate((String)object.getAttachment("Deed_DeedTemplate"));
|
||||
if ((int)object.getAttachment("Deed_SurplusMaintenance")>0){
|
||||
harvester.setMaintenanceAmount((int)object.getAttachment("Deed_SurplusMaintenance"));
|
||||
}
|
||||
if ((int)object.getAttachment("Deed_SurplusPower")>0){
|
||||
harvester.setPowerLevel((int)object.getAttachment("Deed_SurplusPower"));
|
||||
}
|
||||
|
||||
|
||||
// build harvester
|
||||
int resCRC = CRC.StringtoCRC(structureTemplate);
|
||||
float positionY = NGECore.getInstance().terrainService.getHeight(actor.getPlanetId(), object.getPosition().x, object.getPosition().z);
|
||||
SceneCreateObjectByCrc createObjectMsg = new SceneCreateObjectByCrc(objectId, object.getOrientation().x, object.getOrientation().y, object.getOrientation().z, object.getOrientation().w, object.getPosition().x, positionY, object.getPosition().z, resCRC, (byte) 0);
|
||||
actor.getClient().getSession().write(createObjectMsg.serialize());
|
||||
tools.CharonPacketUtils.printAnalysis(createObjectMsg.serialize());
|
||||
|
||||
harvester.setPosition(new Point3D(object.getPosition().x,positionY, object.getPosition().z));
|
||||
|
||||
resources.objects.installation.InstallationMessageBuilder messenger = new resources.objects.installation.InstallationMessageBuilder((InstallationObject)harvester);
|
||||
actor.getClient().getSession().write(messenger.buildBaseline3((InstallationObject)harvester));
|
||||
SceneEndBaselines sceneEndBaselinesMsg = new SceneEndBaselines(harvester.getObjectID());
|
||||
actor.getClient().getSession().write(sceneEndBaselinesMsg.serialize());
|
||||
tools.CharonPacketUtils.printAnalysis(sceneEndBaselinesMsg.serialize());
|
||||
|
||||
PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost");
|
||||
WaypointObject constructionWaypoint = (WaypointObject)NGECore.getInstance().objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", actor.getPlanet(), harvester.getPosition().x, 0 ,harvester.getPosition().z);
|
||||
String displayname = "@installation_n:"+harvester.getStfName();
|
||||
constructionWaypoint.setName(displayname);
|
||||
constructionWaypoint.setPlanetCRC(engine.resources.common.CRC.StringtoCRC(actor.getPlanet().getName()));
|
||||
constructionWaypoint.setPosition(new Point3D(object.getPosition().x,0, object.getPosition().z));
|
||||
player.waypointAdd(constructionWaypoint);
|
||||
constructionWaypoint.setPosition(new Point3D(object.getPosition().x,0, object.getPosition().z));
|
||||
constructionWaypoint.setActive(true);
|
||||
constructionWaypoint.setColor((byte)1);
|
||||
constructionWaypoint.setStringAttribute("", "");
|
||||
player.waypointAdd(constructionWaypoint);
|
||||
constructionWaypoint.setName(displayname);
|
||||
constructionWaypoint.setPlanetCRC(engine.resources.common.CRC.StringtoCRC(actor.getPlanet().getName()));
|
||||
player.setLastSurveyWaypoint(constructionWaypoint);
|
||||
|
||||
List<WaypointAttachment> attachments = new ArrayList<WaypointAttachment>();
|
||||
WaypointAttachment attachment = new WaypointAttachment();
|
||||
attachment.active = true;
|
||||
attachment.cellID = constructionWaypoint.getCellId();
|
||||
attachment.color = (byte)1;
|
||||
attachment.name = displayname;
|
||||
attachment.planetCRC = engine.resources.common.CRC.StringtoCRC(actor.getPlanet().getName());
|
||||
attachment.positionX = object.getPosition().x;
|
||||
attachment.positionY = 0;
|
||||
attachment.positionZ = object.getPosition().z;
|
||||
attachments.add(attachment);
|
||||
|
||||
// remove constructor
|
||||
NGECore.getInstance().objectService.destroyObject(object);
|
||||
SceneDestroyObject destroyObjectMsg = new SceneDestroyObject(object.getObjectID());
|
||||
actor.getClient().getSession().write(destroyObjectMsg.serialize());
|
||||
|
||||
// ToDo: waypoint attachment fix
|
||||
Date date = new Date();
|
||||
Mail constructionNotificationMail = new Mail();
|
||||
constructionNotificationMail.setSenderName("Structure Service");
|
||||
constructionNotificationMail.setSubject("Your structure");
|
||||
constructionNotificationMail.setRecieverId(actor.getObjectID());
|
||||
constructionNotificationMail.setTimeStamp((int) (date.getTime() / 1000));
|
||||
constructionNotificationMail.setMailId(NGECore.getInstance().chatService.generateMailId());
|
||||
String message = "Your construction is ready";
|
||||
constructionNotificationMail.setMessage(message);
|
||||
constructionNotificationMail.setStatus(Mail.NEW);
|
||||
constructionNotificationMail.setAttachments(attachments);
|
||||
//NGECore.getInstance().chatService.sendPersistentMessage(actor.getClient(), constructionNotificationMail);
|
||||
NGECore.getInstance().chatService.storePersistentMessage(constructionNotificationMail);
|
||||
NGECore.getInstance().chatService.sendPersistentMessageHeader(actor.getClient(), constructionNotificationMail);
|
||||
|
||||
}
|
||||
|
||||
public void createNewHopperContainer(){
|
||||
Vector<GalacticResource> planetResourcesVector = NGECore.getInstance().resourceService.getSpawnedResourcesByPlanetAndHarvesterType(this.getPlanetId(),this.getHarvester_type());
|
||||
NGECore.getInstance().objectService.getObject(owner).getClient().getSession().write(messageBuilder.buildHINOBaseline7(this, planetResourcesVector));
|
||||
@@ -506,16 +416,10 @@ public class HarvesterObject extends InstallationObject {
|
||||
return;
|
||||
}
|
||||
|
||||
destination.getSession().write(messageBuilder.buildBaseline3());
|
||||
destination.getSession().write(messageBuilder.buildBaseline6());
|
||||
destination.getSession().write(messageBuilder.buildBaseline8());
|
||||
destination.getSession().write(messageBuilder.buildBaseline9());
|
||||
destination.getSession().write(installationMessageBuilder.buildBaseline3(this));
|
||||
//destination.getSession().write(installationMessageBuilder.buildBaseline6(this));
|
||||
//destination.getSession().write(installationMessageBuilder.buildBaseline8());
|
||||
//destination.getSession().write(installationMessageBuilder.buildBaseline9());
|
||||
|
||||
if(getPvPBitmask() != 0) {
|
||||
UpdatePVPStatusMessage upvpm = new UpdatePVPStatusMessage(getObjectID());
|
||||
upvpm.setFaction(UpdatePVPStatusMessage.factionCRC.Neutral);
|
||||
upvpm.setStatus(getPvPBitmask());
|
||||
destination.getSession().write(upvpm.serialize());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ package resources.objects.installation;
|
||||
import com.sleepycat.persist.model.Entity;
|
||||
import com.sleepycat.persist.model.Persistent;
|
||||
|
||||
import engine.clients.Client;
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.scene.Quaternion;
|
||||
@@ -35,4 +36,9 @@ public class InstallationObject extends TangibleObject {
|
||||
public InstallationObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){
|
||||
super(objectID, planet, template, position, orientation);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendBaselines(Client destination) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -276,8 +276,6 @@ public class HousingService implements INetworkDispatch {
|
||||
deed.setSurplusMaintenance((int)building.getMaintenanceAmount());
|
||||
deed.setAttributes();
|
||||
|
||||
SceneDestroyObject destroyObjectMsg = new SceneDestroyObject(building.getObjectID());
|
||||
owner.getClient().getSession().write(destroyObjectMsg.serialize());
|
||||
core.objectService.destroyObject(building.getObjectID());
|
||||
|
||||
SWGObject ownerInventory = owner.getSlottedObject("inventory");
|
||||
|
||||
@@ -54,6 +54,7 @@ import org.python.core.Py;
|
||||
import org.python.core.PyObject;
|
||||
|
||||
import com.sleepycat.je.Transaction;
|
||||
import com.sleepycat.je.TransactionConfig;
|
||||
import com.sleepycat.persist.EntityCursor;
|
||||
import com.sleepycat.persist.model.Entity;
|
||||
import com.sleepycat.persist.model.PrimaryKey;
|
||||
@@ -976,7 +977,8 @@ public class ObjectService implements INetworkDispatch {
|
||||
CrcStringTableVisitor crcTable = ClientFileManager.loadFile("misc/object_template_crc_string_table.iff", CrcStringTableVisitor.class);
|
||||
List<BuildingObject> persistentBuildings = new ArrayList<BuildingObject>();
|
||||
Map<Long, Long> duplicate = new HashMap<Long, Long>();
|
||||
|
||||
Transaction txn = core.getDuplicateIdODB().getEnvironment().beginTransaction(null, null);
|
||||
|
||||
for (int i = 0; i < buildoutTable.getRowCount(); i++) {
|
||||
|
||||
String template;
|
||||
@@ -1055,15 +1057,17 @@ public class ObjectService implements INetworkDispatch {
|
||||
newObjectId = core.getDuplicateIdODB().get(key, String.class, DuplicateId.class).getObjectId();
|
||||
} else {
|
||||
newObjectId = generateObjectID();
|
||||
Transaction txn = core.getDuplicateIdODB().getEnvironment().beginTransaction(null, null);
|
||||
core.getDuplicateIdODB().put(new DuplicateId(key, newObjectId), String.class, DuplicateId.class, txn);
|
||||
txn.commitSync();
|
||||
}
|
||||
|
||||
duplicate.put(objectId, newObjectId);
|
||||
objectId = newObjectId;
|
||||
}
|
||||
|
||||
if(txn.isValid()) {
|
||||
System.out.println("Committed doid transaction.");
|
||||
txn.commitSync();
|
||||
}
|
||||
|
||||
List<Long> containers = new ArrayList<Long>();
|
||||
SWGObject object;
|
||||
if(objectId != 0 && containerId == 0) {
|
||||
|
||||
@@ -21,8 +21,11 @@
|
||||
******************************************************************************/
|
||||
package services.resources;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.Vector;
|
||||
@@ -30,6 +33,7 @@ import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import protocol.swg.EnterStructurePlacementModeMessage;
|
||||
import protocol.swg.SceneCreateObjectByCrc;
|
||||
import protocol.swg.SceneDestroyObject;
|
||||
@@ -53,6 +57,8 @@ import resources.objects.resource.ResourceContainerObject;
|
||||
import resources.objects.resource.ResourceRoot;
|
||||
import resources.objects.tangible.TangibleObject;
|
||||
import resources.objects.waypoint.WaypointObject;
|
||||
import services.chat.Mail;
|
||||
import services.chat.WaypointAttachment;
|
||||
import services.sui.SUIWindow;
|
||||
import services.sui.SUIWindow.SUICallback;
|
||||
import services.sui.SUIWindow.Trigger;
|
||||
@@ -383,8 +389,6 @@ public class HarvesterService implements INetworkDispatch {
|
||||
deed.setSurplusPower((int)harvester.getPowerLevel());
|
||||
deed.setAttributes();
|
||||
|
||||
SceneDestroyObject destroyObjectMsg = new SceneDestroyObject(harvester.getObjectID());
|
||||
owner.getClient().getSession().write(destroyObjectMsg.serialize());
|
||||
core.objectService.destroyObject(harvester.getObjectID());
|
||||
|
||||
SWGObject crafterInventory = owner.getSlottedObject("inventory");
|
||||
@@ -557,9 +561,7 @@ public class HarvesterService implements INetworkDispatch {
|
||||
int containerEnergy = containerVector.get(i).getStackCount();
|
||||
if (containerEnergy <= deductedEnergy){
|
||||
deductedEnergy -= containerEnergy;
|
||||
playerInventory._remove(containerVector.get(i));
|
||||
SceneDestroyObject destroyObjectMsg = new SceneDestroyObject(containerVector.get(i).getObjectID());
|
||||
owner.getClient().getSession().write(destroyObjectMsg.serialize());
|
||||
playerInventory.remove(containerVector.get(i));
|
||||
} else {
|
||||
containerEnergy -= deductedEnergy;
|
||||
containerVector.get(i).setStackCount(containerEnergy,(CreatureObject)owner);
|
||||
@@ -888,17 +890,9 @@ public class HarvesterService implements INetworkDispatch {
|
||||
|
||||
// destroy deed
|
||||
TangibleObject playerInventory = (TangibleObject) actor.getSlottedObject("inventory");
|
||||
playerInventory._remove(usedDeed);
|
||||
SceneDestroyObject destroyObjectMsg = new SceneDestroyObject(usedDeed.getObjectID());
|
||||
actor.getClient().getSession().write(destroyObjectMsg.serialize());
|
||||
playerInventory.remove(usedDeed);
|
||||
|
||||
int resCRC = CRC.StringtoCRC(constructorTemplate);
|
||||
SceneCreateObjectByCrc createObjectMsg = new SceneCreateObjectByCrc(installation.getObjectID(), quaternion.x, quaternion.y, quaternion.z, quaternion.w, posX, positionY, posZ, resCRC, (byte) 0);
|
||||
actor.getClient().getSession().write(createObjectMsg.serialize());
|
||||
tools.CharonPacketUtils.printAnalysis(createObjectMsg.serialize());
|
||||
SceneEndBaselines sceneEndBaselinesMsg = new SceneEndBaselines(installation.getObjectID());
|
||||
actor.getClient().getSession().write(sceneEndBaselinesMsg.serialize());
|
||||
tools.CharonPacketUtils.printAnalysis(sceneEndBaselinesMsg.serialize());
|
||||
core.simulationService.add(installation, posX, posZ, true);
|
||||
|
||||
PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost");
|
||||
player.setLotsRemaining(player.getLotsRemaining()-(int)((Harvester_Deed)usedDeed).getLotRequirement());
|
||||
@@ -907,8 +901,81 @@ public class HarvesterService implements INetworkDispatch {
|
||||
}
|
||||
}
|
||||
|
||||
public void placeHarvester(SWGObject object){
|
||||
HarvesterObject.createAndPlaceHarvester(object);
|
||||
public void placeHarvester(SWGObject object) {
|
||||
CreatureObject actor = (CreatureObject) object.getAttachment("Owner");
|
||||
|
||||
String structureTemplate = (String)object.getAttachment("Deed_StructureTemplate");
|
||||
HarvesterObject harvester = (HarvesterObject) NGECore.getInstance().objectService.createObject(structureTemplate, actor.getPlanet());
|
||||
long objectId = harvester.getObjectID();
|
||||
|
||||
Vector<String> adminList = harvester.getAdminList();
|
||||
//String[] fullName = ((CreatureObject)actor).getCustomName().split(" ");
|
||||
adminList.add(actor.getCustomName());
|
||||
// Set BER and outputhopper capacity here, take it from deed
|
||||
harvester.setBER((int)object.getAttachment("Deed_BER"));
|
||||
harvester.setSpecRate((int)(1.5F*(int)object.getAttachment("Deed_BER")));
|
||||
harvester.setOutputHopperCapacity((int)object.getAttachment("Deed_Capacity"));
|
||||
harvester.setDeedTemplate((String)object.getAttachment("Deed_DeedTemplate"));
|
||||
if ((int)object.getAttachment("Deed_SurplusMaintenance")>0){
|
||||
harvester.setMaintenanceAmount((int)object.getAttachment("Deed_SurplusMaintenance"));
|
||||
}
|
||||
if ((int)object.getAttachment("Deed_SurplusPower")>0){
|
||||
harvester.setPowerLevel((int)object.getAttachment("Deed_SurplusPower"));
|
||||
}
|
||||
|
||||
|
||||
// build harvester
|
||||
float positionY = NGECore.getInstance().terrainService.getHeight(actor.getPlanetId(), object.getPosition().x, object.getPosition().z);
|
||||
harvester.setPosition(new Point3D(object.getPosition().x,positionY, object.getPosition().z));
|
||||
core.simulationService.add(harvester, harvester.getPosition().x, harvester.getPosition().x, true);
|
||||
|
||||
|
||||
PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost");
|
||||
WaypointObject constructionWaypoint = (WaypointObject)NGECore.getInstance().objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", actor.getPlanet(), harvester.getPosition().x, 0 ,harvester.getPosition().z);
|
||||
String displayname = "@installation_n:"+harvester.getStfName();
|
||||
constructionWaypoint.setName(displayname);
|
||||
constructionWaypoint.setPlanetCRC(engine.resources.common.CRC.StringtoCRC(actor.getPlanet().getName()));
|
||||
constructionWaypoint.setPosition(new Point3D(object.getPosition().x,0, object.getPosition().z));
|
||||
player.waypointAdd(constructionWaypoint);
|
||||
constructionWaypoint.setPosition(new Point3D(object.getPosition().x,0, object.getPosition().z));
|
||||
constructionWaypoint.setActive(true);
|
||||
constructionWaypoint.setColor((byte)1);
|
||||
constructionWaypoint.setStringAttribute("", "");
|
||||
player.waypointAdd(constructionWaypoint);
|
||||
constructionWaypoint.setName(displayname);
|
||||
constructionWaypoint.setPlanetCRC(engine.resources.common.CRC.StringtoCRC(actor.getPlanet().getName()));
|
||||
player.setLastSurveyWaypoint(constructionWaypoint);
|
||||
|
||||
List<WaypointAttachment> attachments = new ArrayList<WaypointAttachment>();
|
||||
WaypointAttachment attachment = new WaypointAttachment();
|
||||
attachment.active = true;
|
||||
attachment.cellID = constructionWaypoint.getCellId();
|
||||
attachment.color = (byte)1;
|
||||
attachment.name = displayname;
|
||||
attachment.planetCRC = engine.resources.common.CRC.StringtoCRC(actor.getPlanet().getName());
|
||||
attachment.positionX = object.getPosition().x;
|
||||
attachment.positionY = 0;
|
||||
attachment.positionZ = object.getPosition().z;
|
||||
attachments.add(attachment);
|
||||
|
||||
// remove constructor
|
||||
NGECore.getInstance().objectService.destroyObject(object);
|
||||
|
||||
// ToDo: waypoint attachment fix
|
||||
Date date = new Date();
|
||||
Mail constructionNotificationMail = new Mail();
|
||||
constructionNotificationMail.setSenderName("Structure Service");
|
||||
constructionNotificationMail.setSubject("Your structure");
|
||||
constructionNotificationMail.setRecieverId(actor.getObjectID());
|
||||
constructionNotificationMail.setTimeStamp((int) (date.getTime() / 1000));
|
||||
constructionNotificationMail.setMailId(NGECore.getInstance().chatService.generateMailId());
|
||||
String message = "Your construction is ready";
|
||||
constructionNotificationMail.setMessage(message);
|
||||
constructionNotificationMail.setStatus(Mail.NEW);
|
||||
constructionNotificationMail.setAttachments(attachments);
|
||||
//NGECore.getInstance().chatService.sendPersistentMessage(actor.getClient(), constructionNotificationMail);
|
||||
NGECore.getInstance().chatService.storePersistentMessage(constructionNotificationMail);
|
||||
NGECore.getInstance().chatService.sendPersistentMessageHeader(actor.getClient(), constructionNotificationMail);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -99,13 +99,15 @@ public class SUIService implements INetworkDispatch {
|
||||
if (! admins.contains(owner.getCustomName()) && hoppers.contains(owner.getCustomName())){
|
||||
// authorized for hopper
|
||||
// change radialOptions to hopper access
|
||||
harvester.setAttachment("radial_filename", "harvesterHopper");
|
||||
core.scriptService.callScript("scripts/radial/", "harvesterHopper", "createRadial", core, owner, target, request.getRadialOptions());
|
||||
sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(target.getGrandparent() != null && target.getGrandparent().getAttachment("structureAdmins") != null)
|
||||
{
|
||||
if(core.housingService.getPermissions(owner, target.getContainer()))
|
||||
if(core.housingService.getPermissions(owner, target.getContainer()) && !getRadialFilename(target).equals("structure_management_terminal"))
|
||||
{
|
||||
core.scriptService.callScript("scripts/radial/", "moveable", "createRadial", core, owner, target, request.getRadialOptions());
|
||||
sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount());
|
||||
|
||||
Reference in New Issue
Block a user