Advertisement
Guest User

Move OID

a guest
Feb 16th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.83 KB | None | 0 0
  1. /*
  2. Copyright <SWGEmu>
  3. See file COPYING for copying conditions. */
  4.  
  5. #ifndef CREATESPAWNINGELEMENTCOMMAND_H_
  6. #define CREATESPAWNINGELEMENTCOMMAND_H_
  7.  
  8. #include "templates/manager/TemplateManager.h"
  9. #include "server/zone/objects/scene/SceneObject.h"
  10. #include "server/zone/managers/player/PlayerManager.h"
  11. #include "server/zone/Zone.h"
  12. #include "server/zone/ZoneServer.h"
  13. #include "server/zone/managers/creature/CreatureManager.h"
  14. #include "server/zone/objects/tangible/TangibleObject.h"
  15. #include "templates/mobile/LairTemplate.h"
  16. #include "server/zone/managers/creature/CreatureTemplateManager.h"
  17. #include "server/zone/managers/structure/StructureManager.h"
  18. #include "server/zone/managers/objectcontroller/ObjectController.h"
  19. #include "templates/tangible/SharedStructureObjectTemplate.h"
  20.  
  21. class CreateSpawningElementCommand : public QueueCommand {
  22. public:
  23.  
  24. CreateSpawningElementCommand(const String& name, ZoneProcessServer* server)
  25. : QueueCommand(name, server) {
  26.  
  27. }
  28.  
  29. int doQueueCommand(CreatureObject* creature, const uint64& target, const UnicodeString& arguments) const
  30. {
  31.  
  32. if (!checkStateMask(creature))
  33. return INVALIDSTATE;
  34.  
  35. if (!checkInvalidLocomotions(creature))
  36. return INVALIDLOCOMOTION;
  37.  
  38. if (!creature->isPlayerCreature())
  39. return GENERALERROR;
  40.  
  41. ManagedReference<SceneObject* > object = server->getZoneServer()->getObject(target);
  42.  
  43. StringTokenizer args(arguments.toString());
  44.  
  45. CreatureObject* player = cast<CreatureObject*>(creature);
  46.  
  47.  
  48. if (player == NULL)
  49. return GENERALERROR;
  50.  
  51. if (!args.hasMoreTokens()) {
  52. creature->sendSystemMessage("Spawn: /createSpawningElement spawn IffObjectPath [x z y heading]");
  53. creature->sendSystemMessage("Spawn: /createSpawningElement lair lairTemplate [level]");
  54. creature->sendSystemMessage("Delete: /createSpawningElement delete oid");
  55. creature->sendSystemMessage("Move: /createSpawningElement move oid");
  56. creature->sendSystemMessage("Datapad: /createSpawningElement datapad oid");
  57. creature->sendSystemMessage("Inventory: /createSpawningElement inventory oid");
  58. return INVALIDPARAMETERS;
  59. }
  60.  
  61. String action;
  62. args.getStringToken(action);
  63.  
  64. ZoneServer* zserv = server->getZoneServer();
  65.  
  66. if (creature->getZone() == NULL)
  67. return GENERALERROR;
  68.  
  69. try {
  70. if (action.toLowerCase() == "lair") {
  71. String objectTemplate;
  72. args.getStringToken(objectTemplate);
  73. float x = creature->getPositionX();
  74. float y = creature->getPositionY();
  75. float z = creature->getPositionZ();
  76.  
  77. LairTemplate* lair = CreatureTemplateManager::instance()->getLairTemplate(objectTemplate.hashCode());
  78.  
  79. if (lair != NULL) {
  80. if (creature->getParent() != NULL) {
  81. creature->sendSystemMessage("You need to be outside and unmounted to spawn that");
  82.  
  83. return GENERALERROR;
  84. }
  85.  
  86. CreatureManager* creatureManager = creature->getZone()->getCreatureManager();
  87.  
  88. int level = 10;
  89. if (args.hasMoreTokens()) {
  90. level = args.getIntToken();
  91. }
  92.  
  93. if (level < 1)
  94. level = 1;
  95. else if (level > 300)
  96. level = 300;
  97.  
  98. SceneObject* sceno = creatureManager->spawn(objectTemplate.hashCode(), level, 2, x, z, y, 25);
  99.  
  100. if (sceno != NULL) {
  101. creature->sendSystemMessage("lair spawned");
  102. return SUCCESS;
  103. } else {
  104. creature->sendSystemMessage("error spawning lair");
  105. return GENERALERROR;
  106. }
  107.  
  108. }
  109. } else if (action.toLowerCase() == "spawn") {
  110. String objectTemplate;
  111. args.getStringToken(objectTemplate);
  112. float x = creature->getPositionX();
  113. float z = creature->getPositionZ();
  114. float y = creature->getPositionY();
  115. float heading = creature->getDirectionAngle();
  116.  
  117. if (args.hasMoreTokens())
  118. x = args.getFloatToken();
  119.  
  120. if (args.hasMoreTokens())
  121. z = args.getFloatToken();
  122.  
  123. if (args.hasMoreTokens())
  124. y = args.getFloatToken();
  125.  
  126. if (args.hasMoreTokens())
  127. heading = args.getFloatToken();
  128.  
  129. SharedStructureObjectTemplate* serverTemplate = dynamic_cast<SharedStructureObjectTemplate*>(TemplateManager::instance()->getTemplate(objectTemplate.hashCode()));
  130. if (serverTemplate != NULL) {
  131. if (creature->getParent() != NULL) {
  132. creature->sendSystemMessage("You need to be outside and unmounted to spawn a structure");
  133. return GENERALERROR;
  134. }
  135.  
  136. StructureObject* structure = StructureManager::instance()->placeStructure(creature, objectTemplate, x, y, heading, 0);
  137.  
  138. if (structure == NULL)
  139. return GENERALERROR;
  140.  
  141. creature->sendSystemMessage("oid: " + String::valueOf(structure->getObjectID()));
  142. return SUCCESS;
  143. }
  144.  
  145. ManagedReference<SceneObject*> object = zserv->createObject(objectTemplate.hashCode(), 0);
  146.  
  147. if (object == NULL)
  148. return GENERALERROR;
  149.  
  150. if (object->isIntangibleObject())
  151. return GENERALERROR;
  152.  
  153. ManagedReference<SceneObject*> parent = creature->getParent();
  154.  
  155. Locker clocker(object, creature);
  156.  
  157. object->initializePosition(x, z, y);
  158. object->setDirection(creature->getDirectionW(), creature->getDirectionX(), creature->getDirectionY(), creature->getDirectionZ());
  159.  
  160. if (parent != NULL && parent->isCellObject())
  161. parent->transferObject(object, -1);
  162. else
  163. creature->getZone()->transferObject(object, -1, true);
  164.  
  165. object->createChildObjects();
  166.  
  167. uint64 objectID = object->getObjectID();
  168. creature->sendSystemMessage("oid: " + String::valueOf(objectID));
  169.  
  170. } else if (action.toLowerCase() == "move") {
  171.  
  172. float x = creature->getPositionX();
  173. float y = creature->getPositionY();
  174. float z = creature->getPositionZ();
  175.  
  176. String chatObjectID;
  177. args.getStringToken(chatObjectID);
  178. uint64 oid = UnsignedLong::valueOf(chatObjectID);
  179.  
  180. ManagedReference<SceneObject*> object = zserv->getObject(oid);
  181. ManagedReference<SceneObject*> parent = creature->getParent();
  182.  
  183. if (object == NULL) {
  184. creature->sendSystemMessage("Error: Trying to move invalid oid.");
  185. return GENERALERROR;
  186. }
  187.  
  188. Locker clocker(object, creature);
  189.  
  190. object->initializePosition(x, z, y);
  191. object->setDirection(creature->getDirectionW(), creature->getDirectionX(), creature->getDirectionY(), creature->getDirectionZ());
  192.  
  193. if (parent != NULL && parent->isCellObject())
  194. parent->transferObject(object, -1);
  195. else
  196. creature->getZone()->transferObject(object, -1, true);
  197.  
  198. creature->sendSystemMessage("Object " + chatObjectID + " moved.");
  199.  
  200. } else if (action.toLowerCase() == "datapad") {
  201.  
  202. float x = creature->getPositionX();
  203. float y = creature->getPositionY();
  204. float z = creature->getPositionZ();
  205.  
  206. String chatObjectID;
  207. args.getStringToken(chatObjectID);
  208. uint64 oid = UnsignedLong::valueOf(chatObjectID);
  209.  
  210. ManagedReference<SceneObject*> object = zserv->getObject(oid);
  211. //ManagedReference<SceneObject*> parent = creature->getParent();
  212.  
  213. if (object == NULL) {
  214. creature->sendSystemMessage("Error: Trying to move invalid oid.");
  215. return GENERALERROR;
  216. }
  217.  
  218. Locker clocker(object, creature);
  219.  
  220. SceneObject* playerDatapad = creature->getSlottedObject("datapad");
  221.  
  222. ManagedReference<ObjectController*> objectController = server->getObjectController();
  223. objectController->transferObject(object, playerDatapad, -1, true);
  224. //ManagedReference<SceneObject*> obj = server->getObject(targID);
  225. //objectController->transferObject(item, receiverInventory, -1, true)
  226. //objectController->transferObject(objectToTransfer, destinationObject, transferType, true)
  227.  
  228. /*object->initializePosition(x, z, y);
  229. object->setDirection(creature->getDirectionW(), creature->getDirectionX(), creature->getDirectionY(), creature->getDirectionZ());
  230.  
  231. if (parent != NULL && parent->isCellObject())
  232. parent->transferObject(object, -1);
  233. else
  234. creature->getZone()->transferObject(object, -1, true);*/
  235.  
  236. creature->sendSystemMessage("Object " + chatObjectID + " moved.");
  237.  
  238. }else if (action.toLowerCase() == "inventory") {
  239.  
  240. float x = creature->getPositionX();
  241. float y = creature->getPositionY();
  242. float z = creature->getPositionZ();
  243.  
  244. String chatObjectID;
  245. args.getStringToken(chatObjectID);
  246. uint64 oid = UnsignedLong::valueOf(chatObjectID);
  247.  
  248. ManagedReference<SceneObject*> object = zserv->getObject(oid);
  249. ManagedReference<SceneObject*> parent = creature->getParent();
  250.  
  251. if (object == NULL) {
  252. creature->sendSystemMessage("Error: Trying to move invalid oid.");
  253. return GENERALERROR;
  254. }
  255.  
  256. Locker clocker(object, creature);
  257.  
  258. //object->initializePosition(x, z, y);
  259. //object->setDirection(creature->getDirectionW(), creature->getDirectionX(), creature->getDirectionY(), creature->getDirectionZ());
  260.  
  261. SceneObject* playerInventory = creature->getSlottedObject("inventory");
  262.  
  263. //creature->getZoneServer()->getObjectController()->transferObject(object, playerInventory, -1, true);
  264. ManagedReference<ObjectController*> objectController = server->getObjectController();
  265. objectController->transferObject(object, playerInventory, -1, true);
  266.  
  267. /*if (parent != NULL && parent->isCellObject())
  268. parent->transferObject(object, -1);
  269. else
  270. creature->getZone()->transferObject(object, -1, true);*/
  271.  
  272. creature->sendSystemMessage("Object " + chatObjectID + " moved.");
  273.  
  274. } else if (action.toLowerCase() == "movecc") {
  275.  
  276. float x = creature->getPositionX();
  277. float y = creature->getPositionY();
  278. float z = creature->getPositionZ();
  279.  
  280. String chatObjectID;
  281. args.getStringToken(chatObjectID);
  282. uint64 oid = UnsignedLong::valueOf(chatObjectID);
  283.  
  284. ManagedReference<SceneObject*> object = zserv->getObject(oid);
  285. ManagedReference<SceneObject*> parent = creature->getParent();
  286.  
  287. if (object == NULL) {
  288. creature->sendSystemMessage("Error: Trying to move invalid oid.");
  289. return GENERALERROR;
  290. }
  291.  
  292. Locker clocker(object, creature);
  293.  
  294. object->initializePosition(x, z, y);
  295. object->setDirection(creature->getDirectionW(), creature->getDirectionX(), creature->getDirectionY(), creature->getDirectionZ());
  296.  
  297. if (parent != NULL && parent->isCellObject())
  298. parent->transferObject(object, -1);
  299. else
  300. creature->getZone()->transferObject(object, -1, true);
  301.  
  302. object->createChildObjects();
  303.  
  304. creature->sendSystemMessage("Object " + chatObjectID + " moved.");
  305.  
  306. } else if (action.toLowerCase() == "delete") {
  307.  
  308. String chatObjectID;
  309. args.getStringToken(chatObjectID);
  310. uint64 oid = UnsignedLong::valueOf(chatObjectID);
  311.  
  312. ManagedReference<SceneObject*> object = zserv->getObject(oid);
  313.  
  314. if (object == NULL) {
  315. creature->sendSystemMessage("Error: Trying to delete invalid oid.");
  316. return GENERALERROR;
  317. }
  318.  
  319. for (int i = 0; i < object->getArrangementDescriptorSize(); ++i) {
  320. const Vector<String>* descriptors = object->getArrangementDescriptor(i);
  321.  
  322. for (int j = 0; j < descriptors->size(); ++j) {
  323. const String& descriptor = descriptors->get(j);
  324.  
  325. if (descriptor == "inventory" || descriptor == "datapad" || descriptor == "default_weapon"
  326. || descriptor == "mission_bag" || descriptor == "ghost" || descriptor == "bank" || descriptor == "hair")
  327. return GENERALERROR;
  328. }
  329. }
  330.  
  331. Locker clocker(object, creature);
  332.  
  333. object->destroyObjectFromWorld(true);
  334.  
  335. if (object->isPersistent()) {
  336. object->destroyObjectFromDatabase(true);
  337. }
  338.  
  339. creature->sendSystemMessage("Object " + chatObjectID + " deleted.");
  340.  
  341. }
  342. } catch (Exception& e) {
  343. creature->sendSystemMessage("Spawn: /createSpawningElement spawn IffObjectPath [x z y heading]");
  344. creature->sendSystemMessage("Spawn: /createSpawningElement lair lairTemplate [level]");
  345. creature->sendSystemMessage("Delete: /createSpawningElement delete oid");
  346. }
  347.  
  348. return SUCCESS;
  349. }
  350.  
  351. };
  352.  
  353. #endif //CREATESPAWNINGELEMENTCOMMAND_H_
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement