diff --git a/scripts/object/building/tatooine/starport_tatooine.py b/scripts/object/building/tatooine/starport_tatooine.py index 0200b779..34468ac1 100644 --- a/scripts/object/building/tatooine/starport_tatooine.py +++ b/scripts/object/building/tatooine/starport_tatooine.py @@ -9,8 +9,6 @@ def setup(core, object): stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(3.1), float(0.6), float(49), float(0), float(1)) stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(-2.7), float(0.6), float(49), float(0), float(1)) stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(-13.2), float(0.6), float(51.3), float(-0.195405), float(-0.980722)) - core.mapService.addLocation(object.getPlanet(), 'Starport', object.getPosition().x, object.getPosition().z, 15, 0, 0) - #core.travelService.addTravelPoint(object.getPlanet(), ) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_travel.py b/scripts/object/tangible/terminal/terminal_travel.py index ccad8904..160aac1c 100644 --- a/scripts/object/tangible/terminal/terminal_travel.py +++ b/scripts/object/tangible/terminal/terminal_travel.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'travel_terminal') return \ No newline at end of file diff --git a/scripts/radial/travel_terminal.py b/scripts/radial/travel_terminal.py new file mode 100644 index 00000000..e331c16b --- /dev/null +++ b/scripts/radial/travel_terminal.py @@ -0,0 +1,18 @@ +from resources.common import RadialOptions +from protocol.swg import EnterTicketPurchaseModeMessage +import sys + +def createRadial(core, owner, target, radials): + return + +def handleSelection(core, owner, target, option): + + if option == 21 and target: + tpm = EnterTicketPurchaseModeMessage() + owner.getClient().getSession().write(tpm.serialize()) + #print ('Sent EnterTicketPurchaseModeMessage!') + return + +def handleSUI(owner, window, eventType, returnList): + + return \ No newline at end of file diff --git a/scripts/static_travel_points.py b/scripts/static_travel_points.py index 58baf244..0b24cbbd 100644 --- a/scripts/static_travel_points.py +++ b/scripts/static_travel_points.py @@ -10,8 +10,8 @@ def addPoints(core, planet): def tatooinePoints(core, planet): trvSvc = core.travelService - trvSvc.addTravelPoint("tatooine", "Bestine Starport", -1376, 12, -3576) - trvSvc.addTravelPoint("tatooine", "Mos Eisley Starport", 3619, 5, -4801) - trvSvc.addTravelPoint("tatooine", "Mos Espa Starport", -2829, 5, 2080) - trvSvc.addTravelPoint("tatooine", "Mos Entha Starport", 1238, 7, 3062) + trvSvc.addTravelPoint(planet, "Bestine Starport", -1376, 12, -3576) + trvSvc.addTravelPoint(planet, "Mos Eisley Starport", 3619, 5, -4801) + trvSvc.addTravelPoint(planet, "Mos Espa Starport", -2829, 5, 2080) + trvSvc.addTravelPoint(planet, "Mos Entha Starport", 1238, 7, 3062) return \ No newline at end of file diff --git a/src/main/NGECore.java b/src/main/NGECore.java index 0ebb0880..dc90f6db 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -31,6 +31,8 @@ import java.util.concurrent.ConcurrentHashMap; + + import resources.common.RadialOptions; import resources.objects.creature.CreatureObject; import services.AttributeService; @@ -56,6 +58,7 @@ import services.object.ObjectService; import services.object.UpdateService; import services.sui.SUIService; import services.trade.TradeService; +import services.travel.TravelService; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.CrcStringTableVisitor; import engine.clientdata.visitors.DatatableVisitor; @@ -120,6 +123,7 @@ public class NGECore { public StaticService staticService; public GroupService groupService; public SkillModService skillModService; + public TravelService travelService; // Login Server public NetworkDispatch loginDispatch; @@ -173,6 +177,7 @@ public class NGECore { buffService = new BuffService(this); groupService = new GroupService(this); skillModService = new SkillModService(this); + travelService = new TravelService(this); // Ping Server try { @@ -198,6 +203,7 @@ public class NGECore { zoneDispatch.addService(chatService); zoneDispatch.addService(suiService); zoneDispatch.addService(mapService); + zoneDispatch.addService(travelService); zoneDispatch.addService(playerService); zoneServer = new MINAServer(zoneDispatch, config.getInt("ZONE.PORT")); @@ -216,8 +222,6 @@ public class NGECore { terrainService.addPlanet(9, "endor", "terrain/endor.trn", true); terrainService.addPlanet(10, "dathomir", "terrain/dathomir.trn", true); terrainService.loadSnapShotObjects(); - - // Zone services that need to be loaded after the above simulationService = new SimulationService(this); @@ -226,6 +230,8 @@ public class NGECore { // Static Spawns staticService.spawnStatics(); + // Travel Points + travelService.loadTravelPoints(); guildService = new GuildService(this); zoneDispatch.addService(guildService); diff --git a/src/protocol/swg/EnterTicketPurchaseModeMessage.java b/src/protocol/swg/EnterTicketPurchaseModeMessage.java new file mode 100644 index 00000000..01c5e605 --- /dev/null +++ b/src/protocol/swg/EnterTicketPurchaseModeMessage.java @@ -0,0 +1,49 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +public class EnterTicketPurchaseModeMessage extends SWGMessage { + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); + + result.putShort((short) 3); + result.putInt(0x904DAE1A); + + result.put(getAsciiString("Tatooine")); + result.put(getAsciiString("Mos Eisley Starport")); + + return result.flip(); + } + +} diff --git a/src/protocol/swg/PlanetTravelPointListRequest.java b/src/protocol/swg/PlanetTravelPointListRequest.java index c47fffb6..51e37548 100644 --- a/src/protocol/swg/PlanetTravelPointListRequest.java +++ b/src/protocol/swg/PlanetTravelPointListRequest.java @@ -21,6 +21,8 @@ ******************************************************************************/ package protocol.swg; +import java.util.List; + import main.NGECore; import org.apache.mina.core.buffer.IoBuffer; @@ -31,17 +33,19 @@ public class PlanetTravelPointListRequest extends SWGMessage{ private NGECore core; private long objectId; - private Planet planet; + private String planet; @Override public void deserialize(IoBuffer buffer) { - buffer.getShort(); - buffer.getInt(); + //buffer.getShort(); + //buffer.getInt(); setObjectId(buffer.getLong()); setPlanet(getAsciiString(buffer)); + //System.out.println("String: " + getAsciiString(buffer)); + } @Override @@ -57,13 +61,11 @@ public class PlanetTravelPointListRequest extends SWGMessage{ this.objectId = objectId; } - public Planet getPlanet() { + public String getPlanet() { return planet; } public void setPlanet(String asciiString) { - Planet planet = core.terrainService.getPlanetByName(asciiString); - this.planet = planet; + this.planet = asciiString; } - } diff --git a/src/protocol/swg/PlanetTravelPointListResponse.java b/src/protocol/swg/PlanetTravelPointListResponse.java index 414a52ff..3c71a72c 100644 --- a/src/protocol/swg/PlanetTravelPointListResponse.java +++ b/src/protocol/swg/PlanetTravelPointListResponse.java @@ -66,8 +66,8 @@ public class PlanetTravelPointListResponse extends SWGMessage { for (TravelPoint point : travelPoints) { result.putFloat(point.getPosX()); - result.putFloat(point.getPosZ()); // Z and Y may be switched - result.putFloat(point.getPosY()); + result.putFloat(point.getPosY()); // Z and Y may be switched + result.putFloat(point.getPosZ()); } diff --git a/src/services/CharacterService.java b/src/services/CharacterService.java index 362446ba..d6d4caec 100644 --- a/src/services/CharacterService.java +++ b/src/services/CharacterService.java @@ -207,13 +207,13 @@ public class CharacterService implements INetworkDispatch { // should set to some planet and starting location String sharedRaceTemplate = raceTemplate.replace("player/", "player/shared_"); - CreatureObject object = (CreatureObject) core.objectService.createObject(sharedRaceTemplate, core.terrainService.getPlanetByName("naboo")); + CreatureObject object = (CreatureObject) core.objectService.createObject(sharedRaceTemplate, core.terrainService.getPlanetByName("tatooine")); object.setContainerPermissions(CreaturePermissions.CREATURE_PERMISSIONS); object.setCustomization(clientCreateCharacter.getCustomizationData()); object.setCustomName(clientCreateCharacter.getName()); object.setHeight(clientCreateCharacter.getScale()); object.setPersistent(true); - object.setPosition(new Point3D(-5567, 0, -32)); + object.setPosition(new Point3D(3528, 0, -4804)); object.setCashCredits(100); object.setBankCredits(1000); //object.setPosition(new Point3D(0, 0, 0)); diff --git a/src/services/travel/TravelPoint.java b/src/services/travel/TravelPoint.java index ae314aa9..96297106 100644 --- a/src/services/travel/TravelPoint.java +++ b/src/services/travel/TravelPoint.java @@ -23,6 +23,7 @@ package services.travel; public class TravelPoint { + private String planetName; private String name; private float posX; private float posY; @@ -69,4 +70,12 @@ public class TravelPoint { public void setTicketPrice(int ticketPrice) { this.ticketPrice = ticketPrice; } + + public String getPlanetName() { + return planetName; + } + + public void setPlanetName(String planetName) { + this.planetName = planetName; + } } diff --git a/src/services/travel/TravelService.java b/src/services/travel/TravelService.java index 02f3c724..ce45a28d 100644 --- a/src/services/travel/TravelService.java +++ b/src/services/travel/TravelService.java @@ -22,10 +22,12 @@ package services.travel; import java.nio.ByteOrder; +import java.util.List; import java.util.Map; import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; +import org.apache.commons.lang3.text.WordUtils; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; @@ -72,9 +74,20 @@ public class TravelService implements INetworkDispatch { if(object == null) return; - PlanetTravelPointListResponse response = new PlanetTravelPointListResponse(request.getPlanet(), travelMap.get(request.getPlanet())); - client.getSession().write(response.serialize()); + //System.out.println("Planet: " + request.getPlanet()); + List planetList = core.terrainService.getPlanetList(); + + for (Planet planet : planetList) { + if (planet.getName() == request.getPlanet()) { + + PlanetTravelPointListResponse response = new PlanetTravelPointListResponse(planet, travelMap.get(planet)); + client.getSession().write(response.serialize()); + + } + } + //PlanetTravelPointListResponse response = new PlanetTravelPointListResponse(request.getPlanet(), travelMap.get(request.getPlanet())); + //client.getSession().write(response.serialize()); } }); @@ -84,13 +97,16 @@ public class TravelService implements INetworkDispatch { public void addPlanet(Planet planet) { Vector travelPointVector = new Vector(); travelMap.put(planet, travelPointVector); + core.scriptService.callScript("scripts/", "addPoints", "static_travel_points", core, planet); } public void addTravelPoint(Planet planet, String name, float x, float y, float z) { TravelPoint travelPoint = new TravelPoint(name, x, y, z, 100); - if (travelMap.get(planet) != null) { + travelPoint.setPlanetName(WordUtils.capitalize(planet.getName())); + + if (travelMap.containsKey(planet)) { travelMap.get(planet).add(travelPoint); System.out.println("Added travel point " + travelPoint.getName()); @@ -99,12 +115,38 @@ public class TravelService implements INetworkDispatch { Vector travelPointVector = new Vector(); travelMap.put(planet, travelPointVector); travelMap.get(planet).add(travelPoint); - System.out.println("Added planet " + planet.getName() + " with travel point: " + travelPoint.getName()); + System.out.println("Added planet " + planet.getName() + " to TravelMap."); + System.out.println("Added travel point " + travelPoint.getName()); } } + public void loadTravelPoints() { + List planetList = core.terrainService.getPlanetList(); + for (Planet planet : planetList) { + addPlanet(planet); + } + } + + public SWGObject createTravelTicket(TravelPoint departurePoint, TravelPoint arrivalPoint, Planet planet) { + + SWGObject travelTicket = core.objectService.createObject("object/tangible/travel/travel_ticket/base/shared_base_travel_ticket.iff", planet); + + travelTicket.setStringAttribute("@obj_attr_n:travel_departure_planet", departurePoint.getPlanetName()); + travelTicket.setStringAttribute("@obj_attr_n:travel_departure_point", departurePoint.getName()); + + travelTicket.setStringAttribute("@obj_attr_n:travel_arrival_planet", arrivalPoint.getPlanetName()); + travelTicket.setStringAttribute("@obj_attr_n:travel_arrival_point", arrivalPoint.getName()); + + return travelTicket; + } + + public void addTicketToPlayer(SWGObject player, SWGObject travelTicket) { + SWGObject playerInventory = player.getSlottedObject("inventory"); + playerInventory._add(travelTicket); + } + @Override public void shutdown() {