You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.1 KiB

  1. //Local State
  2. const stagedZoneIns = [];
  3. //Methods
  4. //Fired when an object is removed through a socket dc
  5. // We do this because a client might DC during rezone handshake
  6. const unstageZoneIn = msg => {
  7. stagedZoneIns.spliceWhere(s => s.obj.serverId === msg.obj.id);
  8. };
  9. const stageZoneIn = msg => {
  10. const { serverId } = msg.obj;
  11. stagedZoneIns.spliceWhere(o => o.obj.serverId === serverId);
  12. stagedZoneIns.push(msg);
  13. };
  14. const doZoneIn = function (staged) {
  15. const { onAddObject, instances: [ { objects, questBuilder, eventEmitter } ] } = instancer;
  16. const { transfer: isTransfer, obj } = staged;
  17. if (!isTransfer)
  18. objects.addObject(obj, onAddObject.bind(instancer));
  19. else {
  20. let o = objects.transferObject(obj);
  21. questBuilder.obtain(o);
  22. eventEmitter.emit('onAfterPlayerEnterZone', o, { isTransfer });
  23. }
  24. };
  25. const clientAck = msg => {
  26. const staged = stagedZoneIns.find(s => s.obj.serverId === msg.sourceId);
  27. if (!staged)
  28. return;
  29. stagedZoneIns.spliceWhere(s => s === staged);
  30. doZoneIn(staged);
  31. };
  32. //Exports
  33. module.exports = {
  34. unstageZoneIn,
  35. stageZoneIn,
  36. clientAck
  37. };