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;