I went through all the new Buff Icons and mapped them to their appropriate names with thanks to this page on Stratics; http://uo2.stratics.com/miscellaneous/buff-and-debuff-icons/ and a little help with some code to make the process easier (code is provided at end of this post).
Now all we need to do is figure out where they all get used! Some are pretty obvious while others are fairly obscure... there are even one or two doubles in there that both use the same icons.
Code used to process buff icons, requiring user input verification;
Now all we need to do is figure out where they all get used! Some are pretty obvious while others are fairly obscure... there are even one or two doubles in there that both use the same icons.
C#:
public enum BuffIcon : short
{
DismountPrevention = 1001,
NoRearm = 1002,
//NULL = 1003,
//NULL = 1004,
NightSight = 1005,
DeathStrike = 1006,
EvilOmen = 1007,
Honored = 1008, // Renamed
AchievePerfection = 1009, // Renamed
DivineFury = 1010,
EnemyOfOne = 1011,
HidingAndOrStealth = 1012,
ActiveMeditation = 1013,
BloodOathCaster = 1014,
BloodOathCurse = 1015,
CorpseSkin = 1016,
Mindrot = 1017,
PainSpike = 1018,
Strangle = 1019,
GiftOfRenewal = 1020,
AttuneWeapon = 1021,
Thunderstorm = 1022,
EssenceOfWind = 1023,
EtherealVoyage = 1024,
GiftOfLife = 1025,
ArcaneEmpowerment = 1026,
MortalStrike = 1027,
ReactiveArmor = 1028,
Protection = 1029,
ArchProtection = 1030,
MagicReflection = 1031,
Incognito = 1032,
Disguised = 1033,
AnimalForm = 1034,
Polymorph = 1035,
Invisibility = 1036,
Paralyze = 1037,
Poison = 1038,
Bleed = 1039,
Clumsy = 1040,
FeebleMinded = 1041, // Renamed
Weaken = 1042,
Curse = 1043,
MassCurse = 1044,
Agility = 1045,
Cunning = 1046,
Strength = 1047,
Bless = 1048,
Sleep = 1049,
StoneForm = 1050,
SpellPlague = 1051,
GargoyleBerserk = 1052, // Renamed
//NULL = 1053, // Removed
Fly = 1054,
// Additional icons below
Inspire = 1055,
Invigorate = 1056,
Resilience = 1057,
Perseverance = 1058,
Tribulation = 1059,
Despair = 1060,
ArcaneEmpowerment2 = 1061,
MagicFishBuff = 1062,
HitLowerAttack = 1063,
HitLowerDefense = 1064,
HitDualWield = 1065,
Block = 1066,
DefenseMastery = 1067,
DespairBard = 1068,
HealingSkill = 1069,
SpellFocusing = 1070,
SpellFocusingDebuff = 1071,
RageFocusingDebuff = 1072,
RageFocusing = 1073,
Warding = 1074,
TribulationBard = 1075,
ForceArrow = 1076,
Disarm = 1077,
Surge = 1078,
Feint = 1079,
TalonStrike = 1080,
PsychicAttack = 1081,
Consecrate = 1082,
GrapesOfWrath = 1083,
EnemyOfOneDebuff = 1084,
HorrificBeast = 1085,
LichForm = 1086,
VampiricEmbrace = 1087,
CurseWeapon = 1088,
ReaperForm = 1089,
ImmolatingWeapon = 1090,
Enchant = 1091,
HonorableExecution = 1092,
Confidence = 1093,
Evasion = 1094,
CounterAttack = 1095,
LightningStrike = 1096,
MomentumStrike = 1097,
OrangePetals = 1098,
RoseOfTrinsicPetals = 1099,
PoisonResistance = 1100,
Veterinary = 1101,
Perfection = 1102,
Honored2 = 1103,
ManaPhase = 1104,
FandancerFanFire = 1105,
Rage = 1106,
Webbing = 1107,
MedusaStone = 1108,
DragonSlasherFear = 1109,
AuraOfNausea = 1110,
HowlOfCacophony = 1111,
GazeDespair = 1112,
HiryuPhysicalResistance = 1113,
RuneBeetleCorruption = 1114,
BloodwormAnemia = 1115,
RotwormBloodDisease = 1116,
SkillUseDelay = 1117,
FactionStatLoss = 1118,
HeatOfBattle = 1119,
Criminal = 1120,
ArmorPierce = 1121,
Splintering = 1122,
SwingSpeedDebuff = 1123,
WraithForm = 1124,
HonorableExecution2 = 1125,
CityTradeDeal = 1126
}
Code used to process buff icons, requiring user input verification;
C#:
#region Header
// Voxpire _,-'/-'/ BuffIconTest.cs
// . __,-; ,'( '/
// \. `-.__`-._`:_,-._ _ , . ``
// `:-._,------' ` _,`--` -: `_ , ` ,' :
// `---..__,,--' (C) 2015 ` -'. -'
// # Vita-Nex [http://core.vita-nex.com] #
// {o)xxx|===============- # -===============|xxx(o}
// # The MIT License (MIT) #
#endregion
#region References
using System;
using System.IO;
using Server.Mobiles;
using Server.Network;
using VitaNex;
using VitaNex.IO;
using VitaNex.SuperGumps.UI;
#endregion
namespace Server
{
public static class BuffIconTest
{
private static readonly short[] _Icons = ((BuffIcon)0).GetValues<short>();
public static void Initialize()
{
CommandUtility.Register(
"TestBuffs",
AccessLevel.Administrator,
e => NextIcon((PlayerMobile)e.Mobile, 1, IOUtility.EnsureFile(VitaNexCore.DataDirectory + "/BuffIcons.txt", true)));
}
private static void NextIcon(PlayerMobile m, int index, FileInfo file)
{
var uid = (short)(1000 + index);
if (index > 1)
{
m.Send(new TestRemoveBuffPacket(m, (short)(uid - 1)));
}
m.Send(new TestAddBuffPacket(m, uid));
var input = _Icons.Contains(uid) ? ((BuffIcon)uid).ToString() : String.Empty;
new InputDialogGump(m)
{
Modal = false,
CanMove = false,
InputText = input,
Title = "Buff #" + index + " (" + uid + ")",
Html =
"Enter a description for the currently displayed Buff Icon and click OK to continue, or Cancel to stop testing.\n\n" +
"Data will be appended to '" + file + "'",
AcceptHandler = b => NextIcon(m, index + 1, file),
CancelHandler = b => m.Send(new TestRemoveBuffPacket(m, uid)),
Callback = (b, val) => file.AppendText(false, val + " = " + uid + ",")
}.Send();
}
private sealed class TestAddBuffPacket : Packet
{
public TestAddBuffPacket(Mobile mob, short iconID)
: base(0xDF)
{
EnsureCapacity(44);
m_Stream.Write(mob.Serial);
m_Stream.Write(iconID); //ID
m_Stream.Write((short)0x1); //Type 0 for removal. 1 for add 2 for Data
m_Stream.Fill(4);
m_Stream.Write(iconID); //ID
m_Stream.Write((short)0x01); //Type 0 for removal. 1 for add 2 for Data
m_Stream.Fill(4);
m_Stream.Write((short)0); //Time in seconds
m_Stream.Fill(3);
m_Stream.Write(-1);
m_Stream.Write(-1);
m_Stream.Fill(10);
}
}
private sealed class TestRemoveBuffPacket : Packet
{
public TestRemoveBuffPacket(Mobile mob, short iconID)
: base(0xDF)
{
EnsureCapacity(13);
m_Stream.Write(mob.Serial);
m_Stream.Write(iconID); //ID
m_Stream.Write((short)0x0); //Type 0 for removal. 1 for add 2 for Data
m_Stream.Fill(4);
}
}
}
}
Last edited: