diff --git a/src/resources/objects/Buff.java b/src/resources/objects/Buff.java index db19f967..ea55a20e 100644 --- a/src/resources/objects/Buff.java +++ b/src/resources/objects/Buff.java @@ -31,7 +31,6 @@ import main.NGECore; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.buffer.SimpleBufferAllocator; -import resources.common.BuffBuilder; import resources.objects.creature.CreatureObject; import com.sleepycat.persist.model.NotPersistent; @@ -41,7 +40,7 @@ import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; import engine.resources.common.CRC; -@Persistent(version=7) +@Persistent(version=8) public class Buff implements IListObject { @NotPersistent @@ -53,6 +52,7 @@ public class Buff implements IListObject { private long ownerId; private String effect1Name, effect2Name, effect3Name, effect4Name, effect5Name; private float effect1Value, effect2Value, effect3Value, effect4Value, effect5Value; + private String callback; private String particleEffect; private boolean isDebuff; private boolean removeOnDeath; @@ -98,6 +98,7 @@ public class Buff implements IListObject { effect4Value = (Float) visitor.getObject(i, 14); effect5Name = (String) visitor.getObject(i, 15); effect5Value = (Float) visitor.getObject(i, 16); + callback = (String) visitor.getObject(i, 18); particleEffect = (String) visitor.getObject(i, 19); isDebuff = (Boolean) visitor.getObject(i, 22); removeOnDeath = (Integer) visitor.getObject(i, 25) != 0; @@ -266,6 +267,14 @@ public class Buff implements IListObject { public void setEffect5Value(float effect5Value) { this.effect5Value = effect5Value; } + + public String getCallback() { + return callback; + } + + public void setCallback(String callback) { + this.callback = callback; + } public String getParticleEffect() { return particleEffect; diff --git a/src/services/BuffService.java b/src/services/BuffService.java index ef6fda27..1c2fd7a0 100644 --- a/src/services/BuffService.java +++ b/src/services/BuffService.java @@ -21,29 +21,22 @@ ******************************************************************************/ package services; -import java.nio.ByteOrder; 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 org.apache.mina.core.buffer.IoBuffer; -import org.apache.mina.core.session.IoSession; +import org.python.core.Py; +import org.python.core.PyObject; -import protocol.swg.ObjControllerMessage; -import protocol.swg.objectControllerObjects.BuffBuilderStartMessage; -import resources.common.Console; import resources.common.FileUtilities; -import resources.common.ObjControllerOpcodes; import resources.objects.Buff; -import resources.objects.BuffItem; import resources.objects.DamageOverTime; import resources.objects.creature.CreatureObject; import resources.objects.group.GroupObject; import resources.objects.player.PlayerObject; import main.NGECore; -import engine.clients.Client; import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; @@ -141,10 +134,21 @@ public class BuffService implements INetworkDispatch { creature.playEffectObject(effect, buff.getBuffName()); } + if (!buff.getCallback().equals("")) { + if (FileUtilities.doesFileExist("scripts/buffs/" + buff.getBuffName() + ".py")) { + 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)); + } + } + } + return buff; } + @SuppressWarnings("unused") public void removeBuffFromCreature(CreatureObject creature, Buff buff) { if(!creature.getBuffList().contains(buff)) @@ -158,8 +162,8 @@ public class BuffService implements INetworkDispatch { core.scriptService.callScript("scripts/buffs/", "removeBuff", buff.getBuffName(), core, creature, buff); creature.removeBuff(buff); - for (String effect : buff.getParticleEffect().split(",")) { - creature.stopEffectObject(buff.getBuffName()); + for (String effect : buff.getParticleEffect().split(",")) { + creature.stopEffectObject(buff.getBuffName()); }