public StatusEffectContainer(Character owner) { this.owner = owner; this.effects = new Dictionary <uint, StatusEffect>(); statusSubpackets = new List <SubPacket>(); statusTimerPropPacketUtil = new ActorPropertyPacketUtil("charawork/Status", owner); }
public override void PostUpdate(DateTime tick, List <SubPacket> packets = null) { if (updateFlags != ActorUpdateFlags.None) { packets = packets ?? new List <SubPacket>(); if ((updateFlags & ActorUpdateFlags.Appearance) != 0) { packets.Add(new SetActorAppearancePacket(modelId, appearanceIds).BuildPacket(actorId)); } if ((updateFlags & ActorUpdateFlags.State) != 0) { packets.Add(SetActorStatePacket.BuildPacket(actorId, currentMainState, 0x0)); packets.Add(CommandResultX00Packet.BuildPacket(actorId, 0x72000062, 0)); packets.Add(CommandResultX01Packet.BuildPacket(actorId, 0x7C000062, 21001, new CommandResult(actorId, 0, 1))); updateFlags &= ~ActorUpdateFlags.State; //DoBattleAction(21001, 0x7C000062, new BattleAction(this.actorId, 0, 1, 0, 0, 1)); //Attack Mode } if ((updateFlags & ActorUpdateFlags.SubState) != 0) { packets.Add(SetActorSubStatePacket.BuildPacket(actorId, currentSubState)); packets.Add(CommandResultX00Packet.BuildPacket(actorId, 0x72000062, 0)); packets.Add(CommandResultX01Packet.BuildPacket(actorId, 0x7C000062, 21001, new CommandResult(actorId, 0, 1))); updateFlags &= ~ActorUpdateFlags.SubState; //DoBattleAction(21001, 0x7C000062, new BattleAction(this.actorId, 0, 1, 0, 0, 1)); //Attack Mode } if ((updateFlags & ActorUpdateFlags.Status) != 0) { List <SubPacket> statusPackets = statusEffects.GetStatusPackets(); packets.AddRange(statusPackets); statusPackets.Clear(); updateFlags &= ~ActorUpdateFlags.Status; } if ((updateFlags & ActorUpdateFlags.StatusTime) != 0) { packets.AddRange(statusEffects.GetStatusTimerPackets()); statusEffects.ResetPropPacketUtil(); updateFlags &= ~ActorUpdateFlags.StatusTime; } if ((updateFlags & ActorUpdateFlags.HpTpMp) != 0) { var propPacketUtil = new ActorPropertyPacketUtil("charaWork/stateAtQuicklyForAll", this); propPacketUtil.AddProperty("charaWork.parameterSave.hp[0]"); propPacketUtil.AddProperty("charaWork.parameterSave.hpMax[0]"); propPacketUtil.AddProperty("charaWork.parameterSave.mp"); propPacketUtil.AddProperty("charaWork.parameterSave.mpMax"); propPacketUtil.AddProperty("charaWork.parameterTemp.tp"); packets.AddRange(propPacketUtil.Done()); } base.PostUpdate(tick, packets); } }
//Set given proc to true and send packet if this is a player // todo: hidden status effects for timing when the procs fall off public void SetProc(int procId, bool val = true) { charaWork.battleTemp.timingCommandFlag[procId] = val; uint effectId = (uint)StatusEffectId.EvadeProc + (uint)procId; //If a proc just occurred, add a hidden effect effect if (val) { StatusEffect procEffect = Server.GetWorldManager().GetStatusEffect(effectId); procEffect.SetDuration(5); procEffect.SetSilent(true); statusEffects.AddStatusEffect(procEffect, this, true, true); } //Otherwise we're reseting a proc, remove the status else { statusEffects.RemoveStatusEffect(statusEffects.GetStatusEffectById((uint)effectId)); } if (this is Player) { var propPacketUtil = new ActorPropertyPacketUtil("charaWork/timingCommand", this); propPacketUtil.AddProperty(String.Format("charaWork.battleTemp.timingCommandFlag[{0}]", procId)); ((Player)this).QueuePackets(propPacketUtil.Done()); } }
public void UpdateUiState(int index, sbyte value) { guildleveWork.uiState[index] = value; ActorPropertyPacketUtil propertyBuilder = new ActorPropertyPacketUtil("guildleveWork/infoVariable", this); propertyBuilder.AddProperty(String.Format("guildleveWork.uiState[{0}]", index)); SendPacketsToPlayers(propertyBuilder.Done()); }
public void SyncAllInfo() { ActorPropertyPacketUtil propertyBuilder = new ActorPropertyPacketUtil("guildleveWork/infoVariable", this); if (guildleveWork.aimNum[0] != 0) { propertyBuilder.AddProperty("guildleveWork.aimNum[0]"); } if (guildleveWork.aimNum[1] != 0) { propertyBuilder.AddProperty("guildleveWork.aimNum[1]"); } if (guildleveWork.aimNum[2] != 0) { propertyBuilder.AddProperty("guildleveWork.aimNum[2]"); } if (guildleveWork.aimNum[3] != 0) { propertyBuilder.AddProperty("guildleveWork.aimNum[3]"); } if (guildleveWork.aimNumNow[0] != 0) { propertyBuilder.AddProperty("guildleveWork.aimNumNow[0]"); } if (guildleveWork.aimNumNow[1] != 0) { propertyBuilder.AddProperty("guildleveWork.aimNumNow[1]"); } if (guildleveWork.aimNumNow[2] != 0) { propertyBuilder.AddProperty("guildleveWork.aimNumNow[2]"); } if (guildleveWork.aimNumNow[3] != 0) { propertyBuilder.AddProperty("guildleveWork.aimNumNow[3]"); } if (guildleveWork.uiState[0] != 0) { propertyBuilder.AddProperty("guildleveWork.uiState[0]"); } if (guildleveWork.uiState[1] != 0) { propertyBuilder.AddProperty("guildleveWork.uiState[1]"); } if (guildleveWork.uiState[2] != 0) { propertyBuilder.AddProperty("guildleveWork.uiState[2]"); } if (guildleveWork.uiState[3] != 0) { propertyBuilder.AddProperty("guildleveWork.uiState[3]"); } SendPacketsToPlayers(propertyBuilder.Done()); }
public void UpdateMarkers(int markerIndex, float x, float y, float z) { guildleveWork.markerX[markerIndex] = x; guildleveWork.markerY[markerIndex] = y; guildleveWork.markerZ[markerIndex] = z; ActorPropertyPacketUtil propertyBuilder = new ActorPropertyPacketUtil("guildleveWork/marker", this); propertyBuilder.AddProperty(String.Format("guildleveWork.markerX[{0}]", markerIndex)); propertyBuilder.AddProperty(String.Format("guildleveWork.markerY[{0}]", markerIndex)); propertyBuilder.AddProperty(String.Format("guildleveWork.markerZ[{0}]", markerIndex)); SendPacketsToPlayers(propertyBuilder.Done()); }
public void EndGuildleve(bool wasCompleted) { if (isEnded) { return; } isEnded = true; completionTime = Utils.UnixTimeStampUTC() - guildleveWork.startTime; if (wasCompleted) { foreach (Actor a in GetPlayerMembers()) { Player player = (Player)a; player.MarkGuildleve(guildleveId, true, true); player.PlayAnimation(0x02000002, true); player.ChangeMusic(81); player.SendGameMessage(Server.GetWorldManager().GetActor(), 50023, 0x20, (object)(int)guildleveId); player.SendDataPacket("attention", Server.GetWorldManager().GetActor(), "", 50023, (object)(int)guildleveId); } } foreach (Actor a in GetNpcMembers()) { Npc npc = (Npc)a; npc.Despawn(); RemoveMember(a); } guildleveWork.startTime = 0; guildleveWork.signal = -1; ActorPropertyPacketUtil propertyBuilder = new ActorPropertyPacketUtil("guildleveWork/signal", this); propertyBuilder.AddProperty("guildleveWork.signal"); propertyBuilder.NewTarget("guildleveWork/start"); propertyBuilder.AddProperty("guildleveWork.startTime"); SendPacketsToPlayers(propertyBuilder.Done()); if (wasCompleted) { Npc aetheryteNode = zone.SpawnActor(1200040, String.Format("{0}:warpExit", guildleveOwner.actorName), guildleveOwner.positionX, guildleveOwner.positionY, guildleveOwner.positionZ); AddMember(aetheryteNode); foreach (Actor a in GetPlayerMembers()) { Player player = (Player)a; player.SendGameMessage(Server.GetWorldManager().GetActor(), 50029, 0x20); player.SendGameMessage(Server.GetWorldManager().GetActor(), 50032, 0x20); } } }
//This logic isn't correct, order of GetStatusEffects() is not necessarily the same as the actual effects in game. Also sending every time at once isn't needed public List <SubPacket> GetActorStatusPackets() { var propPacketUtil = new ActorPropertyPacketUtil("charaWork/status", this); var i = 0; foreach (var effect in statusEffects.GetStatusEffects()) { if (!effect.GetHidden()) { propPacketUtil.AddProperty(String.Format("charaWork.statusShownTime[{0}]", i)); propPacketUtil.AddProperty(String.Format("charaWork.statusShownTime[{0}]", i)); i++; } } return(propPacketUtil.Done()); }
public override void PostUpdate(DateTime tick, List <SubPacket> packets = null) { // todo: should probably add another flag for battleTemp since all this uses reflection packets = new List <SubPacket>(); if ((updateFlags & ActorUpdateFlags.HpTpMp) != 0) { var propPacketUtil = new ActorPropertyPacketUtil("charaWork/stateAtQuicklyForAll", this); propPacketUtil.AddProperty("charaWork.parameterSave.state_mainSkill[0]"); propPacketUtil.AddProperty("charaWork.parameterSave.state_mainSkillLevel"); propPacketUtil.AddProperty("charaWork.battleTemp.castGauge_speed[0]"); propPacketUtil.AddProperty("charaWork.battleTemp.castGauge_speed[1]"); packets.AddRange(propPacketUtil.Done()); } base.PostUpdate(tick, packets); }
public void doClassChange(byte classId) { //load hotbars //Calculate stats //Calculate hp/mp //Get Potenciel ?????? //Set HP/MP/TP PARAMS //Set mainskill and level //Set Parameters //Set current EXP //Set Hotbar Commands 1 //Set Hotbar Commands 2 //Set Hotbar Commands 3 //Check if bonus point available... set //Set rested EXP charaWork.parameterSave.state_mainSkill[0] = classId; charaWork.parameterSave.state_mainSkillLevel = charaWork.battleSave.skillLevel[classId - 1]; playerWork.restBonusExpRate = 0.0f; ActorPropertyPacketUtil propertyBuilder = new ActorPropertyPacketUtil("charaWork/stateForAll", this, actorId); propertyBuilder.addProperty("charaWork.parameterSave.state_mainSkill[0]"); propertyBuilder.addProperty("charaWork.parameterSave.state_mainSkillLevel"); propertyBuilder.newTarget("playerWork/expBonus"); propertyBuilder.addProperty("playerWork.restBonusExpRate"); List <SubPacket> packets = propertyBuilder.done(); foreach (SubPacket packet in packets) { broadcastPacket(packet, true); } Database.savePlayerCurrentClass(this); }
public void SetCurrentContentGroup(ContentGroup group) { if (group != null) { charaWork.currentContentGroup = group.GetTypeId(); } else { charaWork.currentContentGroup = 0; } currentContentGroup = group; ActorPropertyPacketUtil propPacketUtil = new ActorPropertyPacketUtil("charaWork/currentContentGroup", this); propPacketUtil.AddProperty("charaWork.currentContentGroup"); zone.BroadcastPacketsAroundActor(this, propPacketUtil.Done()); }
//Reset procs. Only send packet if any procs were actually reset. //This assumes you can't use weaponskills between getting a proc and using the procced ability public void ResetProcs() { var propPacketUtil = new ActorPropertyPacketUtil("charaWork/timingCommand", this); bool shouldSend = false; for (int i = 0; i < 4; i++) { if (charaWork.battleTemp.timingCommandFlag[i]) { shouldSend = true; charaWork.battleTemp.timingCommandFlag[i] = false; propPacketUtil.AddProperty(String.Format("charaWork.battleTemp.timingCommandFlag[{0}]", i)); } } if (shouldSend && this is Player) { ((Player)this).QueuePackets(propPacketUtil.Done()); } }
//This might need more work //I think there migh be something that ties mobs to parties //and the client checks if any mobs are tied to the current party //and bases the color on that. Adding mob to party obviously doesn't work //Based on depictionjudge script: //HATE_TYPE_NONE is for passive //HATE_TYPE_ENGAGED is for aggroed mobs //HATE_TYPE_ENGAGED_PARTY is for claimed mobs, client uses occupancy group to determine if mob is claimed by player's party //for now i'm just going to assume that occupancygroup will be BattleNpc's currentparties when they're in combat, //so if party isn't null, they're claimed. public SubPacket GetHateTypePacket(Player player) { npcWork.hateType = NpcWork.HATE_TYPE_NONE; if (player != null) { if (aiContainer.IsEngaged()) { npcWork.hateType = NpcWork.HATE_TYPE_ENGAGED; if (this.currentParty != null) { npcWork.hateType = NpcWork.HATE_TYPE_ENGAGED_PARTY; } } } npcWork.hateType = 3; var propPacketUtil = new ActorPropertyPacketUtil("npcWork/hate", this); propPacketUtil.AddProperty("npcWork.hateType"); return(propPacketUtil.Done()[0]); }
public void StartGuildleve() { foreach (Actor p in GetPlayerMembers()) { Player player = (Player)p; //Set music if (guildleveData.location == 1) { player.ChangeMusic(22); } else if (guildleveData.location == 2) { player.ChangeMusic(14); } else if (guildleveData.location == 3) { player.ChangeMusic(26); } else if (guildleveData.location == 4) { player.ChangeMusic(16); } //Show Start Messages player.SendGameMessage(Server.GetWorldManager().GetActor(), 50022, 0x20, guildleveId, selectedDifficulty); player.SendDataPacket("attention", Server.GetWorldManager().GetActor(), "", 50022, guildleveId, selectedDifficulty); player.SendGameMessage(Server.GetWorldManager().GetActor(), 50026, 0x20, (object)(int)guildleveData.timeLimit); } guildleveWork.startTime = Utils.UnixTimeStampUTC(); ActorPropertyPacketUtil propertyBuilder = new ActorPropertyPacketUtil("guildleveWork/start", this); propertyBuilder.AddProperty("guildleveWork.startTime"); SendPacketsToPlayers(propertyBuilder.Done()); }
public override List <SubPacket> GetInitPackets() { ActorPropertyPacketUtil propPacketUtil = new ActorPropertyPacketUtil("/_init", this); //Potential propPacketUtil.AddProperty("charaWork.battleSave.potencial"); //Properties for (int i = 0; i < charaWork.property.Length; i++) { if (charaWork.property[i] != 0) { propPacketUtil.AddProperty(String.Format("charaWork.property[{0}]", i)); } } //Parameters propPacketUtil.AddProperty("charaWork.parameterSave.hp[0]"); propPacketUtil.AddProperty("charaWork.parameterSave.hpMax[0]"); propPacketUtil.AddProperty("charaWork.parameterSave.mp"); propPacketUtil.AddProperty("charaWork.parameterSave.mpMax"); propPacketUtil.AddProperty("charaWork.parameterTemp.tp"); if (charaWork.parameterSave.state_mainSkill[0] != 0) { propPacketUtil.AddProperty("charaWork.parameterSave.state_mainSkill[0]"); } if (charaWork.parameterSave.state_mainSkill[1] != 0) { propPacketUtil.AddProperty("charaWork.parameterSave.state_mainSkill[1]"); } if (charaWork.parameterSave.state_mainSkill[2] != 0) { propPacketUtil.AddProperty("charaWork.parameterSave.state_mainSkill[2]"); } if (charaWork.parameterSave.state_mainSkill[3] != 0) { propPacketUtil.AddProperty("charaWork.parameterSave.state_mainSkill[3]"); } propPacketUtil.AddProperty("charaWork.parameterSave.state_mainSkillLevel"); //Status Times for (int i = 0; i < charaWork.statusShownTime.Length; i++) { if (charaWork.statusShownTime[i] != 0) { propPacketUtil.AddProperty(String.Format("charaWork.statusShownTime[{0}]", i)); } } //General Parameters for (int i = 3; i < charaWork.battleTemp.generalParameter.Length; i++) { if (charaWork.battleTemp.generalParameter[i] != 0) { propPacketUtil.AddProperty(String.Format("charaWork.battleTemp.generalParameter[{0}]", i)); } } propPacketUtil.AddProperty("npcWork.hateType"); if (npcWork.pushCommand != 0) { propPacketUtil.AddProperty("npcWork.pushCommand"); if (npcWork.pushCommandSub != 0) { propPacketUtil.AddProperty("npcWork.pushCommandSub"); } propPacketUtil.AddProperty("npcWork.pushCommandPriority"); } return(propPacketUtil.Done()); }
public override BasePacket getInitPackets(uint playerActorId) { ActorPropertyPacketUtil propPacketUtil = new ActorPropertyPacketUtil("/_init", this, playerActorId); propPacketUtil.addProperty("charaWork.eventSave.bazaarTax"); propPacketUtil.addProperty("charaWork.battleSave.potencial"); //Properties for (int i = 0; i < charaWork.property.Length; i++) { if (charaWork.property[i] != 0) { propPacketUtil.addProperty(String.Format("charaWork.property[{0}]", i)); } } //Parameters propPacketUtil.addProperty("charaWork.parameterSave.hp[0]"); propPacketUtil.addProperty("charaWork.parameterSave.hpMax[0]"); propPacketUtil.addProperty("charaWork.parameterSave.mp"); propPacketUtil.addProperty("charaWork.parameterSave.mpMax"); propPacketUtil.addProperty("charaWork.parameterTemp.tp"); propPacketUtil.addProperty("charaWork.parameterSave.state_mainSkill[0]"); propPacketUtil.addProperty("charaWork.parameterSave.state_mainSkillLevel"); //Status Times for (int i = 0; i < charaWork.statusShownTime.Length; i++) { if (charaWork.statusShownTime[i] != 0xFFFFFFFF) { propPacketUtil.addProperty(String.Format("charaWork.statusShownTime[{0}]", i)); } } //General Parameters for (int i = 3; i < charaWork.battleTemp.generalParameter.Length; i++) { if (charaWork.battleTemp.generalParameter[i] != 0) { propPacketUtil.addProperty(String.Format("charaWork.battleTemp.generalParameter[{0}]", i)); } } propPacketUtil.addProperty("charaWork.battleTemp.castGauge_speed[0]"); propPacketUtil.addProperty("charaWork.battleTemp.castGauge_speed[1]"); //Battle Save Skillpoint //Commands propPacketUtil.addProperty("charaWork.commandBorder"); for (int i = 0; i < charaWork.command.Length; i++) { if (charaWork.command[i] != 0) { propPacketUtil.addProperty(String.Format("charaWork.command[{0}]", i)); } } for (int i = 0; i < charaWork.commandCategory.Length; i++) { charaWork.commandCategory[i] = 1; if (charaWork.commandCategory[i] != 0) { propPacketUtil.addProperty(String.Format("charaWork.commandCategory[{0}]", i)); } } for (int i = 0; i < charaWork.commandAcquired.Length; i++) { if (charaWork.commandAcquired[i] != false) { propPacketUtil.addProperty(String.Format("charaWork.commandAcquired[{0}]", i)); } } for (int i = 0; i < charaWork.additionalCommandAcquired.Length; i++) { if (charaWork.additionalCommandAcquired[i] != false) { propPacketUtil.addProperty(String.Format("charaWork.additionalCommandAcquired[{0}]", i)); } } for (int i = 0; i < charaWork.parameterSave.commandSlot_compatibility.Length; i++) { charaWork.parameterSave.commandSlot_compatibility[i] = true; if (charaWork.parameterSave.commandSlot_compatibility[i]) { propPacketUtil.addProperty(String.Format("charaWork.parameterSave.commandSlot_compatibility[{0}]", i)); } } /* * for (int i = 0; i < charaWork.parameterSave.commandSlot_recastTime.Length; i++) * { * if (charaWork.parameterSave.commandSlot_recastTime[i] != 0) * propPacketUtil.addProperty(String.Format("charaWork.parameterSave.commandSlot_recastTime[{0}]", i)); * } */ //System propPacketUtil.addProperty("charaWork.parameterTemp.forceControl_float_forClientSelf[0]"); propPacketUtil.addProperty("charaWork.parameterTemp.forceControl_float_forClientSelf[1]"); propPacketUtil.addProperty("charaWork.parameterTemp.forceControl_int16_forClientSelf[0]"); propPacketUtil.addProperty("charaWork.parameterTemp.forceControl_int16_forClientSelf[1]"); charaWork.parameterTemp.otherClassAbilityCount[0] = 4; charaWork.parameterTemp.otherClassAbilityCount[1] = 5; charaWork.parameterTemp.giftCount[1] = 5; propPacketUtil.addProperty("charaWork.parameterTemp.otherClassAbilityCount[0]"); propPacketUtil.addProperty("charaWork.parameterTemp.otherClassAbilityCount[1]"); propPacketUtil.addProperty("charaWork.parameterTemp.giftCount[1]"); propPacketUtil.addProperty("charaWork.depictionJudge"); //Scenario for (int i = 0; i < playerWork.questScenario.Length; i++) { if (playerWork.questScenario[i] != 0) { propPacketUtil.addProperty(String.Format("playerWork.questScenario[{0}]", i)); } } //Guildleve - Local for (int i = 0; i < playerWork.questGuildleve.Length; i++) { if (playerWork.questGuildleve[i] != 0) { propPacketUtil.addProperty(String.Format("playerWork.questGuildleve[{0}]", i)); } } //Guildleve - Regional for (int i = 0; i < work.guildleveId.Length; i++) { if (work.guildleveId[i] != 0) { propPacketUtil.addProperty(String.Format("work.guildleveId[{0}]", i)); } if (work.guildleveDone[i] != false) { propPacketUtil.addProperty(String.Format("work.guildleveDone[{0}]", i)); } if (work.guildleveChecked[i] != false) { propPacketUtil.addProperty(String.Format("work.guildleveChecked[{0}]", i)); } } //NPC Linkshell for (int i = 0; i < playerWork.npcLinkshellChatCalling.Length; i++) { if (playerWork.npcLinkshellChatCalling[i] != false) { propPacketUtil.addProperty(String.Format("playerWork.npcLinkshellChatCalling[{0}]", i)); } if (playerWork.npcLinkshellChatExtra[i] != false) { propPacketUtil.addProperty(String.Format("playerWork.npcLinkshellChatExtra[{0}]", i)); } } propPacketUtil.addProperty("playerWork.restBonusExpRate"); //Profile propPacketUtil.addProperty("playerWork.tribe"); propPacketUtil.addProperty("playerWork.guardian"); propPacketUtil.addProperty("playerWork.birthdayMonth"); propPacketUtil.addProperty("playerWork.birthdayDay"); propPacketUtil.addProperty("playerWork.initialTown"); return(BasePacket.createPacket(propPacketUtil.done(), true, false)); }
public void ResetPropPacketUtil() { statusTimerPropPacketUtil = new ActorPropertyPacketUtil("charaWork/status", owner); }
public override BasePacket getInitPackets(uint playerActorId) { ActorPropertyPacketUtil propPacketUtil = new ActorPropertyPacketUtil("/_init", this, playerActorId); //Properties for (int i = 0; i < charaWork.property.Length; i++) { if (charaWork.property[i] != 0) { propPacketUtil.addProperty(String.Format("charaWork.property[{0}]", i)); } } //Parameters propPacketUtil.addProperty("charaWork.parameterSave.hp[0]"); propPacketUtil.addProperty("charaWork.parameterSave.hpMax[0]"); propPacketUtil.addProperty("charaWork.parameterSave.mp"); propPacketUtil.addProperty("charaWork.parameterSave.mpMax"); propPacketUtil.addProperty("charaWork.parameterTemp.tp"); if (charaWork.parameterSave.state_mainSkill[0] != 0) { propPacketUtil.addProperty("charaWork.parameterSave.state_mainSkill[0]"); } if (charaWork.parameterSave.state_mainSkill[1] != 0) { propPacketUtil.addProperty("charaWork.parameterSave.state_mainSkill[1]"); } if (charaWork.parameterSave.state_mainSkill[2] != 0) { propPacketUtil.addProperty("charaWork.parameterSave.state_mainSkill[2]"); } if (charaWork.parameterSave.state_mainSkill[3] != 0) { propPacketUtil.addProperty("charaWork.parameterSave.state_mainSkill[3]"); } propPacketUtil.addProperty("charaWork.parameterSave.state_mainSkillLevel"); //Status Times for (int i = 0; i < charaWork.statusShownTime.Length; i++) { if (charaWork.statusShownTime[i] != 0xFFFFFFFF) { propPacketUtil.addProperty(String.Format("charaWork.statusShownTime[{0}]", i)); } } //General Parameters for (int i = 3; i < charaWork.battleTemp.generalParameter.Length; i++) { if (charaWork.battleTemp.generalParameter[i] != 0) { propPacketUtil.addProperty(String.Format("charaWork.battleTemp.generalParameter[{0}]", i)); } } propPacketUtil.addProperty("npcWork.hateType"); return(BasePacket.createPacket(propPacketUtil.done(), true, false)); }