diff --git a/scripts/commands/boardshuttle.py b/scripts/commands/boardshuttle.py index cd19cf8f..b452c65d 100644 --- a/scripts/commands/boardshuttle.py +++ b/scripts/commands/boardshuttle.py @@ -6,21 +6,26 @@ def setup(): def run(core, actor, target, commandString): trvSvc = core.travelService ticketList = trvSvc.getTicketList(actor) - print ('command called') - if ticketList.size() >= 1: - trvSvc.sendTicketWindow(actor, target) + nearestPoint = trvSvc.getNearestTravelPoint(actor) + + print (nearestPoint.getName()) + if nearestPoint.isShuttleAvailable: + print ('inside nearestPoint if') + if ticketList.size() >= 1: + print ('inside list >= 1') + trvSvc.sendTicketWindow(actor, target) + print ('sent ticket window') + return + + elif ticketList.isEmpty: + actor.sendSystemMessage('You do not have a ticket to board this shuttle.', 0) + return + return - - elif ticketList.size() == 1: - planetArrival = ticketList.get[0].getStringAttribute('@obj_attr_n:travel_arrival_planet') - locationArrival = ticketList.get[0].getStringAttribute('@obj_attr_n:travel_arrival_point') - tpArrival = trvSvc.getTravelPointByName(planet, location) - - trvSvc.doTransport(actor, tpArrival) - - return - elif ticketList.isEmpty == True: - actor.sendSystemMessage("You don't have a travel ticket for this shuttle.", 0) - return - #--tp = core.travelService.getTravelPointByName(travelTicket.getStringAttribute('@obj_attr_n:travel_arrival_point')) - return \ No newline at end of file + + else: + actor.sendSystemMessage('The next shuttle will arrive in 60 seconds.', 0) + return + return + # NOTE: In NGE video from Jan. 4th, 2010, ticket purchase window is shown with just 1 ticket and does not + # automatically transport the player. diff --git a/scripts/commands/purchaseticket.py b/scripts/commands/purchaseticket.py index b14d8ca2..1f6de430 100644 --- a/scripts/commands/purchaseticket.py +++ b/scripts/commands/purchaseticket.py @@ -4,8 +4,6 @@ def setup(): return def run(core, actor, target, commandString): - #playerObject = actor.getSlottedObject('ghost') - #playerObject.setTitle(str(commandString)) #print ('Command string: ' + commandString) trvSvc = core.travelService @@ -16,7 +14,8 @@ def run(core, actor, target, commandString): departureLoc = cmdArgs[1].replace("_"," ") arrivalPlanet = cmdArgs[2] arrivalLoc = cmdArgs[3].replace("_", " ") - - trvSvc.purchaseTravelTicket(actor, departurePlanet, departureLoc, arrivalPlanet, arrivalLoc) + # 4 int + # 5 int + trvSvc.purchaseTravelTicket(actor, departurePlanet, departureLoc, arrivalPlanet, arrivalLoc, '1') return \ No newline at end of file diff --git a/scripts/commands/serverdestroyobject.py b/scripts/commands/serverdestroyobject.py index 5d3e2c60..ae58c794 100644 --- a/scripts/commands/serverdestroyobject.py +++ b/scripts/commands/serverdestroyobject.py @@ -24,6 +24,5 @@ def run(core, actor, target, commandString): parent.remove(target) core.objectService.destroyObject(target) - return \ No newline at end of file diff --git a/scripts/object/creature/npc/theme_park/player_transport.py b/scripts/object/creature/npc/theme_park/player_transport.py index 110d8aa8..3e7b455f 100644 --- a/scripts/object/creature/npc/theme_park/player_transport.py +++ b/scripts/object/creature/npc/theme_park/player_transport.py @@ -2,8 +2,6 @@ import sys def setup(core, object): object.setPosture(0) # land = 0 : away = 2 - #object.setOptionsBitmask(1) tp = core.travelService.getNearestTravelPoint(object) tp.setShuttle(object) - print ('assigned shuttle.') return \ No newline at end of file diff --git a/scripts/radial/npc_ticket_collector.py b/scripts/radial/npc_ticket_collector.py index 1cc0cc1c..78c5c409 100644 --- a/scripts/radial/npc_ticket_collector.py +++ b/scripts/radial/npc_ticket_collector.py @@ -8,7 +8,6 @@ def handleSelection(core, owner, target, option): trvSvc = core.travelService if option == 21 and target: core.commandService.callCommand(owner, 'boardshuttle', target, '') - print ('command called') return return diff --git a/scripts/radial/travel_terminal.py b/scripts/radial/travel_terminal.py index 934e0f92..f8b984fb 100644 --- a/scripts/radial/travel_terminal.py +++ b/scripts/radial/travel_terminal.py @@ -8,10 +8,14 @@ def createRadial(core, owner, target, radials): def handleSelection(core, owner, target, option): if option == 21 and target: - tpm = EnterTicketPurchaseModeMessage(owner.getPlanet().getName(), core.mapService.getClosestCityName(owner)) - owner.getClient().getSession().write(tpm.serialize()) - #print ('Planet name: ' + owner.getPlanet().getName()) - #print ('City name: ' + core.mapService.getClosestCityName(owner)) + print ('Owner: ' + str(owner.getObjectId())) + + if owner is not None: + tpm = EnterTicketPurchaseModeMessage(owner.getPlanet().getName(), core.mapService.getClosestCityName(owner), owner) + owner.getClient().getSession().write(tpm.serialize()) + print ('Planet name: ' + owner.getPlanet().getName()) + print ('City name: ' + core.mapService.getClosestCityName(owner)) + return return def handleSUI(owner, window, eventType, returnList): diff --git a/src/protocol/swg/EnterTicketPurchaseModeMessage.java b/src/protocol/swg/EnterTicketPurchaseModeMessage.java index 2c5c2315..05d53ad5 100644 --- a/src/protocol/swg/EnterTicketPurchaseModeMessage.java +++ b/src/protocol/swg/EnterTicketPurchaseModeMessage.java @@ -23,33 +23,42 @@ package protocol.swg; import java.nio.ByteOrder; +import main.NGECore; + import org.apache.mina.core.buffer.IoBuffer; +import services.travel.TravelPoint; +import engine.resources.objects.SWGObject; + public class EnterTicketPurchaseModeMessage extends SWGMessage { - public String planetName; - public String cityName; + private String planetName; + private String cityName; + private SWGObject player; - public EnterTicketPurchaseModeMessage(String planetName, String cityName) { + public EnterTicketPurchaseModeMessage(String planetName, String cityName, SWGObject player) { this.planetName = planetName; this.cityName = cityName; + this.player = player; } @Override public void deserialize(IoBuffer data) { - // TODO Auto-generated method stub } @Override public IoBuffer serialize() { - IoBuffer result = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); + final NGECore core = NGECore.getInstance(); + TravelPoint nearestPoint = core.travelService.getNearestTravelPoint(player); + + IoBuffer result = IoBuffer.allocate(20 + planetName.length() + nearestPoint.getName().length()).order(ByteOrder.LITTLE_ENDIAN); result.putShort((short) 3); result.putInt(0x904DAE1A); result.put(getAsciiString(planetName)); - result.put(getAsciiString(cityName + " Starport")); + result.put(getAsciiString(nearestPoint.getName())); return result.flip(); } diff --git a/src/protocol/swg/PlanetTravelPointListRequest.java b/src/protocol/swg/PlanetTravelPointListRequest.java index 51e37548..181bd631 100644 --- a/src/protocol/swg/PlanetTravelPointListRequest.java +++ b/src/protocol/swg/PlanetTravelPointListRequest.java @@ -37,15 +37,10 @@ public class PlanetTravelPointListRequest extends SWGMessage{ @Override public void deserialize(IoBuffer buffer) { - - //buffer.getShort(); - //buffer.getInt(); - + setObjectId(buffer.getLong()); setPlanet(getAsciiString(buffer)); - - //System.out.println("String: " + getAsciiString(buffer)); - + } @Override diff --git a/src/protocol/swg/PlanetTravelPointListResponse.java b/src/protocol/swg/PlanetTravelPointListResponse.java index 029b5f2f..131551fd 100644 --- a/src/protocol/swg/PlanetTravelPointListResponse.java +++ b/src/protocol/swg/PlanetTravelPointListResponse.java @@ -25,8 +25,6 @@ import java.nio.ByteOrder; import java.util.List; import java.util.Vector; -import main.NGECore; - import org.apache.mina.core.buffer.IoBuffer; import services.travel.TravelPoint; @@ -52,10 +50,11 @@ public class PlanetTravelPointListResponse extends SWGMessage { @Override public IoBuffer serialize() { - IoBuffer result = IoBuffer.allocate(700).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer result = IoBuffer.allocate(travelPoints.size() * 2).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); - result.putShort((short) 6); - result.putInt(0x4D32541F); + result.putShort((short) 6); //2 + result.putInt(0x4D32541F); //4 result.put(getAsciiString(planetString)); diff --git a/src/services/travel/TravelPoint.java b/src/services/travel/TravelPoint.java index 6ee051c5..c6f58870 100644 --- a/src/services/travel/TravelPoint.java +++ b/src/services/travel/TravelPoint.java @@ -42,7 +42,7 @@ public class TravelPoint { this.name = name; this.location = new Point3D(x, y, z); this.spawnLocation = new SpawnPoint(this.location, 0, 1); - this.shuttleAvailable = true; + this.shuttleAvailable = false; } public String getName() { @@ -91,6 +91,7 @@ public class TravelPoint { public void setShuttle(CreatureObject shuttleObj) { this.shuttle = shuttleObj; + this.shuttleAvailable = true; } public boolean isShuttleAvailable() { diff --git a/src/services/travel/TravelService.java b/src/services/travel/TravelService.java index 3d870a73..5408a92d 100644 --- a/src/services/travel/TravelService.java +++ b/src/services/travel/TravelService.java @@ -54,6 +54,7 @@ import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; import services.map.*; import services.sui.SUIService.ListBoxType; +import services.sui.SUIService.MessageBoxType; import services.sui.SUIWindow.SUICallback; import services.sui.SUIWindow.Trigger; import services.sui.SUIWindow; @@ -118,13 +119,15 @@ public class TravelService implements INetworkDispatch { if (tp.getShuttle() == null) continue; else { - if (!tp.isShuttleAvailable()) { + if (tp.isShuttleAvailable() == false) { tp.getShuttle().setPosture((byte) 0); tp.setShuttleAvailable(true); + System.out.println("Shuttle is available"); } else { tp.getShuttle().setPosture((byte) 2); tp.setShuttleAvailable(false); + System.out.println("Shuttle is not available."); } } } @@ -138,15 +141,18 @@ public class TravelService implements INetworkDispatch { } public TravelPoint getNearestTravelPoint(SWGObject obj) { TravelPoint returnedPoint = null; - Vector planetTp = travelMap.get(obj.getPlanet()); for (TravelPoint tp : planetTp) { //System.out.println("Distance for point " + tp.getName() + " is " + tp.getLocation().getDistance2D(obj.getWorldPosition())); - if (tp.getLocation().getDistance2D(obj.getWorldPosition()) <= 10) { + if (tp.getLocation().getDistance2D(obj.getWorldPosition()) <= 70) { returnedPoint = tp; } } + + if (returnedPoint == null) { + System.out.println("NULL TravelPoint!"); + } return returnedPoint; } @@ -229,7 +235,7 @@ public class TravelService implements INetworkDispatch { return travelTicket; } - public void purchaseTravelTicket(SWGObject player, String departurePlanet, String departureLoc, String arrivalPlanet, String arrivalLoc) { + public void purchaseTravelTicket(SWGObject player, String departurePlanet, String departureLoc, String arrivalPlanet, String arrivalLoc, String cost) { CreatureObject creatureObj = (CreatureObject) player; SWGObject travelTicket = createTravelTicket(departurePlanet, departureLoc, arrivalPlanet, arrivalLoc); @@ -237,15 +243,17 @@ public class TravelService implements INetworkDispatch { creatureObj.getSlottedObject("inventory").add(travelTicket); travelTicket.isSubChildOf(player); - creatureObj.sendSystemMessage("@travel:ticket_purchase_complete", (byte) 0); - System.out.println("Created travel ticket: " + departurePlanet + " " + departureLoc + " " + arrivalPlanet + " " + arrivalLoc); + SUIWindow window = core.suiService.createMessageBox(MessageBoxType.MESSAGE_BOX_OK, "STAR WARS GALAXIES", "Ticket purchase complete.", player, null, 0); + core.suiService.openSUIWindow(window); + + creatureObj.sendSystemMessage("You successfully make a payment of " + cost + "credits to the Galactic Travel Commission.", (byte) 0); } // This returns all ticket objects in a players inventory public Vector getTicketList(SWGObject player) { final Vector ticketList = new Vector(); - + final TravelPoint nearestPoint = getNearestTravelPoint(player); TangibleObject playerInventory = (TangibleObject) player.getSlottedObject("inventory"); playerInventory.viewChildren(player, false, false, new Traverser() { @@ -257,7 +265,8 @@ public class TravelService implements INetworkDispatch { if (obj.getAttachment("objType") != null) { String objType = (String) obj.getAttachment("objType"); String ticket = "ticket"; - if (objType.equals(ticket)) { + System.out.println("Nearest Point: " + nearestPoint.getName()); + if (objType.equals(ticket) && obj.getStringAttribute("@obj_attr_n:travel_departure_point").equals(nearestPoint.getName())) { ticketList.add(obj); } } @@ -309,19 +318,11 @@ public class TravelService implements INetworkDispatch { TravelPoint departurePoint = getNearestTravelPoint(creature); - if (departurePoint.getShuttle() == null) { - System.out.println("TravelPoint has no associated shuttle!"); - return; - } - if (departurePoint.isShuttleAvailable() == true) { selectedTicket.getContainer().remove(selectedTicket); core.objectService.destroyObject(selectedTicket); doTransport(creature, arrivalPoint); } - else { - creature.sendSystemMessage("The next shuttle arrives in " + " 60 seconds.", (byte) 0); - } } });