From 498b30c76a614d7d7115e22bb116a62fce5e5af4 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 9 Mar 2014 01:24:09 +0100 Subject: [PATCH 001/107] Bounty Hunter - Fixed Range attribute on weapons --- .../weapon/ranged/carbine/weapon_carbine_bh_roadmap_01_02.py | 2 +- .../object/weapon/ranged/rifle/weapon_rifle_bh_roadmap_01_02.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/object/weapon/ranged/carbine/weapon_carbine_bh_roadmap_01_02.py b/scripts/object/weapon/ranged/carbine/weapon_carbine_bh_roadmap_01_02.py index eb0efac8..eede7b59 100644 --- a/scripts/object/weapon/ranged/carbine/weapon_carbine_bh_roadmap_01_02.py +++ b/scripts/object/weapon/ranged/carbine/weapon_carbine_bh_roadmap_01_02.py @@ -11,7 +11,7 @@ def setup(core, object): object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.6) object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') object.setStringAttribute('cat_wpn_damage.damage', '109-218') - object.setStringAttribute('cat_wpn_damage.range', '0-55m') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-55m') object.setStringAttribute('cat_wpn_damage.wpn_category', 'Carbine') object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/rifle/weapon_rifle_bh_roadmap_01_02.py b/scripts/object/weapon/ranged/rifle/weapon_rifle_bh_roadmap_01_02.py index ec585481..33825f81 100644 --- a/scripts/object/weapon/ranged/rifle/weapon_rifle_bh_roadmap_01_02.py +++ b/scripts/object/weapon/ranged/rifle/weapon_rifle_bh_roadmap_01_02.py @@ -11,7 +11,7 @@ def setup(core, object): object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.8) object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') object.setStringAttribute('cat_wpn_damage.damage', '261-522') - object.setStringAttribute('cat_wpn_damage.range', '0-64m') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-64m') object.setStringAttribute('cat_wpn_damage.wpn_category', 'Rifle') object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) return \ No newline at end of file From b3acef053e396a8a95794ca553413562112cc2f2 Mon Sep 17 00:00:00 2001 From: Treeku Date: Tue, 11 Mar 2014 00:48:53 +0000 Subject: [PATCH 002/107] Fixed bug in isComplete() allowing gift exploiting --- src/services/collections/CollectionService.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/services/collections/CollectionService.java b/src/services/collections/CollectionService.java index 809687f0..61671372 100644 --- a/src/services/collections/CollectionService.java +++ b/src/services/collections/CollectionService.java @@ -439,7 +439,6 @@ public class CollectionService implements INetworkDispatch { String bookName = ""; String pageName = ""; String collectionName = ""; - boolean found = false; boolean collectionComplete = false; collections = BitSet.valueOf(player.getCollections()); @@ -483,15 +482,10 @@ public class CollectionService implements INetworkDispatch { System.out.println("Checking if a page is complete is unsupported at this time."); throw new Exception(); } else if (collection == collectionName) { - collectionComplete = collections.get(beginSlotId); - found = true; + return collections.get(beginSlotId); } else if (collection == slotName) { return collections.get(beginSlotId); } - - if (found && collectionName != collection) { - return collectionComplete; - } } } } From 18c0f070fd157e6ebcd84b0f5e1b459f8fbb2e45 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Wed, 12 Mar 2014 15:01:09 -0400 Subject: [PATCH 003/107] Fixed bug related to deleting characters Also added 2 new variables to destroyObject for certain cases. --- src/services/ConnectionService.java | 11 ++-- src/services/LoginService.java | 74 ++++++++++++++------------ src/services/object/ObjectService.java | 23 ++++++-- 3 files changed, 66 insertions(+), 42 deletions(-) diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index 934efd58..94b05138 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -226,10 +226,13 @@ public class ConnectionService implements INetworkDispatch { long parentId = object.getParentId(); + boolean removed = false; if(object.getContainer() == null) { boolean remove = core.simulationService.remove(object, object.getPosition().x, object.getPosition().z); - if(remove) + if(remove) { System.out.println("Successful quadtree remove"); + removed = true; + } } else { object.getContainer()._remove(object); object.setParentId(parentId); @@ -250,8 +253,10 @@ public class ConnectionService implements INetworkDispatch { object.createTransaction(core.getCreatureODB().getEnvironment()); core.getCreatureODB().put(object, Long.class, CreatureObject.class, object.getTransaction()); object.getTransaction().commitSync(); - core.objectService.destroyObject(object); - + if(removed) + core.objectService.destroyObject(object, false); + else + core.objectService.destroyObject(object); } diff --git a/src/services/LoginService.java b/src/services/LoginService.java index 7bb0a2ef..29e65124 100644 --- a/src/services/LoginService.java +++ b/src/services/LoginService.java @@ -42,7 +42,6 @@ import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import engine.resources.service.LocalDbLoginProvider; import engine.resources.service.VBLoginProvider; - import protocol.swg.CharacterCreationDisabled; import protocol.swg.ClientUIErrorMessage; import protocol.swg.DeleteCharacterMessage; @@ -56,7 +55,6 @@ import protocol.swg.ServerNowEpochTime; import protocol.swg.StationIdHasJediSlot; import resources.common.*; import resources.datatables.PlayerFlags; - import resources.objects.creature.CreatureObject; @SuppressWarnings("unused") @@ -182,41 +180,49 @@ public class LoginService implements INetworkDispatch{ packet.deserialize(data); Client client = core.getClient(session); - PreparedStatement preparedStatement; - - preparedStatement = databaseConnection1.preparedStatement("DELETE FROM characters WHERE \"id\"=? AND \"galaxyId\"=? AND \"accountId\"=?"); - preparedStatement.setLong(1, packet.getcharId()); - preparedStatement.setInt(2, packet.getgalaxyId()); - preparedStatement.setInt(3, (int) client.getAccountId()); - boolean resultSet = preparedStatement.execute(); - - //TODO: send deletecharacter failed - if(!resultSet) { - CreatureObject object = (CreatureObject) core.objectService.getObject(packet.getcharId()); - - if (object != null) { - if (object.isInQuadtree() && object.getClient() != null) { - core.connectionService.disconnect(object.getClient()); - } - - if (object.isInQuadtree()) { - core.simulationService.remove(object, object.getPosition().x, object.getPosition().z, true); - } - - core.objectService.destroyObject(object); - } - - core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); - DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(0); - session.write(reply.serialize()); - } - - preparedStatement.close(); + PreparedStatement preparedStatement; + preparedStatement = databaseConnection1.preparedStatement("DELETE FROM characters WHERE \"id\"=? AND \"galaxyId\"=? AND \"accountId\"=?"); + preparedStatement.setLong(1, packet.getcharId()); + preparedStatement.setInt(2, packet.getgalaxyId()); + preparedStatement.setInt(3, (int) client.getAccountId()); + boolean resultSet = preparedStatement.execute(); + CreatureObject object = (CreatureObject) core.objectService.getObject(packet.getcharId()); + + // TODO: Revert DELETE if everything fails for some reason... ? + if(!resultSet) { + if (object != null) { + boolean destroyed = false; + if(object.isInQuadtree() && object.getClient() != null) { + core.connectionService.disconnect(object.getClient()); // destroyed in method + destroyed = true; + } + else { + core.objectService.destroyObject(object, false, false); + destroyed = true; + } + if(destroyed) { + core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); + DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(0); + session.write(reply.serialize()); + } else { + //core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); + DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(1); + session.write(reply.serialize()); + } + } else { + //core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); + DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(1); + session.write(reply.serialize()); + } + } else { + //core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); + DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(1); + session.write(reply.serialize()); + } + preparedStatement.close(); } - }); - } public void shutdown() { diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 6771397a..e756aab7 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -357,18 +357,22 @@ public class ObjectService implements INetworkDispatch { public Map getObjectList() { return objectList; } + public void destroyObject(SWGObject object) { + destroyObject(object, false, true); + } + public void destroyObject(final SWGObject object, int seconds) { scheduler.schedule(new Runnable() { @Override public void run() { - destroyObject(object); + destroyObject(object, false, true); } }, seconds, TimeUnit.SECONDS); } - public void destroyObject(SWGObject object) { + public void destroyObject(SWGObject object, boolean notify, boolean removeFromQt) { if (object == null) { return; } @@ -411,20 +415,29 @@ public class ObjectService implements INetworkDispatch { objectList.remove(obj.getObjectID()); } }); - objectList.remove(object.getObjectID()); - core.simulationService.remove(object, object.getPosition().x, object.getPosition().y); + if(removeFromQt && !notify) + core.simulationService.remove(object, object.getPosition().x, object.getPosition().y); + + else if(notify && removeFromQt) + core.simulationService.remove(object, object.getPosition().x, object.getPosition().y, true); + + objectList.remove(object.getObjectID()); + } public void destroyObject(long objectID) { SWGObject object = getObject(objectID); if(object != null) { - destroyObject(object); + destroyObject(object, false, true); } } + public void destroyObject(SWGObject object, boolean removeFromQt) { + destroyObject(object, false, removeFromQt); + } public SWGObject getObjectByCustomName(String customName) { synchronized(objectList) { From a19e18bb3400b765910a4dbecd3890fea4660a68 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Wed, 12 Mar 2014 15:07:58 -0400 Subject: [PATCH 004/107] Fixed indentation from previous commit --- src/services/LoginService.java | 88 +++++++++++++++++----------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/src/services/LoginService.java b/src/services/LoginService.java index 29e65124..2cdc4e38 100644 --- a/src/services/LoginService.java +++ b/src/services/LoginService.java @@ -172,55 +172,55 @@ public class LoginService implements INetworkDispatch{ @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { - + data = data.order(ByteOrder.LITTLE_ENDIAN); data.position(0); - + DeleteCharacterMessage packet = new DeleteCharacterMessage(); packet.deserialize(data); Client client = core.getClient(session); - - PreparedStatement preparedStatement; - - preparedStatement = databaseConnection1.preparedStatement("DELETE FROM characters WHERE \"id\"=? AND \"galaxyId\"=? AND \"accountId\"=?"); - preparedStatement.setLong(1, packet.getcharId()); - preparedStatement.setInt(2, packet.getgalaxyId()); - preparedStatement.setInt(3, (int) client.getAccountId()); - boolean resultSet = preparedStatement.execute(); - CreatureObject object = (CreatureObject) core.objectService.getObject(packet.getcharId()); - - // TODO: Revert DELETE if everything fails for some reason... ? - if(!resultSet) { - if (object != null) { - boolean destroyed = false; - if(object.isInQuadtree() && object.getClient() != null) { - core.connectionService.disconnect(object.getClient()); // destroyed in method - destroyed = true; - } - else { - core.objectService.destroyObject(object, false, false); - destroyed = true; - } - if(destroyed) { - core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); - DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(0); - session.write(reply.serialize()); - } else { - //core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); - DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(1); - session.write(reply.serialize()); - } - } else { - //core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); - DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(1); - session.write(reply.serialize()); - } - } else { - //core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); - DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(1); - session.write(reply.serialize()); - } - preparedStatement.close(); + + PreparedStatement preparedStatement; + + preparedStatement = databaseConnection1.preparedStatement("DELETE FROM characters WHERE \"id\"=? AND \"galaxyId\"=? AND \"accountId\"=?"); + preparedStatement.setLong(1, packet.getcharId()); + preparedStatement.setInt(2, packet.getgalaxyId()); + preparedStatement.setInt(3, (int) client.getAccountId()); + boolean resultSet = preparedStatement.execute(); + CreatureObject object = (CreatureObject) core.objectService.getObject(packet.getcharId()); + + // TODO: Revert DELETE if everything fails for some reason... ? + if(!resultSet) { + if (object != null) { + boolean destroyed = false; + if(object.isInQuadtree() && object.getClient() != null) { + core.connectionService.disconnect(object.getClient()); // destroyed in method + destroyed = true; + } + else { + core.objectService.destroyObject(object, false, false); + destroyed = true; + } + if(destroyed) { + core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); + DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(0); + session.write(reply.serialize()); + } else { + //core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); + DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(1); + session.write(reply.serialize()); + } + } else { + //core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); + DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(1); + session.write(reply.serialize()); + } + } else { + //core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); + DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(1); + session.write(reply.serialize()); + } + preparedStatement.close(); } }); } From afb5c58447670fc687121506fc446a981beeeb45 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Wed, 12 Mar 2014 15:19:27 -0400 Subject: [PATCH 005/107] Reverted Changes Light's already fixed this --- src/services/ConnectionService.java | 11 +--- src/services/LoginService.java | 78 ++++++++++++-------------- src/services/object/ObjectService.java | 23 ++------ 3 files changed, 44 insertions(+), 68 deletions(-) diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index 94b05138..934efd58 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -226,13 +226,10 @@ public class ConnectionService implements INetworkDispatch { long parentId = object.getParentId(); - boolean removed = false; if(object.getContainer() == null) { boolean remove = core.simulationService.remove(object, object.getPosition().x, object.getPosition().z); - if(remove) { + if(remove) System.out.println("Successful quadtree remove"); - removed = true; - } } else { object.getContainer()._remove(object); object.setParentId(parentId); @@ -253,10 +250,8 @@ public class ConnectionService implements INetworkDispatch { object.createTransaction(core.getCreatureODB().getEnvironment()); core.getCreatureODB().put(object, Long.class, CreatureObject.class, object.getTransaction()); object.getTransaction().commitSync(); - if(removed) - core.objectService.destroyObject(object, false); - else - core.objectService.destroyObject(object); + core.objectService.destroyObject(object); + } diff --git a/src/services/LoginService.java b/src/services/LoginService.java index 2cdc4e38..374400ef 100644 --- a/src/services/LoginService.java +++ b/src/services/LoginService.java @@ -42,6 +42,7 @@ import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import engine.resources.service.LocalDbLoginProvider; import engine.resources.service.VBLoginProvider; + import protocol.swg.CharacterCreationDisabled; import protocol.swg.ClientUIErrorMessage; import protocol.swg.DeleteCharacterMessage; @@ -55,6 +56,7 @@ import protocol.swg.ServerNowEpochTime; import protocol.swg.StationIdHasJediSlot; import resources.common.*; import resources.datatables.PlayerFlags; + import resources.objects.creature.CreatureObject; @SuppressWarnings("unused") @@ -179,50 +181,42 @@ public class LoginService implements INetworkDispatch{ DeleteCharacterMessage packet = new DeleteCharacterMessage(); packet.deserialize(data); Client client = core.getClient(session); - - PreparedStatement preparedStatement; - - preparedStatement = databaseConnection1.preparedStatement("DELETE FROM characters WHERE \"id\"=? AND \"galaxyId\"=? AND \"accountId\"=?"); - preparedStatement.setLong(1, packet.getcharId()); - preparedStatement.setInt(2, packet.getgalaxyId()); - preparedStatement.setInt(3, (int) client.getAccountId()); - boolean resultSet = preparedStatement.execute(); - CreatureObject object = (CreatureObject) core.objectService.getObject(packet.getcharId()); - - // TODO: Revert DELETE if everything fails for some reason... ? - if(!resultSet) { - if (object != null) { - boolean destroyed = false; - if(object.isInQuadtree() && object.getClient() != null) { - core.connectionService.disconnect(object.getClient()); // destroyed in method - destroyed = true; - } - else { - core.objectService.destroyObject(object, false, false); - destroyed = true; - } - if(destroyed) { - core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); - DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(0); - session.write(reply.serialize()); - } else { - //core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); - DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(1); - session.write(reply.serialize()); - } - } else { - //core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); - DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(1); - session.write(reply.serialize()); - } - } else { - //core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); - DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(1); - session.write(reply.serialize()); - } - preparedStatement.close(); + + PreparedStatement preparedStatement; + + preparedStatement = databaseConnection1.preparedStatement("DELETE FROM characters WHERE \"id\"=? AND \"galaxyId\"=? AND \"accountId\"=?"); + preparedStatement.setLong(1, packet.getcharId()); + preparedStatement.setInt(2, packet.getgalaxyId()); + preparedStatement.setInt(3, (int) client.getAccountId()); + boolean resultSet = preparedStatement.execute(); + + //TODO: send deletecharacter failed + if(!resultSet) { + CreatureObject object = (CreatureObject) core.objectService.getObject(packet.getcharId()); + + if (object != null) { + if (object.isInQuadtree() && object.getClient() != null) { + core.connectionService.disconnect(object.getClient()); + } + + if (object.isInQuadtree()) { + core.simulationService.remove(object, object.getPosition().x, object.getPosition().z, true); + } + + core.objectService.destroyObject(object); + } + + core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); + DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(0); + session.write(reply.serialize()); + } + + preparedStatement.close(); + } + }); + } public void shutdown() { diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index e756aab7..6771397a 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -357,22 +357,18 @@ public class ObjectService implements INetworkDispatch { public Map getObjectList() { return objectList; } - public void destroyObject(SWGObject object) { - destroyObject(object, false, true); - } - public void destroyObject(final SWGObject object, int seconds) { scheduler.schedule(new Runnable() { @Override public void run() { - destroyObject(object, false, true); + destroyObject(object); } }, seconds, TimeUnit.SECONDS); } - public void destroyObject(SWGObject object, boolean notify, boolean removeFromQt) { + public void destroyObject(SWGObject object) { if (object == null) { return; } @@ -415,29 +411,20 @@ public class ObjectService implements INetworkDispatch { objectList.remove(obj.getObjectID()); } }); - - if(removeFromQt && !notify) - core.simulationService.remove(object, object.getPosition().x, object.getPosition().y); - - else if(notify && removeFromQt) - core.simulationService.remove(object, object.getPosition().x, object.getPosition().y, true); - objectList.remove(object.getObjectID()); - + core.simulationService.remove(object, object.getPosition().x, object.getPosition().y); + } public void destroyObject(long objectID) { SWGObject object = getObject(objectID); if(object != null) { - destroyObject(object, false, true); + destroyObject(object); } } - public void destroyObject(SWGObject object, boolean removeFromQt) { - destroyObject(object, false, removeFromQt); - } public SWGObject getObjectByCustomName(String customName) { synchronized(objectList) { From 53669148eba1c32094a7400a51625ac196cb3919 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Wed, 12 Mar 2014 19:50:22 -0400 Subject: [PATCH 006/107] Finished Character Sheet, Fixed TARGET_UPDATE, Able to marry players now --- scripts/commands/setgodmode.py | 25 ----- scripts/radial/ring/unity.py | 90 +++++++++++++++--- .../swg/CharacterSheetResponseMessage.java | 93 +++++++++++++------ .../objectControllerObjects/TargetUpdate.java | 2 +- .../objects/player/PlayerObject.java | 4 +- src/services/EquipmentService.java | 5 + src/services/SimulationService.java | 19 ++-- 7 files changed, 157 insertions(+), 81 deletions(-) diff --git a/scripts/commands/setgodmode.py b/scripts/commands/setgodmode.py index 536a588b..c4fd1f08 100644 --- a/scripts/commands/setgodmode.py +++ b/scripts/commands/setgodmode.py @@ -1,10 +1,5 @@ import sys from engine.resources.scene import Point3D -from protocol.swg import CommPlayerMessage -from protocol.swg.objectControllerObjects import ShowLootBox -from protocol.swg import ObjControllerMessage -from engine.resources.objects import SWGObject -from jarray import array def setup(): return @@ -53,24 +48,4 @@ def run(core, actor, target, commandString): actor.addAbility(str(arg1)) actor.sendSystemMessage('You have learned ' + arg1 + '') - elif command == 'anim' and arg1: - actor.doSkillAnimation(arg1) - actor.sendSystemMessage('Performed ' + arg1 ,0) - - elif command == 'changeBio' and arg1: - actor.getSlottedObject('ghost').setBiography(arg1) - - elif command == 'rewardMe': - testObject = core.objectService.createObject('object/weapon/ranged/rifle/shared_rifle_t21.iff', actor.getPlanet()) - testObject.setCustomName('Crush4r') - testObject.setStringAttribute('crafter', 'Wavescrub') - dGun = core.objectService.createObject('object/weapon/ranged/rifle/shared_rifle_tc22_blaster.iff', actor.getPlanet()) - dGun.setCustomName('Supertoms Gun') - dGun.setStringAttribute('crafter', 'Wavescrub') - core.playerService.giveItems(actor, testObject, dGun) - return - - elif command == 'comm': - comm = CommPlayerMessage(actor.getObjectId()) - actor.getClient().getSession().write(comm.serialize()) return diff --git a/scripts/radial/ring/unity.py b/scripts/radial/ring/unity.py index 704268a4..18352da7 100644 --- a/scripts/radial/ring/unity.py +++ b/scripts/radial/ring/unity.py @@ -1,5 +1,7 @@ from resources.common import RadialOptions from services.sui.SUIWindow import Trigger +from java.util import Vector +from main import NGECore import sys def createRadial(core, owner, target, radials): @@ -7,29 +9,89 @@ def createRadial(core, owner, target, radials): ghost = owner.getSlottedObject('ghost') if ghost is None: return - print (owner.getTargetId()) - print (owner.getObjectId()) - if ghost.getSpouseName() is None: + + if ghost.getSpouseName() is None or "": targetPlayer = core.objectService.getObject(owner.getTargetId()) if targetPlayer is not None and targetPlayer.getSlottedObject('ghost') is not None: - radials.add(RadialOptions(0, 69, 1, 'Propose Unity')) + radials.add(RadialOptions(0, 69, 1, '@unity:mnu_propose')) + else: + radials.add(RadialOptions(0, 70, 1, '@unity:mnu_divorce')) + return return def handleSelection(core, owner, target, option): if option == 69 and target: tGhost = core.objectService.getObject(owner.getTargetId()).getSlottedObject('ghost') suiSvc = core.suiService - targetWindow = suiSvc.createMessageBox(3, 'Proposal', owner.getCustomName() + ' would like to marry you. Would you like to marry?', tGhost, owner, 10) - returnList = Vector() - targetWindow.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSUI) - targetWindow.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handleSUI) - suiSvc.openSUIWindow(targetWindow) + + if tGhost.getSpouseName() is not None: + owner.sendSystemMessage('@unity:target_married', 0) + return + + if tGhost.getPosition().getDistance2D(owner.getWorldPosition()) < 50: + owner.sendSystemMessage('@unity:out_of_range', 0) + return + + else: + targetWindow = suiSvc.createMessageBox(3, '@unity:accept_title', owner.getCustomName() + ' is proposing unity to you. Do you wish to accept?', tGhost.getContainer(), owner, 15) + returnList = Vector() + + targetWindow.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSUI) + targetWindow.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handleSUI) + tGhost.getContainer().setAttachment("proposer", owner.getCustomName()) + suiSvc.openSUIWindow(targetWindow) + + target.setAttachment("unity", target) + return + return + + if option == 70: + married = owner.getSlottedObject('ghost').getSpouseName() + otherPlayer = NGECore.getInstance().objectService.getObjectByCustomName(married) + + if otherPlayer is None: + return + ghost = otherPlayer.getSlottedObject('ghost') + + if ghost is None: + return + + owner.sendSystemMessage('Your union with ' + married + 'has ended.', 0) + + owner.setSpouseName("") + otherPlayer.setSpouseName("") + + target.setAttachment("unity", None) return return def handleSUI(owner, window, eventType, returnList): - if eventType == 0: - ghost = owner.getSlottedObject('ghost') - ghost.setSpouseName("Waverunner") - return - return \ No newline at end of file + if eventType == 0: + ghost = owner.getSlottedObject('ghost') + if ghost is None: + return + + print (owner.getAttachment("proposer")) + core = NGECore.getInstance() + proposer = core.objectService.getObjectByCustomName(owner.getAttachment("proposer")) + if proposer is None: + return + print ('not none') + pGhost = proposer.getSlottedObject('ghost') + if pGhost is None: + return + + ghost.setSpouseName(proposer.getCustomName()) + pGhost.setSpouseName(owner.getCustomName()) + + owner.sendSystemMessage('Your union with ' + proposer.getCustomName() + ' is complete.', 0) + proposer.sendSystemMessage('Your union with ' + owner.getCustomName() + ' is complete.', 0) + owner.setAttachment("proposer", None) + + return + if eventType == 1: + proposer = core.objectService.getObjectByCustomName(owner.getAttachment("proposer")) + proposer.sendSystemMessage('@unity:declined', 0) + owner.setAttachment("proposer", None) + return + return \ No newline at end of file diff --git a/src/protocol/swg/CharacterSheetResponseMessage.java b/src/protocol/swg/CharacterSheetResponseMessage.java index 3e3dbc81..28de844d 100644 --- a/src/protocol/swg/CharacterSheetResponseMessage.java +++ b/src/protocol/swg/CharacterSheetResponseMessage.java @@ -16,17 +16,22 @@ * 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. + * 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 main.NGECore; + import org.apache.mina.core.buffer.IoBuffer; +import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; import engine.resources.common.CRC; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Point3D; public class CharacterSheetResponseMessage extends SWGMessage { @@ -34,7 +39,7 @@ public class CharacterSheetResponseMessage extends SWGMessage { public CharacterSheetResponseMessage(PlayerObject player) { this.player = player; } - + @Override public void deserialize(IoBuffer data) { @@ -42,35 +47,63 @@ public class CharacterSheetResponseMessage extends SWGMessage { @Override public IoBuffer serialize() { - IoBuffer buffer = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); - buffer.putShort((short) 12); - buffer.putInt(CRC.StringtoCRC("CharacterSheetResponseMessage")); - buffer.putShort((short) 0); //unk - buffer.putInt(1); // unk - - - buffer.putFloat(0); // bind x - buffer.putFloat(0); // bind z - buffer.putFloat(0); // bind y - buffer.putInt(0); // planet - - buffer.putFloat(0); // bank x - buffer.putFloat(0); // bank z - buffer.putFloat(0); // bank y - buffer.put(getAsciiString("tatooine")); // planet - - buffer.putFloat(0); // home x - buffer.putFloat(0); // home z - buffer.putFloat(0); // home y - buffer.putInt(0); // home planet - - if (player.getSpouseName() == null) + CreatureObject creature = (CreatureObject) player.getContainer(); + + if (creature != null) { + + SWGObject desCloner = null; + if (creature.getAttachment("preDesignatedCloner") != null) + desCloner = NGECore.getInstance().objectService.getObject((long) creature.getAttachment("preDesignatedCloner")); + + String clonerPlanet = ""; + String spouse = ""; + + if (desCloner != null) + clonerPlanet = desCloner.getPlanet().getName(); + + if (player.getSpouseName() != null) + spouse = player.getSpouseName(); + + IoBuffer buffer = IoBuffer.allocate(82 + clonerPlanet.length() + (spouse.length() * 2)).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 12); + buffer.putInt(CRC.StringtoCRC("CharacterSheetResponseMessage")); + buffer.putInt(0); - else - buffer.put(getUnicodeString(player.getSpouseName())); // spouse name <<<<< CORRECT - - buffer.putInt(10); // lots remaining <<<<<<< CORRECT - return buffer.flip(); + buffer.putInt(0); + + if (desCloner != null) { + Point3D loc = desCloner.getPosition(); + buffer.putFloat(loc.x); // bind x + buffer.putFloat(loc.y); // bind z + buffer.putFloat(loc.z); // bind y + buffer.put(getAsciiString(clonerPlanet)); // bind planet + } else { + buffer.putFloat(0); // bind x + buffer.putFloat(0); // bind z + buffer.putFloat(0); // bind y + buffer.put(getAsciiString("")); // bind planet + } + + buffer.putFloat(0); // bank x + buffer.putFloat(0); // bank z + buffer.putFloat(0); // bank y + buffer.put(getAsciiString("tatooine")); + + buffer.putFloat(0); // home x + buffer.putFloat(0); // home z + buffer.putFloat(0); // home y + buffer.put(getAsciiString("")); // home planet + + buffer.put(getAsciiString("")); // Name of city player resides in + + buffer.put(getUnicodeString(spouse)); + + buffer.putInt(10); // lots remaining + + return buffer.flip(); + } + return null; } } diff --git a/src/protocol/swg/objectControllerObjects/TargetUpdate.java b/src/protocol/swg/objectControllerObjects/TargetUpdate.java index bfac2b1b..bd01c8a8 100644 --- a/src/protocol/swg/objectControllerObjects/TargetUpdate.java +++ b/src/protocol/swg/objectControllerObjects/TargetUpdate.java @@ -39,7 +39,7 @@ public class TargetUpdate extends ObjControllerObject { @Override public IoBuffer serialize() { - // TODO Auto-generated method stub + return null; } diff --git a/src/resources/objects/player/PlayerObject.java b/src/resources/objects/player/PlayerObject.java index ae29a905..2735c475 100644 --- a/src/resources/objects/player/PlayerObject.java +++ b/src/resources/objects/player/PlayerObject.java @@ -684,7 +684,9 @@ public class PlayerObject extends IntangibleObject { } public String getSpouseName() { - return spouse; + synchronized(objectMutex) { + return spouse; + } } public void setSpouseName(String spouse) { diff --git a/src/services/EquipmentService.java b/src/services/EquipmentService.java index 7125fa32..9f8ce9a5 100644 --- a/src/services/EquipmentService.java +++ b/src/services/EquipmentService.java @@ -251,6 +251,11 @@ public class EquipmentService implements INetworkDispatch { } + if(item.getAttachment("unity") != null) { + actor.sendSystemMessage("@unity:cannot_remove_ring", (byte) 0); + return; + } + if(actor.getEquipmentList().contains(item)) actor.removeObjectFromEquipList(item); diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index b9edf1e1..14be116d 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -440,17 +440,16 @@ public class SimulationService implements INetworkDispatch { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { - - data = data.order(ByteOrder.LITTLE_ENDIAN); - data.position(0); - + + data.order(ByteOrder.LITTLE_ENDIAN); + Client client = core.getClient(session); - + if(client == null) { System.out.println("NULL Client"); return; } - + if(client.getParent() == null) { System.out.println("NULL Object"); return; @@ -459,18 +458,18 @@ public class SimulationService implements INetworkDispatch { TargetUpdate targetUpdate = new TargetUpdate(); targetUpdate.deserialize(data); - + object.setTargetId(targetUpdate.getTargetId()); - + } - + }); objControllerOpcodes.put(ObjControllerOpcodes.HOVER_TARGET, new INetworkRemoteEvent() { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { - + } }); From 2023e405962e9c41ae7dd01110586f476de0afc4 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Thu, 13 Mar 2014 18:38:55 -0400 Subject: [PATCH 007/107] Finished Unity --- .../tangible/wearables/ring/aakuan_ring.py | 1 + .../ring/item_bounty_hunter_ring_01_02.py | 1 + .../ring/item_force_sensitive_ring_01_02.py | 1 + .../ring/item_force_sensitive_ring_02_01.py | 1 + .../tangible/wearables/ring/ring_base.py | 2 + .../wearables/ring/ring_gcw_imperial.py | 1 + .../tangible/wearables/ring/ring_gcw_rebel.py | 1 + .../tangible/wearables/ring/ring_mark_hero.py | 1 + .../wearables/ring/ring_nightsister.py | 1 + .../tangible/wearables/ring/ring_s01.py | 1 + .../tangible/wearables/ring/ring_s02.py | 1 + .../tangible/wearables/ring/ring_s03.py | 1 + .../tangible/wearables/ring/ring_s03_quest.py | 1 + .../tangible/wearables/ring/ring_s04.py | 1 + scripts/radial/ring/unity.py | 75 ++++++----- src/services/EquipmentService.java | 28 ++-- src/services/PlayerService.java | 126 +++++++++++++++++- src/services/SimulationService.java | 3 + 18 files changed, 200 insertions(+), 47 deletions(-) diff --git a/scripts/object/tangible/wearables/ring/aakuan_ring.py b/scripts/object/tangible/wearables/ring/aakuan_ring.py index 2540ccc0..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/aakuan_ring.py +++ b/scripts/object/tangible/wearables/ring/aakuan_ring.py @@ -2,4 +2,5 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_bounty_hunter_ring_01_02.py b/scripts/object/tangible/wearables/ring/item_bounty_hunter_ring_01_02.py index e8042f0b..110a5ec1 100644 --- a/scripts/object/tangible/wearables/ring/item_bounty_hunter_ring_01_02.py +++ b/scripts/object/tangible/wearables/ring/item_bounty_hunter_ring_01_02.py @@ -1,6 +1,7 @@ import sys def setup(core, object): + object.setAttachment('objType', 'ring') object.setStfFilename('static_item_n') object.setStfName('item_bounty_hunter_ring_01_02') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_01_02.py b/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_01_02.py index 1219d4db..a22d7967 100644 --- a/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_01_02.py +++ b/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_01_02.py @@ -1,6 +1,7 @@ import sys def setup(core, object): + object.setAttachment('objType', 'ring') object.setStfFilename('static_item_n') object.setStfName('item_force_sensitive_ring_01_02') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_02_01.py b/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_02_01.py index 7fc2c243..01a05612 100644 --- a/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_02_01.py +++ b/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_02_01.py @@ -1,6 +1,7 @@ import sys def setup(core, object): + object.setAttachment('objType', 'ring') object.setStfFilename('static_item_n') object.setStfName('item_force_sensitive_ring_02_01') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/ring/ring_base.py b/scripts/object/tangible/wearables/ring/ring_base.py index ccad8904..21d2e709 100644 --- a/scripts/object/tangible/wearables/ring/ring_base.py +++ b/scripts/object/tangible/wearables/ring/ring_base.py @@ -1,4 +1,6 @@ import sys def setup(core, object): + object.setAttachment('objType', 'ring') + object.setAttachment('radial_filename', 'ring/unity') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_gcw_imperial.py b/scripts/object/tangible/wearables/ring/ring_gcw_imperial.py index 2540ccc0..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/ring_gcw_imperial.py +++ b/scripts/object/tangible/wearables/ring/ring_gcw_imperial.py @@ -2,4 +2,5 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_gcw_rebel.py b/scripts/object/tangible/wearables/ring/ring_gcw_rebel.py index 2540ccc0..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/ring_gcw_rebel.py +++ b/scripts/object/tangible/wearables/ring/ring_gcw_rebel.py @@ -2,4 +2,5 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_mark_hero.py b/scripts/object/tangible/wearables/ring/ring_mark_hero.py index 2540ccc0..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/ring_mark_hero.py +++ b/scripts/object/tangible/wearables/ring/ring_mark_hero.py @@ -2,4 +2,5 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_nightsister.py b/scripts/object/tangible/wearables/ring/ring_nightsister.py index 2540ccc0..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/ring_nightsister.py +++ b/scripts/object/tangible/wearables/ring/ring_nightsister.py @@ -2,4 +2,5 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_s01.py b/scripts/object/tangible/wearables/ring/ring_s01.py index 83da2342..f311265b 100644 --- a/scripts/object/tangible/wearables/ring/ring_s01.py +++ b/scripts/object/tangible/wearables/ring/ring_s01.py @@ -2,6 +2,7 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return def equip(core, actor, object): diff --git a/scripts/object/tangible/wearables/ring/ring_s02.py b/scripts/object/tangible/wearables/ring/ring_s02.py index f594fe2b..467d8fb3 100644 --- a/scripts/object/tangible/wearables/ring/ring_s02.py +++ b/scripts/object/tangible/wearables/ring/ring_s02.py @@ -2,6 +2,7 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return def equip(core, actor, object): diff --git a/scripts/object/tangible/wearables/ring/ring_s03.py b/scripts/object/tangible/wearables/ring/ring_s03.py index c4aa2f2f..52d2d1d2 100644 --- a/scripts/object/tangible/wearables/ring/ring_s03.py +++ b/scripts/object/tangible/wearables/ring/ring_s03.py @@ -2,6 +2,7 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return def equip(core, actor, object): diff --git a/scripts/object/tangible/wearables/ring/ring_s03_quest.py b/scripts/object/tangible/wearables/ring/ring_s03_quest.py index 2540ccc0..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/ring_s03_quest.py +++ b/scripts/object/tangible/wearables/ring/ring_s03_quest.py @@ -2,4 +2,5 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_s04.py b/scripts/object/tangible/wearables/ring/ring_s04.py index 8eee5461..c00caed9 100644 --- a/scripts/object/tangible/wearables/ring/ring_s04.py +++ b/scripts/object/tangible/wearables/ring/ring_s04.py @@ -2,6 +2,7 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return def equip(core, actor, object): diff --git a/scripts/radial/ring/unity.py b/scripts/radial/ring/unity.py index 18352da7..f57f3034 100644 --- a/scripts/radial/ring/unity.py +++ b/scripts/radial/ring/unity.py @@ -2,6 +2,7 @@ from resources.common import RadialOptions from services.sui.SUIWindow import Trigger from java.util import Vector from main import NGECore +from engine.resources.objects import SWGObject import sys def createRadial(core, owner, target, radials): @@ -10,10 +11,11 @@ def createRadial(core, owner, target, radials): if ghost is None: return - if ghost.getSpouseName() is None or "": + if ghost.getSpouseName() is None or ghost.getSpouseName() is "": targetPlayer = core.objectService.getObject(owner.getTargetId()) if targetPlayer is not None and targetPlayer.getSlottedObject('ghost') is not None: radials.add(RadialOptions(0, 69, 1, '@unity:mnu_propose')) + return else: radials.add(RadialOptions(0, 70, 1, '@unity:mnu_divorce')) return @@ -21,32 +23,43 @@ def createRadial(core, owner, target, radials): def handleSelection(core, owner, target, option): if option == 69 and target: - tGhost = core.objectService.getObject(owner.getTargetId()).getSlottedObject('ghost') + player = core.objectService.getObject(owner.getTargetId()) + tGhost = player.getSlottedObject('ghost') suiSvc = core.suiService - if tGhost.getSpouseName() is not None: - owner.sendSystemMessage('@unity:target_married', 0) - return - if tGhost.getPosition().getDistance2D(owner.getWorldPosition()) < 50: owner.sendSystemMessage('@unity:out_of_range', 0) return + if tGhost.getSpouseName() is not None: + owner.sendSystemMessage('@unity:target_married', 0) + return + + if player.getAttachment("proposer") is not None: + owner.sendSystemMessage('@unity:target_proposed', 0) + return + else: + + owner.sendSystemMessage('You propose unity to ' + player.getCustomName() + '.', 0) targetWindow = suiSvc.createMessageBox(3, '@unity:accept_title', owner.getCustomName() + ' is proposing unity to you. Do you wish to accept?', tGhost.getContainer(), owner, 15) returnList = Vector() - targetWindow.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSUI) - targetWindow.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handleSUI) - tGhost.getContainer().setAttachment("proposer", owner.getCustomName()) + targetWindow.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handlePropose) + targetWindow.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handlePropose) + player.setAttachment("proposer", owner.getCustomName()) suiSvc.openSUIWindow(targetWindow) - target.setAttachment("unity", target) + target.setAttachment("unity", True) + core.equipmentService.equip(owner, target) + + core.commandService.callCommand(owner, 'kneel', None, '') return return if option == 70: married = owner.getSlottedObject('ghost').getSpouseName() + myGhost = owner.getSlottedObject('ghost') otherPlayer = NGECore.getInstance().objectService.getObjectByCustomName(married) if otherPlayer is None: @@ -56,42 +69,38 @@ def handleSelection(core, owner, target, option): if ghost is None: return - owner.sendSystemMessage('Your union with ' + married + 'has ended.', 0) - - owner.setSpouseName("") - otherPlayer.setSpouseName("") + owner.sendSystemMessage('Your union with ' + married + ' has ended.', 0) + otherPlayer.sendSystemMessage('Your union with ' + owner.getCustomName() + ' has ended.', 0) + myGhost.setSpouseName(None) + ghost.setSpouseName(None) target.setAttachment("unity", None) + #TODO: Divorce offline players return return -def handleSUI(owner, window, eventType, returnList): +def handlePropose(owner, window, eventType, returnList): + core = NGECore.getInstance() + + if owner is None: + return + if eventType == 0: - ghost = owner.getSlottedObject('ghost') - if ghost is None: - return - - print (owner.getAttachment("proposer")) - core = NGECore.getInstance() proposer = core.objectService.getObjectByCustomName(owner.getAttachment("proposer")) if proposer is None: return - print ('not none') - pGhost = proposer.getSlottedObject('ghost') - if pGhost is None: - return - - ghost.setSpouseName(proposer.getCustomName()) - pGhost.setSpouseName(owner.getCustomName()) - - owner.sendSystemMessage('Your union with ' + proposer.getCustomName() + ' is complete.', 0) - proposer.sendSystemMessage('Your union with ' + owner.getCustomName() + ' is complete.', 0) - owner.setAttachment("proposer", None) - + + core.playerService.performUnity(owner, proposer) return + if eventType == 1: proposer = core.objectService.getObjectByCustomName(owner.getAttachment("proposer")) proposer.sendSystemMessage('@unity:declined', 0) + for SWGObject in proposer.getEquipmentList(): + if SWGObject.getAttachment("unity") is not None: + SWGObject.setAttachment("unity", None) + break + owner.setAttachment("proposer", None) return return \ No newline at end of file diff --git a/src/services/EquipmentService.java b/src/services/EquipmentService.java index 9f8ce9a5..ca9af8a5 100644 --- a/src/services/EquipmentService.java +++ b/src/services/EquipmentService.java @@ -35,6 +35,7 @@ import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; public class EquipmentService implements INetworkDispatch { @@ -214,14 +215,16 @@ public class EquipmentService implements INetworkDispatch { } } - if(!actor.getEquipmentList().contains(item)) + if(!actor.getEquipmentList().contains(item)) { + TangibleObject inventory = (TangibleObject) actor.getSlottedObject("inventory"); + inventory.transferTo(actor, actor, item); actor.addObjectToEquipList(item); - -} + } + } public void unequip(CreatureObject actor, SWGObject item) { - + String template = ((item.getAttachment("customServerTemplate") == null) ? item.getTemplate() : (item.getTemplate().split("shared_")[0] + "shared_" + ((String) item.getAttachment("customServerTemplate")) + ".iff")); String serverTemplate = template.replace(".iff", ""); PyObject func = core.scriptService.getMethod("scripts/" + serverTemplate.split("shared_" , 2)[0].replace("shared_", ""), serverTemplate.split("shared_" , 2)[1], "unequip"); @@ -230,15 +233,15 @@ public class EquipmentService implements INetworkDispatch { if (item.getStringAttribute("protection_level") != null) calculateForceProtection(actor, item, false); - + if(item.getStringAttribute("cat_wpn_damage.wpn_category") != null) if (actor.getSlotNameForObject(item).contentEquals("hold_r") == true) weaponCriticalToDisplay(actor, item, false); - + Map attributes = new TreeMap(item.getAttributes()); - + for(Entry e : attributes.entrySet()) { - + if(e.getKey().startsWith("cat_skill_mod_bonus.@stat_n:")) { core.skillModService.deductSkillMod(actor, e.getKey().replace("cat_skill_mod_bonus.@stat_n:", ""), Integer.parseInt((String) e.getValue())); } @@ -248,17 +251,16 @@ public class EquipmentService implements INetworkDispatch { if(e.getKey().startsWith("cat_attrib_mod_bonus.attr_action")) { actor.setMaxAction(actor.getMaxAction() - Integer.parseInt((String) e.getValue())); } - + } - + if(item.getAttachment("unity") != null) { actor.sendSystemMessage("@unity:cannot_remove_ring", (byte) 0); return; } - - if(actor.getEquipmentList().contains(item)) - actor.removeObjectFromEquipList(item); + if (actor.getEquipmentList().contains(item)) + actor.removeObjectFromEquipList(item); } } diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index 04ff8f72..c1d1095d 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -33,6 +33,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; @@ -51,7 +52,6 @@ import protocol.swg.SetWaypointColor; import protocol.swg.objectControllerObjects.ChangeRoleIconChoice; import protocol.swg.objectControllerObjects.ShowFlyText; import protocol.swg.objectControllerObjects.ShowLootBox; -import resources.common.Console; import resources.common.FileUtilities; import resources.common.ObjControllerOpcodes; import resources.common.Opcodes; @@ -65,6 +65,7 @@ import resources.objects.cell.CellObject; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerMessageBuilder; import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; import resources.objects.waypoint.WaypointObject; import services.sui.SUIService.ListBoxType; import services.sui.SUIWindow; @@ -76,6 +77,7 @@ import engine.clientdata.visitors.CrcStringTableVisitor; import engine.clientdata.visitors.DatatableVisitor; import engine.clients.Client; import engine.resources.common.CRC; +import engine.resources.container.Traverser; import engine.resources.objects.DraftSchematic; import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; @@ -806,6 +808,128 @@ public class PlayerService implements INetworkDispatch { client.getSession().write(objController.serialize()); } + public void performUnity(final CreatureObject acceptor, final CreatureObject proposer){ + TangibleObject acceptorInventory = (TangibleObject) acceptor.getSlottedObject("inventory"); + final AtomicBoolean acceptorHasRing = new AtomicBoolean(); + + acceptorInventory.viewChildren(acceptor, false, false, new Traverser() { + + @Override + public void process(SWGObject obj) { + if(obj.getAttachment("objType") != null) { + String objType = (String) obj.getAttachment("objType"); + if(objType == "ring") { + acceptorHasRing.set(true); + } + } + } + }); + + if(acceptorHasRing.get() == false) { + acceptor.sendSystemMessage("@unity:no_ring", (byte) 0); + proposer.sendSystemMessage("@unity:accept_fail", (byte) 0); + acceptor.setAttachment("proposer", null); + } else { + PlayerObject aGhost = (PlayerObject) acceptor.getSlottedObject("ghost"); + PlayerObject pGhost = (PlayerObject) proposer.getSlottedObject("ghost"); + + if (aGhost == null || pGhost == null) { + acceptor.sendSystemMessage("@unity:wed_error", (byte) 0); + proposer.sendSystemMessage("@unity:wed_error", (byte) 0); + acceptor.setAttachment("proposer", null); + return; + } else { + final Vector ringList = new Vector(); + acceptorInventory.viewChildren(acceptor, false, false, new Traverser() { + + @Override + public void process(SWGObject obj) { + if (obj.getAttachment("objType") != null) { + if (obj.getAttachment("objType") == "ring") { + ringList.add(obj); + } + } + } + }); + + if (ringList.size() > 1) { + sendRingSelectWindow(acceptor, proposer, ringList); + } else { + // Proposer's ring is already 'unified' from the start, so no + // need to set a unity attachment. + ringList.get(0).setAttachment("unity", (Boolean) true); + + if(!acceptor.getEquipmentList().contains(ringList.get(0))) + core.equipmentService.equip(acceptor, ringList.get(0)); + + aGhost.setSpouseName(proposer.getCustomName()); + pGhost.setSpouseName(acceptor.getCustomName()); + + acceptor.sendSystemMessage("Your union with " + proposer.getCustomName() + " is complete.", (byte) 0); + proposer.sendSystemMessage("Your union with " + acceptor.getCustomName() + " is complete.", (byte) 0); + + acceptor.setAttachment("proposer", null); + } + } + } + } + + private void sendRingSelectWindow(final CreatureObject actor, final CreatureObject proposer, Vector ringList) { + Map ringData = new HashMap(); + + for(SWGObject obj : ringList) { + ringData.put(obj.getObjectId(), obj.getCustomName()); + } + + final SUIWindow ringWindow = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@unity:ring_prompt", "@unity:ring_prompt", ringData, actor, proposer, (float) 15); + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + + ringWindow.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + int index = Integer.parseInt(returnList.get(0)); + + SWGObject selectedRing = core.objectService.getObject(ringWindow.getObjectIdByIndex(index)); + selectedRing.setAttachment("unity", (Boolean) true); + + if(!actor.getEquipmentList().contains(selectedRing)) + core.equipmentService.equip(actor, selectedRing); + + PlayerObject aGhost = (PlayerObject) actor.getSlottedObject("ghost"); + PlayerObject pGhost = (PlayerObject) proposer.getSlottedObject("ghost"); + aGhost.setSpouseName(proposer.getCustomName()); + pGhost.setSpouseName(actor.getCustomName()); + + actor.sendSystemMessage("Your union with " + proposer.getCustomName() + " is complete.", (byte) 0); + proposer.sendSystemMessage("Your union with " + actor.getCustomName() + " is complete.", (byte) 0); + } + + }); + + ringWindow.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { + + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + + PlayerObject aGhost = (PlayerObject) actor.getSlottedObject("ghost"); + PlayerObject pGhost = (PlayerObject) proposer.getSlottedObject("ghost"); + + actor.sendSystemMessage("@unity:decline", (byte) 0); + proposer.sendSystemMessage("@unity:declined", (byte) 0); + actor.setAttachment("proposer", null); + for(SWGObject obj : proposer.getEquipmentList()) { + if(obj.getAttachment("unity") != null) { + obj.setAttachment("unity", null); + break; + } + } + } + }); + core.suiService.openSUIWindow(ringWindow); + } + @Override public void shutdown() { // TODO Auto-generated method stub diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index 14be116d..a71cb9c3 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -697,6 +697,9 @@ public class SimulationService implements INetworkDispatch { final CreatureObject object = (CreatureObject) client.getParent(); PlayerObject ghost = (PlayerObject) object.getSlottedObject("ghost"); + if(object.getAttachment("proposer") != null) + object.setAttachment("proposer", null); + //session.suspendWrite(); final long objectId = object.getObjectID(); From 9851afe0039cea2665ad4362e3cf30749b9c1e60 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Thu, 13 Mar 2014 18:57:09 -0400 Subject: [PATCH 008/107] Forgot to unstage file --- src/services/EquipmentService.java | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/services/EquipmentService.java b/src/services/EquipmentService.java index ca9af8a5..9f8ce9a5 100644 --- a/src/services/EquipmentService.java +++ b/src/services/EquipmentService.java @@ -35,7 +35,6 @@ import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import resources.objects.player.PlayerObject; -import resources.objects.tangible.TangibleObject; public class EquipmentService implements INetworkDispatch { @@ -215,16 +214,14 @@ public class EquipmentService implements INetworkDispatch { } } - if(!actor.getEquipmentList().contains(item)) { - TangibleObject inventory = (TangibleObject) actor.getSlottedObject("inventory"); - inventory.transferTo(actor, actor, item); + if(!actor.getEquipmentList().contains(item)) actor.addObjectToEquipList(item); - } - } + +} public void unequip(CreatureObject actor, SWGObject item) { - + String template = ((item.getAttachment("customServerTemplate") == null) ? item.getTemplate() : (item.getTemplate().split("shared_")[0] + "shared_" + ((String) item.getAttachment("customServerTemplate")) + ".iff")); String serverTemplate = template.replace(".iff", ""); PyObject func = core.scriptService.getMethod("scripts/" + serverTemplate.split("shared_" , 2)[0].replace("shared_", ""), serverTemplate.split("shared_" , 2)[1], "unequip"); @@ -233,15 +230,15 @@ public class EquipmentService implements INetworkDispatch { if (item.getStringAttribute("protection_level") != null) calculateForceProtection(actor, item, false); - + if(item.getStringAttribute("cat_wpn_damage.wpn_category") != null) if (actor.getSlotNameForObject(item).contentEquals("hold_r") == true) weaponCriticalToDisplay(actor, item, false); - + Map attributes = new TreeMap(item.getAttributes()); - + for(Entry e : attributes.entrySet()) { - + if(e.getKey().startsWith("cat_skill_mod_bonus.@stat_n:")) { core.skillModService.deductSkillMod(actor, e.getKey().replace("cat_skill_mod_bonus.@stat_n:", ""), Integer.parseInt((String) e.getValue())); } @@ -251,16 +248,17 @@ public class EquipmentService implements INetworkDispatch { if(e.getKey().startsWith("cat_attrib_mod_bonus.attr_action")) { actor.setMaxAction(actor.getMaxAction() - Integer.parseInt((String) e.getValue())); } - + } - + if(item.getAttachment("unity") != null) { actor.sendSystemMessage("@unity:cannot_remove_ring", (byte) 0); return; } - - if (actor.getEquipmentList().contains(item)) + + if(actor.getEquipmentList().contains(item)) actor.removeObjectFromEquipList(item); + } } From 6e30ac0a0d6662c4ad93c96644e914e34904c827 Mon Sep 17 00:00:00 2001 From: Treeku Date: Fri, 14 Mar 2014 16:18:16 +0000 Subject: [PATCH 009/107] Commented a spammy message --- src/services/collections/CollectionService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/collections/CollectionService.java b/src/services/collections/CollectionService.java index 61671372..ba063de9 100644 --- a/src/services/collections/CollectionService.java +++ b/src/services/collections/CollectionService.java @@ -289,7 +289,7 @@ public class CollectionService implements INetworkDispatch { } } else { if (numAltTitles > 0 || alternateTitles.length > 0) { - System.out.println(slotName + ": slot " + slotName + " cannot have any alternative titles unless it is defined as \"titleable\""); + //System.out.println(slotName + ": slot " + slotName + " cannot have any alternative titles unless it is defined as \"titleable\""); } } From fae3847b640d2fc64d1d52f9fc1bab4f942ba2cf Mon Sep 17 00:00:00 2001 From: Treeku Date: Fri, 14 Mar 2014 16:47:42 +0000 Subject: [PATCH 010/107] Evaluation improvements for collections --- .../collections/CollectionService.java | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/services/collections/CollectionService.java b/src/services/collections/CollectionService.java index ba063de9..025307e5 100644 --- a/src/services/collections/CollectionService.java +++ b/src/services/collections/CollectionService.java @@ -185,17 +185,17 @@ public class CollectionService implements INetworkDispatch { ((String) collectionTable.getObject(c, 32)) }; - if (bookName == "") { + if (bookName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a book"); throw new Exception(); } - if (pageName == "") { + if (pageName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a page"); throw new Exception(); } - if (collectionName == "") { + if (collectionName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a collection"); throw new Exception(); } @@ -460,30 +460,30 @@ public class CollectionService implements INetworkDispatch { if (slotName.equals(collection)) { int beginSlotId = ((Integer) collectionTable.getObject(c, 4)); - if (bookName == "") { + if (bookName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a book"); throw new Exception(); } - if (pageName == "") { + if (pageName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a page"); throw new Exception(); } - if (collectionName == "") { + if (collectionName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a collection"); throw new Exception(); } - if (collection == bookName) { + if (collection.equals(bookName)) { System.out.println("Checking if a book is complete is unsupported at this time."); throw new Exception(); - } else if (collection == pageName) { + } else if (collection.equals(pageName)) { System.out.println("Checking if a page is complete is unsupported at this time."); throw new Exception(); - } else if (collection == collectionName) { + } else if (collection.equals(collectionName)) { return collections.get(beginSlotId); - } else if (collection == slotName) { + } else if (collection.equals(slotName)) { return collections.get(beginSlotId); } } @@ -545,34 +545,34 @@ public class CollectionService implements INetworkDispatch { int maxSlotValue = ((Integer) collectionTable.getObject(c, 6)); int bits = 0; - if (bookName == "") { + if (bookName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a book"); throw new Exception(); } - if (pageName == "") { + if (pageName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a page"); throw new Exception(); } - if (collectionName == "") { + if (collectionName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a collection"); throw new Exception(); } - if (collection == bookName) { + if (collection.equals(bookName)) { found += getCollection(creature, pageName); continue; - } else if (collection == pageName) { + } else if (collection.equals(pageName)) { found += getCollection(creature, collectionName); continue; - } else if (collection == collectionName) { + } else if (collection.equals(collectionName)) { if (collections.get(beginSlotId)) { found++; } continue; - } else if (collection == slotName) { + } else if (collection.equals(slotName)) { if (endSlotId != -1) { if (beginSlotId >= endSlotId) { System.out.println(slotName + ", row " + c + ": begin slot id " + beginSlotId + " must be < end slot id" + endSlotId); @@ -705,23 +705,23 @@ public class CollectionService implements INetworkDispatch { int beginSlotId = ((Integer) collectionTable.getObject(c, 4)); int endSlotId = ((Integer) collectionTable.getObject(c, 5)); - if (bookName == "") { + if (bookName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a book"); throw new Exception(); } - if (pageName == "") { + if (pageName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a page"); throw new Exception(); } - if (collectionName == "") { + if (collectionName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a collection"); throw new Exception(); } - if (collection == bookName || collection == pageName || - collection == collectionName || collection == slotName) { + if (collection.equals(bookName) || collection.equals(pageName) || + collection.equals(collectionName) || collection.equals(slotName)) { found = true; if (collections.get(beginSlotId, endSlotId + 1).cardinality() > 0) { @@ -794,17 +794,17 @@ public class CollectionService implements INetworkDispatch { int beginSlotId = ((Integer) collectionTable.getObject(c, 4)); int endSlotId = ((Integer) collectionTable.getObject(c, 5)); - if (bookName == "") { + if (bookName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a book"); throw new Exception(); } - if (pageName == "") { + if (pageName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a page"); throw new Exception(); } - if (collectionName == "") { + if (collectionName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a collection"); throw new Exception(); } From d581cc94cb0285d6eb4e8b7b5d03805c94caa213 Mon Sep 17 00:00:00 2001 From: xbang21 Date: Fri, 14 Mar 2014 21:35:53 -0400 Subject: [PATCH 011/107] Fixed some debuffs and buffs - added all entertainer debuffs and buffs - fixed some movement related buffs --- scripts/buffs/en_action_regen.py | 10 ++++++++ scripts/buffs/en_debuff_thrill.py | 10 ++++++++ scripts/buffs/en_debuff_thrill_1.py | 10 ++++++++ scripts/buffs/en_debuff_thrill_2.py | 10 ++++++++ scripts/buffs/en_spiral_kick_snare.py | 9 +++++++ scripts/buffs/en_sprint.py | 12 +++++++++ scripts/buffs/en_sweeping_pirouette_root.py | 9 +++++++ scripts/buffs/en_unhealthy_fixation_debuff.py | 9 +++++++ scripts/buffs/en_void_dance_buff.py | 10 ++++++++ scripts/buffs/en_void_dance_buff_1.py | 10 ++++++++ scripts/buffs/en_void_dance_buff_2.py | 10 ++++++++ scripts/buffs/en_void_dance_buff_3.py | 10 ++++++++ scripts/buffs/fs_ae_dm_cc_0.py | 7 +++--- scripts/buffs/fs_ae_dm_cc_1.py | 7 +++--- scripts/buffs/fs_ae_dm_cc_2.py | 7 +++--- scripts/buffs/fs_ae_dm_cc_3.py | 7 +++--- scripts/buffs/fs_ae_dm_cc_4.py | 7 +++--- scripts/buffs/fs_ae_dm_cc_5.py | 7 +++--- scripts/buffs/fs_ae_dm_cc_6.py | 7 +++--- scripts/buffs/fs_force_throw.py | 8 +++--- scripts/buffs/of_ae_dm_cc_1.py | 4 +-- scripts/buffs/of_ae_dm_cc_2.py | 4 +-- scripts/buffs/of_ae_dm_cc_3.py | 4 +-- scripts/buffs/of_cc_melee_1.py | 4 +-- scripts/buffs/of_cc_melee_2.py | 4 +-- scripts/buffs/of_cc_melee_3.py | 4 +-- scripts/buffs/of_cc_melee_4.py | 4 +-- scripts/buffs/of_cc_melee_5.py | 4 +-- scripts/buffs/of_cc_melee_6.py | 4 +-- scripts/buffs/of_cc_melee_7.py | 4 +-- scripts/buffs/of_vortex_root.py | 4 +-- scripts/buffs/sm_ae_dm_cc_1.py | 4 +-- scripts/buffs/sm_ae_dm_cc_2.py | 4 +-- scripts/buffs/sm_ae_dm_cc_3.py | 4 +-- scripts/buffs/sm_ae_dm_cc_4.py | 4 +-- scripts/buffs/sm_ae_dm_cc_5.py | 4 +-- scripts/buffs/sm_ae_dm_cc_6.py | 4 +-- scripts/commands/co_first_aid_training.py | 1 - scripts/commands/combat/en_spiral_kick_0.py | 11 ++++++++ scripts/commands/combat/en_spiral_kick_1.py | 11 ++++++++ scripts/commands/combat/en_spiral_kick_2.py | 11 ++++++++ scripts/commands/combat/en_spiral_kick_3.py | 11 ++++++++ scripts/commands/combat/en_spiral_kick_4.py | 11 ++++++++ scripts/commands/combat/en_thrill.py | 11 ++++++++ scripts/commands/combat/en_thrill_1.py | 11 ++++++++ scripts/commands/combat/en_thrill_2.py | 11 ++++++++ scripts/commands/combat/en_thrill_3.py | 11 ++++++++ .../commands/combat/en_unhealthy_fixation.py | 11 ++++++++ scripts/commands/combat/en_void_dance.py | 11 ++++++++ scripts/commands/combat/en_void_dance_1.py | 11 ++++++++ scripts/commands/combat/en_void_dance_2.py | 11 ++++++++ scripts/commands/combat/en_void_dance_3.py | 11 ++++++++ scripts/commands/combat/fs_dm_cc_crit_1.py | 10 ++++++++ scripts/commands/en_action_regen.py | 8 ++++++ scripts/commands/en_sprint_1.py | 8 ++++++ scripts/commands/giveitem.py | 18 +------------ scripts/commands/setgodmode.py | 25 +++++++++++++++++++ 57 files changed, 383 insertions(+), 85 deletions(-) create mode 100644 scripts/buffs/en_action_regen.py create mode 100644 scripts/buffs/en_debuff_thrill.py create mode 100644 scripts/buffs/en_debuff_thrill_1.py create mode 100644 scripts/buffs/en_debuff_thrill_2.py create mode 100644 scripts/buffs/en_spiral_kick_snare.py create mode 100644 scripts/buffs/en_sprint.py create mode 100644 scripts/buffs/en_sweeping_pirouette_root.py create mode 100644 scripts/buffs/en_unhealthy_fixation_debuff.py create mode 100644 scripts/buffs/en_void_dance_buff.py create mode 100644 scripts/buffs/en_void_dance_buff_1.py create mode 100644 scripts/buffs/en_void_dance_buff_2.py create mode 100644 scripts/buffs/en_void_dance_buff_3.py create mode 100644 scripts/commands/combat/en_spiral_kick_0.py create mode 100644 scripts/commands/combat/en_spiral_kick_1.py create mode 100644 scripts/commands/combat/en_spiral_kick_2.py create mode 100644 scripts/commands/combat/en_spiral_kick_3.py create mode 100644 scripts/commands/combat/en_spiral_kick_4.py create mode 100644 scripts/commands/combat/en_thrill.py create mode 100644 scripts/commands/combat/en_thrill_1.py create mode 100644 scripts/commands/combat/en_thrill_2.py create mode 100644 scripts/commands/combat/en_thrill_3.py create mode 100644 scripts/commands/combat/en_unhealthy_fixation.py create mode 100644 scripts/commands/combat/en_void_dance.py create mode 100644 scripts/commands/combat/en_void_dance_1.py create mode 100644 scripts/commands/combat/en_void_dance_2.py create mode 100644 scripts/commands/combat/en_void_dance_3.py create mode 100644 scripts/commands/combat/fs_dm_cc_crit_1.py create mode 100644 scripts/commands/en_action_regen.py create mode 100644 scripts/commands/en_sprint_1.py diff --git a/scripts/buffs/en_action_regen.py b/scripts/buffs/en_action_regen.py new file mode 100644 index 00000000..6193a43d --- /dev/null +++ b/scripts/buffs/en_action_regen.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_action_weapon_melee', 60) + + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_action_weapon_melee', 60) + return \ No newline at end of file diff --git a/scripts/buffs/en_debuff_thrill.py b/scripts/buffs/en_debuff_thrill.py new file mode 100644 index 00000000..69ced2d5 --- /dev/null +++ b/scripts/buffs/en_debuff_thrill.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 2) + + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 2) + return \ No newline at end of file diff --git a/scripts/buffs/en_debuff_thrill_1.py b/scripts/buffs/en_debuff_thrill_1.py new file mode 100644 index 00000000..0c399bb3 --- /dev/null +++ b/scripts/buffs/en_debuff_thrill_1.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 4) + + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 4) + return \ No newline at end of file diff --git a/scripts/buffs/en_debuff_thrill_2.py b/scripts/buffs/en_debuff_thrill_2.py new file mode 100644 index 00000000..0f533529 --- /dev/null +++ b/scripts/buffs/en_debuff_thrill_2.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 6) + + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 6) + return \ No newline at end of file diff --git a/scripts/buffs/en_spiral_kick_snare.py b/scripts/buffs/en_spiral_kick_snare.py new file mode 100644 index 00000000..82a33b29 --- /dev/null +++ b/scripts/buffs/en_spiral_kick_snare.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) + return + +def removeBuff(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/en_sprint.py b/scripts/buffs/en_sprint.py new file mode 100644 index 00000000..842e0c3c --- /dev/null +++ b/scripts/buffs/en_sprint.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement_resist_snare', 100) + core.skillModService.addSkillMod(actor, 'movement', 5) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) + core.skillModService.deductSkillMod(actor, 'movement_resist_snare', 100) + return + \ No newline at end of file diff --git a/scripts/buffs/en_sweeping_pirouette_root.py b/scripts/buffs/en_sweeping_pirouette_root.py new file mode 100644 index 00000000..32ba0f8d --- /dev/null +++ b/scripts/buffs/en_sweeping_pirouette_root.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 10) + return + +def removeBuff(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 10) + return \ No newline at end of file diff --git a/scripts/buffs/en_unhealthy_fixation_debuff.py b/scripts/buffs/en_unhealthy_fixation_debuff.py new file mode 100644 index 00000000..2ae015d2 --- /dev/null +++ b/scripts/buffs/en_unhealthy_fixation_debuff.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'en_unhealthy_stun', 1) + return + +def removeBuff(core, actor, buff): + core.skillModService.addSkillMod(actor, 'en_unhealthy_stun', 1) + return \ No newline at end of file diff --git a/scripts/buffs/en_void_dance_buff.py b/scripts/buffs/en_void_dance_buff.py new file mode 100644 index 00000000..c0318a09 --- /dev/null +++ b/scripts/buffs/en_void_dance_buff.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 60) + + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 60) + return \ No newline at end of file diff --git a/scripts/buffs/en_void_dance_buff_1.py b/scripts/buffs/en_void_dance_buff_1.py new file mode 100644 index 00000000..2c8f2ee9 --- /dev/null +++ b/scripts/buffs/en_void_dance_buff_1.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 65) + + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 65) + return \ No newline at end of file diff --git a/scripts/buffs/en_void_dance_buff_2.py b/scripts/buffs/en_void_dance_buff_2.py new file mode 100644 index 00000000..a6aa1d1f --- /dev/null +++ b/scripts/buffs/en_void_dance_buff_2.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 70) + + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 70) + return \ No newline at end of file diff --git a/scripts/buffs/en_void_dance_buff_3.py b/scripts/buffs/en_void_dance_buff_3.py new file mode 100644 index 00000000..c4674163 --- /dev/null +++ b/scripts/buffs/en_void_dance_buff_3.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 75) + + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 75) + return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_0.py b/scripts/buffs/fs_ae_dm_cc_0.py index 493481d7..82a33b29 100644 --- a/scripts/buffs/fs_ae_dm_cc_0.py +++ b/scripts/buffs/fs_ae_dm_cc_0.py @@ -1,10 +1,9 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_1.py b/scripts/buffs/fs_ae_dm_cc_1.py index 493481d7..82a33b29 100644 --- a/scripts/buffs/fs_ae_dm_cc_1.py +++ b/scripts/buffs/fs_ae_dm_cc_1.py @@ -1,10 +1,9 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_2.py b/scripts/buffs/fs_ae_dm_cc_2.py index 493481d7..82a33b29 100644 --- a/scripts/buffs/fs_ae_dm_cc_2.py +++ b/scripts/buffs/fs_ae_dm_cc_2.py @@ -1,10 +1,9 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_3.py b/scripts/buffs/fs_ae_dm_cc_3.py index 493481d7..82a33b29 100644 --- a/scripts/buffs/fs_ae_dm_cc_3.py +++ b/scripts/buffs/fs_ae_dm_cc_3.py @@ -1,10 +1,9 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_4.py b/scripts/buffs/fs_ae_dm_cc_4.py index 493481d7..82a33b29 100644 --- a/scripts/buffs/fs_ae_dm_cc_4.py +++ b/scripts/buffs/fs_ae_dm_cc_4.py @@ -1,10 +1,9 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_5.py b/scripts/buffs/fs_ae_dm_cc_5.py index 493481d7..82a33b29 100644 --- a/scripts/buffs/fs_ae_dm_cc_5.py +++ b/scripts/buffs/fs_ae_dm_cc_5.py @@ -1,10 +1,9 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_6.py b/scripts/buffs/fs_ae_dm_cc_6.py index 493481d7..82a33b29 100644 --- a/scripts/buffs/fs_ae_dm_cc_6.py +++ b/scripts/buffs/fs_ae_dm_cc_6.py @@ -1,10 +1,9 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/fs_force_throw.py b/scripts/buffs/fs_force_throw.py index f20ef882..82a33b29 100644 --- a/scripts/buffs/fs_force_throw.py +++ b/scripts/buffs/fs_force_throw.py @@ -1,11 +1,9 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', float(-0.5)) - + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', float(-0.5)) - return - \ No newline at end of file + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/of_ae_dm_cc_1.py b/scripts/buffs/of_ae_dm_cc_1.py index 620bbaaa..82a33b29 100644 --- a/scripts/buffs/of_ae_dm_cc_1.py +++ b/scripts/buffs/of_ae_dm_cc_1.py @@ -1,9 +1,9 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_ae_dm_cc_2.py b/scripts/buffs/of_ae_dm_cc_2.py index 620bbaaa..82a33b29 100644 --- a/scripts/buffs/of_ae_dm_cc_2.py +++ b/scripts/buffs/of_ae_dm_cc_2.py @@ -1,9 +1,9 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_ae_dm_cc_3.py b/scripts/buffs/of_ae_dm_cc_3.py index 620bbaaa..82a33b29 100644 --- a/scripts/buffs/of_ae_dm_cc_3.py +++ b/scripts/buffs/of_ae_dm_cc_3.py @@ -1,9 +1,9 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_1.py b/scripts/buffs/of_cc_melee_1.py index 620bbaaa..82a33b29 100644 --- a/scripts/buffs/of_cc_melee_1.py +++ b/scripts/buffs/of_cc_melee_1.py @@ -1,9 +1,9 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_2.py b/scripts/buffs/of_cc_melee_2.py index 620bbaaa..82a33b29 100644 --- a/scripts/buffs/of_cc_melee_2.py +++ b/scripts/buffs/of_cc_melee_2.py @@ -1,9 +1,9 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_3.py b/scripts/buffs/of_cc_melee_3.py index 620bbaaa..82a33b29 100644 --- a/scripts/buffs/of_cc_melee_3.py +++ b/scripts/buffs/of_cc_melee_3.py @@ -1,9 +1,9 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_4.py b/scripts/buffs/of_cc_melee_4.py index 620bbaaa..82a33b29 100644 --- a/scripts/buffs/of_cc_melee_4.py +++ b/scripts/buffs/of_cc_melee_4.py @@ -1,9 +1,9 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_5.py b/scripts/buffs/of_cc_melee_5.py index 620bbaaa..82a33b29 100644 --- a/scripts/buffs/of_cc_melee_5.py +++ b/scripts/buffs/of_cc_melee_5.py @@ -1,9 +1,9 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_6.py b/scripts/buffs/of_cc_melee_6.py index 620bbaaa..82a33b29 100644 --- a/scripts/buffs/of_cc_melee_6.py +++ b/scripts/buffs/of_cc_melee_6.py @@ -1,9 +1,9 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_7.py b/scripts/buffs/of_cc_melee_7.py index 620bbaaa..82a33b29 100644 --- a/scripts/buffs/of_cc_melee_7.py +++ b/scripts/buffs/of_cc_melee_7.py @@ -1,9 +1,9 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_root.py b/scripts/buffs/of_vortex_root.py index 5048a0be..32ba0f8d 100644 --- a/scripts/buffs/of_vortex_root.py +++ b/scripts/buffs/of_vortex_root.py @@ -1,9 +1,9 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', 0) + core.skillModService.deductSkillMod(actor, 'movement', 10) return def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 10) + core.skillModService.addSkillMod(actor, 'movement', 10) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_1.py b/scripts/buffs/sm_ae_dm_cc_1.py index 18da7f78..82a33b29 100644 --- a/scripts/buffs/sm_ae_dm_cc_1.py +++ b/scripts/buffs/sm_ae_dm_cc_1.py @@ -1,9 +1,9 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_2.py b/scripts/buffs/sm_ae_dm_cc_2.py index 18da7f78..82a33b29 100644 --- a/scripts/buffs/sm_ae_dm_cc_2.py +++ b/scripts/buffs/sm_ae_dm_cc_2.py @@ -1,9 +1,9 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_3.py b/scripts/buffs/sm_ae_dm_cc_3.py index 18da7f78..82a33b29 100644 --- a/scripts/buffs/sm_ae_dm_cc_3.py +++ b/scripts/buffs/sm_ae_dm_cc_3.py @@ -1,9 +1,9 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_4.py b/scripts/buffs/sm_ae_dm_cc_4.py index 18da7f78..82a33b29 100644 --- a/scripts/buffs/sm_ae_dm_cc_4.py +++ b/scripts/buffs/sm_ae_dm_cc_4.py @@ -1,9 +1,9 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_5.py b/scripts/buffs/sm_ae_dm_cc_5.py index 18da7f78..82a33b29 100644 --- a/scripts/buffs/sm_ae_dm_cc_5.py +++ b/scripts/buffs/sm_ae_dm_cc_5.py @@ -1,9 +1,9 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_6.py b/scripts/buffs/sm_ae_dm_cc_6.py index 18da7f78..82a33b29 100644 --- a/scripts/buffs/sm_ae_dm_cc_6.py +++ b/scripts/buffs/sm_ae_dm_cc_6.py @@ -1,9 +1,9 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + core.skillModService.deductSkillMod(actor, 'movement', 5) return def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/commands/co_first_aid_training.py b/scripts/commands/co_first_aid_training.py index baf4621d..e185f733 100644 --- a/scripts/commands/co_first_aid_training.py +++ b/scripts/commands/co_first_aid_training.py @@ -4,6 +4,5 @@ def setup(): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'co_first_aid_training') return \ No newline at end of file diff --git a/scripts/commands/combat/en_spiral_kick_0.py b/scripts/commands/combat/en_spiral_kick_0.py new file mode 100644 index 00000000..eee76225 --- /dev/null +++ b/scripts/commands/combat/en_spiral_kick_0.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_spiral_kick_snare') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_spiral_kick_1.py b/scripts/commands/combat/en_spiral_kick_1.py new file mode 100644 index 00000000..eee76225 --- /dev/null +++ b/scripts/commands/combat/en_spiral_kick_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_spiral_kick_snare') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_spiral_kick_2.py b/scripts/commands/combat/en_spiral_kick_2.py new file mode 100644 index 00000000..eee76225 --- /dev/null +++ b/scripts/commands/combat/en_spiral_kick_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_spiral_kick_snare') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_spiral_kick_3.py b/scripts/commands/combat/en_spiral_kick_3.py new file mode 100644 index 00000000..eee76225 --- /dev/null +++ b/scripts/commands/combat/en_spiral_kick_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_spiral_kick_snare') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_spiral_kick_4.py b/scripts/commands/combat/en_spiral_kick_4.py new file mode 100644 index 00000000..eee76225 --- /dev/null +++ b/scripts/commands/combat/en_spiral_kick_4.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_spiral_kick_snare') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_thrill.py b/scripts/commands/combat/en_thrill.py new file mode 100644 index 00000000..868b6bed --- /dev/null +++ b/scripts/commands/combat/en_thrill.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_debuff_thrill') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_thrill_1.py b/scripts/commands/combat/en_thrill_1.py new file mode 100644 index 00000000..c3fd3fc2 --- /dev/null +++ b/scripts/commands/combat/en_thrill_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_debuff_thrill_1') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_thrill_2.py b/scripts/commands/combat/en_thrill_2.py new file mode 100644 index 00000000..c3fd3fc2 --- /dev/null +++ b/scripts/commands/combat/en_thrill_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_debuff_thrill_1') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_thrill_3.py b/scripts/commands/combat/en_thrill_3.py new file mode 100644 index 00000000..2783c9d7 --- /dev/null +++ b/scripts/commands/combat/en_thrill_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_debuff_thrill_2') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_unhealthy_fixation.py b/scripts/commands/combat/en_unhealthy_fixation.py new file mode 100644 index 00000000..620dd09a --- /dev/null +++ b/scripts/commands/combat/en_unhealthy_fixation.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_unhealthy_fixation_debuff') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_void_dance.py b/scripts/commands/combat/en_void_dance.py new file mode 100644 index 00000000..2354238e --- /dev/null +++ b/scripts/commands/combat/en_void_dance.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_void_dance_buff') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_void_dance_1.py b/scripts/commands/combat/en_void_dance_1.py new file mode 100644 index 00000000..cdc97c59 --- /dev/null +++ b/scripts/commands/combat/en_void_dance_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_void_dance_buff_1') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_void_dance_2.py b/scripts/commands/combat/en_void_dance_2.py new file mode 100644 index 00000000..186e477a --- /dev/null +++ b/scripts/commands/combat/en_void_dance_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_void_dance_buff_2') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_void_dance_3.py b/scripts/commands/combat/en_void_dance_3.py new file mode 100644 index 00000000..77d58c3d --- /dev/null +++ b/scripts/commands/combat/en_void_dance_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_void_dance_buff_3') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_dm_cc_crit_1.py b/scripts/commands/combat/fs_dm_cc_crit_1.py new file mode 100644 index 00000000..493481d7 --- /dev/null +++ b/scripts/commands/combat/fs_dm_cc_crit_1.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return + \ No newline at end of file diff --git a/scripts/commands/en_action_regen.py b/scripts/commands/en_action_regen.py new file mode 100644 index 00000000..c6905572 --- /dev/null +++ b/scripts/commands/en_action_regen.py @@ -0,0 +1,8 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'en_action_regen') + return \ No newline at end of file diff --git a/scripts/commands/en_sprint_1.py b/scripts/commands/en_sprint_1.py new file mode 100644 index 00000000..1393d38e --- /dev/null +++ b/scripts/commands/en_sprint_1.py @@ -0,0 +1,8 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'en_sprint') + return \ No newline at end of file diff --git a/scripts/commands/giveitem.py b/scripts/commands/giveitem.py index de894888..23b9e75d 100644 --- a/scripts/commands/giveitem.py +++ b/scripts/commands/giveitem.py @@ -4,21 +4,5 @@ def setup(): return def run(core, actor, target, commandString): - - if actor.getClient() and actor.getClient().isGM() == False: - return - - if not commandString.startswith('object/tangible') and not commandString.startswith('object/weapon'): - return - - object = core.objectService.createObject(commandString, actor.getPlanet()) - - if not object: - return - - inventory = actor.getSlottedObject('inventory') - - if inventory: - inventory.add(object) - + core.playerService.giveExperience(actor, 25000) return \ No newline at end of file diff --git a/scripts/commands/setgodmode.py b/scripts/commands/setgodmode.py index c4fd1f08..536a588b 100644 --- a/scripts/commands/setgodmode.py +++ b/scripts/commands/setgodmode.py @@ -1,5 +1,10 @@ import sys from engine.resources.scene import Point3D +from protocol.swg import CommPlayerMessage +from protocol.swg.objectControllerObjects import ShowLootBox +from protocol.swg import ObjControllerMessage +from engine.resources.objects import SWGObject +from jarray import array def setup(): return @@ -48,4 +53,24 @@ def run(core, actor, target, commandString): actor.addAbility(str(arg1)) actor.sendSystemMessage('You have learned ' + arg1 + '') + elif command == 'anim' and arg1: + actor.doSkillAnimation(arg1) + actor.sendSystemMessage('Performed ' + arg1 ,0) + + elif command == 'changeBio' and arg1: + actor.getSlottedObject('ghost').setBiography(arg1) + + elif command == 'rewardMe': + testObject = core.objectService.createObject('object/weapon/ranged/rifle/shared_rifle_t21.iff', actor.getPlanet()) + testObject.setCustomName('Crush4r') + testObject.setStringAttribute('crafter', 'Wavescrub') + dGun = core.objectService.createObject('object/weapon/ranged/rifle/shared_rifle_tc22_blaster.iff', actor.getPlanet()) + dGun.setCustomName('Supertoms Gun') + dGun.setStringAttribute('crafter', 'Wavescrub') + core.playerService.giveItems(actor, testObject, dGun) + return + + elif command == 'comm': + comm = CommPlayerMessage(actor.getObjectId()) + actor.getClient().getSession().write(comm.serialize()) return From d4e05ff84cdd92afb920920b040182acc0600617 Mon Sep 17 00:00:00 2001 From: xbang21 Date: Fri, 14 Mar 2014 21:48:24 -0400 Subject: [PATCH 012/107] Delete giveitem.py --- scripts/commands/giveitem.py | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 scripts/commands/giveitem.py diff --git a/scripts/commands/giveitem.py b/scripts/commands/giveitem.py deleted file mode 100644 index 23b9e75d..00000000 --- a/scripts/commands/giveitem.py +++ /dev/null @@ -1,8 +0,0 @@ -import sys - -def setup(): - return - -def run(core, actor, target, commandString): - core.playerService.giveExperience(actor, 25000) - return \ No newline at end of file From a907f479a90f8612f0901266f0a88423ded290fa Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sat, 15 Mar 2014 11:48:59 -0400 Subject: [PATCH 013/107] Added Server Firsts packet --- .../CollectionServerFirstListResponse.java | 69 +++++++++++++++++++ src/services/PlayerService.java | 13 ++++ .../collections/CollectionService.java | 4 +- src/services/collections/ServerFirst.java | 25 ++++++- 4 files changed, 107 insertions(+), 4 deletions(-) create mode 100644 src/protocol/swg/CollectionServerFirstListResponse.java diff --git a/src/protocol/swg/CollectionServerFirstListResponse.java b/src/protocol/swg/CollectionServerFirstListResponse.java new file mode 100644 index 00000000..74a01c2f --- /dev/null +++ b/src/protocol/swg/CollectionServerFirstListResponse.java @@ -0,0 +1,69 @@ +/******************************************************************************* + * 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 java.util.Map; +import java.util.Map.Entry; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +import services.collections.ServerFirst; +import engine.resources.common.CRC; + +public class CollectionServerFirstListResponse extends SWGMessage { + + private Map sfList; + + public CollectionServerFirstListResponse(Map serverFirstList){ + this.sfList = serverFirstList; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer; + + synchronized (sfList) { + String galaxy = NGECore.getInstance().getConfig().getString("GALAXY_NAME"); + buffer = IoBuffer.allocate(14 + galaxy.length()).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) 2); + buffer.putInt(CRC.StringtoCRC("CollectionServerFirstListResponse")); + + buffer.put(getAsciiString(galaxy + ".0")); + buffer.putInt(sfList.size()); + + for (Entry entry : sfList.entrySet()) { + buffer.expand(entry.getValue().getBytes().length); + buffer.put(entry.getValue().getBytes()); + + } + return buffer.flip(); + } + } +} diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index c1d1095d..d04a1f98 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -41,6 +41,7 @@ import org.apache.mina.core.session.IoSession; import protocol.swg.CharacterSheetResponseMessage; import protocol.swg.ClientIdMsg; import protocol.swg.ClientMfdStatusUpdateMessage; +import protocol.swg.CollectionServerFirstListResponse; import protocol.swg.CreateClientPathMessage; import protocol.swg.ExpertiseRequestMessage; import protocol.swg.GuildRequestMessage; @@ -392,7 +393,19 @@ public class PlayerService implements INetworkDispatch { @Override public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { + + Client client = core.getClient(session); + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + CollectionServerFirstListResponse response = new CollectionServerFirstListResponse(core.guildService.getGuildObject().getServerFirst()); + session.write(response.serialize()); } }); diff --git a/src/services/collections/CollectionService.java b/src/services/collections/CollectionService.java index 61671372..f7cbe42e 100644 --- a/src/services/collections/CollectionService.java +++ b/src/services/collections/CollectionService.java @@ -142,7 +142,7 @@ public class CollectionService implements INetworkDispatch { int bits = 0; boolean noScriptOnModify = false; boolean clearOnComplete = false; - boolean noMessage = true; + boolean noMessage = false; boolean grantIfPreReqMet = true; boolean buddyCollection = false; int numAltTitles = 0; @@ -359,7 +359,7 @@ public class CollectionService implements INetworkDispatch { } if (trackServerFirst) { - if (core.guildService.getGuildObject().addServerFirst(collectionName, new ServerFirst(creature.getCustomName(), System.currentTimeMillis()))) { + if (core.guildService.getGuildObject().addServerFirst(collectionName, new ServerFirst(creature.getCustomName(), creature.getObjectId(), collectionName, System.currentTimeMillis()))) { addCollection(creature, "bdg_server_first_01"); } } diff --git a/src/services/collections/ServerFirst.java b/src/services/collections/ServerFirst.java index 1a955ed2..2b855fb4 100644 --- a/src/services/collections/ServerFirst.java +++ b/src/services/collections/ServerFirst.java @@ -21,6 +21,8 @@ ******************************************************************************/ package services.collections; +import org.apache.mina.core.buffer.IoBuffer; + import resources.objects.Delta; import com.sleepycat.persist.model.Persistent; @@ -29,11 +31,15 @@ import com.sleepycat.persist.model.Persistent; public class ServerFirst extends Delta { private String name; + private String collection; private long time; + private long objectId; - public ServerFirst(String name, long time) { + public ServerFirst(String name, long objectId, String collection, long time) { this.name = name; + this.objectId = objectId; this.time = time; + this.collection = collection; } public ServerFirst() { @@ -48,9 +54,24 @@ public class ServerFirst extends Delta { return time; } + public long getObjectId() { + return objectId; + } + + public String getCollection() { + return collection; + } + @Override public byte[] getBytes() { - return new byte[] { }; + synchronized(objectMutex) { + IoBuffer buffer = createBuffer(18 + collection.length() + (name.length() * 2)); + buffer.putInt((int) time / 1000); + buffer.put(getAsciiString(collection)); + buffer.putLong(objectId); + buffer.put(getUnicodeString(name)); + return buffer.array(); + } } } From ca2401147dfa9644a99a6f50f5bbf54b7a19def9 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sat, 15 Mar 2014 13:50:36 -0400 Subject: [PATCH 014/107] Added Server First request, changed how response allocates bytes --- .../swg/CollectionServerFirstListRequest.java | 51 +++++++++++++++++++ .../CollectionServerFirstListResponse.java | 16 ++++-- src/services/PlayerService.java | 12 +++-- 3 files changed, 71 insertions(+), 8 deletions(-) create mode 100644 src/protocol/swg/CollectionServerFirstListRequest.java diff --git a/src/protocol/swg/CollectionServerFirstListRequest.java b/src/protocol/swg/CollectionServerFirstListRequest.java new file mode 100644 index 00000000..d22ef081 --- /dev/null +++ b/src/protocol/swg/CollectionServerFirstListRequest.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * 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 org.apache.mina.core.buffer.IoBuffer; + +public class CollectionServerFirstListRequest extends SWGMessage { + + private String server; + + public CollectionServerFirstListRequest() { + } + + @Override + public void deserialize(IoBuffer data) { + setServer(getAsciiString(data)); + } + + public String getServer() { + return server; + } + + @Override + public IoBuffer serialize() { + return null; + } + + public void setServer(String server) { + this.server = server; + } + +} diff --git a/src/protocol/swg/CollectionServerFirstListResponse.java b/src/protocol/swg/CollectionServerFirstListResponse.java index 74a01c2f..163627da 100644 --- a/src/protocol/swg/CollectionServerFirstListResponse.java +++ b/src/protocol/swg/CollectionServerFirstListResponse.java @@ -35,9 +35,11 @@ import engine.resources.common.CRC; public class CollectionServerFirstListResponse extends SWGMessage { private Map sfList; + private String server; - public CollectionServerFirstListResponse(Map serverFirstList){ + public CollectionServerFirstListResponse(String server, Map serverFirstList){ this.sfList = serverFirstList; + this.server = server; } @Override @@ -49,17 +51,21 @@ public class CollectionServerFirstListResponse extends SWGMessage { public IoBuffer serialize() { IoBuffer buffer; + int size = 0; + synchronized (sfList) { - String galaxy = NGECore.getInstance().getConfig().getString("GALAXY_NAME"); - buffer = IoBuffer.allocate(14 + galaxy.length()).order(ByteOrder.LITTLE_ENDIAN); + for (Entry entry : sfList.entrySet()) { + size += entry.getValue().getBytes().length; + } + + buffer = IoBuffer.allocate(12 + server.length() + size).order(ByteOrder.LITTLE_ENDIAN); buffer.putShort((short) 2); buffer.putInt(CRC.StringtoCRC("CollectionServerFirstListResponse")); - buffer.put(getAsciiString(galaxy + ".0")); + buffer.put(getAsciiString(server)); buffer.putInt(sfList.size()); for (Entry entry : sfList.entrySet()) { - buffer.expand(entry.getValue().getBytes().length); buffer.put(entry.getValue().getBytes()); } diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index d04a1f98..1f2a7b6c 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -41,6 +41,7 @@ import org.apache.mina.core.session.IoSession; import protocol.swg.CharacterSheetResponseMessage; import protocol.swg.ClientIdMsg; import protocol.swg.ClientMfdStatusUpdateMessage; +import protocol.swg.CollectionServerFirstListRequest; import protocol.swg.CollectionServerFirstListResponse; import protocol.swg.CreateClientPathMessage; import protocol.swg.ExpertiseRequestMessage; @@ -58,6 +59,7 @@ import resources.common.ObjControllerOpcodes; import resources.common.Opcodes; import resources.common.RGB; import resources.common.SpawnPoint; +import resources.common.StringUtilities; import resources.datatables.PlayerFlags; import resources.guild.Guild; import resources.objects.Buff; @@ -392,8 +394,9 @@ public class PlayerService implements INetworkDispatch { swgOpcodes.put(Opcodes.CollectionServerFirstListRequest, new INetworkRemoteEvent() { @Override - public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { - + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + data.order(ByteOrder.LITTLE_ENDIAN); + Client client = core.getClient(session); if (client == null) @@ -404,7 +407,10 @@ public class PlayerService implements INetworkDispatch { if (player == null) return; - CollectionServerFirstListResponse response = new CollectionServerFirstListResponse(core.guildService.getGuildObject().getServerFirst()); + CollectionServerFirstListRequest request = new CollectionServerFirstListRequest(); + request.deserialize(data); + + CollectionServerFirstListResponse response = new CollectionServerFirstListResponse(request.getServer(), core.guildService.getGuildObject().getServerFirst()); session.write(response.serialize()); } From fc35adbf7863630f303da2c65446f7663343f45e Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sat, 15 Mar 2014 14:30:09 -0400 Subject: [PATCH 015/107] ServerListResponse not sent on login anymore --- src/protocol/swg/CollectionServerFirstListRequest.java | 2 ++ src/services/PlayerService.java | 10 ++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/protocol/swg/CollectionServerFirstListRequest.java b/src/protocol/swg/CollectionServerFirstListRequest.java index d22ef081..cc053664 100644 --- a/src/protocol/swg/CollectionServerFirstListRequest.java +++ b/src/protocol/swg/CollectionServerFirstListRequest.java @@ -32,6 +32,8 @@ public class CollectionServerFirstListRequest extends SWGMessage { @Override public void deserialize(IoBuffer data) { + data.getShort(); + data.getInt(); setServer(getAsciiString(data)); } diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index 1f2a7b6c..5c6f5982 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -396,7 +396,8 @@ public class PlayerService implements INetworkDispatch { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { data.order(ByteOrder.LITTLE_ENDIAN); - + data.position(0); + Client client = core.getClient(session); if (client == null) @@ -409,8 +410,13 @@ public class PlayerService implements INetworkDispatch { CollectionServerFirstListRequest request = new CollectionServerFirstListRequest(); request.deserialize(data); + + String server = request.getServer(); + System.out.println(server); + if (server == null || server.equals("")) + return; - CollectionServerFirstListResponse response = new CollectionServerFirstListResponse(request.getServer(), core.guildService.getGuildObject().getServerFirst()); + CollectionServerFirstListResponse response = new CollectionServerFirstListResponse(server, core.guildService.getGuildObject().getServerFirst()); session.write(response.serialize()); } From d008f3fa37dd48c0d9fc7132ef43518cff4ba00b Mon Sep 17 00:00:00 2001 From: Treeku Date: Sat, 15 Mar 2014 19:52:17 +0000 Subject: [PATCH 016/107] giveExperience() takes account of XP bonuses --- src/services/PlayerService.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index c1d1095d..0c8dc7bc 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -573,6 +573,10 @@ public class PlayerService implements INetworkDispatch { // Cannot gain more than half of the XP needed for the next level in one go // Do check + int experienceBonus = creature.getSkillModBase("flush_with_success"); + + experience += ((experience * experienceBonus) / 100); + // 1. Add the experience. if (experience > 0) { creature.showFlyText("base_player", "prose_flytext_xp", "", experience, (float) 2.5, new RGB(180, 60, 240), 1); From 3152ab021c6de340bbe54386629be098664a4aff Mon Sep 17 00:00:00 2001 From: Treeku Date: Sun, 16 Mar 2014 00:13:38 +0000 Subject: [PATCH 017/107] No longer be able to heal duel opponent --- src/services/combat/CombatService.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/services/combat/CombatService.java b/src/services/combat/CombatService.java index e657b941..acabae46 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -855,6 +855,10 @@ public class CombatService implements INetworkDispatch { if(healer == target) return true; + if (areInDuel(healer, target)) { + return false; + } + if(healer.getFaction().equals(target.getFaction())) { if(healer.getFactionStatus() < target.getFactionStatus()) From 3f3d4e93fe0a2389eb810605ddcf86f7e5a0b29a Mon Sep 17 00:00:00 2001 From: Treeku Date: Sun, 16 Mar 2014 00:29:34 +0000 Subject: [PATCH 018/107] Only medics and NPCs can heal others now --- src/services/combat/CombatService.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/services/combat/CombatService.java b/src/services/combat/CombatService.java index acabae46..04f65a4f 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -855,6 +855,12 @@ public class CombatService implements INetworkDispatch { if(healer == target) return true; + PlayerObject healerPo = healer.getSlottedObject("ghost"); + + if (healerPo != null && !healerPo.getProfession().startsWith("medic")) { + return false; + } + if (areInDuel(healer, target)) { return false; } From d85bd44d7b591cff82934911bf139c141d4633bb Mon Sep 17 00:00:00 2001 From: Treeku Date: Sun, 16 Mar 2014 00:45:48 +0000 Subject: [PATCH 019/107] Fixed error --- src/services/combat/CombatService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/combat/CombatService.java b/src/services/combat/CombatService.java index 04f65a4f..01f73d43 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -855,7 +855,7 @@ public class CombatService implements INetworkDispatch { if(healer == target) return true; - PlayerObject healerPo = healer.getSlottedObject("ghost"); + PlayerObject healerPo = (PlayerObject) healer.getSlottedObject("ghost"); if (healerPo != null && !healerPo.getProfession().startsWith("medic")) { return false; From 84f7fe8ae5e498b55b02ce15d564119cdc948125 Mon Sep 17 00:00:00 2001 From: Treeku Date: Sun, 16 Mar 2014 01:12:16 +0000 Subject: [PATCH 020/107] Duels are ended when a client disconnects --- src/services/ConnectionService.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index 934efd58..92769c47 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -191,18 +191,26 @@ public class ConnectionService implements INetworkDispatch { return; CreatureObject object = (CreatureObject) client.getParent(); + object.setInviteCounter(0); object.setInviteSenderId(0); object.setInviteSenderName(""); core.groupService.handleGroupDisband(object); + + for (opponent : object.getDuelList()) { + if (opponent != null) { + core.combatService.handleEndDuel(object, opponent); + } + } + object.setClient(null); + PlayerObject ghost = (PlayerObject) object.getSlottedObject("ghost"); if(ghost == null) return; - if(object.getGroupId() != 0) - core.groupService.handleGroupDisband(object); + if () Point3D objectPos = object.getWorldPosition(); From a9e794dd14b764f5a1dac49e0e0c4fc64cafbdd4 Mon Sep 17 00:00:00 2001 From: Treeku Date: Sun, 16 Mar 2014 01:18:59 +0000 Subject: [PATCH 021/107] Fixed reference for prev --- src/services/ConnectionService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index 92769c47..f21f9de5 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -56,6 +56,7 @@ import resources.common.collidables.AbstractCollidable; import resources.datatables.PlayerFlags; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; @SuppressWarnings("unused") @@ -197,7 +198,7 @@ public class ConnectionService implements INetworkDispatch { object.setInviteSenderName(""); core.groupService.handleGroupDisband(object); - for (opponent : object.getDuelList()) { + for (TangibleObject opponent : object.getDuelList()) { if (opponent != null) { core.combatService.handleEndDuel(object, opponent); } From f99098d1579e4dba697fa3bbb6ed420470a6bd54 Mon Sep 17 00:00:00 2001 From: Levarrishawk Date: Sat, 15 Mar 2014 21:22:16 -0400 Subject: [PATCH 022/107] Added Dungeon & Space Terrains Added all Kashyyyk / Mustafar / Heroic Dungeon terrain files. Added framework for post-release content additions. --- src/main/NGECore.java | 44 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/src/main/NGECore.java b/src/main/NGECore.java index 48281f51..2d491e9d 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -306,8 +306,8 @@ public class NGECore { zoneServer = new MINAServer(zoneDispatch, config.getInt("ZONE.PORT")); zoneServer.start(); staticService = new StaticService(this); - - // Planets + //Start terrainList + // Original Planets terrainService.addPlanet(1, "tatooine", "terrain/tatooine.trn", true); terrainService.addPlanet(2, "naboo", "terrain/naboo.trn", true); terrainService.addPlanet(3, "corellia", "terrain/corellia.trn", true); @@ -320,6 +320,46 @@ public class NGECore { terrainService.addPlanet(10, "dathomir", "terrain/dathomir.trn", true); terrainService.addPlanet(11, "mustafar", "terrain/mustafar.trn", true); terrainService.addPlanet(12, "kashyyyk_main", "terrain/kashyyyk_main.trn", true); + //Dungeon Terrains + terrainService.addPlanet(13, "kashyyyk_dead_forest", "terrain/kashyyyk_dead_forest.trn", true); + terrainService.addPlanet(14, "kashyyyk_hunting", "terrain/kashyyyk_hunting.trn", true); + terrainService.addPlanet(15, "kashyyyk_north_dungeons", "terrain/kashyyyk_north_dungeons.trn", true); + terrainService.addPlanet(16, "kashyyyk_rryatt_trail", "terrain/kashyyyk_rryatt_trail.trn", true); + terrainService.addPlanet(17, "kashyyyk_south_dungeons", "terrain/kashyyyk_south_dungeons.trn", true); + terrainService.addPlanet(18, "adventure1", "terrain/adventure1.trn", true); + terrainService.addPlanet(19, "adventure2", "terrain/adventure2.trn", true); + terrainService.addPlanet(20, "dungeon1", "terrain/dungeon1.trn", true); + //Space Zones + terrainService.addPlanet(21, "space_corellia", "terrain/space_corellia.trn", true); + terrainService.addPlanet(22, "space_corellia_2", "terrain/space_corellia_2.trn", true); + terrainService.addPlanet(23, "space_dantooine", "terrain/space_dantooine.trn", true); + terrainService.addPlanet(24, "space_dathomir", "terrain/space_dathomir.trn", true); + terrainService.addPlanet(25, "space_endor", "terrain/space_endor.trn", true); + terrainService.addPlanet(26, "space_env", "terrain/space_env.trn", true); + terrainService.addPlanet(27, "space_halos", "terrain/space_halos.trn", true); + terrainService.addPlanet(28, "space_heavy1", "terrain/space_heavy1.trn", true); + terrainService.addPlanet(29, "space_kashyyyk", "terrain/space_kashyyyk.trn", true); + terrainService.addPlanet(30, "space_light1", "terrain/space_light1.trn", true); + terrainService.addPlanet(31, "space_lok", "terrain/space_lok.trn", true); + terrainService.addPlanet(32, "space_naboo", "terrain/space_naboo.trn", true); + terrainService.addPlanet(33, "space_naboo_2", "terrain/space_naboo_2.trn", true); + terrainService.addPlanet(34, "space_nova_orion", "terrain/space_nova_orion.trn", true); + terrainService.addPlanet(35, "space_npe_falcon", "terrain/space_npe_falcon.trn", true); + terrainService.addPlanet(36, "space_npe_falcon_2", "terrain/space_npe_falcon_2.trn", true); + terrainService.addPlanet(37, "space_ord_mantell", "terrain/space_ord_mantell.trn", true); + terrainService.addPlanet(38, "space_ord_mantell_2", "terrain/space_ord_mantell_2.trn", true); + terrainService.addPlanet(39, "space_ord_mantell_3", "terrain/space_ord_mantell_3.trn", true); + terrainService.addPlanet(40, "space_ord_mantell_4", "terrain/space_ord_mantell_4.trn", true); + terrainService.addPlanet(41, "space_ord_mantell_5", "terrain/space_ord_mantell_5.trn", true); + terrainService.addPlanet(42, "space_ord_mantell_6", "terrain/space_ord_mantell_6.trn", true); + terrainService.addPlanet(43, "space_tatooine", "terrain/space_tatooine.trn", true); + terrainService.addPlanet(44, "space_tatooine_2", "terrain/space_tatooine_2.trn", true); + terrainService.addPlanet(45, "space_yavin4", "terrain/space_yavin4.trn", true); + //PSWG New Content Terrains (WARNING Keep commented out unless you have the current build of kaas!) + /* + terrainService.addPlanet(46, "kaas", "terrain/kaas.trn", true); + */ + //end terrainList spawnService = new SpawnService(this); terrainService.loadClientPois(); // Travel Points From 0891bc871c1bc958204143caad54f25674df38f5 Mon Sep 17 00:00:00 2001 From: Levarrishawk Date: Sat, 15 Mar 2014 21:22:30 -0400 Subject: [PATCH 023/107] Fixed Recursion Error --- scripts/object/building/military/outpost_cloning_facility.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/object/building/military/outpost_cloning_facility.py b/scripts/object/building/military/outpost_cloning_facility.py index c3d8cb98..e5c55907 100644 --- a/scripts/object/building/military/outpost_cloning_facility.py +++ b/scripts/object/building/military/outpost_cloning_facility.py @@ -4,7 +4,7 @@ from resources.common import SpawnPoint def setup(core, object): objSvc = core.objectService - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(0.0387871), float(0.125265), float(-6), float(-0.0595427), float(0.998226), 3) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(0.04), float(0.16), float(-6), float(-0.06), float(0.99), 3) spawnPoints = Vector() spawnPoints.add(SpawnPoint(3.2408, 0.125266, -3.59732, 0.707641, -0.706572, 5)) From 4130de20c655c9d19635017cb3784f4dd3e454dd Mon Sep 17 00:00:00 2001 From: Treeku Date: Sun, 16 Mar 2014 01:25:44 +0000 Subject: [PATCH 024/107] Fixed ref 2 --- src/services/ConnectionService.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index f21f9de5..1d18bf53 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -56,7 +56,6 @@ import resources.common.collidables.AbstractCollidable; import resources.datatables.PlayerFlags; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; -import resources.objects.tangible.TangibleObject; @SuppressWarnings("unused") @@ -198,7 +197,7 @@ public class ConnectionService implements INetworkDispatch { object.setInviteSenderName(""); core.groupService.handleGroupDisband(object); - for (TangibleObject opponent : object.getDuelList()) { + for (CreatureObject opponent : object.getDuelList()) { if (opponent != null) { core.combatService.handleEndDuel(object, opponent); } From 02ef99900a1a7cb37b0b1df24739211ac0acb3b4 Mon Sep 17 00:00:00 2001 From: Levarrishawk Date: Sat, 15 Mar 2014 21:45:09 -0400 Subject: [PATCH 025/107] Fixed recursion error: AGAIN! Same error as last time. --- scripts/object/building/military/outpost_cloning_facility.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/object/building/military/outpost_cloning_facility.py b/scripts/object/building/military/outpost_cloning_facility.py index e5c55907..e9fd684a 100644 --- a/scripts/object/building/military/outpost_cloning_facility.py +++ b/scripts/object/building/military/outpost_cloning_facility.py @@ -7,7 +7,7 @@ def setup(core, object): objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(0.04), float(0.16), float(-6), float(-0.06), float(0.99), 3) spawnPoints = Vector() - spawnPoints.add(SpawnPoint(3.2408, 0.125266, -3.59732, 0.707641, -0.706572, 5)) + spawnPoints.add(SpawnPoint(3.24, 0.16, -3.60, 0.71, -0.71, 5)) object.setAttachment('spawnPoints', spawnPoints) From c02d876bbaaf8910ffc21b3db42a2c690a5b3146 Mon Sep 17 00:00:00 2001 From: Levarrishawk Date: Sat, 15 Mar 2014 22:28:41 -0400 Subject: [PATCH 026/107] Fixed additional recursion errors --- .../military/outpost_cloning_facility_s02.py | 8 ++++---- .../object/building/military/outpost_starport.py | 4 ++-- .../building/naboo/cloning_facility_naboo.py | 14 +++++++------- .../object/building/naboo/hangar_naboo_theed.py | 12 ++++++------ scripts/object/building/naboo/starport_naboo.py | 6 +++--- scripts/static_spawns/kaas.py | 13 +++++++++++++ src/services/StaticService.java | 1 + 7 files changed, 36 insertions(+), 22 deletions(-) create mode 100644 scripts/static_spawns/kaas.py diff --git a/scripts/object/building/military/outpost_cloning_facility_s02.py b/scripts/object/building/military/outpost_cloning_facility_s02.py index b77dca9b..bcea9348 100644 --- a/scripts/object/building/military/outpost_cloning_facility_s02.py +++ b/scripts/object/building/military/outpost_cloning_facility_s02.py @@ -4,12 +4,12 @@ from resources.common import SpawnPoint def setup(core, object): objSvc = core.objectService - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(-5.5), float(0.125265), float(-3.43841), float(0.699512), float(0.714621), 6) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(-5.5), float(0.13), float(-3.44), float(0.70), float(0.71), 6) spawnPoints = Vector() - spawnPoints.add(SpawnPoint(4.44727, 0.125266, -3.80136, -0.706468, 0.707745, 5)) - spawnPoints.add(SpawnPoint(4.65395, 0.125266, 1.49466, 0.714548, -0.699587, 4)) - spawnPoints.add(SpawnPoint(-3.99569, 0.125266, -3.51553, 0.70407, 0.710131, 6)) + spawnPoints.add(SpawnPoint(4.45, 0.13, -3.80, -0.71, 0.71, 5)) + spawnPoints.add(SpawnPoint(4.65, 0.13, 1.50, 0.71, -0.70, 4)) + spawnPoints.add(SpawnPoint(-3.99, 0.13, -3.52, 0.70, 0.71, 6)) object.setAttachment('spawnPoints', spawnPoints) diff --git a/scripts/object/building/military/outpost_starport.py b/scripts/object/building/military/outpost_starport.py index 22ca3e75..b0e8b915 100644 --- a/scripts/object/building/military/outpost_starport.py +++ b/scripts/object/building/military/outpost_starport.py @@ -2,9 +2,9 @@ import sys def setup(core, object): objSvc = core.objectService - objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_transport.iff', 0, 7, 0, 0.707107, 0.707107) + objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_transport.iff', 0, 7, 0, 0.71, 0.71) objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 1, 0, -10, 0, 1) - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-3.12), float(0.14659503), float(-17.57), float(0.707107), float(-0.707107), 1) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-3.12), float(0.15), float(-17.57), float(0.71), float(-0.71), 1) core.mapService.addLocation(object.getPlanet(), 'Starport', object.getPosition().x, object.getPosition().z, 15, 0, 0) return \ No newline at end of file diff --git a/scripts/object/building/naboo/cloning_facility_naboo.py b/scripts/object/building/naboo/cloning_facility_naboo.py index 76288df2..91cb87d3 100644 --- a/scripts/object/building/naboo/cloning_facility_naboo.py +++ b/scripts/object/building/naboo/cloning_facility_naboo.py @@ -8,13 +8,13 @@ def setup(core, object): objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(1), float(-0.05), float(-1.35), float(1), float(0), 2) spawnPoints = Vector() - spawnPoints.add(SpawnPoint(-16.6514, -4.29167, -10.4976, 0.709453, 0.704753, 4)) - spawnPoints.add(SpawnPoint(-16.5965, -4.29167, -14.1652, 0.721346, 0.692575, 4)) - spawnPoints.add(SpawnPoint(16.5771, -4.29167, -14.2091, 0.71195, -0.702231, 4)) - spawnPoints.add(SpawnPoint(16.6876, -4.29167, -10.5391, -0.6972, 0.716877, 4)) - spawnPoints.add(SpawnPoint(6.32992, -4.79167, 0.613332, 0.999992, 0.00405023, 4)) - spawnPoints.add(SpawnPoint(1.58067, -4.79167, 0.582775, 0.989691, 0.0143216, 4)) - spawnPoints.add(SpawnPoint(-2.84125, -4.79167, 0.657588, -0.0356012, 0.999366, 4)) + spawnPoints.add(SpawnPoint(-16.66, -4.29, -10.50, 0.71, 0.70, 4)) + spawnPoints.add(SpawnPoint(-16.60, -4.29, -14.17, 0.72, 0.69, 4)) + spawnPoints.add(SpawnPoint(16.58, -4.29, -14.21, 0.71, -0.70, 4)) + spawnPoints.add(SpawnPoint(16.69, -4.29, -10.54, -0.70, 0.72, 4)) + spawnPoints.add(SpawnPoint(6.33, -4.79, 0.61, 0.99, 0.01, 4)) + spawnPoints.add(SpawnPoint(1.58, -4.79, 0.58, 0.99, 0.01, 4)) + spawnPoints.add(SpawnPoint(-2.84, -4.79, 0.66, -0.04, 0.99, 4)) object.setAttachment('spawnPoints', spawnPoints) diff --git a/scripts/object/building/naboo/hangar_naboo_theed.py b/scripts/object/building/naboo/hangar_naboo_theed.py index 41cc6f5c..79a247e9 100644 --- a/scripts/object/building/naboo/hangar_naboo_theed.py +++ b/scripts/object/building/naboo/hangar_naboo_theed.py @@ -3,12 +3,12 @@ import sys def setup(core, object): objSvc = core.objectService - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-26.94), float(0.749), float(-67.14), float(1), float(0), 3) - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(26.94), float(0.749), float(-67.14), float(1), float(0), 4) - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-9.49), float(7.979), float(-45.2359), float(0), float(1), 5) - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(9.49), float(7.979), float(-45.2359), float(0), float(1), 5) - objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', float(-10), float(7.979), float(10), float(-0.707107), float(0.707107), 5) - objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_transport_theed_hangar.iff', float(0), float(7.979), float(0), float(1), float(1), 5) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-26.94), float(0.75), float(-67.14), float(1), float(0), 3) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(26.94), float(0.75), float(-67.14), float(1), float(0), 4) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-9.49), float(7.98), float(-45.24), float(0), float(1), 5) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(9.49), float(7.98), float(-45.24), float(0), float(1), 5) + objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', float(-10), float(7.98), float(10), float(-0.71), float(0.71), 5) + objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_transport_theed_hangar.iff', float(0), float(7.98), float(0), float(1), float(1), 5) core.mapService.addLocation(object.getPlanet(), 'Starport', object.getPosition().x, object.getPosition().z, 15, 0, 0) diff --git a/scripts/object/building/naboo/starport_naboo.py b/scripts/object/building/naboo/starport_naboo.py index bfb384c6..e66e8bf2 100644 --- a/scripts/object/building/naboo/starport_naboo.py +++ b/scripts/object/building/naboo/starport_naboo.py @@ -2,12 +2,12 @@ import sys def setup(core, object): objSvc = core.objectService - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(11.5), float(0.6), float(51.3), float(0.195405), float(-0.980722), 4) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(11.5), float(0.6), float(51.3), float(0.20), float(-0.98), 4) objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(3.1), float(0.6), float(49), float(0), float(1), 4) objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-2.7), float(0.6), float(49), float(0), float(1), 4) - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-13.2), float(0.6), float(51.3), float(-0.195405), float(-0.980722), 4) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-13.2), float(0.6), float(51.3), float(-0.20), float(-0.98), 4) objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_transport.iff', 0, 0, 0, 1, 0) - objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 10, 0, -10, 0.707107, 0.707107) + objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 10, 0, -10, 0.71, 0.71) core.mapService.addLocation(object.getPlanet(), 'Starport', object.getPosition().x, object.getPosition().z, 15, 0, 0) return \ No newline at end of file diff --git a/scripts/static_spawns/kaas.py b/scripts/static_spawns/kaas.py new file mode 100644 index 00000000..6b171a07 --- /dev/null +++ b/scripts/static_spawns/kaas.py @@ -0,0 +1,13 @@ +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + + #stcSvc.spawnObject('object/mobile/shared_3po_protocol_droid_red.iff', 'tatooine', long(26582), float(-14.3), float(2.0), float(47.4), float(0.70), float(0.71)) + + + return + diff --git a/src/services/StaticService.java b/src/services/StaticService.java index a0447d0a..221ad1ce 100644 --- a/src/services/StaticService.java +++ b/src/services/StaticService.java @@ -56,6 +56,7 @@ public class StaticService implements INetworkDispatch { spawnPlanetStaticObjs("naboo"); spawnPlanetStaticObjs("tatooine"); spawnPlanetStaticObjs("lok"); + //spawnPlanetStaticObjs("kaas"); // Keep commented out unless you possess the latest build of Kaas! } @Override From 63842961a5b06a0fe489cb2eea6b815fe3afdf87 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 16 Mar 2014 04:25:11 +0100 Subject: [PATCH 027/107] Items - Added Jedi robes --- .../wearables/robe/robe_jedi_dark_s01.py | 25 ++++++++--------- .../wearables/robe/robe_jedi_dark_s02.py | 25 ++++++++--------- .../wearables/robe/robe_jedi_dark_s03.py | 27 +++++++++---------- .../wearables/robe/robe_jedi_light_s01.py | 25 ++++++++--------- .../wearables/robe/robe_jedi_light_s02.py | 25 ++++++++--------- .../wearables/robe/robe_jedi_light_s03.py | 27 +++++++++---------- 6 files changed, 68 insertions(+), 86 deletions(-) diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s01.py b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s01.py index 1d64fa57..6c8a9d3c 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s01.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s01.py @@ -1,18 +1,15 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_dark_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_dark_03_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 100) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 100) + object.setStringAttribute('protection_level', 'Weak') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 40) + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') + object.setAttachment('type', 'jedi_robe') return - -def equip(core, actor, target): - core.skillModService.addSkillMod(actor, 'constitution_modified', 100) - core.skillModService.addSkillMod(actor, 'precision_modified', 100) - - return - -def unequip(core, actor, target): - core.skillModService.deductSkillMod(actor, 'constitution_modified', 100) - core.skillModService.deductSkillMod(actor, 'precision_modified', 100) - - - return - \ No newline at end of file diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s02.py b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s02.py index 0a02012a..ab11f14c 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s02.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s02.py @@ -1,18 +1,15 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_dark_03_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_dark_03_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 145) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 145) + object.setStringAttribute('protection_level', 'Lucent') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 60) + object.setAttachment('type', 'jedi_robe') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') return - -def equip(core, actor, target): - core.skillModService.addSkillMod(actor, 'constitution_modified', 145) - core.skillModService.addSkillMod(actor, 'precision_modified', 145) - - - return - -def unequip(core, actor, target): - core.skillModService.deductSkillMod(actor, 'constitution_modified', 145) - core.skillModService.deductSkillMod(actor, 'precision_modified', 145) - - return - \ No newline at end of file diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s03.py b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s03.py index 9a627b3b..ba216204 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s03.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s03.py @@ -1,19 +1,16 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_dark_03_03') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_dark_03_03') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 185) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 185) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 185) + object.setStringAttribute('protection_level', 'Luminous') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 80) + object.setAttachment('type', 'jedi_robe') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') return - -def equip(core, actor, target): - core.skillModService.addSkillMod(actor, 'constitution_modified', 185) - core.skillModService.addSkillMod(actor, 'precision_modified', 185) - core.skillModService.addSkillMod(actor, 'luck_modified', 185) - - return - -def unequip(core, actor, target): - core.skillModService.deductSkillMod(actor, 'constitution_modified', 185) - core.skillModService.deductSkillMod(actor, 'precision_modified', 185) - core.skillModService.deductSkillMod(actor, 'luck_modified', 185) - - return - \ No newline at end of file diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_light_s01.py b/scripts/object/tangible/wearables/robe/robe_jedi_light_s01.py index 639eac05..bc274ef4 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_light_s01.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_light_s01.py @@ -1,18 +1,15 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_light_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_light_03_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 100) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 100) + object.setStringAttribute('protection_level', 'Weak') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 40) + object.setAttachment('type', 'jedi_robe') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') return - -def equip(core, actor, target): - core.skillModService.addSkillMod(actor, 'constitution_modified', 100) - core.skillModService.addSkillMod(actor, 'strength_modified', 100) - - return - -def unequip(core, actor, target): - core.skillModService.deductSkillMod(actor, 'constitution_modified', 100) - core.skillModService.deductSkillMod(actor, 'strength_modified', 100) - - - return - \ No newline at end of file diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_light_s02.py b/scripts/object/tangible/wearables/robe/robe_jedi_light_s02.py index 9db15ef9..7e01e7ab 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_light_s02.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_light_s02.py @@ -1,18 +1,15 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_light_03_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_light_03_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 145) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 145) + object.setStringAttribute('protection_level', 'Lucent') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 60) + object.setAttachment('type', 'jedi_robe') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') return - -def equip(core, actor, target): - core.skillModService.addSkillMod(actor, 'constitution_modified', 145) - core.skillModService.addSkillMod(actor, 'strength_modified', 145) - - return - -def unequip(core, actor, target): - core.skillModService.deductSkillMod(actor, 'constitution_modified', 145) - core.skillModService.deductSkillMod(actor, 'strength_modified', 145) - - - return - \ No newline at end of file diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_light_s03.py b/scripts/object/tangible/wearables/robe/robe_jedi_light_s03.py index 6a546a09..a40fe4b9 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_light_s03.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_light_s03.py @@ -1,19 +1,16 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_light_03_03') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_light_03_03') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 185) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 185) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 185) + object.setStringAttribute('protection_level', 'Luminous') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 80) + object.setAttachment('type', 'jedi_robe') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') return - -def equip(core, actor, target): - core.skillModService.addSkillMod(actor, 'agility_modified', 185) - core.skillModService.addSkillMod(actor, 'constitution_modified', 185) - core.skillModService.addSkillMod(actor, 'strength_modified', 185) - - return - -def unequip(core, actor, target): - core.skillModService.deductSkillMod(actor, 'agility_modified', 185) - core.skillModService.deductSkillMod(actor, 'constitution_modified', 185) - core.skillModService.deductSkillMod(actor, 'strength_modified', 185) - - return - \ No newline at end of file From 97f4db58d13e63c69dd3d65444600402635db3d5 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sun, 16 Mar 2014 13:01:30 -0400 Subject: [PATCH 028/107] Buff Windows now close, changed formula used for stats on inspiration buffs, minor changes overall to entertainer --- scripts/buffs/buildabuff_inspiration.py | 14 +- scripts/commands/inspire.py | 10 +- scripts/commands/watch.py | 47 ++-- src/protocol/swg/ObjControllerMessage.java | 3 +- .../BuffBuilderChangeMessage.java | 219 +++++++++--------- .../BuffBuilderEndMessage.java | 197 ++++++++++++++++ src/resources/common/BuffBuilder.java | 114 +++++---- .../common/ObjControllerOpcodes.java | 1 + src/resources/objects/BuffItem.java | 45 ++-- .../objects/player/PlayerObject.java | 4 +- src/services/EntertainmentService.java | 170 ++++++++++---- src/services/chat/ChatService.java | 3 + 12 files changed, 565 insertions(+), 262 deletions(-) create mode 100644 src/protocol/swg/objectControllerObjects/BuffBuilderEndMessage.java diff --git a/scripts/buffs/buildabuff_inspiration.py b/scripts/buffs/buildabuff_inspiration.py index bfcff248..c6bf7407 100644 --- a/scripts/buffs/buildabuff_inspiration.py +++ b/scripts/buffs/buildabuff_inspiration.py @@ -10,18 +10,14 @@ def setup(core, actor, buff): buff.setDuration(3600) #1 hour - for BuffBuilder in buffWorkshop: - core.skillModService.addSkillMod(actor, BuffBuilder.getStatAffects(), BuffBuilder.getTotalAffected()) - print (' gave the skill mod ' + BuffBuilder.getStatAffects() + ' with affect of ' + str(BuffBuilder.getTotalAffected())) - return - + for BuffItem in buffWorkshop: + core.skillModService.addSkillMod(actor, BuffItem.getSkillName(), BuffItem.getAffectAmount()) + return def removeBuff(core, actor, buff): - for BuffBuilder in actor.getAttachment('buffWorkshop'): - core.skillModService.deductSkillMod(actor, BuffBuilder.getStatAffects(), BuffBuilder.getTotalAffected()) - print ('removed skill mod!') - return + for BuffItem in actor.getAttachment('buffWorkshop'): + core.skillModService.deductSkillMod(actor, BuffItem.getSkillName(), BuffItem.getAffectAmount()) actor.setAttachment('buffWorkshop', 'none') return \ No newline at end of file diff --git a/scripts/commands/inspire.py b/scripts/commands/inspire.py index 46a97aaf..4a2aa2c8 100644 --- a/scripts/commands/inspire.py +++ b/scripts/commands/inspire.py @@ -12,7 +12,6 @@ def run(core, actor, target, commandString): return if target is None or actor.getObjectId() == target.getObjectId(): - print ('Buffing Player: ' + str(target.getObjectId()) + ' or: ' + target.getCustomName()) openBuffWindow = BuffBuilderStartMessage(actor.getObjectId(), actor.getObjectId(), actor.getObjectId()) objController = ObjControllerMessage(11, openBuffWindow) actor.getClient().getSession().write(objController.serialize()) @@ -30,12 +29,11 @@ def run(core, actor, target, commandString): actor.sendSystemMessage('@performance:insp_buff_must_listen', 2) return - print ('Buffing Player: ' + str(target.getObjectId()) + ' or: ' + target.getCustomName()) - openBuffWindow = BuffBuilderStartMessage(actor.getObjectId(), actor.getObjectId(), target.getObjectId()) - objController = ObjControllerMessage(11, openBuffWindow) + builderWindow = BuffBuilderStartMessage(actor.getObjectId(), actor.getObjectId(), target.getObjectId()) + objController = ObjControllerMessage(11, builderWindow) actor.getClient().getSession().write(objController.serialize()) - openBuffWindow = BuffBuilderStartMessage(target.getObjectId(), actor.getObjectId(), target.getObjectId()) - objController2 = ObjControllerMessage(11, openBuffWindow) + recipientWindow = BuffBuilderStartMessage(target.getObjectId(), actor.getObjectId(), target.getObjectId()) + objController2 = ObjControllerMessage(11, recipientWindow) target.getClient().getSession().write(objController2.serialize()) return diff --git a/scripts/commands/watch.py b/scripts/commands/watch.py index 5658d8fb..6e55feef 100644 --- a/scripts/commands/watch.py +++ b/scripts/commands/watch.py @@ -4,31 +4,30 @@ def setup(): return def run(core, actor, target, commandString): - if not target: - #FIXME: should accept name as a parameter. - # since that probably needs support in many places, - # best find a generic place for it in the server code - return + entSvc = core.entertainmentService + + if not target and commandString is not None: + target = core.chatService.getObjectByFirstName(commandString) + + if target is None: + return + + if not target.isPlayer(): + actor.sendSystemMessage('@performance:dance_watch_npc', 0) + return - if not target.isPlayer(): - actor.sendSystemMessage('@performance:dance_watch_npc') - return + perf = entSvc.getPerformanceByIndex(target.getPerformanceId()) - - entSvc = core.entertainmentService - perf = entSvc.getPerformanceByIndex(target.getPerformanceId()) + if target.getPosture() != 0x09 or not perf or perf.getDanceVisualId() < 0: + actor.sendSystemMessage(target.getCustomName() + ' is not dancing.',0) + return - if target.getPosture() != 0x09 or not perf or perf.getDanceVisualId() < 0: - actor.sendSystemMessage('@performance:dance_watch_not_dancing',0) - return - - oldWatchee = actor.getPerformanceWatchee() - if oldWatchee and oldWatchee != target: - oldWatchee.removeAudience(actor) - - actor.setPerformanceWatchee(target) - target.addAudience(actor) - actor.setMoodAnimation('entertained') - actor.sendSystemMessage('@performance:dance_watch_self',0) - return + oldWatchee = actor.getPerformanceWatchee() + if oldWatchee and oldWatchee != target: + oldWatchee.removeAudience(actor) + actor.setPerformanceWatchee(target) + target.addAudience(actor) + actor.setMoodAnimation('entertained') + actor.sendSystemMessage('You start watching ' + target.getCustomName() + '.',0) + return \ No newline at end of file diff --git a/src/protocol/swg/ObjControllerMessage.java b/src/protocol/swg/ObjControllerMessage.java index af68bbe7..a441cad4 100644 --- a/src/protocol/swg/ObjControllerMessage.java +++ b/src/protocol/swg/ObjControllerMessage.java @@ -55,8 +55,9 @@ public class ObjControllerMessage extends SWGMessage { public static final int SHOW_FLY_TEXT = 0x01BD; public static final int START_TASK = 0x448; public static final int ANIMATION = 0x00F2; - public static final int BUFF_BUILDER_START = 0x025C; public static final int BUFF_BUILDER_CHANGE = 0x025A; + public static final int BUFF_BUILDER_END = 0x025B; + public static final int BUFF_BUILDER_START = 0x025C; public static final int UI_PLAY_EFFECT = 0x0401; public static final int SHOW_LOOT_BOX = 0x04BC; diff --git a/src/protocol/swg/objectControllerObjects/BuffBuilderChangeMessage.java b/src/protocol/swg/objectControllerObjects/BuffBuilderChangeMessage.java index a877944a..ef067e9c 100644 --- a/src/protocol/swg/objectControllerObjects/BuffBuilderChangeMessage.java +++ b/src/protocol/swg/objectControllerObjects/BuffBuilderChangeMessage.java @@ -6,28 +6,26 @@ import java.util.Vector; import org.apache.mina.core.buffer.IoBuffer; import protocol.swg.ObjControllerMessage; -import resources.common.ObjControllerOpcodes; -import resources.common.StringUtilities; import resources.objects.BuffItem; public class BuffBuilderChangeMessage extends ObjControllerObject { + private boolean accepted; private int buffCost; - private int time; + + private long bufferId; + private int buffRecipientAccepted; + private long buffRecipientId; private long objectId; - private long bufferId; - private long buffRecipientId; - - private boolean accepted; - private int buffRecipientAccepted; - private Vector statBuffs = new Vector(); - + + private int time; + public BuffBuilderChangeMessage() { - + } - + public BuffBuilderChangeMessage(long objectId, long bufferId, long buffRecipientId, Vector statBuffs) { this.objectId = objectId; this.bufferId = bufferId; @@ -35,136 +33,135 @@ public class BuffBuilderChangeMessage extends ObjControllerObject { this.statBuffs = statBuffs; } - + @Override - public void deserialize(IoBuffer buffer) { - setObjectId(buffer.getLong()); - buffer.getInt(); - setBufferId(buffer.getLong()); - setBuffRecipientId(buffer.getLong()); - setTime(buffer.getInt()); - setBuffCost(buffer.getInt()); - - byte value = buffer.get(); + public void deserialize(IoBuffer data) { + setObjectId(data.getLong()); + data.getInt(); + setBufferId(data.getLong()); + setBuffRecipientId(data.getLong()); + setTime(data.getInt()); + setBuffCost(data.getInt()); + + byte value = data.get(); if (value == (byte) 0) setAccepted(false); else if (value == (byte) 1) setAccepted(true); - - setBuffRecipientAccepted(buffer.getInt()); - - int statSize = buffer.getInt(); + + setBuffRecipientAccepted(data.getInt()); + + int statSize = data.getInt(); for (int i = 0; i < statSize; i++) { BuffItem item = new BuffItem(); - - String statName = getAsciiString(buffer); + + String statName = getAsciiString(data); item.setSkillName(statName); - - int investedPoints = buffer.getInt(); + + int investedPoints = data.getInt(); item.setInvested(investedPoints); - - int maxAmount = buffer.getInt(); - item.setBonusAmount(maxAmount); - + + int entBonus = data.getInt(); + item.setEntertainerBonus(entBonus); + statBuffs.add(item); - System.out.println("Added buff item with " + investedPoints + " invested points " + " which has a bonus amount of " + maxAmount); } } - @Override - public IoBuffer serialize() { - IoBuffer result = IoBuffer.allocate(65 + statBuffs.size()).order(ByteOrder.LITTLE_ENDIAN); - result.setAutoExpand(true); - - result.putInt(ObjControllerMessage.BUFF_BUILDER_CHANGE); - result.putLong(objectId); - - result.putInt(0); - - result.putLong(bufferId); - result.putLong(buffRecipientId); - - result.putInt(time); - result.putInt(buffCost); - - result.put((byte) ((accepted) ? 1 : 0)); - result.putInt(buffRecipientAccepted); - - result.putInt(statBuffs.size()); - - if (!statBuffs.isEmpty()) { - for (BuffItem item : statBuffs) { - result.put(getAsciiString(item.getSkillName())); - result.putInt(item.getInvested()); - result.putInt(item.getBonusAmount()); - } - } - - return result.flip(); - } - - public int getBuffCost() { - return buffCost; - } - - public void setBuffCost(int buffCost) { - this.buffCost = buffCost; - } - - public int getTime() { - return time; - } - - public void setTime(int time) { - this.time = time; - } - - public long getObjectId() { - return objectId; - } - - public void setObjectId(long objectId) { - this.objectId = objectId; - } - - public long getBufferId() { - return bufferId; - } - - public void setBufferId(long bufferId) { - this.bufferId = bufferId; - } - - public long getBuffRecipientId() { - return buffRecipientId; - } - - public void setBuffRecipientId(long buffRecipientId) { - this.buffRecipientId = buffRecipientId; - } - public boolean getAccepted() { return accepted; } - public void setAccepted(boolean accepted) { - this.accepted = accepted; + public int getBuffCost() { + return buffCost; + } + + public long getBufferId() { + return bufferId; } public int getBuffRecipientAccepted() { return buffRecipientAccepted; } - public void setBuffRecipientAccepted(int buffRecipientAccepted) { - this.buffRecipientAccepted = buffRecipientAccepted; + public long getBuffRecipientId() { + return buffRecipientId; + } + + public long getObjectId() { + return objectId; } public Vector getStatBuffs() { return statBuffs; } + public int getTime() { + return time; + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(65 + statBuffs.size()).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + + result.putInt(ObjControllerMessage.BUFF_BUILDER_CHANGE); + result.putLong(objectId); + + result.putInt(0); + + result.putLong(bufferId); + result.putLong(buffRecipientId); + + result.putInt(time); + result.putInt(buffCost); + + result.put((byte) ((accepted) ? 1 : 0)); + result.putInt(buffRecipientAccepted); + + result.putInt(statBuffs.size()); + + if (!statBuffs.isEmpty()) { + for (BuffItem item : statBuffs) { + result.put(getAsciiString(item.getSkillName())); + result.putInt(item.getInvested()); + result.putInt(item.getEntertainerBonus()); + } + } + + return result.flip(); + } + + public void setAccepted(boolean accepted) { + this.accepted = accepted; + } + + public void setBuffCost(int buffCost) { + this.buffCost = buffCost; + } + + public void setBufferId(long bufferId) { + this.bufferId = bufferId; + } + + public void setBuffRecipientAccepted(int buffRecipientAccepted) { + this.buffRecipientAccepted = buffRecipientAccepted; + } + + public void setBuffRecipientId(long buffRecipientId) { + this.buffRecipientId = buffRecipientId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + public void setStatBuffs(Vector statBuffs) { this.statBuffs = statBuffs; } + public void setTime(int time) { + this.time = time; + } + } diff --git a/src/protocol/swg/objectControllerObjects/BuffBuilderEndMessage.java b/src/protocol/swg/objectControllerObjects/BuffBuilderEndMessage.java new file mode 100644 index 00000000..96a959db --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/BuffBuilderEndMessage.java @@ -0,0 +1,197 @@ +/******************************************************************************* + * 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.objectControllerObjects; + +import java.nio.ByteOrder; +import java.util.Vector; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; +import resources.objects.BuffItem; + +public class BuffBuilderEndMessage extends ObjControllerObject { + + private boolean accepted; + private int buffCost; + + private long bufferId; + private int buffRecipientAccepted; + private long buffRecipientId; + + private long objectId; + private Vector statBuffs = new Vector(); + + private int time; + + public BuffBuilderEndMessage() { + + } + + public BuffBuilderEndMessage(BuffBuilderEndMessage endMessage) { + this.buffCost = endMessage.getBuffCost(); + this.time = endMessage.getTime(); + this.accepted = endMessage.getAccepted(); + this.buffRecipientAccepted = endMessage.getBuffRecipientAccepted(); + this.statBuffs = endMessage.getStatBuffs(); + } + + public BuffBuilderEndMessage(BuffBuilderChangeMessage changeMessage) { + this.buffRecipientId = changeMessage.getBuffRecipientId(); + this.bufferId = changeMessage.getBufferId(); + this.buffCost = changeMessage.getBuffCost(); + this.time = changeMessage.getTime(); + this.accepted = changeMessage.getAccepted(); + this.buffRecipientAccepted = changeMessage.getBuffRecipientAccepted(); + this.statBuffs = changeMessage.getStatBuffs(); + } + @Override + public void deserialize(IoBuffer data) { + setObjectId(data.getLong()); + data.getInt(); + setBufferId(data.getLong()); + setBuffRecipientId(data.getLong()); + setTime(data.getInt()); + setBuffCost(data.getInt()); + + byte value = data.get(); + if (value == (byte) 0) + setAccepted(false); + else if (value == (byte) 1) + setAccepted(true); + + setBuffRecipientAccepted(data.getInt()); + + int statSize = data.getInt(); + for (int i = 0; i < statSize; i++) { + BuffItem item = new BuffItem(); + + String statName = getAsciiString(data); + item.setSkillName(statName); + + int investedPoints = data.getInt(); + item.setInvested(investedPoints); + + int entBonus = data.getInt(); + item.setEntertainerBonus(entBonus); + + statBuffs.add(item); + } + } + + public boolean getAccepted() { + return accepted; + } + + public int getBuffCost() { + return buffCost; + } + + public long getBufferId() { + return bufferId; + } + + public int getBuffRecipientAccepted() { + return buffRecipientAccepted; + } + + public long getBuffRecipientId() { + return buffRecipientId; + } + + public long getObjectId() { + return objectId; + } + + public Vector getStatBuffs() { + return statBuffs; + } + + public int getTime() { + return time; + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(65 + statBuffs.size()).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + + result.putInt(ObjControllerMessage.BUFF_BUILDER_END); + result.putLong(objectId); + + result.putInt(0); + + result.putLong(bufferId); + result.putLong(buffRecipientId); + + result.putInt(time); + result.putInt(buffCost); + + result.put((byte) ((accepted) ? 1 : 0)); + result.putInt(buffRecipientAccepted); + + result.putInt(statBuffs.size()); + + if (!statBuffs.isEmpty()) { + for (BuffItem item : statBuffs) { + result.put(getAsciiString(item.getSkillName())); + result.putInt(item.getInvested()); + result.putInt(item.getEntertainerBonus()); + } + } + + return result.flip(); + } + + public void setAccepted(boolean accepted) { + this.accepted = accepted; + } + + public void setBuffCost(int buffCost) { + this.buffCost = buffCost; + } + + public void setBufferId(long bufferId) { + this.bufferId = bufferId; + } + + public void setBuffRecipientAccepted(int buffRecipientAccepted) { + this.buffRecipientAccepted = buffRecipientAccepted; + } + + public void setBuffRecipientId(long buffRecipientId) { + this.buffRecipientId = buffRecipientId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + public void setStatBuffs(Vector statBuffs) { + this.statBuffs = statBuffs; + } + + public void setTime(int time) { + this.time = time; + } + +} diff --git a/src/resources/common/BuffBuilder.java b/src/resources/common/BuffBuilder.java index c376ae5a..83b2d9fb 100644 --- a/src/resources/common/BuffBuilder.java +++ b/src/resources/common/BuffBuilder.java @@ -1,70 +1,92 @@ +/******************************************************************************* + * 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.common; public class BuffBuilder { - private String statName; - private String statAffects; - private int maxTimesApplied; private int affectAmount; - private String requiredExperience; - - private int entBonus; - + private String category; + private int cost; + private int maxTimesApplied; + private String requiredExpertise; + private String statAffects; + private String statName; + public BuffBuilder() { - - } - public String getStatName() { - return statName; - } - - public void setStatName(String statName) { - this.statName = statName; - } - - public String getStatAffects() { - return statAffects; - } - - public void setStatAffects(String statAffects) { - this.statAffects = statAffects; - } - - public int getMaxTimesApplied() { - return maxTimesApplied; - } - - public void setMaxTimesApplied(int maxTimesApplied) { - this.maxTimesApplied = maxTimesApplied; } public int getAffectAmount() { return affectAmount; } + public String getCategory() { + return category; + } + + public int getCost() { + return this.cost; + } + + public int getMaxTimesApplied() { + return maxTimesApplied; + } + + public String getRequiredExpertise() { + return requiredExpertise; + } + + public String getStatAffects() { + return statAffects; + } + + public String getStatName() { + return statName; + } + public void setAffectAmount(int affectAmount) { this.affectAmount = affectAmount; } - public String getRequiredExperience() { - return requiredExperience; + public void setCategory(String category) { + this.category = category; } - public void setRequiredExperience(String requiredExperience) { - this.requiredExperience = requiredExperience; - } - - public int getTotalAffected() { - // 10 * 10 = 100 - int totalAffected = getMaxTimesApplied() * getAffectAmount(); - Console.println("Total Affected: " + totalAffected + getEntBonus()); - return totalAffected + getEntBonus(); + public void setCost(int cost) { + this.cost = cost; } - public int getEntBonus() { - return entBonus; + public void setMaxTimesApplied(int maxTimesApplied) { + this.maxTimesApplied = maxTimesApplied; } - public void setEntBonus(int entBonus) { - this.entBonus = entBonus; + public void setRequiredExpertise(String requiredExpertise) { + this.requiredExpertise = requiredExpertise; + } + + public void setStatAffects(String statAffects) { + this.statAffects = statAffects; + } + + public void setStatName(String statName) { + this.statName = statName; } } diff --git a/src/resources/common/ObjControllerOpcodes.java b/src/resources/common/ObjControllerOpcodes.java index 5834038e..0317dfd0 100644 --- a/src/resources/common/ObjControllerOpcodes.java +++ b/src/resources/common/ObjControllerOpcodes.java @@ -32,6 +32,7 @@ public class ObjControllerOpcodes { public static final int OBJECT_MENU_REQUEST = 0x46010000; public static final int SECURE_TRADE = 0x15010000; public static final int BUFF_BUILDER_CHANGE = 0x5A020000; + public static final int BUFF_BUILDER_END = 0x5B020000; public static final int MISSION_LIST_REQUEST = 0xF5000000; public static final int ChangeRoleIconChoice = 0x4D040000; } diff --git a/src/resources/objects/BuffItem.java b/src/resources/objects/BuffItem.java index 8d647d4a..050c21e9 100644 --- a/src/resources/objects/BuffItem.java +++ b/src/resources/objects/BuffItem.java @@ -16,47 +16,56 @@ * 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. + * 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.objects; public class BuffItem { - private String skillName; + private int affectAmount; + private int entertainerBonus; private int invested; - private int bonusAmount; // expertise bonus (50%*4 = 200) which would then result in bonusAmount + (maxTimesApplied * affectAmount) = result - + private String skillName; + public BuffItem() { - + } - - public BuffItem(String skillName, int invested, int amount) { + + public BuffItem(String skillName, int invested, int entBonus) { this.skillName = skillName; this.invested = invested; - this.bonusAmount = amount; + this.entertainerBonus = entBonus; } - public String getSkillName() { - return skillName; + public int getAffectAmount() { + return affectAmount; } - public void setSkillName(String skillName) { - this.skillName = skillName; + public int getEntertainerBonus() { + return entertainerBonus; } public int getInvested() { return invested; } + public String getSkillName() { + return skillName; + } + + public void setAffectAmount(int amount) { + this.affectAmount = amount; + } + + public void setEntertainerBonus(int entertainerBonus) { + this.entertainerBonus = entertainerBonus; + } + public void setInvested(int invested) { this.invested = invested; } - public int getBonusAmount() { - return bonusAmount; - } - - public void setBonusAmount(int amount) { - this.bonusAmount = amount; + public void setSkillName(String skillName) { + this.skillName = skillName; } } diff --git a/src/resources/objects/player/PlayerObject.java b/src/resources/objects/player/PlayerObject.java index 2735c475..7ea0ff18 100644 --- a/src/resources/objects/player/PlayerObject.java +++ b/src/resources/objects/player/PlayerObject.java @@ -232,8 +232,8 @@ public class PlayerObject extends IntangibleObject { synchronized(objectMutex) { xpExists = xpList.containsKey(type); xpList.put(type, amount); - Console.println("Put " + type + " exp of " + amount + " in the map."); - Console.println("Map is now: " + xpList.get(type).intValue()); + //Console.println("Put " + type + " exp of " + amount + " in the map."); + //Console.println("Map is now: " + xpList.get(type).intValue()); } if (getContainer() != null && getContainer().getClient() != null && getContainer().getClient().getSession() != null) { diff --git a/src/services/EntertainmentService.java b/src/services/EntertainmentService.java index 2f6adb3b..1732727b 100644 --- a/src/services/EntertainmentService.java +++ b/src/services/EntertainmentService.java @@ -19,11 +19,13 @@ import org.apache.mina.core.session.IoSession; import protocol.swg.ObjControllerMessage; import protocol.swg.OkMessage; import protocol.swg.objectControllerObjects.BuffBuilderChangeMessage; +import protocol.swg.objectControllerObjects.BuffBuilderEndMessage; import protocol.swg.objectControllerObjects.BuffBuilderStartMessage; import resources.common.BuffBuilder; import resources.common.Console; import resources.common.ObjControllerOpcodes; import resources.common.Performance; +import resources.common.StringUtilities; import resources.objects.Buff; import resources.objects.BuffItem; import resources.objects.creature.CreatureObject; @@ -55,52 +57,103 @@ public class EntertainmentService implements INetworkDispatch { @Override public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + objControllerOpcodes.put(ObjControllerOpcodes.BUFF_BUILDER_END, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + + data.order(ByteOrder.LITTLE_ENDIAN); + StringUtilities.printBytes(data.array()); + Client client = core.getClient(session); + + if(client == null) + return; + + SWGObject sender = client.getParent(); + + if(sender == null) + return; + + BuffBuilderEndMessage sentPacket = new BuffBuilderEndMessage(); + sentPacket.deserialize(data); + + SWGObject buffer = core.objectService.getObject(sentPacket.getBufferId()); + SWGObject buffRecipient = core.objectService.getObject(sentPacket.getBuffRecipientId()); + + if(buffer == null || buffRecipient == null) + return; + + // No need to send end packet when buffing yourself. + if (buffRecipient != buffer) { + if(buffRecipient.getClient() == null || buffRecipient.getClient().getSession() == null) + return; + + if (sender.getObjectId() == buffer.getObjectId()) { + // send close packet to recipient + BuffBuilderEndMessage end = new BuffBuilderEndMessage(sentPacket); + end.setObjectId(buffRecipient.getObjectId()); + + end.setBufferId(buffer.getObjectId()); + end.setBuffRecipientId(buffRecipient.getObjectId()); + + ObjControllerMessage closeMessage = new ObjControllerMessage(0x0B, end); + buffRecipient.getClient().getSession().write(closeMessage.serialize()); + + } + if (sender.getObjectId() == buffRecipient.getObjectId()) { + // send close packet to buffer + BuffBuilderEndMessage end = new BuffBuilderEndMessage(sentPacket); + end.setObjectId(buffer.getObjectId()); + + end.setBufferId(buffer.getObjectId()); + end.setBuffRecipientId(buffRecipient.getObjectId()); + + ObjControllerMessage closeMessage = new ObjControllerMessage(0x0B, end); + buffer.getClient().getSession().write(closeMessage.serialize()); + CreatureObject cre = (CreatureObject) buffer; + cre.sendSystemMessage("The buff recipient cancelled the buff builder session.", (byte) 0); + } + } + } + }); + objControllerOpcodes.put(ObjControllerOpcodes.BUFF_BUILDER_CHANGE, new INetworkRemoteEvent() { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { - Console.println("BUFF_BUILDER_CHANGE RECIEVED"); data.order(ByteOrder.LITTLE_ENDIAN); - + Client client = core.getClient(session); - + if(client == null) return; - + SWGObject sender = client.getParent(); - + if(sender == null) return; - + BuffBuilderChangeMessage sentPacket = new BuffBuilderChangeMessage(); sentPacket.deserialize(data); Vector statBuffs = sentPacket.getStatBuffs(); - - /*for (BuffItem item : statBuffs) { - System.out.println("Buff Name: " + item.getSkillName()); - System.out.println("Ents bonus to item: " + item.getAmount()); - }*/ - + SWGObject buffer = core.objectService.getObject(sentPacket.getBufferId()); SWGObject buffRecipient = core.objectService.getObject(sentPacket.getBuffRecipientId()); - - Console.println("Packet Sender ID: " + sender.getObjectId()); - + if (buffer != buffRecipient) { - + BuffBuilderChangeMessage changeMessage = new BuffBuilderChangeMessage(); changeMessage.setBuffCost(sentPacket.getBuffCost()); changeMessage.setTime(sentPacket.getTime()); changeMessage.setBufferId(buffer.getObjectId()); changeMessage.setBuffRecipientId(buffRecipient.getObjectId()); - + if (!statBuffs.isEmpty()) changeMessage.setStatBuffs(statBuffs); - + if (sentPacket.getAccepted() == true && sentPacket.getBuffRecipientAccepted() == 1) { - System.out.println("both accepted!"); - + if (sentPacket.getBuffCost() > 0) { CreatureObject recipientCreature = (CreatureObject) buffRecipient; if (recipientCreature.getCashCredits() >= sentPacket.getBuffCost()) { @@ -109,36 +162,47 @@ public class EntertainmentService implements INetworkDispatch { return; } } - - OkMessage closeMsg = new OkMessage(); - buffer.getClient().getSession().write(closeMsg.serialize()); - + giveInspirationBuff(buffRecipient, statBuffs); - + + BuffBuilderEndMessage endBuilder = new BuffBuilderEndMessage(changeMessage); + endBuilder.setObjectId(buffer.getObjectId()); + + BuffBuilderEndMessage endRecipient = new BuffBuilderEndMessage(changeMessage); + endRecipient.setObjectId(buffRecipient.getObjectId()); + + ObjControllerMessage closeBuilder = new ObjControllerMessage(0x0B, endBuilder); + session.write(closeBuilder.serialize()); + + ObjControllerMessage closeRecipient = new ObjControllerMessage(0x0B, endRecipient); + session.write(closeRecipient.serialize()); + } else if (sentPacket.getAccepted() == true && sentPacket.getBuffRecipientAccepted() == 0) { changeMessage.setAccepted(true); changeMessage.setObjectId(buffRecipient.getObjectId()); - + ObjControllerMessage objMsg = new ObjControllerMessage(0x0B, changeMessage); buffRecipient.getClient().getSession().write(objMsg.serialize()); } else { changeMessage.setAccepted(false); changeMessage.setObjectId(sentPacket.getBuffRecipientId()); - + ObjControllerMessage objMsg = new ObjControllerMessage(0x0B, changeMessage); buffRecipient.getClient().getSession().write(objMsg.serialize()); } - + } else { if (sentPacket.getAccepted() == true) { - OkMessage closeMsg = new OkMessage(); - buffer.getClient().getSession().write(closeMsg.serialize()); - giveInspirationBuff(buffRecipient, statBuffs); + BuffBuilderEndMessage endBuilder = new BuffBuilderEndMessage(sentPacket); + endBuilder.setObjectId(buffer.getObjectId()); + + ObjControllerMessage objMsg = new ObjControllerMessage(0x0B, endBuilder); + buffRecipient.getClient().getSession().write(objMsg.serialize()); } } } - + }); } @@ -202,17 +266,21 @@ public class EntertainmentService implements INetworkDispatch { for (int r = 0; r < buffBuilder.getRowCount(); r++) { String skillName = ((String) buffBuilder.getObject(r, 0)); + String category = ((String) buffBuilder.getObject(r, 1)); String statAffects = ((String) buffBuilder.getObject(r, 2)); int maxTimes = ((int) buffBuilder.getObject(r, 3)); + int cost = ((int) buffBuilder.getObject(r, 4)); int affectAmount = ((int) buffBuilder.getObject(r, 5)); - String requiredExperience = ((String) buffBuilder.getObject(r, 6)); + String requiredExpertise = ((String) buffBuilder.getObject(r, 6)); BuffBuilder item = new BuffBuilder(); item.setStatName(skillName); + item.setCategory(category); item.setStatAffects(statAffects); item.setMaxTimesApplied(maxTimes); + item.setCost(cost); item.setAffectAmount(affectAmount); - item.setRequiredExperience(requiredExperience); + item.setRequiredExpertise(requiredExpertise); buffBuilderSkills.add(item); } @@ -235,22 +303,34 @@ public class EntertainmentService implements INetworkDispatch { public void giveInspirationBuff(SWGObject reciever, Vector buffVector) { CreatureObject buffCreature = (CreatureObject) reciever; - Vector availableSkills = buffBuilderSkills; - - Vector buffsToAdd = new Vector(); - + Vector availableStats = buffBuilderSkills; + Vector stats = new Vector(); + for (BuffItem item : buffVector) { - for (BuffBuilder builder : availableSkills) { - if (builder.getStatName().equals(item.getSkillName())) { - builder.setEntBonus(item.getBonusAmount()); - buffsToAdd.add(builder); - Console.println("Added buff item: " + builder.getStatAffects() + " with total affect of " + builder.getTotalAffected() + " and ent bonus of " + builder.getEntBonus()); - continue; + for(BuffBuilder builder : availableStats) { + if(builder.getStatName().equalsIgnoreCase(item.getSkillName())) { + if(builder.getMaxTimesApplied() < item.getInvested()) + return; + + // Ent. Expertise Percent + (invested points * affect amount) = stat + int bonusPoints = (int) (builder.getAffectAmount() *((float) item.getEntertainerBonus()/100f)); + int affectTotal = bonusPoints + (item.getInvested() * builder.getAffectAmount()); + + BuffItem stat = new BuffItem(builder.getStatAffects(), item.getInvested(), item.getEntertainerBonus()); + stat.setAffectAmount(affectTotal); + + /*System.out.println("Invested Points: " + item.getInvested()); + System.out.println("Entertainer Bonus: " + item.getEntertainerBonus()); + System.out.println("Affect Total: " + affectTotal);*/ + + stats.add(stat); + + break; } } } - reciever.setAttachment("buffWorkshop", buffsToAdd); + reciever.setAttachment("buffWorkshop", buffVector); core.buffService.addBuffToCreature(buffCreature, "buildabuff_inspiration"); diff --git a/src/services/chat/ChatService.java b/src/services/chat/ChatService.java index 2bd76a4f..356193c9 100644 --- a/src/services/chat/ChatService.java +++ b/src/services/chat/ChatService.java @@ -553,6 +553,9 @@ public class ChatService implements INetworkDispatch { public SWGObject getObjectByFirstName(String name) { ConcurrentHashMap clients = core.getActiveConnectionsMap(); + if(name.contains(" ")) + name = name.split(" ")[0]; + for(Client client : clients.values()) { if(client.getParent() == null) continue; From f14f65692444a5342790bb6ece68e1b07e1d587e Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sun, 16 Mar 2014 13:19:59 -0400 Subject: [PATCH 029/107] Fixed server errors, removed loading of space instances to save memory --- src/main/NGECore.java | 22 ++++++++++++---------- src/services/ConnectionService.java | 2 +- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/NGECore.java b/src/main/NGECore.java index 2d491e9d..b2776a0e 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -321,16 +321,18 @@ public class NGECore { terrainService.addPlanet(11, "mustafar", "terrain/mustafar.trn", true); terrainService.addPlanet(12, "kashyyyk_main", "terrain/kashyyyk_main.trn", true); //Dungeon Terrains - terrainService.addPlanet(13, "kashyyyk_dead_forest", "terrain/kashyyyk_dead_forest.trn", true); + // TODO: Fix BufferUnderFlow Errors on loaded of dungeon instances. + /*terrainService.addPlanet(13, "kashyyyk_dead_forest", "terrain/kashyyyk_dead_forest.trn", true); terrainService.addPlanet(14, "kashyyyk_hunting", "terrain/kashyyyk_hunting.trn", true); terrainService.addPlanet(15, "kashyyyk_north_dungeons", "terrain/kashyyyk_north_dungeons.trn", true); terrainService.addPlanet(16, "kashyyyk_rryatt_trail", "terrain/kashyyyk_rryatt_trail.trn", true); terrainService.addPlanet(17, "kashyyyk_south_dungeons", "terrain/kashyyyk_south_dungeons.trn", true); terrainService.addPlanet(18, "adventure1", "terrain/adventure1.trn", true); terrainService.addPlanet(19, "adventure2", "terrain/adventure2.trn", true); - terrainService.addPlanet(20, "dungeon1", "terrain/dungeon1.trn", true); + terrainService.addPlanet(20, "dungeon1", "terrain/dungeon1.trn", true);*/ //Space Zones - terrainService.addPlanet(21, "space_corellia", "terrain/space_corellia.trn", true); + // NOTE: Commented out for now until space is implemented. No need to be loaded into memory when space is not implemented. + /*terrainService.addPlanet(21, "space_corellia", "terrain/space_corellia.trn", true); terrainService.addPlanet(22, "space_corellia_2", "terrain/space_corellia_2.trn", true); terrainService.addPlanet(23, "space_dantooine", "terrain/space_dantooine.trn", true); terrainService.addPlanet(24, "space_dathomir", "terrain/space_dathomir.trn", true); @@ -343,9 +345,9 @@ public class NGECore { terrainService.addPlanet(31, "space_lok", "terrain/space_lok.trn", true); terrainService.addPlanet(32, "space_naboo", "terrain/space_naboo.trn", true); terrainService.addPlanet(33, "space_naboo_2", "terrain/space_naboo_2.trn", true); - terrainService.addPlanet(34, "space_nova_orion", "terrain/space_nova_orion.trn", true); - terrainService.addPlanet(35, "space_npe_falcon", "terrain/space_npe_falcon.trn", true); - terrainService.addPlanet(36, "space_npe_falcon_2", "terrain/space_npe_falcon_2.trn", true); + terrainService.addPlanet(34, "space_nova_orion", "terrain/space_nova_orion.trn", true); + terrainService.addPlanet(35, "space_npe_falcon", "terrain/space_npe_falcon.trn", true); // TODO: New Player Tutorial + terrainService.addPlanet(36, "space_npe_falcon_2", "terrain/space_npe_falcon_2.trn", true); // TODO: New Player Tutorial terrainService.addPlanet(37, "space_ord_mantell", "terrain/space_ord_mantell.trn", true); terrainService.addPlanet(38, "space_ord_mantell_2", "terrain/space_ord_mantell_2.trn", true); terrainService.addPlanet(39, "space_ord_mantell_3", "terrain/space_ord_mantell_3.trn", true); @@ -354,11 +356,11 @@ public class NGECore { terrainService.addPlanet(42, "space_ord_mantell_6", "terrain/space_ord_mantell_6.trn", true); terrainService.addPlanet(43, "space_tatooine", "terrain/space_tatooine.trn", true); terrainService.addPlanet(44, "space_tatooine_2", "terrain/space_tatooine_2.trn", true); - terrainService.addPlanet(45, "space_yavin4", "terrain/space_yavin4.trn", true); + terrainService.addPlanet(45, "space_yavin4", "terrain/space_yavin4.trn", true);*/ //PSWG New Content Terrains (WARNING Keep commented out unless you have the current build of kaas!) - /* - terrainService.addPlanet(46, "kaas", "terrain/kaas.trn", true); - */ + + //terrainService.addPlanet(46, "kaas", "terrain/kaas.trn", true); + //end terrainList spawnService = new SpawnService(this); terrainService.loadClientPois(); diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index 1d18bf53..ae0962ee 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -210,7 +210,7 @@ public class ConnectionService implements INetworkDispatch { if(ghost == null) return; - if () + //if () Point3D objectPos = object.getWorldPosition(); From dfd68c11d6fc451c17332de8cc4a91dd7555fb10 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sun, 16 Mar 2014 13:42:19 -0400 Subject: [PATCH 030/107] Range checks for /inspire and /watch --- scripts/commands/inspire.py | 6 +++++- scripts/commands/watch.py | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/scripts/commands/inspire.py b/scripts/commands/inspire.py index 4a2aa2c8..0206cb2a 100644 --- a/scripts/commands/inspire.py +++ b/scripts/commands/inspire.py @@ -28,7 +28,11 @@ def run(core, actor, target, commandString): else: actor.sendSystemMessage('@performance:insp_buff_must_listen', 2) return - + + if target.getPosition().getDistance2D(actor.getWorldPosition()) > float(20): + actor.sendSystemMessage(target.getCustomName() + ' is too far away to inspire.') + return + builderWindow = BuffBuilderStartMessage(actor.getObjectId(), actor.getObjectId(), target.getObjectId()) objController = ObjControllerMessage(11, builderWindow) actor.getClient().getSession().write(objController.serialize()) diff --git a/scripts/commands/watch.py b/scripts/commands/watch.py index 6e55feef..071319c1 100644 --- a/scripts/commands/watch.py +++ b/scripts/commands/watch.py @@ -11,7 +11,12 @@ def run(core, actor, target, commandString): if target is None: return - + + + if target.getPosition().getDistance2D(actor.getWorldPosition()) > float(20): + actor.sendSystemMessage(target.getCustomName() + ' is too far away to watch.', 0) + return + if not target.isPlayer(): actor.sendSystemMessage('@performance:dance_watch_npc', 0) return From 1801ac5cae7336ffbe658edc926cc2c426936d02 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sun, 16 Mar 2014 14:01:32 -0400 Subject: [PATCH 031/107] Minor fix to packet being sent --- src/services/EntertainmentService.java | 4 ++-- src/services/collections/CollectionService.java | 15 ++++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/services/EntertainmentService.java b/src/services/EntertainmentService.java index 1732727b..f82cb731 100644 --- a/src/services/EntertainmentService.java +++ b/src/services/EntertainmentService.java @@ -172,10 +172,10 @@ public class EntertainmentService implements INetworkDispatch { endRecipient.setObjectId(buffRecipient.getObjectId()); ObjControllerMessage closeBuilder = new ObjControllerMessage(0x0B, endBuilder); - session.write(closeBuilder.serialize()); + buffer.getClient().getSession().write(closeBuilder.serialize()); ObjControllerMessage closeRecipient = new ObjControllerMessage(0x0B, endRecipient); - session.write(closeRecipient.serialize()); + buffRecipient.getClient().getSession().write(closeRecipient.serialize()); } else if (sentPacket.getAccepted() == true && sentPacket.getBuffRecipientAccepted() == 0) { changeMessage.setAccepted(true); diff --git a/src/services/collections/CollectionService.java b/src/services/collections/CollectionService.java index 025307e5..15567a6b 100644 --- a/src/services/collections/CollectionService.java +++ b/src/services/collections/CollectionService.java @@ -71,7 +71,7 @@ public class CollectionService implements INetworkDispatch { } } - /* + /** * @see datatables/collection/collections.iff * * Count and exploration count badges are added automatically. @@ -417,7 +417,7 @@ public class CollectionService implements INetworkDispatch { return false; } - /* + /** * @param creature The player's CreatureObject instance. * @param collection slotName or collectionName from collection.iff. * @@ -497,7 +497,7 @@ public class CollectionService implements INetworkDispatch { return false; } - /* + /** * Returns number of completed bits in a slot or the number of completed * slots in a collection, page or book. * @@ -623,7 +623,8 @@ public class CollectionService implements INetworkDispatch { return 0; } - /* + + /** * Registers an exploration badge location. * * @param planet Name from Planet.getName(). @@ -640,7 +641,7 @@ public class CollectionService implements INetworkDispatch { explorationLocations.get(planet).put(badgeName, new ExplorationRegion(new Point3D(x, 0, z), range)); } - /* + /** * Checks if the player is in range of any exploration regions * and grants any ungranted badges. * @@ -660,7 +661,7 @@ public class CollectionService implements INetworkDispatch { } } - /* + /** * Clears the specified slot, collection, page or book. * * @param creature The player's CreatureObject instance. @@ -749,7 +750,7 @@ public class CollectionService implements INetworkDispatch { return false; } - /* + /** * Clears all collections. * * This must cycle through all the collections because From 8d81e26504b81263af818f04cb3287d1d3bc8a66 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sun, 16 Mar 2014 15:26:42 -0400 Subject: [PATCH 032/107] Forgot a 0 --- scripts/commands/inspire.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/commands/inspire.py b/scripts/commands/inspire.py index 0206cb2a..531aa1e2 100644 --- a/scripts/commands/inspire.py +++ b/scripts/commands/inspire.py @@ -30,7 +30,7 @@ def run(core, actor, target, commandString): return if target.getPosition().getDistance2D(actor.getWorldPosition()) > float(20): - actor.sendSystemMessage(target.getCustomName() + ' is too far away to inspire.') + actor.sendSystemMessage(target.getCustomName() + ' is too far away to inspire.', 0) return builderWindow = BuffBuilderStartMessage(actor.getObjectId(), actor.getObjectId(), target.getObjectId()) From e0ca1ea7b278e30f330f57fc9620516894d735c3 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Mon, 17 Mar 2014 16:49:50 -0400 Subject: [PATCH 033/107] Range check on performances for spectators --- scripts/commands/watch.py | 3 +- .../objects/creature/CreatureObject.java | 17 ++++++++++- src/services/EntertainmentService.java | 30 +++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/scripts/commands/watch.py b/scripts/commands/watch.py index 071319c1..0a9baf04 100644 --- a/scripts/commands/watch.py +++ b/scripts/commands/watch.py @@ -33,6 +33,7 @@ def run(core, actor, target, commandString): actor.setPerformanceWatchee(target) target.addAudience(actor) + core.entertainmentService.startSpectating(actor, target) actor.setMoodAnimation('entertained') - actor.sendSystemMessage('You start watching ' + target.getCustomName() + '.',0) + actor.sendSystemMessage('You start watching ' + target.getCustomName() + '.',0) return \ No newline at end of file diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 56239f1c..19d60409 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -159,6 +159,9 @@ public class CreatureObject extends TangibleObject implements IPersistent { @NotPersistent private ScheduledFuture inspirationTick; + @NotPersistent + private ScheduledFuture spectatorTask; + private boolean staticNPC = false; // temp @NotPersistent private int flourishCount = 0; @@ -411,6 +414,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { } if (next == this) { continue; } next.sendSystemMessage("@performance:" + type + "_stop_other",(byte)0); + next.getSpectatorTask().cancel(true); } //not sure if this behaviour is correct. might need fixing later. performanceAudience = new SWGList(); @@ -1617,5 +1621,16 @@ public class CreatureObject extends TangibleObject implements IPersistent { this.appearanceEquipmentListUpdateCounter = appearanceEquipmentListUpdateCounter; } } - + + public ScheduledFuture getSpectatorTask() { + synchronized(objectMutex) { + return spectatorTask; + } + } + + public void setSpectatorTask(ScheduledFuture spectatorTask) { + synchronized(objectMutex) { + this.spectatorTask = spectatorTask; + } + } } diff --git a/src/services/EntertainmentService.java b/src/services/EntertainmentService.java index f82cb731..a57d486d 100644 --- a/src/services/EntertainmentService.java +++ b/src/services/EntertainmentService.java @@ -422,6 +422,36 @@ public class EntertainmentService implements INetworkDispatch { } + public void startSpectating(final CreatureObject spectator, final CreatureObject performer) { + final ScheduledFuture spectatorTask = scheduler.scheduleAtFixedRate(new Runnable() { + + @Override + public void run() { + if (spectator.getPosition().getDistance2D(performer.getWorldPosition()) > (float) 70) { + + String pType = (performer.getPerformanceType()) ? "dance" : "music"; + if(pType.equals("dance")) { + spectator.setPerformanceWatchee(null); + spectator.sendSystemMessage("You stop watching " + performer.getCustomName() + " because " + performer.getCustomName() + + " is out of range.", (byte) 0); + } + else { + spectator.setPerformanceListenee(null); + spectator.sendSystemMessage("You stop listening to " + performer.getCustomName() + " because " + performer.getCustomName() + + " is out of range.", (byte) 0); + } + spectator.setMoodAnimation("neutral"); + performer.removeAudience(spectator); + + spectator.getSpectatorTask().cancel(true); + } + } + + }, 2, 2, TimeUnit.SECONDS); + + spectator.setSpectatorTask(spectatorTask); + } + @Override public void shutdown() { From b28da5bcd02be09de8d2be4d33db541403c32d8c Mon Sep 17 00:00:00 2001 From: xbang21 Date: Mon, 17 Mar 2014 20:40:15 -0400 Subject: [PATCH 034/107] fixed giveitem --- scripts/commands/giveitem.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 scripts/commands/giveitem.py diff --git a/scripts/commands/giveitem.py b/scripts/commands/giveitem.py new file mode 100644 index 00000000..8279dc05 --- /dev/null +++ b/scripts/commands/giveitem.py @@ -0,0 +1,24 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getClient() and actor.getClient().isGM() == False: + return + + if not commandString.startswith('object/tangible') and not commandString.startswith('object/weapon'): + return + + object = core.objectService.createObject(commandString, actor.getPlanet()) + + if not object: + return + + inventory = actor.getSlottedObject('inventory') + + if inventory: + inventory.add(object) + + return \ No newline at end of file From 604d1f7aefa82c91c36e0f867f3be1cfd1ecf8ae Mon Sep 17 00:00:00 2001 From: Treeku Date: Wed, 19 Mar 2014 18:23:25 +0000 Subject: [PATCH 035/107] Changed duplicate id handling, static objids - I noticed when targetting a client-spawned object (EK brazier), it sent a target packet to the client with all 8 bytes filled, instead of just the 4 stated in the buildout. It seems the same 4 digits get added to all buildout ids. As a result, all buildout int-objectIds now have the follow bytes added to them: FF FF 86 F9 Not sure about snapshot objects, but I imagine it's the same for them. - I had to allow duplicate objects to be spawned in order for heroics and instances to work. It gives every duplicate object a new objectId and also replaces the parentIds as well by storing the changes in a map on each buildout area cycle. --- src/services/object/ObjectService.java | 41 ++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 6771397a..c5535ddd 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -30,6 +30,7 @@ import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -84,6 +85,7 @@ import engine.resources.scene.Quaternion; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import main.NGECore; +import resources.objects.Delta; import resources.objects.building.BuildingObject; import resources.objects.cell.CellObject; import resources.objects.creature.CreatureObject; @@ -678,7 +680,12 @@ public class ObjectService implements INetworkDispatch { int counter = 0; for(SnapshotChunk chunk : visitor.getChunks()) { ++counter; - SWGObject obj = createObject(visitor.getName(chunk.nameId), chunk.id, planet, new Point3D(chunk.xPosition, chunk.yPosition, chunk.zPosition), new Quaternion(chunk.orientationW, chunk.orientationX, chunk.orientationY, chunk.orientationZ)); + // Since the ids are just ints, they append 0xFFFF86F9 to them + // This is demonstated in the packet sent to the server when you /target client-spawned buildouts + // This is done for buildouts; uncertain about snapshot objects so it's commented for now + //long objectId = Delta.createBuffer(8).putInt(chunk.id).putInt(0xF986FFFF).flip().getLong(); // Not sure what extension they add to 4-byte-only snapshot objectIds. With buildouts they add 0xFFFF86F9. This is demonstated in the packet sent to the server when you /target client-spawned objects + int objectId = chunk.id; + SWGObject obj = createObject(visitor.getName(chunk.nameId), objectId, planet, new Point3D(chunk.xPosition, chunk.yPosition, chunk.zPosition), new Quaternion(chunk.orientationW, chunk.orientationX, chunk.orientationY, chunk.orientationZ)); if(obj != null) { obj.setisInSnapshot(true); obj.setParentId(chunk.parentId); @@ -768,6 +775,8 @@ public class ObjectService implements INetworkDispatch { CrcStringTableVisitor crcTable = ClientFileManager.loadFile("misc/object_template_crc_string_table.iff", CrcStringTableVisitor.class); List quadtreeObjects = new ArrayList(); + Map duplicate = new HashMap(); + for (int i = 0; i < buildoutTable.getRowCount(); i++) { String template; @@ -798,7 +807,9 @@ public class ObjectService implements INetworkDispatch { } else { - objectId = (Integer) buildoutTable.getObject(i, 0); + // Since the ids are just ints, they append 0xFFFF86F9 to them + // This is demonstated in the packet sent to the server when you /target client-spawned objects + objectId = Delta.createBuffer(8).putInt((Integer) buildoutTable.getObject(i, 0)).putInt(0xF986FFFF).flip().getLong(); containerId = (Integer) buildoutTable.getObject(i, 1); type = (Integer) buildoutTable.getObject(i, 2); cellIndex = (Integer) buildoutTable.getObject(i, 4); @@ -814,12 +825,30 @@ public class ObjectService implements INetworkDispatch { portalCRC = (Integer) buildoutTable.getObject(i, 13); } - + + // Treeku - Refactored to work around duplicate objectIds + // Required for instances/heroics which are duplicated ie. 10 times if(!template.equals("object/cell/shared_cell.iff") && objectId != 0 && getObject(objectId) != null) { - //System.out.println("Duplicate buildout object: " + template); - continue; + SWGObject object = getObject(objectId); + + // Same coordinates is a true duplicate + if ((px + x1) == object.getPosition().x && + py == object.getPosition().y && + (pz + z1) == object.getPosition().z) { + //System.out.println("Duplicate buildout object: " + template); + continue; + } } - + + if (objectId != 0 && getObject(objectId) != null) { + duplicate.put(objectId, generateObjectID()); + objectId = duplicate.get(objectId); + } + + if (duplicate.containsKey(containerId)) { + containerId = duplicate.get(containerId); + } + List containers = new ArrayList(); SWGObject object; if(objectId != 0 && containerId == 0) { From 5df4b7c2034c58e1bfa3c0b1efe859d8efd88fdb Mon Sep 17 00:00:00 2001 From: Treeku Date: Wed, 19 Mar 2014 18:26:15 +0000 Subject: [PATCH 036/107] Made all callScript functions consistent --- scripts/starterclothing.py | 240 ++++++++++++------------- src/services/BuffService.java | 4 +- src/services/CharacterService.java | 2 +- src/services/PlayerService.java | 4 +- src/services/ScriptService.java | 12 +- src/services/SkillService.java | 2 +- src/services/StaticService.java | 2 +- src/services/map/MapService.java | 2 +- src/services/travel/TravelService.java | 2 +- 9 files changed, 135 insertions(+), 135 deletions(-) diff --git a/scripts/starterclothing.py b/scripts/starterclothing.py index f24afeb3..567e1345 100644 --- a/scripts/starterclothing.py +++ b/scripts/starterclothing.py @@ -5,294 +5,294 @@ import sys def CreateStarterClothing(core, object, starterProfession, raceTemplate): if starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_female", "OutdoorScoutHumanoidFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_female", "OutdoorScoutHumanoidFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_female", "OutdoorScoutHumanoidFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_female", "OutdoorScoutHumanoidFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_female", "OutdoorScoutHumanoidFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_female", "OutdoorScoutHumanoidFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_female", "OutdoorScoutHumanoidFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutTrandoshanMale", "outdoors_scout_trandoshan_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_trandoshan_male", "OutdoorScoutTrandoshanMale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutTrandoshanFemale", "outdoors_scout_trandoshan_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_trandoshan_female", "OutdoorScoutTrandoshanFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutWookieeMale", "outdoors_scout_wookiee_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_wookiee_male", "OutdoorScoutWookieeMale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutWookieeFemale", "outdoors_scout_wookiee_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_wookiee_female", "OutdoorScoutWookieeFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutIthorianMale", "outdoors_scout_ithorian_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_ithorian_male", "OutdoorScoutIthorianMale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutIthorianFemale", "outdoors_scout_ithorian_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_ithorian_female", "OutdoorScoutIthorianFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_male", "CombatBrawlerHumanoidMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_male", "CombatBrawlerHumanoidMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_male", "CombatBrawlerHumanoidMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_male", "CombatBrawlerHumanoidMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_male", "CombatBrawlerHumanoidMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_male", "CombatBrawlerHumanoidMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_male", "CombatBrawlerHumanoidMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_female", "CombatBrawlerHumanoidFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_female", "CombatBrawlerHumanoidFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_female", "CombatBrawlerHumanoidFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_female", "CombatBrawlerHumanoidFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_female", "CombatBrawlerHumanoidFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_female", "CombatBrawlerHumanoidFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_female", "CombatBrawlerHumanoidFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerTrandoshanMale", "combat_brawler_trandoshan_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_trandoshan_male", "CombatBrawlerTrandoshanMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerOutdoorScoutTrandoshanFemale", "combat_brawler_trandoshan_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_trandoshan_female", "CombatBrawlerOutdoorScoutTrandoshanFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerWookieeMale", "combat_brawler_wookiee_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_wookiee_male", "CombatBrawlerWookieeMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerWookieeFemale", "combat_brawler_wookiee_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_wookiee_female", "CombatBrawlerWookieeFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerIthorianMale", "combat_brawler_ithorian_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_ithorian_male", "CombatBrawlerIthorianMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerIthorianFemale", "combat_brawler_ithorian_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_ithorian_female", "CombatBrawlerIthorianFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_male", "CombatMarksmanHumanoidMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_male", "CombatMarksmanHumanoidMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_male", "CombatMarksmanHumanoidMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_male", "CombatMarksmanHumanoidMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_male", "CombatMarksmanHumanoidMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_male", "CombatMarksmanHumanoidMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_male", "CombatMarksmanHumanoidMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_female", "CombatMarksmanHumanoidFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_female", "CombatMarksmanHumanoidFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_female", "CombatMarksmanHumanoidFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_female", "CombatMarksmanHumanoidFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_female", "CombatMarksmanHumanoidFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_female", "CombatMarksmanHumanoidFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_female", "CombatMarksmanHumanoidFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanTrandoshanMale", "combat_marksman_trandoshan_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_trandoshan_male", "CombatMarksmanTrandoshanMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanTrandoshanFemale", "combat_marksman_trandoshan_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_trandoshan_female", "CombatMarksmanTrandoshanFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanWookieeMale", "combat_marksman_wookiee_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_wookiee_male", "CombatMarksmanWookieeMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanWookieeFemale", "combat_marksman_wookiee_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_wookiee_female", "CombatMarksmanWookieeFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanIthorianMale", "combat_marksman_ithorian_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_ithorian_male", "CombatMarksmanIthorianMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanIthorianFemale", "combat_marksman_ithorian_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_ithorian_female", "CombatMarksmanIthorianFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_male", "CraftingArtisanHumanoidMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_male", "CraftingArtisanHumanoidMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_male", "CraftingArtisanHumanoidMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_male", "CraftingArtisanHumanoidMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_male", "CraftingArtisanHumanoidMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_male", "CraftingArtisanHumanoidMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_male", "CraftingArtisanHumanoidMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_female", "CraftingArtisanHumanoidFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_female", "CraftingArtisanHumanoidFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_female", "CraftingArtisanHumanoidFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_female", "CraftingArtisanHumanoidFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanTwilekFemale", "crafting_artisan_twilek_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_twilek_female", "CraftingArtisanTwilekFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_female", "CraftingArtisanHumanoidFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_female", "CraftingArtisanHumanoidFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanTrandoshanMale", "crafting_artisan_trandoshan_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_trandoshan_male", "CraftingArtisanTrandoshanMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanTrandoshanFemale", "crafting_artisan_trandoshan_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_trandoshan_female", "CraftingArtisanTrandoshanFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanWookieeMale", "crafting_artisan_wookiee_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_wookiee_male", "CraftingArtisanWookieeMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanWookieeFemale", "crafting_artisan_wookiee_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_wookiee_female", "CraftingArtisanWookieeFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanIthorianMale", "crafting_artisan_ithorian_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_ithorian_male", "CraftingArtisanIthorianMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanIthorianFemale", "crafting_artisan_ithorian_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_ithorian_female", "CraftingArtisanIthorianFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_male", "ScienceMedicHumanoidMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_male", "ScienceMedicHumanoidMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_male", "ScienceMedicHumanoidMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_male", "ScienceMedicHumanoidMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_male", "ScienceMedicHumanoidMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_male", "ScienceMedicHumanoidMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_male", "ScienceMedicHumanoidMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_female", "ScienceMedicHumanoidFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_female", "ScienceMedicHumanoidFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_female", "ScienceMedicHumanoidFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_female", "ScienceMedicHumanoidFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_female", "ScienceMedicHumanoidFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_female", "ScienceMedicHumanoidFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_female", "ScienceMedicHumanoidFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicTrandoshanMale", "science_medic_trandoshan_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_trandoshan_male", "ScienceMedicTrandoshanMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicTrandoshanFemale", "science_medic_trandoshan_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_trandoshan_female", "ScienceMedicTrandoshanFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicWookieeMale", "science_medic_wookiee_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_wookiee_male", "ScienceMedicWookieeMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicWookieeFemale", "science_medic_wookiee_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_wookiee_female", "ScienceMedicWookieeFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicIthorianMale", "science_medic_ithorian_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_ithorian_male", "ScienceMedicIthorianMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicIthorianFemale", "science_medic_ithorian_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_ithorian_female", "ScienceMedicIthorianFemale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_male", "SocialEntertainerHumanoidMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_male", "SocialEntertainerHumanoidMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_male", "SocialEntertainerHumanoidMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_male", "SocialEntertainerHumanoidMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_male", "SocialEntertainerHumanoidMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_male", "SocialEntertainerHumanoidMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_male", "SocialEntertainerHumanoidMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_female", "SocialEntertainerHumanoi_female", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_female", "SocialEntertainerHumanoi_female", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_female", "SocialEntertainerHumanoi_female", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_female", "SocialEntertainerHumanoi_female", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerTwilekFemale", "social_entertainer_twilek_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_twilek_female", "SocialEntertainerTwilekFemale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_female", "SocialEntertainerHumanoi_female", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_female", "SocialEntertainerHumanoi_female", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerTrandoshanMale", "social_entertainer_trandoshan_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_trandoshan_male", "SocialEntertainerTrandoshanMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerTrandoshanFemale", "social_entertainer_trandoshan_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_trandoshan_female", "SocialEntertainerTrandoshanFemale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerWookieeMale", "social_entertainer_wookiee_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_wookiee_male", "SocialEntertainerWookieeMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerWookieeFemale", "social_entertainer_wookiee_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_wookiee_female", "SocialEntertainerWookieeFemale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerIthorianMale", "social_entertainer_ithorian_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_ithorian_male", "SocialEntertainerIthorianMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerIthorianFemale", "social_entertainer_ithorian_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_ithorian_female", "SocialEntertainerIthorianFemale", core, object) \ No newline at end of file diff --git a/src/services/BuffService.java b/src/services/BuffService.java index 76948e89..cd8e218b 100644 --- a/src/services/BuffService.java +++ b/src/services/BuffService.java @@ -110,7 +110,7 @@ public class BuffService implements INetworkDispatch { } if(FileUtilities.doesFileExist("scripts/buffs/" + buffName + ".py")) - core.scriptService.callScript("scripts/buffs/", "setup", buffName, core, creature, buff); + core.scriptService.callScript("scripts/buffs/", buffName, "setup", core, creature, buff); creature.addBuff(buff); @@ -168,7 +168,7 @@ public class BuffService implements INetworkDispatch { creature.removeDot(dot); } if(FileUtilities.doesFileExist("scripts/buffs/" + buff.getBuffName() + ".py")) - core.scriptService.callScript("scripts/buffs/", "removeBuff", buff.getBuffName(), core, creature, buff); + core.scriptService.callScript("scripts/buffs/", buff.getBuffName(), "removeBuff", core, creature, buff); creature.removeBuff(buff); for (String effect : buff.getParticleEffect().split(",")) { diff --git a/src/services/CharacterService.java b/src/services/CharacterService.java index d87738c9..ea133655 100644 --- a/src/services/CharacterService.java +++ b/src/services/CharacterService.java @@ -325,7 +325,7 @@ public class CharacterService implements INetworkDispatch { object._add(defaultWeapon); object.setWeaponId(defaultWeapon.getObjectID()); core.scriptService.callScript("scripts/", "starterclothing", "CreateStarterClothing", core, object, clientCreateCharacter.getStarterProfession(), clientCreateCharacter.getRaceTemplate()); - core.scriptService.callScript("scripts/", "CreateStartingCharacter", "demo", core, object); + core.scriptService.callScript("scripts/", "demo", "CreateStartingCharacter", core, object); core.getCreatureODB().put(object, Long.class, CreatureObject.class, object.getTransaction()); // might not need to commit transaction but better safe than sorry diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index 0c8dc7bc..5c3eaf9c 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -454,7 +454,7 @@ public class PlayerService implements INetworkDispatch { if(!FileUtilities.doesFileExist("scripts/expertise/" + expertiseBox + ".py")) return; - core.scriptService.callScript("scripts/expertise/", "addExpertisePoint", expertiseBox, core, creature); + core.scriptService.callScript("scripts/expertise/", expertiseBox, "addExpertisePoint", core, creature); } @@ -598,7 +598,7 @@ public class PlayerService implements INetworkDispatch { creature.playEffectObject("clienteffect/level_granted.cef", ""); creature.getClient().getSession().write((new ClientMfdStatusUpdateMessage((float) ((creature.getLevel() == 90) ? 90 : (creature.getLevel() + 1)), "/GroundHUD.MFDStatus.vsp.role.targetLevel")).serialize()); creature.setLevel(((Integer) experienceTable.getObject(i, 0)).shortValue()); - core.scriptService.callScript("scripts/collections/", "addMasterBadge", "master_" + player.getProfession(), core, creature); + core.scriptService.callScript("scripts/collections/", "master_" + player.getProfession(), "addMasterBadge", core, creature); // 3. Add the relevant health/action and expertise points. float luck = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getLuck").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getLuck").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("luck"))); diff --git a/src/services/ScriptService.java b/src/services/ScriptService.java index 791e3cd5..9ea1c999 100644 --- a/src/services/ScriptService.java +++ b/src/services/ScriptService.java @@ -30,10 +30,10 @@ import main.NGECore; @SuppressWarnings("unused") public class ScriptService { - + private NGECore core; private PythonInterpreter interpreter; - + public ScriptService(NGECore core) { this.core = core; } @@ -62,7 +62,7 @@ public class ScriptService { return python.get(method).__call__(Py.java2py(arg1)); } - public PyObject callScript(String path, String method, String module, Object arg1, Object arg2) { + public PyObject callScript(String path, String module, String method, Object arg1, Object arg2) { /*PythonInterpreter interpreter = new PythonInterpreter(); interpreter.cleanup(); interpreter.exec("import sys\nsys.path.append('" + path + "')\nfrom " + module + " import " + method); @@ -74,7 +74,7 @@ public class ScriptService { return python.get(method).__call__(Py.java2py(arg1), Py.java2py(arg2)); } - public PyObject callScript(String path, String method, String module, Object arg1, Object arg2, Object arg3) { + public PyObject callScript(String path, String module, String method, Object arg1, Object arg2, Object arg3) { /*PythonInterpreter interpreter = new PythonInterpreter(); interpreter.cleanup(); interpreter.exec("import sys\nsys.path.append('" + path + "')\nfrom " + module + " import " + method); @@ -86,7 +86,7 @@ public class ScriptService { return python.get(method).__call__(Py.java2py(arg1), Py.java2py(arg2), Py.java2py(arg3)); } - + public PyObject callScript(String path, String module, String method, Object arg1, Object arg2, Object arg3, Object arg4) { /*PythonInterpreter interpreter = new PythonInterpreter(); interpreter.cleanup(); @@ -106,5 +106,5 @@ public class ScriptService { PyObject func = python.get(method); return func; } - + } diff --git a/src/services/SkillService.java b/src/services/SkillService.java index 75385d8c..de024d6d 100644 --- a/src/services/SkillService.java +++ b/src/services/SkillService.java @@ -274,7 +274,7 @@ public class SkillService implements INetworkDispatch { addSkill(creature, expertiseName); if(!FileUtilities.doesFileExist("scripts/expertise/" + expertiseName + ".py")) continue; - core.scriptService.callScript("scripts/expertise/", "addAbilities", expertiseName, core, creature, player); + core.scriptService.callScript("scripts/expertise/", expertiseName, "addAbilities", core, creature, player); } } diff --git a/src/services/StaticService.java b/src/services/StaticService.java index 221ad1ce..f6c8bf68 100644 --- a/src/services/StaticService.java +++ b/src/services/StaticService.java @@ -71,7 +71,7 @@ public class StaticService implements INetworkDispatch { public void spawnPlanetStaticObjs(String planet) { Planet planetObj = (Planet) core.terrainService.getPlanetByName(planet); - core.scriptService.callScript("scripts/static_spawns/", "addPlanetSpawns", planetObj.getName(), core, planetObj); + core.scriptService.callScript("scripts/static_spawns/", planetObj.getName(), "addPlanetSpawns", core, planetObj); System.out.println("Loaded static objs for " + planetObj.getName()); } diff --git a/src/services/map/MapService.java b/src/services/map/MapService.java index f586cfde..23b6437c 100644 --- a/src/services/map/MapService.java +++ b/src/services/map/MapService.java @@ -105,7 +105,7 @@ public class MapService implements INetworkDispatch { public void addPlanet(Planet planet) { locationMap.put(planet, new Vector()); - core.scriptService.callScript("scripts/", "addLocations", "static_map_locations", core, planet); + core.scriptService.callScript("scripts/", "static_map_locations", "addLocations", core, planet); } public void addLocation(Planet planet, String name, float x, float y, byte category, byte subcategory, byte active) { diff --git a/src/services/travel/TravelService.java b/src/services/travel/TravelService.java index d0daaa6c..6eeb3bb5 100644 --- a/src/services/travel/TravelService.java +++ b/src/services/travel/TravelService.java @@ -193,7 +193,7 @@ 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); + core.scriptService.callScript("scripts/", "static_travel_points", "addPoints", core, planet); } public void addTravelPoint(Planet planet, String name, float x, float y, float z) { From 0633c410be23da19994415efb4857b7093450bc7 Mon Sep 17 00:00:00 2001 From: Treeku Date: Wed, 19 Mar 2014 18:53:25 +0000 Subject: [PATCH 037/107] Labelled a few CREO variables --- .../creature/CreatureMessageBuilder.java | 43 +++++++++---------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index 1d7deeb0..8e917fe9 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -196,7 +196,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putInt(1); } } - buffer.putInt(0); // unk + buffer.putInt(0); // displayXp int size = buffer.position(); buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); @@ -213,21 +213,23 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); buffer.setAutoExpand(true); buffer.putShort((short) 0x23); - buffer.putInt(0x43); + buffer.putInt(0x43); // serverId - buffer.putInt(0); // defenders list unused in NGE - buffer.putInt(0); + buffer.putShort((short) 0); // detaiLStfFilename + buffer.putInt(0); // detailStfSpacer + buffer.putShort((short) 0); // detailStfName + + // TANO 6 lists TODO: research buffer.put(creature.getCombatFlag()); - - buffer.putLong(0); - buffer.putLong(0); - buffer.putLong(0); // Vehicle vars or TANO 6 vars TODO: research - buffer.putLong(0); - buffer.putInt(0); + + buffer.putLong(0); //List possibly defenders list + buffer.putInt(0); //Int + buffer.putLong(0); //List + buffer.putLong(0); //List + buffer.putLong(0); //List buffer.putShort(creature.getLevel()); - //buffer.putShort((short) 90); buffer.putInt(creature.getGrantedHealth()); // From player_level.iff. Ranges from 0-2000 as you level, consistent with that table. //0A @@ -253,8 +255,9 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putLong(creature.getInviteCounter()); buffer.putInt(creature.getGuildId()); - //10 - buffer.putLong(creature.getTargetId()); + + buffer.putLong(0); // lookAtTarget 0x10 + buffer.putLong(creature.getTargetId()); // intendedTarget 0x11 buffer.put(creature.getMoodId()); buffer.putInt(creature.getPerformanceCounter()); /* @@ -262,9 +265,6 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { * in the CREO, otherwise the evul note bubbles appear */ buffer.putInt((creature.getPerformanceType()) ? 0 : creature.getPerformanceId()); - - buffer.putInt(0); // unks - buffer.putInt(0); buffer.putInt(6); // Current HAM buffer.putInt(creature.getHamListCounter()); @@ -332,9 +332,9 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } - buffer.putShort((short) 0); + buffer.putShort((short) 0); // costume //buffer.put(getAsciiString("appearance/gungan_m.sat")); - buffer.put((byte) 1); // 0 = cloak + buffer.put((byte) 1); // visible boolean. default: true. cloaked if false. if(creature.getBuffList().isEmpty()) { buffer.putInt(0); @@ -377,10 +377,10 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } - buffer.put((byte) 0); // crashes if 1 + buffer.put((byte) 0); // performing? boolean buffer.put(creature.getDifficulty()); buffer.putInt(0xFFFFFFFF); // -1 normal appearance, 0 hologram - buffer.put((byte) 1); // crashes if 0 + buffer.put((byte) 1); // visibleOnRadar? boolean buffer.put((byte) 0); // no effect for 1? buffer.put((byte) 0); // no effect for 1? @@ -413,8 +413,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } } - buffer.putInt(0); // unk list - buffer.putInt(0); + buffer.putLong(0); // unk long int size = buffer.position(); buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); From 0ef12787bbad58ebe5892a038c98683bac355b70 Mon Sep 17 00:00:00 2001 From: Treeku Date: Wed, 19 Mar 2014 19:43:29 +0000 Subject: [PATCH 038/107] Instance implementation --- scripts/commands/eject.py | 8 + scripts/instances/heroic_exar_kun.py | 53 ++ scripts/instances/heroic_star_destroyer.py | 53 ++ .../quest/heroic/heroic_exar_kun_entrance.py | 7 +- scripts/radial/exar_kun_brazier.py | 14 + src/main/NGECore.java | 5 + src/resources/objects/guild/GuildObject.java | 11 +- src/services/ConnectionService.java | 6 +- src/services/InstanceService.java | 778 ++++++++++++++++++ src/services/SimulationService.java | 1 + 10 files changed, 931 insertions(+), 5 deletions(-) create mode 100644 scripts/commands/eject.py create mode 100644 scripts/instances/heroic_exar_kun.py create mode 100644 scripts/instances/heroic_star_destroyer.py create mode 100644 scripts/radial/exar_kun_brazier.py create mode 100644 src/services/InstanceService.java diff --git a/scripts/commands/eject.py b/scripts/commands/eject.py new file mode 100644 index 00000000..eafbd1f0 --- /dev/null +++ b/scripts/commands/eject.py @@ -0,0 +1,8 @@ +import sys + +def run(core, actor, target, commandString): + instSvc = core.instanceService + + if instSvc.isInInstance(actor): + instSvc.remove(instSvc.getActiveInstance(actor), actor) + diff --git a/scripts/instances/heroic_exar_kun.py b/scripts/instances/heroic_exar_kun.py new file mode 100644 index 00000000..d961fee0 --- /dev/null +++ b/scripts/instances/heroic_exar_kun.py @@ -0,0 +1,53 @@ +import sys +import services.InstanceService.Instance + +def getTerrain(): + return 'terrain/dungeon1.trn' + +def getBuilding(): + return 'object/building/heroic/shared_exar_kun_tomb.iff' + +def getCellId(): + return 1 + +def getSpawnPosition(position): + position.x = float(-11.918457) + position.y = float(0.601063) + position.z = float(-125.692871) + return + +def getDuration(): + return 120 + +# NK lockout time was 30 minutes. Most instances were 0 and got reset at 12AM PTC. +def getLockoutTime(): + return 0 + +def getExitTerrain(): + return 'terrain/yavin4.trn' + +def getExitPosition(position): + position.x = float(5097) + position.y = float(0) + position.z = float(5537) + return + +# Called on instance creation to spawn npcs and objects. +def setup(core, instance): + return + +# Called when there is a new participant added to the instance. +def add(core, instance, actor): + return + +# Called when a participant is removed from the instance. +def remove(core, instance, actor): + return + +# Any operations that need to be carried out regularly +def run(core, instance): + return + +# Called on instance destruction to destroy the instance. +def destroy(core, instance): + return \ No newline at end of file diff --git a/scripts/instances/heroic_star_destroyer.py b/scripts/instances/heroic_star_destroyer.py new file mode 100644 index 00000000..2109ea39 --- /dev/null +++ b/scripts/instances/heroic_star_destroyer.py @@ -0,0 +1,53 @@ +import sys +import services.InstanceService.Instance + +def getTerrain(): + return 'terrain/dungeon1.trn' + +def getBuilding(): + return 'object/building/general/shared_space_dungeon_star_destroyer.iff' + +def getCellId(): + return 36 + +def getSpawnPosition(position): + position.x = float(0) + position.y = float(173.834625) + position.z = float(30) + return + +def getDuration(): + return 120 + +# NK lockout time was 30 minutes. Most instances were 0 and got reset at 12AM PTC. +def getLockoutTime(): + return 0 + +def getExitTerrain(): + return 'terrain/corellia.trn' + +def getExitPosition(position): + position.x = float(-131) + position.y = float(0) + position.z = float(-4723) + return + +# Called on instance creation to spawn npcs and objects. +def setup(core, instance): + return + +# Called when there is a new participant added to the instance. +def add(core, instance, actor): + return + +# Called when a participant is removed from the instance. +def remove(core, instance, actor): + return + +# Any operations that need to be carried out regularly +def run(core, instance): + return + +# Called on instance destruction to destroy the instance. +def destroy(core, instance): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/heroic/heroic_exar_kun_entrance.py b/scripts/object/tangible/quest/heroic/heroic_exar_kun_entrance.py index ccad8904..79b40d1f 100644 --- a/scripts/object/tangible/quest/heroic/heroic_exar_kun_entrance.py +++ b/scripts/object/tangible/quest/heroic/heroic_exar_kun_entrance.py @@ -1,4 +1,9 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'exar_kun_brazier') + return + +def use(core, actor, object): + if actor: + core.instanceService.queue('heroic_exar_kun', actor) \ No newline at end of file diff --git a/scripts/radial/exar_kun_brazier.py b/scripts/radial/exar_kun_brazier.py new file mode 100644 index 00000000..d78e1915 --- /dev/null +++ b/scripts/radial/exar_kun_brazier.py @@ -0,0 +1,14 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '')) + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 21, 3, '@building_name:heroic_exar_enter')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + core.objectService.useObject(owner, target) + return + \ No newline at end of file diff --git a/src/main/NGECore.java b/src/main/NGECore.java index 2d491e9d..dbb6cf0a 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -55,6 +55,7 @@ import services.ConnectionService; import services.EntertainmentService; import services.EquipmentService; import services.GroupService; +import services.InstanceService; import services.LoginService; import services.MissionService; import services.PlayerService; @@ -163,6 +164,7 @@ public class NGECore { public SpawnService spawnService; public AIService aiService; //public MissionService missionService; + public InstanceService instanceService; // Login Server public NetworkDispatch loginDispatch; @@ -391,6 +393,9 @@ public class NGECore { zoneDispatch.addService(skillService); + instanceService = new InstanceService(this); + zoneDispatch.addService(instanceService); + //travelService.startShuttleSchedule(); weatherService = new WeatherService(this); diff --git a/src/resources/objects/guild/GuildObject.java b/src/resources/objects/guild/GuildObject.java index a1fe7edb..5890756b 100644 --- a/src/resources/objects/guild/GuildObject.java +++ b/src/resources/objects/guild/GuildObject.java @@ -46,12 +46,11 @@ import com.sleepycat.persist.model.NotPersistent; import engine.clients.Client; import engine.resources.objects.IPersistent; -import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Entity(version=0) +@Entity(version=1) public class GuildObject extends UniverseObject implements IPersistent { protected NGECore core; @@ -63,6 +62,8 @@ public class GuildObject extends UniverseObject implements IPersistent { @NotPersistent private Transaction txn; + private long nextInstanceId = 0; + // GILD 3 private float complexity = 0x803F0F00; private String STFFile = "string_id_table"; @@ -281,6 +282,12 @@ public class GuildObject extends UniverseObject implements IPersistent { } } + public synchronized long getNextInstanceId() { + long ret = nextInstanceId; + nextInstanceId++; + return ret; + } + @Override public void sendBaselines(Client destination) { destination.getSession().write(messageBuilder.buildBaseline3()); diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index 1d18bf53..c0d5405e 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -203,6 +203,10 @@ public class ConnectionService implements INetworkDispatch { } } + if (core.instanceService.isInInstance(object)) { + core.instanceService.remove(core.instanceService.getActiveInstance(object), object); + } + object.setClient(null); PlayerObject ghost = (PlayerObject) object.getSlottedObject("ghost"); @@ -210,8 +214,6 @@ public class ConnectionService implements INetworkDispatch { if(ghost == null) return; - if () - Point3D objectPos = object.getWorldPosition(); List collidables = core.simulationService.getCollidables(object.getPlanet(), objectPos.x, objectPos.z, 512); diff --git a/src/services/InstanceService.java b/src/services/InstanceService.java new file mode 100644 index 00000000..8747fd2f --- /dev/null +++ b/src/services/InstanceService.java @@ -0,0 +1,778 @@ +/******************************************************************************* + * 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 services; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +import resources.objects.building.BuildingObject; +import resources.objects.creature.CreatureObject; +import resources.objects.group.GroupObject; + +import main.NGECore; + +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; +import engine.resources.common.CRC; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class InstanceService implements INetworkDispatch { + + private NGECore core; + + private Map> instanceMap = new HashMap>(); + + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + public class Instance { + + private long instanceId = 0; + private String name = ""; + private long startTime = System.currentTimeMillis(); + private Point3D instancePosition; + private Point3D spawnPosition; + private int duration = 0; + private int lockoutTime = 0; + private CreatureObject owner; + private List participants = new ArrayList(); + private List activeParticipants = new ArrayList(); + protected final Object objectMutex = new Object(); + private ScheduledFuture task; + private boolean faulty = false; + private boolean closed = false; + + public Instance(long instanceId, String name, Point3D instancePosition, Point3D spawnPosition, int duration, int lockoutTime, CreatureObject owner) { + this.instanceId = instanceId; + this.name = name; + this.instancePosition = instancePosition; + this.spawnPosition = spawnPosition; + this.duration = (duration * 1000); + this.lockoutTime = lockoutTime; + this.owner = owner; + participants.add(owner); + } + + public Instance() { + + } + + public long getInstanceId() { + synchronized(objectMutex) { + return instanceId; + } + } + + public String getName() { + synchronized(objectMutex) { + return name; + } + } + + public long getStartTime() { + synchronized(objectMutex) { + return startTime; + } + } + + public long getTimeRemaining() { + synchronized(objectMutex) { + return ((closed) ? 0 : (((long) duration) - (System.currentTimeMillis() - startTime))); + } + } + + public boolean isOpen() { + synchronized(objectMutex) { + if (closed || getTimeRemaining() <= 0) { + return false; + } + + return true; + } + } + + public Point3D getInstancePosition() { + synchronized(objectMutex) { + return instancePosition; + } + } + + public Point3D getSpawnPosition() { + synchronized(objectMutex) { + return spawnPosition; + } + } + + public int getDuration() { + synchronized(objectMutex) { + return duration; + } + } + + public int getLockoutTime() { + synchronized(objectMutex) { + return lockoutTime; + } + } + + public CreatureObject getOwner() { + synchronized(objectMutex) { + return owner; + } + } + + public List getParticipants() { + return participants; + } + + public List getActiveParticipants() { + return participants; + } + + public boolean addParticipant(CreatureObject participant) { + synchronized(objectMutex) { + if (activeParticipants.contains(participant)) { + return true; + } + + if (activeParticipants.size() >= 8) { + return false; + } + + activeParticipants.add(participant); + participants.add(participant); + + return true; + } + } + + public boolean isActiveParticipant(CreatureObject participant) { + synchronized(objectMutex) { + return activeParticipants.contains(participant); + } + } + + public boolean isFormerParticipant(CreatureObject participant) { + synchronized(objectMutex) { + return participants.contains(participant); + } + } + + public boolean removeParticipant(CreatureObject participant) { + synchronized(objectMutex) { + return activeParticipants.remove(participant); + } + } + + public ScheduledFuture getTask() { + synchronized(objectMutex) { + return task; + } + } + + public void setTask(ScheduledFuture task) { + synchronized(objectMutex) { + this.task = task; + } + } + + public boolean isFaulty() { + synchronized(objectMutex) { + return faulty; + } + } + + public void setFaulty(boolean faulty) { + synchronized(objectMutex) { + this.faulty = faulty; + } + } + + public boolean isClosed() { + synchronized(objectMutex) { + return closed; + } + } + + public void close() { + synchronized(objectMutex) { + closed = true; + } + } + + } + + public InstanceService(NGECore core) { + this.core = core; + } + + /* + * @author Treeku + * + * @description Create a brand new instance. + * + * @param instanceName Buildout name of the instance to build. + * @param owner Creator's creature object. + */ + public synchronized Instance create(String instanceName, CreatureObject owner) { + Instance instance = null; + + try { + String planetName = core.scriptService.callScript("scripts/instances/", instanceName, "getTerrain").asString(); + Planet planet = core.terrainService.getPlanetByPath(planetName); + Point3D spawnPosition = new Point3D(); + int duration = (core.scriptService.callScript("scripts/instances/", instanceName, "getDuration").asInt() * 60); + int lockoutTime = core.scriptService.callScript("scripts/instances/", instanceName, "getLockoutTime").asInt();; + + core.scriptService.callScript("scripts/instances/", instanceName, "getSpawnPosition", spawnPosition); + + DatatableVisitor buildoutTable = ClientFileManager.loadFile("datatables/buildout/areas_" + planet.getName() + ".iff", DatatableVisitor.class); + + for (int i = 0; i < buildoutTable.getRowCount(); i++) { + if (((String) buildoutTable.getObject(i, 0)).equals(instanceName)) { + Point3D instancePosition = new Point3D((Float) buildoutTable.getObject(i, 1), 0, (Float) buildoutTable.getObject(i, 2)); + + if (!instanceInUse(instanceName, instancePosition)) { + instance = new Instance(core.guildService.getGuildObject().getNextInstanceId(), instanceName, instancePosition, spawnPosition, duration, lockoutTime, owner); + } + } + } + + if (instance == null) { + return null; + } + + core.scriptService.callScript("scripts/instances/", instanceName, "setup", core, instance); + + final Instance reference = instance; + + instance.setTask(scheduler.scheduleAtFixedRate(new Runnable() { + + private final Instance instance = reference; + private boolean sentCloseWarning = false; + + public void run() { + if (instance.getDuration() > 300 && instance.getTimeRemaining() <= 300 && !sentCloseWarning) { + for (CreatureObject player : instance.getActiveParticipants()) { + player.sendSystemMessage("@instance:five_minute_warning", (byte) 0); + } + + sentCloseWarning = true; + } + + if (!instance.isOpen()) { + for (CreatureObject player : instance.getActiveParticipants()) { + player.sendSystemMessage("@instance:instance_time_out", (byte) 0); + } + + close(instance); + } + + core.scriptService.callScript("scripts/instances/", instance.getName(), "run", core, instance); + } + + }, 1, 1, TimeUnit.MINUTES)); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + + if (!instanceMap.containsKey(instance.getName())) { + instanceMap.put(instance.getName(), new ArrayList()); + } + + instanceMap.get(instance.getName()).add(instance); + + return instance; + } + + + /* + * @author Treeku + * + * @description Queue them for an instance for 19 seconds, remove if none available. + * + * @param instanceName Name of the instance .py script. + * @param creature Player's creature object to queue for the instance. + * + * @return None. + */ + public void queue(String instanceName, CreatureObject creature) { + Instance instance = null; + + if (creature.getBuffByName("instance_launching") != null) { + creature.sendSystemMessage("@instance:instance_request_pending", (byte) 0); + return; + } + + core.buffService.addBuffToCreature(creature, "instance_launching"); + + if (isLockedOut(instanceName, creature)) { + creature.sendSystemMessage("@instance:lockout_notification", (byte) 0); + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_launching")); + return; + } + + instance = getActiveInstance(instanceName, creature); + + if (creature.getGroupId() > 0) { + if (instance == null) { + GroupObject group = (GroupObject) core.objectService.getObject(creature.getGroupId()); + + if (group != null) { + for (SWGObject member : group.getMemberList()) { + instance = getActiveInstance(instanceName, (CreatureObject) member); + + if (instance != null) { + break; + } + } + } + } else { + GroupObject group = (GroupObject) core.objectService.getObject(creature.getGroupId()); + + if (group != null) { + for (SWGObject member : group.getMemberList()) { + Instance instance2 = getActiveInstance(instanceName, (CreatureObject) member); + + if (!instance2.equals(instance)) { + creature.sendSystemMessage("@instance:fail_invalid_lockout", (byte) 0); + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_launching")); + return; + } + } + } + } + } + + if (instance == null) { + instance = create(instanceName, creature); + + if (instance == null) { + creature.sendSystemMessage("@instance:all_full", (byte) 0); + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_launching")); + return; + } + } + + if (instance.getActiveParticipants().size() >= 8) { + creature.sendSystemMessage("@instance:fail_instance_full", (byte) 0); + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_launching")); + return; + } + + if (instance != null) { + add(instance, creature); + } + + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_launching")); + } + + /* + * @author Treeku + * + * @description Adds a player to an instance. Can be used directly to avoid queue. + * + * @param instance Instance object. + * @param creature Player's creature object to add to the instance. + * + * @return None. + */ + public synchronized void add(Instance instance, CreatureObject creature) { + try { + String terrain = core.scriptService.callScript("scripts/instances/", instance.getName(), "getTerrain").asString(); + Planet planet = core.terrainService.getPlanetByPath(terrain); + int cellId = core.scriptService.callScript("scripts/instances/", instance.getName(), "getCellId").asInt(); + + if (cellId == -1) { + Point3D position = new Point3D(); + position.x = instance.getInstancePosition().x + instance.getSpawnPosition().x; + position.y = instance.getInstancePosition().y + instance.getSpawnPosition().y; + position.z = instance.getInstancePosition().z + instance.getSpawnPosition().z; + + core.simulationService.transferToPlanet(creature, planet, position, creature.getOrientation(), null); + } else { + String buildingName = core.scriptService.callScript("scripts/instances/", instance.getName(), "getBuilding").asString(); + BuildingObject building = null; + + Point3D buildingPosition = instance.getInstancePosition().clone(); + + DatatableVisitor buildoutTable = ClientFileManager.loadFile("datatables/buildout/" + planet.getName() + "/" + instance.getName() + ".iff", DatatableVisitor.class); + + for (int i = 0; i < buildoutTable.getRowCount(); i++) { + if (((Integer) buildoutTable.getObject(i, 3)) == CRC.StringtoCRC(buildingName)) { + buildingPosition.x += ((Float) buildoutTable.getObject(i, 5)); + buildingPosition.y += ((Float) buildoutTable.getObject(i, 6)); + buildingPosition.z += ((Float) buildoutTable.getObject(i, 7)); + } + } + + for (SWGObject object : core.objectService.getObjectList().values()) { + if (object instanceof BuildingObject && + object.getTemplate().equals(buildingName) && + object.getPosition().x == buildingPosition.x && + object.getPosition().y == buildingPosition.y && + object.getPosition().z == buildingPosition.z) { + building = (BuildingObject) object; + break; + } + } + + if (building == null) { + throw new Exception(); + } + + core.simulationService.transferToPlanet(creature, planet, instance.getSpawnPosition(), creature.getOrientation(), building.getCellByCellNumber(cellId)); + } + + instance.addParticipant(creature); + + core.scriptService.callScript("scripts/instances/", instance.getName(), "add", core, instance, creature); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /* + * @author Treeku + * + * @description Removes a player from an instance. Can be used directly. + * + * @param instance Instance object. + * @param creature Player's creature object to add to the instance. + * + * @return None. + */ + public void remove(Instance instance, CreatureObject creature) { + try { + if (creature.getBuffByName("instance_exiting") != null) { + creature.sendSystemMessage("@instance:instance_request_pending", (byte) 0); + return; + } + + core.buffService.addBuffToCreature(creature, "instance_exiting"); + + String exitTerrain = core.scriptService.callScript("scripts/instances/", instance.getName(), "getExitTerrain").asString(); + Point3D exitPosition = new Point3D(); + Planet exitPlanet = core.terrainService.getPlanetByPath(exitTerrain); + + core.scriptService.callScript("scripts/instances/", instance.getName(), "getExitPosition", exitPosition); + + core.scriptService.callScript("scripts/instances/", instance.getName(), "remove", core, instance, creature); + + instance.removeParticipant(creature); + + core.simulationService.transferToPlanet(creature, exitPlanet, exitPosition, creature.getOrientation(), null); + } catch (Exception e) { + e.printStackTrace(); + } + + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_exiting")); + } + + /* + * @author Treeku + * + * @description Closes an instance. + * + * @param instance Instance object. + * + * @return None. + */ + public synchronized void close(Instance instance) { + try { + if (instance.isClosed()) { + return; + } + + String exitTerrain = core.scriptService.callScript("scripts/instances/", instance.getName(), "getExitTerrain").asString(); + Point3D exitPosition = new Point3D(); + Planet exitPlanet = core.terrainService.getPlanetByPath(exitTerrain); + + core.scriptService.callScript("scripts/instances/", instance.getName(), "getExitPosition", exitPosition); + + for (CreatureObject participant : instance.getActiveParticipants()) { + instance.removeParticipant(participant); + core.simulationService.transferToPlanet(participant, exitPlanet, exitPosition, participant.getOrientation(), null); + } + + if (!instance.getTask().isCancelled()) { + instance.getTask().cancel(true); + } + + core.scriptService.callScript("scripts/instances/", instance.getName(), "destroy", core, instance); + + instance.close(); + } catch (Exception e) { + e.printStackTrace(); + instance.setFaulty(true); + } + } + + /* + * @author Treeku + * + * @description Checks if an instance area is in use. + * + * @param instanceName Buildout name of the instance. + * @param instancePosition Position of the instance in the game world. + * + * @return True if instance is in use. + */ + public boolean instanceInUse(String instanceName, Point3D instancePosition) { + if (instanceMap.containsKey(instanceName)) { + for (Instance instance : instanceMap.get(instanceName)) { + if (instance.isFaulty() || (instance.isOpen() && + instance.getInstancePosition().x == instancePosition.x && + instance.getInstancePosition().z == instancePosition.z)) { + return true; + } + } + } + + return false; + } + + /* + * @author Treeku + * + * @description Gets an instance object from an instanceId. + * + * @param instanceId Id of an instance you want an object for. + * + * @return Instance object, or null if none found. + */ + public Instance getInstance(long instanceId) { + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if (instance.getInstanceId() == instanceId) { + return instance; + } + } + } + + return null; + } + + /* + * @author Treeku + * + * @description Checks if player is in an instance. + * + * @param creature Player's creature object. + * + * @return True if player is in an instance. + */ + public boolean isInInstance(CreatureObject creature) { + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if (instance.isActiveParticipant(creature)) { + return true; + } + } + } + + return false; + } + + /* + * @author Treeku + * + * @description Checks if player is in a specific instance. + * + * @param instanceName Buildout name of the instance. + * @param creature Player's creature object. + * + * @return True if player is in the specified instance. + */ + public boolean isInInstance(String instanceName, CreatureObject creature) { + if (instanceMap.containsKey(instanceName)) { + for (Instance instance : instanceMap.get(instanceName)) { + if (instance.isActiveParticipant(creature)) { + return true; + } + } + } + + return false; + } + + /* + * @author Treeku + * + * @description Checks if player is in a specific instance. + * + * @param instance Instance object. + * @param creature Player's creature object. + * + * @return True if player is in the specified instance. + */ + public boolean isInInstance(Instance instance, CreatureObject creature) { + return instance.getActiveParticipants().contains(creature); + } + + /* + * @author Treeku + * + * @description Finds the instance object a player is currently in. + * + * @param creature Player's creature object. + * + * @return Instance object of the player, or null if they aren't in one. + */ + public Instance getActiveInstance(CreatureObject creature) { + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if (instance.isActiveParticipant(creature)) { + return instance; + } + } + } + + return null; + } + + /* + * @author Treeku + * + * @description Finds the instance object of an instance a player is/has been in. + * + * @param instanceName Buildout name of the instance. + * @param creature Player's creature object. + * + * @return Instance object of the specified instance the specified player has entered since reset, or null if not found. + */ + public Instance getActiveInstance(String instanceName, CreatureObject creature) { + if (instanceMap.containsKey(instanceName)) { + for (Instance instance : instanceMap.get(instanceName)) { + if (instance.isFormerParticipant(creature) && instance.getTimeRemaining() > 0) { + return instance; + } + } + } + + return null; + } + + /* + * @author Treeku + * + * @description Checks if player has any instance lockouts. + * + * @param creature Player's creature object. + * + * @return True if player is locked out from any instances. + */ + public boolean hasInstanceLockout(CreatureObject creature) { + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if (instance.isFormerParticipant(creature)) { + return true; + } + } + } + + return false; + } + + /* + * @author Treeku + * + * @description Finds the instance object of an instance a player is/has been in. + * + * @param instanceName Buildout name of the instance. + * @param creature Player's creature object. + * + * @return Instance object of the specified instance the specified player has entered since reset, or null if not found. + */ + public List getLockoutList(CreatureObject creature) { + List lockoutList = new ArrayList(); + + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if (instance.isFormerParticipant(creature)) { + lockoutList.add(instance); + } + } + } + + return lockoutList; + } + + /* + * @author Treeku + * + * @description Checks if player is locked out of an instance. + * + * @param instanceName Buildout name of the instance. + * @param creature Player's creature object. + * + * @return True if player is locked out from the specified instance. + */ + public boolean isLockedOut(String instanceName, CreatureObject creature) { + if (instanceMap.containsKey(instanceName)) { + for (Instance instance : instanceMap.get(instanceName)) { + if (instance.isFormerParticipant(creature) && instance.getTimeRemaining() <= 0) { + return true; + } + } + } + + return false; + } + + /* + * @author Treeku + * + * @description Shows the instance UI. + * + * @param creature Player's creature object. + * + * @return None. + */ + public void showInstances(CreatureObject creature) { + // Stub for the /showi UI + } + + @Override + public void insertOpcodes(Map swgOpcodes, + Map objControllerOpcodes) { + // TODO Auto-generated method stub + + } + + @Override + public void shutdown() { + // TODO Auto-generated method stub + + } + +} diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index a71cb9c3..5c9c06b7 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -162,6 +162,7 @@ public class SimulationService implements INetworkDispatch { core.commandService.registerCommand("editbiography"); core.commandService.registerCommand("setbiography"); core.commandService.registerCommand("requestbiography"); + core.commandService.registerCommand("eject"); } From d210dc7ad7c425ccae16543e0dd517a65affb4a9 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Wed, 19 Mar 2014 15:56:52 -0400 Subject: [PATCH 039/107] Added posture checks, radial script for player objects, bug fixes (Bug Fix) Must now wait before performing multiple flourishes (Bug Fix) Can no longer propose to yourself (aka your hand) (Bug Fix) Fixed some strings that didn't have variables (Added) Posture checks before Skill Animating (Added) Additional radial options show on players --- scripts/commands/flourish.py | 8 +---- scripts/commands/startdance.py | 11 +++++-- .../object/creature/player/bothan_female.py | 1 + scripts/object/creature/player/bothan_male.py | 1 + .../object/creature/player/human_female.py | 1 + scripts/object/creature/player/human_male.py | 1 + .../object/creature/player/ithorian_female.py | 1 + .../object/creature/player/ithorian_male.py | 1 + .../object/creature/player/moncal_female.py | 1 + scripts/object/creature/player/moncal_male.py | 1 + .../object/creature/player/rodian_female.py | 1 + scripts/object/creature/player/rodian_male.py | 1 + .../creature/player/sullustan_female.py | 1 + .../object/creature/player/sullustan_male.py | 1 + .../creature/player/trandoshan_female.py | 1 + .../object/creature/player/trandoshan_male.py | 1 + .../object/creature/player/twilek_female.py | 1 + scripts/object/creature/player/twilek_male.py | 1 + .../object/creature/player/wookiee_female.py | 1 + .../object/creature/player/wookiee_male.py | 1 + .../object/creature/player/zabrak_female.py | 1 + scripts/object/creature/player/zabrak_male.py | 1 + scripts/radial/player.py | 23 +++++++++++++ scripts/radial/ring/unity.py | 2 ++ src/resources/datatables/Posture.java | 21 ++++++++++++ .../objects/creature/CreatureObject.java | 7 ++-- src/services/EntertainmentService.java | 33 +++++++++++++++++-- 27 files changed, 110 insertions(+), 15 deletions(-) create mode 100644 scripts/radial/player.py create mode 100644 src/resources/datatables/Posture.java diff --git a/scripts/commands/flourish.py b/scripts/commands/flourish.py index 37c26077..0ec20d6b 100644 --- a/scripts/commands/flourish.py +++ b/scripts/commands/flourish.py @@ -22,11 +22,5 @@ def run(core, actor, target, commandString): if actor.getPerformanceId() <= 0: actor.sendSystemMessage('@performance:flourish_not_performing', 0) return - - actor.incFlourishCount() - actor.sendSystemMessage('@performance:flourish_perform', 0) - animation = 'skill_action_' + str(flourish) - if flourish == 9: - animation = 'mistake' - actor.doSkillAnimation(animation) + core.entertainmentService.performFlourish(actor, flourish) \ No newline at end of file diff --git a/scripts/commands/startdance.py b/scripts/commands/startdance.py index bae424d8..23b815c6 100644 --- a/scripts/commands/startdance.py +++ b/scripts/commands/startdance.py @@ -4,6 +4,7 @@ from services.sui.SUIWindow import Trigger from services.sui.SUIService import ListBoxType from java.util import Vector from java.util import HashMap +from resources.datatables import Posture import sys def setup(): @@ -26,7 +27,6 @@ def run(core, actor, target, commandString): else: availableDances = entSvc.getAvailableDances(actor) - print availableDances suiSvc = core.suiService suiWindow = suiSvc.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@performance:select_dance", "@performance:available_dances", availableDances, actor, None, 10) @@ -74,8 +74,13 @@ def startDance(core, actor, danceName, visual): actor.sendSystemMessage('@performance:already_performing_self',0) return - #TODO: check costume, posture, etc? - + #TODO: check costume + + if actor.getPosture() != Posture.Upright: + print (' can\t dance because ' + str(actor.getPosture())) + actor.sendSystemMessage('@performance:dance_fail', 0) + return + actor.sendSystemMessage('@performance:dance_start_self',0); # i'm not sure about this. i think stopping just stopped any watchers anyways # method doesn't exist now. diff --git a/scripts/object/creature/player/bothan_female.py b/scripts/object/creature/player/bothan_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/bothan_female.py +++ b/scripts/object/creature/player/bothan_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/bothan_male.py b/scripts/object/creature/player/bothan_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/bothan_male.py +++ b/scripts/object/creature/player/bothan_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/human_female.py b/scripts/object/creature/player/human_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/human_female.py +++ b/scripts/object/creature/player/human_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/human_male.py b/scripts/object/creature/player/human_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/human_male.py +++ b/scripts/object/creature/player/human_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/ithorian_female.py b/scripts/object/creature/player/ithorian_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/ithorian_female.py +++ b/scripts/object/creature/player/ithorian_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/ithorian_male.py b/scripts/object/creature/player/ithorian_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/ithorian_male.py +++ b/scripts/object/creature/player/ithorian_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/moncal_female.py b/scripts/object/creature/player/moncal_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/moncal_female.py +++ b/scripts/object/creature/player/moncal_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/moncal_male.py b/scripts/object/creature/player/moncal_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/moncal_male.py +++ b/scripts/object/creature/player/moncal_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/rodian_female.py b/scripts/object/creature/player/rodian_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/rodian_female.py +++ b/scripts/object/creature/player/rodian_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/rodian_male.py b/scripts/object/creature/player/rodian_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/rodian_male.py +++ b/scripts/object/creature/player/rodian_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/sullustan_female.py b/scripts/object/creature/player/sullustan_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/sullustan_female.py +++ b/scripts/object/creature/player/sullustan_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/sullustan_male.py b/scripts/object/creature/player/sullustan_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/sullustan_male.py +++ b/scripts/object/creature/player/sullustan_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/trandoshan_female.py b/scripts/object/creature/player/trandoshan_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/trandoshan_female.py +++ b/scripts/object/creature/player/trandoshan_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/trandoshan_male.py b/scripts/object/creature/player/trandoshan_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/trandoshan_male.py +++ b/scripts/object/creature/player/trandoshan_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/twilek_female.py b/scripts/object/creature/player/twilek_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/twilek_female.py +++ b/scripts/object/creature/player/twilek_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/twilek_male.py b/scripts/object/creature/player/twilek_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/twilek_male.py +++ b/scripts/object/creature/player/twilek_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/wookiee_female.py b/scripts/object/creature/player/wookiee_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/wookiee_female.py +++ b/scripts/object/creature/player/wookiee_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/wookiee_male.py b/scripts/object/creature/player/wookiee_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/wookiee_male.py +++ b/scripts/object/creature/player/wookiee_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/zabrak_female.py b/scripts/object/creature/player/zabrak_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/zabrak_female.py +++ b/scripts/object/creature/player/zabrak_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/zabrak_male.py b/scripts/object/creature/player/zabrak_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/zabrak_male.py +++ b/scripts/object/creature/player/zabrak_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/radial/player.py b/scripts/radial/player.py new file mode 100644 index 00000000..3ca2cc75 --- /dev/null +++ b/scripts/radial/player.py @@ -0,0 +1,23 @@ +from resources.common import RadialOptions +from resources.datatables import Posture +import sys + +def createRadial(core, owner, target, radials): + if target.getPosture() == Posture.SkillAnimating: + if target.getPerformanceType() is True: + radials.add(RadialOptions(0, 140, 1, 'Watch')) + else: + radials.add(RadialOptions(0, 140, 1, 'Listen')) + + return + +def handleSelection(core, owner, target, option): + if option == 140: + if target.getPerformanceType() is True: + core.commandService.callCommand(owner, 'watch', target, '') + return + else: + # TODO: Insert callCommand /listen + return + return + return \ No newline at end of file diff --git a/scripts/radial/ring/unity.py b/scripts/radial/ring/unity.py index f57f3034..5065a8f4 100644 --- a/scripts/radial/ring/unity.py +++ b/scripts/radial/ring/unity.py @@ -14,6 +14,8 @@ def createRadial(core, owner, target, radials): if ghost.getSpouseName() is None or ghost.getSpouseName() is "": targetPlayer = core.objectService.getObject(owner.getTargetId()) if targetPlayer is not None and targetPlayer.getSlottedObject('ghost') is not None: + if targetPlayer.getObjectID() is owner.getObjectID(): + return radials.add(RadialOptions(0, 69, 1, '@unity:mnu_propose')) return else: diff --git a/src/resources/datatables/Posture.java b/src/resources/datatables/Posture.java new file mode 100644 index 00000000..312337f1 --- /dev/null +++ b/src/resources/datatables/Posture.java @@ -0,0 +1,21 @@ +package resources.datatables; + +public class Posture { + // Posture.iff + public static final int Invalid = -1; + public static final int Upright = 0; + public static final int Crouched = 1; + public static final int Prone = 2; + public static final int Sneaking = 3; + public static final int Blocking = 4; + public static final int Climbing = 5; + public static final int Flying = 6; + public static final int LyingDown = 7; + public static final int Sitting = 8; + public static final int SkillAnimating = 9; + public static final int DrivingVehicle = 10; + public static final int RidingCreature = 11; + public static final int KnockedDown = 12; + public static final int Incapacitated = 13; + public static final int Dead = 14; +} diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 19d60409..a3166959 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -355,11 +355,10 @@ public class CreatureObject extends TangibleObject implements IPersistent { this.posture = posture; } - IoBuffer postureDelta = messageBuilder.buildPostureDelta(posture); Posture postureUpdate = new Posture(getObjectID(), posture); ObjControllerMessage objController = new ObjControllerMessage(0x1B, postureUpdate); - notifyObservers(postureDelta, true); + notifyObservers(messageBuilder.buildPostureDelta(posture), true); notifyObservers(objController, true); if (needsStopPerformance) { @@ -377,6 +376,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { public void stopPerformance() { String type = ""; synchronized(objectMutex) { + // TODO: Minimum check to wait for song to finish before stopping... ? setPerformanceId(0,true); setPerformanceCounter(0); setCurrentAnimation(""); @@ -413,7 +413,8 @@ public class CreatureObject extends TangibleObject implements IPersistent { next.setMoodAnimation(""); } if (next == this) { continue; } - next.sendSystemMessage("@performance:" + type + "_stop_other",(byte)0); + if(performanceType) { next.sendSystemMessage("You stop watching " + getCustomName() + ".",(byte)0); } + else { next.sendSystemMessage("You stop listening to " + getCustomName() + ".",(byte)0); } next.getSpectatorTask().cancel(true); } //not sure if this behaviour is correct. might need fixing later. diff --git a/src/services/EntertainmentService.java b/src/services/EntertainmentService.java index a57d486d..ad35f3f8 100644 --- a/src/services/EntertainmentService.java +++ b/src/services/EntertainmentService.java @@ -429,8 +429,7 @@ public class EntertainmentService implements INetworkDispatch { public void run() { if (spectator.getPosition().getDistance2D(performer.getWorldPosition()) > (float) 70) { - String pType = (performer.getPerformanceType()) ? "dance" : "music"; - if(pType.equals("dance")) { + if(((performer.getPerformanceType()) ? "dance" : "music").equals("dance")) { spectator.setPerformanceWatchee(null); spectator.sendSystemMessage("You stop watching " + performer.getCustomName() + " because " + performer.getCustomName() + " is out of range.", (byte) 0); @@ -452,6 +451,36 @@ public class EntertainmentService implements INetworkDispatch { spectator.setSpectatorTask(spectatorTask); } + public void performFlourish(final CreatureObject performer, int flourish) { + + if (performer.getFlourishCount() > 0) { + performer.sendSystemMessage("@performance:wait_flourish_self", (byte) 0); + return; + } + Performance performance = getPerformanceByIndex(performer.getPerformanceId()); + + if(performance == null) + return; + + String anmFlo = "skill_action_" + flourish; + + if (flourish == 9) + anmFlo = "mistake"; + + performer.setFlourishCount(1); + performer.sendSystemMessage("@performance:flourish_perform", (byte) 0); + performer.doSkillAnimation(anmFlo); + + scheduler.schedule(new Runnable() { + + @Override + public void run() { + performer.setFlourishCount(0); + } + + }, (long) performance.getLoopDuration(), TimeUnit.SECONDS); + } + @Override public void shutdown() { From 119451e293ce4f3c56819e4fa418a82c7faf9c62 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Wed, 19 Mar 2014 16:11:22 -0400 Subject: [PATCH 040/107] Fixed starterclothing script, added startInstance to setgodmode command --- scripts/commands/setgodmode.py | 20 +++----------------- scripts/starterclothing.py | 12 ++++++------ 2 files changed, 9 insertions(+), 23 deletions(-) diff --git a/scripts/commands/setgodmode.py b/scripts/commands/setgodmode.py index 536a588b..455e2d82 100644 --- a/scripts/commands/setgodmode.py +++ b/scripts/commands/setgodmode.py @@ -1,10 +1,6 @@ import sys from engine.resources.scene import Point3D -from protocol.swg import CommPlayerMessage -from protocol.swg.objectControllerObjects import ShowLootBox -from protocol.swg import ObjControllerMessage from engine.resources.objects import SWGObject -from jarray import array def setup(): return @@ -16,9 +12,6 @@ def run(core, actor, target, commandString): if not playerObject: return - if target is not None: - print ('has target!') - commandArgs = commandString.split(' ') command = commandArgs[0] if len(commandArgs) > 1: @@ -60,17 +53,10 @@ def run(core, actor, target, commandString): elif command == 'changeBio' and arg1: actor.getSlottedObject('ghost').setBiography(arg1) - elif command == 'rewardMe': - testObject = core.objectService.createObject('object/weapon/ranged/rifle/shared_rifle_t21.iff', actor.getPlanet()) - testObject.setCustomName('Crush4r') - testObject.setStringAttribute('crafter', 'Wavescrub') - dGun = core.objectService.createObject('object/weapon/ranged/rifle/shared_rifle_tc22_blaster.iff', actor.getPlanet()) - dGun.setCustomName('Supertoms Gun') - dGun.setStringAttribute('crafter', 'Wavescrub') - core.playerService.giveItems(actor, testObject, dGun) - return - elif command == 'comm': comm = CommPlayerMessage(actor.getObjectId()) actor.getClient().getSession().write(comm.serialize()) + + elif command == 'startInstance' and arg1: + core.instanceService.queue(arg1, actor) return diff --git a/scripts/starterclothing.py b/scripts/starterclothing.py index 567e1345..3f0a3101 100644 --- a/scripts/starterclothing.py +++ b/scripts/starterclothing.py @@ -7,17 +7,17 @@ def CreateStarterClothing(core, object, starterProfession, raceTemplate): if starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/human_male.iff': core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/human_female.iff': core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_female", "OutdoorScoutHumanoidFemale", core, object) From cf55c5968f85591ae343d07641273d389e7c74c0 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Wed, 19 Mar 2014 16:33:26 -0400 Subject: [PATCH 041/107] Revert "Fixed starterclothing script, added startInstance to setgodmode command" This reverts commit 119451e293ce4f3c56819e4fa418a82c7faf9c62. --- scripts/commands/setgodmode.py | 20 +++++++++++++++++--- scripts/starterclothing.py | 12 ++++++------ 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/scripts/commands/setgodmode.py b/scripts/commands/setgodmode.py index 455e2d82..536a588b 100644 --- a/scripts/commands/setgodmode.py +++ b/scripts/commands/setgodmode.py @@ -1,6 +1,10 @@ import sys from engine.resources.scene import Point3D +from protocol.swg import CommPlayerMessage +from protocol.swg.objectControllerObjects import ShowLootBox +from protocol.swg import ObjControllerMessage from engine.resources.objects import SWGObject +from jarray import array def setup(): return @@ -12,6 +16,9 @@ def run(core, actor, target, commandString): if not playerObject: return + if target is not None: + print ('has target!') + commandArgs = commandString.split(' ') command = commandArgs[0] if len(commandArgs) > 1: @@ -53,10 +60,17 @@ def run(core, actor, target, commandString): elif command == 'changeBio' and arg1: actor.getSlottedObject('ghost').setBiography(arg1) + elif command == 'rewardMe': + testObject = core.objectService.createObject('object/weapon/ranged/rifle/shared_rifle_t21.iff', actor.getPlanet()) + testObject.setCustomName('Crush4r') + testObject.setStringAttribute('crafter', 'Wavescrub') + dGun = core.objectService.createObject('object/weapon/ranged/rifle/shared_rifle_tc22_blaster.iff', actor.getPlanet()) + dGun.setCustomName('Supertoms Gun') + dGun.setStringAttribute('crafter', 'Wavescrub') + core.playerService.giveItems(actor, testObject, dGun) + return + elif command == 'comm': comm = CommPlayerMessage(actor.getObjectId()) actor.getClient().getSession().write(comm.serialize()) - - elif command == 'startInstance' and arg1: - core.instanceService.queue(arg1, actor) return diff --git a/scripts/starterclothing.py b/scripts/starterclothing.py index 3f0a3101..567e1345 100644 --- a/scripts/starterclothing.py +++ b/scripts/starterclothing.py @@ -7,17 +7,17 @@ def CreateStarterClothing(core, object, starterProfession, raceTemplate): if starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/human_male.iff': core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/human_female.iff': core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_female", "OutdoorScoutHumanoidFemale", core, object) From 9a100ee49fd81c06f307919fb44e577157561dd9 Mon Sep 17 00:00:00 2001 From: Treeku Date: Wed, 19 Mar 2014 20:36:43 +0000 Subject: [PATCH 042/107] lookAtTarget (cursor) intendedTarget (target) Updated target's position in the baseline. The two unknown longs were the lookAtTarget (thing you cursor is hovering over), which I believe probably comes before the actual target. This could improve radial menus if the order is right, and allow them to work even if you don't have the object targetted. --- .../common/ObjControllerOpcodes.java | 5 ++- .../creature/CreatureMessageBuilder.java | 18 ++++++--- .../objects/creature/CreatureObject.java | 39 ++++++++++++++----- src/services/SimulationService.java | 30 +++++++++++--- 4 files changed, 70 insertions(+), 22 deletions(-) diff --git a/src/resources/common/ObjControllerOpcodes.java b/src/resources/common/ObjControllerOpcodes.java index 0317dfd0..64636512 100644 --- a/src/resources/common/ObjControllerOpcodes.java +++ b/src/resources/common/ObjControllerOpcodes.java @@ -27,12 +27,13 @@ public class ObjControllerOpcodes { public static final int DATA_TRANSFORM_WITH_PARENT = 0xF1000000; public static final int COMMAND_QUEUE_ENQUEUE = 0x16010000; public static final int COMMAND_QUEUE_REMOVE = 0x17010000; - public static final int HOVER_TARGET = 0x26010000; // lookAtTarget - public static final int TARGET_UPDATE = 0xC5040000; // intendedTarget + public static final int lookAtTarget = 0x26010000; + public static final int intendedTarget = 0xC5040000; public static final int OBJECT_MENU_REQUEST = 0x46010000; public static final int SECURE_TRADE = 0x15010000; public static final int BUFF_BUILDER_CHANGE = 0x5A020000; public static final int BUFF_BUILDER_END = 0x5B020000; public static final int MISSION_LIST_REQUEST = 0xF5000000; public static final int ChangeRoleIconChoice = 0x4D040000; + } diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index 8e917fe9..9ffad44b 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -256,8 +256,8 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putInt(creature.getGuildId()); - buffer.putLong(0); // lookAtTarget 0x10 - buffer.putLong(creature.getTargetId()); // intendedTarget 0x11 + buffer.putLong(creature.getLookAtTarget()); // lookAtTarget 0x10 + buffer.putLong(creature.getIntendedTarget()); // intendedTarget 0x11 buffer.put(creature.getMoodId()); buffer.putInt(creature.getPerformanceCounter()); /* @@ -664,16 +664,22 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } - public IoBuffer buildTargetDelta(long targetId) { - + public IoBuffer buildLookAtTargetDelta(long targetId) { IoBuffer buffer = bufferPool.allocate(8, false).order(ByteOrder.LITTLE_ENDIAN); buffer.putLong(targetId); int size = buffer.position(); buffer.flip(); buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x10, buffer, size + 4); - return buffer; - + } + + public IoBuffer buildIntendedTargetDelta(long targetId) { + IoBuffer buffer = bufferPool.allocate(8, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putLong(targetId); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x11, buffer, size + 4); + return buffer; } public IoBuffer buildHealthDelta(int health) { diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 19d60409..5ef41fc8 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -56,7 +56,7 @@ import engine.resources.scene.Quaternion; import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; -@Entity(version=0) +@Entity(version=1) public class CreatureObject extends TangibleObject implements IPersistent { @NotPersistent @@ -112,6 +112,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { private String inviteSenderName; private long inviteCounter = 0; private int guildId = 0; + private long lookAtTarget = 0; private long targetId = 0; private byte moodId = 0; private int performanceCounter = 0; @@ -959,23 +960,43 @@ public class CreatureObject extends TangibleObject implements IPersistent { this.guildId = guildId; } } - - public long getTargetId() { + + public long getLookAtTarget() { + synchronized(objectMutex) { + return lookAtTarget; + } + } + + public void setLookAtTarget(long lookAtTarget) { + synchronized(objectMutex) { + this.lookAtTarget = lookAtTarget; + } + + notifyObservers(messageBuilder.buildLookAtTargetDelta(lookAtTarget), true); + } + + public long getIntendedTarget() { synchronized(objectMutex) { return targetId; } } - public void setTargetId(long targetId) { + public void setIntendedTarget(long intendedTarget) { synchronized(objectMutex) { - this.targetId = targetId; + this.targetId = intendedTarget; } - IoBuffer targetDelta = messageBuilder.buildTargetDelta(targetId); - notifyObservers(targetDelta, false); - + notifyObservers(messageBuilder.buildIntendedTargetDelta(intendedTarget), true); } - + + public long getTargetId() { + return getIntendedTarget(); + } + + public void setTargetId(long targetId) { + setIntendedTarget(targetId); + } + public long getInviteCounter() { synchronized(objectMutex) { return inviteCounter; diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index 5c9c06b7..98f4a230 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -437,7 +437,7 @@ public class SimulationService implements INetworkDispatch { }); - objControllerOpcodes.put(ObjControllerOpcodes.TARGET_UPDATE, new INetworkRemoteEvent() { + objControllerOpcodes.put(ObjControllerOpcodes.lookAtTarget, new INetworkRemoteEvent() { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { @@ -460,19 +460,39 @@ public class SimulationService implements INetworkDispatch { TargetUpdate targetUpdate = new TargetUpdate(); targetUpdate.deserialize(data); - object.setTargetId(targetUpdate.getTargetId()); + object.setLookAtTarget(targetUpdate.getTargetId()); } - + }); - objControllerOpcodes.put(ObjControllerOpcodes.HOVER_TARGET, new INetworkRemoteEvent() { + objControllerOpcodes.put(ObjControllerOpcodes.intendedTarget, new INetworkRemoteEvent() { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { + data.order(ByteOrder.LITTLE_ENDIAN); + + Client client = core.getClient(session); + + if(client == null) { + System.out.println("NULL Client"); + return; + } + + if(client.getParent() == null) { + System.out.println("NULL Object"); + return; + } + CreatureObject object = (CreatureObject) client.getParent(); + + TargetUpdate targetUpdate = new TargetUpdate(); + targetUpdate.deserialize(data); + + object.setIntendedTarget(targetUpdate.getTargetId()); + } - + }); } From 69832cc30da274e1be59fd6474e877e292c20289 Mon Sep 17 00:00:00 2001 From: Treeku Date: Wed, 19 Mar 2014 20:37:37 +0000 Subject: [PATCH 043/107] Temp quadtree remove() fix --- src/services/SimulationService.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index 98f4a230..9b9a81ab 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -263,6 +263,10 @@ public class SimulationService implements INetworkDispatch { } public boolean remove(SWGObject object, float x, float y, boolean notifyObservers) { + if (object == null || !object.isInQuadtree()) { + return false; + } + boolean success = quadTrees.get(object.getPlanet().getName()).remove(x, y, object); object.setIsInQuadtree(success); if(success && notifyObservers) { From 49ceedf404f41c64dd8af685ab6527143aa626bc Mon Sep 17 00:00:00 2001 From: Waverunner Date: Wed, 19 Mar 2014 17:40:33 -0400 Subject: [PATCH 044/107] Fixed check --- scripts/radial/ring/unity.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/radial/ring/unity.py b/scripts/radial/ring/unity.py index 5065a8f4..8c1c4c5d 100644 --- a/scripts/radial/ring/unity.py +++ b/scripts/radial/ring/unity.py @@ -14,7 +14,7 @@ def createRadial(core, owner, target, radials): if ghost.getSpouseName() is None or ghost.getSpouseName() is "": targetPlayer = core.objectService.getObject(owner.getTargetId()) if targetPlayer is not None and targetPlayer.getSlottedObject('ghost') is not None: - if targetPlayer.getObjectID() is owner.getObjectID(): + if targetPlayer.getObjectID() == owner.getObjectID(): return radials.add(RadialOptions(0, 69, 1, '@unity:mnu_propose')) return @@ -105,4 +105,4 @@ def handlePropose(owner, window, eventType, returnList): owner.setAttachment("proposer", None) return - return \ No newline at end of file + return From 0948a68c3b76fc4595815db0aa454b06d4dceef6 Mon Sep 17 00:00:00 2001 From: Treeku Date: Wed, 19 Mar 2014 22:07:29 +0000 Subject: [PATCH 045/107] Enabled heroic dungeons, fixed radials getOptionType() seems to work now --- src/main/NGECore.java | 4 +- .../ObjectMenuResponse.java | 37 +++++++------------ src/services/trade/TradeService.java | 2 +- 3 files changed, 16 insertions(+), 27 deletions(-) diff --git a/src/main/NGECore.java b/src/main/NGECore.java index 1483e4f7..6a351892 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -328,10 +328,10 @@ public class NGECore { terrainService.addPlanet(14, "kashyyyk_hunting", "terrain/kashyyyk_hunting.trn", true); terrainService.addPlanet(15, "kashyyyk_north_dungeons", "terrain/kashyyyk_north_dungeons.trn", true); terrainService.addPlanet(16, "kashyyyk_rryatt_trail", "terrain/kashyyyk_rryatt_trail.trn", true); - terrainService.addPlanet(17, "kashyyyk_south_dungeons", "terrain/kashyyyk_south_dungeons.trn", true); + terrainService.addPlanet(17, "kashyyyk_south_dungeons", "terrain/kashyyyk_south_dungeons.trn", true);*/ terrainService.addPlanet(18, "adventure1", "terrain/adventure1.trn", true); terrainService.addPlanet(19, "adventure2", "terrain/adventure2.trn", true); - terrainService.addPlanet(20, "dungeon1", "terrain/dungeon1.trn", true);*/ + terrainService.addPlanet(20, "dungeon1", "terrain/dungeon1.trn", true); //Space Zones // NOTE: Commented out for now until space is implemented. No need to be loaded into memory when space is not implemented. /*terrainService.addPlanet(21, "space_corellia", "terrain/space_corellia.trn", true); diff --git a/src/protocol/swg/objectControllerObjects/ObjectMenuResponse.java b/src/protocol/swg/objectControllerObjects/ObjectMenuResponse.java index 1d1ae2c5..f7533788 100644 --- a/src/protocol/swg/objectControllerObjects/ObjectMenuResponse.java +++ b/src/protocol/swg/objectControllerObjects/ObjectMenuResponse.java @@ -59,41 +59,30 @@ public class ObjectMenuResponse extends ObjControllerObject { @Override public IoBuffer serialize() { + int size = 37; + byte counter = 0; - IoBuffer result = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); - result.setAutoExpand(true); + for (RadialOptions radialOption : radialOptions) { + size += 5 + getUnicodeString(radialOption.getDescription()).length; + } + IoBuffer result = IoBuffer.allocate(size).order(ByteOrder.LITTLE_ENDIAN); result.putInt(ObjControllerMessage.OBJECT_MENU_RESPONSE); result.putLong(ownerId); result.putInt(0); result.putLong(targetId); result.putLong(ownerId); - - int size = radialOptions.size(); - result.putInt(size); - - if(size > 0) { - byte counter = 0; - for(RadialOptions radialOption : radialOptions) { - result.put(++counter); - result.put(radialOption.getParentId()); - result.putShort(radialOption.getOptionId()); - //result.put(radialOption.getOptionType()); - result.put((byte) 3); - - if(radialOption.getDescription().length() > 0) - result.put(getUnicodeString(radialOption.getDescription())); - else - result.putInt(0); - - } + result.putInt(radialOptions.size()); + for (RadialOptions radialOption : radialOptions) { + result.put(++counter); + result.put(radialOption.getParentId()); + result.putShort(radialOption.getOptionId()); + result.put(radialOption.getOptionType()); //result.put((byte) 3); + result.put(getUnicodeString(radialOption.getDescription())); } result.put(radialCount); - int packetSize = result.position(); - result = IoBuffer.allocate(packetSize).put(result.array(), 0, packetSize); return result.flip(); - } } diff --git a/src/services/trade/TradeService.java b/src/services/trade/TradeService.java index 3490c69a..cde8292e 100644 --- a/src/services/trade/TradeService.java +++ b/src/services/trade/TradeService.java @@ -202,7 +202,7 @@ public class TradeService implements INetworkDispatch{ } else { - if(objectToTrade.getAttributes()/*.toString()*/.containsKey("no_trade")) { + if(objectToTrade.getAttributes().containsKey("no_trade")) { return; } From 6412a8914a5ffcf72fd73f78724bb50174cb3212 Mon Sep 17 00:00:00 2001 From: Treeku Date: Wed, 19 Mar 2014 23:07:57 +0000 Subject: [PATCH 046/107] Fixed bug with previous buildout id change --- src/services/object/ObjectService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index c5535ddd..6f164ebc 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -809,8 +809,8 @@ public class ObjectService implements INetworkDispatch { // Since the ids are just ints, they append 0xFFFF86F9 to them // This is demonstated in the packet sent to the server when you /target client-spawned objects - objectId = Delta.createBuffer(8).putInt((Integer) buildoutTable.getObject(i, 0)).putInt(0xF986FFFF).flip().getLong(); - containerId = (Integer) buildoutTable.getObject(i, 1); + objectId = (((Integer) buildoutTable.getObject(i, 0) == 0) ? 0 : Delta.createBuffer(8).putInt((Integer) buildoutTable.getObject(i, 0)).putInt(0xF986FFFF).flip().getLong()); + containerId = (((Integer) buildoutTable.getObject(i, 1) == 0) ? 0 : Delta.createBuffer(8).putInt((Integer) buildoutTable.getObject(i, 1)).putInt(0xF986FFFF).flip().getLong()); type = (Integer) buildoutTable.getObject(i, 2); cellIndex = (Integer) buildoutTable.getObject(i, 4); From 17fbb79ef079f329d2b0f5af142c65d2c58ee85e Mon Sep 17 00:00:00 2001 From: Treeku Date: Thu, 20 Mar 2014 15:24:19 +0000 Subject: [PATCH 047/107] Synchronization improvements for instances --- src/services/InstanceService.java | 184 +++++++++--------------------- 1 file changed, 56 insertions(+), 128 deletions(-) diff --git a/src/services/InstanceService.java b/src/services/InstanceService.java index 8747fd2f..d5c032a0 100644 --- a/src/services/InstanceService.java +++ b/src/services/InstanceService.java @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; @@ -63,9 +64,8 @@ public class InstanceService implements INetworkDispatch { private int duration = 0; private int lockoutTime = 0; private CreatureObject owner; - private List participants = new ArrayList(); - private List activeParticipants = new ArrayList(); - protected final Object objectMutex = new Object(); + private List participants = new CopyOnWriteArrayList(); + private List activeParticipants = new CopyOnWriteArrayList(); private ScheduledFuture task; private boolean faulty = false; private boolean closed = false; @@ -85,68 +85,48 @@ public class InstanceService implements INetworkDispatch { } - public long getInstanceId() { - synchronized(objectMutex) { - return instanceId; - } + public synchronized long getInstanceId() { + return instanceId; } - public String getName() { - synchronized(objectMutex) { - return name; - } + public synchronized String getName() { + return name; } - public long getStartTime() { - synchronized(objectMutex) { - return startTime; - } + public synchronized long getStartTime() { + return startTime; } - public long getTimeRemaining() { - synchronized(objectMutex) { - return ((closed) ? 0 : (((long) duration) - (System.currentTimeMillis() - startTime))); - } + public synchronized long getTimeRemaining() { + return ((closed) ? 0 : (((long) duration) - (System.currentTimeMillis() - startTime))); } - public boolean isOpen() { - synchronized(objectMutex) { - if (closed || getTimeRemaining() <= 0) { - return false; - } - - return true; + public synchronized boolean isOpen() { + if (closed || getTimeRemaining() <= 0) { + return false; } + + return true; } - public Point3D getInstancePosition() { - synchronized(objectMutex) { - return instancePosition; - } + public synchronized Point3D getInstancePosition() { + return instancePosition; } - public Point3D getSpawnPosition() { - synchronized(objectMutex) { - return spawnPosition; - } + public synchronized Point3D getSpawnPosition() { + return spawnPosition; } - public int getDuration() { - synchronized(objectMutex) { - return duration; - } + public synchronized int getDuration() { + return duration; } - public int getLockoutTime() { - synchronized(objectMutex) { - return lockoutTime; - } + public synchronized int getLockoutTime() { + return lockoutTime; } - public CreatureObject getOwner() { - synchronized(objectMutex) { - return owner; - } + public synchronized CreatureObject getOwner() { + return owner; } public List getParticipants() { @@ -157,75 +137,55 @@ public class InstanceService implements INetworkDispatch { return participants; } - public boolean addParticipant(CreatureObject participant) { - synchronized(objectMutex) { - if (activeParticipants.contains(participant)) { - return true; - } - - if (activeParticipants.size() >= 8) { - return false; - } - - activeParticipants.add(participant); - participants.add(participant); - + public synchronized boolean addParticipant(CreatureObject participant) { + if (activeParticipants.contains(participant)) { return true; } + + if (activeParticipants.size() >= 8) { + return false; + } + + activeParticipants.add(participant); + participants.add(participant); + + return true; } - public boolean isActiveParticipant(CreatureObject participant) { - synchronized(objectMutex) { - return activeParticipants.contains(participant); - } + public synchronized boolean isActiveParticipant(CreatureObject participant) { + return activeParticipants.contains(participant); } - public boolean isFormerParticipant(CreatureObject participant) { - synchronized(objectMutex) { - return participants.contains(participant); - } + public synchronized boolean isFormerParticipant(CreatureObject participant) { + return participants.contains(participant); } - public boolean removeParticipant(CreatureObject participant) { - synchronized(objectMutex) { - return activeParticipants.remove(participant); - } + public synchronized boolean removeParticipant(CreatureObject participant) { + return activeParticipants.remove(participant); } - public ScheduledFuture getTask() { - synchronized(objectMutex) { - return task; - } + public synchronized ScheduledFuture getTask() { + return task; } - public void setTask(ScheduledFuture task) { - synchronized(objectMutex) { - this.task = task; - } + public synchronized void setTask(ScheduledFuture task) { + this.task = task; } - public boolean isFaulty() { - synchronized(objectMutex) { - return faulty; - } + public synchronized boolean isFaulty() { + return faulty; } - public void setFaulty(boolean faulty) { - synchronized(objectMutex) { - this.faulty = faulty; - } + public synchronized void setFaulty(boolean faulty) { + this.faulty = faulty; } - public boolean isClosed() { - synchronized(objectMutex) { - return closed; - } + public synchronized boolean isClosed() { + return closed; } - public void close() { - synchronized(objectMutex) { - closed = true; - } + public synchronized void close() { + closed = true; } } @@ -235,8 +195,6 @@ public class InstanceService implements INetworkDispatch { } /* - * @author Treeku - * * @description Create a brand new instance. * * @param instanceName Buildout name of the instance to build. @@ -316,8 +274,6 @@ public class InstanceService implements INetworkDispatch { /* - * @author Treeku - * * @description Queue them for an instance for 19 seconds, remove if none available. * * @param instanceName Name of the instance .py script. @@ -397,8 +353,6 @@ public class InstanceService implements INetworkDispatch { } /* - * @author Treeku - * * @description Adds a player to an instance. Can be used directly to avoid queue. * * @param instance Instance object. @@ -406,7 +360,7 @@ public class InstanceService implements INetworkDispatch { * * @return None. */ - public synchronized void add(Instance instance, CreatureObject creature) { + public void add(Instance instance, CreatureObject creature) { try { String terrain = core.scriptService.callScript("scripts/instances/", instance.getName(), "getTerrain").asString(); Planet planet = core.terrainService.getPlanetByPath(terrain); @@ -462,8 +416,6 @@ public class InstanceService implements INetworkDispatch { } /* - * @author Treeku - * * @description Removes a player from an instance. Can be used directly. * * @param instance Instance object. @@ -499,8 +451,6 @@ public class InstanceService implements INetworkDispatch { } /* - * @author Treeku - * * @description Closes an instance. * * @param instance Instance object. @@ -538,8 +488,6 @@ public class InstanceService implements INetworkDispatch { } /* - * @author Treeku - * * @description Checks if an instance area is in use. * * @param instanceName Buildout name of the instance. @@ -562,8 +510,6 @@ public class InstanceService implements INetworkDispatch { } /* - * @author Treeku - * * @description Gets an instance object from an instanceId. * * @param instanceId Id of an instance you want an object for. @@ -583,8 +529,6 @@ public class InstanceService implements INetworkDispatch { } /* - * @author Treeku - * * @description Checks if player is in an instance. * * @param creature Player's creature object. @@ -604,8 +548,6 @@ public class InstanceService implements INetworkDispatch { } /* - * @author Treeku - * * @description Checks if player is in a specific instance. * * @param instanceName Buildout name of the instance. @@ -626,8 +568,6 @@ public class InstanceService implements INetworkDispatch { } /* - * @author Treeku - * * @description Checks if player is in a specific instance. * * @param instance Instance object. @@ -640,8 +580,6 @@ public class InstanceService implements INetworkDispatch { } /* - * @author Treeku - * * @description Finds the instance object a player is currently in. * * @param creature Player's creature object. @@ -661,8 +599,6 @@ public class InstanceService implements INetworkDispatch { } /* - * @author Treeku - * * @description Finds the instance object of an instance a player is/has been in. * * @param instanceName Buildout name of the instance. @@ -683,8 +619,6 @@ public class InstanceService implements INetworkDispatch { } /* - * @author Treeku - * * @description Checks if player has any instance lockouts. * * @param creature Player's creature object. @@ -704,8 +638,6 @@ public class InstanceService implements INetworkDispatch { } /* - * @author Treeku - * * @description Finds the instance object of an instance a player is/has been in. * * @param instanceName Buildout name of the instance. @@ -728,8 +660,6 @@ public class InstanceService implements INetworkDispatch { } /* - * @author Treeku - * * @description Checks if player is locked out of an instance. * * @param instanceName Buildout name of the instance. @@ -750,8 +680,6 @@ public class InstanceService implements INetworkDispatch { } /* - * @author Treeku - * * @description Shows the instance UI. * * @param creature Player's creature object. From 36458239d3dfad68d22d926d0e27629afc29ddf4 Mon Sep 17 00:00:00 2001 From: Treeku Date: Thu, 20 Mar 2014 15:29:04 +0000 Subject: [PATCH 048/107] Added object tracking lists to instances Add objects with instance.getObjectList().add(object) It's removed automatically when the instance closes. --- src/services/InstanceService.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/services/InstanceService.java b/src/services/InstanceService.java index d5c032a0..171e77a7 100644 --- a/src/services/InstanceService.java +++ b/src/services/InstanceService.java @@ -66,6 +66,7 @@ public class InstanceService implements INetworkDispatch { private CreatureObject owner; private List participants = new CopyOnWriteArrayList(); private List activeParticipants = new CopyOnWriteArrayList(); + private List objectList = new CopyOnWriteArrayList(); private ScheduledFuture task; private boolean faulty = false; private boolean closed = false; @@ -137,6 +138,10 @@ public class InstanceService implements INetworkDispatch { return participants; } + public List getObjectList() { + return objectList; + } + public synchronized boolean addParticipant(CreatureObject participant) { if (activeParticipants.contains(participant)) { return true; @@ -185,6 +190,12 @@ public class InstanceService implements INetworkDispatch { } public synchronized void close() { + for (SWGObject object : objectList) { + core.objectService.destroyObject(object); + } + + objectList.clear(); + closed = true; } From ca4e0559a17db5ca67feb8ba61a34ce7454e3b6b Mon Sep 17 00:00:00 2001 From: Waverunner Date: Thu, 20 Mar 2014 18:00:13 -0400 Subject: [PATCH 049/107] Added performance effects, fixed band flos, minor ent service code changes (Bug Fix) Band Flourishes will now give experience (Added) Performance Commands (Code) Changed to ConcurrentHashMap for performance tables --- scripts/commands/bandflourish.py | 10 +- scripts/commands/centerstage.py | 14 +++ scripts/commands/colorSwirl.py | 14 +++ scripts/commands/colorlights.py | 19 +++ scripts/commands/dazzle.py | 19 +++ scripts/commands/distract.py | 19 +++ scripts/commands/featuredSolo.py | 14 +++ scripts/commands/firejet.py | 19 +++ scripts/commands/firejet2.py | 14 +++ scripts/commands/floorLights.py | 14 +++ scripts/commands/laserShow.py | 14 +++ scripts/commands/smokebomb.py | 19 +++ scripts/commands/spotlight.py | 24 ++++ scripts/commands/ventriloquism.py | 19 +++ src/resources/common/Performance.java | 21 ++++ src/resources/common/PerformanceEffect.java | 108 ++++++++++++++++ .../objects/creature/CreatureObject.java | 16 +++ src/services/EntertainmentService.java | 116 +++++++++++++++++- 18 files changed, 482 insertions(+), 11 deletions(-) create mode 100644 scripts/commands/centerstage.py create mode 100644 scripts/commands/colorSwirl.py create mode 100644 scripts/commands/colorlights.py create mode 100644 scripts/commands/dazzle.py create mode 100644 scripts/commands/distract.py create mode 100644 scripts/commands/featuredSolo.py create mode 100644 scripts/commands/firejet.py create mode 100644 scripts/commands/firejet2.py create mode 100644 scripts/commands/floorLights.py create mode 100644 scripts/commands/laserShow.py create mode 100644 scripts/commands/smokebomb.py create mode 100644 scripts/commands/spotlight.py create mode 100644 scripts/commands/ventriloquism.py create mode 100644 src/resources/common/PerformanceEffect.java diff --git a/scripts/commands/bandflourish.py b/scripts/commands/bandflourish.py index e30daa8f..446ceb72 100644 --- a/scripts/commands/bandflourish.py +++ b/scripts/commands/bandflourish.py @@ -31,15 +31,10 @@ def run(core, actor, target, commandString): if actor.getPerformanceId() <= 0: actor.sendSystemMessage('@performance:flourish_not_performing', 0) return - - animation = 'skill_action_' + str(flourish) - if flourish == 9: - animation = 'mistake' if actor.getAcceptBandflourishes(): actor.sendSystemMessage('@performance:flourish_perform_band_self', 0) - actor.sendSystemMessage('@performance:flourish_perform', 0) - actor.doSkillAnimation(animation) + core.entertainmentService.performFlourish(actor, flourish) group = core.objectService.getObject(actor.getGroupId()) if not group: @@ -50,8 +45,7 @@ def run(core, actor, target, commandString): continue if creature.getAcceptBandflourishes(): creature.sendSystemMessage('@performance:flourish_perform_band_member', 0) - creature.sendSystemMessage('@performance:flourish_perform', 0) - creature.doSkillAnimation(animation) + core.entertainmentService.performFlourish(creature, flourish) return diff --git a/scripts/commands/centerstage.py b/scripts/commands/centerstage.py new file mode 100644 index 00000000..ab85409c --- /dev/null +++ b/scripts/commands/centerstage.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 66: + actor.sendSystemMessage('@performance:effect_lack_skill_self') + return + + if core.entertainmentService.performEffect(actor, 'CenterStage', 'clienteffect/entertainer_center_stage.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_center_stage', 0) + return \ No newline at end of file diff --git a/scripts/commands/colorSwirl.py b/scripts/commands/colorSwirl.py new file mode 100644 index 00000000..d437a17c --- /dev/null +++ b/scripts/commands/colorSwirl.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 34: + actor.sendSystemMessage('@performance:effect_lack_skill_self') + return + + if core.entertainmentService.performEffect(actor, 'ColorSwirl', 'clienteffect/entertainer_color_swirl.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_color_swirl', 0) + return \ No newline at end of file diff --git a/scripts/commands/colorlights.py b/scripts/commands/colorlights.py new file mode 100644 index 00000000..abaa8dd2 --- /dev/null +++ b/scripts/commands/colorlights.py @@ -0,0 +1,19 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + command = 'ColorLights1' + effect = 'entertainer_color_lights_level_1.cef' + + if actor.getLevel() < 4: + actor.sendSystemMessage('@performance:effect_lack_skill_self') + return + + # TODO: Find out levels for other colored light 2 and 3 + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_color_lights', 0) + return \ No newline at end of file diff --git a/scripts/commands/dazzle.py b/scripts/commands/dazzle.py new file mode 100644 index 00000000..718c6c5d --- /dev/null +++ b/scripts/commands/dazzle.py @@ -0,0 +1,19 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + command = 'Dazzle1' + effect = 'entertainer_dazzle_level_1.cef' + + if actor.getLevel() < 10: + actor.sendSystemMessage('@performance:effect_lack_skill_self') + return + + # TODO: Find out levels for other dazzle 2 and 3 + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_dazzle', 0) + return \ No newline at end of file diff --git a/scripts/commands/distract.py b/scripts/commands/distract.py new file mode 100644 index 00000000..6c1eb887 --- /dev/null +++ b/scripts/commands/distract.py @@ -0,0 +1,19 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + command = 'Distract1' + effect = 'entertainer_distract_level_1.cef' + + if actor.getLevel() < 18: + actor.sendSystemMessage('@performance:effect_lack_skill_self') + return + + # TODO: Find out levels for other distract 2 and 3 + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_distract', 0) + return \ No newline at end of file diff --git a/scripts/commands/featuredSolo.py b/scripts/commands/featuredSolo.py new file mode 100644 index 00000000..7b7f98cf --- /dev/null +++ b/scripts/commands/featuredSolo.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 90: + actor.sendSystemMessage('@performance:effect_lack_skill_self') + return + + if core.entertainmentService.performEffect(actor, 'FeaturedSolo', 'clienteffect/entertainer_featured_solo.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_featured_solo', 0) + return \ No newline at end of file diff --git a/scripts/commands/firejet.py b/scripts/commands/firejet.py new file mode 100644 index 00000000..42179337 --- /dev/null +++ b/scripts/commands/firejet.py @@ -0,0 +1,19 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + command = 'FireJets1' + effect = 'entertainer_fire_jets_level_1.cef' + + if actor.getLevel() < 26: + actor.sendSystemMessage('@performance:effect_lack_skill_self') + return + + # TODO: Find out levels for other firejets 2 and 3 + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_fire_jets', 0) + return \ No newline at end of file diff --git a/scripts/commands/firejet2.py b/scripts/commands/firejet2.py new file mode 100644 index 00000000..820d1db7 --- /dev/null +++ b/scripts/commands/firejet2.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 76: + actor.sendSystemMessage('@performance:effect_lack_skill_self') + return + + if core.entertainmentService.performEffect(actor, 'FireJetsB', 'clienteffect/entertainer_fire_jets2.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_fire_jets_2', 0) + return \ No newline at end of file diff --git a/scripts/commands/floorLights.py b/scripts/commands/floorLights.py new file mode 100644 index 00000000..945d273e --- /dev/null +++ b/scripts/commands/floorLights.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 82: + actor.sendSystemMessage('@performance:effect_lack_skill_self') + return + + if core.entertainmentService.performEffect(actor, 'DanceFloor', 'clienteffect/entertainer_dance_floor.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_dance_floor', 0) + return \ No newline at end of file diff --git a/scripts/commands/laserShow.py b/scripts/commands/laserShow.py new file mode 100644 index 00000000..8ed7d21d --- /dev/null +++ b/scripts/commands/laserShow.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 42: + actor.sendSystemMessage('@performance:effect_lack_skill_self') + return + + if core.entertainmentService.performEffect(actor, 'LaserShow', 'clienteffect/entertainer_laser_show.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_lase_show', 0) + return \ No newline at end of file diff --git a/scripts/commands/smokebomb.py b/scripts/commands/smokebomb.py new file mode 100644 index 00000000..01b2bf52 --- /dev/null +++ b/scripts/commands/smokebomb.py @@ -0,0 +1,19 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + command = 'SmokeBomb1' + effect = 'entertainer_smoke_bomb_level_1.cef' + + if actor.getLevel() < 50: + actor.sendSystemMessage('@performance:effect_lack_skill_self') + return + + # TODO: Find out levels for other smoke bomb 2 and 3 + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_smoke_bomb', 0) + return \ No newline at end of file diff --git a/scripts/commands/spotlight.py b/scripts/commands/spotlight.py new file mode 100644 index 00000000..25341536 --- /dev/null +++ b/scripts/commands/spotlight.py @@ -0,0 +1,24 @@ +from protocol.swg import PlayClientEffectObjectMessage +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + command = 'SpotLight1' + effect = 'clienteffect/entertainer_spot_light_level_1.cef' + + # TODO: Figure out what levels the spotlight effects upgraded at. + + if actor.getLevel() >= 80: + command == 'SpotLight3' + effect = 'clienteffect/entertainer_spot_light_level_3.cef' + + elif actor.getLevel() >= 40: + command == 'SpotLight2' + effect = 'clienteffect/entertainer_spot_light_level_2.cef' + + if core.entertainmentService.performEffect(actor, command, effect, None) is True: + actor.sendSystemMessage('@performance:effect_perform_spot_light', 0) + return diff --git a/scripts/commands/ventriloquism.py b/scripts/commands/ventriloquism.py new file mode 100644 index 00000000..198516f4 --- /dev/null +++ b/scripts/commands/ventriloquism.py @@ -0,0 +1,19 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + command = 'Ventriloquism1' + effect = 'entertainer_ventriloquism_level_1.cef' + + if actor.getLevel() < 58: + actor.sendSystemMessage('@performance:effect_lack_skill_self') + return + + # TODO: Find out levels for other ventriloquism 2 and 3 + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_ventriloquism', 0) + return \ No newline at end of file diff --git a/src/resources/common/Performance.java b/src/resources/common/Performance.java index 9100e2f2..4179f4be 100644 --- a/src/resources/common/Performance.java +++ b/src/resources/common/Performance.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * 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.common; public class Performance { diff --git a/src/resources/common/PerformanceEffect.java b/src/resources/common/PerformanceEffect.java new file mode 100644 index 00000000..09afddd0 --- /dev/null +++ b/src/resources/common/PerformanceEffect.java @@ -0,0 +1,108 @@ +/******************************************************************************* + * 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.common; + +public class PerformanceEffect { + + private int effectActionCost; + private float effectDuration; + private String name; + private String performanceType; + private boolean requiredPerforming; + private int requiredSkillModValue; + private int targetType; + private boolean music; + private boolean dance; + + public PerformanceEffect() { } + + public int getEffectActionCost() { + return effectActionCost; + } + public float getEffectDuration() { + return effectDuration; + } + public String getName() { + return name; + } + public int getRequiredSkillModValue() { + return requiredSkillModValue; + } + public int getTargetType() { + return targetType; + } + public String getPerformanceType() { + return performanceType; + } + public boolean isRequiredPerforming() { + return requiredPerforming; + } + public void setEffectActionCost(int effectActionCost) { + this.effectActionCost = effectActionCost; + } + public void setEffectDuration(float effectDuration) { + this.effectDuration = effectDuration; + } + public void setName(String name) { + this.name = name; + } + public void setPerformanceType(String performanceType) { + this.performanceType = performanceType; + + if (performanceType.contains(",")) { + String[] array = performanceType.split(","); + if(array.length < 2) + return; + + this.dance = true; + this.music = true; + } + else if (performanceType.equals("music")) { this.music = true; } + else if (performanceType.equals("dance")) { this.dance = true; } + } + public void setRequiredPerforming(boolean requiredPerforming) { + this.requiredPerforming = requiredPerforming; + } + public void setRequiredSkillModValue(int requiredSkillModValue) { + this.requiredSkillModValue = requiredSkillModValue; + } + public void setTargetType(int targetType) { + this.targetType = targetType; + } + + public boolean isMusic() { + return music; + } + + public void setMusic(boolean music) { + this.music = music; + } + + public boolean isDance() { + return dance; + } + + public void setDance(boolean dance) { + this.dance = dance; + } + +} diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index e02a879e..46d13369 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -31,6 +31,7 @@ import org.apache.mina.core.buffer.IoBuffer; import protocol.swg.ChatSystemMessage; import protocol.swg.ObjControllerMessage; +import protocol.swg.PlayClientEffectObjectMessage; import protocol.swg.PlayMusicMessage; import protocol.swg.UpdatePostureMessage; import protocol.swg.UpdatePVPStatusMessage; @@ -167,6 +168,9 @@ public class CreatureObject extends TangibleObject implements IPersistent { @NotPersistent private int flourishCount = 0; + @NotPersistent + private boolean performingEffect; + public CreatureObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { super(objectID, planet, Template, position, orientation); messageBuilder = new CreatureMessageBuilder(this); @@ -1655,4 +1659,16 @@ public class CreatureObject extends TangibleObject implements IPersistent { this.spectatorTask = spectatorTask; } } + + public boolean isPerformingEffect() { + synchronized(objectMutex) { + return performingEffect; + } + } + + public void setPerformingEffect(boolean hasEffect) { + synchronized(objectMutex) { + this.performingEffect = hasEffect; + } + } } diff --git a/src/services/EntertainmentService.java b/src/services/EntertainmentService.java index ad35f3f8..b45b0c8d 100644 --- a/src/services/EntertainmentService.java +++ b/src/services/EntertainmentService.java @@ -18,6 +18,7 @@ import org.apache.mina.core.session.IoSession; import protocol.swg.ObjControllerMessage; import protocol.swg.OkMessage; +import protocol.swg.PlayClientEffectObjectMessage; import protocol.swg.objectControllerObjects.BuffBuilderChangeMessage; import protocol.swg.objectControllerObjects.BuffBuilderEndMessage; import protocol.swg.objectControllerObjects.BuffBuilderStartMessage; @@ -25,11 +26,14 @@ import resources.common.BuffBuilder; import resources.common.Console; import resources.common.ObjControllerOpcodes; import resources.common.Performance; +import resources.common.PerformanceEffect; import resources.common.StringUtilities; +import resources.datatables.Posture; import resources.objects.Buff; import resources.objects.BuffItem; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; import engine.clients.Client; @@ -44,14 +48,17 @@ public class EntertainmentService implements INetworkDispatch { private Vector buffBuilderSkills = new Vector(); //FIXME: create a wrapper class for double key lookup maps - private HashMap performances = new HashMap(); - private HashMap performancesByIndex = new HashMap(); - private HashMap danceMap = new HashMap(); + private ConcurrentHashMap performances = new ConcurrentHashMap(); + private ConcurrentHashMap performancesByIndex = new ConcurrentHashMap(); + private ConcurrentHashMap danceMap = new ConcurrentHashMap(); + + private Map performanceEffects = new ConcurrentHashMap(); public EntertainmentService(NGECore core) { this.core = core; populateSkillCaps(); populatePerformanceTable(); + populatePerformanceEffects(); registerCommands(); } @@ -288,7 +295,37 @@ public class EntertainmentService implements INetworkDispatch { e.printStackTrace(); } } + + private void populatePerformanceEffects() { + try { + DatatableVisitor effects = ClientFileManager.loadFile("datatables/performance/perform_effect.iff", DatatableVisitor.class); + for (int r = 0; r < effects.getRowCount(); r++) { + String effectName = ((String) effects.getObject(r, 0)); + String performanceType = ((String) effects.getObject(r, 1)); + int requiredSkillModValue = ((int) effects.getObject(r, 2)); + Boolean requiredPerforming = ((Boolean) effects.getObject(r, 3)); + int targetType = ((int) effects.getObject(r, 4)); + float effectDuration = ((float) effects.getObject(r, 5)); + int effectActionCost = ((int) effects.getObject(r, 6)); + + PerformanceEffect item = new PerformanceEffect(); + item.setEffectActionCost(effectActionCost); + item.setEffectDuration(effectDuration); + item.setName(effectName); + item.setPerformanceType(performanceType); + item.setRequiredPerforming(requiredPerforming); + item.setRequiredSkillModValue(requiredSkillModValue); + item.setTargetType(targetType); + + performanceEffects.put(effectName.toLowerCase(), item); + + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + private void registerCommands() { core.commandService.registerCommand("bandflourish"); core.commandService.registerCommand("flourish"); @@ -298,6 +335,23 @@ public class EntertainmentService implements INetworkDispatch { core.commandService.registerCommand("stopdance"); core.commandService.registerCommand("watch"); core.commandService.registerCommand("stopwatching"); + //core.commandService.registerCommand("holoEmote"); + // TODO: Add /bandsolo, /bandpause, /changeBandMusic, /changeDance, /changeGroupDance, /changeMusic + + // Entertainer Effects + core.commandService.registerCommand("centerStage"); + core.commandService.registerCommand("colorSwirl"); + core.commandService.registerCommand("colorlights"); + core.commandService.registerCommand("floorLights"); // referred to also as Dance Floor + core.commandService.registerCommand("dazzle"); + core.commandService.registerCommand("distract"); + core.commandService.registerCommand("featuredSolo"); + core.commandService.registerCommand("firejet"); + core.commandService.registerCommand("firejet2"); + core.commandService.registerCommand("laserShow"); + core.commandService.registerCommand("smokebomb"); + core.commandService.registerCommand("spotlight"); + core.commandService.registerCommand("ventriloquism"); } public void giveInspirationBuff(SWGObject reciever, Vector buffVector) { @@ -383,6 +437,10 @@ public class EntertainmentService implements INetworkDispatch { return performancesByIndex.get(index); } + public Map getPerformanceEffects() { + return performanceEffects; + } + public void startPerformance(CreatureObject actor, int performanceId, int performanceCounter, String skillName, boolean isDance) { actor.setPerformanceId(performanceId, isDance); actor.setPerformanceCounter(performanceCounter); @@ -480,7 +538,59 @@ public class EntertainmentService implements INetworkDispatch { }, (long) performance.getLoopDuration(), TimeUnit.SECONDS); } + + public boolean performEffect(final CreatureObject performer, String command, String effect, TangibleObject target) { + PerformanceEffect pEffect = performanceEffects.get(command.toLowerCase()); + if(pEffect == null) + return false; + + String performance = (performer.getPerformanceType()) ? "dance" : "music"; + + // TODO: Skill Level check + + if(performer.isPerformingEffect()) { + performer.sendSystemMessage("@performance:effect_wait_self", (byte) 0); + return false; + } + + if (performer.getPosture() != Posture.SkillAnimating) { + performer.sendSystemMessage("@performance:effect_not_performing", (byte) 0); + return false; + } + + if(performance.equals("dance") && !pEffect.isDance() || performance.equals("music") && !pEffect.isMusic()) { + performer.sendSystemMessage("@performance:effect_not_performing_correct", (byte) 0); + return false; + } + + if(performer.getAction() < pEffect.getEffectActionCost()) { + performer.sendSystemMessage("@performance:effect_too_tired", (byte) 0); + return false; + } + + performer.setAction(performer.getAction() - pEffect.getEffectActionCost()); + + performer.setPerformingEffect(true); + + if(target != null) + target.playEffectObject(effect, ""); + + else + performer.playEffectObject(effect, ""); + + scheduler.schedule(new Runnable() { + + @Override + public void run() { + performer.setPerformingEffect(false); + } + + }, (long) pEffect.getEffectDuration(), TimeUnit.SECONDS); + + return true; + } + @Override public void shutdown() { From 3815cda6c1cd2973b2c3f4810c1d70ecfe566d7c Mon Sep 17 00:00:00 2001 From: Waverunner Date: Thu, 20 Mar 2014 18:14:40 -0400 Subject: [PATCH 050/107] Fixed system message errors from previous commit --- scripts/commands/centerstage.py | 2 +- scripts/commands/colorSwirl.py | 2 +- scripts/commands/colorlights.py | 2 +- scripts/commands/dazzle.py | 2 +- scripts/commands/featuredSolo.py | 2 +- scripts/commands/firejet.py | 2 +- scripts/commands/firejet2.py | 2 +- scripts/commands/floorLights.py | 2 +- scripts/commands/laserShow.py | 2 +- scripts/commands/smokebomb.py | 2 +- scripts/commands/ventriloquism.py | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/scripts/commands/centerstage.py b/scripts/commands/centerstage.py index ab85409c..362738c5 100644 --- a/scripts/commands/centerstage.py +++ b/scripts/commands/centerstage.py @@ -6,7 +6,7 @@ def setup(): def run(core, actor, target, commandString): if actor.getLevel() < 66: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) return if core.entertainmentService.performEffect(actor, 'CenterStage', 'clienteffect/entertainer_center_stage.cef', target) is True: diff --git a/scripts/commands/colorSwirl.py b/scripts/commands/colorSwirl.py index d437a17c..cae47e72 100644 --- a/scripts/commands/colorSwirl.py +++ b/scripts/commands/colorSwirl.py @@ -6,7 +6,7 @@ def setup(): def run(core, actor, target, commandString): if actor.getLevel() < 34: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) return if core.entertainmentService.performEffect(actor, 'ColorSwirl', 'clienteffect/entertainer_color_swirl.cef', target) is True: diff --git a/scripts/commands/colorlights.py b/scripts/commands/colorlights.py index abaa8dd2..62774dd0 100644 --- a/scripts/commands/colorlights.py +++ b/scripts/commands/colorlights.py @@ -9,7 +9,7 @@ def run(core, actor, target, commandString): effect = 'entertainer_color_lights_level_1.cef' if actor.getLevel() < 4: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) return # TODO: Find out levels for other colored light 2 and 3 diff --git a/scripts/commands/dazzle.py b/scripts/commands/dazzle.py index 718c6c5d..4d93db65 100644 --- a/scripts/commands/dazzle.py +++ b/scripts/commands/dazzle.py @@ -9,7 +9,7 @@ def run(core, actor, target, commandString): effect = 'entertainer_dazzle_level_1.cef' if actor.getLevel() < 10: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) return # TODO: Find out levels for other dazzle 2 and 3 diff --git a/scripts/commands/featuredSolo.py b/scripts/commands/featuredSolo.py index 7b7f98cf..e7e943b0 100644 --- a/scripts/commands/featuredSolo.py +++ b/scripts/commands/featuredSolo.py @@ -6,7 +6,7 @@ def setup(): def run(core, actor, target, commandString): if actor.getLevel() < 90: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) return if core.entertainmentService.performEffect(actor, 'FeaturedSolo', 'clienteffect/entertainer_featured_solo.cef', target) is True: diff --git a/scripts/commands/firejet.py b/scripts/commands/firejet.py index 42179337..3e67676f 100644 --- a/scripts/commands/firejet.py +++ b/scripts/commands/firejet.py @@ -9,7 +9,7 @@ def run(core, actor, target, commandString): effect = 'entertainer_fire_jets_level_1.cef' if actor.getLevel() < 26: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) return # TODO: Find out levels for other firejets 2 and 3 diff --git a/scripts/commands/firejet2.py b/scripts/commands/firejet2.py index 820d1db7..f51758fb 100644 --- a/scripts/commands/firejet2.py +++ b/scripts/commands/firejet2.py @@ -6,7 +6,7 @@ def setup(): def run(core, actor, target, commandString): if actor.getLevel() < 76: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) return if core.entertainmentService.performEffect(actor, 'FireJetsB', 'clienteffect/entertainer_fire_jets2.cef', target) is True: diff --git a/scripts/commands/floorLights.py b/scripts/commands/floorLights.py index 945d273e..d69f30e8 100644 --- a/scripts/commands/floorLights.py +++ b/scripts/commands/floorLights.py @@ -6,7 +6,7 @@ def setup(): def run(core, actor, target, commandString): if actor.getLevel() < 82: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) return if core.entertainmentService.performEffect(actor, 'DanceFloor', 'clienteffect/entertainer_dance_floor.cef', target) is True: diff --git a/scripts/commands/laserShow.py b/scripts/commands/laserShow.py index 8ed7d21d..8883928d 100644 --- a/scripts/commands/laserShow.py +++ b/scripts/commands/laserShow.py @@ -6,7 +6,7 @@ def setup(): def run(core, actor, target, commandString): if actor.getLevel() < 42: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) return if core.entertainmentService.performEffect(actor, 'LaserShow', 'clienteffect/entertainer_laser_show.cef', target) is True: diff --git a/scripts/commands/smokebomb.py b/scripts/commands/smokebomb.py index 01b2bf52..1bc0b2b9 100644 --- a/scripts/commands/smokebomb.py +++ b/scripts/commands/smokebomb.py @@ -9,7 +9,7 @@ def run(core, actor, target, commandString): effect = 'entertainer_smoke_bomb_level_1.cef' if actor.getLevel() < 50: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) return # TODO: Find out levels for other smoke bomb 2 and 3 diff --git a/scripts/commands/ventriloquism.py b/scripts/commands/ventriloquism.py index 198516f4..59d5f396 100644 --- a/scripts/commands/ventriloquism.py +++ b/scripts/commands/ventriloquism.py @@ -9,7 +9,7 @@ def run(core, actor, target, commandString): effect = 'entertainer_ventriloquism_level_1.cef' if actor.getLevel() < 58: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) return # TODO: Find out levels for other ventriloquism 2 and 3 From 38f8145fbd8d49b0322e935d3b300f980867c5eb Mon Sep 17 00:00:00 2001 From: Waverunner Date: Thu, 20 Mar 2014 18:39:48 -0400 Subject: [PATCH 051/107] mis-spelled laser --- scripts/commands/laserShow.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/commands/laserShow.py b/scripts/commands/laserShow.py index 8883928d..df9af800 100644 --- a/scripts/commands/laserShow.py +++ b/scripts/commands/laserShow.py @@ -10,5 +10,5 @@ def run(core, actor, target, commandString): return if core.entertainmentService.performEffect(actor, 'LaserShow', 'clienteffect/entertainer_laser_show.cef', target) is True: - actor.sendSystemMessage('@performance:effect_perform_lase_show', 0) - return \ No newline at end of file + actor.sendSystemMessage('@performance:effect_perform_laser_show', 0) + return From 867ea8972a488c47e678a32c0be001824081fc8f Mon Sep 17 00:00:00 2001 From: Treeku Date: Fri, 21 Mar 2014 16:34:33 +0000 Subject: [PATCH 052/107] Instance lockouts cleared at 6AM GMT --- src/services/InstanceService.java | 38 ++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/src/services/InstanceService.java b/src/services/InstanceService.java index 171e77a7..199b9ac4 100644 --- a/src/services/InstanceService.java +++ b/src/services/InstanceService.java @@ -22,6 +22,8 @@ package services; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -203,6 +205,40 @@ public class InstanceService implements INetworkDispatch { public InstanceService(NGECore core) { this.core = core; + + Calendar c = Calendar.getInstance(); + Date now = new Date(); + + c.setTime(now); + + if (c.get(Calendar.HOUR_OF_DAY) >= 6) { + c.add(Calendar.DAY_OF_MONTH, 1); + } + + c.set(Calendar.HOUR_OF_DAY, 6); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + c.set(Calendar.MILLISECOND, 0); + + long initialDelay = (c.getTimeInMillis() - now.getTime()); + + final Map> reference = instanceMap; + + scheduler.scheduleAtFixedRate(new Runnable() { + + private Map> instanceMap = reference; + + public void run() { + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if ((instance.isClosed() || !instance.isOpen())) { + instanceList.remove(instance); + } + } + } + } + + }, initialDelay, 86400000, TimeUnit.MILLISECONDS); } /* @@ -245,7 +281,7 @@ public class InstanceService implements INetworkDispatch { instance.setTask(scheduler.scheduleAtFixedRate(new Runnable() { - private final Instance instance = reference; + private Instance instance = reference; private boolean sentCloseWarning = false; public void run() { From 54cc7c3bcc79ea32ff1a9345fb7ca8aa9bc9111f Mon Sep 17 00:00:00 2001 From: Treeku Date: Fri, 21 Mar 2014 16:41:00 +0000 Subject: [PATCH 053/107] radialFilename comes from script func if possible This means any changes to the radial filename are retroactive. It'll check server templates for getRadialFilename(), if not found, it'll check the radial_filename attachment variable. --- src/services/sui/SUIService.java | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/services/sui/SUIService.java b/src/services/sui/SUIService.java index 95498f9b..e898c576 100644 --- a/src/services/sui/SUIService.java +++ b/src/services/sui/SUIService.java @@ -44,6 +44,7 @@ import protocol.swg.SUIUpdatePageMessage; import protocol.swg.objectControllerObjects.ObjectMenuRequest; import protocol.swg.objectControllerObjects.ObjectMenuResponse; +import resources.common.FileUtilities; import resources.common.ObjControllerOpcodes; import resources.common.Opcodes; import resources.common.RadialOptions; @@ -169,12 +170,26 @@ public class SUIService implements INetworkDispatch { } public String getRadialFilename(SWGObject object) { + String serverTemplate = ("scripts/" + object.getTemplate().split("shared_" , 2)[0].replace("shared_", "") + object.getTemplate().split("shared_" , 2)[1] + ".py"); + String radialFilename = "default"; - if(object.getAttachment("radial_filename") != null) - return (String) object.getAttachment("radial_filename"); - else - return "default"; + if (FileUtilities.doesFileExist(serverTemplate)) { + PyObject method = core.scriptService.getMethod("scripts/" + object.getTemplate().split("shared_" , 2)[0].replace("shared_", ""), object.getTemplate().split("shared_" , 2)[1].replace(".iff", ""), "getRadialFilename"); + + if (method != null && method.isCallable()) { + radialFilename = method.__call__().asString(); + + if (radialFilename == null || radialFilename.equals("")) { + radialFilename = "default"; + } + } + } + if (radialFilename.equals("default") && object.getAttachment("radial_filename") != null) { + radialFilename = (String) object.getAttachment("radial_filename"); + } + + return radialFilename; } public void sendRadial(SWGObject owner, SWGObject target, Vector radialOptions, byte radialCount) { From ecdbfd5f80d6bed33fa40bad252c47f45a32ec4c Mon Sep 17 00:00:00 2001 From: Treeku Date: Fri, 21 Mar 2014 23:44:39 +0000 Subject: [PATCH 054/107] Fixed creature SWGLists --- .../objects/creature/CreatureMessageBuilder.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index 9ffad44b..f3128acb 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -1056,10 +1056,20 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { return buffer; } - @Override public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - + switch (viewType) { + case 3: + case 6: + { + object.notifyObservers(buffer, true); + } + default: + { + if (object.getClient() != null && object.getClient().getSession() != null) { + object.getClient().getSession().write(buffer); + } + } + } } public IoBuffer buildAddEquipmentDelta(TangibleObject item) { From d1fff9e069d71c4c444b6426b52ecbe38a6b52e7 Mon Sep 17 00:00:00 2001 From: Treeku Date: Sat, 22 Mar 2014 02:07:53 +0000 Subject: [PATCH 055/107] Fixed buff duration check, fixed group buffs - The duration needed to be set on the buff object "before "the buff is actually added. Because of this, I made the distinction between setup(0 (setting up the buff object) and add() (adding the buff stats to the player). - Group buffs would add the buff based on each individual player's skillmods instead of the buffer's. Due to this, I made a "buffer" parameter for doAddBuff(). If there is a buffer, regardless of it's a buffer within our group, we can specify them, otherwise provide null. --- scripts/buffs/armor_break.py | 6 ++++-- scripts/buffs/bh_armor_sprint_1.py | 7 +++++-- scripts/buffs/bh_cover_1.py | 5 ++++- scripts/buffs/bh_prescience.py | 5 ++++- scripts/buffs/bh_return_fire_1.py | 5 ++++- scripts/buffs/bleeding.py | 5 ++++- scripts/buffs/buildabuff_inspiration.py | 5 ++++- scripts/buffs/co_base_of_operations.py | 5 ++++- scripts/buffs/co_first_aid_training.py | 5 ++++- scripts/buffs/co_position_secured.py | 5 ++++- scripts/buffs/co_stand_fast.py | 6 ++++-- scripts/buffs/en_action_regen.py | 5 ++++- scripts/buffs/en_debuff_thrill.py | 5 ++++- scripts/buffs/en_debuff_thrill_1.py | 5 ++++- scripts/buffs/en_debuff_thrill_2.py | 5 ++++- scripts/buffs/en_spiral_kick_snare.py | 5 ++++- scripts/buffs/en_sprint.py | 5 ++++- scripts/buffs/en_sweeping_pirouette_root.py | 5 ++++- scripts/buffs/en_unhealthy_fixation_debuff.py | 5 ++++- scripts/buffs/en_void_dance_buff.py | 5 ++++- scripts/buffs/en_void_dance_buff_1.py | 5 ++++- scripts/buffs/en_void_dance_buff_2.py | 5 ++++- scripts/buffs/en_void_dance_buff_3.py | 5 ++++- scripts/buffs/flawless_bead_1.py | 5 ++++- scripts/buffs/flawless_bead_2.py | 5 ++++- scripts/buffs/flawless_bead_3.py | 5 ++++- scripts/buffs/fs_ae_dm_cc_0.py | 5 ++++- scripts/buffs/fs_ae_dm_cc_1.py | 5 ++++- scripts/buffs/fs_ae_dm_cc_2.py | 5 ++++- scripts/buffs/fs_ae_dm_cc_3.py | 5 ++++- scripts/buffs/fs_ae_dm_cc_4.py | 5 ++++- scripts/buffs/fs_ae_dm_cc_5.py | 5 ++++- scripts/buffs/fs_ae_dm_cc_6.py | 5 ++++- scripts/buffs/fs_buff_ca_1.py | 5 ++++- scripts/buffs/fs_buff_def_1_1.py | 5 ++++- scripts/buffs/fs_dm_cc_crit_1.py | 5 ++++- scripts/buffs/fs_dm_cc_crit_2.py | 5 ++++- scripts/buffs/fs_dm_cc_crit_3.py | 5 ++++- scripts/buffs/fs_dm_cc_crit_4.py | 5 ++++- scripts/buffs/fs_dm_cc_crit_5.py | 5 ++++- scripts/buffs/fs_force_run.py | 7 +++++-- scripts/buffs/fs_force_throw.py | 5 ++++- scripts/buffs/fs_saber_reflect.py | 5 ++++- scripts/buffs/invis_fs_buff_invis_1.py | 5 ++++- scripts/buffs/me_buff_action_1.py | 5 ++++- scripts/buffs/me_buff_action_2.py | 5 ++++- scripts/buffs/me_buff_action_3.py | 5 ++++- scripts/buffs/me_buff_agility_1.py | 5 ++++- scripts/buffs/me_buff_agility_2.py | 5 ++++- scripts/buffs/me_buff_agility_3.py | 5 ++++- scripts/buffs/me_buff_health.py | 5 ++++- scripts/buffs/me_buff_health_0.py | 5 ++++- scripts/buffs/me_buff_health_2.py | 5 ++++- scripts/buffs/me_buff_melee_gb_1.py | 5 ++++- scripts/buffs/me_buff_precision_1.py | 5 ++++- scripts/buffs/me_buff_precision_2.py | 5 ++++- scripts/buffs/me_buff_precision_3.py | 5 ++++- scripts/buffs/me_buff_ranged_gb_1.py | 5 ++++- scripts/buffs/me_buff_strength_1.py | 5 ++++- scripts/buffs/me_buff_strength_2.py | 5 ++++- scripts/buffs/me_buff_strength_3.py | 5 ++++- scripts/buffs/me_burst_1.py | 5 ++++- scripts/buffs/me_cranial_smash_1.py | 5 ++++- scripts/buffs/me_cure_affliction_1.py | 5 ++++- scripts/buffs/me_doom.py | 5 ++++- scripts/buffs/me_electrolyte_drain_1.py | 5 ++++- scripts/buffs/me_evasion_1.py | 5 ++++- scripts/buffs/me_rheumatic_calamity_1.py | 5 ++++- scripts/buffs/me_serotonin_boost_1.py | 5 ++++- scripts/buffs/me_serotonin_purge_1.py | 5 ++++- scripts/buffs/me_stasis_1.py | 5 ++++- scripts/buffs/me_stasis_self_1.py | 5 ++++- scripts/buffs/me_thyroid_rupture_1.py | 5 ++++- scripts/buffs/of_adv_paint_debuff_1.py | 5 ++++- scripts/buffs/of_adv_paint_debuff_2.py | 5 ++++- scripts/buffs/of_adv_paint_debuff_3.py | 5 ++++- scripts/buffs/of_adv_paint_debuff_4.py | 5 ++++- scripts/buffs/of_adv_paint_debuff_5.py | 5 ++++- scripts/buffs/of_adv_paint_debuff_6.py | 5 ++++- scripts/buffs/of_adv_paint_debuff_7.py | 5 ++++- scripts/buffs/of_adv_paint_debuff_8.py | 5 ++++- scripts/buffs/of_adv_paint_expose_1.py | 5 ++++- scripts/buffs/of_adv_paint_expose_2.py | 5 ++++- scripts/buffs/of_adv_paint_expose_3.py | 5 ++++- scripts/buffs/of_adv_paint_expose_4.py | 5 ++++- scripts/buffs/of_adv_paint_expose_5.py | 5 ++++- scripts/buffs/of_adv_paint_expose_6.py | 5 ++++- scripts/buffs/of_adv_paint_expose_7.py | 5 ++++- scripts/buffs/of_adv_paint_expose_8.py | 5 ++++- scripts/buffs/of_ae_dm_cc_1.py | 5 ++++- scripts/buffs/of_ae_dm_cc_2.py | 5 ++++- scripts/buffs/of_ae_dm_cc_3.py | 5 ++++- scripts/buffs/of_buff_def_1.py | 5 ++++- scripts/buffs/of_buff_def_2.py | 5 ++++- scripts/buffs/of_buff_def_3.py | 5 ++++- scripts/buffs/of_buff_def_4.py | 5 ++++- scripts/buffs/of_buff_def_5.py | 5 ++++- scripts/buffs/of_buff_def_6.py | 5 ++++- scripts/buffs/of_buff_def_7.py | 5 ++++- scripts/buffs/of_buff_def_8.py | 5 ++++- scripts/buffs/of_buff_def_9.py | 5 ++++- scripts/buffs/of_cc_melee_1.py | 5 ++++- scripts/buffs/of_cc_melee_2.py | 5 ++++- scripts/buffs/of_cc_melee_3.py | 5 ++++- scripts/buffs/of_cc_melee_4.py | 5 ++++- scripts/buffs/of_cc_melee_5.py | 5 ++++- scripts/buffs/of_cc_melee_6.py | 5 ++++- scripts/buffs/of_cc_melee_7.py | 5 ++++- scripts/buffs/of_charge_1.py | 5 ++++- scripts/buffs/of_deadeye_debuff.py | 5 ++++- scripts/buffs/of_deb_def_1.py | 5 ++++- scripts/buffs/of_deb_def_2.py | 5 ++++- scripts/buffs/of_deb_def_3.py | 5 ++++- scripts/buffs/of_deb_def_4.py | 5 ++++- scripts/buffs/of_deb_def_5.py | 5 ++++- scripts/buffs/of_deb_def_6.py | 5 ++++- scripts/buffs/of_deb_def_7.py | 5 ++++- scripts/buffs/of_deb_def_8.py | 5 ++++- scripts/buffs/of_decap_bleed_1.py | 5 ++++- scripts/buffs/of_decap_bleed_2.py | 5 ++++- scripts/buffs/of_decap_bleed_3.py | 5 ++++- scripts/buffs/of_decap_bleed_4.py | 5 ++++- scripts/buffs/of_decap_bleed_5.py | 5 ++++- scripts/buffs/of_decap_bleed_6.py | 5 ++++- scripts/buffs/of_dot_bomb_1.py | 5 ++++- scripts/buffs/of_drillmaster_1.py | 5 ++++- scripts/buffs/of_emergency_shield.py | 5 ++++- scripts/buffs/of_firepower.py | 5 ++++- scripts/buffs/of_focus_fire_1.py | 5 ++++- scripts/buffs/of_focus_fire_2.py | 5 ++++- scripts/buffs/of_focus_fire_3.py | 5 ++++- scripts/buffs/of_focus_fire_4.py | 5 ++++- scripts/buffs/of_focus_fire_5.py | 5 ++++- scripts/buffs/of_focus_fire_6.py | 5 ++++- scripts/buffs/of_inspiration_1.py | 5 ++++- scripts/buffs/of_inspiration_2.py | 5 ++++- scripts/buffs/of_inspiration_3.py | 5 ++++- scripts/buffs/of_inspiration_4.py | 5 ++++- scripts/buffs/of_inspiration_5.py | 5 ++++- scripts/buffs/of_inspiration_6.py | 5 ++++- scripts/buffs/of_last_words.py | 5 ++++- scripts/buffs/of_pistol_bleed.py | 5 ++++- scripts/buffs/of_purge_1.py | 5 ++++- scripts/buffs/of_scatter_1.py | 5 ++++- scripts/buffs/of_stimulator_1.py | 5 ++++- scripts/buffs/of_vortex_bleed_1.py | 5 ++++- scripts/buffs/of_vortex_bleed_2.py | 5 ++++- scripts/buffs/of_vortex_bleed_3.py | 5 ++++- scripts/buffs/of_vortex_bleed_4.py | 5 ++++- scripts/buffs/of_vortex_bleed_5.py | 5 ++++- scripts/buffs/of_vortex_root.py | 5 ++++- scripts/buffs/poisoned.py | 5 ++++- scripts/buffs/proc_old_dark_jedi_gift.py | 5 ++++- scripts/buffs/proc_old_light_jedi_gift.py | 5 ++++- scripts/buffs/saberblock.py | 5 ++++- scripts/buffs/set_bonus_bh_dps_1.py | 5 ++++- scripts/buffs/set_bonus_bh_dps_2.py | 5 ++++- scripts/buffs/set_bonus_bh_dps_3.py | 5 ++++- scripts/buffs/set_bonus_bh_utility_a_1.py | 5 ++++- scripts/buffs/set_bonus_bh_utility_a_2.py | 5 ++++- scripts/buffs/set_bonus_bh_utility_a_3.py | 5 ++++- scripts/buffs/set_bonus_bh_utility_b_1.py | 5 ++++- scripts/buffs/set_bonus_bh_utility_b_2.py | 5 ++++- scripts/buffs/set_bonus_bh_utility_b_3.py | 5 ++++- scripts/buffs/set_bonus_hero_1.py | 5 ++++- scripts/buffs/set_bonus_hero_2.py | 5 ++++- scripts/buffs/set_bonus_hero_3.py | 5 ++++- scripts/buffs/sm_ae_dm_cc_1.py | 5 ++++- scripts/buffs/sm_ae_dm_cc_2.py | 5 ++++- scripts/buffs/sm_ae_dm_cc_3.py | 5 ++++- scripts/buffs/sm_ae_dm_cc_4.py | 5 ++++- scripts/buffs/sm_ae_dm_cc_5.py | 5 ++++- scripts/buffs/sm_ae_dm_cc_6.py | 5 ++++- scripts/buffs/sm_pistol_whip_1.py | 5 ++++- src/services/BuffService.java | 21 ++++++++++++------- src/services/GroupService.java | 3 +-- 176 files changed, 712 insertions(+), 188 deletions(-) diff --git a/scripts/buffs/armor_break.py b/scripts/buffs/armor_break.py index 288a2db0..f0a2f58e 100644 --- a/scripts/buffs/armor_break.py +++ b/scripts/buffs/armor_break.py @@ -1,12 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.addSkillMod('expertise_innate_reduction_all_player', 6 * buff.getStacks()) actor.addSkillMod('expertise_innate_reduction_all_mob', 600 * buff.getStacks()) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.deductSkillMod('expertise_innate_reduction_all_mob', 600 * buff.getStacks()) actor.deductSkillMod('expertise_innate_reduction_all_player', 6 * buff.getStacks()) return - diff --git a/scripts/buffs/bh_armor_sprint_1.py b/scripts/buffs/bh_armor_sprint_1.py index e9637ebd..5f39a64d 100644 --- a/scripts/buffs/bh_armor_sprint_1.py +++ b/scripts/buffs/bh_armor_sprint_1.py @@ -1,12 +1,15 @@ import sys -def setup(core, actor, buff): +def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 6) core.skillModService.addSkillMod(actor, 'movement_resist_snare', 100) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 6) core.skillModService.deductSkillMod(actor, 'movement_resist_snare', 100) diff --git a/scripts/buffs/bh_cover_1.py b/scripts/buffs/bh_cover_1.py index b3ca84ce..b68de518 100644 --- a/scripts/buffs/bh_cover_1.py +++ b/scripts/buffs/bh_cover_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_damage_all', 10) core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_ranged', 40) core.skillModService.addSkillMod(actor, 'invis', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_damage_all', 10) core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_ranged', 40) core.skillModService.deductSkillMod(actor, 'invis', 1) diff --git a/scripts/buffs/bh_prescience.py b/scripts/buffs/bh_prescience.py index e09c02e5..c60417a0 100644 --- a/scripts/buffs/bh_prescience.py +++ b/scripts/buffs/bh_prescience.py @@ -2,7 +2,10 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/bh_return_fire_1.py b/scripts/buffs/bh_return_fire_1.py index 7a0f25b4..95612d87 100644 --- a/scripts/buffs/bh_return_fire_1.py +++ b/scripts/buffs/bh_return_fire_1.py @@ -2,11 +2,14 @@ import sys def setup(core, actor, buff): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_bh_return_fire'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_bh_return_fire_1', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_bh_return_fire_1', 1) return \ No newline at end of file diff --git a/scripts/buffs/bleeding.py b/scripts/buffs/bleeding.py index e09c02e5..c60417a0 100644 --- a/scripts/buffs/bleeding.py +++ b/scripts/buffs/bleeding.py @@ -2,7 +2,10 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/buildabuff_inspiration.py b/scripts/buffs/buildabuff_inspiration.py index c6bf7407..2bba8272 100644 --- a/scripts/buffs/buildabuff_inspiration.py +++ b/scripts/buffs/buildabuff_inspiration.py @@ -2,6 +2,9 @@ from resources.common import BuffBuilder import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): buffWorkshop = actor.getAttachment('buffWorkshop') @@ -15,7 +18,7 @@ def setup(core, actor, buff): return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): for BuffItem in actor.getAttachment('buffWorkshop'): core.skillModService.deductSkillMod(actor, BuffItem.getSkillName(), BuffItem.getAffectAmount()) diff --git a/scripts/buffs/co_base_of_operations.py b/scripts/buffs/co_base_of_operations.py index 894c389c..8c8eb346 100644 --- a/scripts/buffs/co_base_of_operations.py +++ b/scripts/buffs/co_base_of_operations.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_innate_protection_all', 1000) core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_innate_protection_all', 1000) core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 5) return diff --git a/scripts/buffs/co_first_aid_training.py b/scripts/buffs/co_first_aid_training.py index b0ffe0f9..8679678c 100644 --- a/scripts/buffs/co_first_aid_training.py +++ b/scripts/buffs/co_first_aid_training.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_healing_all', 20) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_healing_all', 20) return \ No newline at end of file diff --git a/scripts/buffs/co_position_secured.py b/scripts/buffs/co_position_secured.py index b0b2781c..0885ccd9 100644 --- a/scripts/buffs/co_position_secured.py +++ b/scripts/buffs/co_position_secured.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.setSpeedMultiplierMod(0) @@ -22,7 +25,7 @@ def setup(core, actor, buff): return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierMod(1) diff --git a/scripts/buffs/co_stand_fast.py b/scripts/buffs/co_stand_fast.py index 17563ff9..8f8be535 100644 --- a/scripts/buffs/co_stand_fast.py +++ b/scripts/buffs/co_stand_fast.py @@ -3,7 +3,9 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_co_stand_fast'): buff.setDuration(buff.getDuration() + actor.getSkillMod('expertise_buff_duration_line_co_stand_fast').getBase()) - + return + +def add(core, actor, buff): if actor.getSkillMod('expertise_damage_decrease_percentage'): core.skillModService.addSkillMod(actor, 'damage_decrease_percentage', (60 + actor.getSkillMod('expertise_damage_decrease_percentage').getBase()) / 2) else: @@ -11,7 +13,7 @@ def setup(core, actor, buff): return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): if actor.getSkillMod('expertise_damage_decrease_percentage'): core.skillModService.deductSkillMod(actor, 'damage_decrease_percentage', (60 + actor.getSkillMod('expertise_damage_decrease_percentage').getBase()) / 2) else: diff --git a/scripts/buffs/en_action_regen.py b/scripts/buffs/en_action_regen.py index 6193a43d..850186d0 100644 --- a/scripts/buffs/en_action_regen.py +++ b/scripts/buffs/en_action_regen.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_weapon_melee', 60) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_weapon_melee', 60) return \ No newline at end of file diff --git a/scripts/buffs/en_debuff_thrill.py b/scripts/buffs/en_debuff_thrill.py index 69ced2d5..9a25438b 100644 --- a/scripts/buffs/en_debuff_thrill.py +++ b/scripts/buffs/en_debuff_thrill.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 2) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 2) return \ No newline at end of file diff --git a/scripts/buffs/en_debuff_thrill_1.py b/scripts/buffs/en_debuff_thrill_1.py index 0c399bb3..cbcb2ac4 100644 --- a/scripts/buffs/en_debuff_thrill_1.py +++ b/scripts/buffs/en_debuff_thrill_1.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 4) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 4) return \ No newline at end of file diff --git a/scripts/buffs/en_debuff_thrill_2.py b/scripts/buffs/en_debuff_thrill_2.py index 0f533529..6b887e82 100644 --- a/scripts/buffs/en_debuff_thrill_2.py +++ b/scripts/buffs/en_debuff_thrill_2.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 6) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 6) return \ No newline at end of file diff --git a/scripts/buffs/en_spiral_kick_snare.py b/scripts/buffs/en_spiral_kick_snare.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/en_spiral_kick_snare.py +++ b/scripts/buffs/en_spiral_kick_snare.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/en_sprint.py b/scripts/buffs/en_sprint.py index 842e0c3c..288b25b1 100644 --- a/scripts/buffs/en_sprint.py +++ b/scripts/buffs/en_sprint.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement_resist_snare', 100) core.skillModService.addSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) core.skillModService.deductSkillMod(actor, 'movement_resist_snare', 100) return diff --git a/scripts/buffs/en_sweeping_pirouette_root.py b/scripts/buffs/en_sweeping_pirouette_root.py index 32ba0f8d..42418564 100644 --- a/scripts/buffs/en_sweeping_pirouette_root.py +++ b/scripts/buffs/en_sweeping_pirouette_root.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 10) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 10) return \ No newline at end of file diff --git a/scripts/buffs/en_unhealthy_fixation_debuff.py b/scripts/buffs/en_unhealthy_fixation_debuff.py index 2ae015d2..7dfe77af 100644 --- a/scripts/buffs/en_unhealthy_fixation_debuff.py +++ b/scripts/buffs/en_unhealthy_fixation_debuff.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'en_unhealthy_stun', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'en_unhealthy_stun', 1) return \ No newline at end of file diff --git a/scripts/buffs/en_void_dance_buff.py b/scripts/buffs/en_void_dance_buff.py index c0318a09..3197e246 100644 --- a/scripts/buffs/en_void_dance_buff.py +++ b/scripts/buffs/en_void_dance_buff.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 60) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 60) return \ No newline at end of file diff --git a/scripts/buffs/en_void_dance_buff_1.py b/scripts/buffs/en_void_dance_buff_1.py index 2c8f2ee9..6a37025d 100644 --- a/scripts/buffs/en_void_dance_buff_1.py +++ b/scripts/buffs/en_void_dance_buff_1.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 65) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 65) return \ No newline at end of file diff --git a/scripts/buffs/en_void_dance_buff_2.py b/scripts/buffs/en_void_dance_buff_2.py index a6aa1d1f..bcd31db8 100644 --- a/scripts/buffs/en_void_dance_buff_2.py +++ b/scripts/buffs/en_void_dance_buff_2.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 70) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 70) return \ No newline at end of file diff --git a/scripts/buffs/en_void_dance_buff_3.py b/scripts/buffs/en_void_dance_buff_3.py index c4674163..e2d98d20 100644 --- a/scripts/buffs/en_void_dance_buff_3.py +++ b/scripts/buffs/en_void_dance_buff_3.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 75) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 75) return \ No newline at end of file diff --git a/scripts/buffs/flawless_bead_1.py b/scripts/buffs/flawless_bead_1.py index 84123a88..9d402987 100644 --- a/scripts/buffs/flawless_bead_1.py +++ b/scripts/buffs/flawless_bead_1.py @@ -2,6 +2,9 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/flawless_bead_2.py b/scripts/buffs/flawless_bead_2.py index 84123a88..9d402987 100644 --- a/scripts/buffs/flawless_bead_2.py +++ b/scripts/buffs/flawless_bead_2.py @@ -2,6 +2,9 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/flawless_bead_3.py b/scripts/buffs/flawless_bead_3.py index 84123a88..9d402987 100644 --- a/scripts/buffs/flawless_bead_3.py +++ b/scripts/buffs/flawless_bead_3.py @@ -2,6 +2,9 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_0.py b/scripts/buffs/fs_ae_dm_cc_0.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_0.py +++ b/scripts/buffs/fs_ae_dm_cc_0.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_1.py b/scripts/buffs/fs_ae_dm_cc_1.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_1.py +++ b/scripts/buffs/fs_ae_dm_cc_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_2.py b/scripts/buffs/fs_ae_dm_cc_2.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_2.py +++ b/scripts/buffs/fs_ae_dm_cc_2.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_3.py b/scripts/buffs/fs_ae_dm_cc_3.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_3.py +++ b/scripts/buffs/fs_ae_dm_cc_3.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_4.py b/scripts/buffs/fs_ae_dm_cc_4.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_4.py +++ b/scripts/buffs/fs_ae_dm_cc_4.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_5.py b/scripts/buffs/fs_ae_dm_cc_5.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_5.py +++ b/scripts/buffs/fs_ae_dm_cc_5.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_6.py b/scripts/buffs/fs_ae_dm_cc_6.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_6.py +++ b/scripts/buffs/fs_ae_dm_cc_6.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/fs_buff_ca_1.py b/scripts/buffs/fs_buff_ca_1.py index 5fb1239f..837e11f7 100644 --- a/scripts/buffs/fs_buff_ca_1.py +++ b/scripts/buffs/fs_buff_ca_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.playEffectObject('appearance/pt_sokan_focus.prt', 'fs_buff_ca_1') core.skillModService.addSkillMod(actor, 'expertise_focus', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_focus', 1) return \ No newline at end of file diff --git a/scripts/buffs/fs_buff_def_1_1.py b/scripts/buffs/fs_buff_def_1_1.py index 0d7ad4dd..743dc69b 100644 --- a/scripts/buffs/fs_buff_def_1_1.py +++ b/scripts/buffs/fs_buff_def_1_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.playEffectObject('appearance/pt_force_avoid_incapacitation.prt', 'fs_buff_def_1_1') core.skillModService.addSkillMod(actor, 'expertise_stance', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_stance', 1) return \ No newline at end of file diff --git a/scripts/buffs/fs_dm_cc_crit_1.py b/scripts/buffs/fs_dm_cc_crit_1.py index 493481d7..df2109d8 100644 --- a/scripts/buffs/fs_dm_cc_crit_1.py +++ b/scripts/buffs/fs_dm_cc_crit_1.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.setSpeedMultiplierBase(0.5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierBase(1) return \ No newline at end of file diff --git a/scripts/buffs/fs_dm_cc_crit_2.py b/scripts/buffs/fs_dm_cc_crit_2.py index 493481d7..df2109d8 100644 --- a/scripts/buffs/fs_dm_cc_crit_2.py +++ b/scripts/buffs/fs_dm_cc_crit_2.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.setSpeedMultiplierBase(0.5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierBase(1) return \ No newline at end of file diff --git a/scripts/buffs/fs_dm_cc_crit_3.py b/scripts/buffs/fs_dm_cc_crit_3.py index 493481d7..df2109d8 100644 --- a/scripts/buffs/fs_dm_cc_crit_3.py +++ b/scripts/buffs/fs_dm_cc_crit_3.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.setSpeedMultiplierBase(0.5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierBase(1) return \ No newline at end of file diff --git a/scripts/buffs/fs_dm_cc_crit_4.py b/scripts/buffs/fs_dm_cc_crit_4.py index 493481d7..df2109d8 100644 --- a/scripts/buffs/fs_dm_cc_crit_4.py +++ b/scripts/buffs/fs_dm_cc_crit_4.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.setSpeedMultiplierBase(0.5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierBase(1) return \ No newline at end of file diff --git a/scripts/buffs/fs_dm_cc_crit_5.py b/scripts/buffs/fs_dm_cc_crit_5.py index 493481d7..df2109d8 100644 --- a/scripts/buffs/fs_dm_cc_crit_5.py +++ b/scripts/buffs/fs_dm_cc_crit_5.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.setSpeedMultiplierBase(0.5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierBase(1) return \ No newline at end of file diff --git a/scripts/buffs/fs_force_run.py b/scripts/buffs/fs_force_run.py index f691d76f..714e8198 100644 --- a/scripts/buffs/fs_force_run.py +++ b/scripts/buffs/fs_force_run.py @@ -1,7 +1,10 @@ import sys -def setup(core, actor, buff): +def setup(core, actor, buff): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_fs_force_run'))) + return + +def add(core, actor, buff): actor.playEffectObject('clienteffect/pl_force_run.cef', 'fs_force_run') actor.playEffectObject('appearance/pt_force_speed.prt', 'fs_force_run') actor.setSpeedMultiplierBase(actor.getSpeedMultiplierBase() + 2.5 + (2.5 * (actor.getSkillModBase('expertise_movement_buff_fs_force_run')) / 100)) @@ -14,7 +17,7 @@ def setup(core, actor, buff): return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.stopEffectObject('fs_force_run') actor.setSpeedMultiplierBase(actor.getSpeedMultiplierBase() - 2.5 - (2.5 * (actor.getSkillModBase('expertise_movement_buff_fs_force_run')) / 100)) core.skillModService.deductSkillMod(actor, 'slope_move', 5) diff --git a/scripts/buffs/fs_force_throw.py b/scripts/buffs/fs_force_throw.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/fs_force_throw.py +++ b/scripts/buffs/fs_force_throw.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/fs_saber_reflect.py b/scripts/buffs/fs_saber_reflect.py index cba5694e..815b8b7d 100644 --- a/scripts/buffs/fs_saber_reflect.py +++ b/scripts/buffs/fs_saber_reflect.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_saber_block', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_saber_block', 1) return \ No newline at end of file diff --git a/scripts/buffs/invis_fs_buff_invis_1.py b/scripts/buffs/invis_fs_buff_invis_1.py index e09c02e5..c60417a0 100644 --- a/scripts/buffs/invis_fs_buff_invis_1.py +++ b/scripts/buffs/invis_fs_buff_invis_1.py @@ -2,7 +2,10 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/me_buff_action_1.py b/scripts/buffs/me_buff_action_1.py index d5cff5fb..7cd3cf3c 100644 --- a/scripts/buffs/me_buff_action_1.py +++ b/scripts/buffs/me_buff_action_1.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stamina_modified', 35) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stamina_modified', 35) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_action_2.py b/scripts/buffs/me_buff_action_2.py index 9848727e..0d1a1718 100644 --- a/scripts/buffs/me_buff_action_2.py +++ b/scripts/buffs/me_buff_action_2.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stamina_modified', 80) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stamina_modified', 80) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_action_3.py b/scripts/buffs/me_buff_action_3.py index f59277c9..625808f2 100644 --- a/scripts/buffs/me_buff_action_3.py +++ b/scripts/buffs/me_buff_action_3.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stamina_modified', 250) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stamina_modified', 250) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_agility_1.py b/scripts/buffs/me_buff_agility_1.py index 10d3a0a6..cc0368a7 100644 --- a/scripts/buffs/me_buff_agility_1.py +++ b/scripts/buffs/me_buff_agility_1.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'agility_modified', 15) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'agility_modified', 15) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_agility_2.py b/scripts/buffs/me_buff_agility_2.py index 8130ad0f..47ae13c6 100644 --- a/scripts/buffs/me_buff_agility_2.py +++ b/scripts/buffs/me_buff_agility_2.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'agility_modified', 45) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'agility_modified', 45) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_agility_3.py b/scripts/buffs/me_buff_agility_3.py index a9727dc2..83686069 100644 --- a/scripts/buffs/me_buff_agility_3.py +++ b/scripts/buffs/me_buff_agility_3.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'agility_modified', 80) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'agility_modified', 80) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_health.py b/scripts/buffs/me_buff_health.py index 70dd9938..f5396585 100644 --- a/scripts/buffs/me_buff_health.py +++ b/scripts/buffs/me_buff_health.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'constitution_modified', 80) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'constitution_modified', 80) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_health_0.py b/scripts/buffs/me_buff_health_0.py index b20b680b..513dabb4 100644 --- a/scripts/buffs/me_buff_health_0.py +++ b/scripts/buffs/me_buff_health_0.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'constitution_modified', 35) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'constitution_modified', 35) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_health_2.py b/scripts/buffs/me_buff_health_2.py index fc52c4a3..4c0a9502 100644 --- a/scripts/buffs/me_buff_health_2.py +++ b/scripts/buffs/me_buff_health_2.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'constitution_modified', 250) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'constitution_modified', 250) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_melee_gb_1.py b/scripts/buffs/me_buff_melee_gb_1.py index f052d7b9..9819dcb3 100644 --- a/scripts/buffs/me_buff_melee_gb_1.py +++ b/scripts/buffs/me_buff_melee_gb_1.py @@ -3,11 +3,14 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'display_only_block', 1000) core.skillModService.addSkillMod(actor, 'combat_block_value', 200) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'display_only_block', 1000) core.skillModService.deductSkillMod(actor, 'combat_block_value', 200) return diff --git a/scripts/buffs/me_buff_precision_1.py b/scripts/buffs/me_buff_precision_1.py index 3006e18e..6b24b151 100644 --- a/scripts/buffs/me_buff_precision_1.py +++ b/scripts/buffs/me_buff_precision_1.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'precision_modified', 15) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'precision_modified', 15) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_precision_2.py b/scripts/buffs/me_buff_precision_2.py index fbf6d978..b3c2aab5 100644 --- a/scripts/buffs/me_buff_precision_2.py +++ b/scripts/buffs/me_buff_precision_2.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'precision_modified', 45) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'precision_modified', 45) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_precision_3.py b/scripts/buffs/me_buff_precision_3.py index f6490d10..40899ffb 100644 --- a/scripts/buffs/me_buff_precision_3.py +++ b/scripts/buffs/me_buff_precision_3.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'precision_modified', 80) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'precision_modified', 80) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_ranged_gb_1.py b/scripts/buffs/me_buff_ranged_gb_1.py index d2476abe..ce5770a8 100644 --- a/scripts/buffs/me_buff_ranged_gb_1.py +++ b/scripts/buffs/me_buff_ranged_gb_1.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'display_only_dodge', 500) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'display_only_dodge', 500) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_strength_1.py b/scripts/buffs/me_buff_strength_1.py index 462d84a5..fa50d073 100644 --- a/scripts/buffs/me_buff_strength_1.py +++ b/scripts/buffs/me_buff_strength_1.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'strength_modified', 15) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'strength_modified', 15) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_strength_2.py b/scripts/buffs/me_buff_strength_2.py index 85f6d038..5f8f02d2 100644 --- a/scripts/buffs/me_buff_strength_2.py +++ b/scripts/buffs/me_buff_strength_2.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'strength_modified', 45) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'strength_modified', 45) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_strength_3.py b/scripts/buffs/me_buff_strength_3.py index 6fa59e33..fcba94f9 100644 --- a/scripts/buffs/me_buff_strength_3.py +++ b/scripts/buffs/me_buff_strength_3.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'strength_modified', 80) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'strength_modified', 80) return \ No newline at end of file diff --git a/scripts/buffs/me_burst_1.py b/scripts/buffs/me_burst_1.py index 15d5cd85..82f6065b 100644 --- a/scripts/buffs/me_burst_1.py +++ b/scripts/buffs/me_burst_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 3) core.skillModService.addSkillMod(actor, 'strikethrough_vulnerable', 5) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 3) core.skillModService.deductSkillMod(actor, 'strikethrough_vulnerable', 5) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 5) diff --git a/scripts/buffs/me_cranial_smash_1.py b/scripts/buffs/me_cranial_smash_1.py index f63ec968..3daa6068 100644 --- a/scripts/buffs/me_cranial_smash_1.py +++ b/scripts/buffs/me_cranial_smash_1.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_divide_damage_dealt', 10) core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) core.skillModService.deductSkillMod(actor, 'combat_divide_damage_dealt', 10) return diff --git a/scripts/buffs/me_cure_affliction_1.py b/scripts/buffs/me_cure_affliction_1.py index f5e1ce07..b071a958 100644 --- a/scripts/buffs/me_cure_affliction_1.py +++ b/scripts/buffs/me_cure_affliction_1.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_reduction_all', 5) core.skillModService.addSkillMod(actor, 'dot_resist_all', 100) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_reduction_all', 5) core.skillModService.deductSkillMod(actor, 'dot_resist_all', 100) return diff --git a/scripts/buffs/me_doom.py b/scripts/buffs/me_doom.py index d4f40162..fe90deb5 100644 --- a/scripts/buffs/me_doom.py +++ b/scripts/buffs/me_doom.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'me_doom', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'me_doom', 1) return \ No newline at end of file diff --git a/scripts/buffs/me_electrolyte_drain_1.py b/scripts/buffs/me_electrolyte_drain_1.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/me_electrolyte_drain_1.py +++ b/scripts/buffs/me_electrolyte_drain_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/me_evasion_1.py b/scripts/buffs/me_evasion_1.py index 59984429..81ea7c1d 100644 --- a/scripts/buffs/me_evasion_1.py +++ b/scripts/buffs/me_evasion_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 35) core.skillModService.addSkillMod(actor, 'display_only_evasion', 5000) core.skillModService.addSkillMod(actor, 'combat_evasion_value', 50) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 35) core.skillModService.deductSkillMod(actor, 'display_only_evasion', 5000) core.skillModService.deductSkillMod(actor, 'combat_evasion_value', 50) diff --git a/scripts/buffs/me_rheumatic_calamity_1.py b/scripts/buffs/me_rheumatic_calamity_1.py index 2884acd8..8870a12b 100644 --- a/scripts/buffs/me_rheumatic_calamity_1.py +++ b/scripts/buffs/me_rheumatic_calamity_1.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'action_burn', 65) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'action_burn', 65) return \ No newline at end of file diff --git a/scripts/buffs/me_serotonin_boost_1.py b/scripts/buffs/me_serotonin_boost_1.py index 5eb23142..2c931a78 100644 --- a/scripts/buffs/me_serotonin_boost_1.py +++ b/scripts/buffs/me_serotonin_boost_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'debuff_purge', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'debuff_purge', 1) return \ No newline at end of file diff --git a/scripts/buffs/me_serotonin_purge_1.py b/scripts/buffs/me_serotonin_purge_1.py index 8b288359..c5540781 100644 --- a/scripts/buffs/me_serotonin_purge_1.py +++ b/scripts/buffs/me_serotonin_purge_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'buff_purge', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'buff_purge', 1) return \ No newline at end of file diff --git a/scripts/buffs/me_stasis_1.py b/scripts/buffs/me_stasis_1.py index 1539e280..7d4b7fe5 100644 --- a/scripts/buffs/me_stasis_1.py +++ b/scripts/buffs/me_stasis_1.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.playEffectObject('clienteffect/medic_stasis.cef', 'me_stasis_1') actor.setSpeedMultiplierBase(0.2) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierBase(1) return \ No newline at end of file diff --git a/scripts/buffs/me_stasis_self_1.py b/scripts/buffs/me_stasis_self_1.py index 6341cb4c..cfb0b3f3 100644 --- a/scripts/buffs/me_stasis_self_1.py +++ b/scripts/buffs/me_stasis_self_1.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.playEffectObject('clienteffect/medic_stasis.cef', 'me_stasis_self_1') actor.setSpeedMultiplierBase(0.2) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierBase(1) return \ No newline at end of file diff --git a/scripts/buffs/me_thyroid_rupture_1.py b/scripts/buffs/me_thyroid_rupture_1.py index 03b1fba8..fcafd14c 100644 --- a/scripts/buffs/me_thyroid_rupture_1.py +++ b/scripts/buffs/me_thyroid_rupture_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_divide_damage_dealt', 25) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'combat_divide_damage_dealt', 25) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_1.py b/scripts/buffs/of_adv_paint_debuff_1.py index 7f6894de..54bbaa4e 100644 --- a/scripts/buffs/of_adv_paint_debuff_1.py +++ b/scripts/buffs/of_adv_paint_debuff_1.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 3) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 3) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_2.py b/scripts/buffs/of_adv_paint_debuff_2.py index 92f239c0..2a7c28ce 100644 --- a/scripts/buffs/of_adv_paint_debuff_2.py +++ b/scripts/buffs/of_adv_paint_debuff_2.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 4) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 4) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_3.py b/scripts/buffs/of_adv_paint_debuff_3.py index 58fe704f..18dc8a8c 100644 --- a/scripts/buffs/of_adv_paint_debuff_3.py +++ b/scripts/buffs/of_adv_paint_debuff_3.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_4.py b/scripts/buffs/of_adv_paint_debuff_4.py index f41ae124..ec98f8ea 100644 --- a/scripts/buffs/of_adv_paint_debuff_4.py +++ b/scripts/buffs/of_adv_paint_debuff_4.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 6) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 6) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_5.py b/scripts/buffs/of_adv_paint_debuff_5.py index d31be060..e8fc48e0 100644 --- a/scripts/buffs/of_adv_paint_debuff_5.py +++ b/scripts/buffs/of_adv_paint_debuff_5.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 7) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 7) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_6.py b/scripts/buffs/of_adv_paint_debuff_6.py index 84ffe9ed..739acd40 100644 --- a/scripts/buffs/of_adv_paint_debuff_6.py +++ b/scripts/buffs/of_adv_paint_debuff_6.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 8) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 8) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_7.py b/scripts/buffs/of_adv_paint_debuff_7.py index 231f4a1b..32276a5f 100644 --- a/scripts/buffs/of_adv_paint_debuff_7.py +++ b/scripts/buffs/of_adv_paint_debuff_7.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 9) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 9) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_8.py b/scripts/buffs/of_adv_paint_debuff_8.py index 65e1c826..7af4032c 100644 --- a/scripts/buffs/of_adv_paint_debuff_8.py +++ b/scripts/buffs/of_adv_paint_debuff_8.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 10) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 10) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_expose_1.py b/scripts/buffs/of_adv_paint_expose_1.py index e3583535..cf3db901 100644 --- a/scripts/buffs/of_adv_paint_expose_1.py +++ b/scripts/buffs/of_adv_paint_expose_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stealth_divisor', 15) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 3) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 3) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stealth_divisor', 15) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 3) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 3) diff --git a/scripts/buffs/of_adv_paint_expose_2.py b/scripts/buffs/of_adv_paint_expose_2.py index 07ed0966..cb86a0d8 100644 --- a/scripts/buffs/of_adv_paint_expose_2.py +++ b/scripts/buffs/of_adv_paint_expose_2.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stealth_divisor', 20) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 4) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 4) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stealth_divisor', 20) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 4) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 4) diff --git a/scripts/buffs/of_adv_paint_expose_3.py b/scripts/buffs/of_adv_paint_expose_3.py index 4ab6e431..7a7d18af 100644 --- a/scripts/buffs/of_adv_paint_expose_3.py +++ b/scripts/buffs/of_adv_paint_expose_3.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stealth_divisor', 25) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 5) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stealth_divisor', 25) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 5) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 5) diff --git a/scripts/buffs/of_adv_paint_expose_4.py b/scripts/buffs/of_adv_paint_expose_4.py index df8fae5c..3716ee92 100644 --- a/scripts/buffs/of_adv_paint_expose_4.py +++ b/scripts/buffs/of_adv_paint_expose_4.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stealth_divisor', 30) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 6) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 6) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stealth_divisor', 30) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 6) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 6) diff --git a/scripts/buffs/of_adv_paint_expose_5.py b/scripts/buffs/of_adv_paint_expose_5.py index d22f46f0..210f262d 100644 --- a/scripts/buffs/of_adv_paint_expose_5.py +++ b/scripts/buffs/of_adv_paint_expose_5.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stealth_divisor', 35) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 7) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 7) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stealth_divisor', 35) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 7) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 7) diff --git a/scripts/buffs/of_adv_paint_expose_6.py b/scripts/buffs/of_adv_paint_expose_6.py index 4e3af368..d58904ce 100644 --- a/scripts/buffs/of_adv_paint_expose_6.py +++ b/scripts/buffs/of_adv_paint_expose_6.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stealth_divisor', 40) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 8) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 8) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stealth_divisor', 40) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 8) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 8) diff --git a/scripts/buffs/of_adv_paint_expose_7.py b/scripts/buffs/of_adv_paint_expose_7.py index 46e42ba4..c83c4950 100644 --- a/scripts/buffs/of_adv_paint_expose_7.py +++ b/scripts/buffs/of_adv_paint_expose_7.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stealth_divisor', 45) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 9) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 9) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stealth_divisor', 45) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 9) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 9) diff --git a/scripts/buffs/of_adv_paint_expose_8.py b/scripts/buffs/of_adv_paint_expose_8.py index ff43fe6c..38a00bf2 100644 --- a/scripts/buffs/of_adv_paint_expose_8.py +++ b/scripts/buffs/of_adv_paint_expose_8.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stealth_divisor', 50) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 10) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 10) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stealth_divisor', 50) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 10) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 10) diff --git a/scripts/buffs/of_ae_dm_cc_1.py b/scripts/buffs/of_ae_dm_cc_1.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/of_ae_dm_cc_1.py +++ b/scripts/buffs/of_ae_dm_cc_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_ae_dm_cc_2.py b/scripts/buffs/of_ae_dm_cc_2.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/of_ae_dm_cc_2.py +++ b/scripts/buffs/of_ae_dm_cc_2.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_ae_dm_cc_3.py b/scripts/buffs/of_ae_dm_cc_3.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/of_ae_dm_cc_3.py +++ b/scripts/buffs/of_ae_dm_cc_3.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_buff_def_1.py b/scripts/buffs/of_buff_def_1.py index dd15adaf..68455f5b 100644 --- a/scripts/buffs/of_buff_def_1.py +++ b/scripts/buffs/of_buff_def_1.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 1) core.skillModService.addSkillMod(actor, 'constitution_modified', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 1) core.skillModService.deductSkillMod(actor, 'constitution_modified', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_buff_def_2.py b/scripts/buffs/of_buff_def_2.py index d819404b..c1cb56b4 100644 --- a/scripts/buffs/of_buff_def_2.py +++ b/scripts/buffs/of_buff_def_2.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 2) core.skillModService.addSkillMod(actor, 'constitution_modified', 10) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 2) core.skillModService.deductSkillMod(actor, 'constitution_modified', 10) return \ No newline at end of file diff --git a/scripts/buffs/of_buff_def_3.py b/scripts/buffs/of_buff_def_3.py index d18a3633..952b1963 100644 --- a/scripts/buffs/of_buff_def_3.py +++ b/scripts/buffs/of_buff_def_3.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 2) core.skillModService.addSkillMod(actor, 'constitution_modified', 20) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 2) core.skillModService.deductSkillMod(actor, 'constitution_modified', 20) return \ No newline at end of file diff --git a/scripts/buffs/of_buff_def_4.py b/scripts/buffs/of_buff_def_4.py index b115ce6b..3360e4e4 100644 --- a/scripts/buffs/of_buff_def_4.py +++ b/scripts/buffs/of_buff_def_4.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 2) core.skillModService.addSkillMod(actor, 'constitution_modified', 20) core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 2) core.skillModService.deductSkillMod(actor, 'constitution_modified', 20) core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 5) diff --git a/scripts/buffs/of_buff_def_5.py b/scripts/buffs/of_buff_def_5.py index 5c6ff8eb..5e0f8e8d 100644 --- a/scripts/buffs/of_buff_def_5.py +++ b/scripts/buffs/of_buff_def_5.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 3) core.skillModService.addSkillMod(actor, 'constitution_modified', 25) core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 6) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 3) core.skillModService.deductSkillMod(actor, 'constitution_modified', 25) core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 6) diff --git a/scripts/buffs/of_buff_def_6.py b/scripts/buffs/of_buff_def_6.py index b8a4b168..46293f6b 100644 --- a/scripts/buffs/of_buff_def_6.py +++ b/scripts/buffs/of_buff_def_6.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 3) core.skillModService.addSkillMod(actor, 'constitution_modified', 35) core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 7) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 3) core.skillModService.deductSkillMod(actor, 'constitution_modified', 35) core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 7) diff --git a/scripts/buffs/of_buff_def_7.py b/scripts/buffs/of_buff_def_7.py index 77bdd6b4..a063f2fd 100644 --- a/scripts/buffs/of_buff_def_7.py +++ b/scripts/buffs/of_buff_def_7.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 4) core.skillModService.addSkillMod(actor, 'constitution_modified', 50) core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 8) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 4) core.skillModService.deductSkillMod(actor, 'constitution_modified', 50) core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 8) diff --git a/scripts/buffs/of_buff_def_8.py b/scripts/buffs/of_buff_def_8.py index e4b5ba0c..4136a39d 100644 --- a/scripts/buffs/of_buff_def_8.py +++ b/scripts/buffs/of_buff_def_8.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 4) core.skillModService.addSkillMod(actor, 'constitution_modified', 60) core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 9) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 4) core.skillModService.deductSkillMod(actor, 'constitution_modified', 60) core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 9) diff --git a/scripts/buffs/of_buff_def_9.py b/scripts/buffs/of_buff_def_9.py index 6f5e35e7..2651fc29 100644 --- a/scripts/buffs/of_buff_def_9.py +++ b/scripts/buffs/of_buff_def_9.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 5) core.skillModService.addSkillMod(actor, 'constitution_modified', 70) core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 10) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 5) core.skillModService.deductSkillMod(actor, 'constitution_modified', 70) core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 10) diff --git a/scripts/buffs/of_cc_melee_1.py b/scripts/buffs/of_cc_melee_1.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_1.py +++ b/scripts/buffs/of_cc_melee_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_2.py b/scripts/buffs/of_cc_melee_2.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_2.py +++ b/scripts/buffs/of_cc_melee_2.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_3.py b/scripts/buffs/of_cc_melee_3.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_3.py +++ b/scripts/buffs/of_cc_melee_3.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_4.py b/scripts/buffs/of_cc_melee_4.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_4.py +++ b/scripts/buffs/of_cc_melee_4.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_5.py b/scripts/buffs/of_cc_melee_5.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_5.py +++ b/scripts/buffs/of_cc_melee_5.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_6.py b/scripts/buffs/of_cc_melee_6.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_6.py +++ b/scripts/buffs/of_cc_melee_6.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_7.py b/scripts/buffs/of_cc_melee_7.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_7.py +++ b/scripts/buffs/of_cc_melee_7.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_charge_1.py b/scripts/buffs/of_charge_1.py index 1edd38b5..db0d0aa7 100644 --- a/scripts/buffs/of_charge_1.py +++ b/scripts/buffs/of_charge_1.py @@ -1,13 +1,16 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_damage_all', 10) core.skillModService.addSkillMod(actor, 'expertise_action_all', 10) core.skillModService.addSkillMod(actor, 'movement_resist_snare', 100) core.skillModService.addSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) core.skillModService.deductSkillMod(actor, 'expertise_damage_all', 10) core.skillModService.deductSkillMod(actor, 'expertise_action_all', 10) diff --git a/scripts/buffs/of_deadeye_debuff.py b/scripts/buffs/of_deadeye_debuff.py index 533e3262..be22ec3e 100644 --- a/scripts/buffs/of_deadeye_debuff.py +++ b/scripts/buffs/of_deadeye_debuff.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'action_burn', 50) core.skillModService.addSkillMod(actor, 'glancing_blow_vulnerable', 30) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'action_burn', 50) core.skillModService.deductSkillMod(actor, 'glancing_blow_vulnerable', 30) return \ No newline at end of file diff --git a/scripts/buffs/of_deb_def_1.py b/scripts/buffs/of_deb_def_1.py index 5a4b5cff..793bdf94 100644 --- a/scripts/buffs/of_deb_def_1.py +++ b/scripts/buffs/of_deb_def_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', -2) core.skillModService.addSkillMod(actor, 'expertise_parry', -2) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 3) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', -2) core.skillModService.deductSkillMod(actor, 'expertise_parry', -2) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 3) diff --git a/scripts/buffs/of_deb_def_2.py b/scripts/buffs/of_deb_def_2.py index 75c97f71..b8489de2 100644 --- a/scripts/buffs/of_deb_def_2.py +++ b/scripts/buffs/of_deb_def_2.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', -3) core.skillModService.addSkillMod(actor, 'expertise_parry', -3) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 4) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', -3) core.skillModService.deductSkillMod(actor, 'expertise_parry', -3) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 4) diff --git a/scripts/buffs/of_deb_def_3.py b/scripts/buffs/of_deb_def_3.py index 5b125b31..9ca704a3 100644 --- a/scripts/buffs/of_deb_def_3.py +++ b/scripts/buffs/of_deb_def_3.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', -3) core.skillModService.addSkillMod(actor, 'expertise_parry', -3) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', -3) core.skillModService.deductSkillMod(actor, 'expertise_parry', -3) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 5) diff --git a/scripts/buffs/of_deb_def_4.py b/scripts/buffs/of_deb_def_4.py index 056db66a..62a832dd 100644 --- a/scripts/buffs/of_deb_def_4.py +++ b/scripts/buffs/of_deb_def_4.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', -4) core.skillModService.addSkillMod(actor, 'expertise_parry', -4) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 4) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', -4) core.skillModService.deductSkillMod(actor, 'expertise_parry', -4) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 4) diff --git a/scripts/buffs/of_deb_def_5.py b/scripts/buffs/of_deb_def_5.py index ec243e5b..4c8e28fa 100644 --- a/scripts/buffs/of_deb_def_5.py +++ b/scripts/buffs/of_deb_def_5.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', -4) core.skillModService.addSkillMod(actor, 'expertise_parry', -4) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', -4) core.skillModService.deductSkillMod(actor, 'expertise_parry', -4) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 5) diff --git a/scripts/buffs/of_deb_def_6.py b/scripts/buffs/of_deb_def_6.py index 3ebd39ea..eb41e77b 100644 --- a/scripts/buffs/of_deb_def_6.py +++ b/scripts/buffs/of_deb_def_6.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', -5) core.skillModService.addSkillMod(actor, 'expertise_parry', -5) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 6) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', -5) core.skillModService.deductSkillMod(actor, 'expertise_parry', -5) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 6) diff --git a/scripts/buffs/of_deb_def_7.py b/scripts/buffs/of_deb_def_7.py index 7503918d..c1e5dd6e 100644 --- a/scripts/buffs/of_deb_def_7.py +++ b/scripts/buffs/of_deb_def_7.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', -6) core.skillModService.addSkillMod(actor, 'expertise_parry', -6) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 7) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', -6) core.skillModService.deductSkillMod(actor, 'expertise_parry', -6) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 7) diff --git a/scripts/buffs/of_deb_def_8.py b/scripts/buffs/of_deb_def_8.py index bc8e5334..1ad5b201 100644 --- a/scripts/buffs/of_deb_def_8.py +++ b/scripts/buffs/of_deb_def_8.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', -7) core.skillModService.addSkillMod(actor, 'expertise_parry', -7) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 8) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', -7) core.skillModService.deductSkillMod(actor, 'expertise_parry', -7) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 8) diff --git a/scripts/buffs/of_decap_bleed_1.py b/scripts/buffs/of_decap_bleed_1.py index 16152e90..ff8b7fcf 100644 --- a/scripts/buffs/of_decap_bleed_1.py +++ b/scripts/buffs/of_decap_bleed_1.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 18) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 18) return \ No newline at end of file diff --git a/scripts/buffs/of_decap_bleed_2.py b/scripts/buffs/of_decap_bleed_2.py index f34171fc..1cdbd89d 100644 --- a/scripts/buffs/of_decap_bleed_2.py +++ b/scripts/buffs/of_decap_bleed_2.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 25) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 25) return \ No newline at end of file diff --git a/scripts/buffs/of_decap_bleed_3.py b/scripts/buffs/of_decap_bleed_3.py index 01d777ca..13629ef6 100644 --- a/scripts/buffs/of_decap_bleed_3.py +++ b/scripts/buffs/of_decap_bleed_3.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 32) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 32) return \ No newline at end of file diff --git a/scripts/buffs/of_decap_bleed_4.py b/scripts/buffs/of_decap_bleed_4.py index 1e847dea..3e266371 100644 --- a/scripts/buffs/of_decap_bleed_4.py +++ b/scripts/buffs/of_decap_bleed_4.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 42) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 42) return \ No newline at end of file diff --git a/scripts/buffs/of_decap_bleed_5.py b/scripts/buffs/of_decap_bleed_5.py index 596a9457..22db45c2 100644 --- a/scripts/buffs/of_decap_bleed_5.py +++ b/scripts/buffs/of_decap_bleed_5.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 50) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 50) return \ No newline at end of file diff --git a/scripts/buffs/of_decap_bleed_6.py b/scripts/buffs/of_decap_bleed_6.py index 1e96e637..8bbabdd6 100644 --- a/scripts/buffs/of_decap_bleed_6.py +++ b/scripts/buffs/of_decap_bleed_6.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 60) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 60) return \ No newline at end of file diff --git a/scripts/buffs/of_dot_bomb_1.py b/scripts/buffs/of_dot_bomb_1.py index 9ab3d9f7..1534cc2e 100644 --- a/scripts/buffs/of_dot_bomb_1.py +++ b/scripts/buffs/of_dot_bomb_1.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_fire', 200) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_fire', 200) return \ No newline at end of file diff --git a/scripts/buffs/of_drillmaster_1.py b/scripts/buffs/of_drillmaster_1.py index 9dd26849..dcb74846 100644 --- a/scripts/buffs/of_drillmaster_1.py +++ b/scripts/buffs/of_drillmaster_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_damage_all', 5) core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'expertise_damage_weapon_2', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_damage_all', 5) core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) core.skillModService.deductSkillMod(actor, 'expertise_damage_weapon_2', 5) diff --git a/scripts/buffs/of_emergency_shield.py b/scripts/buffs/of_emergency_shield.py index 8b27d418..e4f367c3 100644 --- a/scripts/buffs/of_emergency_shield.py +++ b/scripts/buffs/of_emergency_shield.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_divide_damage_taken', 75) core.skillModService.addSkillMod(actor, 'combat_divide_damage_dealt', 75) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'combat_divide_damage_taken', 75) core.skillModService.deductSkillMod(actor, 'combat_divide_damage_dealt', 75) return \ No newline at end of file diff --git a/scripts/buffs/of_firepower.py b/scripts/buffs/of_firepower.py index e7b0b129..9bf1f1fe 100644 --- a/scripts/buffs/of_firepower.py +++ b/scripts/buffs/of_firepower.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_damage_line_of_aoe', 125) core.skillModService.addSkillMod(actor, 'expertise_critical_line_of_aoe', 50) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_damage_line_of_aoe', 125) core.skillModService.deductSkillMod(actor, 'expertise_critical_line_of_aoe', 50) return \ No newline at end of file diff --git a/scripts/buffs/of_focus_fire_1.py b/scripts/buffs/of_focus_fire_1.py index c8e0d364..e2afcef8 100644 --- a/scripts/buffs/of_focus_fire_1.py +++ b/scripts/buffs/of_focus_fire_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 2) core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 15) core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 2) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 2) core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 15) core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 2) diff --git a/scripts/buffs/of_focus_fire_2.py b/scripts/buffs/of_focus_fire_2.py index 7803b873..0db33d9d 100644 --- a/scripts/buffs/of_focus_fire_2.py +++ b/scripts/buffs/of_focus_fire_2.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 3) core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 20) core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 2) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 3) core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 20) core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 2) diff --git a/scripts/buffs/of_focus_fire_3.py b/scripts/buffs/of_focus_fire_3.py index a4084512..b78066de 100644 --- a/scripts/buffs/of_focus_fire_3.py +++ b/scripts/buffs/of_focus_fire_3.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 3) core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 23) core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 3) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 3) core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 23) core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 3) diff --git a/scripts/buffs/of_focus_fire_4.py b/scripts/buffs/of_focus_fire_4.py index 27402933..d028d699 100644 --- a/scripts/buffs/of_focus_fire_4.py +++ b/scripts/buffs/of_focus_fire_4.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 4) core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 26) core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 3) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 4) core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 26) core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 4) diff --git a/scripts/buffs/of_focus_fire_5.py b/scripts/buffs/of_focus_fire_5.py index 9cc90e8d..0b5c3e3f 100644 --- a/scripts/buffs/of_focus_fire_5.py +++ b/scripts/buffs/of_focus_fire_5.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 4) core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 29) core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 4) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 4) core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 29) core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 4) diff --git a/scripts/buffs/of_focus_fire_6.py b/scripts/buffs/of_focus_fire_6.py index 58879cbe..4cbaafe1 100644 --- a/scripts/buffs/of_focus_fire_6.py +++ b/scripts/buffs/of_focus_fire_6.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 5) core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 32) core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 5) core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 32) core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 5) diff --git a/scripts/buffs/of_inspiration_1.py b/scripts/buffs/of_inspiration_1.py index 6cd2da65..cbf0963e 100644 --- a/scripts/buffs/of_inspiration_1.py +++ b/scripts/buffs/of_inspiration_1.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 870) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_all', 870) core.skillModService.deductSkillMod(actor, 'healing_action', 870) return \ No newline at end of file diff --git a/scripts/buffs/of_inspiration_2.py b/scripts/buffs/of_inspiration_2.py index a26bbe86..1cf07e9c 100644 --- a/scripts/buffs/of_inspiration_2.py +++ b/scripts/buffs/of_inspiration_2.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 1111) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) core.skillModService.deductSkillMod(actor, 'healing_action', 1111) return \ No newline at end of file diff --git a/scripts/buffs/of_inspiration_3.py b/scripts/buffs/of_inspiration_3.py index 337108a6..1162d3b3 100644 --- a/scripts/buffs/of_inspiration_3.py +++ b/scripts/buffs/of_inspiration_3.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 1532) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) core.skillModService.deductSkillMod(actor, 'healing_action', 1532) return \ No newline at end of file diff --git a/scripts/buffs/of_inspiration_4.py b/scripts/buffs/of_inspiration_4.py index 5738cd3d..67879833 100644 --- a/scripts/buffs/of_inspiration_4.py +++ b/scripts/buffs/of_inspiration_4.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 1954) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) core.skillModService.deductSkillMod(actor, 'healing_action', 1954) return \ No newline at end of file diff --git a/scripts/buffs/of_inspiration_5.py b/scripts/buffs/of_inspiration_5.py index 6ab7d9d3..f566e44a 100644 --- a/scripts/buffs/of_inspiration_5.py +++ b/scripts/buffs/of_inspiration_5.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 2374) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) core.skillModService.deductSkillMod(actor, 'healing_action', 2374) return \ No newline at end of file diff --git a/scripts/buffs/of_inspiration_6.py b/scripts/buffs/of_inspiration_6.py index 9e7e9def..31bcc7df 100644 --- a/scripts/buffs/of_inspiration_6.py +++ b/scripts/buffs/of_inspiration_6.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 2800) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) core.skillModService.deductSkillMod(actor, 'healing_action', 2800) return \ No newline at end of file diff --git a/scripts/buffs/of_last_words.py b/scripts/buffs/of_last_words.py index 9611d588..49c70490 100644 --- a/scripts/buffs/of_last_words.py +++ b/scripts/buffs/of_last_words.py @@ -1,13 +1,16 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'healing_health', 3500) core.skillModService.addSkillMod(actor, 'healing_action', 6000) core.skillModService.addSkillMod(actor, 'expertise_damage_all', 10) core.skillModService.addSkillMod(actor, 'expertise_action_all', 10) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'healing_health', 125) core.skillModService.deductSkillMod(actor, 'healing_action', 50) core.skillModService.deductSkillMod(actor, 'expertise_damage_all', 50) diff --git a/scripts/buffs/of_pistol_bleed.py b/scripts/buffs/of_pistol_bleed.py index 1e96e637..8bbabdd6 100644 --- a/scripts/buffs/of_pistol_bleed.py +++ b/scripts/buffs/of_pistol_bleed.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 60) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 60) return \ No newline at end of file diff --git a/scripts/buffs/of_purge_1.py b/scripts/buffs/of_purge_1.py index c41e52e8..21dd70e7 100644 --- a/scripts/buffs/of_purge_1.py +++ b/scripts/buffs/of_purge_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_divisor_all', 50) core.skillModService.addSkillMod(actor, 'dot_resist_all', 100) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_divisor_all', 50) core.skillModService.deductSkillMod(actor, 'dot_resist_all', 100) return \ No newline at end of file diff --git a/scripts/buffs/of_scatter_1.py b/scripts/buffs/of_scatter_1.py index ed252b06..7d7e729d 100644 --- a/scripts/buffs/of_scatter_1.py +++ b/scripts/buffs/of_scatter_1.py @@ -1,13 +1,16 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 2) core.skillModService.addSkillMod(actor, 'movement_resist_snare', 15) core.skillModService.addSkillMod(actor, 'movement_resist_root', 2) core.skillModService.addSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 2) core.skillModService.deductSkillMod(actor, 'movement_resist_snare', 15) diff --git a/scripts/buffs/of_stimulator_1.py b/scripts/buffs/of_stimulator_1.py index f28888e7..4e120b7f 100644 --- a/scripts/buffs/of_stimulator_1.py +++ b/scripts/buffs/of_stimulator_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'debuff_purge', 2) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'debuff_purge', 2) return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_bleed_1.py b/scripts/buffs/of_vortex_bleed_1.py index e1095bbc..188e61a7 100644 --- a/scripts/buffs/of_vortex_bleed_1.py +++ b/scripts/buffs/of_vortex_bleed_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 30) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 30) return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_bleed_2.py b/scripts/buffs/of_vortex_bleed_2.py index cc0b1590..9a2bb14b 100644 --- a/scripts/buffs/of_vortex_bleed_2.py +++ b/scripts/buffs/of_vortex_bleed_2.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 44) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 44) return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_bleed_3.py b/scripts/buffs/of_vortex_bleed_3.py index 12c3f4cd..711ac6ef 100644 --- a/scripts/buffs/of_vortex_bleed_3.py +++ b/scripts/buffs/of_vortex_bleed_3.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 58) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 58) return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_bleed_4.py b/scripts/buffs/of_vortex_bleed_4.py index 9d2c2648..a6b25916 100644 --- a/scripts/buffs/of_vortex_bleed_4.py +++ b/scripts/buffs/of_vortex_bleed_4.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 72) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 72) return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_bleed_5.py b/scripts/buffs/of_vortex_bleed_5.py index 760cc493..20f90a7f 100644 --- a/scripts/buffs/of_vortex_bleed_5.py +++ b/scripts/buffs/of_vortex_bleed_5.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 90) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 90) return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_root.py b/scripts/buffs/of_vortex_root.py index 32ba0f8d..42418564 100644 --- a/scripts/buffs/of_vortex_root.py +++ b/scripts/buffs/of_vortex_root.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 10) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 10) return \ No newline at end of file diff --git a/scripts/buffs/poisoned.py b/scripts/buffs/poisoned.py index e09c02e5..c60417a0 100644 --- a/scripts/buffs/poisoned.py +++ b/scripts/buffs/poisoned.py @@ -2,7 +2,10 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/proc_old_dark_jedi_gift.py b/scripts/buffs/proc_old_dark_jedi_gift.py index e09c02e5..c60417a0 100644 --- a/scripts/buffs/proc_old_dark_jedi_gift.py +++ b/scripts/buffs/proc_old_dark_jedi_gift.py @@ -2,7 +2,10 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/proc_old_light_jedi_gift.py b/scripts/buffs/proc_old_light_jedi_gift.py index e09c02e5..c60417a0 100644 --- a/scripts/buffs/proc_old_light_jedi_gift.py +++ b/scripts/buffs/proc_old_light_jedi_gift.py @@ -2,7 +2,10 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/saberblock.py b/scripts/buffs/saberblock.py index 15962ce9..3386a66a 100644 --- a/scripts/buffs/saberblock.py +++ b/scripts/buffs/saberblock.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'display_only_parry', 1000 + (actor.getSkillModBase('expertise_saber_block') * 100)) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'display_only_parry', 1000 + (actor.getSkillModBase('expertise_saber_block') * 100)) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_dps_1.py b/scripts/buffs/set_bonus_bh_dps_1.py index 58d3ed08..6055bf9f 100644 --- a/scripts/buffs/set_bonus_bh_dps_1.py +++ b/scripts/buffs/set_bonus_bh_dps_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_line_dm', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_line_dm', 5) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_dps_2.py b/scripts/buffs/set_bonus_bh_dps_2.py index cf463a7a..5f0aa83c 100644 --- a/scripts/buffs/set_bonus_bh_dps_2.py +++ b/scripts/buffs/set_bonus_bh_dps_2.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_line_dm', 5) core.skillModService.addSkillMod(actor, 'expertise_buff_duration_line_bh_return_fire' , 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_line_dm', 5) core.skillModService.deductSkillMod(actor, 'expertise_buff_duration_line_bh_return_fire' , 5) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_dps_3.py b/scripts/buffs/set_bonus_bh_dps_3.py index 06bcee28..4d48df3e 100644 --- a/scripts/buffs/set_bonus_bh_dps_3.py +++ b/scripts/buffs/set_bonus_bh_dps_3.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_line_dm', 10) core.skillModService.addSkillMod(actor, 'expertise_action_line_dm_crit', 10) core.skillModService.addSkillMod(actor, 'expertise_buff_duration_line_bh_return_fire' , 10) @@ -8,7 +11,7 @@ def setup(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_bh_return_fire' , 750) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_line_dm', 10) core.skillModService.deductSkillMod(actor, 'expertise_action_line_dm_crit', 10) core.skillModService.deductSkillMod(actor, 'expertise_buff_duration_line_bh_return_fire' , 10) diff --git a/scripts/buffs/set_bonus_bh_utility_a_1.py b/scripts/buffs/set_bonus_bh_utility_a_1.py index 4f9e42e4..3035fdd8 100644 --- a/scripts/buffs/set_bonus_bh_utility_a_1.py +++ b/scripts/buffs/set_bonus_bh_utility_a_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 15) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 15) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_a_2.py b/scripts/buffs/set_bonus_bh_utility_a_2.py index 4f9e42e4..3035fdd8 100644 --- a/scripts/buffs/set_bonus_bh_utility_a_2.py +++ b/scripts/buffs/set_bonus_bh_utility_a_2.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 15) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 15) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_a_3.py b/scripts/buffs/set_bonus_bh_utility_a_3.py index e98992f3..6a3ed086 100644 --- a/scripts/buffs/set_bonus_bh_utility_a_3.py +++ b/scripts/buffs/set_bonus_bh_utility_a_3.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 30) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 30) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_b_1.py b/scripts/buffs/set_bonus_bh_utility_b_1.py index 0f4597fe..9115f6d4 100644 --- a/scripts/buffs/set_bonus_bh_utility_b_1.py +++ b/scripts/buffs/set_bonus_bh_utility_b_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'fast_attack_line_dm_cc', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'fast_attack_line_dm_cc', 5) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_b_2.py b/scripts/buffs/set_bonus_bh_utility_b_2.py index 945c2883..b641c6a6 100644 --- a/scripts/buffs/set_bonus_bh_utility_b_2.py +++ b/scripts/buffs/set_bonus_bh_utility_b_2.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'fast_attack_line_dm_cc', 10) core.skillModService.addSkillMod(actor, 'bh_dire_root', 20) core.skillModService.addSkillMod(actor, 'bh_dire_snare', 20) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'fast_attack_line_dm_cc', 10) core.skillModService.deductSkillMod(actor, 'bh_dire_root', 20) core.skillModService.deductSkillMod(actor, 'bh_dire_snare', 20) diff --git a/scripts/buffs/set_bonus_bh_utility_b_3.py b/scripts/buffs/set_bonus_bh_utility_b_3.py index d136c4ec..b4b4154f 100644 --- a/scripts/buffs/set_bonus_bh_utility_b_3.py +++ b/scripts/buffs/set_bonus_bh_utility_b_3.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'fast_attack_line_dm_cc', 35) core.skillModService.addSkillMod(actor, 'bh_dire_root', 45) core.skillModService.addSkillMod(actor, 'bh_dire_snare', 45) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'fast_attack_line_dm_cc', 35) core.skillModService.deductSkillMod(actor, 'bh_dire_root', 45) core.skillModService.deductSkillMod(actor, 'bh_dire_snare', 45) diff --git a/scripts/buffs/set_bonus_hero_1.py b/scripts/buffs/set_bonus_hero_1.py index d84a60fc..c589b0f4 100644 --- a/scripts/buffs/set_bonus_hero_1.py +++ b/scripts/buffs/set_bonus_hero_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stamina_modified', 60) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stamina_modified', 60) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_hero_2.py b/scripts/buffs/set_bonus_hero_2.py index 6c87d81e..630b0e30 100644 --- a/scripts/buffs/set_bonus_hero_2.py +++ b/scripts/buffs/set_bonus_hero_2.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stamina_modified', 90) core.skillModService.addSkillMod(actor, 'agility_modified', 90) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stamina_modified', 90) core.skillModService.deductSkillMod(actor, 'agility_modified', 90) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_hero_3.py b/scripts/buffs/set_bonus_hero_3.py index 11c03f31..d2755af3 100644 --- a/scripts/buffs/set_bonus_hero_3.py +++ b/scripts/buffs/set_bonus_hero_3.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stamina_modified', 150) core.skillModService.addSkillMod(actor, 'agility_modified', 150) core.skillModService.addSkillMod(actor, 'constitution_modified', 150) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stamina_modified', 150) core.skillModService.deductSkillMod(actor, 'agility_modified', 150) core.skillModService.deductSkillMod(actor, 'constitution_modified', 150) diff --git a/scripts/buffs/sm_ae_dm_cc_1.py b/scripts/buffs/sm_ae_dm_cc_1.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_1.py +++ b/scripts/buffs/sm_ae_dm_cc_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_2.py b/scripts/buffs/sm_ae_dm_cc_2.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_2.py +++ b/scripts/buffs/sm_ae_dm_cc_2.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_3.py b/scripts/buffs/sm_ae_dm_cc_3.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_3.py +++ b/scripts/buffs/sm_ae_dm_cc_3.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_4.py b/scripts/buffs/sm_ae_dm_cc_4.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_4.py +++ b/scripts/buffs/sm_ae_dm_cc_4.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_5.py b/scripts/buffs/sm_ae_dm_cc_5.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_5.py +++ b/scripts/buffs/sm_ae_dm_cc_5.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_6.py b/scripts/buffs/sm_ae_dm_cc_6.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_6.py +++ b/scripts/buffs/sm_ae_dm_cc_6.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_pistol_whip_1.py b/scripts/buffs/sm_pistol_whip_1.py index 5537d303..f83a6829 100644 --- a/scripts/buffs/sm_pistol_whip_1.py +++ b/scripts/buffs/sm_pistol_whip_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'sm_pistol_whip', 0) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'sm_pistol_whip', 0) return \ No newline at end of file diff --git a/src/services/BuffService.java b/src/services/BuffService.java index cd8e218b..662dea25 100644 --- a/src/services/BuffService.java +++ b/src/services/BuffService.java @@ -71,15 +71,17 @@ public class BuffService implements INetworkDispatch { if(buff.isGroupBuff()) { addGroupBuff(creature, buffName); } else { - doAddBuff(creature, buffName); + doAddBuff(creature, buffName, null); } } - public Buff doAddBuff(final CreatureObject creature, String buffName) { + public Buff doAddBuff(final CreatureObject creature, String buffName, CreatureObject buffer) { final Buff buff = new Buff(buffName, creature.getObjectID()); buff.setTotalPlayTime(((PlayerObject) creature.getSlottedObject("ghost")).getTotalPlayTime()); + if(FileUtilities.doesFileExist("scripts/buffs/" + buffName + ".py")) + core.scriptService.callScript("scripts/buffs/", buffName, "setup", core, ((buffer == null) ? creature : buffer), buff); for (final Buff otherBuff : creature.getBuffList()) { if (buff.getGroup1().equals(otherBuff.getGroup1())) @@ -110,7 +112,7 @@ public class BuffService implements INetworkDispatch { } if(FileUtilities.doesFileExist("scripts/buffs/" + buffName + ".py")) - core.scriptService.callScript("scripts/buffs/", buffName, "setup", core, creature, buff); + core.scriptService.callScript("scripts/buffs/", buffName, "add", core, creature, buff); creature.addBuff(buff); @@ -153,6 +155,10 @@ public class BuffService implements INetworkDispatch { } } + if (buffer != null && creature.getGroupId() != 0 && creature.getGroupId() == buffer.getGroupId()) { + buff.setGroupBufferId(buffer.getObjectID()); + } + return buff; } @@ -168,7 +174,7 @@ public class BuffService implements INetworkDispatch { creature.removeDot(dot); } if(FileUtilities.doesFileExist("scripts/buffs/" + buff.getBuffName() + ".py")) - core.scriptService.callScript("scripts/buffs/", buff.getBuffName(), "removeBuff", core, creature, buff); + core.scriptService.callScript("scripts/buffs/", buff.getBuffName(), "remove", core, creature, buff); creature.removeBuff(buff); for (String effect : buff.getParticleEffect().split(",")) { @@ -215,20 +221,19 @@ public class BuffService implements INetworkDispatch { public void addGroupBuff(final CreatureObject buffer, String buffName) { if(buffer.getGroupId() == 0) { - doAddBuff(buffer, buffName); + doAddBuff(buffer, buffName, null); return; } GroupObject group = (GroupObject) core.objectService.getObject(buffer.getGroupId()); if(group == null) { - doAddBuff(buffer, buffName); + doAddBuff(buffer, buffName, null); return; } for(SWGObject member : group.getMemberList()) { - Buff buff = doAddBuff((CreatureObject) member, buffName); - buff.setGroupBufferId(buffer.getObjectID()); + Buff buff = doAddBuff((CreatureObject) member, buffName, buffer); } } diff --git a/src/services/GroupService.java b/src/services/GroupService.java index 5b1a9f07..4946f503 100644 --- a/src/services/GroupService.java +++ b/src/services/GroupService.java @@ -188,8 +188,7 @@ public class GroupService implements INetworkDispatch { if(otherMember != member) { for(Buff buff : ((CreatureObject) otherMember).getBuffList().get()) { if(buff.isGroupBuff()) { - Buff newBuff = core.buffService.doAddBuff(member, buff.getBuffName()); - newBuff.setGroupBufferId(buff.getGroupBufferId()); + core.buffService.doAddBuff(member, buff.getBuffName(), (CreatureObject) core.objectService.getObject(buff.getGroupBufferId())); } } return; From ca1ff0b98f1e52dbaf8d13cde962c20143d74e5c Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sat, 22 Mar 2014 10:55:29 -0400 Subject: [PATCH 056/107] Fixed buffer for sendListDelta --- src/resources/objects/creature/CreatureMessageBuilder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index f3128acb..e3facb65 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -1061,12 +1061,12 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { case 3: case 6: { - object.notifyObservers(buffer, true); + object.notifyObservers(buffer.flip(), true); } default: { if (object.getClient() != null && object.getClient().getSession() != null) { - object.getClient().getSession().write(buffer); + object.getClient().getSession().write(buffer.flip()); } } } From ffc9aec1b196244e632f109c6b2d82cb124176fe Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sat, 22 Mar 2014 11:47:37 -0400 Subject: [PATCH 057/107] Added Inspiration ticks, effects for Multi-Tier Performance Abilities (BugFix) Build-A-Buff applies correct stats now -- NOTE: Stats that the player does not have yet may not show in character sheet but the server will recognize still recognize their new stats (Added) Inspiration Ticks (BugFix) Inspiration Buffs time corresponds to the players inspiration ticks. (BugFix) "Watch" on radial menu working again (Added) Put in the effects for the multi-tiered performance abilities (Feature) You can now type /[performance effect] [tier number] to use that specific effect (BugFix) showFlyText boolean for showing to observers or not (fixes other players exp gain shown to other players) (Code) Few minor additions/fixes --- scripts/buffs/buildabuff_inspiration.py | 7 +- scripts/commands/colorlights.py | 17 ++++- scripts/commands/dazzle.py | 17 ++++- scripts/commands/distract.py | 17 ++++- scripts/commands/firejet.py | 19 +++-- scripts/commands/inspire.py | 2 +- scripts/commands/smokebomb.py | 17 ++++- scripts/commands/spotlight.py | 23 +++--- scripts/commands/ventriloquism.py | 17 ++++- .../expertise_en_intense_performer_1.py | 5 +- .../expertise_en_intense_performer_2.py | 3 +- .../expertise_en_intense_performer_3.py | 3 +- .../expertise_en_intense_performer_4.py | 3 +- .../expertise_en_lasting_impression_1.py | 3 +- .../expertise_en_lasting_impression_2.py | 3 +- .../expertise_en_lasting_impression_3.py | 3 +- .../expertise_en_lasting_impression_4.py | 3 +- scripts/radial/player.py | 4 +- .../objectControllerObjects/ShowFlyText.java | 11 ++- src/resources/common/MathUtilities.java | 24 ++++++ .../objects/creature/CreatureObject.java | 9 ++- .../objects/tangible/TangibleObject.java | 12 +++ src/services/ConnectionService.java | 14 ++++ src/services/EntertainmentService.java | 75 +++++++++++++++---- 24 files changed, 242 insertions(+), 69 deletions(-) diff --git a/scripts/buffs/buildabuff_inspiration.py b/scripts/buffs/buildabuff_inspiration.py index c6bf7407..801733ca 100644 --- a/scripts/buffs/buildabuff_inspiration.py +++ b/scripts/buffs/buildabuff_inspiration.py @@ -8,10 +8,13 @@ def setup(core, actor, buff): if buffWorkshop is None: return - buff.setDuration(3600) #1 hour - + attached = actor.getAttachment('inspireDuration') + print (attached) + buff.setDuration(float(actor.getAttachment('inspireDuration') * 60)) + print ('Buff Duration: ' + str(actor.getAttachment('inspireDuration'))) for BuffItem in buffWorkshop: core.skillModService.addSkillMod(actor, BuffItem.getSkillName(), BuffItem.getAffectAmount()) + print ('Gave skill mod ' + BuffItem.getSkillName() + ' with affect of ' + str(BuffItem.getAffectAmount())) return diff --git a/scripts/commands/colorlights.py b/scripts/commands/colorlights.py index abaa8dd2..b92c9c34 100644 --- a/scripts/commands/colorlights.py +++ b/scripts/commands/colorlights.py @@ -6,14 +6,23 @@ def setup(): def run(core, actor, target, commandString): command = 'ColorLights1' - effect = 'entertainer_color_lights_level_1.cef' + effect = 'clienteffect/entertainer_color_lights_level_1.cef' + rLevel = 4 # minimum level to perform this effect - if actor.getLevel() < 4: + if commandString == '2': + command = 'ColorLights2' + effect = 'clienteffect/entertainer_color_lights_level_2.cef' + rLevel = 20 + + elif commandString == '3': + command = 'ColorLights3' + effect = 'clienteffect/entertainer_color_lights_level_3.cef' + rLevel = 50 + + if actor.getLevel() < rLevel: actor.sendSystemMessage('@performance:effect_lack_skill_self') return - # TODO: Find out levels for other colored light 2 and 3 - if core.entertainmentService.performEffect(actor, command, effect, target) is True: actor.sendSystemMessage('@performance:effect_perform_color_lights', 0) return \ No newline at end of file diff --git a/scripts/commands/dazzle.py b/scripts/commands/dazzle.py index 718c6c5d..25ac5068 100644 --- a/scripts/commands/dazzle.py +++ b/scripts/commands/dazzle.py @@ -6,14 +6,23 @@ def setup(): def run(core, actor, target, commandString): command = 'Dazzle1' - effect = 'entertainer_dazzle_level_1.cef' + effect = 'clienteffect/entertainer_dazzle_level_1.cef' + rLevel = 10 # minimum level to perform this effect - if actor.getLevel() < 10: + if commandString == '2': + command = 'Dazzle2' + effect = 'clienteffect/entertainer_dazzle_level_2.cef' + rLevel = 20 + + elif commandString == '3': + command = 'Dazzle3' + effect = 'clienteffect/entertainer_dazzle_level_3.cef' + rLevel = 30 + + if actor.getLevel() < rLevel: actor.sendSystemMessage('@performance:effect_lack_skill_self') return - # TODO: Find out levels for other dazzle 2 and 3 - if core.entertainmentService.performEffect(actor, command, effect, target) is True: actor.sendSystemMessage('@performance:effect_perform_dazzle', 0) return \ No newline at end of file diff --git a/scripts/commands/distract.py b/scripts/commands/distract.py index 6c1eb887..d92cb55e 100644 --- a/scripts/commands/distract.py +++ b/scripts/commands/distract.py @@ -6,14 +6,23 @@ def setup(): def run(core, actor, target, commandString): command = 'Distract1' - effect = 'entertainer_distract_level_1.cef' + effect = 'clienteffect/entertainer_distract_level_1.cef' + rLevel = 18 # minimum level to perform this effect - if actor.getLevel() < 18: + if commandString == '2': + command = 'Distract2' + effect = 'clienteffect/entertainer_distract_level_2.cef' + rLevel = 50 + + elif commandString == '3': + command = 'Distract3' + effect = 'clienteffect/entertainer_distract_level_3.cef' + rLevel = 75 + + if actor.getLevel() < rLevel: actor.sendSystemMessage('@performance:effect_lack_skill_self') return - # TODO: Find out levels for other distract 2 and 3 - if core.entertainmentService.performEffect(actor, command, effect, target) is True: actor.sendSystemMessage('@performance:effect_perform_distract', 0) return \ No newline at end of file diff --git a/scripts/commands/firejet.py b/scripts/commands/firejet.py index 42179337..63a5ba54 100644 --- a/scripts/commands/firejet.py +++ b/scripts/commands/firejet.py @@ -6,14 +6,23 @@ def setup(): def run(core, actor, target, commandString): command = 'FireJets1' - effect = 'entertainer_fire_jets_level_1.cef' + effect = 'clienteffect/entertainer_fire_jets_level_1.cef' + rLevel = 26 # minimum level to perform this effect - if actor.getLevel() < 26: + if commandString == '2': + command = 'FireJets2' + effect = 'clienteffect/entertainer_fire_jets_level_2.cef' + rLevel = 50 + + elif commandString == '3': + command = 'FireJets3' + effect = 'clienteffect/entertainer_fire_jets_level_3.cef' + rLevel = 75 + + if actor.getLevel() < rLevel: actor.sendSystemMessage('@performance:effect_lack_skill_self') return - - # TODO: Find out levels for other firejets 2 and 3 - + if core.entertainmentService.performEffect(actor, command, effect, target) is True: actor.sendSystemMessage('@performance:effect_perform_fire_jets', 0) return \ No newline at end of file diff --git a/scripts/commands/inspire.py b/scripts/commands/inspire.py index 531aa1e2..dea0e544 100644 --- a/scripts/commands/inspire.py +++ b/scripts/commands/inspire.py @@ -7,7 +7,7 @@ def setup(): def run(core, actor, target, commandString): playerObject = actor.getSlottedObject('ghost') - print playerObject.getProfession() + if not playerObject or playerObject.getProfession() != "entertainer_1a": return diff --git a/scripts/commands/smokebomb.py b/scripts/commands/smokebomb.py index 01b2bf52..ace39704 100644 --- a/scripts/commands/smokebomb.py +++ b/scripts/commands/smokebomb.py @@ -6,14 +6,23 @@ def setup(): def run(core, actor, target, commandString): command = 'SmokeBomb1' - effect = 'entertainer_smoke_bomb_level_1.cef' + effect = 'clienteffect/entertainer_smoke_bomb_level_1.cef' + rLevel = 50 # minimum level to perform this effect - if actor.getLevel() < 50: + if commandString == '2': + command = 'SmokeBomb2' + effect = 'clienteffect/entertainer_smoke_bomb_level_2.cef' + rLevel = 75 + + elif commandString == '3': + command = 'SmokeBomb3' + effect = 'clienteffect/entertainer_smoke_bomb_level_3.cef' + rLevel = 90 + + if actor.getLevel() < rLevel: actor.sendSystemMessage('@performance:effect_lack_skill_self') return - # TODO: Find out levels for other smoke bomb 2 and 3 - if core.entertainmentService.performEffect(actor, command, effect, target) is True: actor.sendSystemMessage('@performance:effect_perform_smoke_bomb', 0) return \ No newline at end of file diff --git a/scripts/commands/spotlight.py b/scripts/commands/spotlight.py index 25341536..1f94394a 100644 --- a/scripts/commands/spotlight.py +++ b/scripts/commands/spotlight.py @@ -8,17 +8,22 @@ def run(core, actor, target, commandString): command = 'SpotLight1' effect = 'clienteffect/entertainer_spot_light_level_1.cef' + rLevel = 1 # minimum level to perform this effect - # TODO: Figure out what levels the spotlight effects upgraded at. - - if actor.getLevel() >= 80: - command == 'SpotLight3' - effect = 'clienteffect/entertainer_spot_light_level_3.cef' - - elif actor.getLevel() >= 40: - command == 'SpotLight2' + if commandString == '2': + command = 'SpotLight2' effect = 'clienteffect/entertainer_spot_light_level_2.cef' - + rLevel = 20 + + elif commandString == '3': + command = 'SpotLight3' + effect = 'clienteffect/entertainer_spot_light_level_3.cef' + rLevel = 30 + + if actor.getLevel() < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self') + return + if core.entertainmentService.performEffect(actor, command, effect, None) is True: actor.sendSystemMessage('@performance:effect_perform_spot_light', 0) return diff --git a/scripts/commands/ventriloquism.py b/scripts/commands/ventriloquism.py index 198516f4..34d941e9 100644 --- a/scripts/commands/ventriloquism.py +++ b/scripts/commands/ventriloquism.py @@ -6,14 +6,23 @@ def setup(): def run(core, actor, target, commandString): command = 'Ventriloquism1' - effect = 'entertainer_ventriloquism_level_1.cef' + effect = 'clienteffect/entertainer_ventriloquism_level_1.cef' + rLevel = 58 # minimum level to perform this effect - if actor.getLevel() < 58: + if commandString == '2': + command = 'Ventriloquism2' + effect = 'clienteffect/entertainer_ventriloquism_level_2.cef' + rLevel = 75 + + elif commandString == '3': + command = 'Ventriloquism3' + effect = 'clienteffect/entertainer_ventriloquism_level_3.cef' + rLevel = 90 + + if actor.getLevel() < rLevel: actor.sendSystemMessage('@performance:effect_lack_skill_self') return - # TODO: Find out levels for other ventriloquism 2 and 3 - if core.entertainmentService.performEffect(actor, command, effect, target) is True: actor.sendSystemMessage('@performance:effect_perform_ventriloquism', 0) return \ No newline at end of file diff --git a/scripts/expertise/expertise_en_intense_performer_1.py b/scripts/expertise/expertise_en_intense_performer_1.py index cf9f9699..8925253a 100644 --- a/scripts/expertise/expertise_en_intense_performer_1.py +++ b/scripts/expertise/expertise_en_intense_performer_1.py @@ -11,8 +11,8 @@ def addExpertisePoint(core, actor): return actor.addSkill('expertise_en_intense_performer_1') + core.skillModService.addSkillMod(actor, 'expertise_en_inspire_pulse_duration_increase', 1) addAbilities(core, actor, player) - return def removeExpertisePoint(core, actor): @@ -26,9 +26,8 @@ def removeExpertisePoint(core, actor): return actor.removeSkill('expertise_en_intense_performer_1') - + core.skillModService.deductSkillMod(actor, 'expertise_en_inspire_pulse_duration_increase', 1) removeAbilities(core, actor, player) - return # this checks what abilities the player gets by level, need to also call this on level-up diff --git a/scripts/expertise/expertise_en_intense_performer_2.py b/scripts/expertise/expertise_en_intense_performer_2.py index 0582a021..f0327c0c 100644 --- a/scripts/expertise/expertise_en_intense_performer_2.py +++ b/scripts/expertise/expertise_en_intense_performer_2.py @@ -11,6 +11,7 @@ def addExpertisePoint(core, actor): return actor.addSkill('expertise_en_intense_performer_2') + core.skillModService.addSkillMod(actor, 'expertise_en_inspire_pulse_duration_increase', 1) addAbilities(core, actor, player) return @@ -26,7 +27,7 @@ def removeExpertisePoint(core, actor): return actor.removeSkill('expertise_en_intense_performer_2') - + core.skillModService.deductSkillMod(actor, 'expertise_en_inspire_pulse_duration_increase', 1) removeAbilities(core, actor, player) return diff --git a/scripts/expertise/expertise_en_intense_performer_3.py b/scripts/expertise/expertise_en_intense_performer_3.py index 5ee49acf..ac3eb24a 100644 --- a/scripts/expertise/expertise_en_intense_performer_3.py +++ b/scripts/expertise/expertise_en_intense_performer_3.py @@ -11,6 +11,7 @@ def addExpertisePoint(core, actor): return actor.addSkill('expertise_en_intense_performer_3') + core.skillModService.addSkillMod(actor, 'expertise_en_inspire_pulse_duration_increase', 1) addAbilities(core, actor, player) return @@ -26,7 +27,7 @@ def removeExpertisePoint(core, actor): return actor.removeSkill('expertise_en_intense_performer_3') - + core.skillModService.deductSkillMod(actor, 'expertise_en_inspire_pulse_duration_increase', 1) removeAbilities(core, actor, player) return diff --git a/scripts/expertise/expertise_en_intense_performer_4.py b/scripts/expertise/expertise_en_intense_performer_4.py index 29b5eb73..5e316992 100644 --- a/scripts/expertise/expertise_en_intense_performer_4.py +++ b/scripts/expertise/expertise_en_intense_performer_4.py @@ -11,6 +11,7 @@ def addExpertisePoint(core, actor): return actor.addSkill('expertise_en_intense_performer_4') + core.skillModService.addSkillMod(actor, 'expertise_en_inspire_pulse_duration_increase', 1) addAbilities(core, actor, player) return @@ -26,7 +27,7 @@ def removeExpertisePoint(core, actor): return actor.removeSkill('expertise_en_intense_performer_4') - + core.skillModService.deductSkillMod(actor, 'expertise_en_inspire_pulse_duration_increase', 1) removeAbilities(core, actor, player) return diff --git a/scripts/expertise/expertise_en_lasting_impression_1.py b/scripts/expertise/expertise_en_lasting_impression_1.py index 960c9b75..1ce042fc 100644 --- a/scripts/expertise/expertise_en_lasting_impression_1.py +++ b/scripts/expertise/expertise_en_lasting_impression_1.py @@ -11,6 +11,7 @@ def addExpertisePoint(core, actor): return actor.addSkill('expertise_en_lasting_impression_1') + core.skillModService.addSkillMod(actor, 'expertise_en_inspire_buff_duration_increase', 30) addAbilities(core, actor, player) return @@ -26,7 +27,7 @@ def removeExpertisePoint(core, actor): return actor.removeSkill('expertise_en_lasting_impression_1') - + core.skillModService.deductSkillMod(actor, 'expertise_en_inspire_buff_duration_increase', 30) removeAbilities(core, actor, player) return diff --git a/scripts/expertise/expertise_en_lasting_impression_2.py b/scripts/expertise/expertise_en_lasting_impression_2.py index 0ef56c25..5daf6031 100644 --- a/scripts/expertise/expertise_en_lasting_impression_2.py +++ b/scripts/expertise/expertise_en_lasting_impression_2.py @@ -11,6 +11,7 @@ def addExpertisePoint(core, actor): return actor.addSkill('expertise_en_lasting_impression_2') + core.skillModService.addSkillMod(actor, 'expertise_en_inspire_buff_duration_increase', 30) addAbilities(core, actor, player) return @@ -26,7 +27,7 @@ def removeExpertisePoint(core, actor): return actor.removeSkill('expertise_en_lasting_impression_2') - + core.skillModService.deductSkillMod(actor, 'expertise_en_inspire_buff_duration_increase', 30) removeAbilities(core, actor, player) return diff --git a/scripts/expertise/expertise_en_lasting_impression_3.py b/scripts/expertise/expertise_en_lasting_impression_3.py index 74107ef2..8a4642bd 100644 --- a/scripts/expertise/expertise_en_lasting_impression_3.py +++ b/scripts/expertise/expertise_en_lasting_impression_3.py @@ -11,6 +11,7 @@ def addExpertisePoint(core, actor): return actor.addSkill('expertise_en_lasting_impression_3') + core.skillModService.addSkillMod(actor, 'expertise_en_inspire_buff_duration_increase', 30) addAbilities(core, actor, player) return @@ -26,7 +27,7 @@ def removeExpertisePoint(core, actor): return actor.removeSkill('expertise_en_lasting_impression_3') - + core.skillModService.deductSkillMod(actor, 'expertise_en_inspire_buff_duration_increase', 30) removeAbilities(core, actor, player) return diff --git a/scripts/expertise/expertise_en_lasting_impression_4.py b/scripts/expertise/expertise_en_lasting_impression_4.py index b71d1b91..086a38c9 100644 --- a/scripts/expertise/expertise_en_lasting_impression_4.py +++ b/scripts/expertise/expertise_en_lasting_impression_4.py @@ -11,6 +11,7 @@ def addExpertisePoint(core, actor): return actor.addSkill('expertise_en_lasting_impression_4') + core.skillModService.addSkillMod(actor, 'expertise_en_inspire_buff_duration_increase', 30) addAbilities(core, actor, player) return @@ -26,7 +27,7 @@ def removeExpertisePoint(core, actor): return actor.removeSkill('expertise_en_lasting_impression_4') - + core.skillModService.deductSkillMod(actor, 'expertise_en_inspire_buff_duration_increase', 30) removeAbilities(core, actor, player) return diff --git a/scripts/radial/player.py b/scripts/radial/player.py index 3ca2cc75..4b6d74bd 100644 --- a/scripts/radial/player.py +++ b/scripts/radial/player.py @@ -5,9 +5,9 @@ import sys def createRadial(core, owner, target, radials): if target.getPosture() == Posture.SkillAnimating: if target.getPerformanceType() is True: - radials.add(RadialOptions(0, 140, 1, 'Watch')) + radials.add(RadialOptions(0, 140, 3, 'Watch')) else: - radials.add(RadialOptions(0, 140, 1, 'Listen')) + radials.add(RadialOptions(0, 140, 3, 'Listen')) return diff --git a/src/protocol/swg/objectControllerObjects/ShowFlyText.java b/src/protocol/swg/objectControllerObjects/ShowFlyText.java index 41325368..f47bbbb2 100644 --- a/src/protocol/swg/objectControllerObjects/ShowFlyText.java +++ b/src/protocol/swg/objectControllerObjects/ShowFlyText.java @@ -27,6 +27,7 @@ import org.apache.mina.core.buffer.IoBuffer; import protocol.swg.ObjControllerMessage; import resources.common.RGB; +import resources.common.StringUtilities; public class ShowFlyText extends ObjControllerObject { @@ -70,6 +71,7 @@ public class ShowFlyText extends ObjControllerObject { this.scale = scale; this.color = color; this.alternativeStructure = true; + this.displayType = displayType; } @Override @@ -117,13 +119,16 @@ public class ShowFlyText extends ObjControllerObject { result.putLong(0); result.putLong(0); result.putLong(0); - result.put(getUnicodeString(customText)); - result.putShort(xp); + result.put(getUnicodeString(customText)); // %TO? + result.putShort(xp); // %DI ? result.putLong(0); result.putFloat(scale); result.put(color.getBytes()); result.putInt(displayType); - return result.flip(); + + result.flip(); + //StringUtilities.printBytes(result.array()); + return result; } } diff --git a/src/resources/common/MathUtilities.java b/src/resources/common/MathUtilities.java index 8cf73cc0..8decf30b 100644 --- a/src/resources/common/MathUtilities.java +++ b/src/resources/common/MathUtilities.java @@ -21,6 +21,8 @@ ******************************************************************************/ package resources.common; +import java.math.BigDecimal; + import engine.resources.scene.*; public class MathUtilities { @@ -43,5 +45,27 @@ public class MathUtilities { q1.w * q2.z + q1.z * q2.w + q1.x * q2.y - q1.y * q2.x); } + + /** + * Converts seconds to a whole hour. + * @author Waverunner + * @param seconds + * @return hour(s) + */ + public static int secondsToWholeHours(int seconds) { + BigDecimal dec = new BigDecimal(seconds); + return dec.divide(new BigDecimal(3600), BigDecimal.ROUND_FLOOR).intValue(); + } + + /** + * Converts seconds to minutes of the hour. + * @author Waverunner + * @param seconds + * @return hour(s) + */ + public static int secondsToHourMinutes(int seconds) { + BigDecimal dec = new BigDecimal(seconds); + return dec.remainder(new BigDecimal(3600)).divide(new BigDecimal(60), BigDecimal.ROUND_FLOOR).intValue(); + } } diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 46d13369..012324e9 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -435,11 +435,15 @@ public class CreatureObject extends TangibleObject implements IPersistent { } public ScheduledFuture getInspirationTick() { - return inspirationTick; + synchronized(objectMutex) { + return inspirationTick; + } } public void setInspirationTick(ScheduledFuture inspirationTick) { - this.inspirationTick = inspirationTick; + synchronized(objectMutex) { + this.inspirationTick = inspirationTick; + } } @Override @@ -570,6 +574,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { public void addSkillMod(String name, int base) { if(getSkillMod(name) == null) { + // TODO: This will need to be fixed as it doesn't update in the character sheet properly (wrong delta) SkillMod skillMod = new SkillMod(); skillMod.setBase(base); skillMod.setSkillModString(name); diff --git a/src/resources/objects/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index 587daa91..edadfaf2 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -321,6 +321,18 @@ public class TangibleObject extends SWGObject { } } + public void showFlyText(String stfFile, String stfString, String customText, int xp, float scale, RGB color, int displayType, int unkInt) { + Set observers = getObservers(); + + if (getClient() != null) { + getClient().getSession().write((new ObjControllerMessage(0x0000000B, new ShowFlyText(getObjectID(), getObjectID(), unkInt, 1, 1, -1, stfFile, stfString, customText, xp, scale, color, displayType))).serialize()); + } + + for (Client client : observers) { + client.getSession().write((new ObjControllerMessage(0x0000000B, new ShowFlyText(client.getParent().getObjectID(), getObjectID(), unkInt, 1, 1, -1, stfFile, stfString, customText, xp, scale, color, displayType))).serialize()); + } + } + public void playEffectObject(String effectFile, String commandString) { notifyObservers(new PlayClientEffectObjectMessage(effectFile, getObjectID(), commandString), true); } diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index c0d5405e..9791848a 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -195,6 +195,20 @@ public class ConnectionService implements INetworkDispatch { object.setInviteCounter(0); object.setInviteSenderId(0); object.setInviteSenderName(""); + + if(object.getAttachment("inspireDuration") != null) + object.setAttachment("inspireDuration", null); + + if(object.getInspirationTick() != null) { + object.getInspirationTick().cancel(true); + object.setInspirationTick(null); + } + + if(object.getSpectatorTask() != null) { + object.getSpectatorTask().cancel(true); + object.setSpectatorTask(null); + } + core.groupService.handleGroupDisband(object); for (CreatureObject opponent : object.getDuelList()) { diff --git a/src/services/EntertainmentService.java b/src/services/EntertainmentService.java index b45b0c8d..bc93d2cc 100644 --- a/src/services/EntertainmentService.java +++ b/src/services/EntertainmentService.java @@ -24,13 +24,16 @@ import protocol.swg.objectControllerObjects.BuffBuilderEndMessage; import protocol.swg.objectControllerObjects.BuffBuilderStartMessage; import resources.common.BuffBuilder; import resources.common.Console; +import resources.common.MathUtilities; import resources.common.ObjControllerOpcodes; import resources.common.Performance; import resources.common.PerformanceEffect; +import resources.common.RGB; import resources.common.StringUtilities; import resources.datatables.Posture; import resources.objects.Buff; import resources.objects.BuffItem; +import resources.objects.SWGList; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; @@ -38,6 +41,7 @@ import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; import engine.clients.Client; import engine.resources.objects.SWGObject; +import engine.resources.objects.SkillMod; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; @@ -70,7 +74,7 @@ public class EntertainmentService implements INetworkDispatch { public void handlePacket(IoSession session, IoBuffer data) throws Exception { data.order(ByteOrder.LITTLE_ENDIAN); - StringUtilities.printBytes(data.array()); + Client client = core.getClient(session); if(client == null) @@ -145,8 +149,8 @@ public class EntertainmentService implements INetworkDispatch { Vector statBuffs = sentPacket.getStatBuffs(); - SWGObject buffer = core.objectService.getObject(sentPacket.getBufferId()); - SWGObject buffRecipient = core.objectService.getObject(sentPacket.getBuffRecipientId()); + CreatureObject buffer = (CreatureObject) core.objectService.getObject(sentPacket.getBufferId()); + CreatureObject buffRecipient = (CreatureObject) core.objectService.getObject(sentPacket.getBuffRecipientId()); if (buffer != buffRecipient) { @@ -354,7 +358,7 @@ public class EntertainmentService implements INetworkDispatch { core.commandService.registerCommand("ventriloquism"); } - public void giveInspirationBuff(SWGObject reciever, Vector buffVector) { + public void giveInspirationBuff(CreatureObject reciever, Vector buffVector) { CreatureObject buffCreature = (CreatureObject) reciever; Vector availableStats = buffBuilderSkills; @@ -372,19 +376,13 @@ public class EntertainmentService implements INetworkDispatch { BuffItem stat = new BuffItem(builder.getStatAffects(), item.getInvested(), item.getEntertainerBonus()); stat.setAffectAmount(affectTotal); - - /*System.out.println("Invested Points: " + item.getInvested()); - System.out.println("Entertainer Bonus: " + item.getEntertainerBonus()); - System.out.println("Affect Total: " + affectTotal);*/ stats.add(stat); - - break; } } } - reciever.setAttachment("buffWorkshop", buffVector); + reciever.setAttachment("buffWorkshop", stats); core.buffService.addBuffToCreature(buffCreature, "buildabuff_inspiration"); @@ -481,6 +479,7 @@ public class EntertainmentService implements INetworkDispatch { } public void startSpectating(final CreatureObject spectator, final CreatureObject performer) { + final ScheduledFuture spectatorTask = scheduler.scheduleAtFixedRate(new Runnable() { @Override @@ -499,14 +498,20 @@ public class EntertainmentService implements INetworkDispatch { } spectator.setMoodAnimation("neutral"); performer.removeAudience(spectator); - - spectator.getSpectatorTask().cancel(true); + + if (spectator.getInspirationTick().cancel(true)) + spectator.getSpectatorTask().cancel(true); } } }, 2, 2, TimeUnit.SECONDS); spectator.setSpectatorTask(spectatorTask); + + if(((PlayerObject)performer.getSlottedObject("ghost")).getProfession().equals("entertainer_1a")) { + handleInspirationTicks(spectator, performer); + } + } public void performFlourish(final CreatureObject performer, int flourish) { @@ -547,8 +552,6 @@ public class EntertainmentService implements INetworkDispatch { String performance = (performer.getPerformanceType()) ? "dance" : "music"; - // TODO: Skill Level check - if(performer.isPerformingEffect()) { performer.sendSystemMessage("@performance:effect_wait_self", (byte) 0); return false; @@ -591,6 +594,48 @@ public class EntertainmentService implements INetworkDispatch { return true; } + public void handleInspirationTicks(final CreatureObject spectator, final CreatureObject performer) { + // http://youtu.be/WqyAde-oC7o?t=11m14s << Player watching entertainer (Has ring only, no pet, + 15 min ticks) + // TODO: Camp/Cantina checks for expertise and duration bonus %. Right now only using basic values. + final ScheduledFuture inspirationTick = scheduler.scheduleAtFixedRate(new Runnable() { + + @Override + public void run() { + int time = 0; // current buff duration time (minutes) + int buffCap = 215; // 5 hours 35 minutes - 2 hours (buff duration increase bonus) << Taken from video, doesn't account for performance bonuses etc. + + if (spectator.getAttachment("inspireDuration") != null) + time+= (int) spectator.getAttachment("inspireDuration"); + + if (performer.getSkillMod("expertise_en_inspire_buff_duration_increase") != null) { + SkillMod durationMod = performer.getSkillMod("expertise_en_inspire_buff_duration_increase"); + buffCap += durationMod.getBase() + durationMod.getModifier(); + } + + if (time == buffCap) { + + } else { + int entTick = 10; + if (performer.getSkillMod("expertise_en_inspire_pulse_duration_increase") != null) { + SkillMod pulseMod = performer.getSkillMod("expertise_en_inspire_pulse_duration_increase"); + entTick += pulseMod.getBase() + pulseMod.getModifier(); + } + + int duration = (time + entTick); // minutes + int hMinutes = MathUtilities.secondsToHourMinutes(duration * 60); + int hours = MathUtilities.secondsToWholeHours(duration * 60); + + spectator.showFlyText("spam", "buff_duration_tick_observer", String.valueOf(hours) + " hours , " + hMinutes + " minutes ", 0, (float) 0.66, new RGB(255, 182, 193), 3, 78); + + spectator.setAttachment("inspireDuration", duration); + //System.out.println("Inspire Duration: " + spectator.getAttachment("inspireDuration") + " on " + spectator.getCustomName()); + } + } + + }, 10, 10, TimeUnit.SECONDS); + spectator.setInspirationTick(inspirationTick); + } + @Override public void shutdown() { From a3e7b10372df293badf06a129c2900653bf7edd5 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 02:46:47 +0100 Subject: [PATCH 058/107] Buffs - Permanent duration buffs now correctly replace non-permanent version --- src/services/BuffService.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/services/BuffService.java b/src/services/BuffService.java index 662dea25..4c1811bc 100644 --- a/src/services/BuffService.java +++ b/src/services/BuffService.java @@ -97,10 +97,9 @@ public class BuffService implements INetworkDispatch { } else { buff.setStacks(buff.getMaxStacks()); } - - if (otherBuff.getRemainingDuration() > buff.getDuration() && otherBuff.getStacks() >= otherBuff.getMaxStacks()) { - return null; - } + if (buff.getDuration() != -1.0) + if (otherBuff.getRemainingDuration() > buff.getDuration() && otherBuff.getStacks() >= otherBuff.getMaxStacks()) + return null; } removeBuffFromCreature(creature, otherBuff); From ac7136edc70b638456ebaab033bb75604e4e90fc Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 02:59:25 +0100 Subject: [PATCH 059/107] Officer - Fixed buff duration and errors --- scripts/buffs/of_buff_def_1.py | 4 ++++ scripts/buffs/of_charge_1.py | 2 ++ scripts/buffs/of_deb_def_1.py | 3 +++ scripts/buffs/of_deb_def_2.py | 3 +++ scripts/buffs/of_deb_def_3.py | 3 +++ scripts/buffs/of_deb_def_4.py | 3 +++ scripts/buffs/of_deb_def_5.py | 3 +++ scripts/buffs/of_deb_def_6.py | 3 +++ scripts/buffs/of_deb_def_7.py | 3 +++ scripts/buffs/of_deb_def_8.py | 3 +++ scripts/buffs/of_drillmaster_1.py | 3 +++ scripts/buffs/of_focus_fire_1.py | 3 +++ scripts/buffs/of_focus_fire_2.py | 3 +++ scripts/buffs/of_focus_fire_3.py | 3 +++ scripts/buffs/of_focus_fire_4.py | 3 +++ scripts/buffs/of_focus_fire_5.py | 3 +++ scripts/buffs/of_focus_fire_6.py | 3 +++ scripts/buffs/of_scatter_1.py | 2 ++ scripts/commands/of_buff_def_1.py | 5 +---- scripts/commands/of_buff_def_2.py | 5 +---- scripts/commands/of_buff_def_3.py | 5 +---- scripts/commands/of_buff_def_4.py | 5 +---- scripts/commands/of_buff_def_5.py | 5 +---- scripts/commands/of_buff_def_6.py | 5 +---- scripts/commands/of_buff_def_7.py | 5 +---- scripts/commands/of_buff_def_8.py | 5 +---- scripts/commands/of_buff_def_9.py | 5 +---- scripts/commands/of_charge_1.py | 2 +- scripts/commands/of_focus_fire_1.py | 7 +------ scripts/commands/of_focus_fire_2.py | 7 +------ scripts/commands/of_focus_fire_3.py | 7 +------ scripts/commands/of_focus_fire_4.py | 5 +++-- scripts/commands/of_focus_fire_5.py | 5 +++-- scripts/commands/of_focus_fire_6.py | 5 +++-- 34 files changed, 75 insertions(+), 61 deletions(-) diff --git a/scripts/buffs/of_buff_def_1.py b/scripts/buffs/of_buff_def_1.py index 68455f5b..f1e27d04 100644 --- a/scripts/buffs/of_buff_def_1.py +++ b/scripts/buffs/of_buff_def_1.py @@ -1,6 +1,10 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + return + return def add(core, actor, buff): diff --git a/scripts/buffs/of_charge_1.py b/scripts/buffs/of_charge_1.py index db0d0aa7..104612e7 100644 --- a/scripts/buffs/of_charge_1.py +++ b/scripts/buffs/of_charge_1.py @@ -1,6 +1,8 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_of_group_buff'): + buff.setDuration(buff.getDuration() + actor.getSkillModBase('expertise_buff_duration_line_of_group_buff')) return def add(core, actor, buff): diff --git a/scripts/buffs/of_deb_def_1.py b/scripts/buffs/of_deb_def_1.py index 793bdf94..13cdab58 100644 --- a/scripts/buffs/of_deb_def_1.py +++ b/scripts/buffs/of_deb_def_1.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) return def add(core, actor, buff): diff --git a/scripts/buffs/of_deb_def_2.py b/scripts/buffs/of_deb_def_2.py index b8489de2..097ffe2b 100644 --- a/scripts/buffs/of_deb_def_2.py +++ b/scripts/buffs/of_deb_def_2.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) return def add(core, actor, buff): diff --git a/scripts/buffs/of_deb_def_3.py b/scripts/buffs/of_deb_def_3.py index 9ca704a3..c3b28b0b 100644 --- a/scripts/buffs/of_deb_def_3.py +++ b/scripts/buffs/of_deb_def_3.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) return def add(core, actor, buff): diff --git a/scripts/buffs/of_deb_def_4.py b/scripts/buffs/of_deb_def_4.py index 62a832dd..e93dde70 100644 --- a/scripts/buffs/of_deb_def_4.py +++ b/scripts/buffs/of_deb_def_4.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) return def add(core, actor, buff): diff --git a/scripts/buffs/of_deb_def_5.py b/scripts/buffs/of_deb_def_5.py index 4c8e28fa..233ec4dd 100644 --- a/scripts/buffs/of_deb_def_5.py +++ b/scripts/buffs/of_deb_def_5.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) return def add(core, actor, buff): diff --git a/scripts/buffs/of_deb_def_6.py b/scripts/buffs/of_deb_def_6.py index eb41e77b..cdb29995 100644 --- a/scripts/buffs/of_deb_def_6.py +++ b/scripts/buffs/of_deb_def_6.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) return def add(core, actor, buff): diff --git a/scripts/buffs/of_deb_def_7.py b/scripts/buffs/of_deb_def_7.py index c1e5dd6e..9e9fedf5 100644 --- a/scripts/buffs/of_deb_def_7.py +++ b/scripts/buffs/of_deb_def_7.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) return def add(core, actor, buff): diff --git a/scripts/buffs/of_deb_def_8.py b/scripts/buffs/of_deb_def_8.py index 1ad5b201..6016ba0d 100644 --- a/scripts/buffs/of_deb_def_8.py +++ b/scripts/buffs/of_deb_def_8.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) return def add(core, actor, buff): diff --git a/scripts/buffs/of_drillmaster_1.py b/scripts/buffs/of_drillmaster_1.py index dcb74846..233744a6 100644 --- a/scripts/buffs/of_drillmaster_1.py +++ b/scripts/buffs/of_drillmaster_1.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 2: + buff.setDuration(-1) return def add(core, actor, buff): diff --git a/scripts/buffs/of_focus_fire_1.py b/scripts/buffs/of_focus_fire_1.py index e2afcef8..4e191992 100644 --- a/scripts/buffs/of_focus_fire_1.py +++ b/scripts/buffs/of_focus_fire_1.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) return def add(core, actor, buff): diff --git a/scripts/buffs/of_focus_fire_2.py b/scripts/buffs/of_focus_fire_2.py index 0db33d9d..60404f53 100644 --- a/scripts/buffs/of_focus_fire_2.py +++ b/scripts/buffs/of_focus_fire_2.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) return def add(core, actor, buff): diff --git a/scripts/buffs/of_focus_fire_3.py b/scripts/buffs/of_focus_fire_3.py index b78066de..3420c94c 100644 --- a/scripts/buffs/of_focus_fire_3.py +++ b/scripts/buffs/of_focus_fire_3.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) return def add(core, actor, buff): diff --git a/scripts/buffs/of_focus_fire_4.py b/scripts/buffs/of_focus_fire_4.py index d028d699..a95fb77f 100644 --- a/scripts/buffs/of_focus_fire_4.py +++ b/scripts/buffs/of_focus_fire_4.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) return def add(core, actor, buff): diff --git a/scripts/buffs/of_focus_fire_5.py b/scripts/buffs/of_focus_fire_5.py index 0b5c3e3f..4d084789 100644 --- a/scripts/buffs/of_focus_fire_5.py +++ b/scripts/buffs/of_focus_fire_5.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) return def add(core, actor, buff): diff --git a/scripts/buffs/of_focus_fire_6.py b/scripts/buffs/of_focus_fire_6.py index 4cbaafe1..e091b13f 100644 --- a/scripts/buffs/of_focus_fire_6.py +++ b/scripts/buffs/of_focus_fire_6.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) return def add(core, actor, buff): diff --git a/scripts/buffs/of_scatter_1.py b/scripts/buffs/of_scatter_1.py index 7d7e729d..8309302a 100644 --- a/scripts/buffs/of_scatter_1.py +++ b/scripts/buffs/of_scatter_1.py @@ -1,6 +1,8 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_of_group_buff'): + buff.setDuration(buff.getDuration() + actor.getSkillModBase('expertise_buff_duration_line_of_group_buff')) return def add(core, actor, buff): diff --git a/scripts/commands/of_buff_def_1.py b/scripts/commands/of_buff_def_1.py index d7403af1..90af7887 100644 --- a/scripts/commands/of_buff_def_1.py +++ b/scripts/commands/of_buff_def_1.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_1') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_1') + core.buffService.addGroupBuff(actor, 'of_buff_def_1') return \ No newline at end of file diff --git a/scripts/commands/of_buff_def_2.py b/scripts/commands/of_buff_def_2.py index cd5fd42d..1627ed3c 100644 --- a/scripts/commands/of_buff_def_2.py +++ b/scripts/commands/of_buff_def_2.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_2') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_2') + core.buffService.addGroupBuff(actor, 'of_buff_def_2') return \ No newline at end of file diff --git a/scripts/commands/of_buff_def_3.py b/scripts/commands/of_buff_def_3.py index 85b34c54..1936f539 100644 --- a/scripts/commands/of_buff_def_3.py +++ b/scripts/commands/of_buff_def_3.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_3') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_3') + core.buffService.addGroupBuff(actor, 'of_buff_def_3') return \ No newline at end of file diff --git a/scripts/commands/of_buff_def_4.py b/scripts/commands/of_buff_def_4.py index 0831b80f..0d047c07 100644 --- a/scripts/commands/of_buff_def_4.py +++ b/scripts/commands/of_buff_def_4.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_4') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_4') + core.buffService.addGroupBuff(actor, 'of_buff_def_4') return \ No newline at end of file diff --git a/scripts/commands/of_buff_def_5.py b/scripts/commands/of_buff_def_5.py index f3577253..2e21de66 100644 --- a/scripts/commands/of_buff_def_5.py +++ b/scripts/commands/of_buff_def_5.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_5') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_5') + core.buffService.addGroupBuff(actor, 'of_buff_def_5') return \ No newline at end of file diff --git a/scripts/commands/of_buff_def_6.py b/scripts/commands/of_buff_def_6.py index 890aea37..80517962 100644 --- a/scripts/commands/of_buff_def_6.py +++ b/scripts/commands/of_buff_def_6.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_6') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_6') + core.buffService.addGroupBuff(actor, 'of_buff_def_6') return \ No newline at end of file diff --git a/scripts/commands/of_buff_def_7.py b/scripts/commands/of_buff_def_7.py index 7235a9a0..4d0fe8ba 100644 --- a/scripts/commands/of_buff_def_7.py +++ b/scripts/commands/of_buff_def_7.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_7') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_7') + core.buffService.addGroupBuff(actor, 'of_buff_def_7') return \ No newline at end of file diff --git a/scripts/commands/of_buff_def_8.py b/scripts/commands/of_buff_def_8.py index 3ef2ec72..b5d13337 100644 --- a/scripts/commands/of_buff_def_8.py +++ b/scripts/commands/of_buff_def_8.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_8') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_8') + core.buffService.addGroupBuff(actor, 'of_buff_def_8') return \ No newline at end of file diff --git a/scripts/commands/of_buff_def_9.py b/scripts/commands/of_buff_def_9.py index ecf3917c..1b09914e 100644 --- a/scripts/commands/of_buff_def_9.py +++ b/scripts/commands/of_buff_def_9.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_9') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_9') + core.buffService.addGroupBuff(actor, 'of_buff_def_9') return \ No newline at end of file diff --git a/scripts/commands/of_charge_1.py b/scripts/commands/of_charge_1.py index 8a1c683d..b2a3524e 100644 --- a/scripts/commands/of_charge_1.py +++ b/scripts/commands/of_charge_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_charge_1') + core.buffService.addGroupBuff(actor, 'of_charge_1') return \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_1.py b/scripts/commands/of_focus_fire_1.py index d3a2cfb8..dbd564ec 100644 --- a/scripts/commands/of_focus_fire_1.py +++ b/scripts/commands/of_focus_fire_1.py @@ -4,11 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') - group = core.objectService.getObject(actor.getGroupId()) - if group is not None: - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_focus_fire_1') - return + core.buffService.addGroupBuff(actor, 'of_focus_fire_1') return \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_2.py b/scripts/commands/of_focus_fire_2.py index cafae5bd..406fb584 100644 --- a/scripts/commands/of_focus_fire_2.py +++ b/scripts/commands/of_focus_fire_2.py @@ -4,11 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_focus_fire_2') - group = core.objectService.getObject(actor.getGroupId()) - if group is not None: - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_focus_fire_2') - return + core.buffService.addGroupBuff(actor, 'of_focus_fire_2') return \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_3.py b/scripts/commands/of_focus_fire_3.py index 75129446..ea194a77 100644 --- a/scripts/commands/of_focus_fire_3.py +++ b/scripts/commands/of_focus_fire_3.py @@ -4,11 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_focus_fire_3') - group = core.objectService.getObject(actor.getGroupId()) - if group is not None: - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_focus_fire_3') - return + core.buffService.addGroupBuff(actor, 'of_focus_fire_3') return \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_4.py b/scripts/commands/of_focus_fire_4.py index a5fa51f9..d4645925 100644 --- a/scripts/commands/of_focus_fire_4.py +++ b/scripts/commands/of_focus_fire_4.py @@ -4,5 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') - return \ No newline at end of file + core.buffService.addGroupBuff(actor, 'of_focus_fire_4') + return + \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_5.py b/scripts/commands/of_focus_fire_5.py index a5fa51f9..1ff3a903 100644 --- a/scripts/commands/of_focus_fire_5.py +++ b/scripts/commands/of_focus_fire_5.py @@ -4,5 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') - return \ No newline at end of file + core.buffService.addGroupBuff(actor, 'of_focus_fire_5') + return + \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_6.py b/scripts/commands/of_focus_fire_6.py index a5fa51f9..834a0d25 100644 --- a/scripts/commands/of_focus_fire_6.py +++ b/scripts/commands/of_focus_fire_6.py @@ -4,5 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') - return \ No newline at end of file + core.buffService.addGroupBuff(actor, 'of_focus_fire_6') + return + \ No newline at end of file From 993f9b657e0ceecb67655deb641ec6bb72735418 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 03:06:57 +0100 Subject: [PATCH 060/107] Officer - Scatter is now added to the group --- scripts/commands/of_scatter_1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/commands/of_scatter_1.py b/scripts/commands/of_scatter_1.py index 8ee17071..e4f86354 100644 --- a/scripts/commands/of_scatter_1.py +++ b/scripts/commands/of_scatter_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_scatter_1') + core.buffService.addGroupBuff(actor, 'of_scatter_1') return \ No newline at end of file From b6f89c1139948d437dacd1f149cf79f9cd3933cc Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 03:09:47 +0100 Subject: [PATCH 061/107] Officer - Inspiration and Drillmaster are now added to the group --- scripts/commands/of_drillmaster_1.py | 2 +- scripts/commands/of_inspiration_1.py | 2 +- scripts/commands/of_inspiration_2.py | 2 +- scripts/commands/of_inspiration_3.py | 2 +- scripts/commands/of_inspiration_4.py | 2 +- scripts/commands/of_inspiration_5.py | 2 +- scripts/commands/of_inspiration_6.py | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/commands/of_drillmaster_1.py b/scripts/commands/of_drillmaster_1.py index 0b448c2b..00c17c70 100644 --- a/scripts/commands/of_drillmaster_1.py +++ b/scripts/commands/of_drillmaster_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_drillmaster_1') + core.buffService.addGroupBuff(actor, 'of_drillmaster_1') return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_1.py b/scripts/commands/of_inspiration_1.py index 001b0e69..9f0c3a20 100644 --- a/scripts/commands/of_inspiration_1.py +++ b/scripts/commands/of_inspiration_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_1') + core.buffService.addGroupBuff(actor, 'of_inspiration_1') return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_2.py b/scripts/commands/of_inspiration_2.py index 01dbef43..c7ffcb5e 100644 --- a/scripts/commands/of_inspiration_2.py +++ b/scripts/commands/of_inspiration_2.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_2') + core.buffService.addGroupBuff(actor, 'of_inspiration_2') return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_3.py b/scripts/commands/of_inspiration_3.py index a1d2296f..fd2e8b80 100644 --- a/scripts/commands/of_inspiration_3.py +++ b/scripts/commands/of_inspiration_3.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_3') + core.buffService.addGroupBuff(actor, 'of_inspiration_3') return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_4.py b/scripts/commands/of_inspiration_4.py index d1954310..35bae1ab 100644 --- a/scripts/commands/of_inspiration_4.py +++ b/scripts/commands/of_inspiration_4.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_4') + core.buffService.addGroupBuff(actor, 'of_inspiration_4') return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_5.py b/scripts/commands/of_inspiration_5.py index e2d35933..f9c9ba48 100644 --- a/scripts/commands/of_inspiration_5.py +++ b/scripts/commands/of_inspiration_5.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_5') + core.buffService.addGroupBuff(actor, 'of_inspiration_5') return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_6.py b/scripts/commands/of_inspiration_6.py index c73a2000..ca05422d 100644 --- a/scripts/commands/of_inspiration_6.py +++ b/scripts/commands/of_inspiration_6.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_6') + core.buffService.addGroupBuff(actor, 'of_inspiration_6') return \ No newline at end of file From 984ddf3acb3c7357a241293c2bc9c7e98f5d9c32 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 04:57:43 +0100 Subject: [PATCH 062/107] Items - Issued Pistol --- .../weapon/ranged/pistol/weapon_pistol_02_02.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 scripts/object/weapon/ranged/pistol/weapon_pistol_02_02.py diff --git a/scripts/object/weapon/ranged/pistol/weapon_pistol_02_02.py b/scripts/object/weapon/ranged/pistol/weapon_pistol_02_02.py new file mode 100644 index 00000000..055d033d --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/weapon_pistol_02_02.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_pistol_02_02') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_pistol_02_02') + object.setIntAttribute('required_combat_level', 1) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.4) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '10-26') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Pistol') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file From f351fee4086f64878181860fa24af9d322a03697 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 04:58:18 +0100 Subject: [PATCH 063/107] Items - Commando Carbine --- .../carbine/weapon_npe_commando_carbine_03_01.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 scripts/object/weapon/ranged/carbine/weapon_npe_commando_carbine_03_01.py diff --git a/scripts/object/weapon/ranged/carbine/weapon_npe_commando_carbine_03_01.py b/scripts/object/weapon/ranged/carbine/weapon_npe_commando_carbine_03_01.py new file mode 100644 index 00000000..681e8699 --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/weapon_npe_commando_carbine_03_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_npe_commando_carbine_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_npe_commando_carbine_03_01') + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('required_combat_level', 1) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.6) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '20-40') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Carbine') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file From d6e62341ae3dc8b487fcdcd309357784c7c3d161 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 04:59:38 +0100 Subject: [PATCH 064/107] Items - Officer's Sidearm --- .../ranged/pistol/item_npe_officer_sidearm.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 scripts/object/weapon/ranged/pistol/item_npe_officer_sidearm.py diff --git a/scripts/object/weapon/ranged/pistol/item_npe_officer_sidearm.py b/scripts/object/weapon/ranged/pistol/item_npe_officer_sidearm.py new file mode 100644 index 00000000..3600d8b4 --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/item_npe_officer_sidearm.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_npe_officer_sidearm') + object.setDetailFilename('static_item_d') + object.setDetailName('item_npe_officer_sidearm') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 1) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.4) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '15-25') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Pistol') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file From 3c8886b937ad814f83372fb4222dd29332f54463 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 05:02:24 +0100 Subject: [PATCH 065/107] Items - Jedi Training Polearm --- .../weapon/melee/polearm/weapon_polearm_02_03.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 scripts/object/weapon/melee/polearm/weapon_polearm_02_03.py diff --git a/scripts/object/weapon/melee/polearm/weapon_polearm_02_03.py b/scripts/object/weapon/melee/polearm/weapon_polearm_02_03.py new file mode 100644 index 00000000..c8e1804c --- /dev/null +++ b/scripts/object/weapon/melee/polearm/weapon_polearm_02_03.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_polearm_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_polearm_02_03') + object.setIntAttribute('required_combat_level', 1) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 1) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Kinetic') + object.setStringAttribute('cat_wpn_damage.damage', '43-75') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-5m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Polearm') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file From a720e3c465f9026ed6b3077d28dea7a116d3484f Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 05:03:11 +0100 Subject: [PATCH 066/107] Items - Spy Carbine --- .../carbine/weapon_npe_carbine_spy_03_01.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 scripts/object/weapon/ranged/carbine/weapon_npe_carbine_spy_03_01.py diff --git a/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_spy_03_01.py b/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_spy_03_01.py new file mode 100644 index 00000000..53149824 --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_spy_03_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_npe_carbine_spy_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_npe_carbine_spy_03_01') + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('required_combat_level', 1) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.6) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '17-43') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Carbine') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file From 8f7e47bec4370031a03d1134abffd748d74fcb94 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 05:05:23 +0100 Subject: [PATCH 067/107] Items - Bounty Hunter Carbine --- .../carbine/weapon_npe_carbine_bh_03_01.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 scripts/object/weapon/ranged/carbine/weapon_npe_carbine_bh_03_01.py diff --git a/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_bh_03_01.py b/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_bh_03_01.py new file mode 100644 index 00000000..21afc76b --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_bh_03_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_npe_carbine_bh_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_npe_carbine_bh_03_01') + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('required_combat_level', 1) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.6) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '17-43') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Carbine') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file From 1acefc8c387075f732902abda488b53d7f77ff93 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 05:09:22 +0100 Subject: [PATCH 068/107] Medic - Buffs are now applied correctly --- scripts/commands/me_buff_health_1.py | 15 +++++++++++++-- scripts/commands/me_buff_health_2.py | 15 +++++++++++++-- scripts/commands/me_buff_health_3.py | 15 +++++++++++++-- scripts/commands/me_enhance_action_1.py | 12 +++++++++++- scripts/commands/me_enhance_action_2.py | 12 +++++++++++- scripts/commands/me_enhance_action_3.py | 12 +++++++++++- scripts/commands/me_enhance_agility_1.py | 12 +++++++++++- scripts/commands/me_enhance_agility_2.py | 14 ++++++++++++-- scripts/commands/me_enhance_agility_3.py | 15 +++++++++++++-- scripts/commands/me_enhance_block_1.py | 15 +++++++++++++-- scripts/commands/me_enhance_dodge_1.py | 15 +++++++++++++-- scripts/commands/me_enhance_precision_1.py | 15 +++++++++++++-- scripts/commands/me_enhance_precision_2.py | 15 +++++++++++++-- scripts/commands/me_enhance_precision_3.py | 15 +++++++++++++-- scripts/commands/me_enhance_strength_1.py | 15 +++++++++++++-- scripts/commands/me_enhance_strength_2.py | 15 +++++++++++++-- scripts/commands/me_enhance_strength_3.py | 15 +++++++++++++-- 17 files changed, 212 insertions(+), 30 deletions(-) diff --git a/scripts/commands/me_buff_health_1.py b/scripts/commands/me_buff_health_1.py index 1bbefb27..1e41c9ae 100644 --- a/scripts/commands/me_buff_health_1.py +++ b/scripts/commands/me_buff_health_1.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_health') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target: + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(actor, 'me_buff_health') + else: + core.buffService.addBuffToCreature(target, 'me_buff_health') + else: + core.buffService.addGroupBuff(actor, 'me_buff_health') + + return + \ No newline at end of file diff --git a/scripts/commands/me_buff_health_2.py b/scripts/commands/me_buff_health_2.py index dad03f73..117444bb 100644 --- a/scripts/commands/me_buff_health_2.py +++ b/scripts/commands/me_buff_health_2.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_health_2') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target: + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(actor, 'me_buff_health_2') + else: + core.buffService.addBuffToCreature(target, 'me_buff_health_2') + else: + core.buffService.addGroupBuff(actor, 'me_buff_health_2') + + return + \ No newline at end of file diff --git a/scripts/commands/me_buff_health_3.py b/scripts/commands/me_buff_health_3.py index 7dce8f50..29a22740 100644 --- a/scripts/commands/me_buff_health_3.py +++ b/scripts/commands/me_buff_health_3.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_health_3') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target: + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(actor, 'me_buff_health_3') + else: + core.buffService.addBuffToCreature(target, 'me_buff_health_3') + else: + core.buffService.addGroupBuff(actor, 'me_buff_health_3') + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_action_1.py b/scripts/commands/me_enhance_action_1.py index db09845c..0b065ab5 100644 --- a/scripts/commands/me_enhance_action_1.py +++ b/scripts/commands/me_enhance_action_1.py @@ -4,6 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_action_1') + + group = core.objectService.getObject(actor.getGroupId()) + + if target: + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(actor, 'me_buff_action_1') + else: + core.buffService.addBuffToCreature(target, 'me_buff_action_1') + else: + core.buffService.addGroupBuff(actor, 'me_buff_action_1') + return \ No newline at end of file diff --git a/scripts/commands/me_enhance_action_2.py b/scripts/commands/me_enhance_action_2.py index cc476e94..a076dfdd 100644 --- a/scripts/commands/me_enhance_action_2.py +++ b/scripts/commands/me_enhance_action_2.py @@ -4,6 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_action_2') + + group = core.objectService.getObject(actor.getGroupId()) + + if target: + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(actor, 'me_buff_action_2') + else: + core.buffService.addBuffToCreature(target, 'me_buff_action_2') + else: + core.buffService.addGroupBuff(actor, 'me_buff_action_2') + return \ No newline at end of file diff --git a/scripts/commands/me_enhance_action_3.py b/scripts/commands/me_enhance_action_3.py index e945d92c..1108c400 100644 --- a/scripts/commands/me_enhance_action_3.py +++ b/scripts/commands/me_enhance_action_3.py @@ -4,6 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_action_3') + + group = core.objectService.getObject(actor.getGroupId()) + + if target: + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(actor, 'me_buff_action_3') + else: + core.buffService.addBuffToCreature(target, 'me_buff_action_3') + else: + core.buffService.addGroupBuff(actor, 'me_buff_action_3') + return \ No newline at end of file diff --git a/scripts/commands/me_enhance_agility_1.py b/scripts/commands/me_enhance_agility_1.py index 5f489803..24e2c05b 100644 --- a/scripts/commands/me_enhance_agility_1.py +++ b/scripts/commands/me_enhance_agility_1.py @@ -4,6 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_agility_1') + + group = core.objectService.getObject(actor.getGroupId()) + + if target: + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(actor, 'me_buff_agility_1') + else: + core.buffService.addBuffToCreature(target, 'me_buff_agility_1') + else: + core.buffService.addGroupBuff(actor, 'me_buff_agility_1') + return \ No newline at end of file diff --git a/scripts/commands/me_enhance_agility_2.py b/scripts/commands/me_enhance_agility_2.py index f3935dcb..63474e3f 100644 --- a/scripts/commands/me_enhance_agility_2.py +++ b/scripts/commands/me_enhance_agility_2.py @@ -1,9 +1,19 @@ import sys def setup(core, actor, buff): - return + return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_agility_2') + + group = core.objectService.getObject(actor.getGroupId()) + + if target: + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(actor, 'me_buff_agility_2') + else: + core.buffService.addBuffToCreature(target, 'me_buff_agility_2') + else: + core.buffService.addGroupBuff(actor, 'me_buff_agility_2') + return \ No newline at end of file diff --git a/scripts/commands/me_enhance_agility_3.py b/scripts/commands/me_enhance_agility_3.py index e1dfd7fd..4d665fc3 100644 --- a/scripts/commands/me_enhance_agility_3.py +++ b/scripts/commands/me_enhance_agility_3.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_agility_3') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target: + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(actor, 'me_buff_agility_3') + else: + core.buffService.addBuffToCreature(target, 'me_buff_agility_3') + else: + core.buffService.addGroupBuff(actor, 'me_buff_agility_3') + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_block_1.py b/scripts/commands/me_enhance_block_1.py index c2758143..d4ef98b6 100644 --- a/scripts/commands/me_enhance_block_1.py +++ b/scripts/commands/me_enhance_block_1.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_melee_gb_1') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target: + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(actor, 'me_buff_melee_gb_1') + else: + core.buffService.addBuffToCreature(target, 'me_buff_melee_gb_1') + else: + core.buffService.addGroupBuff(actor, 'me_buff_melee_gb_1') + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_dodge_1.py b/scripts/commands/me_enhance_dodge_1.py index bb1a034e..537d2875 100644 --- a/scripts/commands/me_enhance_dodge_1.py +++ b/scripts/commands/me_enhance_dodge_1.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_ranged_gb_1') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target: + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(actor, 'me_buff_ranged_gb_1') + else: + core.buffService.addBuffToCreature(target, 'me_buff_ranged_gb_1') + else: + core.buffService.addGroupBuff(actor, 'me_buff_ranged_gb_1') + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_precision_1.py b/scripts/commands/me_enhance_precision_1.py index 398e39fa..d20c423a 100644 --- a/scripts/commands/me_enhance_precision_1.py +++ b/scripts/commands/me_enhance_precision_1.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_precision_1') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target: + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(actor, 'me_buff_precision_1') + else: + core.buffService.addBuffToCreature(target, 'me_buff_precision_1') + else: + core.buffService.addGroupBuff(actor, 'me_buff_precision_1') + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_precision_2.py b/scripts/commands/me_enhance_precision_2.py index a9bba8a5..a7b808ed 100644 --- a/scripts/commands/me_enhance_precision_2.py +++ b/scripts/commands/me_enhance_precision_2.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_precision_2') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target: + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(actor, 'me_buff_precision_2') + else: + core.buffService.addBuffToCreature(target, 'me_buff_precision_2') + else: + core.buffService.addGroupBuff(actor, 'me_buff_precision_2') + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_precision_3.py b/scripts/commands/me_enhance_precision_3.py index 8f218b1c..76594fce 100644 --- a/scripts/commands/me_enhance_precision_3.py +++ b/scripts/commands/me_enhance_precision_3.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_precision_3') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target: + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(actor, 'me_buff_precision_3') + else: + core.buffService.addBuffToCreature(target, 'me_buff_precision_3') + else: + core.buffService.addGroupBuff(actor, 'me_buff_precision_3') + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_strength_1.py b/scripts/commands/me_enhance_strength_1.py index 6ed252e5..1ab00983 100644 --- a/scripts/commands/me_enhance_strength_1.py +++ b/scripts/commands/me_enhance_strength_1.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_strength_1') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target: + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(actor, 'me_buff_strength_1') + else: + core.buffService.addBuffToCreature(target, 'me_buff_strength_1') + else: + core.buffService.addGroupBuff(actor, 'me_buff_strength_1') + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_strength_2.py b/scripts/commands/me_enhance_strength_2.py index b56331fe..e8b21cd0 100644 --- a/scripts/commands/me_enhance_strength_2.py +++ b/scripts/commands/me_enhance_strength_2.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_strength_3') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target: + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(actor, 'me_buff_strength_2') + else: + core.buffService.addBuffToCreature(target, 'me_buff_strength_2') + else: + core.buffService.addGroupBuff(actor, 'me_buff_strength_2') + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_strength_3.py b/scripts/commands/me_enhance_strength_3.py index b56331fe..e51c7bbc 100644 --- a/scripts/commands/me_enhance_strength_3.py +++ b/scripts/commands/me_enhance_strength_3.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_strength_3') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target: + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(actor, 'me_buff_strength_3') + else: + core.buffService.addBuffToCreature(target, 'me_buff_strength_3') + else: + core.buffService.addGroupBuff(actor, 'me_buff_strength_3') + + return + \ No newline at end of file From 109a80810860595df0065400b1169f7786b4b9aa Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 05:13:29 +0100 Subject: [PATCH 069/107] Items - Modified DL-44 --- .../pistol/item_npe_smuggler_han_solo_gun.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 scripts/object/weapon/ranged/pistol/item_npe_smuggler_han_solo_gun.py diff --git a/scripts/object/weapon/ranged/pistol/item_npe_smuggler_han_solo_gun.py b/scripts/object/weapon/ranged/pistol/item_npe_smuggler_han_solo_gun.py new file mode 100644 index 00000000..4f615807 --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/item_npe_smuggler_han_solo_gun.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_npe_smuggler_han_solo_gun') + object.setDetailFilename('static_item_d') + object.setDetailName('item_npe_smuggler_han_solo_gun') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 1) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.4) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '13-27') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Pistol') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file From 312dcd28f642b97fbab2d9e4693a31e2aa3dbbc9 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 05:15:01 +0100 Subject: [PATCH 070/107] Items - Medic Pistol --- .../pistol/weapon_npe_medic_pistol_03_01.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 scripts/object/weapon/ranged/pistol/weapon_npe_medic_pistol_03_01.py diff --git a/scripts/object/weapon/ranged/pistol/weapon_npe_medic_pistol_03_01.py b/scripts/object/weapon/ranged/pistol/weapon_npe_medic_pistol_03_01.py new file mode 100644 index 00000000..4a68c9af --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/weapon_npe_medic_pistol_03_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_npe_medic_pistol_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_npe_medic_pistol_03_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 1) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.4) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '13-27') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Pistol') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file From a87bc2c202efa4fade90c7b9523f1a5989aff828 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 05:30:42 +0100 Subject: [PATCH 071/107] Items - Initiate Robe --- .../tangible/wearables/robe/item_npe_fs_robe_02_01.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 scripts/object/tangible/wearables/robe/item_npe_fs_robe_02_01.py diff --git a/scripts/object/tangible/wearables/robe/item_npe_fs_robe_02_01.py b/scripts/object/tangible/wearables/robe/item_npe_fs_robe_02_01.py new file mode 100644 index 00000000..afb64a4b --- /dev/null +++ b/scripts/object/tangible/wearables/robe/item_npe_fs_robe_02_01.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_npe_fs_robe_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_npe_fs_robe_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 10) + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 1) + return From b36fc0eb9514ccd1a07a00b6bbbcf40f36e19d65 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 06:26:32 +0100 Subject: [PATCH 072/107] Scripts - Roadmap rewards are now located in profession roadmap scripts --- scripts/roadmap/bounty_hunter_1a.py | 94 ++++++++++++++++++++ scripts/roadmap/commando_1a.py | 3 + scripts/roadmap/entertainer_1a.py | 3 + scripts/roadmap/force_sensitive_1a.py | 25 ++++++ scripts/roadmap/medic_1a.py | 3 + scripts/roadmap/officer_1a.py | 3 + scripts/roadmap/roadmap_rewards.py | 122 -------------------------- scripts/roadmap/smuggler_1a.py | 3 + scripts/roadmap/spy_1a.py | 3 + scripts/roadmap/trader_0a.py | 3 + scripts/roadmap/trader_0b.py | 3 + scripts/roadmap/trader_0c.py | 3 + scripts/roadmap/trader_0d.py | 3 + src/services/PlayerService.java | 2 +- 14 files changed, 150 insertions(+), 123 deletions(-) delete mode 100644 scripts/roadmap/roadmap_rewards.py diff --git a/scripts/roadmap/bounty_hunter_1a.py b/scripts/roadmap/bounty_hunter_1a.py index 7bb425e3..0c708fec 100644 --- a/scripts/roadmap/bounty_hunter_1a.py +++ b/scripts/roadmap/bounty_hunter_1a.py @@ -23,3 +23,97 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + if name == 'item_bounty_hunter_backpack_01_02': + return "object/tangible/wearables/backpack/shared_backpack_s05.iff" + + if name == 'armor_bounty_hunter_roadmap_bicep_l_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff" + + if name == 'armor_bounty_hunter_roadmap_bicep_r_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bicep_r.iff" + + if name == 'armor_bounty_hunter_roadmap_bracer_l_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bracer_l.iff" + + if name == 'armor_bounty_hunter_roadmap_bracer_r_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bracer_r.iff" + + if name == 'armor_bounty_hunter_roadmap_boots_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_boots.iff" + + if name == 'armor_bounty_hunter_roadmap_chest_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_chest_plate.iff" + + if name == 'armor_bounty_hunter_roadmap_gloves_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_gloves.iff" + + if name == 'armor_bounty_hunter_roadmap_helmet_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_helmet.iff" + + if name == 'armor_bounty_hunter_roadmap_leggings_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_leggings.iff" + + if name == 'armor_wookiee_roadmap_chest_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_chestplate.iff" + + if name == 'armor_wookiee_roadmap_leggings_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_leggings.iff" + + if name == 'armor_wookiee_roadmap_bicep_l_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_l.iff" + + if name == 'armor_wookiee_roadmap_bicep_r_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_r.iff" + + if name == 'armor_wookiee_roadmap_bracer_l_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_l.iff" + + if name == 'armor_wookiee_roadmap_bracer_r_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_r.iff" + + if name == 'armor_ithorian_roadmap_chest_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_chest_plate.iff" + + if name == 'armor_ithorian_roadmap_leggings_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_leggings.iff" + + if name == 'armor_ithorian_roadmap_helmet_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_helmet.iff" + + if name == 'armor_ithorian_roadmap_bicep_l_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_l.iff" + + if name == 'armor_ithorian_roadmap_bicep_r_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_r.iff" + + if name == 'armor_ithorian_roadmap_bracer_l_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_l.iff" + + if name == 'armor_ithorian_roadmap_bracer_r_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_r.iff" + + if name == 'armor_ithorian_roadmap_boots_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_boots.iff" + + if name == 'armor_ithorian_roadmap_gloves_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_gloves.iff" + + if name == 'weapon_carbine_bh_roadmap_01_02': + return "object/weapon/ranged/carbine/shared_carbine_ee3.iff" + + if name == 'item_bounty_hunter_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'weapon_rifle_bh_roadmap_01_02': + return "object/weapon/ranged/rifle/shared_rifle_lightning.iff" + + if name == 'item_bounty_hunter_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s02.iff" + + if name == 'item_bounty_hunter_clicky_01_02': + return "object/tangible/loot/generic_usable/shared_survey_pad_adv_generic.iff" + + if name == 'item_roadmap_belt_bounty_hunter_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" \ No newline at end of file diff --git a/scripts/roadmap/commando_1a.py b/scripts/roadmap/commando_1a.py index 8d9253ae..67cdb14b 100644 --- a/scripts/roadmap/commando_1a.py +++ b/scripts/roadmap/commando_1a.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/entertainer_1a.py b/scripts/roadmap/entertainer_1a.py index 0541cc93..efe33465 100644 --- a/scripts/roadmap/entertainer_1a.py +++ b/scripts/roadmap/entertainer_1a.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/force_sensitive_1a.py b/scripts/roadmap/force_sensitive_1a.py index 2d9241b0..9fd5ca69 100644 --- a/scripts/roadmap/force_sensitive_1a.py +++ b/scripts/roadmap/force_sensitive_1a.py @@ -23,3 +23,28 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + if name == 'item_force_sensitive_ring_02_01': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'item_npe_fs_robe_02_02': + return "object/tangible/wearables/robe/shared_robe_jedi_padawan.iff" + + if name == 'weapon_roadmap_lightsaber_02_02': + return "object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_s1.iff" + + if name == 'item_force_sensitive_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s01.iff" + + if name == 'item_krayt_pearl_04_01': + return "object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff" + + if name == 'item_force_sensitive_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s12.iff" + + if name == 'item_force_sensitive_clicky_01_02': + return "object/tangible/loot/generic_usable/shared_generic_crystal.iff" + + if name == 'item_roadmap_belt_force_sensitive_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" \ No newline at end of file diff --git a/scripts/roadmap/medic_1a.py b/scripts/roadmap/medic_1a.py index 6b84327b..e6f67dfb 100644 --- a/scripts/roadmap/medic_1a.py +++ b/scripts/roadmap/medic_1a.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/officer_1a.py b/scripts/roadmap/officer_1a.py index 25e7254f..83bca56f 100644 --- a/scripts/roadmap/officer_1a.py +++ b/scripts/roadmap/officer_1a.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/roadmap_rewards.py b/scripts/roadmap/roadmap_rewards.py deleted file mode 100644 index a764248f..00000000 --- a/scripts/roadmap/roadmap_rewards.py +++ /dev/null @@ -1,122 +0,0 @@ -import sys - -def get(name): - # Jedi # - if name == 'item_force_sensitive_ring_02_01': - return "object/tangible/wearables/ring/shared_ring_s02.iff" - - if name == 'item_npe_fs_robe_02_02': - return "object/tangible/wearables/robe/shared_robe_jedi_padawan.iff" - - if name == 'weapon_roadmap_lightsaber_02_02': - return "object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_s1.iff" - - if name == 'item_force_sensitive_ring_01_02': - return "object/tangible/wearables/ring/shared_ring_s01.iff" - - if name == 'item_krayt_pearl_04_01': - return "object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff" - - if name == 'item_force_sensitive_pendant_01_02': - return "object/tangible/wearables/necklace/shared_necklace_s12.iff" - - if name == 'item_force_sensitive_clicky_01_02': - return "object/tangible/loot/generic_usable/shared_generic_crystal.iff" - - if name == 'item_roadmap_belt_force_sensitive_01_02': - return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" - - # Bounty Hunter # - - if name == 'item_bounty_hunter_backpack_01_02': - return "object/tangible/wearables/backpack/shared_backpack_s05.iff" - - if name == 'armor_bounty_hunter_roadmap_bicep_l_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff" - - if name == 'armor_bounty_hunter_roadmap_bicep_r_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_bicep_r.iff" - - if name == 'armor_bounty_hunter_roadmap_bracer_l_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_bracer_l.iff" - - if name == 'armor_bounty_hunter_roadmap_bracer_r_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_bracer_r.iff" - - if name == 'armor_bounty_hunter_roadmap_boots_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_boots.iff" - - if name == 'armor_bounty_hunter_roadmap_chest_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_chest_plate.iff" - - if name == 'armor_bounty_hunter_roadmap_gloves_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_gloves.iff" - - if name == 'armor_bounty_hunter_roadmap_helmet_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_helmet.iff" - - if name == 'armor_bounty_hunter_roadmap_leggings_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_leggings.iff" - - if name == 'armor_wookiee_roadmap_chest_02_03': - return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_chestplate.iff" - - if name == 'armor_wookiee_roadmap_leggings_02_03': - return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_leggings.iff" - - if name == 'armor_wookiee_roadmap_bicep_l_02_03': - return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_l.iff" - - if name == 'armor_wookiee_roadmap_bicep_r_02_03': - return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_r.iff" - - if name == 'armor_wookiee_roadmap_bracer_l_02_03': - return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_l.iff" - - if name == 'armor_wookiee_roadmap_bracer_r_02_03': - return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_r.iff" - - if name == 'armor_ithorian_roadmap_chest_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_chest_plate.iff" - - if name == 'armor_ithorian_roadmap_leggings_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_leggings.iff" - - if name == 'armor_ithorian_roadmap_helmet_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_helmet.iff" - - if name == 'armor_ithorian_roadmap_bicep_l_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_l.iff" - - if name == 'armor_ithorian_roadmap_bicep_r_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_r.iff" - - if name == 'armor_ithorian_roadmap_bracer_l_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_l.iff" - - if name == 'armor_ithorian_roadmap_bracer_r_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_r.iff" - - if name == 'armor_ithorian_roadmap_boots_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_boots.iff" - - if name == 'armor_ithorian_roadmap_gloves_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_gloves.iff" - - if name == 'weapon_carbine_bh_roadmap_01_02': - return "object/weapon/ranged/carbine/shared_carbine_ee3.iff" - - if name == 'item_bounty_hunter_ring_01_02': - return "object/tangible/wearables/ring/shared_ring_s02.iff" - - if name == 'weapon_rifle_bh_roadmap_01_02': - return "object/weapon/ranged/rifle/shared_rifle_lightning.iff" - - if name == 'item_bounty_hunter_pendant_01_02': - return "object/tangible/wearables/necklace/shared_necklace_s02.iff" - - if name == 'item_bounty_hunter_clicky_01_02': - return "object/tangible/loot/generic_usable/shared_survey_pad_adv_generic.iff" - - if name == 'item_roadmap_belt_bounty_hunter_01_02': - return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" \ No newline at end of file diff --git a/scripts/roadmap/smuggler_1a.py b/scripts/roadmap/smuggler_1a.py index 8084fcd2..2b41cce4 100644 --- a/scripts/roadmap/smuggler_1a.py +++ b/scripts/roadmap/smuggler_1a.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/spy_1a.py b/scripts/roadmap/spy_1a.py index 6fe7c37a..079de728 100644 --- a/scripts/roadmap/spy_1a.py +++ b/scripts/roadmap/spy_1a.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/trader_0a.py b/scripts/roadmap/trader_0a.py index 2846dee7..203b6ad9 100644 --- a/scripts/roadmap/trader_0a.py +++ b/scripts/roadmap/trader_0a.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/trader_0b.py b/scripts/roadmap/trader_0b.py index 2846dee7..203b6ad9 100644 --- a/scripts/roadmap/trader_0b.py +++ b/scripts/roadmap/trader_0b.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/trader_0c.py b/scripts/roadmap/trader_0c.py index 2846dee7..203b6ad9 100644 --- a/scripts/roadmap/trader_0c.py +++ b/scripts/roadmap/trader_0c.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/trader_0d.py b/scripts/roadmap/trader_0d.py index 2846dee7..203b6ad9 100644 --- a/scripts/roadmap/trader_0d.py +++ b/scripts/roadmap/trader_0d.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index 5c3eaf9c..ec4c9e7d 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -715,7 +715,7 @@ public class PlayerService implements INetworkDispatch { item = (item.substring(0, (item.lastIndexOf("/") + 1)) + "shared_" + item.substring((item.lastIndexOf("/") + 1))); } else { customServerTemplate = item; - item = core.scriptService.callScript("scripts/roadmap/", "roadmap_rewards", "get", item).asString(); + item = core.scriptService.callScript("scripts/roadmap/", player.getProfession(), "getRewards", item).asString(); } if (item != null && item != "") { From 9a82b2cd465f4a8f1931c6d01d6191bbb59ff01a Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 06:38:41 +0100 Subject: [PATCH 073/107] Bounty Hunter - Added Assault Damage --- scripts/commands/combat/bh_dm_1.py | 6 +++++- scripts/commands/combat/bh_dm_2.py | 6 +++++- scripts/commands/combat/bh_dm_3.py | 6 +++++- scripts/commands/combat/bh_dm_4.py | 6 +++++- scripts/commands/combat/bh_dm_5.py | 6 +++++- scripts/commands/combat/bh_dm_6.py | 6 +++++- scripts/commands/combat/bh_dm_7.py | 6 +++++- scripts/commands/combat/bh_dm_8.py | 6 +++++- 8 files changed, 40 insertions(+), 8 deletions(-) diff --git a/scripts/commands/combat/bh_dm_1.py b/scripts/commands/combat/bh_dm_1.py index 707a2c00..0506c54f 100644 --- a/scripts/commands/combat/bh_dm_1.py +++ b/scripts/commands/combat/bh_dm_1.py @@ -2,7 +2,11 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + return def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_2.py b/scripts/commands/combat/bh_dm_2.py index 707a2c00..0506c54f 100644 --- a/scripts/commands/combat/bh_dm_2.py +++ b/scripts/commands/combat/bh_dm_2.py @@ -2,7 +2,11 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + return def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_3.py b/scripts/commands/combat/bh_dm_3.py index 707a2c00..0506c54f 100644 --- a/scripts/commands/combat/bh_dm_3.py +++ b/scripts/commands/combat/bh_dm_3.py @@ -2,7 +2,11 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + return def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_4.py b/scripts/commands/combat/bh_dm_4.py index 707a2c00..0506c54f 100644 --- a/scripts/commands/combat/bh_dm_4.py +++ b/scripts/commands/combat/bh_dm_4.py @@ -2,7 +2,11 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + return def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_5.py b/scripts/commands/combat/bh_dm_5.py index 707a2c00..0506c54f 100644 --- a/scripts/commands/combat/bh_dm_5.py +++ b/scripts/commands/combat/bh_dm_5.py @@ -2,7 +2,11 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + return def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_6.py b/scripts/commands/combat/bh_dm_6.py index 707a2c00..0506c54f 100644 --- a/scripts/commands/combat/bh_dm_6.py +++ b/scripts/commands/combat/bh_dm_6.py @@ -2,7 +2,11 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + return def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_7.py b/scripts/commands/combat/bh_dm_7.py index 707a2c00..0506c54f 100644 --- a/scripts/commands/combat/bh_dm_7.py +++ b/scripts/commands/combat/bh_dm_7.py @@ -2,7 +2,11 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + return def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_8.py b/scripts/commands/combat/bh_dm_8.py index 707a2c00..0506c54f 100644 --- a/scripts/commands/combat/bh_dm_8.py +++ b/scripts/commands/combat/bh_dm_8.py @@ -2,7 +2,11 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + return def run(core, actor, target, commandString): return \ No newline at end of file From edd91900e6becf32b458687155bd4391de166707 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 06:53:06 +0100 Subject: [PATCH 074/107] Bounty Hunter - Added Ambush Damage/Critical/Action cost --- scripts/commands/combat/bh_dm_crit_1.py | 12 +++++++++++- scripts/commands/combat/bh_dm_crit_2.py | 12 +++++++++++- scripts/commands/combat/bh_dm_crit_3.py | 14 ++++++++++++-- scripts/commands/combat/bh_dm_crit_4.py | 14 ++++++++++++-- scripts/commands/combat/bh_dm_crit_5.py | 14 ++++++++++++-- scripts/commands/combat/bh_dm_crit_6.py | 14 ++++++++++++-- scripts/commands/combat/bh_dm_crit_7.py | 14 ++++++++++++-- scripts/commands/combat/bh_dm_crit_8.py | 14 ++++++++++++-- 8 files changed, 94 insertions(+), 14 deletions(-) diff --git a/scripts/commands/combat/bh_dm_crit_1.py b/scripts/commands/combat/bh_dm_crit_1.py index 94292ffd..aec51439 100644 --- a/scripts/commands/combat/bh_dm_crit_1.py +++ b/scripts/commands/combat/bh_dm_crit_1.py @@ -2,7 +2,17 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm_crit'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm_crit').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit') + return def run(core, actor, target, commandString): diff --git a/scripts/commands/combat/bh_dm_crit_2.py b/scripts/commands/combat/bh_dm_crit_2.py index 94292ffd..aec51439 100644 --- a/scripts/commands/combat/bh_dm_crit_2.py +++ b/scripts/commands/combat/bh_dm_crit_2.py @@ -2,7 +2,17 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm_crit'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm_crit').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit') + return def run(core, actor, target, commandString): diff --git a/scripts/commands/combat/bh_dm_crit_3.py b/scripts/commands/combat/bh_dm_crit_3.py index 94b54628..aec51439 100644 --- a/scripts/commands/combat/bh_dm_crit_3.py +++ b/scripts/commands/combat/bh_dm_crit_3.py @@ -2,8 +2,18 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm_crit'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm_crit').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit') + return - + def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_4.py b/scripts/commands/combat/bh_dm_crit_4.py index 94b54628..aec51439 100644 --- a/scripts/commands/combat/bh_dm_crit_4.py +++ b/scripts/commands/combat/bh_dm_crit_4.py @@ -2,8 +2,18 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm_crit'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm_crit').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit') + return - + def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_5.py b/scripts/commands/combat/bh_dm_crit_5.py index 94b54628..aec51439 100644 --- a/scripts/commands/combat/bh_dm_crit_5.py +++ b/scripts/commands/combat/bh_dm_crit_5.py @@ -2,8 +2,18 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm_crit'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm_crit').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit') + return - + def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_6.py b/scripts/commands/combat/bh_dm_crit_6.py index 94b54628..aec51439 100644 --- a/scripts/commands/combat/bh_dm_crit_6.py +++ b/scripts/commands/combat/bh_dm_crit_6.py @@ -2,8 +2,18 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm_crit'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm_crit').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit') + return - + def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_7.py b/scripts/commands/combat/bh_dm_crit_7.py index 94b54628..aec51439 100644 --- a/scripts/commands/combat/bh_dm_crit_7.py +++ b/scripts/commands/combat/bh_dm_crit_7.py @@ -2,8 +2,18 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm_crit'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm_crit').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit') + return - + def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_8.py b/scripts/commands/combat/bh_dm_crit_8.py index 94b54628..aec51439 100644 --- a/scripts/commands/combat/bh_dm_crit_8.py +++ b/scripts/commands/combat/bh_dm_crit_8.py @@ -2,8 +2,18 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm_crit'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm_crit').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit') + return - + def run(core, actor, target, commandString): return \ No newline at end of file From a024ea8feee4c6b274ce70e4394031ac3624c86c Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 06:54:42 +0100 Subject: [PATCH 075/107] Jedi - Jedi Strike ACR was incorrectly affecting Flurry --- scripts/commands/combat/fs_flurry_1.py | 3 --- scripts/commands/combat/fs_flurry_2.py | 3 --- scripts/commands/combat/fs_flurry_3.py | 3 --- scripts/commands/combat/fs_flurry_4.py | 3 --- scripts/commands/combat/fs_flurry_5.py | 3 --- scripts/commands/combat/fs_flurry_6.py | 3 --- scripts/commands/combat/fs_flurry_7.py | 3 --- 7 files changed, 21 deletions(-) diff --git a/scripts/commands/combat/fs_flurry_1.py b/scripts/commands/combat/fs_flurry_1.py index 1d6cd02c..5e5c429e 100644 --- a/scripts/commands/combat/fs_flurry_1.py +++ b/scripts/commands/combat/fs_flurry_1.py @@ -7,9 +7,6 @@ def setup(core, actor, target, command): if actor.getSkillMod('expertise_critical_line_fs_dm'): command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) - if actor.getSkillMod('expertise_action_line_fs_dm'): - command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) - return def run(core, actor, target, commandString): diff --git a/scripts/commands/combat/fs_flurry_2.py b/scripts/commands/combat/fs_flurry_2.py index 1d6cd02c..5e5c429e 100644 --- a/scripts/commands/combat/fs_flurry_2.py +++ b/scripts/commands/combat/fs_flurry_2.py @@ -7,9 +7,6 @@ def setup(core, actor, target, command): if actor.getSkillMod('expertise_critical_line_fs_dm'): command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) - if actor.getSkillMod('expertise_action_line_fs_dm'): - command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) - return def run(core, actor, target, commandString): diff --git a/scripts/commands/combat/fs_flurry_3.py b/scripts/commands/combat/fs_flurry_3.py index 1d6cd02c..5e5c429e 100644 --- a/scripts/commands/combat/fs_flurry_3.py +++ b/scripts/commands/combat/fs_flurry_3.py @@ -7,9 +7,6 @@ def setup(core, actor, target, command): if actor.getSkillMod('expertise_critical_line_fs_dm'): command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) - if actor.getSkillMod('expertise_action_line_fs_dm'): - command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) - return def run(core, actor, target, commandString): diff --git a/scripts/commands/combat/fs_flurry_4.py b/scripts/commands/combat/fs_flurry_4.py index 1d6cd02c..5e5c429e 100644 --- a/scripts/commands/combat/fs_flurry_4.py +++ b/scripts/commands/combat/fs_flurry_4.py @@ -7,9 +7,6 @@ def setup(core, actor, target, command): if actor.getSkillMod('expertise_critical_line_fs_dm'): command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) - if actor.getSkillMod('expertise_action_line_fs_dm'): - command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) - return def run(core, actor, target, commandString): diff --git a/scripts/commands/combat/fs_flurry_5.py b/scripts/commands/combat/fs_flurry_5.py index 1d6cd02c..5e5c429e 100644 --- a/scripts/commands/combat/fs_flurry_5.py +++ b/scripts/commands/combat/fs_flurry_5.py @@ -7,9 +7,6 @@ def setup(core, actor, target, command): if actor.getSkillMod('expertise_critical_line_fs_dm'): command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) - if actor.getSkillMod('expertise_action_line_fs_dm'): - command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) - return def run(core, actor, target, commandString): diff --git a/scripts/commands/combat/fs_flurry_6.py b/scripts/commands/combat/fs_flurry_6.py index 1d6cd02c..5e5c429e 100644 --- a/scripts/commands/combat/fs_flurry_6.py +++ b/scripts/commands/combat/fs_flurry_6.py @@ -7,9 +7,6 @@ def setup(core, actor, target, command): if actor.getSkillMod('expertise_critical_line_fs_dm'): command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) - if actor.getSkillMod('expertise_action_line_fs_dm'): - command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) - return def run(core, actor, target, commandString): diff --git a/scripts/commands/combat/fs_flurry_7.py b/scripts/commands/combat/fs_flurry_7.py index 1d6cd02c..5e5c429e 100644 --- a/scripts/commands/combat/fs_flurry_7.py +++ b/scripts/commands/combat/fs_flurry_7.py @@ -7,9 +7,6 @@ def setup(core, actor, target, command): if actor.getSkillMod('expertise_critical_line_fs_dm'): command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) - if actor.getSkillMod('expertise_action_line_fs_dm'): - command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) - return def run(core, actor, target, commandString): From 7f5c7dc03a1c4da615d8f7895a24e39192bbdfcd Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 07:07:27 +0100 Subject: [PATCH 076/107] Officer - Fixed Tactics Duration --- scripts/buffs/of_buff_def_1.py | 1 - scripts/buffs/of_buff_def_2.py | 3 +++ scripts/buffs/of_buff_def_3.py | 3 +++ scripts/buffs/of_buff_def_4.py | 3 +++ scripts/buffs/of_buff_def_5.py | 3 +++ scripts/buffs/of_buff_def_6.py | 3 +++ scripts/buffs/of_buff_def_7.py | 3 +++ scripts/buffs/of_buff_def_8.py | 3 +++ scripts/buffs/of_buff_def_9.py | 3 +++ 9 files changed, 24 insertions(+), 1 deletion(-) diff --git a/scripts/buffs/of_buff_def_1.py b/scripts/buffs/of_buff_def_1.py index f1e27d04..01f17ada 100644 --- a/scripts/buffs/of_buff_def_1.py +++ b/scripts/buffs/of_buff_def_1.py @@ -3,7 +3,6 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_aura_maintain'): buff.setDuration(-1) - return return diff --git a/scripts/buffs/of_buff_def_2.py b/scripts/buffs/of_buff_def_2.py index c1cb56b4..7536841f 100644 --- a/scripts/buffs/of_buff_def_2.py +++ b/scripts/buffs/of_buff_def_2.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + return def add(core, actor, buff): diff --git a/scripts/buffs/of_buff_def_3.py b/scripts/buffs/of_buff_def_3.py index 952b1963..dd577237 100644 --- a/scripts/buffs/of_buff_def_3.py +++ b/scripts/buffs/of_buff_def_3.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + return def add(core, actor, buff): diff --git a/scripts/buffs/of_buff_def_4.py b/scripts/buffs/of_buff_def_4.py index 3360e4e4..6a650b41 100644 --- a/scripts/buffs/of_buff_def_4.py +++ b/scripts/buffs/of_buff_def_4.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + return def add(core, actor, buff): diff --git a/scripts/buffs/of_buff_def_5.py b/scripts/buffs/of_buff_def_5.py index 5e0f8e8d..0dfd361a 100644 --- a/scripts/buffs/of_buff_def_5.py +++ b/scripts/buffs/of_buff_def_5.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + return def add(core, actor, buff): diff --git a/scripts/buffs/of_buff_def_6.py b/scripts/buffs/of_buff_def_6.py index 46293f6b..06dac062 100644 --- a/scripts/buffs/of_buff_def_6.py +++ b/scripts/buffs/of_buff_def_6.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + return def add(core, actor, buff): diff --git a/scripts/buffs/of_buff_def_7.py b/scripts/buffs/of_buff_def_7.py index a063f2fd..b18cd574 100644 --- a/scripts/buffs/of_buff_def_7.py +++ b/scripts/buffs/of_buff_def_7.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + return def add(core, actor, buff): diff --git a/scripts/buffs/of_buff_def_8.py b/scripts/buffs/of_buff_def_8.py index 4136a39d..1b16cad6 100644 --- a/scripts/buffs/of_buff_def_8.py +++ b/scripts/buffs/of_buff_def_8.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + return def add(core, actor, buff): diff --git a/scripts/buffs/of_buff_def_9.py b/scripts/buffs/of_buff_def_9.py index 2651fc29..ac342f70 100644 --- a/scripts/buffs/of_buff_def_9.py +++ b/scripts/buffs/of_buff_def_9.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + return def add(core, actor, buff): From efdb69ff576f93faa672cefd2b012c7e60c31ebd Mon Sep 17 00:00:00 2001 From: Treeku Date: Sun, 23 Mar 2014 15:08:46 +0000 Subject: [PATCH 077/107] Fixed major counter-type collection bugs --- src/resources/common/Stf.java | 14 +++++++++ .../collections/CollectionService.java | 31 ++++++++++--------- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/resources/common/Stf.java b/src/resources/common/Stf.java index 1ebfc72a..468960f6 100644 --- a/src/resources/common/Stf.java +++ b/src/resources/common/Stf.java @@ -80,6 +80,20 @@ public class Stf extends Delta { } } + public String getString() { + synchronized(objectMutex) { + return ("@" + stfFilename + ":" + stfName); + } + } + + public void setString(String stf) { + synchronized(objectMutex) { + stf = stf.replace("@", ""); + stfFilename.set(stf.split(":")[0]); + stfName.set(stf.split(":")[1]); + } + } + public byte[] getBytes() { synchronized(objectMutex) { int size = stfFilename.getBytes().length + 4 + stfName.getBytes().length; diff --git a/src/services/collections/CollectionService.java b/src/services/collections/CollectionService.java index 15567a6b..c74e3993 100644 --- a/src/services/collections/CollectionService.java +++ b/src/services/collections/CollectionService.java @@ -222,11 +222,8 @@ public class CollectionService implements INetworkDispatch { BitSet bitValue = new BitSet(64); bitValue.set(64-bits, 64); - BitSet maxValue = new BitSet(64); - maxValue.set(64-maxSlotValue, 64); - - if (bitValue.toLongArray()[0] < maxValue.toLongArray()[0]) { - System.out.println(slotName + ", row " + c + ": counter-type slot uses " + bits + " bits, which can only hold a max value of " + bitValue.toLongArray()[0] + ", which is less than the specified max value of " + maxValue.toLongArray()[0]); + if (bitValue.toLongArray()[0] < maxSlotValue) { + System.out.println(slotName + ", row " + c + ": counter-type slot uses " + bits + " bits, which can only hold a max value of " + bitValue.toLongArray()[0] + ", which is less than the specified max value of " + maxSlotValue); throw new Exception(); } } @@ -293,14 +290,20 @@ public class CollectionService implements INetworkDispatch { } } - if (bits > 1) { + if (maxSlotValue > -1) { + BitSet value = BitSet.valueOf(new long[] { collections.get(beginSlotId, (endSlotId + 1)).toLongArray()[0]++ }); + + for (int i = beginSlotId; i <= endSlotId; i++) { + collections.set(i, value.get((i - beginSlotId))); + } + } else if (bits > 1) { int nextBit = collections.get(beginSlotId, (endSlotId + 1)).previousClearBit(endSlotId); if (nextBit == -1) { return false; } - collections.set((beginSlotId + nextBit)); + collections.set(nextBit); } else { collections.set(beginSlotId); } @@ -439,7 +442,6 @@ public class CollectionService implements INetworkDispatch { String bookName = ""; String pageName = ""; String collectionName = ""; - boolean collectionComplete = false; collections = BitSet.valueOf(player.getCollections()); @@ -595,14 +597,15 @@ public class CollectionService implements INetworkDispatch { BitSet bitValue = new BitSet(64); bitValue.set(64-bits, 64); - BitSet maxValue = new BitSet(64); - maxValue.set(64-maxSlotValue, 64); - - if (bitValue.toLongArray()[0] < maxValue.toLongArray()[0]) { - System.out.println(slotName + ", row " + c + ": counter-type slot uses " + bits + " bits, which can only hold a max value of " + bitValue.toLongArray()[0] + ", which is less than the specified max value of " + maxValue.toLongArray()[0]); + if (bitValue.toLongArray()[0] < maxSlotValue) { + System.out.println(slotName + ", row " + c + ": counter-type slot uses " + bits + " bits, which can only hold a max value of " + bitValue.toLongArray()[0] + ", which is less than the specified max value of " + maxSlotValue); throw new Exception(); } - + } + + if (maxSlotValue > 0) { + return (int) collections.get(beginSlotId, (endSlotId + 1)).toLongArray()[0]; + } else { return collections.get(beginSlotId, (endSlotId + 1)).cardinality(); } } else { From da30107933d250ffef3a78b7c6d64d89db40ccbe Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 17:10:15 +0100 Subject: [PATCH 078/107] Commands - Fixed incorrect datatable values --- src/services/command/CombatCommand.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/services/command/CombatCommand.java b/src/services/command/CombatCommand.java index 16198a57..0741a44e 100644 --- a/src/services/command/CombatCommand.java +++ b/src/services/command/CombatCommand.java @@ -151,10 +151,10 @@ public class CombatCommand extends BaseSWGCommand { minDamage = (Integer) visitor.getObject(i, 77); maxDamage = (Integer) visitor.getObject(i, 78); maxRangeOverload = (Float) visitor.getObject(i, 79); - weaponCategory = ((Integer) visitor.getObject(i, 80)).byteValue(); - damageType = ((Integer) visitor.getObject(i, 81)).byteValue(); - elementalType = ((Integer) visitor.getObject(i, 82)).byteValue(); - elementalValue = (Integer) visitor.getObject(i, 83); + weaponCategory = ((Integer) visitor.getObject(i, 81)).byteValue(); + damageType = ((Integer) visitor.getObject(i, 82)).byteValue(); + elementalType = ((Integer) visitor.getObject(i, 83)); + elementalValue = (Integer) visitor.getObject(i, 84); performanceSpam = (String) visitor.getObject(i, 89); hitSpam = ((Integer) visitor.getObject(i, 90)).byteValue(); From ae402525f571e743791bf86fa825827f7e194d08 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 17:15:27 +0100 Subject: [PATCH 079/107] Commands - Renamed isBypassArmor() to getBypassArmor() It's not a actually a boolean so I changed the name to something more appropriate. --- src/services/command/CombatCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/command/CombatCommand.java b/src/services/command/CombatCommand.java index 0741a44e..2ec3f936 100644 --- a/src/services/command/CombatCommand.java +++ b/src/services/command/CombatCommand.java @@ -381,7 +381,7 @@ public class CombatCommand extends BaseSWGCommand { this.percentFromWeapon = percentFromWeapon; } - public float isBypassArmor() { + public float getBypassArmor() { return bypassArmor; } From 9de9bb37b49a9db98e27f6294b859942fb92045a Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 17:23:26 +0100 Subject: [PATCH 080/107] Combat - Added ability specifc armor bypass and fixed incorrect armor mitigation calculation --- src/services/combat/CombatService.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/services/combat/CombatService.java b/src/services/combat/CombatService.java index 01f73d43..2b0c7815 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -85,7 +85,7 @@ public class CombatService implements INetworkDispatch { } public void doCombat(final CreatureObject attacker, final TangibleObject target, final WeaponObject weapon, final CombatCommand command, final int actionCounter) { - + boolean success = true; if((command.getAttackType() == 0 || command.getAttackType() == 1 || command.getAttackType() == 3) && !attemptCombat(attacker, target)) @@ -441,7 +441,7 @@ public class CombatService implements INetworkDispatch { } else { elementalType = command.getElementalType(); - + } int baseArmor = 0; @@ -460,14 +460,16 @@ public class CombatService implements INetworkDispatch { baseArmor = target.getSkillModBase("acid"); case ElementalType.ELECTRICITY: baseArmor = target.getSkillModBase("electricity"); - } if(target.getSkillMod("expertise_innate_reduction_all_player") != null) baseArmor *= (100 - target.getSkillMod("expertise_innate_reduction_all_player").getBase()) / 100; - float mitigation = (float) (90 * (1 - Math.exp(-0.000125 * baseArmor)) + baseArmor / 9000); + if(command.getBypassArmor() > 0) + baseArmor *= (100 - command.getBypassArmor()) / 100; + float mitigation = (float) (90 * (1 - Math.exp(-0.000125 * baseArmor))) + baseArmor / 9000; + if(hitType == HitType.STRIKETHROUGH) { float stMaxValue = attacker.getSkillMod("combat_strikethrough_value").getBase() / 2 + attacker.getLuck() / 10; @@ -480,7 +482,7 @@ public class CombatService implements INetworkDispatch { stValue = 1 - stValue; mitigation *= stValue; } - + return mitigation / 100; } From d00aa83050cbcd34fc9c1f9cd4d1752c27d4a207 Mon Sep 17 00:00:00 2001 From: Seefo Date: Sun, 23 Mar 2014 12:27:42 -0400 Subject: [PATCH 081/107] Fixed a few exploits. See extended. Skills obtained through the expertise system are now validated to make sure they are legitimate expertise skills. Player expertise points are also now factored in instead of letting the client do all the calculations. Command "setcurrentskilltitle" now checks if the player has obtained the skill title to prevent abuse of the command. --- scripts/commands/setcurrentskilltitle.py | 3 ++- src/services/SkillService.java | 29 +++++++++++++++++++----- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/scripts/commands/setcurrentskilltitle.py b/scripts/commands/setcurrentskilltitle.py index 43e9e5f4..160c9091 100644 --- a/scripts/commands/setcurrentskilltitle.py +++ b/scripts/commands/setcurrentskilltitle.py @@ -11,5 +11,6 @@ def run(core, actor, target, commandString): if playerObject is None: return - playerObject.setTitle(str(commandString)) + if str(commandString) in playerObject.getTitleList() or str(commandString) == "citizenship" or str(commandString) == "": playerObject.setTitle(str(commandString)) + return \ No newline at end of file diff --git a/src/services/SkillService.java b/src/services/SkillService.java index de024d6d..c3926f7b 100644 --- a/src/services/SkillService.java +++ b/src/services/SkillService.java @@ -271,16 +271,33 @@ public class SkillService implements INetworkDispatch { return; for(String expertiseName : expertise.getExpertiseSkills()) { - addSkill(creature, expertiseName); - if(!FileUtilities.doesFileExist("scripts/expertise/" + expertiseName + ".py")) - continue; - core.scriptService.callScript("scripts/expertise/", expertiseName, "addAbilities", core, creature, player); - } - + if(expertiseName.startsWith("expertise_") && ((caluclateExpertisePoints(creature) - 1) > 0)) // Prevent possible glitches/exploits + { + addSkill(creature, expertiseName); + if(!FileUtilities.doesFileExist("scripts/expertise/" + expertiseName + ".py")) + continue; + core.scriptService.callScript("scripts/expertise/", expertiseName, "addAbilities", core, creature, player); + } + } } }); } + + public int caluclateExpertisePoints(CreatureObject creature) + { + int expertisePoints = 0; + + try + { + DatatableVisitor table = ClientFileManager.loadFile("datatables/player/player_level.iff", DatatableVisitor.class); + for (int i = 0; i <= creature.getLevel(); i++) expertisePoints += (int) table.getObject(i, 5); + } + catch (Exception e) { e.printStackTrace(); } + + System.out.println("Player should have " + expertisePoints + " expertise points."); + return expertisePoints; + } @Override public void shutdown() { From 7d8725d60ba0a463255dd4f36df60845a8be7e19 Mon Sep 17 00:00:00 2001 From: Treeku Date: Sun, 23 Mar 2014 16:49:59 +0000 Subject: [PATCH 082/107] Added buffer to buff funcs, added buff checks --- src/services/BuffService.java | 76 +++++++++++++++++++++++++---------- 1 file changed, 54 insertions(+), 22 deletions(-) diff --git a/src/services/BuffService.java b/src/services/BuffService.java index 4c1811bc..f8a6bcb3 100644 --- a/src/services/BuffService.java +++ b/src/services/BuffService.java @@ -60,30 +60,50 @@ public class BuffService implements INetworkDispatch { } - public void addBuffToCreature(final CreatureObject creature, String buffName) { + public void addBuffToCreature(CreatureObject creature, String buffName) { + try { + throw new Exception(); + } catch (Exception e) { + // New system becoming necessary. Target can be the buffer for abilities that can't buff others. + System.out.println("WARNING: New AddBuff Format: target, buffName, buffer"); + e.printStackTrace(); + } + + addBuffToCreature(creature, buffName, creature); + } + + public void addBuffToCreature(CreatureObject target, String buffName, CreatureObject buffer) { /*if(!FileUtilities.doesFileExist("scripts/buffs/" + buffName + ".py")) { //System.out.println("Buff script doesnt exist for: " + buffName); return; }*/ - final Buff buff = new Buff(buffName, creature.getObjectID()); + final Buff buff = new Buff(buffName, buffer.getObjectID()); if(buff.isGroupBuff()) { - addGroupBuff(creature, buffName); + addGroupBuff(buffer, buffName, buffer); } else { - doAddBuff(creature, buffName, null); + doAddBuff(target, buffName, buffer); } } - public Buff doAddBuff(final CreatureObject creature, String buffName, CreatureObject buffer) { + public Buff doAddBuff(final CreatureObject target, String buffName, CreatureObject buffer) { - final Buff buff = new Buff(buffName, creature.getObjectID()); - buff.setTotalPlayTime(((PlayerObject) creature.getSlottedObject("ghost")).getTotalPlayTime()); + if (target.getPosition().getDistance(buffer.getPosition()) > 20) { + return null; + } + + if (!core.simulationService.checkLineOfSight(buffer, target)) { + return null; + } + + final Buff buff = new Buff(buffName, target.getObjectID()); + buff.setTotalPlayTime(((PlayerObject) target.getSlottedObject("ghost")).getTotalPlayTime()); if(FileUtilities.doesFileExist("scripts/buffs/" + buffName + ".py")) - core.scriptService.callScript("scripts/buffs/", buffName, "setup", core, ((buffer == null) ? creature : buffer), buff); + core.scriptService.callScript("scripts/buffs/", buffName, "setup", core, buffer, buff); - for (final Buff otherBuff : creature.getBuffList()) { + for (final Buff otherBuff : target.getBuffList()) { if (buff.getGroup1().equals(otherBuff.getGroup1())) if (buff.getPriority() >= otherBuff.getPriority()) { if (buff.getBuffName().equals(otherBuff.getBuffName())) { @@ -91,8 +111,8 @@ public class BuffService implements INetworkDispatch { if(otherBuff.getStacks() < otherBuff.getMaxStacks()) { buff.setStacks(otherBuff.getStacks() + 1); - if(creature.getDotByBuff(otherBuff) != null) // reset duration when theres a dot stack - creature.getDotByBuff(otherBuff).setStartTime(buff.getStartTime()); + if(target.getDotByBuff(otherBuff) != null) // reset duration when theres a dot stack + target.getDotByBuff(otherBuff).setStartTime(buff.getStartTime()); } else { buff.setStacks(buff.getMaxStacks()); @@ -102,7 +122,7 @@ public class BuffService implements INetworkDispatch { return null; } - removeBuffFromCreature(creature, otherBuff); + removeBuffFromCreature(target, otherBuff); break; } else { System.out.println("buff not added:" + buffName); @@ -111,9 +131,9 @@ public class BuffService implements INetworkDispatch { } if(FileUtilities.doesFileExist("scripts/buffs/" + buffName + ".py")) - core.scriptService.callScript("scripts/buffs/", buffName, "add", core, creature, buff); + core.scriptService.callScript("scripts/buffs/", buffName, "add", core, target, buff); - creature.addBuff(buff); + target.addBuff(buff); if(buff.getDuration() > 0) { @@ -122,7 +142,7 @@ public class BuffService implements INetworkDispatch { @Override public void run() { - removeBuffFromCreature(creature, buff); + removeBuffFromCreature(target, buff); } @@ -134,7 +154,7 @@ public class BuffService implements INetworkDispatch { } for (String effect : buff.getParticleEffect().split(",")) { - creature.playEffectObject(effect, buff.getBuffName()); + target.playEffectObject(effect, buff.getBuffName()); } if (!buff.getCallback().equals("")) { @@ -146,7 +166,7 @@ public class BuffService implements INetworkDispatch { PyObject method = core.scriptService.getMethod("scripts/buffs/", buff.getBuffName(), buff.getCallback()); if (method != null && method.isCallable()) { - method.__call__(Py.java2py(core), Py.java2py(creature), Py.java2py(buff)); + method.__call__(Py.java2py(core), Py.java2py(target), Py.java2py(buff)); } } @@ -154,7 +174,7 @@ public class BuffService implements INetworkDispatch { } } - if (buffer != null && creature.getGroupId() != 0 && creature.getGroupId() == buffer.getGroupId()) { + if (buffer != null && target.getGroupId() != 0 && target.getGroupId() == buffer.getGroupId()) { buff.setGroupBufferId(buffer.getObjectID()); } @@ -217,22 +237,34 @@ public class BuffService implements INetworkDispatch { } - public void addGroupBuff(final CreatureObject buffer, String buffName) { + public void addGroupBuff(CreatureObject buffer, String buffName) { + try { + throw new Exception(); + } catch (Exception e) { + // New system becoming necessary. Target can be the buffer for abilities that can't buff others. + System.out.println("WARNING: New GroupAddBuff Format: target, buffName, buffer"); + e.printStackTrace(); + } + + addGroupBuff(buffer, buffName, buffer); + } + + public void addGroupBuff(CreatureObject target, String buffName, CreatureObject buffer) { if(buffer.getGroupId() == 0) { - doAddBuff(buffer, buffName, null); + doAddBuff(target, buffName, buffer); return; } GroupObject group = (GroupObject) core.objectService.getObject(buffer.getGroupId()); if(group == null) { - doAddBuff(buffer, buffName, null); + doAddBuff(target, buffName, buffer); return; } for(SWGObject member : group.getMemberList()) { - Buff buff = doAddBuff((CreatureObject) member, buffName, buffer); + doAddBuff((CreatureObject) member, buffName, buffer); } } From cf5c36dd297b446ba4c0c70b352dd44e8276ca0c Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sun, 23 Mar 2014 13:42:18 -0400 Subject: [PATCH 083/107] Added Buff Workshop Collection, hologram variable to creatureobject (Added) BuffWorkshop Collection (Code) Added hologram variable to CreatureObject (BugFix) Inspiration ticks stop at max duration --- scripts/buffs/buildabuff_inspiration.py | 7 ++-- scripts/collections/col_entertainer_01.py | 12 ++++++ .../creature/CreatureMessageBuilder.java | 7 +++- .../objects/creature/CreatureObject.java | 15 ++++++- src/services/BuffService.java | 4 +- src/services/EntertainmentService.java | 39 +++++++++++++++---- .../collections/CollectionService.java | 4 +- 7 files changed, 72 insertions(+), 16 deletions(-) create mode 100644 scripts/collections/col_entertainer_01.py diff --git a/scripts/buffs/buildabuff_inspiration.py b/scripts/buffs/buildabuff_inspiration.py index 05e801fa..25ba7355 100644 --- a/scripts/buffs/buildabuff_inspiration.py +++ b/scripts/buffs/buildabuff_inspiration.py @@ -12,12 +12,11 @@ def add(core, actor, buff): return attached = actor.getAttachment('inspireDuration') - print (attached) + buff.setDuration(float(actor.getAttachment('inspireDuration') * 60)) - print ('Buff Duration: ' + str(actor.getAttachment('inspireDuration'))) + for BuffItem in buffWorkshop: core.skillModService.addSkillMod(actor, BuffItem.getSkillName(), BuffItem.getAffectAmount()) - print ('Gave skill mod ' + BuffItem.getSkillName() + ' with affect of ' + str(BuffItem.getAffectAmount())) return @@ -25,5 +24,5 @@ def remove(core, actor, buff): for BuffItem in actor.getAttachment('buffWorkshop'): core.skillModService.deductSkillMod(actor, BuffItem.getSkillName(), BuffItem.getAffectAmount()) - actor.setAttachment('buffWorkshop', 'none') + actor.setAttachment('buffWorkshop', None) return \ No newline at end of file diff --git a/scripts/collections/col_entertainer_01.py b/scripts/collections/col_entertainer_01.py new file mode 100644 index 00000000..100fa53e --- /dev/null +++ b/scripts/collections/col_entertainer_01.py @@ -0,0 +1,12 @@ +from java.lang import System +import sys + +def modify(core, actor, count): + return + +def complete(core, actor, collection): + ghost = actor.getSlottedObject('ghost') + + actor.sendSystemMessage('@collection_n:col_entertainer_01_finished', 0) + ghost.addAbility('bm_dancing_pet_entertainer') + return \ No newline at end of file diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index e3facb65..08f33a9b 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -379,7 +379,12 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.put((byte) 0); // performing? boolean buffer.put(creature.getDifficulty()); - buffer.putInt(0xFFFFFFFF); // -1 normal appearance, 0 hologram + + if(creature.isHologram()) + buffer.putInt(0); + else + buffer.putInt(0xFFFFFFFF); + buffer.put((byte) 1); // visibleOnRadar? boolean buffer.put((byte) 0); // no effect for 1? buffer.put((byte) 0); // no effect for 1? diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 012324e9..510ce0ed 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -57,7 +57,7 @@ import engine.resources.scene.Quaternion; import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; -@Entity(version=1) +@Entity(version=2) public class CreatureObject extends TangibleObject implements IPersistent { @NotPersistent @@ -118,6 +118,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { private byte moodId = 0; private int performanceCounter = 0; private int performanceId = 0; + private boolean hologram = false; //FIXME: this is a bit of a hack. private boolean performanceType = false; //FIXME: hmm.. or persistent? @@ -1676,4 +1677,16 @@ public class CreatureObject extends TangibleObject implements IPersistent { this.performingEffect = hasEffect; } } + + public void setHologram(boolean isHologram) { + synchronized(objectMutex) { + this.hologram = isHologram; + } + } + + public boolean isHologram() { + synchronized(objectMutex) { + return hologram; + } + } } diff --git a/src/services/BuffService.java b/src/services/BuffService.java index 662dea25..21c31fa9 100644 --- a/src/services/BuffService.java +++ b/src/services/BuffService.java @@ -60,7 +60,7 @@ public class BuffService implements INetworkDispatch { } - public void addBuffToCreature(final CreatureObject creature, String buffName) { + public boolean addBuffToCreature(final CreatureObject creature, String buffName) { /*if(!FileUtilities.doesFileExist("scripts/buffs/" + buffName + ".py")) { //System.out.println("Buff script doesnt exist for: " + buffName); @@ -70,8 +70,10 @@ public class BuffService implements INetworkDispatch { final Buff buff = new Buff(buffName, creature.getObjectID()); if(buff.isGroupBuff()) { addGroupBuff(creature, buffName); + return true; } else { doAddBuff(creature, buffName, null); + return true; } } diff --git a/src/services/EntertainmentService.java b/src/services/EntertainmentService.java index bc93d2cc..96522779 100644 --- a/src/services/EntertainmentService.java +++ b/src/services/EntertainmentService.java @@ -4,6 +4,7 @@ import java.nio.ByteOrder; import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import java.util.Random; import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; @@ -56,6 +57,8 @@ public class EntertainmentService implements INetworkDispatch { private ConcurrentHashMap performancesByIndex = new ConcurrentHashMap(); private ConcurrentHashMap danceMap = new ConcurrentHashMap(); + private Random ranWorkshop = new Random(); + private Map performanceEffects = new ConcurrentHashMap(); public EntertainmentService(NGECore core) { @@ -174,7 +177,7 @@ public class EntertainmentService implements INetworkDispatch { } } - giveInspirationBuff(buffRecipient, statBuffs); + giveInspirationBuff(buffRecipient, buffer, statBuffs); BuffBuilderEndMessage endBuilder = new BuffBuilderEndMessage(changeMessage); endBuilder.setObjectId(buffer.getObjectId()); @@ -204,7 +207,7 @@ public class EntertainmentService implements INetworkDispatch { } else { if (sentPacket.getAccepted() == true) { - giveInspirationBuff(buffRecipient, statBuffs); + giveInspirationBuff(buffRecipient, buffer, statBuffs); BuffBuilderEndMessage endBuilder = new BuffBuilderEndMessage(sentPacket); endBuilder.setObjectId(buffer.getObjectId()); @@ -358,8 +361,7 @@ public class EntertainmentService implements INetworkDispatch { core.commandService.registerCommand("ventriloquism"); } - public void giveInspirationBuff(CreatureObject reciever, Vector buffVector) { - CreatureObject buffCreature = (CreatureObject) reciever; + public void giveInspirationBuff(CreatureObject reciever, CreatureObject buffer, Vector buffVector) { Vector availableStats = buffBuilderSkills; Vector stats = new Vector(); @@ -384,8 +386,30 @@ public class EntertainmentService implements INetworkDispatch { reciever.setAttachment("buffWorkshop", stats); - core.buffService.addBuffToCreature(buffCreature, "buildabuff_inspiration"); + core.buffService.addBuffToCreature(reciever, "buildabuff_inspiration"); + /*PlayerObject rPlayer = (PlayerObject) reciever.getSlottedObject("ghost"); + + + long timeStamp = 0; + if (reciever.getAttachment("buffWorkshopTimestamp") != null) + timeStamp = (long) reciever.getAttachment("buffWorkshopTimestamp"); + + + if (core.buffService.addBuffToCreature(reciever, "buildabuff_inspiration") && !rPlayer.getProfession().equals("entertainer_1a")) { + if (timeStamp == 0 || (System.currentTimeMillis() - timeStamp > 86400000)) { + float random = ranWorkshop.nextFloat(); + if (random < 0.75f) { + + if(rPlayer.getProfession().contains("trader")) { core.collectionService.addCollection(buffer, "prof_trader"); } + + else { + core.collectionService.addCollection(buffer, rPlayer.getProfession()); + } + } + } else { buffer.sendSystemMessage("@collection:buffed_too_soon", (byte) 0); } + reciever.setAttachment("buffWorkshopTimestamp", System.currentTimeMillis()); + }*/ } public int getDanceVisualId(String danceName) { @@ -613,7 +637,8 @@ public class EntertainmentService implements INetworkDispatch { } if (time == buffCap) { - + System.out.println("Reached buff cap"); + spectator.getInspirationTick().cancel(true); } else { int entTick = 10; if (performer.getSkillMod("expertise_en_inspire_pulse_duration_increase") != null) { @@ -628,7 +653,7 @@ public class EntertainmentService implements INetworkDispatch { spectator.showFlyText("spam", "buff_duration_tick_observer", String.valueOf(hours) + " hours , " + hMinutes + " minutes ", 0, (float) 0.66, new RGB(255, 182, 193), 3, 78); spectator.setAttachment("inspireDuration", duration); - //System.out.println("Inspire Duration: " + spectator.getAttachment("inspireDuration") + " on " + spectator.getCustomName()); + System.out.println("Inspire Duration: " + spectator.getAttachment("inspireDuration") + " on " + spectator.getCustomName()); } } diff --git a/src/services/collections/CollectionService.java b/src/services/collections/CollectionService.java index e82c61d8..ae13cef3 100644 --- a/src/services/collections/CollectionService.java +++ b/src/services/collections/CollectionService.java @@ -225,10 +225,10 @@ public class CollectionService implements INetworkDispatch { BitSet maxValue = new BitSet(64); maxValue.set(64-maxSlotValue, 64); - if (bitValue.toLongArray()[0] < maxValue.toLongArray()[0]) { + /*if (bitValue.toLongArray()[0] < maxValue.toLongArray()[0]) { System.out.println(slotName + ", row " + c + ": counter-type slot uses " + bits + " bits, which can only hold a max value of " + bitValue.toLongArray()[0] + ", which is less than the specified max value of " + maxValue.toLongArray()[0]); throw new Exception(); - } + }*/ } } else { bits = 1; From e2a09f12d4f7c12c8fe46f2fcd301cb757cd92a9 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sun, 23 Mar 2014 14:04:21 -0400 Subject: [PATCH 084/107] Roadmap Rewards use giveItem, roadmap rewards call script based on profession --- src/services/PlayerService.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index 5c3eaf9c..fb203434 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -691,6 +691,8 @@ public class PlayerService implements INetworkDispatch { try { roadmap = ClientFileManager.loadFile("datatables/roadmap/item_rewards.iff", DatatableVisitor.class); + Vector rewards = new Vector(); + for (int s = 0; s < roadmap.getRowCount(); s++) { if (roadmap.getObject(s, 0) != null) { if (((String) roadmap.getObject(s, 1)).equals(roadmapSkillName)) { @@ -715,11 +717,12 @@ public class PlayerService implements INetworkDispatch { item = (item.substring(0, (item.lastIndexOf("/") + 1)) + "shared_" + item.substring((item.lastIndexOf("/") + 1))); } else { customServerTemplate = item; - item = core.scriptService.callScript("scripts/roadmap/", "roadmap_rewards", "get", item).asString(); + item = core.scriptService.callScript("scripts/roadmap/", player.getProfession(), "getRewards", item).asString(); } if (item != null && item != "") { - creature.getSlottedObject("inventory").add(core.objectService.createObject(item, 0, creature.getPlanet(), new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), customServerTemplate)); + SWGObject itemObj = core.objectService.createObject(item, 0, creature.getPlanet(), new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), customServerTemplate); + rewards.add(itemObj); } else { //System.out.println("Can't find template: " + item); } @@ -731,6 +734,11 @@ public class PlayerService implements INetworkDispatch { } } } + + if (rewards != null && !rewards.isEmpty()) { + giveItems(creature, (SWGObject[]) rewards.toArray()); + } + } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } From bd228e971a82b805c15c3e00dcf05a6db79c148f Mon Sep 17 00:00:00 2001 From: Seefo Date: Sun, 23 Mar 2014 15:03:36 -0400 Subject: [PATCH 085/107] Fixed issue #227 and #202 --- scripts/commands/duel.py | 1 + src/services/combat/CombatService.java | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/commands/duel.py b/scripts/commands/duel.py index 4ce25bdf..cd26b240 100644 --- a/scripts/commands/duel.py +++ b/scripts/commands/duel.py @@ -22,6 +22,7 @@ def run(core, actor, target, commandString): if actor.getDuelList().contains(target): actor.sendSystemMessage('You already challenged ' + target.getCustomName() + ' to a duel.', 0) + return combatSvc.handleDuel(actor, target) diff --git a/src/services/combat/CombatService.java b/src/services/combat/CombatService.java index 01f73d43..3a3d8ddb 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -504,10 +504,10 @@ public class CombatService implements INetworkDispatch { if(attacker.getAttachment("AI") instanceof AIActor && target instanceof CreatureObject) { ((AIActor) attacker.getAttachment("AI")).addDefender((CreatureObject) target); } else { - attacker.addDefender(target); + attacker.addDefender(target); // See below comment } - attacker.addDefender(target); + //attacker.addDefender(target); // Why do we need to add target to defender list twice? return true; From 60e955f76b41cbc871287efbe1de99e032303758 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 20:49:40 +0100 Subject: [PATCH 086/107] Scripts - Fixed syntax error in Ambush command --- scripts/commands/combat/bh_dm_crit_1.py | 2 +- scripts/commands/combat/bh_dm_crit_2.py | 2 +- scripts/commands/combat/bh_dm_crit_3.py | 2 +- scripts/commands/combat/bh_dm_crit_4.py | 2 +- scripts/commands/combat/bh_dm_crit_5.py | 2 +- scripts/commands/combat/bh_dm_crit_6.py | 2 +- scripts/commands/combat/bh_dm_crit_7.py | 2 +- scripts/commands/combat/bh_dm_crit_8.py | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/commands/combat/bh_dm_crit_1.py b/scripts/commands/combat/bh_dm_crit_1.py index aec51439..c12e2a2a 100644 --- a/scripts/commands/combat/bh_dm_crit_1.py +++ b/scripts/commands/combat/bh_dm_crit_1.py @@ -11,7 +11,7 @@ def setup(core, actor, target, command): command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) if actor.getSkillMod('expertise_critical_line_dm_crit'): - command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit') + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) return diff --git a/scripts/commands/combat/bh_dm_crit_2.py b/scripts/commands/combat/bh_dm_crit_2.py index aec51439..c12e2a2a 100644 --- a/scripts/commands/combat/bh_dm_crit_2.py +++ b/scripts/commands/combat/bh_dm_crit_2.py @@ -11,7 +11,7 @@ def setup(core, actor, target, command): command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) if actor.getSkillMod('expertise_critical_line_dm_crit'): - command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit') + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) return diff --git a/scripts/commands/combat/bh_dm_crit_3.py b/scripts/commands/combat/bh_dm_crit_3.py index aec51439..c12e2a2a 100644 --- a/scripts/commands/combat/bh_dm_crit_3.py +++ b/scripts/commands/combat/bh_dm_crit_3.py @@ -11,7 +11,7 @@ def setup(core, actor, target, command): command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) if actor.getSkillMod('expertise_critical_line_dm_crit'): - command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit') + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) return diff --git a/scripts/commands/combat/bh_dm_crit_4.py b/scripts/commands/combat/bh_dm_crit_4.py index aec51439..c12e2a2a 100644 --- a/scripts/commands/combat/bh_dm_crit_4.py +++ b/scripts/commands/combat/bh_dm_crit_4.py @@ -11,7 +11,7 @@ def setup(core, actor, target, command): command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) if actor.getSkillMod('expertise_critical_line_dm_crit'): - command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit') + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) return diff --git a/scripts/commands/combat/bh_dm_crit_5.py b/scripts/commands/combat/bh_dm_crit_5.py index aec51439..c12e2a2a 100644 --- a/scripts/commands/combat/bh_dm_crit_5.py +++ b/scripts/commands/combat/bh_dm_crit_5.py @@ -11,7 +11,7 @@ def setup(core, actor, target, command): command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) if actor.getSkillMod('expertise_critical_line_dm_crit'): - command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit') + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) return diff --git a/scripts/commands/combat/bh_dm_crit_6.py b/scripts/commands/combat/bh_dm_crit_6.py index aec51439..c12e2a2a 100644 --- a/scripts/commands/combat/bh_dm_crit_6.py +++ b/scripts/commands/combat/bh_dm_crit_6.py @@ -11,7 +11,7 @@ def setup(core, actor, target, command): command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) if actor.getSkillMod('expertise_critical_line_dm_crit'): - command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit') + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) return diff --git a/scripts/commands/combat/bh_dm_crit_7.py b/scripts/commands/combat/bh_dm_crit_7.py index aec51439..c12e2a2a 100644 --- a/scripts/commands/combat/bh_dm_crit_7.py +++ b/scripts/commands/combat/bh_dm_crit_7.py @@ -11,7 +11,7 @@ def setup(core, actor, target, command): command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) if actor.getSkillMod('expertise_critical_line_dm_crit'): - command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit') + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) return diff --git a/scripts/commands/combat/bh_dm_crit_8.py b/scripts/commands/combat/bh_dm_crit_8.py index aec51439..c12e2a2a 100644 --- a/scripts/commands/combat/bh_dm_crit_8.py +++ b/scripts/commands/combat/bh_dm_crit_8.py @@ -11,7 +11,7 @@ def setup(core, actor, target, command): command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) if actor.getSkillMod('expertise_critical_line_dm_crit'): - command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit') + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) return From 0f390c063b21279bbfd57753eade7a4a31019b64 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sun, 23 Mar 2014 15:59:29 -0400 Subject: [PATCH 087/107] No exp for entertainer above 90, fixed unity radial, changed giveItems --- scripts/commands/startdance.py | 3 +- scripts/radial/player.py | 17 ++++++-- scripts/radial/ring/unity.py | 4 +- .../objectControllerObjects/ShowLootBox.java | 26 ++++++++---- .../objects/creature/CreatureObject.java | 1 + .../objects/tangible/TangibleObject.java | 6 +-- src/services/EntertainmentService.java | 15 +++---- src/services/PlayerService.java | 40 ++++++++++++++++--- .../collections/CollectionService.java | 2 +- 9 files changed, 81 insertions(+), 33 deletions(-) diff --git a/scripts/commands/startdance.py b/scripts/commands/startdance.py index 23b815c6..13aba090 100644 --- a/scripts/commands/startdance.py +++ b/scripts/commands/startdance.py @@ -77,7 +77,6 @@ def startDance(core, actor, danceName, visual): #TODO: check costume if actor.getPosture() != Posture.Upright: - print (' can\t dance because ' + str(actor.getPosture())) actor.sendSystemMessage('@performance:dance_fail', 0) return @@ -97,7 +96,7 @@ def startDance(core, actor, danceName, visual): actor.setPosture(0x09); playerObject = actor.getSlottedObject('ghost') - if playerObject and playerObject.getProfession() == "entertainer_1a": + if playerObject and playerObject.getProfession() == "entertainer_1a" and actor.getLevel() != 90: entSvc.startPerformanceExperience(actor) dance = entSvc.getDance(visual) diff --git a/scripts/radial/player.py b/scripts/radial/player.py index 4b6d74bd..6ad15a17 100644 --- a/scripts/radial/player.py +++ b/scripts/radial/player.py @@ -4,11 +4,16 @@ import sys def createRadial(core, owner, target, radials): if target.getPosture() == Posture.SkillAnimating: - if target.getPerformanceType() is True: - radials.add(RadialOptions(0, 140, 3, 'Watch')) + if owner.getPerformanceWatchee() == target: + if target.getPerformanceType() is True: + radials.add(RadialOptions(0, 141, 3, 'Stop Watching')) + elif owner.getPerformanceListenee() == target: # TODO: Get rid of PerformanceWatchee variable, no need for listenee (same thing really) + radials.add(RadialOptions(0, 141, 3, 'Stop Listening')) else: - radials.add(RadialOptions(0, 140, 3, 'Listen')) - + if target.getPerformanceType() is True: + radials.add(RadialOptions(0, 140, 3, 'Watch')) + else: + radials.add(RadialOptions(0, 140, 3, 'Listen')) return def handleSelection(core, owner, target, option): @@ -20,4 +25,8 @@ def handleSelection(core, owner, target, option): # TODO: Insert callCommand /listen return return + + if option == 141: + #core.commandService.callCommand(owner, 'stopwatching', target, '') #SWGList error for remove audience in CreatureObject + return return \ No newline at end of file diff --git a/scripts/radial/ring/unity.py b/scripts/radial/ring/unity.py index 8c1c4c5d..92940452 100644 --- a/scripts/radial/ring/unity.py +++ b/scripts/radial/ring/unity.py @@ -16,10 +16,10 @@ def createRadial(core, owner, target, radials): if targetPlayer is not None and targetPlayer.getSlottedObject('ghost') is not None: if targetPlayer.getObjectID() == owner.getObjectID(): return - radials.add(RadialOptions(0, 69, 1, '@unity:mnu_propose')) + radials.add(RadialOptions(0, 69, 3, '@unity:mnu_propose')) return else: - radials.add(RadialOptions(0, 70, 1, '@unity:mnu_divorce')) + radials.add(RadialOptions(0, 70, 3, '@unity:mnu_divorce')) return return diff --git a/src/protocol/swg/objectControllerObjects/ShowLootBox.java b/src/protocol/swg/objectControllerObjects/ShowLootBox.java index e295fc2d..432ddd14 100644 --- a/src/protocol/swg/objectControllerObjects/ShowLootBox.java +++ b/src/protocol/swg/objectControllerObjects/ShowLootBox.java @@ -23,6 +23,7 @@ package protocol.swg.objectControllerObjects; import java.nio.ByteOrder; import java.util.List; +import java.util.Vector; import org.apache.mina.core.buffer.IoBuffer; @@ -33,9 +34,15 @@ import resources.common.StringUtilities; public class ShowLootBox extends ObjControllerObject { private long playerId; - private SWGObject[] rewards; + private Vector rewards; + private SWGObject reward; - public ShowLootBox(long playerId, SWGObject[] rewards) { + public ShowLootBox(long playerId, SWGObject reward) { + this.playerId = playerId; + this.rewards = rewards; + } + + public ShowLootBox(long playerId, Vector rewards) { this.playerId = playerId; this.rewards = rewards; } @@ -47,19 +54,24 @@ public class ShowLootBox extends ObjControllerObject { @Override public IoBuffer serialize() { - // Controller Type = 11 - IoBuffer buffer = IoBuffer.allocate(20 + (rewards.length * 8)).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer; + + if (rewards != null) + buffer = IoBuffer.allocate(20 + (rewards.size() * 8)).order(ByteOrder.LITTLE_ENDIAN); + + else + buffer = IoBuffer.allocate(28).order(ByteOrder.LITTLE_ENDIAN); buffer.putInt(ObjControllerMessage.SHOW_LOOT_BOX); buffer.putLong(playerId); buffer.putInt(0); // 1 for a black background on icon, 0 or 2 for transparent (default) - if (rewards.length == 1) { + if (rewards == null) { buffer.putInt(1); - buffer.putLong(rewards[0].getObjectId()); + buffer.putLong(reward.getObjectId()); } else { - buffer.putInt(rewards.length); + buffer.putInt(rewards.size()); for(SWGObject obj : rewards) { buffer.putLong(obj.getObjectID()); } diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 510ce0ed..2d89527f 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -422,6 +422,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { if(performanceType) { next.sendSystemMessage("You stop watching " + getCustomName() + ".",(byte)0); } else { next.sendSystemMessage("You stop listening to " + getCustomName() + ".",(byte)0); } next.getSpectatorTask().cancel(true); + next.getInspirationTick().cancel(true); } //not sure if this behaviour is correct. might need fixing later. performanceAudience = new SWGList(); diff --git a/src/resources/objects/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index edadfaf2..8c579480 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -322,15 +322,15 @@ public class TangibleObject extends SWGObject { } public void showFlyText(String stfFile, String stfString, String customText, int xp, float scale, RGB color, int displayType, int unkInt) { - Set observers = getObservers(); + //Set observers = getObservers(); if (getClient() != null) { getClient().getSession().write((new ObjControllerMessage(0x0000000B, new ShowFlyText(getObjectID(), getObjectID(), unkInt, 1, 1, -1, stfFile, stfString, customText, xp, scale, color, displayType))).serialize()); } - for (Client client : observers) { + /*for (Client client : observers) { client.getSession().write((new ObjControllerMessage(0x0000000B, new ShowFlyText(client.getParent().getObjectID(), getObjectID(), unkInt, 1, 1, -1, stfFile, stfString, customText, xp, scale, color, displayType))).serialize()); - } + }*/ } public void playEffectObject(String effectFile, String commandString) { diff --git a/src/services/EntertainmentService.java b/src/services/EntertainmentService.java index 96522779..9e1a0b64 100644 --- a/src/services/EntertainmentService.java +++ b/src/services/EntertainmentService.java @@ -386,17 +386,14 @@ public class EntertainmentService implements INetworkDispatch { reciever.setAttachment("buffWorkshop", stats); - core.buffService.addBuffToCreature(reciever, "buildabuff_inspiration"); - - /*PlayerObject rPlayer = (PlayerObject) reciever.getSlottedObject("ghost"); + PlayerObject rPlayer = (PlayerObject) reciever.getSlottedObject("ghost"); - long timeStamp = 0; if (reciever.getAttachment("buffWorkshopTimestamp") != null) timeStamp = (long) reciever.getAttachment("buffWorkshopTimestamp"); - - if (core.buffService.addBuffToCreature(reciever, "buildabuff_inspiration") && !rPlayer.getProfession().equals("entertainer_1a")) { + core.buffService.addBuffToCreature(reciever, "buildabuff_inspiration", buffer); + /*if (core.buffService.addBuffToCreature(reciever, "buildabuff_inspiration", buffer) && !rPlayer.getProfession().equals("entertainer_1a")) { if (timeStamp == 0 || (System.currentTimeMillis() - timeStamp > 86400000)) { float random = ranWorkshop.nextFloat(); if (random < 0.75f) { @@ -636,8 +633,8 @@ public class EntertainmentService implements INetworkDispatch { buffCap += durationMod.getBase() + durationMod.getModifier(); } - if (time == buffCap) { - System.out.println("Reached buff cap"); + if (time >= buffCap) { + spectator.setAttachment("inspireDuration", buffCap); // incase someone went over cap spectator.getInspirationTick().cancel(true); } else { int entTick = 10; @@ -653,7 +650,7 @@ public class EntertainmentService implements INetworkDispatch { spectator.showFlyText("spam", "buff_duration_tick_observer", String.valueOf(hours) + " hours , " + hMinutes + " minutes ", 0, (float) 0.66, new RGB(255, 182, 193), 3, 78); spectator.setAttachment("inspireDuration", duration); - System.out.println("Inspire Duration: " + spectator.getAttachment("inspireDuration") + " on " + spectator.getCustomName()); + //System.out.println("Inspire Duration: " + spectator.getAttachment("inspireDuration") + " on " + spectator.getCustomName()); } } diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index 195726a1..dd2f9608 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -761,7 +761,7 @@ public class PlayerService implements INetworkDispatch { } if (rewards != null && !rewards.isEmpty()) { - giveItems(creature, (SWGObject[]) rewards.toArray()); + giveItems(creature, rewards); } } catch (InstantiationException | IllegalAccessException e) { @@ -775,6 +775,9 @@ public class PlayerService implements INetworkDispatch { } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } + + if(player.getProfession().equals("entertainer_1a") && creature.getLevel() == (short) 90) + creature.getEntertainerExperience().cancel(true); //} } @@ -818,11 +821,38 @@ public class PlayerService implements INetworkDispatch { } /** - * Gives a player items and shows the "New Items" message. - * @param reciever Player receiving the items - * @param items The object(s) to be given. This will allow multiple arguments. + * Gives a player an item and shows the "New Items" message. + * @param reciever Player receiving the item. + * @param item The object to be given. + * @author Waverunner */ - public void giveItems(CreatureObject reciever, SWGObject... items) { + public void giveItem(CreatureObject reciever, SWGObject item) { + if (reciever == null || item == null) + return; + + if (reciever.getClient() == null) + return; + Client client = reciever.getClient(); + + if (client.getSession() == null) + return; + SWGObject inventory = reciever.getSlottedObject("inventory"); + + if (inventory == null) + return; + + inventory.add(item); + + ObjControllerMessage objController = new ObjControllerMessage(11, new ShowLootBox(reciever.getObjectID(), item)); + client.getSession().write(objController.serialize()); + } + + /** + * Gives a player a variety of items and shows the "New Items" message. + * @param reciever Player receiving the items. + * @param items Vector of the items. + */ + public void giveItems(CreatureObject reciever, Vector items) { if (reciever == null || items == null) return; diff --git a/src/services/collections/CollectionService.java b/src/services/collections/CollectionService.java index 582b4aab..e31bde4c 100644 --- a/src/services/collections/CollectionService.java +++ b/src/services/collections/CollectionService.java @@ -142,7 +142,7 @@ public class CollectionService implements INetworkDispatch { int bits = 0; boolean noScriptOnModify = false; boolean clearOnComplete = false; - boolean noMessage = false; + boolean noMessage = true; boolean grantIfPreReqMet = true; boolean buddyCollection = false; int numAltTitles = 0; From c0fcda14df703c065225451e40eb7bcc556620d7 Mon Sep 17 00:00:00 2001 From: Seefo Date: Sun, 23 Mar 2014 16:04:57 -0400 Subject: [PATCH 088/107] Fixed issue #114 --- src/services/EquipmentService.java | 5 +++-- src/services/SkillService.java | 3 --- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/services/EquipmentService.java b/src/services/EquipmentService.java index 9f8ce9a5..cc3ebe02 100644 --- a/src/services/EquipmentService.java +++ b/src/services/EquipmentService.java @@ -172,7 +172,6 @@ public class EquipmentService implements INetworkDispatch { } public void equip(CreatureObject actor, SWGObject item) { - String template = ((item.getAttachment("customServerTemplate") == null) ? item.getTemplate() : (item.getTemplate().split("shared_")[0] + "shared_" + ((String) item.getAttachment("customServerTemplate")) + ".iff")); String serverTemplate = template.replace(".iff", ""); PyObject func = core.scriptService.getMethod("scripts/" + serverTemplate.split("shared_" , 2)[0].replace("shared_", ""), serverTemplate.split("shared_" , 2)[1], "equip"); @@ -221,7 +220,6 @@ public class EquipmentService implements INetworkDispatch { public void unequip(CreatureObject actor, SWGObject item) { - String template = ((item.getAttachment("customServerTemplate") == null) ? item.getTemplate() : (item.getTemplate().split("shared_")[0] + "shared_" + ((String) item.getAttachment("customServerTemplate")) + ".iff")); String serverTemplate = template.replace(".iff", ""); PyObject func = core.scriptService.getMethod("scripts/" + serverTemplate.split("shared_" , 2)[0].replace("shared_", ""), serverTemplate.split("shared_" , 2)[1], "unequip"); @@ -241,6 +239,9 @@ public class EquipmentService implements INetworkDispatch { if(e.getKey().startsWith("cat_skill_mod_bonus.@stat_n:")) { core.skillModService.deductSkillMod(actor, e.getKey().replace("cat_skill_mod_bonus.@stat_n:", ""), Integer.parseInt((String) e.getValue())); + } + if(e.getKey().startsWith("cat_stat_mod_bonus.@stat_n:")) { + core.skillModService.deductSkillMod(actor, e.getKey().replace("cat_stat_mod_bonus.@stat_n:", ""), Integer.parseInt((String) e.getValue())); } if(e.getKey().startsWith("cat_attrib_mod_bonus.attr_health")) { actor.setMaxHealth(actor.getMaxHealth() - Integer.parseInt((String) e.getValue())); diff --git a/src/services/SkillService.java b/src/services/SkillService.java index c3926f7b..e1cff8a2 100644 --- a/src/services/SkillService.java +++ b/src/services/SkillService.java @@ -287,15 +287,12 @@ public class SkillService implements INetworkDispatch { public int caluclateExpertisePoints(CreatureObject creature) { int expertisePoints = 0; - try { DatatableVisitor table = ClientFileManager.loadFile("datatables/player/player_level.iff", DatatableVisitor.class); for (int i = 0; i <= creature.getLevel(); i++) expertisePoints += (int) table.getObject(i, 5); } catch (Exception e) { e.printStackTrace(); } - - System.out.println("Player should have " + expertisePoints + " expertise points."); return expertisePoints; } From 6e0049ea3764014277bbe664a6f5044cdd38f86b Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sun, 23 Mar 2014 16:32:25 -0400 Subject: [PATCH 089/107] Reduced spawning distance from traveling --- src/services/travel/TravelService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/travel/TravelService.java b/src/services/travel/TravelService.java index 6eeb3bb5..c81be385 100644 --- a/src/services/travel/TravelService.java +++ b/src/services/travel/TravelService.java @@ -323,7 +323,7 @@ public class TravelService implements INetworkDispatch { public void doTransport(SWGObject actor, TravelPoint tp) { Planet planet = core.terrainService.getPlanetByName(tp.getPlanetName()); - Point3D spawnLocation = SpawnPoint.getRandomPosition(tp.getShuttle().getPosition(), 10, 50, actor.getPlanetId()); + Point3D spawnLocation = SpawnPoint.getRandomPosition(tp.getShuttle().getPosition(), 5, 20, actor.getPlanetId()); core.simulationService.transferToPlanet(actor, planet, spawnLocation, new Quaternion(0, 0, 0, 0), null); } From b0025f5d61f184855e9a795f268904134c2bf6bf Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 23 Mar 2014 22:43:00 +0100 Subject: [PATCH 090/107] Jedi - Wracking Energy now affects Maelstrom --- scripts/commands/combat/fs_maelstrom_1.py | 11 +++++++++++ scripts/commands/combat/fs_maelstrom_2.py | 11 +++++++++++ scripts/commands/combat/fs_maelstrom_3.py | 11 +++++++++++ scripts/commands/combat/fs_maelstrom_4.py | 11 +++++++++++ scripts/commands/combat/fs_maelstrom_5.py | 11 +++++++++++ 5 files changed, 55 insertions(+) create mode 100644 scripts/commands/combat/fs_maelstrom_1.py create mode 100644 scripts/commands/combat/fs_maelstrom_2.py create mode 100644 scripts/commands/combat/fs_maelstrom_3.py create mode 100644 scripts/commands/combat/fs_maelstrom_4.py create mode 100644 scripts/commands/combat/fs_maelstrom_5.py diff --git a/scripts/commands/combat/fs_maelstrom_1.py b/scripts/commands/combat/fs_maelstrom_1.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_maelstrom_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_maelstrom_2.py b/scripts/commands/combat/fs_maelstrom_2.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_maelstrom_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_maelstrom_3.py b/scripts/commands/combat/fs_maelstrom_3.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_maelstrom_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_maelstrom_4.py b/scripts/commands/combat/fs_maelstrom_4.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_maelstrom_4.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_maelstrom_5.py b/scripts/commands/combat/fs_maelstrom_5.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_maelstrom_5.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file From c7c56b5c812d91622ce5d39e7410c823f3be4972 Mon Sep 17 00:00:00 2001 From: Seefo Date: Sun, 23 Mar 2014 19:19:18 -0400 Subject: [PATCH 091/107] Initial work on Character Builder Terminal For some reason after using the blue frog, you will have to wait a minute or so to use it again. --- .../terminal/terminal_character_builder.py | 5 + scripts/static_spawns/tatooine.py | 2 +- src/main/NGECore.java | 3 + src/services/DevService.java | 152 ++++++++++++++++++ 4 files changed, 161 insertions(+), 1 deletion(-) create mode 100644 src/services/DevService.java diff --git a/scripts/object/tangible/terminal/terminal_character_builder.py b/scripts/object/tangible/terminal/terminal_character_builder.py index ccad8904..d95cbb4c 100644 --- a/scripts/object/tangible/terminal/terminal_character_builder.py +++ b/scripts/object/tangible/terminal/terminal_character_builder.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'usable') + return + +def use(core, owner, target): + core.devService.sendCharacterBuilderSUI(owner, 0); return \ No newline at end of file diff --git a/scripts/static_spawns/tatooine.py b/scripts/static_spawns/tatooine.py index 4ff2338b..785f26b5 100644 --- a/scripts/static_spawns/tatooine.py +++ b/scripts/static_spawns/tatooine.py @@ -8,7 +8,7 @@ def addPlanetSpawns(core, planet): #this script is no longer for NPC spawning usage. - Levarris #stcSvc.spawnObject('object/mobile/shared_3po_protocol_droid_red.iff', 'tatooine', long(26582), float(-14.3), float(2.0), float(47.4), float(0.70), float(0.71)) - + stcSvc.spawnObject('object/tangible/terminal/shared_terminal_character_builder.iff', 'tatooine', long(0), float(3525), float(4), float(-4801), float(0.70), float(0.71)) return diff --git a/src/main/NGECore.java b/src/main/NGECore.java index 6a351892..fbdea822 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -52,6 +52,7 @@ import services.AttributeService; import services.BuffService; import services.CharacterService; import services.ConnectionService; +import services.DevService; import services.EntertainmentService; import services.EquipmentService; import services.GroupService; @@ -165,6 +166,7 @@ public class NGECore { public AIService aiService; //public MissionService missionService; public InstanceService instanceService; + public DevService devService; // Login Server public NetworkDispatch loginDispatch; @@ -257,6 +259,7 @@ public class NGECore { skillModService = new SkillModService(this); equipmentService = new EquipmentService(this); entertainmentService = new EntertainmentService(this); + devService = new DevService(this); if (config.keyExists("JYTHONCONSOLE.PORT")) { int jythonPort = config.getInt("JYTHONCONSOLE.PORT"); diff --git a/src/services/DevService.java b/src/services/DevService.java new file mode 100644 index 00000000..41dd9190 --- /dev/null +++ b/src/services/DevService.java @@ -0,0 +1,152 @@ +/******************************************************************************* + * 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 services; + +import java.nio.ByteOrder; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Vector; + +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; + +import protocol.swg.ExpertiseRequestMessage; + +import resources.common.Console; +import resources.common.FileUtilities; +import resources.common.Opcodes; +import resources.common.SpawnPoint; +import resources.objects.building.BuildingObject; +import resources.objects.creature.CreatureObject; +import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; +import services.sui.SUIWindow; +import services.sui.SUIService.ListBoxType; +import services.sui.SUIWindow.SUICallback; +import services.sui.SUIWindow.Trigger; +import main.NGECore; +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; +import engine.clients.Client; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +@SuppressWarnings("unused") +public class DevService implements INetworkDispatch { + + private NGECore core; + + public DevService(NGECore core) { + this.core = core; + } + + public void sendCharacterBuilderSUI(CreatureObject creature, int childMenu) + { + Map suiOptions = new HashMap(); + + switch(childMenu) + { + case 0: + suiOptions.put((long) 1, "Character"); + suiOptions.put((long) 2, "Items"); + break; + case 1: + suiOptions.put((long) 10, "Set combat level to 90"); + suiOptions.put((long) 11, "Give 100,000 credits"); + break; + case 2: + suiOptions.put((long) 20, "(Light) Jedi Robe"); + suiOptions.put((long) 21, "(Dark) Jedi Robe"); + suiOptions.put((long) 22, "Composite Armor"); + break; + } + + final SUIWindow window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "Character Builder Terminal", "Select the desired option and click OK.", suiOptions, creature, null, 10); + Vector returnList = new Vector(); + + returnList.add("List.lstList:SelectedRow"); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() + { + public void process(SWGObject owner, int eventType, Vector returnList) + { + int index = Integer.parseInt(returnList.get(0)); + int childIndex = (int) window.getObjectIdByIndex(index); + + CreatureObject player = (CreatureObject) owner; + SWGObject inventory = player.getSlottedObject("inventory"); + Planet planet = player.getPlanet(); + + switch(childIndex) + { + case 1: + sendCharacterBuilderSUI(player, childIndex); + return; + case 2: + sendCharacterBuilderSUI(player, childIndex); + return; + case 10: + core.playerService.giveExperience(player, 999999999); + return; + case 11: + player.setCashCredits(player.getCashCredits() + 100000); + return; + case 20: + inventory.add(core.objectService.createObject("object/tangible/wearables/robe/shared_robe_jedi_light_s03.iff", planet)); + return; + case 21: + inventory.add(core.objectService.createObject("object/tangible/wearables/robe/shared_robe_jedi_dark_s03.iff", planet)); + return; + case 22: + inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bicep_r.iff", planet)); + inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff", planet)); + inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bracer_r.iff", planet)); + inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bracer_l.iff", planet)); + inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_helmet.iff", planet)); + inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_chest_plate.iff", planet)); + inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_leggings.iff", planet)); + inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_boots.iff", planet)); + inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_gloves.iff", planet)); + return; + } + } + }); + + core.suiService.openSUIWindow(window); + } + + @Override + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + } + + + @Override + public void shutdown() { + + } + +} From 859729e48e86579f19991ab85e309efbb3451883 Mon Sep 17 00:00:00 2001 From: Seefo Date: Sun, 23 Mar 2014 20:03:15 -0400 Subject: [PATCH 092/107] Added message if a player cannot equip an item. --- scripts/commands/transferitemarmor.py | 1 + scripts/commands/transferitemmisc.py | 1 + scripts/commands/transferitemweapon.py | 1 + scripts/commands/ventriloquism.py | 2 +- 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/commands/transferitemarmor.py b/scripts/commands/transferitemarmor.py index bfd8486d..2edbec74 100644 --- a/scripts/commands/transferitemarmor.py +++ b/scripts/commands/transferitemarmor.py @@ -5,6 +5,7 @@ def setup(): def run(core, actor, target, commandString): if core.equipmentService.canEquip(actor, target) is False: + actor.sendSystemMessage('@error_message:insufficient_skill', 0) return diff --git a/scripts/commands/transferitemmisc.py b/scripts/commands/transferitemmisc.py index ee205206..5dc726fd 100644 --- a/scripts/commands/transferitemmisc.py +++ b/scripts/commands/transferitemmisc.py @@ -5,6 +5,7 @@ def setup(): def run(core, actor, target, commandString): if core.equipmentService.canEquip(actor, target) is False: + actor.sendSystemMessage('@error_message:insufficient_skill', 0) return diff --git a/scripts/commands/transferitemweapon.py b/scripts/commands/transferitemweapon.py index 2640ac0c..71a6d322 100644 --- a/scripts/commands/transferitemweapon.py +++ b/scripts/commands/transferitemweapon.py @@ -5,6 +5,7 @@ def setup(): def run(core, actor, target, commandString): if core.equipmentService.canEquip(actor, target) is False: + actor.sendSystemMessage('@error_message:insufficient_skill') return diff --git a/scripts/commands/ventriloquism.py b/scripts/commands/ventriloquism.py index dca08014..043293ff 100644 --- a/scripts/commands/ventriloquism.py +++ b/scripts/commands/ventriloquism.py @@ -20,7 +20,7 @@ def run(core, actor, target, commandString): rLevel = 90 if actor.getLevel() < rLevel: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) if core.entertainmentService.performEffect(actor, command, effect, target) is True: actor.sendSystemMessage('@performance:effect_perform_ventriloquism', 0) From 01b29d87df3aac503d15e188d9f066a973154019 Mon Sep 17 00:00:00 2001 From: Seefo Date: Sun, 23 Mar 2014 21:16:01 -0400 Subject: [PATCH 093/107] Added more items to Character Builder Terminal --- scripts/commands/transferitemweapon.py | 2 +- src/services/DevService.java | 86 ++++++++++++++++++++++---- src/services/EquipmentService.java | 2 +- 3 files changed, 76 insertions(+), 14 deletions(-) diff --git a/scripts/commands/transferitemweapon.py b/scripts/commands/transferitemweapon.py index 71a6d322..6e356571 100644 --- a/scripts/commands/transferitemweapon.py +++ b/scripts/commands/transferitemweapon.py @@ -5,7 +5,7 @@ def setup(): def run(core, actor, target, commandString): if core.equipmentService.canEquip(actor, target) is False: - actor.sendSystemMessage('@error_message:insufficient_skill') + actor.sendSystemMessage('@error_message:insufficient_skill', 0) return diff --git a/src/services/DevService.java b/src/services/DevService.java index 41dd9190..feb3c1a3 100644 --- a/src/services/DevService.java +++ b/src/services/DevService.java @@ -70,18 +70,24 @@ public class DevService implements INetworkDispatch { switch(childMenu) { - case 0: + case 0: // Root suiOptions.put((long) 1, "Character"); suiOptions.put((long) 2, "Items"); break; - case 1: + case 1: // Character suiOptions.put((long) 10, "Set combat level to 90"); suiOptions.put((long) 11, "Give 100,000 credits"); break; - case 2: + case 2: // Items suiOptions.put((long) 20, "(Light) Jedi Robe"); suiOptions.put((long) 21, "(Dark) Jedi Robe"); suiOptions.put((long) 22, "Composite Armor"); + suiOptions.put((long) 23, "Weapons"); + break; + case 3: // [Items] Weapons + suiOptions.put((long) 30, "Jedi Weapons"); + suiOptions.put((long) 31, "Melee Weapons"); + suiOptions.put((long) 32, "Ranged Weapons"); break; } @@ -103,25 +109,30 @@ public class DevService implements INetworkDispatch { switch(childIndex) { - case 1: - sendCharacterBuilderSUI(player, childIndex); + // Root + case 1: // Character + sendCharacterBuilderSUI(player, 1); return; - case 2: - sendCharacterBuilderSUI(player, childIndex); + case 2: // Items + sendCharacterBuilderSUI(player, 2); return; - case 10: + + // Character + case 10: // Set combat level to 90 core.playerService.giveExperience(player, 999999999); return; - case 11: + case 11: // Give 100,000 credits player.setCashCredits(player.getCashCredits() + 100000); return; - case 20: + + // Items + case 20: // (Light) Jedi Robe inventory.add(core.objectService.createObject("object/tangible/wearables/robe/shared_robe_jedi_light_s03.iff", planet)); return; - case 21: + case 21: // (Dark) Jedi Robe inventory.add(core.objectService.createObject("object/tangible/wearables/robe/shared_robe_jedi_dark_s03.iff", planet)); return; - case 22: + case 22: // Composite Armor inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bicep_r.iff", planet)); inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff", planet)); inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bracer_r.iff", planet)); @@ -132,6 +143,57 @@ public class DevService implements INetworkDispatch { inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_boots.iff", planet)); inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_gloves.iff", planet)); return; + case 23: // Weapons + sendCharacterBuilderSUI(player, 3); + return; + + // [Items] Weapons + case 30: // Jedi Weapons + SWGObject lightsaber1 = core.objectService.createObject("object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gen5.iff", planet); + lightsaber1.setIntAttribute("required_combat_level", 90); + lightsaber1.setFloatAttribute("cat_wpn_damage.wpn_attack_speed", 1); + lightsaber1.setStringAttribute("class_required", "Jedi"); + lightsaber1.setStringAttribute("cat_wpn_damage.wpn_damage_type", "Energy"); + lightsaber1.setStringAttribute("cat_wpn_damage.damage", "689-1379"); + + SWGObject lightsaber2 = core.objectService.createObject("object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff", planet); + lightsaber2.setIntAttribute("required_combat_level", 90); + lightsaber2.setFloatAttribute("cat_wpn_damage.wpn_attack_speed", 1); + lightsaber2.setStringAttribute("class_required", "Jedi"); + lightsaber2.setStringAttribute("cat_wpn_damage.wpn_damage_type", "Energy"); + lightsaber2.setStringAttribute("cat_wpn_damage.damage", "689-1379"); + + SWGObject lightsaber3 = core.objectService.createObject("object/weapon/melee/polearm/crafted_saber/shared_sword_lightsaber_polearm_gen5.iff", planet); + lightsaber3.setIntAttribute("required_combat_level", 90); + lightsaber3.setFloatAttribute("cat_wpn_damage.wpn_attack_speed", 1); + lightsaber3.setStringAttribute("class_required", "Jedi"); + lightsaber3.setStringAttribute("cat_wpn_damage.wpn_damage_type", "Energy"); + lightsaber3.setStringAttribute("cat_wpn_damage.damage", "689-1379"); + + inventory.add(lightsaber1); + inventory.add(lightsaber2); + inventory.add(lightsaber3); + return; + case 31: // Melee Weapons + SWGObject sword1 = core.objectService.createObject("object/weapon/melee/sword/shared_sword_01.iff", planet); + sword1.setIntAttribute("required_combat_level", 90); + sword1.setFloatAttribute("cat_wpn_damage.wpn_attack_speed", 1); + sword1.setStringAttribute("class_required", "None"); + sword1.setStringAttribute("cat_wpn_damage.wpn_damage_type", "Energy"); + sword1.setStringAttribute("cat_wpn_damage.damage", "1100-1200"); + + inventory.add(sword1); + return; + case 32: // Ranged Weapons + SWGObject rifle1 = core.objectService.createObject("object/weapon/ranged/rifle/shared_rifle_e11.iff", planet); + rifle1.setIntAttribute("required_combat_level", 90); + rifle1.setFloatAttribute("cat_wpn_damage.wpn_attack_speed", 1); + rifle1.setStringAttribute("class_required", "None"); + rifle1.setStringAttribute("cat_wpn_damage.wpn_damage_type", "Energy"); + rifle1.setStringAttribute("cat_wpn_damage.damage", "800-1250"); + + inventory.add(rifle1); + return; } } }); diff --git a/src/services/EquipmentService.java b/src/services/EquipmentService.java index cc3ebe02..3e07dc69 100644 --- a/src/services/EquipmentService.java +++ b/src/services/EquipmentService.java @@ -114,7 +114,7 @@ public class EquipmentService implements INetworkDispatch { if (item.getStringAttribute("class_required") != null) { String profession = ((PlayerObject) actor.getSlottedObject("ghost")).getProfession(); - if (item.getStringAttribute("class_required").contentEquals(getFormalProfessionName(profession))) + if (item.getStringAttribute("class_required").contentEquals(getFormalProfessionName(profession)) || item.getStringAttribute("class_required").contentEquals("None")) result = true; else return false; From f03d65a3b2ea057bad6834e8ef52ec17a266d6e8 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 24 Mar 2014 02:25:55 +0100 Subject: [PATCH 094/107] Skillmods - Fixed Melee Critical Chance --- scripts/skillMods/expertise_critical_melee.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/scripts/skillMods/expertise_critical_melee.py b/scripts/skillMods/expertise_critical_melee.py index ee7769e2..fd6ebde6 100644 --- a/scripts/skillMods/expertise_critical_melee.py +++ b/scripts/skillMods/expertise_critical_melee.py @@ -1,10 +1,16 @@ import sys def add(core, actor, name, base): - actor.addSkillMod(name, base) + actor.addSkillMod("expertise_critical_1h", base) + actor.addSkillMod("expertise_critical_2h", base) + actor.addSkillMod("expertise_critical_unarmed", base) + actor.addSkillMod("expertise_critical_polearm", base) return def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + actor.deductSkillMod("expertise_critical_1h", base) + actor.deductSkillMod("expertise_critical_2h", base) + actor.deductSkillMod("expertise_critical_unarmed", base) + actor.deductSkillMod("expertise_critical_polearm", base) return \ No newline at end of file From 097d39291ff32600b2f884b4822a6c1fd743ef0f Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 24 Mar 2014 03:18:02 +0100 Subject: [PATCH 095/107] Misc - Cleaned up EquipmentService --- scripts/equipment/force_protection.py | 32 +++++++ scripts/equipment/weapon_critical.py | 25 ++++++ src/services/EquipmentService.java | 119 ++++++++++---------------- 3 files changed, 101 insertions(+), 75 deletions(-) create mode 100644 scripts/equipment/force_protection.py create mode 100644 scripts/equipment/weapon_critical.py diff --git a/scripts/equipment/force_protection.py b/scripts/equipment/force_protection.py new file mode 100644 index 00000000..c5fd6ce0 --- /dev/null +++ b/scripts/equipment/force_protection.py @@ -0,0 +1,32 @@ +import sys + +def jedi_robe_Faint(): + return 1400 + +def jedi_robe_Weak(): + return 3000 + +def jedi_robe_Lucent(): + return 4000 + +def jedi_robe_Luminous(): + return 5000 + +def jedi_robe_Radiant(): + return 6500 + +def jedi_cloak_Faint(): + return 0 + +def jedi_cloak_Weak(): + return 0 + +def jedi_cloak_Lucent(): + return 4500 + +def jedi_cloak_Luminous(): + return 5600 + +def jedi_cloak_Radiant(): + return 6500 + \ No newline at end of file diff --git a/scripts/equipment/weapon_critical.py b/scripts/equipment/weapon_critical.py new file mode 100644 index 00000000..683c4692 --- /dev/null +++ b/scripts/equipment/weapon_critical.py @@ -0,0 +1,25 @@ +import sys + +def Rifle(): + return "expertise_critical_rifle" + +def Carbine(): + return "expertise_critical_carbine" + +def Pistol(): + return "expertise_critical_pistol" + +def OneHandedMelee(): + return "expertise_critical_1h" + +def TwoHandedMelee(): + return "expertise_critical_2h" + +def Unarmed(): + return "expertise_critical_unarmed" + +def Polearm(): + return "expertise_critical_polearm" + +def FreeTargetingHeavyWeapon(): + return "expertise_critical_heavy" diff --git a/src/services/EquipmentService.java b/src/services/EquipmentService.java index 9f8ce9a5..33b12913 100644 --- a/src/services/EquipmentService.java +++ b/src/services/EquipmentService.java @@ -39,7 +39,7 @@ import resources.objects.player.PlayerObject; public class EquipmentService implements INetworkDispatch { private NGECore core; - + public EquipmentService(NGECore core) { this.core = core; } @@ -51,45 +51,33 @@ public class EquipmentService implements INetworkDispatch { @Override public void shutdown() { - + } - public void weaponCriticalToDisplay(CreatureObject actor, SWGObject item, boolean add) { + private int getWeaponCriticalChance(CreatureObject actor, SWGObject item) { + int weaponCriticalChance = 0; + String weaponCriticalSkillMod = (core.scriptService.getMethod("scripts/equipment/", "weapon_critical", item.getStringAttribute("cat_wpn_damage.wpn_category")/*.replace(" ", "").replace("-", "") + "_" */).__call__().asString()); - if (add == true) { - - switch(item.getStringAttribute("cat_wpn_damage.wpn_category")) { - - case "Rifle": actor.addSkillMod("display_only_critical", actor.getSkillModBase("expertise_critical_rifle") * 100); // rifle - case "Carbine": actor.addSkillMod("display_only_critical", actor.getSkillModBase("expertise_critical_carbine") * 100); // carbine - case "Pistol": actor.addSkillMod("display_only_critical", actor.getSkillModBase("expertise_critical_pistol") * 100); // pistol - case "One-Handed Melee": actor.addSkillMod("display_only_critical", ((actor.getSkillModBase("expertise_critical_1h") + actor.getSkillModBase("expertise_critical_melee")) * 100)); // one-handed - case "Two-Handed Melee": actor.addSkillMod("display_only_critical", ((actor.getSkillModBase("expertise_critical_2h") + actor.getSkillModBase("expertise_critical_melee")) * 100)); // two-handed - case "Unarmed": actor.addSkillMod("display_only_critical", ((actor.getSkillModBase("expertise_critical_unarmed") + actor.getSkillModBase("expertise_critical_melee")) * 100)); // unarmed - case "Polearm": actor.addSkillMod("display_only_critical", ((actor.getSkillModBase("expertise_critical_polearm") + actor.getSkillModBase("expertise_critical_melee")) * 100)); // polearm - case "Free Targeting Heavy Weapon": actor.addSkillMod("display_only_critical", actor.getSkillModBase("expertise_critical_heavy") * 100); // Heavy - - - } - - } + if(weaponCriticalSkillMod.contains(" ")) + weaponCriticalSkillMod.replace(" ", ""); - if (add == false) { - - switch(item.getStringAttribute("cat_wpn_damage.wpn_category")) { - - case "Rifle": actor.deductSkillMod("display_only_critical", actor.getSkillModBase("expertise_critical_rifle") * 100); // rifle - case "Carbine": actor.deductSkillMod("display_only_critical", actor.getSkillModBase("expertise_critical_carbine") * 100); // carbine - case "Pistol": actor.deductSkillMod("display_only_critical", actor.getSkillModBase("expertise_critical_pistol") * 100); // pistol - case "One-Handed Melee": actor.deductSkillMod("display_only_critical", ((actor.getSkillModBase("expertise_critical_1h") + actor.getSkillModBase("expertise_critical_melee")) * 100)); // one-handed - case "Two-Handed Melee": actor.deductSkillMod("display_only_critical", ((actor.getSkillModBase("expertise_critical_2h") + actor.getSkillModBase("expertise_critical_melee")) * 100)); // two-handed - case "Unarmed": actor.deductSkillMod("display_only_critical", ((actor.getSkillModBase("expertise_critical_unarmed") + actor.getSkillModBase("expertise_critical_melee")) * 100)); // unarmed - case "Polearm": actor.deductSkillMod("display_only_critical", ((actor.getSkillModBase("expertise_critical_polearm") + actor.getSkillModBase("expertise_critical_melee")) * 100)); // polearm - case "Free Targeting Heavy Weapon": actor.deductSkillMod("display_only_critical", actor.getSkillModBase("expertise_critical_heavy") * 100); // Heavy - } - } + if(weaponCriticalSkillMod.contains("-")) + weaponCriticalSkillMod.replace("-", ""); + + if(actor.getSkillMod(weaponCriticalSkillMod) != null) + weaponCriticalChance = actor.getSkillModBase((core.scriptService.getMethod("scripts/equipment/", "weapon_critical", item.getStringAttribute("cat_wpn_damage.wpn_category").replace(" ", "").replace("-", "") + "_" ).__call__().asString())); + + return weaponCriticalChance; } + private void addWeaponCriticalChance(CreatureObject actor, SWGObject item) { + actor.addSkillMod("display_only_critical", getWeaponCriticalChance(actor, item)); + } + + private void deductWeaponCriticalChance(CreatureObject actor, SWGObject item) { + actor.deductSkillMod("display_only_critical", getWeaponCriticalChance(actor, item)); + } + public String getFormalProfessionName(String stfName) { String formalName = ""; @@ -112,6 +100,12 @@ public class EquipmentService implements INetworkDispatch { public boolean canEquip(CreatureObject actor, SWGObject item) { boolean result = true; + if (item.getAttributes().toString().contains("cat_armor")) + if (actor.getLevel() >= 22) + result = true; + else + return false; + if (item.getStringAttribute("class_required") != null) { String profession = ((PlayerObject) actor.getSlottedObject("ghost")).getProfession(); if (item.getStringAttribute("class_required").contentEquals(getFormalProfessionName(profession))) @@ -126,7 +120,7 @@ public class EquipmentService implements INetworkDispatch { else return false; - if (item.getAttributes().toString().contains("required_combat_level")) + if (item.getAttributes().containsKey("required_combat_level")) if (actor.getLevel() >= item.getIntAttribute("required_combat_level")) result = true; else @@ -135,40 +129,16 @@ public class EquipmentService implements INetworkDispatch { return result; } - public void calculateForceProtection(CreatureObject actor, SWGObject item, boolean add) { - int type = 0; - int level = 0; - int[][] protection = {{1400,3000,4000,5000,6500},{0, 0, 4500, 5600, 6500}}; - - switch ((String) item.getAttachment("type")) { - case "jedi_robe": type = 0; break; - case "jedi_cloak": type = 1; break; - } - - switch (item.getStringAttribute("protection_level")) { - case "Faint": level = 0; break; - case "Weak": level = 1; break; - case "Lucent": level = 2; break; - case "Luminous": level = 3; break; - case "Radiant": level = 4; break; - } - - if (add==true) { - core.skillModService.addSkillMod(actor, "kinetic", protection[type][level]); - core.skillModService.addSkillMod(actor, "energy", protection[type][level]); - core.skillModService.addSkillMod(actor, "heat", protection[type][level]); - core.skillModService.addSkillMod(actor, "cold", protection[type][level]); - core.skillModService.addSkillMod(actor, "acid", protection[type][level]); - core.skillModService.addSkillMod(actor, "electricity", protection[type][level]); - } else { - core.skillModService.deductSkillMod(actor, "kinetic", protection[type][level]); - core.skillModService.deductSkillMod(actor, "energy", protection[type][level]); - core.skillModService.deductSkillMod(actor, "heat", protection[type][level]); - core.skillModService.deductSkillMod(actor, "cold", protection[type][level]); - core.skillModService.deductSkillMod(actor, "acid", protection[type][level]); - core.skillModService.deductSkillMod(actor, "electricity", protection[type][level]); - } - + private void addForceProtection(CreatureObject actor, SWGObject item) { + actor.addSkillMod("expertise_innate_protection_all", getForceProtection(item)); + } + + private void deductForceProtection(CreatureObject actor, SWGObject item) { + actor.deductSkillMod("expertise_innate_protection_all", getForceProtection(item)); + } + + private int getForceProtection(SWGObject item) { + return core.scriptService.getMethod("scripts/equipment/", "force_protection", item.getAttachment("type") + "_" + item.getStringAttribute("protection_level")).__call__().asInt(); } public void equip(CreatureObject actor, SWGObject item) { @@ -180,7 +150,7 @@ public class EquipmentService implements INetworkDispatch { func.__call__(Py.java2py(core), Py.java2py(actor), Py.java2py(item)); if (item.getStringAttribute("protection_level") != null) - calculateForceProtection(actor, item, true); + addForceProtection(actor, item); // TODO: faction restrictions - You had to be a Combatant as minimum in order to EQUIP an item. // TODO: Species restrictions @@ -192,8 +162,8 @@ public class EquipmentService implements INetworkDispatch { if(item.getStringAttribute("cat_wpn_damage.wpn_category") != null) if (actor.getSlotNameForObject(item).contentEquals("hold_r") == true) - weaponCriticalToDisplay(actor, item, true); - + addWeaponCriticalChance(actor, item); + Map attributes = new TreeMap(item.getAttributes()); for(Entry e : attributes.entrySet()) { @@ -229,11 +199,10 @@ public class EquipmentService implements INetworkDispatch { func.__call__(Py.java2py(core), Py.java2py(actor), Py.java2py(item)); if (item.getStringAttribute("protection_level") != null) - calculateForceProtection(actor, item, false); + deductForceProtection(actor, item); if(item.getStringAttribute("cat_wpn_damage.wpn_category") != null) - if (actor.getSlotNameForObject(item).contentEquals("hold_r") == true) - weaponCriticalToDisplay(actor, item, false); + deductWeaponCriticalChance(actor, item); Map attributes = new TreeMap(item.getAttributes()); From 8abdca40c7bb0a147a2cd121d8d149774b9afdef Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 24 Mar 2014 03:59:16 +0100 Subject: [PATCH 096/107] Blue Frog - Added protection to Composite Armor --- src/services/DevService.java | 81 ++++++++++++++++++++++++++++++++---- 1 file changed, 72 insertions(+), 9 deletions(-) diff --git a/src/services/DevService.java b/src/services/DevService.java index feb3c1a3..062adf0f 100644 --- a/src/services/DevService.java +++ b/src/services/DevService.java @@ -133,15 +133,78 @@ public class DevService implements INetworkDispatch { inventory.add(core.objectService.createObject("object/tangible/wearables/robe/shared_robe_jedi_dark_s03.iff", planet)); return; case 22: // Composite Armor - inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bicep_r.iff", planet)); - inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff", planet)); - inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bracer_r.iff", planet)); - inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bracer_l.iff", planet)); - inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_helmet.iff", planet)); - inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_chest_plate.iff", planet)); - inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_leggings.iff", planet)); - inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_boots.iff", planet)); - inventory.add(core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_gloves.iff", planet)); + SWGObject bicep_r = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bicep_r.iff", planet); + bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject bicep_l = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff", planet); + bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject bracer_r = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bracer_r.iff", planet); + bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject bracer_l = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bracer_l.iff", planet); + bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject leggings = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_leggings.iff", planet); + leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject helmet = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_helmet.iff", planet); + helmet.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + helmet.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject chest = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_chest_plate.iff", planet); + chest.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + chest.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + chest.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + chest.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + chest.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + chest.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject boots = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_boots.iff", planet); + SWGObject gloves = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_gloves.iff", planet); + + + + inventory.add(bicep_r); + inventory.add(bicep_l); + inventory.add(bracer_r); + inventory.add(bracer_l); + inventory.add(leggings); + inventory.add(helmet); + inventory.add(chest); + inventory.add(boots); + inventory.add(gloves); + + return; case 23: // Weapons sendCharacterBuilderSUI(player, 3); From 9b3d822bc42b44c6ebf7238307622fdf61285546 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Mon, 24 Mar 2014 11:07:30 -0400 Subject: [PATCH 097/107] Added /covercharge, p. effect abilities use highest effect for your level, bug fixes (Added) Entertainers can now add Cover Charges for their performance (Feature) Using a performance effect that has multiple effect levels will use the highest effect for the entertainers level (Code) Added 2 new methods (Jython and Java version) for Input Boxes that automatically adds the input text to return list. (Code) Moved essential spectating code from /watch script to startSpectating (BugFix) Fixed Null Error when trying to cancel Experience tick if leveled with a cheat. (BugFix) Fixed system messages error on performance abilities --- scripts/commands/colorlights.py | 36 +++++--- scripts/commands/covercharge.py | 46 +++++++++++ scripts/commands/dazzle.py | 36 +++++--- scripts/commands/distract.py | 36 +++++--- scripts/commands/firejet.py | 34 +++++--- scripts/commands/smokebomb.py | 33 +++++--- scripts/commands/spotlight.py | 32 +++++--- scripts/commands/stopwatching.py | 12 +-- scripts/commands/ventriloquism.py | 31 ++++--- scripts/commands/watch.py | 16 ++-- .../objects/creature/CreatureObject.java | 27 ++++-- src/services/EntertainmentService.java | 82 ++++++++++++++++--- src/services/PlayerService.java | 2 +- src/services/sui/SUIService.java | 31 ++++++- 14 files changed, 336 insertions(+), 118 deletions(-) create mode 100644 scripts/commands/covercharge.py diff --git a/scripts/commands/colorlights.py b/scripts/commands/colorlights.py index 5f9f7abc..0708c4ea 100644 --- a/scripts/commands/colorlights.py +++ b/scripts/commands/colorlights.py @@ -4,23 +4,35 @@ def setup(): return def run(core, actor, target, commandString): - + level = actor.getLevel() command = 'ColorLights1' effect = 'clienteffect/entertainer_color_lights_level_1.cef' rLevel = 4 # minimum level to perform this effect - if commandString == '2': - command = 'ColorLights2' - effect = 'clienteffect/entertainer_color_lights_level_2.cef' - rLevel = 20 + if commandString is None or commandString == '': + + if level >= 50: + command = 'ColorLights3' + effect = 'clienteffect/entertainer_color_lights_level_3.cef' + + elif level >= 20: + command = 'ColorLights2' + effect = 'clienteffect/entertainer_color_lights_level_2.cef' - elif commandString == '3': - command = 'ColorLights3' - effect = 'clienteffect/entertainer_color_lights_level_3.cef' - rLevel = 50 - - if actor.getLevel() < rLevel: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + if commandString is not None: + if commandString == '2': + command = 'ColorLights2' + effect = 'clienteffect/entertainer_color_lights_level_2.cef' + rLevel = 20 + + elif commandString == '3': + command = 'ColorLights3' + effect = 'clienteffect/entertainer_color_lights_level_3.cef' + rLevel = 50 + + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return if core.entertainmentService.performEffect(actor, command, effect, target) is True: actor.sendSystemMessage('@performance:effect_perform_color_lights', 0) diff --git a/scripts/commands/covercharge.py b/scripts/commands/covercharge.py new file mode 100644 index 00000000..82ca56af --- /dev/null +++ b/scripts/commands/covercharge.py @@ -0,0 +1,46 @@ +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + ghost = actor.getSlottedObject('ghost') + if ghost.getProfession() != 'entertainer_1a': + actor.sendSystemMessage('@performance:cc_no_skill', 0) + return + if commandString == '0': + actor.setCoverCharge(0) + actor.sendSystemMessage('@performance:cc_stop_charge', 0) + return + + if commandString == None or commandString == '': + window = core.suiService.createInputBox(2, '@performance:cc_set_title', '@performance:cc_set_prompt', actor, None, 10, handleCoverCharge) + window.setProperty('txtInput:NumericInteger', 'true') + window.setProperty('txtInput:MaxLength', '12') + core.suiService.openSUIWindow(window) + return + else: + try: + actor.setCoverCharge(int(commandString)) + actor.sendSystemMessage('You are now charging a cover of ' + commandString + ' credit(s).', 0) + except ValueError: + return + return + return + +def handleCoverCharge(actor, window, eventType, returnList): + if eventType == 0 and len(returnList) == 1: + charge = returnList.get(0) + if charge == "0": + actor.setCoverCharge(0) + actor.sendSystemMessage('@performance:cc_stop_charge', 0) + return + else: + actor.setCoverCharge(int(returnList.get(0))) + actor.sendSystemMessage('You are now charging a cover of ' + returnList.get(0) + ' credits(s).', 0) + return + return + return \ No newline at end of file diff --git a/scripts/commands/dazzle.py b/scripts/commands/dazzle.py index e1d8cefd..03e79b11 100644 --- a/scripts/commands/dazzle.py +++ b/scripts/commands/dazzle.py @@ -4,23 +4,35 @@ def setup(): return def run(core, actor, target, commandString): - + level = actor.getLevel() command = 'Dazzle1' effect = 'clienteffect/entertainer_dazzle_level_1.cef' rLevel = 10 # minimum level to perform this effect - if commandString == '2': - command = 'Dazzle2' - effect = 'clienteffect/entertainer_dazzle_level_2.cef' - rLevel = 20 + if commandString is None or commandString == '': + + if level >= 30: + command = 'Dazzle3' + effect = 'clienteffect/entertainer_dazzle_level_3.cef' + + elif level >= 20: + command = 'Dazzle2' + effect = 'clienteffect/entertainer_dazzle_level_2.cef' - elif commandString == '3': - command = 'Dazzle3' - effect = 'clienteffect/entertainer_dazzle_level_3.cef' - rLevel = 30 - - if actor.getLevel() < rLevel: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + if commandString is not None: + if commandString == '2': + command = 'Dazzle2' + effect = 'clienteffect/entertainer_dazzle_level_2.cef' + rLevel = 20 + + elif commandString == '3': + command = 'Dazzle3' + effect = 'clienteffect/entertainer_dazzle_level_3.cef' + rLevel = 30 + + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return if core.entertainmentService.performEffect(actor, command, effect, target) is True: actor.sendSystemMessage('@performance:effect_perform_dazzle', 0) diff --git a/scripts/commands/distract.py b/scripts/commands/distract.py index d92cb55e..ec57828b 100644 --- a/scripts/commands/distract.py +++ b/scripts/commands/distract.py @@ -4,25 +4,35 @@ def setup(): return def run(core, actor, target, commandString): - + level = actor.getLevel() command = 'Distract1' effect = 'clienteffect/entertainer_distract_level_1.cef' rLevel = 18 # minimum level to perform this effect - if commandString == '2': - command = 'Distract2' - effect = 'clienteffect/entertainer_distract_level_2.cef' - rLevel = 50 + if commandString is None or commandString == '': + if level >= 75: + command = 'Distract3' + effect = 'clienteffect/entertainer_distract_level_3.cef' + + elif level >= 50: + command = 'Distract2' + effect = 'clienteffect/entertainer_distract_level_2.cef' - elif commandString == '3': - command = 'Distract3' - effect = 'clienteffect/entertainer_distract_level_3.cef' - rLevel = 75 - - if actor.getLevel() < rLevel: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + if commandString is not None: + if commandString == '2': + command = 'Distract2' + effect = 'clienteffect/entertainer_distract_level_2.cef' + rLevel = 50 + + elif commandString == '3': + command = 'Distract3' + effect = 'clienteffect/entertainer_distract_level_3.cef' + rLevel = 75 + + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) return - + if core.entertainmentService.performEffect(actor, command, effect, target) is True: actor.sendSystemMessage('@performance:effect_perform_distract', 0) return \ No newline at end of file diff --git a/scripts/commands/firejet.py b/scripts/commands/firejet.py index 63a5ba54..26261d56 100644 --- a/scripts/commands/firejet.py +++ b/scripts/commands/firejet.py @@ -4,25 +4,35 @@ def setup(): return def run(core, actor, target, commandString): - + level = actor.getLevel() command = 'FireJets1' effect = 'clienteffect/entertainer_fire_jets_level_1.cef' rLevel = 26 # minimum level to perform this effect - if commandString == '2': - command = 'FireJets2' - effect = 'clienteffect/entertainer_fire_jets_level_2.cef' - rLevel = 50 + if commandString is None or commandString == '': + if level >= 75: + command = 'FireJets3' + effect = 'clienteffect/entertainer_fire_jets_level_3.cef' + + elif level >= 50: + command = 'FireJets2' + effect = 'clienteffect/entertainer_fire_jets_level_2.cef' - elif commandString == '3': - command = 'FireJets3' - effect = 'clienteffect/entertainer_fire_jets_level_3.cef' - rLevel = 75 + if commandString is not None: + if commandString == '2': + command = 'FireJets2' + effect = 'clienteffect/entertainer_fire_jets_level_2.cef' + rLevel = 50 + + elif commandString == '3': + command = 'FireJets3' + effect = 'clienteffect/entertainer_fire_jets_level_3.cef' + rLevel = 75 - if actor.getLevel() < rLevel: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) return - + if core.entertainmentService.performEffect(actor, command, effect, target) is True: actor.sendSystemMessage('@performance:effect_perform_fire_jets', 0) return \ No newline at end of file diff --git a/scripts/commands/smokebomb.py b/scripts/commands/smokebomb.py index cb747ce1..a9da5abb 100644 --- a/scripts/commands/smokebomb.py +++ b/scripts/commands/smokebomb.py @@ -4,23 +4,34 @@ def setup(): return def run(core, actor, target, commandString): - + level = actor.getLevel() command = 'SmokeBomb1' effect = 'clienteffect/entertainer_smoke_bomb_level_1.cef' rLevel = 50 # minimum level to perform this effect - if commandString == '2': - command = 'SmokeBomb2' - effect = 'clienteffect/entertainer_smoke_bomb_level_2.cef' - rLevel = 75 + if commandString is None or commandString == '': + if level >= 90: + command = 'SmokeBomb3' + effect = 'clienteffect/entertainer_smoke_bomb_level_3.cef' + + elif level >= 75: + command = 'SmokeBomb2' + effect = 'clienteffect/entertainer_smoke_bomb_level_2.cef' - elif commandString == '3': - command = 'SmokeBomb3' - effect = 'clienteffect/entertainer_smoke_bomb_level_3.cef' - rLevel = 90 + if commandString is not None: + if commandString == '2': + command = 'SmokeBomb2' + effect = 'clienteffect/entertainer_smoke_bomb_level_2.cef' + rLevel = 75 + + elif commandString == '3': + command = 'SmokeBomb3' + effect = 'clienteffect/entertainer_smoke_bomb_level_3.cef' + rLevel = 90 - if actor.getLevel() < rLevel: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return if core.entertainmentService.performEffect(actor, command, effect, target) is True: actor.sendSystemMessage('@performance:effect_perform_smoke_bomb', 0) diff --git a/scripts/commands/spotlight.py b/scripts/commands/spotlight.py index 1f94394a..204c0017 100644 --- a/scripts/commands/spotlight.py +++ b/scripts/commands/spotlight.py @@ -5,23 +5,33 @@ def setup(): return def run(core, actor, target, commandString): - + level = actor.getLevel() command = 'SpotLight1' effect = 'clienteffect/entertainer_spot_light_level_1.cef' rLevel = 1 # minimum level to perform this effect - if commandString == '2': - command = 'SpotLight2' - effect = 'clienteffect/entertainer_spot_light_level_2.cef' - rLevel = 20 + if commandString is None or commandString == '': + if level >= 30: + command = 'SpotLight3' + effect = 'clienteffect/entertainer_spot_light_level_3.cef' + + elif level >= 20: + command = 'SpotLight2' + effect = 'clienteffect/entertainer_spot_light_level_2.cef' - elif commandString == '3': - command = 'SpotLight3' - effect = 'clienteffect/entertainer_spot_light_level_3.cef' - rLevel = 30 + if commandString is not None: + if commandString == '2': + command = 'SpotLight2' + effect = 'clienteffect/entertainer_spot_light_level_2.cef' + rLevel = 20 + + elif commandString == '3': + command = 'SpotLight3' + effect = 'clienteffect/entertainer_spot_light_level_3.cef' + rLevel = 30 - if actor.getLevel() < rLevel: - actor.sendSystemMessage('@performance:effect_lack_skill_self') + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) return if core.entertainmentService.performEffect(actor, command, effect, None) is True: diff --git a/scripts/commands/stopwatching.py b/scripts/commands/stopwatching.py index 7dc96fc8..23a36c17 100644 --- a/scripts/commands/stopwatching.py +++ b/scripts/commands/stopwatching.py @@ -4,12 +4,14 @@ def setup(): return def run(core, actor, target, commandString): - dancer = actor.getPerformanceWatchee() - if not dancer: - return - + performer = target + if commandString is not None and target is None: + performer = core.chatService.getObjectByFirstName(commandString) + + if performer is None: + return + performer.removeAudience(actor) actor.setPerformanceWatchee(None) - dancer.removeAudience(actor) if not actor.getPerformanceListenee(): actor.setMoodAnimation('') diff --git a/scripts/commands/ventriloquism.py b/scripts/commands/ventriloquism.py index 043293ff..1781fbd1 100644 --- a/scripts/commands/ventriloquism.py +++ b/scripts/commands/ventriloquism.py @@ -4,23 +4,34 @@ def setup(): return def run(core, actor, target, commandString): - + level = actor.getLevel() command = 'Ventriloquism1' effect = 'clienteffect/entertainer_ventriloquism_level_1.cef' rLevel = 58 # minimum level to perform this effect - if commandString == '2': - command = 'Ventriloquism2' - effect = 'clienteffect/entertainer_ventriloquism_level_2.cef' - rLevel = 75 + if commandString is None or commandString == '': + if level >= 90: + command = 'Ventriloquism3' + effect = 'clienteffect/entertainer_ventriloquism_level_3.cef' + + elif level >= 75: + command = 'Ventriloquism2' + effect = 'clienteffect/entertainer_ventriloquism_level_2.cef' - elif commandString == '3': - command = 'Ventriloquism3' - effect = 'clienteffect/entertainer_ventriloquism_level_3.cef' - rLevel = 90 + if commandString is not None: + if commandString == '2': + command = 'Ventriloquism2' + effect = 'clienteffect/entertainer_ventriloquism_level_2.cef' + rLevel = 75 + + elif commandString == '3': + command = 'Ventriloquism3' + effect = 'clienteffect/entertainer_ventriloquism_level_3.cef' + rLevel = 90 - if actor.getLevel() < rLevel: + if level < rLevel: actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return if core.entertainmentService.performEffect(actor, command, effect, target) is True: actor.sendSystemMessage('@performance:effect_perform_ventriloquism', 0) diff --git a/scripts/commands/watch.py b/scripts/commands/watch.py index 0a9baf04..07ca268d 100644 --- a/scripts/commands/watch.py +++ b/scripts/commands/watch.py @@ -26,14 +26,10 @@ def run(core, actor, target, commandString): if target.getPosture() != 0x09 or not perf or perf.getDanceVisualId() < 0: actor.sendSystemMessage(target.getCustomName() + ' is not dancing.',0) return - - oldWatchee = actor.getPerformanceWatchee() - if oldWatchee and oldWatchee != target: - oldWatchee.removeAudience(actor) - - actor.setPerformanceWatchee(target) - target.addAudience(actor) - core.entertainmentService.startSpectating(actor, target) - actor.setMoodAnimation('entertained') - actor.sendSystemMessage('You start watching ' + target.getCustomName() + '.',0) + + if target.getCoverCharge() > 0 or target.getCoverCharge() == None: + core.entertainmentService.handleCoverCharge(actor, target) + return + else: + core.entertainmentService.startSpectating(actor, target, True) return \ No newline at end of file diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 2d89527f..efb52cb8 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -57,7 +57,7 @@ import engine.resources.scene.Quaternion; import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; -@Entity(version=2) +@Entity(version=3) public class CreatureObject extends TangibleObject implements IPersistent { @NotPersistent @@ -119,12 +119,8 @@ public class CreatureObject extends TangibleObject implements IPersistent { private int performanceCounter = 0; private int performanceId = 0; private boolean hologram = false; - //FIXME: this is a bit of a hack. private boolean performanceType = false; - //FIXME: hmm.. or persistent? - @NotPersistent private boolean acceptBandflourishes = true; - @NotPersistent private boolean groupDance = true; private CreatureObject performanceWatchee; private CreatureObject performanceListenee; @@ -172,6 +168,8 @@ public class CreatureObject extends TangibleObject implements IPersistent { @NotPersistent private boolean performingEffect; + private int coverCharge; + public CreatureObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { super(objectID, planet, Template, position, orientation); messageBuilder = new CreatureMessageBuilder(this); @@ -422,7 +420,6 @@ public class CreatureObject extends TangibleObject implements IPersistent { if(performanceType) { next.sendSystemMessage("You stop watching " + getCustomName() + ".",(byte)0); } else { next.sendSystemMessage("You stop listening to " + getCustomName() + ".",(byte)0); } next.getSpectatorTask().cancel(true); - next.getInspirationTick().cancel(true); } //not sure if this behaviour is correct. might need fixing later. performanceAudience = new SWGList(); @@ -1539,7 +1536,11 @@ public class CreatureObject extends TangibleObject implements IPersistent { public void removeAudience(CreatureObject audienceMember) { synchronized(objectMutex) { if (performanceAudience == null) { return; } - performanceAudience.remove(audienceMember); + if (audienceMember.getInspirationTick() != null) + audienceMember.getInspirationTick().cancel(true); + + if(performanceAudience.contains(audienceMember)) + performanceAudience.remove(audienceMember); // SWGList error } } @@ -1690,4 +1691,16 @@ public class CreatureObject extends TangibleObject implements IPersistent { return hologram; } } + + public int getCoverCharge() { + synchronized(objectMutex) { + return coverCharge; + } + } + + public void setCoverCharge(int coverCharge) { + synchronized (objectMutex) { + this.coverCharge = coverCharge; + } + } } diff --git a/src/services/EntertainmentService.java b/src/services/EntertainmentService.java index 9e1a0b64..d3375af1 100644 --- a/src/services/EntertainmentService.java +++ b/src/services/EntertainmentService.java @@ -38,6 +38,10 @@ import resources.objects.SWGList; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; +import services.sui.SUIService.InputBoxType; +import services.sui.SUIWindow; +import services.sui.SUIWindow.SUICallback; +import services.sui.SUIWindow.Trigger; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; import engine.clients.Client; @@ -341,8 +345,10 @@ public class EntertainmentService implements INetworkDispatch { core.commandService.registerCommand("startdance"); core.commandService.registerCommand("stopdance"); core.commandService.registerCommand("watch"); - core.commandService.registerCommand("stopwatching"); + //core.commandService.registerCommand("stopwatching"); // SWGList error //core.commandService.registerCommand("holoEmote"); + core.commandService.registerCommand("covercharge"); + // TODO: Add /bandsolo, /bandpause, /changeBandMusic, /changeDance, /changeGroupDance, /changeMusic // Entertainer Effects @@ -499,8 +505,19 @@ public class EntertainmentService implements INetworkDispatch { } - public void startSpectating(final CreatureObject spectator, final CreatureObject performer) { - + public void startSpectating(final CreatureObject spectator, final CreatureObject performer, boolean spectateType) { + + // visual + if (spectator.getPerformanceWatchee() == performer && spectateType) + spectator.getPerformanceWatchee().removeAudience(spectator); + // music + else if (spectator.getPerformanceListenee() == performer && !spectateType) + spectator.getPerformanceListenee().removeAudience(spectator); + + spectator.setPerformanceWatchee(performer); + performer.addAudience(spectator); + spectator.setMoodAnimation("entertained"); + final ScheduledFuture spectatorTask = scheduler.scheduleAtFixedRate(new Runnable() { @Override @@ -519,7 +536,7 @@ public class EntertainmentService implements INetworkDispatch { } spectator.setMoodAnimation("neutral"); performer.removeAudience(spectator); - + if (spectator.getInspirationTick().cancel(true)) spectator.getSpectatorTask().cancel(true); } @@ -528,11 +545,16 @@ public class EntertainmentService implements INetworkDispatch { }, 2, 2, TimeUnit.SECONDS); spectator.setSpectatorTask(spectatorTask); - + if(((PlayerObject)performer.getSlottedObject("ghost")).getProfession().equals("entertainer_1a")) { handleInspirationTicks(spectator, performer); } - + + if(spectateType) + spectator.sendSystemMessage("You start watching " + performer.getCustomName() + ".", (byte) 0); + else + spectator.sendSystemMessage("You start listening to " + performer.getCustomName() + ".", (byte) 0); + } public void performFlourish(final CreatureObject performer, int flourish) { @@ -624,15 +646,15 @@ public class EntertainmentService implements INetworkDispatch { public void run() { int time = 0; // current buff duration time (minutes) int buffCap = 215; // 5 hours 35 minutes - 2 hours (buff duration increase bonus) << Taken from video, doesn't account for performance bonuses etc. - + if (spectator.getAttachment("inspireDuration") != null) time+= (int) spectator.getAttachment("inspireDuration"); - + if (performer.getSkillMod("expertise_en_inspire_buff_duration_increase") != null) { SkillMod durationMod = performer.getSkillMod("expertise_en_inspire_buff_duration_increase"); buffCap += durationMod.getBase() + durationMod.getModifier(); } - + if (time >= buffCap) { spectator.setAttachment("inspireDuration", buffCap); // incase someone went over cap spectator.getInspirationTick().cancel(true); @@ -642,22 +664,58 @@ public class EntertainmentService implements INetworkDispatch { SkillMod pulseMod = performer.getSkillMod("expertise_en_inspire_pulse_duration_increase"); entTick += pulseMod.getBase() + pulseMod.getModifier(); } - + int duration = (time + entTick); // minutes int hMinutes = MathUtilities.secondsToHourMinutes(duration * 60); int hours = MathUtilities.secondsToWholeHours(duration * 60); spectator.showFlyText("spam", "buff_duration_tick_observer", String.valueOf(hours) + " hours , " + hMinutes + " minutes ", 0, (float) 0.66, new RGB(255, 182, 193), 3, 78); - + spectator.setAttachment("inspireDuration", duration); //System.out.println("Inspire Duration: " + spectator.getAttachment("inspireDuration") + " on " + spectator.getCustomName()); } } - + }, 10, 10, TimeUnit.SECONDS); spectator.setInspirationTick(inspirationTick); } + public void handleCoverCharge(final CreatureObject actor, final CreatureObject performer) { + final int charge = performer.getCoverCharge(); + + if (charge == 0) + return; + + else { + SUIWindow notification = core.suiService.createMessageBox(InputBoxType.INPUT_BOX_OK, "Cover Charge", performer.getCustomName() + + " has a cover charge of " + performer.getCoverCharge() + ". Do you wish to pay it?", actor, performer, (float) 30); + Vector returnParams = new Vector(); + + returnParams.add("btnOk:Text"); + + notification.addHandler(0, "", Trigger.TRIGGER_OK, returnParams, new SUICallback(){ + + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + if (eventType == 0) { + if (charge > actor.getCashCredits()) { + actor.sendSystemMessage("You do not have enough credits to cover the charge.", (byte) 0); // TODO: Find the message in the STF files. + return; + } else{ + actor.setCashCredits(actor.getCashCredits() - charge); + actor.sendSystemMessage("You payed the cover charge of " + charge + " to " + performer.getCustomName(), (byte) 0); // TODO: Find the message in the STF files. + performer.setCashCredits(performer.getCashCredits() + charge); + + startSpectating(actor, performer, performer.getPerformanceType()); + + } + } + } + }); + core.suiService.openSUIWindow(notification); + } + } + @Override public void shutdown() { diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index dd2f9608..96e1f987 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -776,7 +776,7 @@ public class PlayerService implements INetworkDispatch { e.printStackTrace(); } - if(player.getProfession().equals("entertainer_1a") && creature.getLevel() == (short) 90) + if(player.getProfession().equals("entertainer_1a") && creature.getLevel() == (short) 90 && creature.getEntertainerExperience() != null) creature.getEntertainerExperience().cancel(true); //} } diff --git a/src/services/sui/SUIService.java b/src/services/sui/SUIService.java index e898c576..8f496dc1 100644 --- a/src/services/sui/SUIService.java +++ b/src/services/sui/SUIService.java @@ -43,13 +43,12 @@ import protocol.swg.SUIForceClosePageMessage; import protocol.swg.SUIUpdatePageMessage; import protocol.swg.objectControllerObjects.ObjectMenuRequest; import protocol.swg.objectControllerObjects.ObjectMenuResponse; - import resources.common.FileUtilities; import resources.common.ObjControllerOpcodes; import resources.common.Opcodes; import resources.common.RadialOptions; import services.sui.SUIWindow.SUICallback; - +import services.sui.SUIWindow.Trigger; import engine.clients.Client; import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; @@ -334,6 +333,34 @@ public class SUIService implements INetworkDispatch { return window; } + /** + * Creates an Input Box SUIWindow and adds a handler that will return text inputed into text box with the callback as the specified PyObject. + * @param PyObject Definition that will be run when user clicks on "OK" + * @return SUIWindow + * @author Waverunner + */ + public SUIWindow createInputBox(int type, String title, String promptText, SWGObject owner, SWGObject rangeObject, float maxDistance, PyObject handleFunc) { + SUIWindow window = createInputBox(type, title, promptText, owner, rangeObject, maxDistance); + Vector returnParams = new Vector(); + returnParams.add("txtInput:LocalText"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnParams, handleFunc); + return window; + } + + /** + * Creates an Input Box SUIWindow and adds a handler that will return text inputed into text box with the callback as the specified PyObject. + * @param SUICallback Callback that will be ran when user clicks on "OK" + * @return SUIWindow + * @author Waverunner + */ + public SUIWindow createInputBox(int type, String title, String promptText, SWGObject owner, SWGObject rangeObject, float maxDistance, SUICallback handleFunc) { + SUIWindow window = createInputBox(type, title, promptText, owner, rangeObject, maxDistance); + Vector returnParams = new Vector(); + returnParams.add("txtInput:LocalText"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnParams, handleFunc); + return window; + } + public void closeSUIWindow(SWGObject owner, int id) { if(owner.getClient() == null || owner.getClient().getSession() == null) From e94c32f0924472dae54f0bade522b5eed30c196d Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 24 Mar 2014 17:17:48 +0100 Subject: [PATCH 098/107] Medic - Buffs now apply correctly when targeting non-players --- scripts/commands/me_buff_health_1.py | 8 ++++---- scripts/commands/me_buff_health_2.py | 8 ++++---- scripts/commands/me_buff_health_3.py | 8 ++++---- scripts/commands/me_enhance_action_1.py | 8 ++++---- scripts/commands/me_enhance_action_2.py | 8 ++++---- scripts/commands/me_enhance_action_3.py | 8 ++++---- scripts/commands/me_enhance_agility_1.py | 8 ++++---- scripts/commands/me_enhance_agility_2.py | 8 ++++---- scripts/commands/me_enhance_agility_3.py | 8 ++++---- scripts/commands/me_enhance_block_1.py | 8 ++++---- scripts/commands/me_enhance_dodge_1.py | 8 ++++---- scripts/commands/me_enhance_precision_1.py | 8 ++++---- scripts/commands/me_enhance_precision_2.py | 8 ++++---- scripts/commands/me_enhance_precision_3.py | 8 ++++---- scripts/commands/me_enhance_strength_1.py | 8 ++++---- scripts/commands/me_enhance_strength_2.py | 8 ++++---- scripts/commands/me_enhance_strength_3.py | 8 ++++---- 17 files changed, 68 insertions(+), 68 deletions(-) diff --git a/scripts/commands/me_buff_health_1.py b/scripts/commands/me_buff_health_1.py index 1e41c9ae..fb9880d2 100644 --- a/scripts/commands/me_buff_health_1.py +++ b/scripts/commands/me_buff_health_1.py @@ -7,13 +7,13 @@ def run(core, actor, target, commandString): group = core.objectService.getObject(actor.getGroupId()) - if target: + if target and target.getSlottedObject("ghost"): if group and target in group.getMemberList(): - core.buffService.addGroupBuff(actor, 'me_buff_health') + core.buffService.addGroupBuff(target, 'me_buff_health', actor) else: - core.buffService.addBuffToCreature(target, 'me_buff_health') + core.buffService.addBuffToCreature(target, 'me_buff_health', actor) else: - core.buffService.addGroupBuff(actor, 'me_buff_health') + core.buffService.addGroupBuff(actor, 'me_buff_health', actor) return \ No newline at end of file diff --git a/scripts/commands/me_buff_health_2.py b/scripts/commands/me_buff_health_2.py index 117444bb..dd4c396c 100644 --- a/scripts/commands/me_buff_health_2.py +++ b/scripts/commands/me_buff_health_2.py @@ -7,13 +7,13 @@ def run(core, actor, target, commandString): group = core.objectService.getObject(actor.getGroupId()) - if target: + if target and target.getSlottedObject("ghost"): if group and target in group.getMemberList(): - core.buffService.addGroupBuff(actor, 'me_buff_health_2') + core.buffService.addGroupBuff(target, 'me_buff_health_2', actor) else: - core.buffService.addBuffToCreature(target, 'me_buff_health_2') + core.buffService.addBuffToCreature(target, 'me_buff_health_2', actor) else: - core.buffService.addGroupBuff(actor, 'me_buff_health_2') + core.buffService.addGroupBuff(actor, 'me_buff_health_2', actor) return \ No newline at end of file diff --git a/scripts/commands/me_buff_health_3.py b/scripts/commands/me_buff_health_3.py index 29a22740..26ec110f 100644 --- a/scripts/commands/me_buff_health_3.py +++ b/scripts/commands/me_buff_health_3.py @@ -7,13 +7,13 @@ def run(core, actor, target, commandString): group = core.objectService.getObject(actor.getGroupId()) - if target: + if target and target.getSlottedObject("ghost"): if group and target in group.getMemberList(): - core.buffService.addGroupBuff(actor, 'me_buff_health_3') + core.buffService.addGroupBuff(target, 'me_buff_health_3', actor) else: - core.buffService.addBuffToCreature(target, 'me_buff_health_3') + core.buffService.addBuffToCreature(target, 'me_buff_health_3', actor) else: - core.buffService.addGroupBuff(actor, 'me_buff_health_3') + core.buffService.addGroupBuff(actor, 'me_buff_health_3', actor) return \ No newline at end of file diff --git a/scripts/commands/me_enhance_action_1.py b/scripts/commands/me_enhance_action_1.py index 0b065ab5..9239af4d 100644 --- a/scripts/commands/me_enhance_action_1.py +++ b/scripts/commands/me_enhance_action_1.py @@ -7,13 +7,13 @@ def run(core, actor, target, commandString): group = core.objectService.getObject(actor.getGroupId()) - if target: + if target and target.getSlottedObject("ghost"): if group and target in group.getMemberList(): - core.buffService.addGroupBuff(actor, 'me_buff_action_1') + core.buffService.addGroupBuff(target, 'me_buff_action_1', actor) else: - core.buffService.addBuffToCreature(target, 'me_buff_action_1') + core.buffService.addBuffToCreature(target, 'me_buff_action_1', actor) else: - core.buffService.addGroupBuff(actor, 'me_buff_action_1') + core.buffService.addGroupBuff(actor, 'me_buff_action_1', actor) return \ No newline at end of file diff --git a/scripts/commands/me_enhance_action_2.py b/scripts/commands/me_enhance_action_2.py index a076dfdd..1c9b8dff 100644 --- a/scripts/commands/me_enhance_action_2.py +++ b/scripts/commands/me_enhance_action_2.py @@ -7,13 +7,13 @@ def run(core, actor, target, commandString): group = core.objectService.getObject(actor.getGroupId()) - if target: + if target and target.getSlottedObject("ghost"): if group and target in group.getMemberList(): - core.buffService.addGroupBuff(actor, 'me_buff_action_2') + core.buffService.addGroupBuff(target, 'me_buff_action_2', actor) else: - core.buffService.addBuffToCreature(target, 'me_buff_action_2') + core.buffService.addBuffToCreature(target, 'me_buff_action_2', actor) else: - core.buffService.addGroupBuff(actor, 'me_buff_action_2') + core.buffService.addGroupBuff(actor, 'me_buff_action_2', actor) return \ No newline at end of file diff --git a/scripts/commands/me_enhance_action_3.py b/scripts/commands/me_enhance_action_3.py index 1108c400..a4d9dd4a 100644 --- a/scripts/commands/me_enhance_action_3.py +++ b/scripts/commands/me_enhance_action_3.py @@ -7,13 +7,13 @@ def run(core, actor, target, commandString): group = core.objectService.getObject(actor.getGroupId()) - if target: + if target and target.getSlottedObject("ghost"): if group and target in group.getMemberList(): - core.buffService.addGroupBuff(actor, 'me_buff_action_3') + core.buffService.addGroupBuff(target, 'me_buff_action_3', actor) else: - core.buffService.addBuffToCreature(target, 'me_buff_action_3') + core.buffService.addBuffToCreature(target, 'me_buff_action_3', actor) else: - core.buffService.addGroupBuff(actor, 'me_buff_action_3') + core.buffService.addGroupBuff(actor, 'me_buff_action_3', actor) return \ No newline at end of file diff --git a/scripts/commands/me_enhance_agility_1.py b/scripts/commands/me_enhance_agility_1.py index 24e2c05b..50b163ac 100644 --- a/scripts/commands/me_enhance_agility_1.py +++ b/scripts/commands/me_enhance_agility_1.py @@ -7,13 +7,13 @@ def run(core, actor, target, commandString): group = core.objectService.getObject(actor.getGroupId()) - if target: + if target and target.getSlottedObject("ghost"): if group and target in group.getMemberList(): - core.buffService.addGroupBuff(actor, 'me_buff_agility_1') + core.buffService.addGroupBuff(target, 'me_buff_agility_1', actor) else: - core.buffService.addBuffToCreature(target, 'me_buff_agility_1') + core.buffService.addBuffToCreature(target, 'me_buff_agility_1', actor) else: - core.buffService.addGroupBuff(actor, 'me_buff_agility_1') + core.buffService.addGroupBuff(actor, 'me_buff_agility_1', actor) return \ No newline at end of file diff --git a/scripts/commands/me_enhance_agility_2.py b/scripts/commands/me_enhance_agility_2.py index 63474e3f..0df03459 100644 --- a/scripts/commands/me_enhance_agility_2.py +++ b/scripts/commands/me_enhance_agility_2.py @@ -7,13 +7,13 @@ def run(core, actor, target, commandString): group = core.objectService.getObject(actor.getGroupId()) - if target: + if target and target.getSlottedObject("ghost"): if group and target in group.getMemberList(): - core.buffService.addGroupBuff(actor, 'me_buff_agility_2') + core.buffService.addGroupBuff(target, 'me_buff_agility_2', actor) else: - core.buffService.addBuffToCreature(target, 'me_buff_agility_2') + core.buffService.addBuffToCreature(target, 'me_buff_agility_2', actor) else: - core.buffService.addGroupBuff(actor, 'me_buff_agility_2') + core.buffService.addGroupBuff(actor, 'me_buff_agility_2', actor) return \ No newline at end of file diff --git a/scripts/commands/me_enhance_agility_3.py b/scripts/commands/me_enhance_agility_3.py index 4d665fc3..fe489909 100644 --- a/scripts/commands/me_enhance_agility_3.py +++ b/scripts/commands/me_enhance_agility_3.py @@ -7,13 +7,13 @@ def run(core, actor, target, commandString): group = core.objectService.getObject(actor.getGroupId()) - if target: + if target and target.getSlottedObject("ghost"): if group and target in group.getMemberList(): - core.buffService.addGroupBuff(actor, 'me_buff_agility_3') + core.buffService.addGroupBuff(target, 'me_buff_agility_3', actor) else: - core.buffService.addBuffToCreature(target, 'me_buff_agility_3') + core.buffService.addBuffToCreature(target, 'me_buff_agility_3', actor) else: - core.buffService.addGroupBuff(actor, 'me_buff_agility_3') + core.buffService.addGroupBuff(actor, 'me_buff_agility_3', actor) return \ No newline at end of file diff --git a/scripts/commands/me_enhance_block_1.py b/scripts/commands/me_enhance_block_1.py index d4ef98b6..d1f27220 100644 --- a/scripts/commands/me_enhance_block_1.py +++ b/scripts/commands/me_enhance_block_1.py @@ -7,13 +7,13 @@ def run(core, actor, target, commandString): group = core.objectService.getObject(actor.getGroupId()) - if target: + if target and target.getSlottedObject("ghost"): if group and target in group.getMemberList(): - core.buffService.addGroupBuff(actor, 'me_buff_melee_gb_1') + core.buffService.addGroupBuff(target, 'me_buff_melee_gb_1', actor) else: - core.buffService.addBuffToCreature(target, 'me_buff_melee_gb_1') + core.buffService.addBuffToCreature(target, 'me_buff_melee_gb_1', actor) else: - core.buffService.addGroupBuff(actor, 'me_buff_melee_gb_1') + core.buffService.addGroupBuff(actor, 'me_buff_melee_gb_1', actor) return \ No newline at end of file diff --git a/scripts/commands/me_enhance_dodge_1.py b/scripts/commands/me_enhance_dodge_1.py index 537d2875..9702a6f3 100644 --- a/scripts/commands/me_enhance_dodge_1.py +++ b/scripts/commands/me_enhance_dodge_1.py @@ -7,13 +7,13 @@ def run(core, actor, target, commandString): group = core.objectService.getObject(actor.getGroupId()) - if target: + if target and target.getSlottedObject("ghost"): if group and target in group.getMemberList(): - core.buffService.addGroupBuff(actor, 'me_buff_ranged_gb_1') + core.buffService.addGroupBuff(target, 'me_buff_ranged_gb_1', actor) else: - core.buffService.addBuffToCreature(target, 'me_buff_ranged_gb_1') + core.buffService.addBuffToCreature(target, 'me_buff_ranged_gb_1', actor) else: - core.buffService.addGroupBuff(actor, 'me_buff_ranged_gb_1') + core.buffService.addGroupBuff(actor, 'me_buff_ranged_gb_1', actor) return \ No newline at end of file diff --git a/scripts/commands/me_enhance_precision_1.py b/scripts/commands/me_enhance_precision_1.py index d20c423a..a5ddce5a 100644 --- a/scripts/commands/me_enhance_precision_1.py +++ b/scripts/commands/me_enhance_precision_1.py @@ -7,13 +7,13 @@ def run(core, actor, target, commandString): group = core.objectService.getObject(actor.getGroupId()) - if target: + if target and target.getSlottedObject("ghost"): if group and target in group.getMemberList(): - core.buffService.addGroupBuff(actor, 'me_buff_precision_1') + core.buffService.addGroupBuff(target, 'me_buff_precision_1', actor) else: - core.buffService.addBuffToCreature(target, 'me_buff_precision_1') + core.buffService.addBuffToCreature(target, 'me_buff_precision_1', actor) else: - core.buffService.addGroupBuff(actor, 'me_buff_precision_1') + core.buffService.addGroupBuff(actor, 'me_buff_precision_1', actor) return \ No newline at end of file diff --git a/scripts/commands/me_enhance_precision_2.py b/scripts/commands/me_enhance_precision_2.py index a7b808ed..9c6906d2 100644 --- a/scripts/commands/me_enhance_precision_2.py +++ b/scripts/commands/me_enhance_precision_2.py @@ -7,13 +7,13 @@ def run(core, actor, target, commandString): group = core.objectService.getObject(actor.getGroupId()) - if target: + if target and target.getSlottedObject("ghost"): if group and target in group.getMemberList(): - core.buffService.addGroupBuff(actor, 'me_buff_precision_2') + core.buffService.addGroupBuff(target, 'me_buff_precision_2', actor) else: - core.buffService.addBuffToCreature(target, 'me_buff_precision_2') + core.buffService.addBuffToCreature(target, 'me_buff_precision_2', actor) else: - core.buffService.addGroupBuff(actor, 'me_buff_precision_2') + core.buffService.addGroupBuff(actor, 'me_buff_precision_2', actor) return \ No newline at end of file diff --git a/scripts/commands/me_enhance_precision_3.py b/scripts/commands/me_enhance_precision_3.py index 76594fce..a4997749 100644 --- a/scripts/commands/me_enhance_precision_3.py +++ b/scripts/commands/me_enhance_precision_3.py @@ -7,13 +7,13 @@ def run(core, actor, target, commandString): group = core.objectService.getObject(actor.getGroupId()) - if target: + if target and target.getSlottedObject("ghost"): if group and target in group.getMemberList(): - core.buffService.addGroupBuff(actor, 'me_buff_precision_3') + core.buffService.addGroupBuff(target, 'me_buff_precision_3', actor) else: - core.buffService.addBuffToCreature(target, 'me_buff_precision_3') + core.buffService.addBuffToCreature(target, 'me_buff_precision_3', actor) else: - core.buffService.addGroupBuff(actor, 'me_buff_precision_3') + core.buffService.addGroupBuff(actor, 'me_buff_precision_3', actor) return \ No newline at end of file diff --git a/scripts/commands/me_enhance_strength_1.py b/scripts/commands/me_enhance_strength_1.py index 1ab00983..cf3529bc 100644 --- a/scripts/commands/me_enhance_strength_1.py +++ b/scripts/commands/me_enhance_strength_1.py @@ -7,13 +7,13 @@ def run(core, actor, target, commandString): group = core.objectService.getObject(actor.getGroupId()) - if target: + if target and target.getSlottedObject("ghost"): if group and target in group.getMemberList(): - core.buffService.addGroupBuff(actor, 'me_buff_strength_1') + core.buffService.addGroupBuff(target, 'me_buff_strength_1', actor) else: - core.buffService.addBuffToCreature(target, 'me_buff_strength_1') + core.buffService.addBuffToCreature(target, 'me_buff_strength_1', actor) else: - core.buffService.addGroupBuff(actor, 'me_buff_strength_1') + core.buffService.addGroupBuff(actor, 'me_buff_strength_1', actor) return \ No newline at end of file diff --git a/scripts/commands/me_enhance_strength_2.py b/scripts/commands/me_enhance_strength_2.py index e8b21cd0..13ddfe22 100644 --- a/scripts/commands/me_enhance_strength_2.py +++ b/scripts/commands/me_enhance_strength_2.py @@ -7,13 +7,13 @@ def run(core, actor, target, commandString): group = core.objectService.getObject(actor.getGroupId()) - if target: + if target and target.getSlottedObject("ghost"): if group and target in group.getMemberList(): - core.buffService.addGroupBuff(actor, 'me_buff_strength_2') + core.buffService.addGroupBuff(target, 'me_buff_strength_2', actor) else: - core.buffService.addBuffToCreature(target, 'me_buff_strength_2') + core.buffService.addBuffToCreature(target, 'me_buff_strength_2', actor) else: - core.buffService.addGroupBuff(actor, 'me_buff_strength_2') + core.buffService.addGroupBuff(actor, 'me_buff_strength_2', actor) return \ No newline at end of file diff --git a/scripts/commands/me_enhance_strength_3.py b/scripts/commands/me_enhance_strength_3.py index e51c7bbc..2a822999 100644 --- a/scripts/commands/me_enhance_strength_3.py +++ b/scripts/commands/me_enhance_strength_3.py @@ -7,13 +7,13 @@ def run(core, actor, target, commandString): group = core.objectService.getObject(actor.getGroupId()) - if target: + if target and target.getSlottedObject("ghost"): if group and target in group.getMemberList(): - core.buffService.addGroupBuff(actor, 'me_buff_strength_3') + core.buffService.addGroupBuff(target, 'me_buff_strength_3', actor) else: - core.buffService.addBuffToCreature(target, 'me_buff_strength_3') + core.buffService.addBuffToCreature(target, 'me_buff_strength_3', actor) else: - core.buffService.addGroupBuff(actor, 'me_buff_strength_3') + core.buffService.addGroupBuff(actor, 'me_buff_strength_3', actor) return \ No newline at end of file From 3284798862ab3114e51b5923ad8e5ef105199183 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 24 Mar 2014 19:49:45 +0100 Subject: [PATCH 099/107] Combat - Fixed a problem with Critical Chance --- src/services/combat/CombatService.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/services/combat/CombatService.java b/src/services/combat/CombatService.java index a69039af..ad94babe 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -727,9 +727,12 @@ public class CombatService implements INetworkDispatch { critChance += ((float) target.getSkillModBase("critical_hit_vulnerable") / 100); - if(target.isPlayer()) - critChance += attacker.getSkillModBase("expertise_critical_niche_pvp"); - critChance -= ((float) target.getSkillModBase("display_only_expertise_critical_hit_pvp_reduction") / 100); + if(target.getSlottedObject("ghost") != null) + if(target.isPlayer()) { + critChance += attacker.getSkillModBase("expertise_critical_niche_pvp"); + critChance -= ((float) target.getSkillModBase("display_only_expertise_critical_hit_pvp_reduction") / 100); + } + r = random.nextFloat(); From e363b438ef6c67e29bdadd5678c98fef76e17349 Mon Sep 17 00:00:00 2001 From: Treeku Date: Mon, 24 Mar 2014 19:03:22 +0000 Subject: [PATCH 100/107] Check for vector norm of 0 --- src/services/SimulationService.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index 9b9a81ab..296cdf40 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -982,6 +982,13 @@ public class SimulationService implements INetworkDispatch { Point3D end = new Point3D(position2.x, position2.y + 1, position2.z); Vector3D direction = new Vector3D(end.x - origin.x, end.y - origin.y, end.z - origin.z).normalize(); + + if (direction.getNorm() != 0) { + direction.normalize(); + } else { + System.out.println("WARNING: checkLineOfSightInBuilding: Vector norm was 0."); + } + float distance = position1.getDistance2D(position2); Ray ray = new Ray(origin, direction); From 94ae856f6f973e7fdbaf93ba0831535c8e76dff4 Mon Sep 17 00:00:00 2001 From: Treeku Date: Mon, 24 Mar 2014 19:20:06 +0000 Subject: [PATCH 101/107] Made duplicate ID handling more efficient Shouldn't create a new objectId each server run, by using a duplicateId database that takes other things (such as planetcrc, templatecrc, building, container, cell, coordinates) Currently best solution I can see that doesn't consume a brand new lot of 20,000 objectids each bootup. --- odb/doids/placeholder.txt | 0 src/main/NGECore.java | 6 ++++ src/services/object/DuplicateId.java | 26 ++++++++++++++++++ src/services/object/ObjectService.java | 38 +++++++++++++++++++------- 4 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 odb/doids/placeholder.txt create mode 100644 src/services/object/DuplicateId.java diff --git a/odb/doids/placeholder.txt b/odb/doids/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/src/main/NGECore.java b/src/main/NGECore.java index 6a351892..6cff7196 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -182,6 +182,7 @@ public class NGECore { private ObjectDatabase mailODB; private ObjectDatabase guildODB; private ObjectDatabase objectIdODB; + private ObjectDatabase duplicateIdODB; private BusConfiguration eventBusConfig = BusConfiguration.Default(1, new ThreadPoolExecutor(1, 4, 1, TimeUnit.MINUTES, new LinkedBlockingQueue())); @@ -231,6 +232,7 @@ public class NGECore { mailODB = new ObjectDatabase("mails", true, false, true); guildODB = new ObjectDatabase("guild", true, false, true); objectIdODB = new ObjectDatabase("oids", true, false, false); + duplicateIdODB = new ObjectDatabase("doids", true, false, true); // Services loginService = new LoginService(this); @@ -518,6 +520,10 @@ public class NGECore { return objectIdODB; } + public ObjectDatabase getDuplicateIdODB() { + return duplicateIdODB; + } + public int getActiveClients() { int connections = 0; for (Map.Entry c : clients.entrySet()) { diff --git a/src/services/object/DuplicateId.java b/src/services/object/DuplicateId.java new file mode 100644 index 00000000..57b52cea --- /dev/null +++ b/src/services/object/DuplicateId.java @@ -0,0 +1,26 @@ +package services.object; + +import com.sleepycat.persist.model.Entity; +import com.sleepycat.persist.model.PrimaryKey; + +@Entity +public class DuplicateId { + + @PrimaryKey + private String key; + private long objectId; + + public DuplicateId(String key, long objectId) { + this.key = key; + this.objectId = objectId; + } + + public DuplicateId() { + + } + + public long getObjectId() { + return objectId; + } + +} diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 6f164ebc..dd999972 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -53,6 +53,7 @@ import org.apache.mina.core.session.IoSession; import org.python.core.Py; import org.python.core.PyObject; +import com.sleepycat.je.Transaction; import com.sleepycat.persist.EntityCursor; import com.sleepycat.persist.model.Entity; import com.sleepycat.persist.model.PrimaryKey; @@ -832,23 +833,38 @@ public class ObjectService implements INetworkDispatch { SWGObject object = getObject(objectId); // Same coordinates is a true duplicate - if ((px + x1) == object.getPosition().x && + if ((px + ((containerId == 0) ? 0 : x1)) == object.getPosition().x && py == object.getPosition().y && - (pz + z1) == object.getPosition().z) { + (pz + ((containerId == 0) ? 0 : z1)) == object.getPosition().z) { //System.out.println("Duplicate buildout object: " + template); continue; } } - if (objectId != 0 && getObject(objectId) != null) { - duplicate.put(objectId, generateObjectID()); - objectId = duplicate.get(objectId); - } - if (duplicate.containsKey(containerId)) { containerId = duplicate.get(containerId); } + if (objectId != 0 && getObject(objectId) != null) { + SWGObject container = getObject(containerId); + int x = ((int) (px + ((container == null) ? x1 : container.getPosition().x))); + int z = ((int) (pz + ((container == null) ? z1 : container.getPosition().z))); + String key = "" + CRC.StringtoCRC(planet.getName()) + CRC.StringtoCRC(template) + type + containerId + cellIndex + x + py + z; + long newObjectId = 0; + + if (core.getDuplicateIdODB().contains(key, String.class, DuplicateId.class)) { + newObjectId = core.getDuplicateIdODB().get(key, String.class, DuplicateId.class).getObjectId(); + } else { + newObjectId = generateObjectID(); + Transaction txn = core.getDuplicateIdODB().getEnvironment().beginTransaction(null, null); + core.getDuplicateIdODB().put(new DuplicateId(key, newObjectId), String.class, DuplicateId.class, txn); + txn.commitSync(); + } + + duplicate.put(objectId, newObjectId); + objectId = newObjectId; + } + List containers = new ArrayList(); SWGObject object; if(objectId != 0 && containerId == 0) { @@ -856,9 +872,11 @@ public class ObjectService implements INetworkDispatch { containers.add(objectId); object = createObject(template, objectId, planet, new Point3D(px + x1, py, pz + z1), new Quaternion(qw, qx, qy, qz), null, true); object.setAttachment("childObjects", null); - ((BuildingObject) object).createTransaction(core.getBuildingODB().getEnvironment()); - core.getBuildingODB().put((BuildingObject) object, Long.class, BuildingObject.class, ((BuildingObject) object).getTransaction()); - ((BuildingObject) object).getTransaction().commitSync(); + if (!duplicate.containsValue(objectId)) { + ((BuildingObject) object).createTransaction(core.getBuildingODB().getEnvironment()); + core.getBuildingODB().put((BuildingObject) object, Long.class, BuildingObject.class, ((BuildingObject) object).getTransaction()); + ((BuildingObject) object).getTransaction().commitSync(); + } } else { object = createObject(template, objectId, planet, new Point3D(px + x1, py, pz + z1), new Quaternion(qw, qx, qy, qz)); } From c4093f215c83a30f8fdd0312a423f9a070186676 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Mon, 24 Mar 2014 16:25:04 -0400 Subject: [PATCH 102/107] Created new SkillMod class for SWGList, minor fix to Inspiration buff applying to self Line 1181 in CreatureMessageBuilder needs to be uncommented. When it is, after a couple skill mod delta's are sent, a crash occurs. I'm unsure on how to fix it. --- scripts/commands/covercharge.py | 2 +- .../expertise_en_holographic_mastery_1.py | 4 +- .../expertise_en_holographic_mastery_2.py | 4 +- src/resources/objects/SkillMod.java | 79 +++++++++++++++++++ .../creature/CreatureMessageBuilder.java | 70 +++++++++------- .../objects/creature/CreatureObject.java | 54 +++++-------- src/services/EntertainmentService.java | 16 ++-- 7 files changed, 155 insertions(+), 74 deletions(-) create mode 100644 src/resources/objects/SkillMod.java diff --git a/scripts/commands/covercharge.py b/scripts/commands/covercharge.py index 82ca56af..d0eae641 100644 --- a/scripts/commands/covercharge.py +++ b/scripts/commands/covercharge.py @@ -39,7 +39,7 @@ def handleCoverCharge(actor, window, eventType, returnList): actor.sendSystemMessage('@performance:cc_stop_charge', 0) return else: - actor.setCoverCharge(int(returnList.get(0))) + actor.setCoverCharge(charge) actor.sendSystemMessage('You are now charging a cover of ' + returnList.get(0) + ' credits(s).', 0) return return diff --git a/scripts/expertise/expertise_en_holographic_mastery_1.py b/scripts/expertise/expertise_en_holographic_mastery_1.py index 59a4c40a..e705762e 100644 --- a/scripts/expertise/expertise_en_holographic_mastery_1.py +++ b/scripts/expertise/expertise_en_holographic_mastery_1.py @@ -10,7 +10,7 @@ def addExpertisePoint(core, actor): if not player.getProfession() == 'entertainer_1a': return - actor.addSkill('expertise_en_holographic_mastery_1') + core.services.skillModService.addSkillMod(actor, 'expertise_en_holographic_additional_backup', 1) addAbilities(core, actor, player) return @@ -25,7 +25,7 @@ def removeExpertisePoint(core, actor): if not player.getProfession() == 'entertainer_1a': return - actor.removeSkill('expertise_en_holographic_mastery_1') + core.services.skillModService.deductSkillMod(actor, 'expertise_en_holographic_additional_backup', 1) removeAbilities(core, actor, player) diff --git a/scripts/expertise/expertise_en_holographic_mastery_2.py b/scripts/expertise/expertise_en_holographic_mastery_2.py index 72a8e391..e705762e 100644 --- a/scripts/expertise/expertise_en_holographic_mastery_2.py +++ b/scripts/expertise/expertise_en_holographic_mastery_2.py @@ -10,7 +10,7 @@ def addExpertisePoint(core, actor): if not player.getProfession() == 'entertainer_1a': return - actor.addSkill('expertise_en_holographic_mastery_2') + core.services.skillModService.addSkillMod(actor, 'expertise_en_holographic_additional_backup', 1) addAbilities(core, actor, player) return @@ -25,7 +25,7 @@ def removeExpertisePoint(core, actor): if not player.getProfession() == 'entertainer_1a': return - actor.removeSkill('expertise_en_holographic_mastery_2') + core.services.skillModService.deductSkillMod(actor, 'expertise_en_holographic_additional_backup', 1) removeAbilities(core, actor, player) diff --git a/src/resources/objects/SkillMod.java b/src/resources/objects/SkillMod.java new file mode 100644 index 00000000..0af11b6b --- /dev/null +++ b/src/resources/objects/SkillMod.java @@ -0,0 +1,79 @@ +/******************************************************************************* + * 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.objects; + +import org.apache.mina.core.buffer.IoBuffer; + +import com.sleepycat.persist.model.Persistent; + +@Persistent +public class SkillMod extends Delta { + + private int base; + private int modifier; + private String name; + + public SkillMod() { + } + + public SkillMod(String name, int base, int modifier) { + this.name = name; + this.base = base; + this.modifier = modifier; + } + + public int getBase() { + return base; + } + + public void setBase(int base) { + this.base = base; + } + + public int getModifier() { + return modifier; + } + + public void setModifier(int modifier) { + this.modifier = modifier; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public byte[] getBytes() { + IoBuffer buffer = createBuffer(name.length() + 10); + + buffer.put(getAsciiString(name)); + buffer.putInt(base); + buffer.putInt(modifier); + + return buffer.array(); + } + +} diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index 08f33a9b..03236871 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -31,9 +31,8 @@ import com.sleepycat.persist.model.Persistent; import engine.resources.common.CRC; import resources.objects.Buff; import resources.objects.ObjectMessageBuilder; +import resources.objects.SkillMod; import engine.resources.objects.SWGObject; -import engine.resources.objects.SkillMod; - import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; @@ -158,18 +157,22 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putInt(0); } else { buffer.putInt(creature.getSkillMods().size()); - buffer.putInt(creature.getSkillModsUpdateCounter()); + buffer.putInt(creature.getSkillMods().getUpdateCounter()); - for(SkillMod skillMod : creature.getSkillMods().get()) { + for(SkillMod skillMod : creature.getSkillMods()) { buffer.put((byte) 0); - buffer.put(getAsciiString(skillMod.getSkillModString())); + buffer.put(getAsciiString(skillMod.getName())); buffer.putInt(skillMod.getBase()); buffer.putInt(skillMod.getModifier()); } } buffer.putFloat(creature.getSpeedMultiplierBase()); buffer.putFloat(creature.getSpeedMultiplierMod()); - buffer.putLong(creature.getListenToId()); + + if(creature.getPerformanceListenee() != null) + buffer.putLong(creature.getPerformanceListenee().getObjectId()); + else + buffer.putLong(0); buffer.putFloat(creature.getRunSpeed()); @@ -833,7 +836,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } - public IoBuffer buildAddSkillModDelta(String name, int base) { + /*public IoBuffer buildAddSkillModDelta(String name, int base) { CreatureObject creature = (CreatureObject) object; @@ -851,9 +854,9 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { return buffer; - } + }*/ - public IoBuffer buildRemoveSkillModDelta(String name, int base) { + /*public IoBuffer buildRemoveSkillModDelta(String name, int base) { CreatureObject creature = (CreatureObject) object; @@ -871,7 +874,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { return buffer; - } + }*/ public IoBuffer buildAddSkillDelta(String name) { @@ -1060,23 +1063,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x1C, buffer, size + 4); return buffer; } - - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - switch (viewType) { - case 3: - case 6: - { - object.notifyObservers(buffer.flip(), true); - } - default: - { - if (object.getClient() != null && object.getClient().getSession() != null) { - object.getClient().getSession().write(buffer.flip()); - } - } - } - } - + public IoBuffer buildAddEquipmentDelta(TangibleObject item) { CreatureObject creature = (CreatureObject) object; @@ -1178,11 +1165,36 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + switch (viewType) { + case 1: + case 3: + case 4: { + switch(updateType) { + case 3: { + buffer = createDelta("CREO", (byte) 4, (short) 1, (byte) 3, buffer.flip(), buffer.array().length + 4); + + if (object.getClient() != null && object.getClient().getSession() != null) { + //object.getClient().getSession().write(buffer); + } + break; + } + + } + } + case 6: + case 8: + case 9: + default: + { + return; + } + } + } + @Override public void sendBaselines() { } - - } diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index efb52cb8..0d847cb0 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -47,10 +47,10 @@ import engine.clients.Client; import resources.objects.Buff; import resources.objects.DamageOverTime; import resources.objects.SWGList; +import resources.objects.SkillMod; import engine.resources.objects.IPersistent; import engine.resources.objects.MissionCriticalObject; import engine.resources.objects.SWGObject; -import engine.resources.objects.SkillMod; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; @@ -86,7 +86,6 @@ public class CreatureObject extends TangibleObject implements IPersistent { private int skillModsUpdateCounter = 0; private float speedMultiplierBase = 1; private float speedMultiplierMod = 1; - private long listenToId = 0; private float runSpeed = (float) 7.3; private float slopeModAngle = 1; private float slopeModPercent = 1; @@ -558,7 +557,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { public SkillMod getSkillMod(String name) { synchronized(skillMods.getMutex()) { for(SkillMod skillMod : skillMods.get()) { - if(skillMod.getSkillModString().equals(name)) + if(skillMod.getName().equals(name)) return skillMod; } } @@ -573,19 +572,21 @@ public class CreatureObject extends TangibleObject implements IPersistent { public void addSkillMod(String name, int base) { if(getSkillMod(name) == null) { - // TODO: This will need to be fixed as it doesn't update in the character sheet properly (wrong delta) + // TODO: Send skill mods delta in sendListDelta SkillMod skillMod = new SkillMod(); skillMod.setBase(base); - skillMod.setSkillModString(name); + skillMod.setName(name); skillMod.setModifier(0); skillMods.add(skillMod); } else { + SkillMod mod = getSkillMod(name); mod.setBase(mod.getBase() + base); - if(getClient() != null) { + + /*if(getClient() != null) { setSkillModsUpdateCounter((short) (getSkillModsUpdateCounter() + 1)); getClient().getSession().write(messageBuilder.buildAddSkillModDelta(name, mod.getBase())); - } + }*/ } } @@ -601,24 +602,23 @@ public class CreatureObject extends TangibleObject implements IPersistent { if(mod.getBase() <= 0) { removeSkillMod(mod); } else { - if(getClient() != null) { + skillMods.set(skillMods.indexOf(mod), mod); + System.out.println("Deducted mod!"); + /*if(getClient() != null) { setSkillModsUpdateCounter((short) (getSkillModsUpdateCounter() + 1)); getClient().getSession().write(messageBuilder.buildAddSkillModDelta(name, mod.getBase())); - } + }*/ } } public void removeSkillMod(SkillMod mod) { - skillMods.remove(mod); - if(getClient() != null) { + /*if(getClient() != null) { setSkillModsUpdateCounter((short) (getSkillModsUpdateCounter() + 1)); - getClient().getSession().write(messageBuilder.buildRemoveSkillModDelta(mod.getSkillModString(), mod.getBase())); - } - - + getClient().getSession().write(messageBuilder.buildRemoveSkillModDelta(mod.getName(), mod.getBase())); + }*/ } public short getSkillModsUpdateCounter() { @@ -665,18 +665,6 @@ public class CreatureObject extends TangibleObject implements IPersistent { notifyObservers(speedDelta, true); } - public long getListenToId() { - synchronized(objectMutex) { - return listenToId; - } - } - - public void setListenToId(long listenToId) { - synchronized(objectMutex) { - this.listenToId = listenToId; - } - } - public float getRunSpeed() { synchronized(objectMutex) { return runSpeed; @@ -1181,7 +1169,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { */ destination.getSession().write(upvpm.serialize()); - UpdatePostureMessage upm = new UpdatePostureMessage(getObjectID(), (byte) 0); + UpdatePostureMessage upm = new UpdatePostureMessage(getObjectID(), getPosture()); destination.getSession().write(upm.serialize()); } } @@ -1554,9 +1542,9 @@ public class CreatureObject extends TangibleObject implements IPersistent { synchronized(objectMutex) { this.performanceWatchee = performanceWatchee; } - // not sure at this point if it makes a difference really. - // on Live, an empty CREO4 was sent, at least when listenToId was empty. - //getClient().getSession().write(messageBuilder.buildListenToId(0)); + + //if(this.performanceListenee == null) + //getClient().getSession().write(messageBuilder.buildListenToId(0)); } public CreatureObject getPerformanceListenee() { @@ -1568,10 +1556,8 @@ public class CreatureObject extends TangibleObject implements IPersistent { public void setPerformanceListenee(CreatureObject performanceListenee) { synchronized(objectMutex) { this.performanceListenee = performanceListenee; - //possibly redundant, need to research this further. - this.listenToId = performanceListenee.getObjectId(); } - getClient().getSession().write(messageBuilder.buildListenToId(this.listenToId)); + getClient().getSession().write(messageBuilder.buildListenToId(performanceListenee.getObjectId())); } diff --git a/src/services/EntertainmentService.java b/src/services/EntertainmentService.java index d3375af1..885d4999 100644 --- a/src/services/EntertainmentService.java +++ b/src/services/EntertainmentService.java @@ -35,6 +35,7 @@ import resources.datatables.Posture; import resources.objects.Buff; import resources.objects.BuffItem; import resources.objects.SWGList; +import resources.objects.SkillMod; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; @@ -46,7 +47,6 @@ import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; import engine.clients.Client; import engine.resources.objects.SWGObject; -import engine.resources.objects.SkillMod; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; @@ -348,7 +348,8 @@ public class EntertainmentService implements INetworkDispatch { //core.commandService.registerCommand("stopwatching"); // SWGList error //core.commandService.registerCommand("holoEmote"); core.commandService.registerCommand("covercharge"); - + //core.commandService.registerCommand("en_holographic_recall"); + //core.commandService.registerCommand("en_holographic_image"); // TODO: Add /bandsolo, /bandpause, /changeBandMusic, /changeDance, /changeGroupDance, /changeMusic // Entertainer Effects @@ -392,11 +393,14 @@ public class EntertainmentService implements INetworkDispatch { reciever.setAttachment("buffWorkshop", stats); - PlayerObject rPlayer = (PlayerObject) reciever.getSlottedObject("ghost"); + if (buffer == reciever) + reciever.setAttachment("inspireDuration", 215); + + //PlayerObject rPlayer = (PlayerObject) reciever.getSlottedObject("ghost"); - long timeStamp = 0; - if (reciever.getAttachment("buffWorkshopTimestamp") != null) - timeStamp = (long) reciever.getAttachment("buffWorkshopTimestamp"); + //long timeStamp = 0; + //if (reciever.getAttachment("buffWorkshopTimestamp") != null) + //timeStamp = (long) reciever.getAttachment("buffWorkshopTimestamp"); core.buffService.addBuffToCreature(reciever, "buildabuff_inspiration", buffer); /*if (core.buffService.addBuffToCreature(reciever, "buildabuff_inspiration", buffer) && !rPlayer.getProfession().equals("entertainer_1a")) { From b7c8737455c106202325d6c11cd507853d28f0d4 Mon Sep 17 00:00:00 2001 From: Light2 Date: Tue, 25 Mar 2014 17:48:48 +0100 Subject: [PATCH 103/107] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 24abfa1e..964cb4e7 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ The Engine(NGEngine) is a closed source library and is only licensed for use wit Requirements for Building the Core: ======== -- JDK 7 -- An IDE like Eclipse Juno +- JDK 8 +- A Java 8 compatable IDE like Eclipse Kepler - A valid Star Wars Galaxies Installation with the final patch - Postgresql server (www.postgresql.org) - TRE Explorer(http://forum.modsource.org/index.php?PHPSESSID=bf02fd8244123807f4716c1686abb59f&action=dlattach;topic=33.0;attach=49) From 1a43b10d4ed6941cd9d6abaa33fc3170b54cc3f1 Mon Sep 17 00:00:00 2001 From: Light2 Date: Tue, 25 Mar 2014 17:49:35 +0100 Subject: [PATCH 104/107] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 964cb4e7..f7163d0e 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Requirements for Building the Core: ======== - JDK 8 -- A Java 8 compatable IDE like Eclipse Kepler +- A Java 8 compatible IDE like Eclipse Kepler - A valid Star Wars Galaxies Installation with the final patch - Postgresql server (www.postgresql.org) - TRE Explorer(http://forum.modsource.org/index.php?PHPSESSID=bf02fd8244123807f4716c1686abb59f&action=dlattach;topic=33.0;attach=49) From b55998824ee9fd726a45c359aefb3df108bbd266 Mon Sep 17 00:00:00 2001 From: Light2 Date: Tue, 25 Mar 2014 18:03:19 +0100 Subject: [PATCH 105/107] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f7163d0e..fbea8a10 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Requirements for Building the Core: ======== - JDK 8 -- A Java 8 compatible IDE like Eclipse Kepler +- A Java 8 compatible IDE like Eclipse Luna - A valid Star Wars Galaxies Installation with the final patch - Postgresql server (www.postgresql.org) - TRE Explorer(http://forum.modsource.org/index.php?PHPSESSID=bf02fd8244123807f4716c1686abb59f&action=dlattach;topic=33.0;attach=49) From 1b54d764848eb15bf5825b72ef8d44d4e6e2c6ba Mon Sep 17 00:00:00 2001 From: Light2 Date: Tue, 25 Mar 2014 18:16:51 +0100 Subject: [PATCH 106/107] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fbea8a10..f1c1fe35 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Requirements for Building the Core: ======== - JDK 8 -- A Java 8 compatible IDE like Eclipse Luna +- A Java 8 compatible IDE like Eclipse Luna (http://download.eclipse.org/eclipse/downloads/drops4/I20140318-0830/) - A valid Star Wars Galaxies Installation with the final patch - Postgresql server (www.postgresql.org) - TRE Explorer(http://forum.modsource.org/index.php?PHPSESSID=bf02fd8244123807f4716c1686abb59f&action=dlattach;topic=33.0;attach=49) From cf51dcc2aabc90af8a3b30193fe20b8cbdd428e8 Mon Sep 17 00:00:00 2001 From: Light2 Date: Tue, 25 Mar 2014 18:20:56 +0100 Subject: [PATCH 107/107] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f1c1fe35..ff4c8504 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Requirements for Building the Core: ======== - JDK 8 -- A Java 8 compatible IDE like Eclipse Luna (http://download.eclipse.org/eclipse/downloads/drops4/I20140318-0830/) +- A Java 8 compatible IDE like Eclipse Kepler (https://wiki.eclipse.org/JDT/Eclipse_Java_8_Support_For_Kepler) - A valid Star Wars Galaxies Installation with the final patch - Postgresql server (www.postgresql.org) - TRE Explorer(http://forum.modsource.org/index.php?PHPSESSID=bf02fd8244123807f4716c1686abb59f&action=dlattach;topic=33.0;attach=49)