/// <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(); }