Buff Windows now close, changed formula used for stats on inspiration buffs, minor changes overall to entertainer

This commit is contained in:
Waverunner
2014-03-16 13:01:30 -04:00
parent fae3847b64
commit 97f4db58d1
12 changed files with 565 additions and 262 deletions
+125 -45
View File
@@ -19,11 +19,13 @@ import org.apache.mina.core.session.IoSession;
import protocol.swg.ObjControllerMessage;
import protocol.swg.OkMessage;
import protocol.swg.objectControllerObjects.BuffBuilderChangeMessage;
import protocol.swg.objectControllerObjects.BuffBuilderEndMessage;
import protocol.swg.objectControllerObjects.BuffBuilderStartMessage;
import resources.common.BuffBuilder;
import resources.common.Console;
import resources.common.ObjControllerOpcodes;
import resources.common.Performance;
import resources.common.StringUtilities;
import resources.objects.Buff;
import resources.objects.BuffItem;
import resources.objects.creature.CreatureObject;
@@ -55,52 +57,103 @@ public class EntertainmentService implements INetworkDispatch {
@Override
public void insertOpcodes(Map<Integer, INetworkRemoteEvent> swgOpcodes, Map<Integer, INetworkRemoteEvent> objControllerOpcodes) {
objControllerOpcodes.put(ObjControllerOpcodes.BUFF_BUILDER_END, new INetworkRemoteEvent() {
@Override
public void handlePacket(IoSession session, IoBuffer data) throws Exception {
data.order(ByteOrder.LITTLE_ENDIAN);
StringUtilities.printBytes(data.array());
Client client = core.getClient(session);
if(client == null)
return;
SWGObject sender = client.getParent();
if(sender == null)
return;
BuffBuilderEndMessage sentPacket = new BuffBuilderEndMessage();
sentPacket.deserialize(data);
SWGObject buffer = core.objectService.getObject(sentPacket.getBufferId());
SWGObject buffRecipient = core.objectService.getObject(sentPacket.getBuffRecipientId());
if(buffer == null || buffRecipient == null)
return;
// No need to send end packet when buffing yourself.
if (buffRecipient != buffer) {
if(buffRecipient.getClient() == null || buffRecipient.getClient().getSession() == null)
return;
if (sender.getObjectId() == buffer.getObjectId()) {
// send close packet to recipient
BuffBuilderEndMessage end = new BuffBuilderEndMessage(sentPacket);
end.setObjectId(buffRecipient.getObjectId());
end.setBufferId(buffer.getObjectId());
end.setBuffRecipientId(buffRecipient.getObjectId());
ObjControllerMessage closeMessage = new ObjControllerMessage(0x0B, end);
buffRecipient.getClient().getSession().write(closeMessage.serialize());
}
if (sender.getObjectId() == buffRecipient.getObjectId()) {
// send close packet to buffer
BuffBuilderEndMessage end = new BuffBuilderEndMessage(sentPacket);
end.setObjectId(buffer.getObjectId());
end.setBufferId(buffer.getObjectId());
end.setBuffRecipientId(buffRecipient.getObjectId());
ObjControllerMessage closeMessage = new ObjControllerMessage(0x0B, end);
buffer.getClient().getSession().write(closeMessage.serialize());
CreatureObject cre = (CreatureObject) buffer;
cre.sendSystemMessage("The buff recipient cancelled the buff builder session.", (byte) 0);
}
}
}
});
objControllerOpcodes.put(ObjControllerOpcodes.BUFF_BUILDER_CHANGE, new INetworkRemoteEvent() {
@Override
public void handlePacket(IoSession session, IoBuffer data) throws Exception {
Console.println("BUFF_BUILDER_CHANGE RECIEVED");
data.order(ByteOrder.LITTLE_ENDIAN);
Client client = core.getClient(session);
if(client == null)
return;
SWGObject sender = client.getParent();
if(sender == null)
return;
BuffBuilderChangeMessage sentPacket = new BuffBuilderChangeMessage();
sentPacket.deserialize(data);
Vector<BuffItem> statBuffs = sentPacket.getStatBuffs();
/*for (BuffItem item : statBuffs) {
System.out.println("Buff Name: " + item.getSkillName());
System.out.println("Ents bonus to item: " + item.getAmount());
}*/
SWGObject buffer = core.objectService.getObject(sentPacket.getBufferId());
SWGObject buffRecipient = core.objectService.getObject(sentPacket.getBuffRecipientId());
Console.println("Packet Sender ID: " + sender.getObjectId());
if (buffer != buffRecipient) {
BuffBuilderChangeMessage changeMessage = new BuffBuilderChangeMessage();
changeMessage.setBuffCost(sentPacket.getBuffCost());
changeMessage.setTime(sentPacket.getTime());
changeMessage.setBufferId(buffer.getObjectId());
changeMessage.setBuffRecipientId(buffRecipient.getObjectId());
if (!statBuffs.isEmpty())
changeMessage.setStatBuffs(statBuffs);
if (sentPacket.getAccepted() == true && sentPacket.getBuffRecipientAccepted() == 1) {
System.out.println("both accepted!");
if (sentPacket.getBuffCost() > 0) {
CreatureObject recipientCreature = (CreatureObject) buffRecipient;
if (recipientCreature.getCashCredits() >= sentPacket.getBuffCost()) {
@@ -109,36 +162,47 @@ public class EntertainmentService implements INetworkDispatch {
return;
}
}
OkMessage closeMsg = new OkMessage();
buffer.getClient().getSession().write(closeMsg.serialize());
giveInspirationBuff(buffRecipient, statBuffs);
BuffBuilderEndMessage endBuilder = new BuffBuilderEndMessage(changeMessage);
endBuilder.setObjectId(buffer.getObjectId());
BuffBuilderEndMessage endRecipient = new BuffBuilderEndMessage(changeMessage);
endRecipient.setObjectId(buffRecipient.getObjectId());
ObjControllerMessage closeBuilder = new ObjControllerMessage(0x0B, endBuilder);
session.write(closeBuilder.serialize());
ObjControllerMessage closeRecipient = new ObjControllerMessage(0x0B, endRecipient);
session.write(closeRecipient.serialize());
} else if (sentPacket.getAccepted() == true && sentPacket.getBuffRecipientAccepted() == 0) {
changeMessage.setAccepted(true);
changeMessage.setObjectId(buffRecipient.getObjectId());
ObjControllerMessage objMsg = new ObjControllerMessage(0x0B, changeMessage);
buffRecipient.getClient().getSession().write(objMsg.serialize());
} else {
changeMessage.setAccepted(false);
changeMessage.setObjectId(sentPacket.getBuffRecipientId());
ObjControllerMessage objMsg = new ObjControllerMessage(0x0B, changeMessage);
buffRecipient.getClient().getSession().write(objMsg.serialize());
}
} else {
if (sentPacket.getAccepted() == true) {
OkMessage closeMsg = new OkMessage();
buffer.getClient().getSession().write(closeMsg.serialize());
giveInspirationBuff(buffRecipient, statBuffs);
BuffBuilderEndMessage endBuilder = new BuffBuilderEndMessage(sentPacket);
endBuilder.setObjectId(buffer.getObjectId());
ObjControllerMessage objMsg = new ObjControllerMessage(0x0B, endBuilder);
buffRecipient.getClient().getSession().write(objMsg.serialize());
}
}
}
});
}
@@ -202,17 +266,21 @@ public class EntertainmentService implements INetworkDispatch {
for (int r = 0; r < buffBuilder.getRowCount(); r++) {
String skillName = ((String) buffBuilder.getObject(r, 0));
String category = ((String) buffBuilder.getObject(r, 1));
String statAffects = ((String) buffBuilder.getObject(r, 2));
int maxTimes = ((int) buffBuilder.getObject(r, 3));
int cost = ((int) buffBuilder.getObject(r, 4));
int affectAmount = ((int) buffBuilder.getObject(r, 5));
String requiredExperience = ((String) buffBuilder.getObject(r, 6));
String requiredExpertise = ((String) buffBuilder.getObject(r, 6));
BuffBuilder item = new BuffBuilder();
item.setStatName(skillName);
item.setCategory(category);
item.setStatAffects(statAffects);
item.setMaxTimesApplied(maxTimes);
item.setCost(cost);
item.setAffectAmount(affectAmount);
item.setRequiredExperience(requiredExperience);
item.setRequiredExpertise(requiredExpertise);
buffBuilderSkills.add(item);
}
@@ -235,22 +303,34 @@ public class EntertainmentService implements INetworkDispatch {
public void giveInspirationBuff(SWGObject reciever, Vector<BuffItem> buffVector) {
CreatureObject buffCreature = (CreatureObject) reciever;
Vector<BuffBuilder> availableSkills = buffBuilderSkills;
Vector<BuffBuilder> buffsToAdd = new Vector<BuffBuilder>();
Vector<BuffBuilder> availableStats = buffBuilderSkills;
Vector<BuffItem> stats = new Vector<BuffItem>();
for (BuffItem item : buffVector) {
for (BuffBuilder builder : availableSkills) {
if (builder.getStatName().equals(item.getSkillName())) {
builder.setEntBonus(item.getBonusAmount());
buffsToAdd.add(builder);
Console.println("Added buff item: " + builder.getStatAffects() + " with total affect of " + builder.getTotalAffected() + " and ent bonus of " + builder.getEntBonus());
continue;
for(BuffBuilder builder : availableStats) {
if(builder.getStatName().equalsIgnoreCase(item.getSkillName())) {
if(builder.getMaxTimesApplied() < item.getInvested())
return;
// Ent. Expertise Percent + (invested points * affect amount) = stat
int bonusPoints = (int) (builder.getAffectAmount() *((float) item.getEntertainerBonus()/100f));
int affectTotal = bonusPoints + (item.getInvested() * builder.getAffectAmount());
BuffItem stat = new BuffItem(builder.getStatAffects(), item.getInvested(), item.getEntertainerBonus());
stat.setAffectAmount(affectTotal);
/*System.out.println("Invested Points: " + item.getInvested());
System.out.println("Entertainer Bonus: " + item.getEntertainerBonus());
System.out.println("Affect Total: " + affectTotal);*/
stats.add(stat);
break;
}
}
}
reciever.setAttachment("buffWorkshop", buffsToAdd);
reciever.setAttachment("buffWorkshop", buffVector);
core.buffService.addBuffToCreature(buffCreature, "buildabuff_inspiration");