Add buff callbacks (buff effcts can be removed)

If the buff as a callback field, define it as a function in the buff
script and do whatever it's supposed to do.  It uses the same params as
the other functions in there do.  For example:

def handleClearBuffEffect(core, actor, buff):
This commit is contained in:
Treeku
2013-12-03 22:32:38 +00:00
parent 9cbbc71e84
commit 8bfad21de1
2 changed files with 26 additions and 13 deletions
+15 -11
View File
@@ -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());
}