Added expertise, added AoE/Cone combat, added some commando expertise boxes as an example for expertise scripts

This commit is contained in:
Light2
2013-08-28 17:56:35 +02:00
parent 6e9031d4d2
commit cfa5ea5a43
25 changed files with 1030 additions and 16 deletions
@@ -793,9 +793,80 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder {
return buffer;
}
public IoBuffer buildAddSkillDelta(String name) {
CreatureObject creature = (CreatureObject) object;
IoBuffer buffer = bufferPool.allocate(11 + name.length(), false).order(ByteOrder.LITTLE_ENDIAN);
buffer.putInt(1);
buffer.putInt(creature.getSkillsUpdateCounter());
buffer.put((byte) 1);
buffer.put(getAsciiString(name));
int size = buffer.position();
buffer.flip();
buffer = createDelta("CREO", (byte) 1, (short) 1, (short) 3, buffer, size + 4);
return buffer;
}
public IoBuffer buildRemoveSkillDelta(String name) {
CreatureObject creature = (CreatureObject) object;
IoBuffer buffer = bufferPool.allocate(11 + name.length(), false).order(ByteOrder.LITTLE_ENDIAN);
buffer.putInt(1);
buffer.putInt(creature.getSkillsUpdateCounter());
buffer.put((byte) 0);
buffer.put(getAsciiString(name));
int size = buffer.position();
buffer.flip();
buffer = createDelta("CREO", (byte) 1, (short) 1, (short) 3, buffer, size + 4);
return buffer;
}
public IoBuffer buildAddAbilityDelta(String name) {
CreatureObject creature = (CreatureObject) object;
IoBuffer buffer = bufferPool.allocate(15 + name.length(), false).order(ByteOrder.LITTLE_ENDIAN);
buffer.putInt(1);
buffer.putInt(creature.getAbilitiesUpdateCounter());
buffer.put((byte) 0);
buffer.put(getAsciiString(name));
buffer.putInt(1);
int size = buffer.position();
buffer.flip();
buffer = createDelta("CREO", (byte) 4, (short) 1, (short) 0x0E, buffer, size + 4);
return buffer;
}
public IoBuffer buildRemoveAbilityDelta(String name) {
CreatureObject creature = (CreatureObject) object;
IoBuffer buffer = bufferPool.allocate(15 + name.length(), false).order(ByteOrder.LITTLE_ENDIAN);
buffer.putInt(1);
buffer.putInt(creature.getAbilitiesUpdateCounter());
buffer.put((byte) 1);
buffer.put(getAsciiString(name));
buffer.putInt(1);
int size = buffer.position();
buffer.flip();
buffer = createDelta("CREO", (byte) 4, (short) 1, (short) 0x0E, buffer, size + 4);
return buffer;
}
@Override
public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) {
@@ -205,6 +205,34 @@ public class CreatureObject extends TangibleObject implements IPersistent {
this.skillsUpdateCounter = skillsUpdateCounter;
}
}
public void addSkill(String skill) {
if(skills.contains(skill))
return;
skills.add(skill);
if(getClient() != null) {
setSkillsUpdateCounter((short) (getSkillsUpdateCounter() + 1));
getClient().getSession().write(messageBuilder.buildAddSkillDelta(skill));
}
}
public void removeSkill(String skill) {
if(!skills.contains(skill))
return;
skills.remove(skill);
if(getClient() != null) {
setSkillsUpdateCounter((short) (getSkillsUpdateCounter() + 1));
getClient().getSession().write(messageBuilder.buildRemoveSkillDelta(skill));
}
}
@Override
public void setOptionsBitmask(int optionBitmask) {
@@ -391,8 +419,10 @@ public class CreatureObject extends TangibleObject implements IPersistent {
if(mod.getBase() <= 0) {
removeSkillMod(mod);
} else {
setSkillModsUpdateCounter((short) (getSkillModsUpdateCounter() + 1));
getClient().getSession().write(messageBuilder.buildAddSkillModDelta(name, mod.getBase()));
if(getClient() != null) {
setSkillModsUpdateCounter((short) (getSkillModsUpdateCounter() + 1));
getClient().getSession().write(messageBuilder.buildAddSkillModDelta(name, mod.getBase()));
}
}
}
@@ -554,9 +584,35 @@ public class CreatureObject extends TangibleObject implements IPersistent {
}
}
public void addAbility(String abilityName) {
if(abilities.contains(abilityName))
return;
abilities.add(abilityName);
if(getClient() != null) {
setAbilitiesUpdateCounter((short) (getAbilitiesUpdateCounter() + 1));
getClient().getSession().write(messageBuilder.buildAddAbilityDelta(abilityName));
}
}
public void removeAbility(String abilityName) {
if(!abilities.contains(abilityName))
return;
abilities.remove(abilityName);
if(getClient() != null) {
setAbilitiesUpdateCounter((short) (getAbilitiesUpdateCounter() + 1));
getClient().getSession().write(messageBuilder.buildRemoveAbilityDelta(abilityName));
}
}
public SWGList<MissionCriticalObject> getMissionCriticalObjects() {
return missionCriticalObjects;