Merge pull request #1196 from CharonInferar/CorpseBuffFix

Fixed some corpses not despawning
This commit is contained in:
CharonInferar
2014-08-25 17:44:55 +02:00
17 changed files with 187 additions and 69 deletions
+3
View File
@@ -9,6 +9,9 @@ def setup():
def run(core, actor, target, commandString):
actor.sendSystemMessage('Function suspended until working as intended'),0)
return
#if actor.getSkills('Foraging')==0:
#actor.sendSystemMessage('@skl_use:sys_forage_noskill'),0)
+20 -2
View File
@@ -145,7 +145,14 @@ def run(core, actor, target, commandString):
clipboard = toolkit.getSystemClipboard()
clipboard.setContents(StringSelection(str), None)
actor.sendSystemMessage('Patrolpoint copied to clipboard', 0)
elif command == 'jesus':
actor.setHealth(actor.getMaxHealth())
actor.setAction(actor.getMaxAction())
actor.setPosture(0)
actor.setSpeedMultiplierBase(1)
actor.setTurnRadius(1)
elif command == 'checkai':
latargetID = long(actor.getIntendedTarget())
latarget = core.objectService.getObject(latargetID)
@@ -189,7 +196,18 @@ def run(core, actor, target, commandString):
latargetID = long(actor.getIntendedTarget())
latarget = core.objectService.getObject(latargetID)
actor.sendSystemMessage('Optionsbitmask for unit ' + latarget.getCustomName() + ' is %s' % latarget.getOptionsBitmask(), 0)
elif command == 'isinquad':
latargetID = long(actor.getIntendedTarget())
latarget = core.objectService.getObject(latargetID)
actor.sendSystemMessage('latarget %s' % latargetID, 0)
if latarget:
actor.sendSystemMessage('Is in quad %s' % latarget.isInQuadtree(), 0)
elif command == 'killcorpse':
core.aiService.explicitDestroy(actor)
elif command == 'spawninst':
#String campTemplate = "object/building/poi/shared_gcw_rebel_clone_tent_small.iff"; // LOL why doesn't this spawn?!?!?!
+7 -7
View File
@@ -1,15 +1,15 @@
def itemNames():
templates=['damaged_datapad','red_wiring','worklight_generic','antenna','brain','eye','gland','heart','stomach','armor_repair_device'] #10
templates=templates+['brain','chassis_blueprints','comlink','explosive_dud','hyperdrive_unit','id_chip','impulse_detector','laser_trap'] #8
templates=['damaged_datapad','red_wiring','worklight_generic','armor_repair_device'] #4
templates=templates+['chassis_blueprints','comlink','explosive_dud','hyperdrive_unit','id_chip','impulse_detector','laser_trap'] #7
templates=templates+['launcher_tube','ledger','magseal_detector','medical_console','medical_device','motor','power_output_analyzer','shield_module'] #8
templates=templates+['software_module','survival_gear','underpowered_survey_pad','unidentified_serum_vial','used_notebook','weak_droid_battery'] #6
return templates
def itemChances():
chances=[3.125,3.125,3.125,3.125,3.125,3.125,3.125,3.125]
chances=chances+[3.125,3.125,3.125,3.125,3.125,3.125,3.125,3.125]
chances=chances+[3.125,3.125,3.125,3.125,3.125,3.125,3.125,3.125]
chances=chances+[3.125,3.125,3.125,3.125,3.125,3.125,3.125,3.125]
return chances #32
chances=[4,4,4,4]
chances=chances+[4,4,4,4,4,4,4]
chances=chances+[4,4,4,4,4,4,4,4]
chances=chances+[4,4,4,4,4,4]
return chances
+10
View File
@@ -0,0 +1,10 @@
def itemNames():
templates=['antenna','brain','eye','gland','heart','stomach'] leg, Nerve Complex, organ missing
return templates
def itemChances():
chances=[16.66,16.66,16.66,16.66,16.66,16.66]
return chances
+20
View File
@@ -36,5 +36,25 @@ def addTemplate(core):
mobileTemplate.setDefaultAttack('rangedShotrifle')
mobileTemplate.setAttacks(attacks)
lootPoolNames_1 = ['Junk']
lootPoolChances_1 = [100]
lootGroupChance_1 = 65
mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1)
lootPoolNames_2 = ['batons','random_loot_rifles']
lootPoolChances_2 = [60,40]
lootGroupChance_2 = 20
mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2)
lootPoolNames_3 = ['tusken_raider_clothing']
lootPoolChances_3 = [100]
lootGroupChance_3 = 10
mobileTemplate.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3)
lootPoolNames_4 = ['Colorcrystals']
lootPoolChances_4 = [100]
lootGroupChance_4 = 6
mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4)
core.spawnService.addMobileTemplate('tusken_raider', mobileTemplate)
return
@@ -36,5 +36,25 @@ def addTemplate(core):
mobileTemplate.setDefaultAttack('rangedShotrifle')
mobileTemplate.setAttacks(attacks)
lootPoolNames_1 = ['Junk']
lootPoolChances_1 = [100]
lootGroupChance_1 = 65
mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1)
lootPoolNames_2 = ['batons','random_loot_rifles']
lootPoolChances_2 = [60,40]
lootGroupChance_2 = 20
mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2)
lootPoolNames_3 = ['tusken_raider_clothing']
lootPoolChances_3 = [100]
lootGroupChance_3 = 10
mobileTemplate.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3)
lootPoolNames_4 = ['Colorcrystals']
lootPoolChances_4 = [100]
lootGroupChance_4 = 6
mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4)
core.spawnService.addMobileTemplate('tusken_soldier', mobileTemplate)
return
+20
View File
@@ -36,5 +36,25 @@ def addTemplate(core):
mobileTemplate.setDefaultAttack('rangedShotrifle')
mobileTemplate.setAttacks(attacks)
lootPoolNames_1 = ['Junk']
lootPoolChances_1 = [100]
lootGroupChance_1 = 65
mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1)
lootPoolNames_2 = ['batons','random_loot_rifles']
lootPoolChances_2 = [60,40]
lootGroupChance_2 = 20
mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2)
lootPoolNames_3 = ['tusken_raider_clothing']
lootPoolChances_3 = [100]
lootGroupChance_3 = 10
mobileTemplate.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3)
lootPoolNames_4 = ['Colorcrystals']
lootPoolChances_4 = [100]
lootGroupChance_4 = 6
mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4)
core.spawnService.addMobileTemplate('tusken_zealot', mobileTemplate)
return
+3 -3
View File
@@ -25,9 +25,9 @@ def handleBanner(core, owner, bannerinventoryobject, option):
return
# check if banner object is not already spawned
#if bannerinventoryobject.getAttachment('BannerSpawned'):
#owner.sendSystemMessage('Banner already spawned' , 0)
#return
if bannerinventoryobject.getAttachment('BannerSpawned'):
owner.sendSystemMessage('Banner already spawned' , 0)
return
# spawn banner object
stcSvc = core.staticService
@@ -25,6 +25,7 @@ def addPlanetSpawns(core, planet):
patrolpoints = Vector()
patrolpoints.add(Point3D(float(3531), float(4), float(-4803.1)))
patrolpoints.add(Point3D(float(3529.7), float(4.8), float(-4813.3)))
patrolpoints.add(Point3D(float(3529.7), float(4.8), float(-4824.3)))
patrolpoints.add(Point3D(float(3545.3), float(5), float(-4838.6)))
patrolpoints.add(Point3D(float(3527.5), float(4.8), float(-4863.4)))
patrolpoints.add(Point3D(float(3519.5), float(5), float(-4874.7)))
+33
View File
@@ -251,6 +251,9 @@ public class SimulationService implements INetworkDispatch {
object.makeAware(obj);
if(obj.getClient() != null)
obj.makeAware(object);
// if (object.getTemplate().contains("dressed_eisley_officer"))
// System.out.println("ME quadtree add!");
}
}
}
@@ -496,6 +499,26 @@ public class SimulationService implements INetworkDispatch {
Client observerClient = it.next();
if(observerClient.getParent() != null) {
observerClient.getParent().makeUnaware(object);
// Experimental until engine fixed
if (observerClient.getParent().getAwareObjects().contains(object)){
object.viewChildren(observerClient.getParent(), false, false, new Traverser() {
@Override
public void process(SWGObject object) {
if(object == null)
return;
if(object.getClient() != null)
object.makeUnaware(observerClient.getParent());
observerClient.getParent().makeUnaware(object);
}
});
if(!object.isInSnapshot())
object.sendDestroy(observerClient);
object.removeObserver(observerClient.getParent());
observerClient.getParent().getAwareObjects().remove(object);
}
// Experimental until engine fixed
}
}
}
@@ -528,6 +551,8 @@ public class SimulationService implements INetworkDispatch {
}
CreatureObject creature = (CreatureObject) client.getParent();
if (creature.getPosture()==Posture.Dead || creature.getPosture()==Posture.Incapacitated)
return;
CreatureObject object = creature;
@@ -695,6 +720,8 @@ public class SimulationService implements INetworkDispatch {
}
CreatureObject object = (CreatureObject) client.getParent();
if (object.getPosture()==Posture.Dead || object.getPosture()==Posture.Incapacitated)
return;
if (core.mountService.isMounted(object)) {
object.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_mount"), DisplayType.Broadcast);
@@ -854,6 +881,12 @@ public class SimulationService implements INetworkDispatch {
if(Float.isNaN(newPosition.x) || Float.isNaN(newPosition.y) || Float.isNaN(newPosition.z))
return;
if (object instanceof CreatureObject){
CreatureObject cre = (CreatureObject) object;
if (cre.getPosture()==Posture.Dead || cre.getPosture()==Posture.Incapacitated)
return;
}
if(cell == null) {
+3 -3
View File
@@ -515,14 +515,14 @@ public class AIActor {
damageMap.clear();
followObject = null;
NGECore.getInstance().objectService.destroyObject(creature);
destroyActor();
//destroyActor();
} catch (Exception e) {
System.err.println("Exception3 in scheduleDespawn");
e.printStackTrace();
}
}
//}, 2, TimeUnit.MINUTES);
}, 15, TimeUnit.SECONDS);
}, 2, TimeUnit.MINUTES);
//}, 30, TimeUnit.SECONDS);
}
public void destroyActor(){
+18
View File
@@ -52,6 +52,8 @@ import main.NGECore;
public class AIService {
CreatureObject corpse = null;
@SuppressWarnings("unused") private Vector<AIActor> aiActors = new Vector<AIActor>();
private NGECore core;
private TangibleObject checkerAI = null;
@@ -328,6 +330,13 @@ public class AIService {
}, 10, 2000, TimeUnit.MILLISECONDS);
}
// Test method
public void explicitDestroy(CreatureObject actor){
System.out.println("SEND DESTROY SENDING for " + corpse.getTemplate());
corpse.sendDestroy(actor.getClient());
System.out.println("SEND DESTROY SENT ");
}
public void logAI(String logMsg){
if (checkDeveloperIdentity()){
System.err.println("AI-LOG: " + logMsg);
@@ -339,4 +348,13 @@ public class AIService {
return true;
return false;
}
public CreatureObject getCorpse() {
return corpse;
}
public void setCorpse(CreatureObject corpse) {
System.out.println("SET CORPSE " + corpse.getTemplate());
this.corpse = corpse;
}
}
+3 -2
View File
@@ -945,8 +945,9 @@ public abstract class AIState {
if (actor!=null)
actor.destroyActor();
if (creature!=null){
core.simulationService.remove(creature, creature.getWorldPosition().x, creature.getWorldPosition().z, true); // Make sure
core.objectService.destroyObject(creature.getObjectID());
// taken out due to double respawn, check invasions
// core.simulationService.remove(creature, creature.getWorldPosition().x, creature.getWorldPosition().z, true); // Make sure
// core.objectService.destroyObject(creature.getObjectID());
}
return; // First Patrol point reached
}
+1 -1
View File
@@ -41,7 +41,7 @@ public class DeathState extends AIState {
actor.getCreature().setAttachment("radial_filename", "npc/corpse");
//NGECore.getInstance().scriptService.callScript("scripts/radial/npc/corpse", "", "createRadial", NGECore.getInstance(), actor.getCreature().getKiller(), actor.getCreature(), new Vector<RadialOptions>());
actor.scheduleDespawn();
if (actor.getCreature().getKiller() instanceof CreatureObject){
CreatureObject killer = (CreatureObject)actor.getCreature().getKiller();
if (killer==null)
+10 -3
View File
@@ -23,6 +23,7 @@ package services.ai.states;
import resources.objects.creature.CreatureObject;
import services.ai.AIActor;
import services.ai.states.AIState.StateResult;
import tools.DevLog;
public class PatrolState extends AIState {
@@ -47,8 +48,10 @@ public class PatrolState extends AIState {
@Override
public byte onExit(AIActor actor) {
DevLog.debugoutai(actor, "Charon", "AI PatrolState", "EXITING PATROL STATE!");
actor.setLastPositionBeforeStateChange(actor.getCreature().getWorldPosition());
DevLog.debugoutai(actor, "Charon", "AI PatrolState", "EXITING PATROL STATE!");
CreatureObject creature = actor.getCreature();
if(creature.getPosture() == 14)
actor.setLastPositionBeforeStateChange(actor.getCreature().getWorldPosition());
locked = true;
return StateResult.FINISHED;
}
@@ -56,11 +59,15 @@ public class PatrolState extends AIState {
@Override
public byte move(AIActor actor) {
DevLog.debugoutai(actor, "Charon", "AI PatrolState", "PATROL MOVE!");
CreatureObject creature = actor.getCreature();
if(creature.getPosture() == 14)
return StateResult.DEAD;
if (locked){
System.out.println("PatrolState locked!");
return StateResult.FINISHED;
}
CreatureObject creature = actor.getCreature();
if(creature.isInCombat()){
//System.out.println("PatrolState locking!");
locked = true;
+1 -37
View File
@@ -213,24 +213,6 @@ public class CombatService implements INetworkDispatch {
creature.removeDefender(defender);
}
if(((CreatureObject) target).getPlayerObject() == null)
{
target.setKiller(attacker);
scheduler.schedule(new Runnable()
{
@Override
public void run()
{
try {
core.objectService.destroyObject(target);
} catch (Exception e) {
e.printStackTrace();
}
}
}, 2, TimeUnit.MINUTES);
}
}
}
else if(target instanceof TangibleObject)
@@ -354,25 +336,7 @@ public class CombatService implements INetworkDispatch {
defender.removeDefender(creature);
creature.removeDefender(defender);
}
if(((CreatureObject) target).getPlayerObject() == null)
{
target.setKiller(attacker);
scheduler.schedule(new Runnable()
{
@Override
public void run()
{
try {
core.objectService.destroyObject(target);
} catch (Exception e) {
e.printStackTrace();
}
}
}, 2, TimeUnit.MINUTES);
}
}
}
else if(target instanceof TangibleObject)
+14 -11
View File
@@ -585,6 +585,7 @@ public class ObjectService implements INetworkDispatch {
}
public void destroyObject(SWGObject object) {
if (object == null) {
return;
}
@@ -604,19 +605,21 @@ public class ObjectService implements INetworkDispatch {
@Override
public void run() {
// try {
// // Commented for now until found where the respawn is always set to 60 for any NPC
// CreatureObject newObject = NGECore.getInstance().spawnService.spawnCreature(Template, 0, planet.getName(), cellId, spawnPosition.x, spawnPosition.y, spawnPosition.z, orientation.w, orientation.x, orientation.y, orientation.z, level);
// AIActor newAIActor = (AIActor)newObject.getAttachment("AI");
// newAIActor.cloneActor(((AIActor) object.getAttachment("AI")));
// //object.setAttachment("AI", null);
// } catch (Exception e) {
// e.printStackTrace();
// }
try {
// Commented for now until found where the respawn is always set to 60 for any NPC
CreatureObject newObject = NGECore.getInstance().spawnService.spawnCreature(Template, 0, planet.getName(), cellId, spawnPosition.x, spawnPosition.y, spawnPosition.z, orientation.w, orientation.x, orientation.y, orientation.z, level);
AIActor newAIActor = (AIActor)newObject.getAttachment("AI");
newAIActor.cloneActor(((AIActor) object.getAttachment("AI")));
((AIActor) object.getAttachment("AI")).destroyActor();
//object.setAttachment("AI", null);
} catch (Exception e) {
e.printStackTrace();
}
}
//}, ((AIActor) object.getAttachment("AI")).getMobileTemplate().getRespawnTime(), TimeUnit.SECONDS);
}, 20, TimeUnit.SECONDS);
}, ((AIActor) object.getAttachment("AI")).getMobileTemplate().getRespawnTime(), TimeUnit.SECONDS);
//}, 30, TimeUnit.SECONDS);
}
String filePath = "scripts/" + object.getTemplate().split("shared_" , 2)[0].replace("shared_", "") + object.getTemplate().split("shared_" , 2)[1].replace(".iff", "") + ".py";