public void MaievSendTransfer(ref WS_PlayerData.CharacterObject objCharacter) { if (!objCharacter.WardenData.Ready) { throw new ApplicationException("Maiev.mod not ready!"); } FileStream file = new($"warden\\{WorldServiceLocator._WS_Warden.Maiev.ModuleName}.bin", FileMode.Open, FileAccess.Read); checked { int size; for (size = (int)file.Length; size > 500; size -= 500) { Packets.PacketClass r = new(Opcodes.SMSG_WARDEN_DATA); r.AddInt8(1); r.AddInt16(500); int i = 1; do { r.AddInt8((byte)file.ReadByte()); i++; }while (i <= 500); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] SMSG_WARDEN_DATA [data]", objCharacter.client.IP, objCharacter.client.Port); WorldServiceLocator._WS_Warden.SendWardenPacket(ref objCharacter, ref r); } if (size > 0) { Packets.PacketClass r2 = new(Opcodes.SMSG_WARDEN_DATA); r2.AddInt8(1); r2.AddUInt16((ushort)size); int num = size; for (int j = 1; j <= num; j++) { r2.AddInt8((byte)file.ReadByte()); } WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] SMSG_WARDEN_DATA [done]", objCharacter.client.IP, objCharacter.client.Port); WorldServiceLocator._WS_Warden.SendWardenPacket(ref objCharacter, ref r2); } } }
public void UpdateItemCount(ref WS_PlayerData.CharacterObject objCharacter) { byte i = 0; do { checked { if (ObjectivesItem[i] != 0) { ProgressItem[i] = (byte)objCharacter.ItemCOUNT(ObjectivesItem[i]); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "ITEM COUNT UPDATED TO: {0}", ProgressItem[i]); } i = (byte)unchecked ((uint)(i + 1)); } }while (i <= 3u); if ((ObjectiveFlags & 2) == 0) { Explored = true; } IsCompleted(); }
public void ClientLogin(uint id, ulong guid) { WorldServiceLocator._WorldServer.Log.WriteLine(LogType.NETWORK, "[{0:000000}] Client login [0x{1:X}]", id, guid); try { ClientClass client = WorldServiceLocator._WorldServer.CLIENTs[id]; WS_PlayerData.CharacterObject Character = new WS_PlayerData.CharacterObject(ref client, guid); WorldServiceLocator._WorldServer.CHARACTERs_Lock.AcquireWriterLock(WorldServiceLocator._Global_Constants.DEFAULT_LOCK_TIMEOUT); WorldServiceLocator._WorldServer.CHARACTERs[guid] = Character; WorldServiceLocator._WorldServer.CHARACTERs_Lock.ReleaseWriterLock(); WorldServiceLocator._Functions.SendCorpseReclaimDelay(ref client, ref Character); WorldServiceLocator._WS_PlayerHelper.InitializeTalentSpells(Character); Character.Login(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.USER, "[{0}:{1}] Player login complete [0x{2:X}]", client.IP, client.Port, guid); } catch (Exception ex) { ProjectData.SetProjectError(ex); Exception e = ex; WorldServiceLocator._WorldServer.Log.WriteLine(LogType.FAILED, "Error on login: {0}", e.ToString()); ProjectData.ClearProjectError(); } }
public void Initialize(ref WS_PlayerData.CharacterObject objCharacter) { if (ObjectivesDeliver > 0) { ItemObject tmpItem = new(ObjectivesDeliver, objCharacter.GUID); if (!objCharacter.ItemADD(ref tmpItem)) { tmpItem.Delete(); Packets.PacketClass response = new(Opcodes.SMSG_QUESTGIVER_QUEST_FAILED); response.AddInt32(ID); response.AddInt32(4); objCharacter.client.Send(ref response); response.Dispose(); return; } objCharacter.LogLootItem(tmpItem, 1, Recieved: true, Created: false); } byte i = 0; do { checked { if (ObjectivesItem[i] != 0) { ProgressItem[i] = (byte)objCharacter.ItemCOUNT(ObjectivesItem[i]); } i = (byte)unchecked ((uint)(i + 1)); } }while (i <= 3u); if (((uint)ObjectiveFlags & 2u) != 0) { Explored = false; } IsCompleted(); }
public override void OnEnterCombat() { base.OnEnterCombat(); foreach (var Unit in aiHateTable) { if (Unit.Key is not WS_PlayerData.CharacterObject) { continue; } WS_PlayerData.CharacterObject characterObject = (WS_PlayerData.CharacterObject)Unit.Key; if (characterObject.IsInGroup) { var array = characterObject.Group.LocalMembers.ToArray(); foreach (var member in array) { if (WorldServiceLocator._WorldServer.CHARACTERs.ContainsKey(member) && WorldServiceLocator._WorldServer.CHARACTERs[member].MapID == characterObject.MapID && WorldServiceLocator._WorldServer.CHARACTERs[member].instance == characterObject.instance) { aiHateTable.Add(WorldServiceLocator._WorldServer.CHARACTERs[member], 0); } } break; } } }
public void InitializeTalentSpells(WS_PlayerData.CharacterObject objCharacter) { WS_Spells.SpellTargets t = new WS_Spells.SpellTargets(); WS_Base.BaseUnit objCharacter2 = objCharacter; t.SetTarget_SELF(ref objCharacter2); objCharacter = (WS_PlayerData.CharacterObject)objCharacter2; foreach (KeyValuePair <int, WS_Spells.CharacterSpell> Spell in objCharacter.Spells) { if (WorldServiceLocator._WS_Spells.SPELLs.ContainsKey(Spell.Key) && WorldServiceLocator._WS_Spells.SPELLs[Spell.Key].IsPassive) { if (!objCharacter.HavePassiveAura(Spell.Key) && WorldServiceLocator._WS_Spells.SPELLs[Spell.Key].CanCast(ref objCharacter, t, FirstCheck: false) == SpellFailedReason.SPELL_NO_ERROR) { WS_Spells.SpellInfo spellInfo = WorldServiceLocator._WS_Spells.SPELLs[Spell.Key]; WS_Base.BaseObject caster = objCharacter; spellInfo.Apply(ref caster, t); objCharacter = (WS_PlayerData.CharacterObject)caster; } else if (objCharacter.HavePassiveAura(Spell.Key) && WorldServiceLocator._WS_Spells.SPELLs[Spell.Key].CanCast(ref objCharacter, t, FirstCheck: false) != SpellFailedReason.SPELL_NO_ERROR) { objCharacter.RemoveAuraBySpell(Spell.Key); } } } }
public bool CheckAmmoCompatibility(ref WS_PlayerData.CharacterObject objCharacter, int AmmoID) { if (!WorldServiceLocator._WorldServer.ITEMDatabase.ContainsKey(AmmoID)) { return(false); } if (!objCharacter.Items.ContainsKey(17) || objCharacter.Items[17].IsBroken()) { return(false); } if (objCharacter.Items[17].ItemInfo.ObjectClass != ITEM_CLASS.ITEM_CLASS_WEAPON) { return(false); } switch (objCharacter.Items[17].ItemInfo.SubClass) { case ITEM_SUBCLASS.ITEM_SUBCLASS_LIQUID: case ITEM_SUBCLASS.ITEM_SUBCLASS_CROSSBOW: if (WorldServiceLocator._WorldServer.ITEMDatabase[AmmoID].SubClass != ITEM_SUBCLASS.ITEM_SUBCLASS_LIQUID) { return(false); } break; case ITEM_SUBCLASS.ITEM_SUBCLASS_POTION: if (WorldServiceLocator._WorldServer.ITEMDatabase[AmmoID].SubClass != ITEM_SUBCLASS.ITEM_SUBCLASS_POTION) { return(false); } break; default: return(false); } return(true); }
public void InitializeReputations(ref WS_PlayerData.CharacterObject objCharacter) { byte i = 0; do { objCharacter.Reputation[i] = new WS_PlayerHelper.TReputation { Value = 0, Flags = 0 }; checked { foreach (KeyValuePair <int, WS_DBCDatabase.TFaction> tmpFactionInfo in WorldServiceLocator._WS_DBCDatabase.FactionInfo) { if (tmpFactionInfo.Value.VisibleID != i) { continue; } byte j = 0; do { if (WorldServiceLocator._Functions.HaveFlag((uint)tmpFactionInfo.Value.flags[j], (byte)((int)objCharacter.Race - 1))) { objCharacter.Reputation[i].Flags = tmpFactionInfo.Value.rep_flags[j]; objCharacter.Reputation[i].Value = tmpFactionInfo.Value.rep_stats[j]; break; } j = (byte)unchecked ((uint)(j + 1)); }while (j <= 3u); break; } i = (byte)unchecked ((uint)(i + 1)); } }while (i <= 63u); }
public bool CanSeeQuest(ref WS_PlayerData.CharacterObject objCharacter) { bool retValue = true; checked { if (objCharacter.Level + 6 < Level_Start) { retValue = false; } } if (RequiredClass > 0 && RequiredClass != (int)objCharacter.Classe) { retValue = false; } if (ZoneOrSort < 0) { WS_Quests tmpQuest = new WS_Quests(); byte reqSort = tmpQuest.ClassByQuestSort(checked (-ZoneOrSort)); if (reqSort > 0 && reqSort != (uint)objCharacter.Classe) { retValue = false; } } if (RequiredRace != 0 && (RequiredRace & objCharacter.RaceMask) == 0) { retValue = false; } if (RequiredTradeSkill > 0) { if (!objCharacter.Skills.ContainsKey(RequiredTradeSkill)) { retValue = false; } if (objCharacter.Skills[RequiredTradeSkill].Current < RequiredTradeSkillValue) { retValue = false; } } if (RequiredMinReputation_Faction > 0 && objCharacter.GetReputationValue(RequiredMinReputation_Faction) < RequiredMinReputation) { retValue = false; } if (RequiredMaxReputation_Faction > 0 && objCharacter.GetReputationValue(RequiredMaxReputation_Faction) >= RequiredMaxReputation) { retValue = false; } if (PreQuests.Count > 0) { foreach (int QuestID in PreQuests) { if (QuestID > 0) { if (!objCharacter.QuestsCompleted.Contains(QuestID)) { retValue = false; } } else if (QuestID < 0 && objCharacter.QuestsCompleted.Contains(QuestID)) { retValue = false; } } } if (objCharacter.QuestsCompleted.Contains(ID)) { retValue = false; } if (objCharacter.IsQuestInProgress(ID)) { retValue = false; } return(retValue); }
public virtual void OnQuestItem(ref WS_PlayerData.CharacterObject objCharacter, int ItemID, int ItemCount) { }
public void InstanceMapLeave(WS_PlayerData.CharacterObject objChar) { }
public Packets.PacketClass BuildPartyMemberStats(ref WS_PlayerData.CharacterObject objCharacter, uint flag) { Opcodes opCode = Opcodes.SMSG_PARTY_MEMBER_STATS; if (flag is 1015 or 524279) { opCode = Opcodes.SMSG_PARTY_MEMBER_STATS_FULL; if (objCharacter.ManaType != 0) { flag |= 8u; } } Packets.PacketClass packet = new(opCode); packet.AddPackGUID(objCharacter.GUID); packet.AddUInt32(flag); if ((flag & (true ? 1u : 0u)) != 0) { byte memberFlags = 1; if (objCharacter.isPvP) { memberFlags = (byte)(memberFlags | 2); } if (objCharacter.DEAD) { memberFlags = (byte)(memberFlags | 0x10); } packet.AddInt8(memberFlags); } checked { if ((flag & 2u) != 0) { packet.AddUInt16((ushort)objCharacter.Life.Current); } if ((flag & 4u) != 0) { packet.AddUInt16((ushort)objCharacter.Life.Maximum); } if ((flag & 8u) != 0) { packet.AddInt8((byte)objCharacter.ManaType); } if ((flag & 0x10u) != 0) { if (objCharacter.ManaType == ManaTypes.TYPE_RAGE) { packet.AddUInt16((ushort)objCharacter.Rage.Current); } else if (objCharacter.ManaType == ManaTypes.TYPE_ENERGY) { packet.AddUInt16((ushort)objCharacter.Energy.Current); } else { packet.AddUInt16((ushort)objCharacter.Mana.Current); } } if ((flag & 0x20u) != 0) { if (objCharacter.ManaType == ManaTypes.TYPE_RAGE) { packet.AddUInt16((ushort)objCharacter.Rage.Maximum); } else if (objCharacter.ManaType == ManaTypes.TYPE_ENERGY) { packet.AddUInt16((ushort)objCharacter.Energy.Maximum); } else { packet.AddUInt16((ushort)objCharacter.Mana.Maximum); } } if ((flag & 0x40u) != 0) { packet.AddUInt16(objCharacter.Level); } if ((flag & 0x80u) != 0) { packet.AddUInt16((ushort)objCharacter.ZoneID); } if ((flag & 0x100u) != 0) { packet.AddInt16((short)objCharacter.positionX); packet.AddInt16((short)objCharacter.positionY); } if ((flag & 0x200u) != 0) { ulong auraMask2 = 0uL; int auraPos2 = packet.Data.Length; packet.AddUInt64(0uL); int num = WorldServiceLocator._Global_Constants.MAX_AURA_EFFECTs_VISIBLE - 1; for (int j = 0; j <= num; j++) { if (objCharacter.ActiveSpells[j] != null) { unchecked { auraMask2 |= (ulong)(1L << checked ((int)(ulong)j)); } packet.AddUInt16((ushort)objCharacter.ActiveSpells[j].SpellID); packet.AddInt8(1); } } packet.AddUInt64(auraMask2, auraPos2); } if ((flag & 0x400u) != 0) { if (objCharacter.Pet != null) { packet.AddUInt64(objCharacter.Pet.GUID); } else { packet.AddInt64(0L); } } if ((flag & 0x800u) != 0) { if (objCharacter.Pet != null) { packet.AddString(objCharacter.Pet.PetName); } else { packet.AddString(""); } } if ((flag & 0x1000u) != 0) { if (objCharacter.Pet != null) { packet.AddUInt16((ushort)objCharacter.Pet.Model); } else { packet.AddInt16(0); } } if ((flag & 0x2000u) != 0) { if (objCharacter.Pet != null) { packet.AddUInt16((ushort)objCharacter.Pet.Life.Current); } else { packet.AddInt16(0); } } if ((flag & 0x4000u) != 0) { if (objCharacter.Pet != null) { packet.AddUInt16((ushort)objCharacter.Pet.Life.Maximum); } else { packet.AddInt16(0); } } if ((flag & 0x8000u) != 0) { if (objCharacter.Pet != null) { packet.AddInt8(2); } else { packet.AddInt8(0); } } if ((flag & 0x10000u) != 0) { if (objCharacter.Pet != null) { packet.AddUInt16((ushort)objCharacter.Pet.Mana.Current); } else { packet.AddInt16(0); } } if ((flag & 0x20000u) != 0) { if (objCharacter.Pet != null) { packet.AddUInt16((ushort)objCharacter.Pet.Mana.Maximum); } else { packet.AddInt16(0); } } if ((flag & 0x40000u) != 0) { if (objCharacter.Pet != null) { ulong auraMask = 0uL; int auraPos = packet.Data.Length; packet.AddUInt64(0uL); int num2 = WorldServiceLocator._Global_Constants.MAX_AURA_EFFECTs_VISIBLE - 1; for (int i = 0; i <= num2; i++) { if (objCharacter.Pet.ActiveSpells[i] != null) { unchecked { auraMask |= (ulong)(1L << checked ((int)(ulong)i)); } packet.AddUInt16((ushort)objCharacter.Pet.ActiveSpells[i].SpellID); packet.AddInt8(1); } } packet.AddUInt64(auraMask, auraPos); } else { packet.AddInt64(0L); } } return(packet); } }
public void SendInitialSpells(ref WS_Network.ClientClass client, ref WS_PlayerData.CharacterObject Character) { Packets.PacketClass packet = new Packets.PacketClass(Opcodes.SMSG_INITIAL_SPELLS); checked { try { packet.AddInt8(0); int countPos = packet.Data.Length; packet.AddInt16(0); int spellCount = 0; Dictionary <int, KeyValuePair <uint, int> > spellCooldowns = new Dictionary <int, KeyValuePair <uint, int> >(); foreach (KeyValuePair <int, WS_Spells.CharacterSpell> Spell in Character.Spells) { if (Spell.Value.Active == 1) { packet.AddUInt16((ushort)Spell.Key); packet.AddInt16(0); spellCount++; if (Spell.Value.Cooldown != 0) { spellCooldowns.Add(Spell.Key, new KeyValuePair <uint, int>(Spell.Value.Cooldown, 0)); } } } packet.AddInt16((short)spellCount, countPos); spellCount = 0; countPos = packet.Data.Length; packet.AddInt16(0); foreach (KeyValuePair <int, KeyValuePair <uint, int> > Cooldown in spellCooldowns) { if (WorldServiceLocator._WS_Spells.SPELLs.ContainsKey(Cooldown.Key)) { packet.AddUInt16((ushort)Cooldown.Key); int timeLeft = 0; if (Cooldown.Value.Key > WorldServiceLocator._Functions.GetTimestamp(DateAndTime.Now)) { timeLeft = (int)(checked (Cooldown.Value.Key - WorldServiceLocator._Functions.GetTimestamp(DateAndTime.Now)) * 1000L); } packet.AddUInt16((ushort)Cooldown.Value.Value); packet.AddUInt16((ushort)WorldServiceLocator._WS_Spells.SPELLs[Cooldown.Key].Category); if (WorldServiceLocator._WS_Spells.SPELLs[Cooldown.Key].CategoryCooldown > 0) { packet.AddInt32(0); packet.AddInt32(timeLeft); } else { packet.AddInt32(timeLeft); packet.AddInt32(0); } spellCount++; } } packet.AddInt16((short)spellCount, countPos); client.Send(ref packet); } finally { packet.Dispose(); } } }
private void Regenerate(object state) { if (RegenerationWorking) { WorldServiceLocator._WorldServer.Log.WriteLine(LogType.WARNING, "Update: Regenerator skipping update"); return; } RegenerationWorking = true; NextGroupUpdate = !NextGroupUpdate; checked { try { WorldServiceLocator._WorldServer.CHARACTERs_Lock.AcquireReaderLock(WorldServiceLocator._Global_Constants.DEFAULT_LOCK_TIMEOUT); foreach (KeyValuePair <ulong, WS_PlayerData.CharacterObject> Character in WorldServiceLocator._WorldServer.CHARACTERs) { if (Character.Value.DEAD || Character.Value.underWaterTimer != null || Character.Value.LogoutTimer != null || Character.Value.client == null) { continue; } WS_PlayerData.CharacterObject value = Character.Value; BaseMana = value.Mana.Current; BaseRage = value.Rage.Current; BaseEnergy = value.Energy.Current; BaseLife = value.Life.Current; _updateFlag = false; if (value.ManaType == ManaTypes.TYPE_RAGE) { switch (value.cUnitFlags & 0x80000) { case 0: if (value.Rage.Current > 0) { value.Rage.Current -= 25; } break; default: if (value.RageRegenBonus != 0) { value.Rage.Increment(value.RageRegenBonus); } break; } } if (value.ManaType == ManaTypes.TYPE_ENERGY && value.Energy.Current < value.Energy.Maximum) { value.Energy.Increment(20); } if (value.ManaRegen == 0) { value.UpdateManaRegen(); } if (value.spellCastManaRegeneration == 0) { if ((value.ManaType == ManaTypes.TYPE_MANA || value.Classe == Classes.CLASS_DRUID) && value.Mana.Current < value.Mana.Maximum) { value.Mana.Increment(value.ManaRegen * 2); } } else { if ((value.ManaType == ManaTypes.TYPE_MANA || value.Classe == Classes.CLASS_DRUID) && value.Mana.Current < value.Mana.Maximum) { value.Mana.Increment(value.ManaRegenInterrupt * 2); } if (value.spellCastManaRegeneration < 2) { value.spellCastManaRegeneration = 0; } else { value.spellCastManaRegeneration -= 2; } } if (value.Life.Current < value.Life.Maximum && (value.cUnitFlags & 0x80000) == 0) { switch (value.Classe) { case Classes.CLASS_MAGE: value.Life.Increment((int)Math.Round(value.Spirit.Base * 0.1 * value.LifeRegenerationModifier) + value.LifeRegenBonus); break; case Classes.CLASS_PRIEST: value.Life.Increment((int)Math.Round(value.Spirit.Base * 0.1 * value.LifeRegenerationModifier) + value.LifeRegenBonus); break; case Classes.CLASS_WARLOCK: value.Life.Increment((int)Math.Round(value.Spirit.Base * 0.11 * value.LifeRegenerationModifier) + value.LifeRegenBonus); break; case Classes.CLASS_DRUID: value.Life.Increment((int)Math.Round(value.Spirit.Base * 0.11 * value.LifeRegenerationModifier) + value.LifeRegenBonus); break; case Classes.CLASS_SHAMAN: value.Life.Increment((int)Math.Round(value.Spirit.Base * 0.11 * value.LifeRegenerationModifier) + value.LifeRegenBonus); break; case Classes.CLASS_ROGUE: value.Life.Increment((int)Math.Round(value.Spirit.Base * 0.5 * value.LifeRegenerationModifier) + value.LifeRegenBonus); break; case Classes.CLASS_WARRIOR: value.Life.Increment((int)Math.Round(value.Spirit.Base * 0.8 * value.LifeRegenerationModifier) + value.LifeRegenBonus); break; case Classes.CLASS_HUNTER: value.Life.Increment((int)Math.Round(value.Spirit.Base * 0.25 * value.LifeRegenerationModifier) + value.LifeRegenBonus); break; case Classes.CLASS_PALADIN: value.Life.Increment((int)Math.Round(value.Spirit.Base * 0.25 * value.LifeRegenerationModifier) + value.LifeRegenBonus); break; } } if (BaseMana != value.Mana.Current) { _updateFlag = true; value.GroupUpdateFlag |= 16u; value.SetUpdateFlag(23, value.Mana.Current); } if ((BaseRage != value.Rage.Current) || ((value.cUnitFlags & 0x80000) == 0x80000)) { _updateFlag = true; value.GroupUpdateFlag |= 16u; value.SetUpdateFlag(24, value.Rage.Current); } if (BaseEnergy != value.Energy.Current) { _updateFlag = true; value.GroupUpdateFlag |= 16u; value.SetUpdateFlag(26, value.Energy.Current); } if (BaseLife != value.Life.Current) { _updateFlag = true; value.SetUpdateFlag(22, value.Life.Current); value.GroupUpdateFlag |= 2u; } if (_updateFlag) { value.SendCharacterUpdate(); } if (value.DuelOutOfBounds != 11) { value.DuelOutOfBounds -= 2; if (value.DuelOutOfBounds == 0) { WorldServiceLocator._WS_Spells.DuelComplete(ref value.DuelPartner, ref value.client.Character); } } value.CheckCombat(); if (NextGroupUpdate) { value.GroupUpdate(); } if (value.guidsForRemoving.Count > 0) { value.SendOutOfRangeUpdate(); } value = null; } if (WorldServiceLocator._WorldServer.CHARACTERs_Lock.IsReaderLockHeld) { WorldServiceLocator._WorldServer.CHARACTERs_Lock.ReleaseReaderLock(); } } catch (Exception ex2) { ProjectData.SetProjectError(ex2); Exception ex = ex2; WorldServiceLocator._WorldServer.Log.WriteLine(LogType.WARNING, "Error at regenerate.{0}", Environment.NewLine + ex); ProjectData.ClearProjectError(); } RegenerationWorking = false; } }
public virtual bool OnQuestHello(ref WS_PlayerData.CharacterObject objCharacter, ulong cGUID) { return(true); }
public virtual void OnQuestExplore(ref WS_PlayerData.CharacterObject objCharacter, int AreaID) { }
public virtual void OnQuestEmote(ref WS_PlayerData.CharacterObject objCharacter, ref WS_Creatures.CreatureObject Creature, int EmoteID) { }
public virtual void OnQuestCastSpell(ref WS_PlayerData.CharacterObject objCharacter, ref WS_GameObjects.GameObject GameObject, int SpellID) { }
public virtual void OnQuestCastSpell(ref WS_PlayerData.CharacterObject objCharacter, ref WS_Creatures.CreatureObject Creature, int SpellID) { }
public virtual void OnQuestKill(ref WS_PlayerData.CharacterObject objCharacter, ref WS_Creatures.CreatureObject Creature) { }
public void CalculateOnLevelUP(ref WS_PlayerData.CharacterObject objCharacter) { int baseInt = objCharacter.Intellect.Base; int baseSpi = objCharacter.Spirit.Base; int baseAgi = objCharacter.Agility.Base; int baseLife = objCharacter.Life.Maximum; checked { switch (objCharacter.Classe) { case Classes.CLASS_DRUID: if (objCharacter.Level <= 17) { objCharacter.Life.Base += 17; } else { objCharacter.Life.Base += objCharacter.Level; } if (objCharacter.Level <= 25) { objCharacter.Mana.Base += 20 + objCharacter.Level; } else { objCharacter.Mana.Base += 45; } objCharacter.Strength.Base += gainStat(objCharacter.Level, 2.1E-05, 0.003009, 0.486493, -0.400003); objCharacter.Intellect.Base += gainStat(objCharacter.Level, 3.8E-05, 0.005145, 0.871006, -0.832029); objCharacter.Agility.Base += gainStat(objCharacter.Level, 4.1E-05, 0.00044, 0.512076, -1.000317); objCharacter.Stamina.Base += gainStat(objCharacter.Level, 2.3E-05, 0.003345, 0.56005, -0.562058); objCharacter.Spirit.Base += gainStat(objCharacter.Level, 5.9E-05, 0.004044, 1.04, -1.488504); break; case Classes.CLASS_HUNTER: if (objCharacter.Level <= 13) { objCharacter.Life.Base += 17; } else { objCharacter.Life.Base += objCharacter.Level + 4; } if (objCharacter.Level <= 27) { objCharacter.Mana.Base += 18 + objCharacter.Level; } else { objCharacter.Mana.Base += 45; } objCharacter.Strength.Base += gainStat(objCharacter.Level, 2.2E-05, 0.0018, 0.407867, -0.550889); objCharacter.Intellect.Base += gainStat(objCharacter.Level, 2E-05, 0.003007, 0.505215, -0.500642); objCharacter.Agility.Base += gainStat(objCharacter.Level, 4E-05, 0.007416, 1.125108, -1.003045); objCharacter.Stamina.Base += gainStat(objCharacter.Level, 3.1E-05, 0.00448, 0.78004, -0.800471); objCharacter.Spirit.Base += gainStat(objCharacter.Level, 1.7E-05, 0.003803, 0.536846, -0.490026); break; case Classes.CLASS_MAGE: if (objCharacter.Level <= 25) { objCharacter.Life.Base += 15; } else { objCharacter.Life.Base += objCharacter.Level - 8; } if (objCharacter.Level <= 27) { objCharacter.Mana.Base += 23 + objCharacter.Level; } else { objCharacter.Mana.Base += 51; } objCharacter.Strength.Base += gainStat(objCharacter.Level, 2E-06, 0.001003, 0.10089, -0.076055); objCharacter.Intellect.Base += gainStat(objCharacter.Level, 4E-05, 0.007416, 1.125108, -1.003045); objCharacter.Agility.Base += gainStat(objCharacter.Level, 8E-06, 0.001001, 0.16319, -0.06428); objCharacter.Stamina.Base += gainStat(objCharacter.Level, 6E-06, 0.002031, 0.27836, -0.340077); objCharacter.Spirit.Base += gainStat(objCharacter.Level, 3.9E-05, 0.006981, 1.09009, -1.00607); break; case Classes.CLASS_PALADIN: if (objCharacter.Level <= 14) { objCharacter.Life.Base += 18; } else { objCharacter.Life.Base += objCharacter.Level + 4; } if (objCharacter.Level <= 25) { objCharacter.Mana.Base += 17 + objCharacter.Level; } else { objCharacter.Mana.Base += 42; } objCharacter.Strength.Base += gainStat(objCharacter.Level, 3.7E-05, 0.005455, 0.940039, -1.00009); objCharacter.Intellect.Base += gainStat(objCharacter.Level, 2.3E-05, 0.003345, 0.56005, -0.562058); objCharacter.Agility.Base += gainStat(objCharacter.Level, 2E-05, 0.003007, 0.505215, -0.500642); objCharacter.Stamina.Base += gainStat(objCharacter.Level, 3.8E-05, 0.005145, 0.871006, -0.832029); objCharacter.Spirit.Base += gainStat(objCharacter.Level, 3.2E-05, 0.003025, 0.61589, -0.640307); break; case Classes.CLASS_PRIEST: if (objCharacter.Level <= 22) { objCharacter.Life.Base += 15; } else { objCharacter.Life.Base += objCharacter.Level - 6; } if (objCharacter.Level <= 33) { objCharacter.Mana.Base += 22 + objCharacter.Level; } else { objCharacter.Mana.Base += 54; } if (objCharacter.Level == 34) { objCharacter.Mana.Base += 15; } objCharacter.Strength.Base += gainStat(objCharacter.Level, 8E-06, 0.001001, 0.16319, -0.06428); objCharacter.Intellect.Base += gainStat(objCharacter.Level, 3.9E-05, 0.006981, 1.09009, -1.00607); objCharacter.Agility.Base += gainStat(objCharacter.Level, 2.2E-05, 2.2E-05, 0.260756, -0.494); objCharacter.Stamina.Base += gainStat(objCharacter.Level, 2.4E-05, 0.000981, 0.364935, -0.5709); objCharacter.Spirit.Base += gainStat(objCharacter.Level, 4E-05, 0.007416, 1.125108, -1.003045); break; case Classes.CLASS_ROGUE: if (objCharacter.Level <= 15) { objCharacter.Life.Base += 17; } else { objCharacter.Life.Base += objCharacter.Level + 2; } objCharacter.Strength.Base += gainStat(objCharacter.Level, 2.5E-05, 0.00417, 0.654096, -0.601491); objCharacter.Intellect.Base += gainStat(objCharacter.Level, 8E-06, 0.001001, 0.16319, -0.06428); objCharacter.Agility.Base += gainStat(objCharacter.Level, 3.8E-05, 0.007834, 1.191028, -1.20394); objCharacter.Stamina.Base += gainStat(objCharacter.Level, 3.2E-05, 0.003025, 0.61589, -0.640307); objCharacter.Spirit.Base += gainStat(objCharacter.Level, 2.4E-05, 0.000981, 0.364935, -0.5709); break; case Classes.CLASS_SHAMAN: if (objCharacter.Level <= 16) { objCharacter.Life.Base += 17; } else { objCharacter.Life.Base += objCharacter.Level + 1; } if (objCharacter.Level <= 32) { objCharacter.Mana.Base += 19 + objCharacter.Level; } else { objCharacter.Mana.Base += 52; } objCharacter.Strength.Base += gainStat(objCharacter.Level, 3.5E-05, 0.003641, 0.73431, -0.800626); objCharacter.Intellect.Base += gainStat(objCharacter.Level, 3.1E-05, 0.00448, 0.78004, -0.800471); objCharacter.Agility.Base += gainStat(objCharacter.Level, 2.2E-05, 0.0018, 0.407867, -0.550889); objCharacter.Stamina.Base += gainStat(objCharacter.Level, 2E-05, 0.00603, 0.80957, -0.80922); objCharacter.Spirit.Base += gainStat(objCharacter.Level, 3.8E-05, 0.005145, 0.871006, -0.832029); break; case Classes.CLASS_WARLOCK: if (objCharacter.Level <= 17) { objCharacter.Life.Base += 15; } else { objCharacter.Life.Base += objCharacter.Level - 2; } if (objCharacter.Level <= 30) { objCharacter.Mana.Base += 21 + objCharacter.Level; } else { objCharacter.Mana.Base += 51; } objCharacter.Strength.Base += gainStat(objCharacter.Level, 6E-06, 0.002031, 0.27836, -0.340077); objCharacter.Intellect.Base += gainStat(objCharacter.Level, 5.9E-05, 0.004044, 1.04, -1.488504); objCharacter.Agility.Base += gainStat(objCharacter.Level, 2.4E-05, 0.000981, 0.364935, -0.5709); objCharacter.Stamina.Base += gainStat(objCharacter.Level, 2.1E-05, 0.003009, 0.486493, -0.400003); objCharacter.Spirit.Base += gainStat(objCharacter.Level, 4E-05, 0.006404, 1.038791, -1.039076); break; case Classes.CLASS_WARRIOR: if (objCharacter.Level <= 14) { objCharacter.Life.Base += 19; } else { objCharacter.Life.Base += objCharacter.Level + 10; } objCharacter.Strength.Base += gainStat(objCharacter.Level, 3.9E-05, 0.006902, 1.0800399999999999, -1.051701); objCharacter.Intellect.Base += gainStat(objCharacter.Level, 2E-06, 0.001003, 0.10089, -0.076055); objCharacter.Agility.Base += gainStat(objCharacter.Level, 2.2E-05, 0.0046, 0.655333, -0.600356); objCharacter.Stamina.Base += gainStat(objCharacter.Level, 5.9E-05, 0.004044, 1.04, -1.488504); objCharacter.Spirit.Base += gainStat(objCharacter.Level, 6E-06, 0.002031, 0.27836, -0.340077); break; } if (objCharacter.Agility.Base != baseAgi) { objCharacter.Resistances[0].Base += (objCharacter.Agility.Base - baseAgi) * 2; } if (objCharacter.Spirit.Base != baseSpi) { objCharacter.Life.Base += 10 * (objCharacter.Spirit.Base - baseSpi); } if (objCharacter.Intellect.Base != baseInt && objCharacter.ManaType == ManaTypes.TYPE_MANA) { objCharacter.Mana.Base += 15 * (objCharacter.Intellect.Base - baseInt); } objCharacter.Damage.Minimum += 1f; objCharacter.RangedDamage.Minimum += 1f; objCharacter.Damage.Maximum += 1f; objCharacter.RangedDamage.Maximum += 1f; if (objCharacter.Level > 9) { objCharacter.TalentPoints++; } foreach (KeyValuePair <int, WS_PlayerHelper.TSkill> Skill in objCharacter.Skills) { if (WorldServiceLocator._WS_DBCDatabase.SkillLines[Skill.Key] == 6) { Skill.Value.Base += 5; } } } }
public virtual void OnQuestComplete(ref WS_PlayerData.CharacterObject objCharacter) { }
public void AddToWorld() { WorldServiceLocator._WS_Maps.GetMapTile(positionX, positionY, ref CellX, ref CellY); if (WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[CellX, CellY] == null) { WorldServiceLocator._WS_CharMovement.MAP_Load(CellX, CellY, MapID); } WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[CellX, CellY].CorpseObjectsHere.Add(GUID); Packets.PacketClass packet = new Packets.PacketClass(Opcodes.SMSG_UPDATE_OBJECT); checked { try { Packets.UpdateClass tmpUpdate = new Packets.UpdateClass(WorldServiceLocator._Global_Constants.FIELD_MASK_SIZE_CORPSE); try { packet.AddInt32(1); packet.AddInt8(0); FillAllUpdateFlags(ref tmpUpdate); Packets.UpdateClass updateClass = tmpUpdate; CorpseObject updateObject = this; updateClass.AddToPacket(ref packet, ObjectUpdateType.UPDATETYPE_CREATE_OBJECT, ref updateObject); } finally { tmpUpdate.Dispose(); } short i = -1; do { short j = -1; do { if ((short)unchecked (CellX + i) >= 0 && (short)unchecked (CellX + i) <= 63 && (short)unchecked (CellY + j) >= 0 && (short)unchecked (CellY + j) <= 63 && WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[(short)unchecked (CellX + i), (short)unchecked (CellY + j)] != null && WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[(short)unchecked (CellX + i), (short)unchecked (CellY + j)].PlayersHere.Count > 0) { WS_Maps.TMapTile tMapTile = WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[(short)unchecked (CellX + i), (short)unchecked (CellY + j)]; ulong[] list = tMapTile.PlayersHere.ToArray(); ulong[] array = list; foreach (ulong plGUID in array) { int num; if (WorldServiceLocator._WorldServer.CHARACTERs.ContainsKey(plGUID)) { WS_PlayerData.CharacterObject characterObject = WorldServiceLocator._WorldServer.CHARACTERs[plGUID]; WS_Base.BaseObject objCharacter = this; num = (characterObject.CanSee(ref objCharacter) ? 1 : 0); } else { num = 0; } if (num != 0) { WorldServiceLocator._WorldServer.CHARACTERs[plGUID].client.SendMultiplyPackets(ref packet); WorldServiceLocator._WorldServer.CHARACTERs[plGUID].corpseObjectsNear.Add(GUID); SeenBy.Add(plGUID); } } } j = (short)unchecked (j + 1); }while (j <= 1); i = (short)unchecked (i + 1); }while (i <= 1); } finally { packet.Dispose(); } } }
public void Update() { checked { var num = WorldServiceLocator._Global_Constants.MAX_AURA_EFFECTs - 1; for (var i = 0; i <= num; i++) { if (ActiveSpells[i] == null) { continue; } if (ActiveSpells[i].SpellDuration == WorldServiceLocator._Global_Constants.SPELL_DURATION_INFINITE) { ActiveSpells[i].SpellDuration = Duration; } if (ActiveSpells[i].SpellDuration != WorldServiceLocator._Global_Constants.SPELL_DURATION_INFINITE) { ActiveSpells[i].SpellDuration -= 1000; byte k = 0; do { if (ActiveSpells[i] != null && ActiveSpells[i].Aura[k] != null && ActiveSpells[i].Aura_Info[k].Amplitude != 0 && checked (Duration - ActiveSpells[i].SpellDuration) % ActiveSpells[i].Aura_Info[k].Amplitude == 0) { var obj = ActiveSpells[i].Aura[k]; WS_Base.BaseUnit Target = this; ref var spellCaster = ref ActiveSpells[i].SpellCaster; WS_Base.BaseObject baseObject = spellCaster; obj(ref Target, ref baseObject, ref ActiveSpells[i].Aura_Info[k], ActiveSpells[i].SpellID, ActiveSpells[i].StackCount + 1, AuraAction.AURA_UPDATE); spellCaster = (WS_Base.BaseUnit)baseObject; } k = (byte)unchecked ((uint)(k + 1)); }while (k <= 2u); if (ActiveSpells[i] != null && ActiveSpells[i].SpellDuration <= 0 && ActiveSpells[i].SpellDuration != WorldServiceLocator._Global_Constants.SPELL_DURATION_INFINITE) { RemoveAura(i, ref ActiveSpells[i].SpellCaster, RemovedByDuration: true); } } byte j = 0; do { if (ActiveSpells[i] != null && ActiveSpells[i].Aura_Info[j] != null && ActiveSpells[i].Aura_Info[j].ID == SpellEffects_Names.SPELL_EFFECT_APPLY_AREA_AURA) { List <WS_Base.BaseUnit> Targets = new(); switch (Caster) { case WS_PlayerData.CharacterObject _: { var wS_Spells = WorldServiceLocator._WS_Spells; WS_PlayerData.CharacterObject objCharacter = (WS_PlayerData.CharacterObject)Caster; Targets = wS_Spells.GetPartyMembersAtPoint(ref objCharacter, ActiveSpells[i].Aura_Info[j].GetRadius, positionX, positionY, positionZ); break; } default: { var wS_Spells2 = WorldServiceLocator._WS_Spells; WS_Base.BaseUnit Target = this; Targets = wS_Spells2.GetFriendAroundMe(ref Target, ActiveSpells[i].Aura_Info[j].GetRadius); break; } } foreach (var item in new List <WS_Base.BaseUnit>()) { var Unit = item; if (!Unit.HaveAura(ActiveSpells[i].SpellID)) { var wS_Spells3 = WorldServiceLocator._WS_Spells; WS_Base.BaseObject baseObject = this; wS_Spells3.ApplyAura(ref Unit, ref baseObject, ref ActiveSpells[i].Aura_Info[j], ActiveSpells[i].SpellID); } } } j = (byte)unchecked ((uint)(j + 1)); }while (j <= 2u); } }
public void MaievSendUnk(ref WS_PlayerData.CharacterObject objCharacter) { Packets.PacketClass unk = new(Opcodes.SMSG_WARDEN_DATA); try { unk.AddInt8(3); unk.AddByteArray(new byte[56] { 20, 0, 96, 208, 254, 44, 1, 0, 2, 0, 32, 26, 54, 0, 192, 227, 53, 0, 80, 241, 53, 0, 192, 245, 53, 0, 3, 8, 0, 119, 108, 147, 169, 4, 0, 0, 96, 168, 64, 0, 1, 3, 8, 0, 54, 133, 234, 240, 1, 1, 0, 144, 244, 69, 0, 1 }); WorldServiceLocator._WS_Warden.SendWardenPacket(ref objCharacter, ref unk); } finally { unk.Dispose(); } }
public void Check() { if (Looters.Count != Rolls.Count) { return; } byte maxRollType = 0; foreach (KeyValuePair <WS_PlayerData.CharacterObject, int> looter2 in Looters) { if (looter2.Value == 1) { maxRollType = 1; } if (looter2.Value == 2 && maxRollType != 1) { maxRollType = 2; } } if (maxRollType == 0) { LootObject.GroupLootInfo.Remove(LootSlot); Packets.PacketClass response2 = new(Opcodes.SMSG_LOOT_ALL_PASSED); response2.AddUInt64(LootObject.GUID); response2.AddInt32(LootSlot); response2.AddInt32(Item.ItemID); response2.AddInt32(0); response2.AddInt32(0); Broadcast(ref response2); response2.Dispose(); return; } WS_PlayerData.CharacterObject looterCharacter = null; checked { int maxRoll = -1; foreach (KeyValuePair <WS_PlayerData.CharacterObject, int> looter in Looters) { if (looter.Value == maxRollType) { byte rollValue = (byte)WorldServiceLocator._WorldServer.Rnd.Next(0, 100); if (rollValue > maxRoll) { maxRoll = rollValue; looterCharacter = looter.Key; } Packets.PacketClass response = new(Opcodes.SMSG_LOOT_ROLL); response.AddUInt64(LootObject.GUID); response.AddInt32(LootSlot); response.AddUInt64(looter.Key.GUID); response.AddInt32(Item.ItemID); response.AddInt32(0); response.AddInt32(0); response.AddInt8(rollValue); response.AddInt8((byte)looter.Value); Broadcast(ref response); response.Dispose(); } } ItemObject itemObject = new(Item.ItemID, looterCharacter.GUID) { StackCount = Item.ItemCount }; ItemObject tmpItem = itemObject; Packets.PacketClass wonItem = new(Opcodes.SMSG_LOOT_ROLL_WON); wonItem.AddUInt64(LootObject.GUID); wonItem.AddInt32(LootSlot); wonItem.AddInt32(Item.ItemID); wonItem.AddInt32(0); wonItem.AddInt32(0); wonItem.AddUInt64(looterCharacter.GUID); wonItem.AddInt8((byte)maxRoll); wonItem.AddInt8(maxRollType); Broadcast(ref wonItem); if (looterCharacter.ItemADD(ref tmpItem)) { looterCharacter.LogLootItem(tmpItem, Item.ItemCount, Recieved: false, Created: false); LootObject.GroupLootInfo.Remove(LootSlot); LootObject.Items[LootSlot] = null; } else { tmpItem.Delete(); LootObject.GroupLootInfo.Remove(LootSlot); } } }
public void SendInitWorldStates(ref WS_Network.ClientClass client, ref WS_PlayerData.CharacterObject Character) { Character.ZoneCheck(); ushort NumberOfFields; switch (Character.ZoneID) { case 0: case 1: case 4: case 8: case 10: case 11: case 12: case 36: case 38: case 40: case 41: case 51: case 267: case 1519: case 1537: case 2257: case 2918: NumberOfFields = 6; break; case 2597: NumberOfFields = 81; break; case 3277: NumberOfFields = 14; break; case 3358: case 3820: NumberOfFields = 38; break; case 3483: NumberOfFields = 22; break; case 3519: NumberOfFields = 36; break; case 3521: NumberOfFields = 35; break; case 3698: case 3702: case 3968: NumberOfFields = 9; break; case 3703: NumberOfFields = 9; break; default: NumberOfFields = 10; break; } Packets.PacketClass packet = new Packets.PacketClass(Opcodes.SMSG_INIT_WORLD_STATES); try { packet.AddUInt32(Character.MapID); packet.AddInt32(Character.ZoneID); packet.AddInt32(Character.AreaID); packet.AddUInt16(NumberOfFields); packet.AddUInt32(2264u); packet.AddUInt32(0u); packet.AddUInt32(2263u); packet.AddUInt32(0u); packet.AddUInt32(2262u); packet.AddUInt32(0u); packet.AddUInt32(2261u); packet.AddUInt32(0u); packet.AddUInt32(2260u); packet.AddUInt32(0u); packet.AddUInt32(2259u); packet.AddUInt32(0u); switch (Character.ZoneID) { case 3968: packet.AddUInt32(3000u); packet.AddUInt32(0u); packet.AddUInt32(3001u); packet.AddUInt32(0u); packet.AddUInt32(3002u); packet.AddUInt32(0u); break; default: packet.AddUInt32(2324u); packet.AddUInt32(0u); packet.AddUInt32(2323u); packet.AddUInt32(0u); packet.AddUInt32(2322u); packet.AddUInt32(0u); packet.AddUInt32(2325u); packet.AddUInt32(0u); break; case 1: case 11: case 12: case 38: case 40: case 51: case 1519: case 1537: case 2257: case 2597: case 3277: case 3358: case 3820: break; } client.Send(ref packet); } finally { packet.Dispose(); } }
public void AddToWorld() { WorldServiceLocator._WS_Maps.GetMapTile(positionX, positionY, ref CellX, ref CellY); if (WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[CellX, CellY] == null) { WorldServiceLocator._WS_CharMovement.MAP_Load(CellX, CellY, MapID); } try { WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[CellX, CellY].DynamicObjectsHere.Add(GUID); } catch (Exception projectError) { ProjectData.SetProjectError(projectError); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.WARNING, "AddToWorld failed MapId: {0} Tile XY: {1} {2} GUID: {3}", MapID, CellX, CellY, GUID); ProjectData.ClearProjectError(); return; } Packets.PacketClass packet = new Packets.PacketClass(Opcodes.SMSG_UPDATE_OBJECT); packet.AddInt32(1); packet.AddInt8(0); Packets.UpdateClass tmpUpdate = new Packets.UpdateClass(WorldServiceLocator._Global_Constants.FIELD_MASK_SIZE_DYNAMICOBJECT); FillAllUpdateFlags(ref tmpUpdate); Packets.UpdateClass updateClass = tmpUpdate; DynamicObjectObject updateObject = this; updateClass.AddToPacket(ref packet, ObjectUpdateType.UPDATETYPE_CREATE_OBJECT_SELF, ref updateObject); tmpUpdate.Dispose(); short i = -1; checked { do { short j = -1; do { if ((short)unchecked (CellX + i) >= 0 && (short)unchecked (CellX + i) <= 63 && (short)unchecked (CellY + j) >= 0 && (short)unchecked (CellY + j) <= 63 && WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[(short)unchecked (CellX + i), (short)unchecked (CellY + j)] != null && WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[(short)unchecked (CellX + i), (short)unchecked (CellY + j)].PlayersHere.Count > 0) { WS_Maps.TMapTile tMapTile = WorldServiceLocator._WS_Maps.Maps[MapID].Tiles[(short)unchecked (CellX + i), (short)unchecked (CellY + j)]; ulong[] list = tMapTile.PlayersHere.ToArray(); ulong[] array = list; foreach (ulong plGUID in array) { int num; if (WorldServiceLocator._WorldServer.CHARACTERs.ContainsKey(plGUID)) { WS_PlayerData.CharacterObject characterObject = WorldServiceLocator._WorldServer.CHARACTERs[plGUID]; WS_Base.BaseObject objCharacter = this; num = (characterObject.CanSee(ref objCharacter) ? 1 : 0); } else { num = 0; } if (num != 0) { WorldServiceLocator._WorldServer.CHARACTERs[plGUID].client.SendMultiplyPackets(ref packet); WorldServiceLocator._WorldServer.CHARACTERs[plGUID].dynamicObjectsNear.Add(GUID); SeenBy.Add(plGUID); } } } j = (short)unchecked (j + 1); }while (j <= 1); i = (short)unchecked (i + 1); }while (i <= 1); packet.Dispose(); } }
private void UpdateSpells(ref WS_Base.BaseUnit objCharacter) { if (objCharacter is WS_Totems.TotemObject @object) { @object.Update(); return; } checked { for (int i = 0; i <= WorldServiceLocator._Global_Constants.MAX_AURA_EFFECTs - 1; i++) { if (objCharacter.ActiveSpells[i] == null) { continue; } if (objCharacter.ActiveSpells[i].SpellDuration != WorldServiceLocator._Global_Constants.SPELL_DURATION_INFINITE) { objCharacter.ActiveSpells[i].SpellDuration -= 1000; byte j = 0; do { if (objCharacter.ActiveSpells[i] != null && objCharacter.ActiveSpells[i].Aura[j] != null && objCharacter.ActiveSpells[i].Aura_Info[j] != null && objCharacter.ActiveSpells[i].Aura_Info[j].Amplitude != 0 && checked (objCharacter.ActiveSpells[i].GetSpellInfo.GetDuration - objCharacter.ActiveSpells[i].SpellDuration) % objCharacter.ActiveSpells[i].Aura_Info[j].Amplitude == 0) { ref WS_Base.BaseUnit spellCaster = ref objCharacter.ActiveSpells[i].SpellCaster; WS_Base.BaseObject Caster = spellCaster; objCharacter.ActiveSpells[i].Aura[j](ref objCharacter, ref Caster, ref objCharacter.ActiveSpells[i].Aura_Info[j], objCharacter.ActiveSpells[i].SpellID, objCharacter.ActiveSpells[i].StackCount + 1, AuraAction.AURA_UPDATE); ref WS_Base.BaseUnit reference = ref spellCaster; reference = (WS_Base.BaseUnit)Caster; } j = (byte)unchecked ((uint)(j + 1)); }while (j <= 2u); if (objCharacter.ActiveSpells[i] != null && objCharacter.ActiveSpells[i].SpellDuration <= 0 && objCharacter.ActiveSpells[i].SpellDuration != WorldServiceLocator._Global_Constants.SPELL_DURATION_INFINITE) { objCharacter.RemoveAura(i, ref objCharacter.ActiveSpells[i].SpellCaster, RemovedByDuration: true); } } byte k = 0; do { if (objCharacter.ActiveSpells[i] != null && objCharacter.ActiveSpells[i].Aura_Info[k] != null && objCharacter.ActiveSpells[i].Aura_Info[k].ID == SpellEffects_Names.SPELL_EFFECT_APPLY_AREA_AURA) { if (objCharacter.ActiveSpells[i].SpellCaster == objCharacter) { List <WS_Base.BaseUnit> Targets = new List <WS_Base.BaseUnit>(); switch (objCharacter) { case WS_PlayerData.CharacterObject _: { WS_Spells wS_Spells = WorldServiceLocator._WS_Spells; WS_PlayerData.CharacterObject objCharacter2 = (WS_PlayerData.CharacterObject)objCharacter; Targets = wS_Spells.GetPartyMembersAroundMe(ref objCharacter2, objCharacter.ActiveSpells[i].Aura_Info[k].GetRadius); break; } case WS_Totems.TotemObject _ when((WS_Totems.TotemObject) objCharacter).Caster != null && ((WS_Totems.TotemObject)objCharacter).Caster is WS_PlayerData.CharacterObject: { WS_Spells wS_Spells2 = WorldServiceLocator._WS_Spells; ref WS_Base.BaseUnit caster2 = ref ((WS_Totems.TotemObject)objCharacter).Caster; ref WS_Base.BaseUnit reference = ref caster2; WS_PlayerData.CharacterObject objCharacter2 = (WS_PlayerData.CharacterObject)caster2; List <WS_Base.BaseUnit> partyMembersAtPoint = wS_Spells2.GetPartyMembersAtPoint(ref objCharacter2, objCharacter.ActiveSpells[i].Aura_Info[k].GetRadius, objCharacter.positionX, objCharacter.positionY, objCharacter.positionZ); reference = objCharacter2; Targets = partyMembersAtPoint; break; } } foreach (WS_Base.BaseUnit item in Targets) { WS_Base.BaseUnit Unit = item; if (!Unit.HaveAura(objCharacter.ActiveSpells[i].SpellID)) { WS_Spells wS_Spells3 = WorldServiceLocator._WS_Spells; WS_Base.BaseObject Caster = objCharacter; wS_Spells3.ApplyAura(ref Unit, ref Caster, ref objCharacter.ActiveSpells[i].Aura_Info[k], objCharacter.ActiveSpells[i].SpellID); objCharacter = (WS_Base.BaseUnit)Caster; } } } else if (objCharacter.ActiveSpells[i].SpellCaster != null && objCharacter.ActiveSpells[i].SpellCaster.Exist) { WS_PlayerData.CharacterObject caster = null; switch (objCharacter.ActiveSpells[i].SpellCaster) { case WS_PlayerData.CharacterObject _: caster = (WS_PlayerData.CharacterObject)objCharacter.ActiveSpells[i].SpellCaster; break; case WS_Totems.TotemObject _ when((WS_Totems.TotemObject) objCharacter.ActiveSpells[i].SpellCaster).Caster != null && ((WS_Totems.TotemObject)objCharacter.ActiveSpells[i].SpellCaster).Caster is WS_PlayerData.CharacterObject object1: caster = object1; break; } if (caster == null || caster.Group == null || !caster.Group.LocalMembers.Contains(objCharacter.GUID)) { objCharacter.RemoveAura(i, ref objCharacter.ActiveSpells[i].SpellCaster); } else if (!objCharacter.ActiveSpells[i].SpellCaster.HaveAura(objCharacter.ActiveSpells[i].SpellID)) { objCharacter.RemoveAura(i, ref objCharacter.ActiveSpells[i].SpellCaster); } else if (WorldServiceLocator._WS_Combat.GetDistance(objCharacter, objCharacter.ActiveSpells[i].SpellCaster) > objCharacter.ActiveSpells[i].Aura_Info[k].GetRadius) { objCharacter.RemoveAura(i, ref objCharacter.ActiveSpells[i].SpellCaster); } } else { objCharacter.RemoveAura(i, ref objCharacter.ActiveSpells[i].SpellCaster); } }
public virtual void OnQuestCancel(ref WS_PlayerData.CharacterObject objCharacter) { }