mirror of
https://github.com/ProjectSWGCore/NGECore2.git
synced 2026-10-14 04:13:14 -04:00
Merge remote-tracking branch 'origin/master' into Fixes2
This commit is contained in:
@@ -44,7 +44,7 @@ public class AdminService implements INetworkDispatch {
|
||||
PreparedStatement preparedStatement;
|
||||
|
||||
try {
|
||||
preparedStatement = NGECore.getInstance().getDatabase1().preparedStatement("SELECT * FROM accounts WHERE id=" + id + "");
|
||||
preparedStatement = core.getDatabase1().preparedStatement("SELECT * FROM accounts WHERE id=" + id + "");
|
||||
ResultSet resultSet = preparedStatement.executeQuery();
|
||||
if(resultSet.next())
|
||||
accessLevel = resultSet.getString("accessLevel");
|
||||
@@ -60,7 +60,7 @@ public class AdminService implements INetworkDispatch {
|
||||
PreparedStatement preparedStatement;
|
||||
|
||||
try {
|
||||
preparedStatement = NGECore.getInstance().getDatabase1().preparedStatement("SELECT * FROM accounts WHERE id=" + id + "");
|
||||
preparedStatement = core.getDatabase1().preparedStatement("SELECT * FROM accounts WHERE id=" + id + "");
|
||||
ResultSet resultSet = preparedStatement.executeQuery();
|
||||
if(resultSet.next())
|
||||
accountName = resultSet.getString("user");
|
||||
|
||||
@@ -43,7 +43,6 @@ import resources.objects.player.PlayerObject;
|
||||
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.service.INetworkDispatch;
|
||||
import engine.resources.service.INetworkRemoteEvent;
|
||||
@@ -114,6 +113,7 @@ public class BuffService implements INetworkDispatch {
|
||||
}
|
||||
|
||||
// Here the necessary checks must be placed to prevent buffs from the same buff group (e.g. Buff D) being stacked!
|
||||
// ^ These checks are already performed in doAddBuff, unless they were removed.
|
||||
|
||||
if(buff.isGroupBuff()) {
|
||||
addGroupBuff(buffer, buffName, buffer);
|
||||
@@ -135,6 +135,8 @@ public class BuffService implements INetworkDispatch {
|
||||
//TODO fix this -- !! this is wrong - I can buff from 5,5 in cantina someone sitting at 20,20 in the universe/planet !!! - accross the galaxy/planet
|
||||
//cause get position is relative to creature system of coordinates - when one's outside and other inside
|
||||
//if you must use getPosition() check for isInCell first for both or something like that
|
||||
// ^The above bug should be fixed in command service. The checks below shouldn't really even be in this service.
|
||||
|
||||
if (target.getPosition().getDistance(buffer.getPosition()) > 20) {
|
||||
return null;
|
||||
}
|
||||
@@ -165,7 +167,7 @@ public class BuffService implements INetworkDispatch {
|
||||
|
||||
|
||||
|
||||
for (final Buff otherBuff : target.getBuffList()) {
|
||||
for (final Buff otherBuff : target.getBuffList().values()) {
|
||||
if (buff.getGroup1().equals(otherBuff.getGroup1()))
|
||||
if (buff.getPriority() >= otherBuff.getPriority()) {
|
||||
if (buff.getBuffName().equals(otherBuff.getBuffName()))
|
||||
@@ -270,7 +272,7 @@ public class BuffService implements INetworkDispatch {
|
||||
@SuppressWarnings("unused")
|
||||
public void removeBuffFromCreature(CreatureObject creature, Buff buff)
|
||||
{
|
||||
if(!creature.getBuffList().contains(buff))
|
||||
if(!creature.getBuffList().containsValue(buff))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -371,7 +373,7 @@ public class BuffService implements INetworkDispatch {
|
||||
|
||||
// copy to array for thread safety
|
||||
|
||||
for(final Buff buff : creature.getBuffList().get().toArray(new Buff[] { })) {
|
||||
for(final Buff buff : creature.getBuffList().values().toArray(new Buff[] { })) {
|
||||
|
||||
if (buff.getRemovalTask() != null) { continue; }
|
||||
|
||||
@@ -403,7 +405,7 @@ public class BuffService implements INetworkDispatch {
|
||||
|
||||
public boolean hasBuff(final CreatureObject creature, String buffName) {
|
||||
|
||||
for(final Buff buff : creature.getBuffList().get().toArray(new Buff[] { })) {
|
||||
for(final Buff buff : creature.getBuffList().values().toArray(new Buff[] { })) {
|
||||
if (buff.getBuffName().contains(buffName)) { return true; }
|
||||
}
|
||||
return false;
|
||||
@@ -502,7 +504,6 @@ public class BuffService implements INetworkDispatch {
|
||||
String name = (String) visitor.getObject(i, 0);
|
||||
|
||||
buff.setBuffName(name);
|
||||
buff.setBuffCRC(CRC.StringtoCRC(name));
|
||||
buff.setGroup1((String) visitor.getObject(i, 1));
|
||||
buff.setGroup2((String) visitor.getObject(i, 2));
|
||||
buff.setPriority((int) visitor.getObject(i, 4));
|
||||
|
||||
@@ -344,9 +344,9 @@ public class ConnectionService implements INetworkDispatch {
|
||||
object.setAttachment("disconnectTask", null);
|
||||
|
||||
try {
|
||||
List<ScheduledFuture<?>> schedulers = core.playerService.getSchedulers().get(object.getObjectID());
|
||||
Map<String, ScheduledFuture<?>> schedulers = core.playerService.getSchedulers().get(object.getObjectID());
|
||||
if(schedulers != null) {
|
||||
schedulers.forEach(s -> s.cancel(true));
|
||||
schedulers.forEach((s, thread) -> thread.cancel(true));
|
||||
schedulers.clear();
|
||||
}
|
||||
core.playerService.getSchedulers().remove(object.getObjectID());
|
||||
|
||||
@@ -688,12 +688,14 @@ public class EntertainmentService implements INetworkDispatch {
|
||||
}
|
||||
|
||||
public void startPerformance(CreatureObject actor, int performanceId, int performanceCounter, String skillName, boolean isDance) {
|
||||
actor.setPerformanceId(performanceId, isDance);
|
||||
actor.setPerformanceId((isDance) ? 0 : performanceId);
|
||||
actor.setPerformanceCounter(performanceCounter);
|
||||
actor.setCurrentAnimation(skillName);
|
||||
actor.setPerformanceType(isDance);
|
||||
|
||||
actor.startPerformance();
|
||||
if (!actor.isPerforming()) {
|
||||
actor.setPerforming(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void startPerformanceExperience(final CreatureObject entertainer) {
|
||||
@@ -722,13 +724,13 @@ public class EntertainmentService implements INetworkDispatch {
|
||||
|
||||
}
|
||||
|
||||
public void startSpectating(final CreatureObject spectator, final CreatureObject performer, boolean spectateType) {
|
||||
public void startSpectating(final CreatureObject spectator, final CreatureObject performer, String spectateType) {
|
||||
|
||||
// visual
|
||||
if (spectator.getPerformanceWatchee() == performer && spectateType)
|
||||
if (spectator.getPerformanceWatchee() == performer && spectateType.equals("dance"))
|
||||
spectator.getPerformanceWatchee().removeSpectator(spectator);
|
||||
// music
|
||||
else if (spectator.getPerformanceListenee() == performer && !spectateType)
|
||||
else if (spectator.getPerformanceListenee() == performer && spectateType.equals("musci"))
|
||||
spectator.getPerformanceListenee().removeSpectator(spectator);
|
||||
|
||||
spectator.setPerformanceWatchee(performer);
|
||||
@@ -739,7 +741,7 @@ public class EntertainmentService implements INetworkDispatch {
|
||||
try {
|
||||
if (spectator.getWorldPosition().getDistance2D(performer.getWorldPosition()) > (float) 70) {
|
||||
|
||||
if(((performer.getPerformanceType()) ? "dance" : "music").equals("dance")) {
|
||||
if(performer.getPerformanceType().equals("dance")) {
|
||||
spectator.setPerformanceWatchee(null);
|
||||
spectator.sendSystemMessage("You stop watching " + performer.getCustomName() + " because " + performer.getCustomName()
|
||||
+ " is out of range.", (byte) 0);
|
||||
@@ -770,7 +772,7 @@ public class EntertainmentService implements INetworkDispatch {
|
||||
handleInspirationTicks(spectator, performer);
|
||||
}
|
||||
|
||||
if(spectateType)
|
||||
if(spectateType.equals("dance"))
|
||||
spectator.sendSystemMessage("You start watching " + performer.getCustomName() + ".", (byte) 0);
|
||||
else
|
||||
spectator.sendSystemMessage("You start listening to " + performer.getCustomName() + ".", (byte) 0);
|
||||
@@ -778,7 +780,7 @@ public class EntertainmentService implements INetworkDispatch {
|
||||
}
|
||||
|
||||
public void performFlourish(final CreatureObject performer, int flourish) {
|
||||
|
||||
// FIXME There wasn't a limit on flourishes; they just queued up.
|
||||
if (performer.getFlourishCount() > 0 || performer.isPerformingFlourish()) {
|
||||
performer.sendSystemMessage("@performance:flourish_wait_self", (byte) 0);
|
||||
return;
|
||||
@@ -814,7 +816,7 @@ public class EntertainmentService implements INetworkDispatch {
|
||||
if(pEffect == null)
|
||||
return false;
|
||||
|
||||
String performance = (performer.getPerformanceType()) ? "dance" : "music";
|
||||
String performance = performer.getPerformanceType();
|
||||
|
||||
if(performer.isPerformingEffect()) {
|
||||
performer.sendSystemMessage("@performance:effect_wait_self", (byte) 0);
|
||||
|
||||
@@ -209,7 +209,7 @@ public class GroupService implements INetworkDispatch {
|
||||
// loop until we find a member other than ourself
|
||||
for(SWGObject otherMember : group.getMemberList()) {
|
||||
if(otherMember != member) {
|
||||
for(Buff buff : ((CreatureObject) otherMember).getBuffList().get()) {
|
||||
for(Buff buff : ((CreatureObject) otherMember).getBuffList().values()) {
|
||||
if(buff.isGroupBuff() && otherMember.getPlanet() == member.getPlanet() && otherMember.getWorldPosition().getDistance2D(member.getWorldPosition()) <= 80) {
|
||||
core.buffService.addBuffToCreature((CreatureObject) otherMember, buff.getBuffName(), member);
|
||||
}
|
||||
@@ -221,7 +221,7 @@ public class GroupService implements INetworkDispatch {
|
||||
}
|
||||
|
||||
public void removeGroupBuffs(CreatureObject member) {
|
||||
for(Buff buff : new ArrayList<Buff>(member.getBuffList().get())) {
|
||||
for(Buff buff : new ArrayList<Buff>(member.getBuffList().values())) {
|
||||
if(buff.isGroupBuff() && buff.getGroupBufferId() != member.getObjectID()) {
|
||||
core.buffService.removeBuffFromCreature(member, buff);
|
||||
}
|
||||
|
||||
@@ -242,7 +242,7 @@ public class LootService implements INetworkDispatch {
|
||||
if (droppedItem.getAttachment("LootItemName").toString().contains("Loot Chest")){
|
||||
|
||||
lootedObject.playEffectObject("appearance/pt_rare_chest.prt", "");
|
||||
requester.playMusicSelf("sound/rare_loot_chest.snd", requester.getObjectID(),1,false);
|
||||
requester.playMusic("sound/rare_loot_chest.snd", requester.getObjectID(),1,false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -75,6 +75,7 @@ import resources.datatables.GcwRank;
|
||||
import resources.datatables.Options;
|
||||
import resources.datatables.PlayerFlags;
|
||||
import resources.datatables.Professions;
|
||||
import resources.equipment.Equipment;
|
||||
import resources.datatables.AdminTag;
|
||||
import resources.guild.Guild;
|
||||
import resources.objects.building.BuildingObject;
|
||||
@@ -111,7 +112,7 @@ public class PlayerService implements INetworkDispatch {
|
||||
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
|
||||
private float xpMultiplier;
|
||||
protected final Object objectMutex = new Object();
|
||||
private ConcurrentHashMap<Long, List<ScheduledFuture<?>>> schedulers = new ConcurrentHashMap<Long, List<ScheduledFuture<?>>>();
|
||||
private ConcurrentHashMap<Long, Map<String, ScheduledFuture<?>>> schedulers = new ConcurrentHashMap<Long, Map<String, ScheduledFuture<?>>>();
|
||||
|
||||
public PlayerService(final NGECore core) {
|
||||
this.core = core;
|
||||
@@ -124,20 +125,32 @@ public class PlayerService implements INetworkDispatch {
|
||||
if(schedulers.get(creature.getObjectID()) != null)
|
||||
return;
|
||||
|
||||
List<ScheduledFuture<?>> scheduleList = new ArrayList<ScheduledFuture<?>>();
|
||||
Map<String, ScheduledFuture<?>> scheduleList = new ConcurrentHashMap<String, ScheduledFuture<?>>();
|
||||
|
||||
scheduleList.add(scheduler.scheduleAtFixedRate(() -> {
|
||||
scheduleList.put("serverTime", scheduler.scheduleAtFixedRate(() -> {
|
||||
try {
|
||||
if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) {
|
||||
//scheduleList.get("serverTime").cancel(true);
|
||||
return;
|
||||
}
|
||||
|
||||
ServerTimeMessage time = new ServerTimeMessage(core.getGalacticTime() / 1000);
|
||||
IoBuffer packet = time.serialize();
|
||||
|
||||
creature.getClient().getSession().write(packet);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}, 45, 45, TimeUnit.SECONDS));
|
||||
|
||||
scheduleList.add(scheduler.scheduleAtFixedRate(() -> {
|
||||
scheduleList.put("gcwUpdate", scheduler.scheduleAtFixedRate(() -> {
|
||||
try {
|
||||
|
||||
if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) {
|
||||
//scheduleList.get("gcwUpdate").cancel(true);
|
||||
return;
|
||||
}
|
||||
|
||||
PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost");
|
||||
player.setTotalPlayTime((int) (player.getTotalPlayTime() + ((System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000)));
|
||||
player.setLastPlayTimeUpdate(System.currentTimeMillis());
|
||||
@@ -189,9 +202,14 @@ public class PlayerService implements INetworkDispatch {
|
||||
}
|
||||
}, 30, 30, TimeUnit.SECONDS));
|
||||
|
||||
scheduleList.add(scheduler.scheduleAtFixedRate(() -> {
|
||||
scheduleList.put("stealthCheck", scheduler.scheduleAtFixedRate(() -> {
|
||||
try {
|
||||
if (creature.isInStealth() && !creature.getOption(Options.INVULNERABLE) && core.adminService.getAccessLevelFromDB(creature.getClient().getAccountId()) == null) {
|
||||
if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) {
|
||||
//scheduleList.get("stealthCheck").cancel(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (creature.isCloaked() && !creature.getOption(Options.INVULNERABLE) && core.adminService.getAccessLevelFromDB(creature.getClient().getAccountId()) == null) {
|
||||
List<SWGObject> objects = core.simulationService.get(creature.getPlanet(), creature.getPosition().x, creature.getPosition().z, 64);
|
||||
|
||||
for (SWGObject object : objects) {
|
||||
@@ -209,7 +227,7 @@ public class PlayerService implements INetworkDispatch {
|
||||
camoflauge -= (64 - creature.getPosition().getDistance(observer.getPosition()));
|
||||
|
||||
if (new Random(camoflauge).nextInt() == camoflauge) {
|
||||
creature.setInStealth(false);
|
||||
creature.setCloaked(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -222,8 +240,13 @@ public class PlayerService implements INetworkDispatch {
|
||||
}
|
||||
}, 15, 15, TimeUnit.SECONDS));
|
||||
|
||||
scheduleList.add(scheduler.scheduleAtFixedRate(() -> {
|
||||
scheduleList.put("action", scheduler.scheduleAtFixedRate(() -> {
|
||||
try {
|
||||
if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) {
|
||||
//scheduleList.get("action").cancel(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if(creature.getAction() < creature.getMaxAction() && creature.getPosture() != 14) {
|
||||
if(!creature.isInCombat())
|
||||
creature.setAction(creature.getAction() + (15 + creature.getLevel() * 5));
|
||||
@@ -235,8 +258,13 @@ public class PlayerService implements INetworkDispatch {
|
||||
}
|
||||
}, 0, 1000, TimeUnit.MILLISECONDS));
|
||||
|
||||
scheduleList.add(scheduler.scheduleAtFixedRate(() -> {
|
||||
scheduleList.put("health", scheduler.scheduleAtFixedRate(() -> {
|
||||
try {
|
||||
if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) {
|
||||
//scheduleList.get("health").cancel(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if(creature.getHealth() < creature.getMaxHealth() && !creature.isInCombat() && creature.getPosture() != 13 && creature.getPosture() != 14)
|
||||
creature.setHealth(creature.getHealth() + (36 + creature.getLevel() * 4));
|
||||
} catch (Exception e) {
|
||||
@@ -244,8 +272,13 @@ public class PlayerService implements INetworkDispatch {
|
||||
}
|
||||
}, 0, 1000, TimeUnit.MILLISECONDS));
|
||||
|
||||
scheduleList.add(scheduler.scheduleAtFixedRate(() -> {
|
||||
scheduleList.put("awareness", scheduler.scheduleAtFixedRate(() -> {
|
||||
try {
|
||||
if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) {
|
||||
//scheduleList.get("awareness").cancel(true);
|
||||
return;
|
||||
}
|
||||
|
||||
long[] ids = creature.getAwareObjects().stream().mapToLong(SWGObject::getObjectID).toArray();
|
||||
for(int i = 0; i < ids.length; i++) {
|
||||
for(int j = 0; j < ids.length; j++) {
|
||||
@@ -662,7 +695,7 @@ public class PlayerService implements INetworkDispatch {
|
||||
creature.setTurnRadius(1);
|
||||
|
||||
if(pvpDeath) {
|
||||
List<Buff> buffs = new ArrayList<Buff>(creature.getBuffList().get());
|
||||
List<Buff> buffs = new ArrayList<Buff>(creature.getBuffList().values());
|
||||
buffs.stream().filter(Buff::isDecayOnPvPDeath).forEach(Buff::incDecayCounter);
|
||||
creature.updateAllBuffs();
|
||||
}
|
||||
@@ -754,38 +787,39 @@ public class PlayerService implements INetworkDispatch {
|
||||
public void resetLevel(CreatureObject creature, boolean unequipItems) {
|
||||
PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost");
|
||||
SWGObject inventory = creature.getSlottedObject("inventory");
|
||||
|
||||
|
||||
if (unequipItems) {
|
||||
try {
|
||||
for (Long equipmentId : new ArrayList<Long>(creature.getEquipmentList())) {
|
||||
|
||||
SWGObject equipment = core.objectService.getObject(equipmentId);
|
||||
|
||||
for (Equipment equipmentObject : new ArrayList<Equipment>(creature.getEquipmentList())) {
|
||||
|
||||
SWGObject equipment = core.objectService.getObject(equipmentObject.getObjectId());
|
||||
|
||||
if (equipment == null || equipment.getTemplate().startsWith("object/tangible/hair/")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
switch (equipment.getTemplate()) {
|
||||
case "object/tangible/inventory/shared_character_inventory.iff":
|
||||
case "object/tangible/inventory/shared_appearance_inventory.iff":
|
||||
case "object/tangible/datapad/shared_character_datapad.iff":
|
||||
case "object/tangible/bank/shared_character_bank.iff":
|
||||
case "object/tangible/mission_bag/shared_mission_bag.iff":
|
||||
case "object/weapon/creature/shared_creature_default_weapon.iff":
|
||||
continue;
|
||||
default:
|
||||
creature.transferTo(creature, inventory, equipment);
|
||||
case "object/tangible/inventory/shared_character_inventory.iff":
|
||||
case "object/tangible/inventory/shared_appearance_inventory.iff":
|
||||
case "object/tangible/datapad/shared_character_datapad.iff":
|
||||
case "object/tangible/bank/shared_character_bank.iff":
|
||||
case "object/tangible/mission_bag/shared_mission_bag.iff":
|
||||
case "object/weapon/creature/shared_creature_default_weapon.iff":
|
||||
continue;
|
||||
default:
|
||||
creature.transferTo(creature, inventory, equipment);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
//for (SWGObject equipment : creature.getAppearanceEquipmentList()) {
|
||||
//core.equipmentService.unequip(creature, equipment);
|
||||
//}
|
||||
|
||||
for (Buff buff : creature.getBuffList().get().toArray(new Buff[] { })) {
|
||||
for (Buff buff : creature.getBuffList().values().toArray(new Buff[] { })) {
|
||||
if (buff.isRemoveOnRespec()) {
|
||||
core.buffService.removeBuffFromCreature(creature, buff);
|
||||
}
|
||||
@@ -820,7 +854,7 @@ public class PlayerService implements INetworkDispatch {
|
||||
String xpType = ((player.getProfession().contains("entertainer")) ? "entertainer" : ((player.getProfession().contains("trader")) ? "crafting" : "combat_general"));
|
||||
|
||||
player.setXp(xpType, 0);
|
||||
creature.setXpBarValue(0);
|
||||
creature.setDisplayXp(0);
|
||||
|
||||
player.setProfessionWheelPosition("");
|
||||
|
||||
@@ -876,7 +910,7 @@ public class PlayerService implements INetworkDispatch {
|
||||
String xpType = ((player.getProfession().contains("entertainer")) ? "entertainer" : ((player.getProfession().contains("trader")) ? "crafting" : "combat_general"));
|
||||
|
||||
player.setXp(xpType, experience);
|
||||
creature.setXpBarValue(experience);
|
||||
creature.setDisplayXp(experience);
|
||||
|
||||
|
||||
// 2. Add the relevant health/action and expertise points.
|
||||
@@ -1061,7 +1095,7 @@ public class PlayerService implements INetworkDispatch {
|
||||
experience += ((experience * experienceBonus) / 100);
|
||||
|
||||
// 1. Add the experience.
|
||||
if (experience > 0 && !creature.isStationary()) {
|
||||
if (experience > 0 && !creature.isPerforming()) {
|
||||
creature.showFlyText(OutOfBand.ProsePackage("@base_player:prose_flytext_xp", experience), 2.5f, new RGB(180, 60, 240), 1, true);
|
||||
}
|
||||
|
||||
@@ -1072,7 +1106,7 @@ public class PlayerService implements INetworkDispatch {
|
||||
}
|
||||
|
||||
player.setXp(xpType, experience);
|
||||
creature.setXpBarValue(experience);
|
||||
creature.setDisplayXp(experience);
|
||||
|
||||
// 2. See if they need to level up.
|
||||
for (int i = 0; i < experienceTable.getRowCount(); i++) {
|
||||
@@ -1453,8 +1487,8 @@ public class PlayerService implements INetworkDispatch {
|
||||
actor.sendSystemMessage("@unity:decline", (byte) 0);
|
||||
proposer.sendSystemMessage("@unity:declined", (byte) 0);
|
||||
actor.setAttachment("proposer", null);
|
||||
for(Long objId : proposer.getEquipmentList()) {
|
||||
SWGObject obj = core.objectService.getObject(objId);
|
||||
for(Equipment equipment : proposer.getEquipmentList()) {
|
||||
SWGObject obj = core.objectService.getObject(equipment.getObjectId());
|
||||
if(obj != null && obj.getAttachment("unity") != null) {
|
||||
obj.setAttachment("unity", null);
|
||||
break;
|
||||
@@ -1562,7 +1596,7 @@ public class PlayerService implements INetworkDispatch {
|
||||
|
||||
}
|
||||
|
||||
public Map<Long, List<ScheduledFuture<?>>> getSchedulers() {
|
||||
public Map<Long, Map<String, ScheduledFuture<?>>> getSchedulers() {
|
||||
return schedulers;
|
||||
}
|
||||
|
||||
|
||||
@@ -407,7 +407,7 @@ public class SkillService implements INetworkDispatch {
|
||||
List<String> skills = new ArrayList<String>(creature.getSkills());
|
||||
skills.stream().filter(s -> s.contains("expertise")).forEach(s -> removeSkill(creature, s));
|
||||
|
||||
creature.getBuffList().stream().forEach(buff -> creature.removeBuff(buff));
|
||||
creature.getBuffList().values().stream().forEach(buff -> creature.removeBuff(buff));
|
||||
}
|
||||
|
||||
public void sendRespecWindow(CreatureObject creature) {
|
||||
|
||||
@@ -185,7 +185,7 @@ public class AIActor {
|
||||
try {
|
||||
if (AIactive){
|
||||
// this is difficult, should NPC not fight when no player is near? || creature.getObservers().isEmpty()
|
||||
if(creature == null || creature.getFactionStatus()!=FactionStatus.Combatant || creature.isInCombat())
|
||||
if(creature == null || creature.getFactionStatus()!=FactionStatus.Combatant || creature.getObservers().isEmpty() || creature.isInCombat())
|
||||
return;
|
||||
if(this.getFollowObject() != null){ // Don't search if actor has valid target
|
||||
CreatureObject addedCreature = null;
|
||||
|
||||
@@ -122,7 +122,7 @@ public class LairActor {
|
||||
break;
|
||||
case 3:
|
||||
if (bossTemplate!=null && ! bossSpawned){
|
||||
CreatureObject boss = (CreatureObject)NGECore.getInstance().spawnService.spawnCreature(bossTemplate, lairObject.getPlanet().getName(), 0L, lairObject.getPosition().x + 3, lairObject.getPosition().y, lairObject.getPosition().z, lairObject.getOrientation().w, lairObject.getOrientation().x, lairObject.getOrientation().y,lairObject.getOrientation().z,-1);
|
||||
//CreatureObject boss = (CreatureObject)NGECore.getInstance().spawnService.spawnCreature(bossTemplate, lairObject.getPlanet().getName(), 0L, lairObject.getPosition().x + 3, lairObject.getPosition().y, lairObject.getPosition().z, lairObject.getOrientation().w, lairObject.getOrientation().x, lairObject.getOrientation().y,lairObject.getOrientation().z,-1);
|
||||
bossSpawned = true;
|
||||
}
|
||||
return;
|
||||
|
||||
@@ -195,14 +195,16 @@ public class AttackState extends AIState {
|
||||
|
||||
if (target instanceof CreatureObject){
|
||||
CreatureObject targetCreature = (CreatureObject) target;
|
||||
if(targetCreature.getPosture() == 13 || targetCreature.getPosture() == 14 || targetCreature.isInStealth()) {
|
||||
if(targetCreature.getPosture() == 13 || targetCreature.getPosture() == 14 || targetCreature.isCloaked()) {
|
||||
|
||||
actor.setFollowObject(actor.getHighestDamageDealer());
|
||||
target = (CreatureObject) actor.getFollowObject();
|
||||
if(target == null)
|
||||
{
|
||||
creature.setLookAtTarget(0);
|
||||
creature.setIntendedTarget(0);
|
||||
if (creature.getLookAtTarget() != 0) {
|
||||
creature.setLookAtTarget(0);
|
||||
creature.setIntendedTarget(0);
|
||||
}
|
||||
|
||||
}
|
||||
actor.setFollowObject(null);
|
||||
|
||||
@@ -139,7 +139,7 @@ public class TurretAttackState extends TurretAIState {
|
||||
|
||||
if (target instanceof CreatureObject){
|
||||
CreatureObject targetCreature = (CreatureObject) target;
|
||||
if(targetCreature.getPosture() == 13 || targetCreature.getPosture() == 14 || targetCreature.isInStealth()) {
|
||||
if(targetCreature.getPosture() == 13 || targetCreature.getPosture() == 14 || targetCreature.isCloaked()) {
|
||||
|
||||
actor.setFollowObject(actor.getHighestDamageDealer());
|
||||
target = (CreatureObject) actor.getFollowObject();
|
||||
|
||||
@@ -906,11 +906,11 @@ public class CombatService implements INetworkDispatch {
|
||||
|
||||
private boolean attemptCombat(CreatureObject attacker, TangibleObject target) {
|
||||
|
||||
if (attacker.isInStealth()) {
|
||||
attacker.setInStealth(false);
|
||||
if (attacker.isCloaked()) {
|
||||
attacker.setCloaked(false);
|
||||
|
||||
if (attacker.getPlayerObject() != null && attacker.getPlayerObject().getProfession().equals("spy_1a")) {
|
||||
attacker.setRadarVisible(true);
|
||||
attacker.setVisibleOnRadar(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,8 +23,6 @@ package services.command;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.Map;
|
||||
@@ -36,7 +34,6 @@ import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
import main.NGECore;
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
import org.apache.mina.core.session.IoSession;
|
||||
|
||||
@@ -546,6 +543,7 @@ public class CommandService implements INetworkDispatch {
|
||||
|
||||
TangibleObject targetObject = (TangibleObject) target;
|
||||
|
||||
// FIXME Attacks will work on allies without this
|
||||
// if (!targetObject.isAttackableBy(actor)) {
|
||||
// return false;
|
||||
// }
|
||||
|
||||
@@ -29,6 +29,7 @@ import org.python.core.Py;
|
||||
import org.python.core.PyObject;
|
||||
|
||||
import engine.resources.objects.SWGObject;
|
||||
import resources.equipment.Equipment;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
|
||||
public class BonusSetTemplate
|
||||
@@ -55,9 +56,9 @@ public class BonusSetTemplate
|
||||
public int getWornTemplateCount(CreatureObject creature)
|
||||
{
|
||||
int wornItems = 0;
|
||||
for (Long itemId : creature.getEquipmentList().get())
|
||||
for (Equipment equipment : creature.getEquipmentList().get())
|
||||
{
|
||||
SWGObject item = NGECore.getInstance().objectService.getObject(itemId);
|
||||
SWGObject item = NGECore.getInstance().objectService.getObject(equipment.getObjectId());
|
||||
if(item == null)
|
||||
continue;
|
||||
if(requiredWornItems.contains(item.getTemplate()) || requiredWornItems.contains(item.getStfName())) wornItems++;
|
||||
|
||||
@@ -39,6 +39,7 @@ import org.python.core.Py;
|
||||
import org.python.core.PyObject;
|
||||
|
||||
import resources.datatables.FactionStatus;
|
||||
import resources.equipment.Equipment;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import main.NGECore;
|
||||
import engine.resources.container.Traverser;
|
||||
@@ -324,9 +325,9 @@ public class EquipmentService implements INetworkDispatch {
|
||||
int wornArmourPieces = 0, forceProtection = 0;
|
||||
Map<String, Float> protection = new TreeMap<String, Float>();
|
||||
|
||||
for(Long itemId : new ArrayList<Long>(creature.getEquipmentList()))
|
||||
for(Equipment equipment : new ArrayList<Equipment>(creature.getEquipmentList()))
|
||||
{
|
||||
SWGObject item = core.objectService.getObject(itemId);
|
||||
SWGObject item = core.objectService.getObject(equipment.getObjectId());
|
||||
if(item == null)
|
||||
continue;
|
||||
Map<String, Object> attributes = new TreeMap<String, Object>(item.getAttributes());
|
||||
|
||||
@@ -897,8 +897,8 @@ public class HousingService implements INetworkDispatch {
|
||||
// possibly sending the same delta multiple times
|
||||
if (((CreatureObject) owner).getLookAtTarget() != itemList.get(i).getObjectID());
|
||||
((CreatureObject)owner).setLookAtTarget(itemList.get(i).getObjectID());
|
||||
if (((CreatureObject) owner).getTargetId() != itemList.get(i).getObjectID());
|
||||
((CreatureObject)owner).setTargetId(itemList.get(i).getObjectID());
|
||||
if (((CreatureObject) owner).getIntendedTarget() != itemList.get(i).getObjectID());
|
||||
((CreatureObject)owner).setIntendedTarget(itemList.get(i).getObjectID());
|
||||
if (((CreatureObject) owner).getIntendedTarget() != itemList.get(i).getObjectID());
|
||||
((CreatureObject)owner).setIntendedTarget(itemList.get(i).getObjectID());
|
||||
}
|
||||
|
||||
@@ -438,7 +438,7 @@ public class MountService implements INetworkDispatch {
|
||||
return;
|
||||
}
|
||||
|
||||
if (rider.isInStealth()) {
|
||||
if (rider.isCloaked()) {
|
||||
rider.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:no_mount_stealth"), DisplayType.Broadcast);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -450,7 +450,7 @@ public class PetService implements INetworkDispatch {
|
||||
return;
|
||||
}
|
||||
|
||||
if (rider.isInStealth()) {
|
||||
if (rider.isCloaked()) {
|
||||
rider.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:no_mount_stealth"), DisplayType.Broadcast);
|
||||
return;
|
||||
}
|
||||
@@ -763,7 +763,7 @@ public class PetService implements INetworkDispatch {
|
||||
AIActor aiActor = (AIActor) mount.getAttachment("AI");
|
||||
aiActor.destroyActor();
|
||||
player.setPet(0L);
|
||||
owner.setCalledPet(null);
|
||||
owner.setCalledPet(null);
|
||||
core.objectService.destroyObject((Long) pcd.getAttachment("companion_RefId"));
|
||||
pcd.setAttachment("companion_RefId", null);
|
||||
}
|
||||
@@ -989,11 +989,11 @@ public class PetService implements INetworkDispatch {
|
||||
datapad.add(pcd);
|
||||
|
||||
if (target.getOption(Options.AGGRESSIVE))
|
||||
target.removeOption(Options.AGGRESSIVE);
|
||||
target.setOptions(Options.AGGRESSIVE, false);
|
||||
|
||||
target.setAttachment("tamed", 1);
|
||||
|
||||
actor.setCalledPet(target);
|
||||
actor.setCalledPet(target);
|
||||
target.setFaction(actor.getFaction());
|
||||
target.setFactionStatus(actor.getFactionStatus());
|
||||
target.setOwnerId(actor.getObjectID());
|
||||
|
||||
Reference in New Issue
Block a user