Ejemplo n.º 1
0
        /// <summary>
        /// </summary>
        public override void CalcTrickle()
        {
            if ((this.Parent is Character) || (this.Parent is NonPlayerCharacter))
            {
                // This condition could be obsolete
                Character ch     = (Character)this.Parent;
                int       baseIP = 0;
                int       characterLevel;

                characterLevel = (Int32)ch.Stats["Level"].BaseValue;

                // Calculate base IP value for character level
                if (characterLevel > 204)
                {
                    baseIP        += (characterLevel - 204) * 600000;
                    characterLevel = 204;
                }

                if (characterLevel > 189)
                {
                    baseIP        += (characterLevel - 189) * 150000;
                    characterLevel = 189;
                }

                if (characterLevel > 149)
                {
                    baseIP        += (characterLevel - 149) * 80000;
                    characterLevel = 149;
                }

                if (characterLevel > 99)
                {
                    baseIP        += (characterLevel - 99) * 40000;
                    characterLevel = 99;
                }

                if (characterLevel > 49)
                {
                    baseIP        += (characterLevel - 49) * 20000;
                    characterLevel = 49;
                }

                if (characterLevel > 14)
                {
                    baseIP        += (characterLevel - 14) * 10000; // Change 99 => 14 by Wizard
                    characterLevel = 14;
                }

                baseIP += 1500 + (characterLevel - 1) * 4000;

                this.Set(baseIP - Convert.ToInt32(SkillUpdate.CalculateIP(this.Parent)));

                if (!this.Parent.Starting)
                {
                    this.AffectStats();
                }
            }
        }
        /// <summary>
        /// </summary>
        /// <param name="skillMessage">
        /// </param>
        /// <param name="client">
        /// </param>
        protected override void Read(SkillMessage skillMessage, IZoneClient client)
        {
            uint baseIp = 0;

            uint characterLevel = client.Controller.Character.Stats[StatIds.level].BaseValue;

            // Calculate base IP value for character level
            if (characterLevel > 204)
            {
                baseIp        += (characterLevel - 204) * 600000;
                characterLevel = 204;
            }

            if (characterLevel > 189)
            {
                baseIp        += (characterLevel - 189) * 150000;
                characterLevel = 189;
            }

            if (characterLevel > 149)
            {
                baseIp        += (characterLevel - 149) * 80000;
                characterLevel = 149;
            }

            if (characterLevel > 99)
            {
                baseIp        += (characterLevel - 99) * 40000;
                characterLevel = 99;
            }

            if (characterLevel > 49)
            {
                baseIp        += (characterLevel - 49) * 20000;
                characterLevel = 49;
            }

            if (characterLevel > 14)
            {
                baseIp        += (characterLevel - 14) * 10000; // Change 99 => 14 by Wizard
                characterLevel = 14;
            }

            baseIp += 1500 + ((characterLevel - 1) * 4000);

            int count    = skillMessage.Skills.Length;
            var statlist = new List <int>();

            while (count > 0)
            {
                count--;
                GameTuple <CharacterStat, uint> stat = skillMessage.Skills[count];
                client.Controller.Character.Stats[(int)stat.Value1].Value = (int)stat.Value2;
                statlist.Add((int)stat.Value1);
            }

            statlist.Add(53); // IP
            uint usedIp = baseIp - (uint)Math.Floor(SkillUpdate.CalculateIP(client.Controller.Character.Stats));

            client.Controller.Character.Stats[StatIds.ip].BaseValue = usedIp;

            // Send the changed stats back to the client
            count = 0;
            var newStats = new List <GameTuple <CharacterStat, uint> >();

            while (count < statlist.Count)
            {
                int  stat    = statlist[count];
                uint statval = client.Controller.Character.Stats[stat].BaseValue;
                newStats.Add(new GameTuple <CharacterStat, uint> {
                    Value1 = (CharacterStat)stat, Value2 = statval
                });
                count++;
            }

            var reply = new SkillMessage
            {
                Identity = skillMessage.Identity,
                Unknown  = 0x00,
                Skills   = newStats.ToArray()
            };

            client.Controller.Character.Playfield.Publish(
                new IMSendAOtomationMessageBodyToClient {
                client = client, Body = reply
            });

            // and save the changes to the statsdb
            client.Controller.Character.WriteStats();
        }