Basic combat works now, fixed /pvp, added waypoint mail attachments, fixed several bugs

This commit is contained in:
Light2
2013-08-04 21:15:12 +02:00
parent 8c6d56bef3
commit a8c61f8e50
24 changed files with 547 additions and 62 deletions
+57 -1
View File
@@ -24,6 +24,13 @@ package services.combat;
import java.util.Map;
import java.util.Random;
import org.python.modules.math;
import protocol.swg.ObjControllerMessage;
import protocol.swg.objectControllerObjects.CombatAction;
import protocol.swg.objectControllerObjects.CommandEnqueueRemove;
import protocol.swg.objectControllerObjects.StartTask;
import resources.objects.creature.CreatureObject;
import resources.objects.tangible.TangibleObject;
import resources.objects.weapon.WeaponObject;
@@ -31,6 +38,7 @@ import services.command.CombatCommand;
import main.NGECore;
import engine.resources.common.CRC;
import engine.resources.objects.SWGObject;
import engine.resources.service.INetworkDispatch;
import engine.resources.service.INetworkRemoteEvent;
@@ -41,6 +49,16 @@ public class CombatService implements INetworkDispatch {
public CombatService(NGECore core) {
this.core = core;
core.commandService.registerCombatCommand("rangedshotrifle");
core.commandService.registerCombatCommand("rangedshotpistol");
core.commandService.registerCombatCommand("rangedshotlightrifle");
core.commandService.registerCombatCommand("rangedshot");
core.commandService.registerCombatCommand("meleehit");
core.commandService.registerCombatCommand("saberhit");
core.commandService.registerCombatCommand("fs_sweep_7");
core.commandService.registerCombatCommand("fs_dm_7");
core.commandService.registerCombatCommand("fs_dm_cc_6");
core.commandService.registerCombatCommand("fs_ae_dm_cc_6");
}
@Override
@@ -136,13 +154,31 @@ public class CombatService implements INetworkDispatch {
damage -= blockValue;
}
if(damage > 0)
applyDamage(attacker, target, (int) damage);
applyDamage(attacker, target, (int) damage);
sendCombatPackets(attacker, target, weapon, command, actionCounter);
}
private void sendCombatPackets(CreatureObject attacker, CreatureObject target, WeaponObject weapon, CombatCommand command, int actionCounter) {
String animationStr = command.getRandomAnimation(weapon);
CombatAction combatAction = new CombatAction(CRC.StringtoCRC(animationStr), attacker.getObjectID(), weapon.getObjectID(), target.getObjectID(), command.getCommandCRC());
ObjControllerMessage objController = new ObjControllerMessage(0x1B, combatAction);
attacker.notifyObserversInRange(objController, true, 125);
StartTask startTask = new StartTask(actionCounter, attacker.getObjectID(), command.getCommandCRC());
ObjControllerMessage objController2 = new ObjControllerMessage(0x0B, startTask);
attacker.getClient().getSession().write(objController2.serialize());
CommandEnqueueRemove commandRemove = new CommandEnqueueRemove(attacker.getObjectID(), actionCounter);
ObjControllerMessage objController3 = new ObjControllerMessage(0x0B, commandRemove);
attacker.getClient().getSession().write(objController3.serialize());
}
private float getArmorReduction(CreatureObject attacker, CreatureObject target, WeaponObject weapon, CombatCommand command, byte hitType) {
int elementalType = 1;
@@ -441,6 +477,26 @@ public class CombatService implements INetworkDispatch {
}
private boolean isInConeAngle(CreatureObject attacker, CreatureObject target, int coneLength, int coneWidth, float directionX, float directionZ) {
float radius = coneWidth / 2;
float angle = (float) (2 * Math.atan(coneLength / radius));
float targetX = target.getWorldPosition().x - attacker.getWorldPosition().x;
float targetZ = target.getWorldPosition().z - attacker.getWorldPosition().z;
float targetAngle = (float) (Math.atan2(targetZ, targetX) - Math.atan2(directionZ, directionX));
float degrees = (float) (targetAngle * 180 / Math.PI);
float coneAngle = angle / 2;
if(degrees > coneAngle || degrees < -coneAngle)
return false;
return true;
}
public enum HitType{;