Added group combat for patrols

This commit is contained in:
Obique
2019-09-22 18:39:46 -04:00
parent fe2abbc2d6
commit bfafa64831
3 changed files with 16 additions and 5 deletions

View File

@@ -13,6 +13,7 @@ import com.projectswg.holocore.intents.support.objects.swg.MoveObjectIntent
import com.projectswg.holocore.resources.support.data.server_info.loader.DataLoader
import com.projectswg.holocore.resources.support.data.server_info.mongodb.PswgDatabase
import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureObject
import com.projectswg.holocore.resources.support.objects.swg.custom.AIBehavior
import com.projectswg.holocore.resources.support.objects.swg.custom.AIObject
import com.projectswg.holocore.resources.support.objects.swg.custom.NpcMode
import com.projectswg.holocore.resources.support.objects.swg.weapon.WeaponObject
@@ -39,9 +40,12 @@ class NpcCombatMode(obj: AIObject) : NpcMode(obj) {
.min(Comparator.comparingInt { it.health }).orElse(null)
override fun onPlayerMoveInAware(player: CreatureObject, distance: Double) {
if (distance > spawner.aggressiveRadius && !ai.defenders.contains(player.objectId)) {
// If out of aggressive range, and not actively fighting
targets.remove(player)
if (distance > spawner.aggressiveRadius) {
// If out of aggressive range, and not actively in combat
if (spawner.behavior == AIBehavior.PATROL && spawner.npcs.none { it.defenders.contains(player.objectId) })
targets.remove(player)
else if (!ai.defenders.contains(player.objectId))
targets.remove(player)
}
}

View File

@@ -142,7 +142,12 @@ public class AIObject extends CreatureObject {
maxAggroDistance = -1; // Ensures the following if-statement will fail and remove the player from the list
if (distance <= maxAggroDistance && isLineOfSight(player)) {
StartNpcCombatIntent.broadcast(this, List.of(player));
if (spawner.getBehavior() == AIBehavior.PATROL) {
for (AIObject npc : spawner.getNpcs())
StartNpcCombatIntent.broadcast(npc, List.of(player));
} else {
StartNpcCombatIntent.broadcast(this, List.of(player));
}
}
}
}

View File

@@ -40,8 +40,10 @@ public class AISchedulingService extends Service {
@IntentHandler
private void handleStartNpcCombatIntent(StartNpcCombatIntent snci) {
modes.compute(snci.getObject(), (o, prev) -> {
if (prev instanceof NpcCombatMode)
if (prev instanceof NpcCombatMode) {
((NpcCombatMode) prev).addTargets(snci.getTargets());
return prev;
}
NpcCombatMode mode = new NpcCombatMode(o);
mode.addTargets(snci.getTargets());
start(o, mode);