/// <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(); } } }
public void OnSkillSelected(SkillUpdate myUpdate) { Color selectedColor = myUpdate.qteActivated ? Color.green : Color.yellow; for (int ii = 0; ii < kMaxCombatSkills; ++ii) { if (m_uitextures[ii] != null) { m_uitextures[ii].color = (myUpdate.skillIndex == ii) ? selectedColor : Color.white; } } if (myUpdate.showQTE) { ShowQTE(); } }
public void TestSkillsUpdate() { var m = new Mobile(0x1); m.DefaultMobileInit(); var skills = m.Skills; m.Skills[Utility.RandomSkill()].BaseFixedPoint = 1000; var expected = new SkillUpdate(skills).Compile(); using var ns = PacketTestUtilities.CreateTestNetState(); ns.SendSkillsUpdate(skills); var result = ns.SendPipe.Reader.TryRead(); AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); }
public void TestSkillUpdate() { var m = new Mobile(0x1); m.DefaultMobileInit(); var skills = m.Skills; m.Skills[SkillName.Alchemy].BaseFixedPoint = 1000; // GM Alchemy var data = new SkillUpdate(skills).Compile(); var length = 6 + skills.Length * 9; Span <byte> expectedData = stackalloc byte[length]; var pos = 0; expectedData.Write(ref pos, (byte)0x3A); // Packet ID expectedData.Write(ref pos, (ushort)length); // Length expectedData.Write(ref pos, (byte)0x02); // type: absolute, capped for (var i = 0; i < skills.Length; i++) { var s = skills[i]; var v = s.NonRacialValue; var uv = Math.Clamp((int)(v * 10), 0, 0xFFFF); expectedData.Write(ref pos, (ushort)(s.Info.SkillID + 1)); expectedData.Write(ref pos, (ushort)uv); expectedData.Write(ref pos, (ushort)s.BaseFixedPoint); expectedData.Write(ref pos, (byte)s.Lock); expectedData.Write(ref pos, (ushort)s.CapFixedPoint); } AssertThat.Equal(data, expectedData); }
/// <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(); }