fix SWGList on audience, however, the old field needs removing.

depend inspire on watching
This commit is contained in:
darkk1138
2013-12-09 18:09:40 +01:00
parent 471fab10d8
commit 760aea96f2
3 changed files with 36 additions and 13 deletions
+20 -6
View File
@@ -6,16 +6,30 @@ def setup():
return
def run(core, actor, target, commandString):
if (actor.getProfession() != "entertainer_1a"):
playerObject = actor.getSlottedObject('ghost')
print playerObject.getProfession()
if not playerObject or playerObject.getProfession() != "entertainer_1a":
return
print 'x'
if actor.getPosture() != 0x09:
actor.sendSystemMessage('@performance:insp_buff_must_perform')
return
if (target.getPerformanceWatchee() != actor):
if actor.getPerformanceType():
actor.sendSystemMessage('@performance:insp_buff_must_watch')
return
else:
actor.sendSystemMessage('@performance:insp_buff_must_listen')
return
print ('Buffing Player: ' + str(target.getObjectId()) + ' or: ' + target.getCustomName())
openBuffWindow = BuffBuilderStartMessage(actor.getObjectId(), actor.getObjectId(), target.getObjectId())
objController = ObjControllerMessage(11, openBuffWindow)
actor.getClient().getSession().write(objController.serialize())
penBuffWindow = BuffBuilderStartMessage(target.getObjectId(), actor.getObjectId(), target.getObjectId())
objController2 = ObjControllerMessage(11, penBuffWindow)
openBuffWindow = BuffBuilderStartMessage(target.getObjectId(), actor.getObjectId(), target.getObjectId())
objController2 = ObjControllerMessage(11, openBuffWindow)
target.getClient().getSession().write(objController2.serialize())
return
return
+1 -1
View File
@@ -19,7 +19,7 @@ def run(core, actor, target, commandString):
return
oldWatchee = actor.getPerformanceWatchee()
if oldWatchee:
if oldWatchee and oldWatchee != target:
oldWatchee.removeAudience(actor)
actor.setPerformanceWatchee(target)
@@ -57,7 +57,7 @@ import engine.resources.scene.Quaternion;
import resources.objects.tangible.TangibleObject;
import resources.objects.weapon.WeaponObject;
@Entity(version=8)
@Entity(version=9)
public class CreatureObject extends TangibleObject implements IPersistent {
@NotPersistent
@@ -126,7 +126,9 @@ public class CreatureObject extends TangibleObject implements IPersistent {
private boolean groupDance = true;
private CreatureObject performanceWatchee;
private CreatureObject performanceListenee;
private List<CreatureObject> audience = Collections.synchronizedList(new ArrayList<CreatureObject>());
private SWGList<CreatureObject> performanceAudience = new SWGList<CreatureObject>();
//FIXME: This one needs to be removed. anyone know how?
private List<CreatureObject> audience;
private int health = 1000;
private int action = 300;
@NotPersistent
@@ -369,7 +371,10 @@ public class CreatureObject extends TangibleObject implements IPersistent {
String type = "";
synchronized(objectMutex) {
type = (performanceType) ? "dance" : "music";
Iterator<CreatureObject> it = audience.iterator();
if (performanceAudience == null) {
return;
}
Iterator<CreatureObject> it = performanceAudience.iterator();
while (it.hasNext()) {
CreatureObject next = it.next();
if ((performanceType) && (next.getPerformanceWatchee() != this)) { continue; }
@@ -385,7 +390,7 @@ public class CreatureObject extends TangibleObject implements IPersistent {
next.sendSystemMessage("@performance:" + type + "_stop_other",(byte)0);
}
//not sure if this behaviour is correct. might need fixing later.
audience = Collections.synchronizedList(new ArrayList<CreatureObject>());
performanceAudience = new SWGList<CreatureObject>();
}
}
@Override
@@ -1430,13 +1435,17 @@ public class CreatureObject extends TangibleObject implements IPersistent {
public void addAudience(CreatureObject audienceMember) {
synchronized(objectMutex) {
audience.add(audienceMember);
if (performanceAudience == null) {
performanceAudience = new SWGList<CreatureObject>();
}
performanceAudience.add(audienceMember);
}
}
public void removeAudience(CreatureObject audienceMember) {
synchronized(objectMutex) {
audience.remove(audienceMember);
if (performanceAudience == null) { return; }
performanceAudience.remove(audienceMember);
}
}