Added GCW Banners

- Added GCW Banners and the according profession buffs
- Fixed some AI issues
This commit is contained in:
CharonInferar
2014-07-23 22:13:17 +02:00
parent 4fe9270a69
commit b1f05c6802
22 changed files with 321 additions and 13 deletions
+81
View File
@@ -21,9 +21,13 @@
******************************************************************************/
package services;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Vector;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
@@ -34,14 +38,25 @@ import org.python.core.PyObject;
import resources.buffs.Buff;
import resources.buffs.DamageOverTime;
import resources.common.FileUtilities;
import resources.common.OutOfBand;
import resources.datatables.DisplayType;
import resources.datatables.Options;
import resources.datatables.Posture;
import resources.objects.creature.CreatureObject;
import resources.objects.group.GroupObject;
import resources.objects.player.PlayerObject;
import resources.objects.weapon.WeaponObject;
import services.ai.AIActor;
import services.ai.states.FollowState;
import services.command.CombatCommand;
import tools.DevLog;
import main.NGECore;
import engine.clientdata.ClientFileManager;
import engine.clientdata.visitors.DatatableVisitor;
import engine.resources.common.CRC;
import engine.resources.objects.SWGObject;
import engine.resources.scene.Planet;
import engine.resources.scene.Point3D;
import engine.resources.service.INetworkDispatch;
import engine.resources.service.INetworkRemoteEvent;
@@ -51,6 +66,22 @@ public class BuffService implements INetworkDispatch {
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
private ConcurrentHashMap<String, Buff> buffMap = new ConcurrentHashMap<String, Buff>();
private static Map<String,String> bannerBuffMapping = new ConcurrentHashMap<String,String>();
static{
bannerBuffMapping.put("trader_0a", "banner_buff_trader");
bannerBuffMapping.put("trader_0b", "banner_buff_trader");
bannerBuffMapping.put("trader_0c", "banner_buff_trader");
bannerBuffMapping.put("trader_0d", "banner_buff_trader");
bannerBuffMapping.put("entertainer_1a", "banner_buff_entertainer");
bannerBuffMapping.put("medic_1a", "banner_buff_medic");
bannerBuffMapping.put("officer_1a", "banner_buff_officer");
bannerBuffMapping.put("bounty_hunter_1a", "banner_buff_bounty_hunter");
bannerBuffMapping.put("smuggler_1a", "banner_buff_smuggler");
bannerBuffMapping.put("commando_1a", "banner_buff_commando");
bannerBuffMapping.put("spy_1a", "banner_buff_spy");
bannerBuffMapping.put("force_sensitive_1a", "banner_buff_force_sensitive");
}
public BuffService(NGECore core) {
this.core = core;
core.commandService.registerCommand("removeBuff");
@@ -349,6 +380,56 @@ public class BuffService implements INetworkDispatch {
}
public void applyGCWBuff(String buffName, String factionName, SWGObject center) {
Vector<CreatureObject> inRangeObjects = core.simulationService.getAllNearSameFactionCreatures(10, center.getWorldPosition(), center.getPlanet(), factionName);
for(SWGObject obj : inRangeObjects) {
if(!(obj instanceof CreatureObject))
continue;
if(obj instanceof CreatureObject && (((CreatureObject) obj).getPosture() == Posture.Dead))
continue;
CreatureObject buffed = (CreatureObject) obj;
if (! buffed.hasBuff(buffName))
addBuffToCreature(buffed, buffName, buffed);
}
}
public void initiateBannerBuffProcess(CreatureObject buffer, SWGObject banner){
String factionName = buffer.getFaction();
String professionName = buffer.getPlayerObject().getProfession();
String buffName = bannerBuffMapping.get(professionName);
applyGCWBuff(buffName, factionName, banner);
final Future<?>[] fut = {null};
fut[0] = scheduler.scheduleAtFixedRate(new Runnable() {
@Override public void run() {
try {
if (NGECore.getInstance().objectService.getObject(banner.getObjectID())==null){
Thread.yield();
fut[0].cancel(false);
}
applyGCWBuff(buffName, factionName, banner);
if (! buffer.isInQuadtree()){
NGECore.getInstance().objectService.destroyObject(banner.getObjectID());
Thread.yield();
fut[0].cancel(false);
}
if (buffer.getWorldPosition().getDistance2D(banner.getWorldPosition())>1000 || buffer.getPlanetId()!=banner.getPlanetId()){
NGECore.getInstance().objectService.destroyObject(banner.getObjectID());
Thread.yield();
fut[0].cancel(false);
}
} catch (Exception e) {
System.err.println("Exception in GCW Banner thread " + e.getMessage());
}
}
}, 0, 2, TimeUnit.SECONDS);
}
private void loadBuffs() {
try {
DatatableVisitor visitor = ClientFileManager.loadFile("datatables/buff/buff.iff", DatatableVisitor.class);