mirror of
https://github.com/ProjectSWGCore/NGECore2.git
synced 2026-10-14 04:13:14 -04:00
Merge pull request #1196 from CharonInferar/CorpseBuffFix
Fixed some corpses not despawning
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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?!?!?!
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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)))
|
||||
|
||||
@@ -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) {
|
||||
|
||||
|
||||
@@ -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(){
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user