public static void UseSoulGuardSkillRequest(IRealmClient client, RealmPacketIn packet) { client.ActiveCharacter.IsFighting = false; client.ActiveCharacter.IsMoving = false; short skillId = packet.ReadInt16(); ++packet.Position; int num1 = (int)packet.ReadInt16(); int num2 = (int)packet.ReadInt16(); byte targetType = packet.ReadByte(); ushort targetId = packet.ReadUInt16(); Spell spellByRealId = client.ActiveCharacter.Spells.GetSpellByRealId(skillId); if (spellByRealId == null) { return; } if (spellByRealId.SoulGuardProffLevel < (byte)1 || spellByRealId.SoulGuardProffLevel > (byte)3) { client.ActiveCharacter.YouAreFuckingCheater("Trying to use skill as SoulguardSkill.", 1); } else { switch (spellByRealId.SoulGuardProffLevel) { case 1: if (client.ActiveCharacter.GreenCharges < (byte)5) { client.ActiveCharacter.SendInfoMsg("Not enougt charges."); Asda2SpellHandler.SendSetSkiillPowersStatsResponse(client.ActiveCharacter, false, (short)0); return; } client.ActiveCharacter.GreenCharges -= (byte)5; break; case 2: if (client.ActiveCharacter.BlueCharges < (byte)5) { client.ActiveCharacter.SendInfoMsg("Not enougt charges."); Asda2SpellHandler.SendSetSkiillPowersStatsResponse(client.ActiveCharacter, false, (short)0); return; } client.ActiveCharacter.BlueCharges -= (byte)5; break; case 3: if (client.ActiveCharacter.RedCharges < (byte)5) { client.ActiveCharacter.SendInfoMsg("Not enougt charges."); Asda2SpellHandler.SendSetSkiillPowersStatsResponse(client.ActiveCharacter, false, (short)0); return; } client.ActiveCharacter.RedCharges -= (byte)5; break; } Asda2SpellHandler.ProcessUseSkill(client, targetType, skillId, targetId); Asda2SpellHandler.SendSetSkiillPowersStatsResponse(client.ActiveCharacter, false, (short)0); } }
private static void ProcessUseSkill(IRealmClient client, byte targetType, short skillId, ushort targetId) { Unit target = (Unit)null; switch (targetType) { case 0: target = (Unit)client.ActiveCharacter.Map.GetNpcByUniqMapId(targetId); break; case 1: target = (Unit)World.GetCharacterBySessionId(targetId); break; default: client.ActiveCharacter.SendSystemMessage(string.Format( "Unknown skill target type {0}. SkillId {1}. Please report to developers.", (object)targetType, (object)skillId)); break; } if (target == null) { Asda2SpellHandler.SendUseSkillResultResponse(client.ActiveCharacter, skillId, Asda2UseSkillResult.ChooseATarget); } else { if (targetType == (byte)1) { Character characterBySessionId = World.GetCharacterBySessionId(targetId); if ((int)characterBySessionId.Asda2FactionId == (int)client.ActiveCharacter.Asda2FactionId && client.ActiveCharacter.IsAsda2BattlegroundInProgress && characterBySessionId.IsAsda2BattlegroundInProgress) { Asda2SpellHandler.SendUseSkillResultResponse(client.ActiveCharacter, skillId, Asda2UseSkillResult.YouCannotUseSkillToTargetYet); return; } if (characterBySessionId == null) { Asda2SpellHandler.SendUseSkillResultResponse(client.ActiveCharacter, skillId, Asda2UseSkillResult.ChooseATarget); return; } } Spell spellByRealId = client.ActiveCharacter.Spells.GetSpellByRealId(skillId); if (spellByRealId == null) { return; } switch (client.ActiveCharacter.SpellCast.Start(spellByRealId, target)) { case SpellFailedReason.OutOfRange: Asda2MovmentHandler.MoveToSelectedTargetAndAttack(client.ActiveCharacter); break; case SpellFailedReason.Ok: if (spellByRealId.LearnLevel >= (byte)10) { if (spellByRealId.LearnLevel < (byte)30) { if (client.ActiveCharacter.GreenCharges < (byte)10) { ++client.ActiveCharacter.GreenCharges; } } else if (spellByRealId.LearnLevel < (byte)50) { if (client.ActiveCharacter.BlueCharges < (byte)10) { ++client.ActiveCharacter.BlueCharges; } if (client.ActiveCharacter.GreenCharges < (byte)10) { ++client.ActiveCharacter.GreenCharges; } } else { if (client.ActiveCharacter.RedCharges < (byte)10) { ++client.ActiveCharacter.RedCharges; } if (client.ActiveCharacter.BlueCharges < (byte)10) { ++client.ActiveCharacter.BlueCharges; } if (client.ActiveCharacter.GreenCharges < (byte)10) { ++client.ActiveCharacter.GreenCharges; } } } AchievementProgressRecord progressRecord = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(6U); switch (++progressRecord.Counter) { case 50: client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Skilled44); break; case 100: client.ActiveCharacter.GetTitle(Asda2TitleId.Skilled44); break; } progressRecord.SaveAndFlush(); Asda2SpellHandler.SendSetSkiillPowersStatsResponse(client.ActiveCharacter, true, skillId); break; } } }