コード例 #1
0
        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);
            }
        }
コード例 #2
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;
                }
            }
        }