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;