From d1630ae3c9f280bcf93fbc421ab3f6fe1efc8a5d Mon Sep 17 00:00:00 2001 From: Waverunner Date: Wed, 26 Mar 2014 08:02:01 -0400 Subject: [PATCH] Fixed commit b9ed655f --- .classpath | 2 +- .../visitors/ProfessionTemplateVisitor.java | 98 +++++++++++++++++++ src/services/CharacterService.java | 13 ++- 3 files changed, 108 insertions(+), 5 deletions(-) create mode 100644 src/resources/visitors/ProfessionTemplateVisitor.java diff --git a/.classpath b/.classpath index 6ea45b44..221c9ba7 100644 --- a/.classpath +++ b/.classpath @@ -30,6 +30,6 @@ - + diff --git a/src/resources/visitors/ProfessionTemplateVisitor.java b/src/resources/visitors/ProfessionTemplateVisitor.java new file mode 100644 index 00000000..8b46a49d --- /dev/null +++ b/src/resources/visitors/ProfessionTemplateVisitor.java @@ -0,0 +1,98 @@ +/******************************************************************************* + * 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 resources.visitors; + +import java.nio.charset.CharacterCodingException; +import java.nio.charset.Charset; +import java.nio.charset.CharsetDecoder; +import java.util.Vector; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.clientdata.VisitorInterface; + +public class ProfessionTemplateVisitor implements VisitorInterface { + + + private class RaceTemplate { + private Vector items; + private String template; + public RaceTemplate(String template) { + this.template = template; + this.items = new Vector(); + } + + public Vector getItems() { + return items; + } + + public String getTemplate() { + return template; + } + } + + private CharsetDecoder charsetDecoder; + + private Vector pItems; + + public ProfessionTemplateVisitor() { + this.charsetDecoder = Charset.forName("US-ASCII").newDecoder(); + this.pItems = new Vector(); + } + + public Vector getItems(String template) { + for(RaceTemplate rTemplate : pItems) { + if (rTemplate.getTemplate().equals(template)) { + return rTemplate.getItems(); + } + } + return null; + } + + @Override + public void notifyFolder(String str, int depth) throws Exception { + } + + @Override + public void parseData(String node, IoBuffer data, int depth, int size) { + + try { + if (depth != 3) + return; + + if (node.equals("PTMPNAME")) { + String ptmpname = data.getString(charsetDecoder); + + pItems.add(new RaceTemplate(ptmpname)); + charsetDecoder.reset(); + } else if (node.equals("ITEM")){ + int index = pItems.size() - 1; + data.skip(4); + String item = data.getString(charsetDecoder); + pItems.get(index).getItems().add(item); + charsetDecoder.reset(); + } + } catch(CharacterCodingException e) { + e.printStackTrace(); + } + } +} diff --git a/src/services/CharacterService.java b/src/services/CharacterService.java index 7009b743..4f33063e 100644 --- a/src/services/CharacterService.java +++ b/src/services/CharacterService.java @@ -33,7 +33,7 @@ import main.NGECore; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; -//import clientdata.visitors.ProfessionTemplateVisitor; + import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; import engine.clients.Client; @@ -63,6 +63,7 @@ import resources.objects.mission.MissionObject; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; +import resources.visitors.ProfessionTemplateVisitor; @SuppressWarnings("unused") @@ -329,7 +330,7 @@ public class CharacterService implements INetworkDispatch { object._add(defaultWeapon); object.setWeaponId(defaultWeapon.getObjectID()); - //createStarterClothing(object, sharedRaceTemplate, clientCreateCharacter.getStarterProfession()); + createStarterClothing(object, sharedRaceTemplate, clientCreateCharacter.getStarterProfession()); //core.scriptService.callScript("scripts/", "demo", "CreateStartingCharacter", core, object); core.getCreatureODB().put(object, Long.class, CreatureObject.class, object.getTransaction()); @@ -530,7 +531,7 @@ public class CharacterService implements INetworkDispatch { return false; } - /*private void createStarterClothing(CreatureObject creature, String raceTemplate, String profession) { + private void createStarterClothing(CreatureObject creature, String raceTemplate, String profession) { try { ProfessionTemplateVisitor visitor = ClientFileManager.loadFile("creation/profession_defaults_" + profession + ".iff", ProfessionTemplateVisitor.class); TangibleObject inventory = (TangibleObject) creature.getSlottedObject("inventory"); @@ -540,10 +541,14 @@ public class CharacterService implements INetworkDispatch { for(String item : visitor.getItems(raceTemplate)) { TangibleObject createdItem = (TangibleObject) core.objectService.createObject(item, creature.getPlanet()); + + if (createdItem == null) + return; + creature._add(createdItem); creature.addObjectToEquipList(createdItem); } } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace();} - }*/ + } }