Core/PacketIO: 9.1.5 updatefields and SMSG_UPDATE_OBJECT structure

Port From (https://github.com/TrinityCore/TrinityCore/commit/5c8a058120dcf2c3ff8592886cb842ca889e0411)
This commit is contained in:
hondacrx
2021-11-07 20:27:03 -05:00
parent 2f68906ed6
commit 8563fa8952
11 changed files with 268 additions and 272 deletions
+1 -1
View File
@@ -682,7 +682,7 @@ namespace Framework.Constants
Max = 19,
All = 127, // default for class?
Health = -2, // (-2 as signed value)
MaxPerClass = 6
MaxPerClass = 7
}
public enum Stats
@@ -83,7 +83,7 @@ namespace Framework.Database
PrepareStatement(CharStatements.SEL_CHARACTER, "SELECT c.guid, account, name, race, class, gender, level, xp, money, inventorySlots, bankSlots, restState, playerFlags, playerFlagsEx, " +
"position_x, position_y, position_z, map, orientation, taximask, createTime, createMode, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, " +
"resettalents_time, primarySpecialization, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, online, death_expire_time, taxi_path, dungeonDifficulty, " +
"totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, health, power1, power2, power3, power4, power5, power6, instance_id, activeTalentGroup, lootSpecId, exploredZones, " +
"totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, health, power1, power2, power3, power4, power5, power6, power7, instance_id, activeTalentGroup, lootSpecId, exploredZones, " +
"knownTitles, actionBars, raidDifficulty, legacyRaidDifficulty, fishingSteps, honor, honorLevel, honorRestState, honorRestBonus, numRespecs " +
"FROM characters c LEFT JOIN character_fishingsteps cfs ON c.guid = cfs.guid WHERE c.guid = ?");
@@ -252,63 +252,59 @@ namespace Framework.Database
PrepareStatement(CharStatements.UPD_NAME_BY_GUID, "UPDATE characters SET name = ? WHERE guid = ?");
// Guild handling
// 0: uint32, 1: string, 2: uint32, 3: string, 4: string, 5: uint64, 6-10: uint32, 11: uint64
PrepareStatement(CharStatements.INS_GUILD, "INSERT INTO guild (guildid, name, leaderguid, info, motd, createdate, EmblemStyle, EmblemColor, BorderStyle, BorderColor, BackgroundColor, BankMoney) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
PrepareStatement(CharStatements.DEL_GUILD, "DELETE FROM guild WHERE guildid = ?"); // 0: uint32
// 0: string, 1: uint32
PrepareStatement(CharStatements.DEL_GUILD, "DELETE FROM guild WHERE guildid = ?");
PrepareStatement(CharStatements.UPD_GUILD_NAME, "UPDATE guild SET name = ? WHERE guildid = ?");
// 0: uint32, 1: uint32, 2: uint8, 4: string, 5: string
PrepareStatement(CharStatements.INS_GUILD_MEMBER, "INSERT INTO guild_member (guildid, guid, rank, pnote, offnote) VALUES (?, ?, ?, ?, ?)");
PrepareStatement(CharStatements.DEL_GUILD_MEMBER, "DELETE FROM guild_member WHERE guid = ?"); // 0: uint32
PrepareStatement(CharStatements.DEL_GUILD_MEMBERS, "DELETE FROM guild_member WHERE guildid = ?"); // 0: uint32
// 0: uint32, 1: uint8, 3: string, 4: uint32, 5: uint32
PrepareStatement(CharStatements.DEL_GUILD_MEMBER, "DELETE FROM guild_member WHERE guid = ?");
PrepareStatement(CharStatements.DEL_GUILD_MEMBERS, "DELETE FROM guild_member WHERE guildid = ?");
PrepareStatement(CharStatements.INS_GUILD_RANK, "INSERT INTO guild_rank (guildid, rid, rname, rights, BankMoneyPerDay) VALUES (?, ?, ?, ?, ?)");
PrepareStatement(CharStatements.DEL_GUILD_RANKS, "DELETE FROM guild_rank WHERE guildid = ?"); // 0: uint32
PrepareStatement(CharStatements.DEL_GUILD_RANK, "DELETE FROM guild_rank WHERE guildid = ? AND rid = ?"); // 0: uint32, 1: uint8
PrepareStatement(CharStatements.INS_GUILD_BANK_TAB, "INSERT INTO guild_bank_tab (guildid, TabId) VALUES (?, ?)"); // 0: uint32, 1: uint8
PrepareStatement(CharStatements.DEL_GUILD_BANK_TAB, "DELETE FROM guild_bank_tab WHERE guildid = ? AND TabId = ?"); // 0: uint32, 1: uint8
PrepareStatement(CharStatements.DEL_GUILD_BANK_TABS, "DELETE FROM guild_bank_tab WHERE guildid = ?"); // 0: uint32
// 0: uint32, 1: uint8, 2: uint8, 3: uint32, 4: uint32
PrepareStatement(CharStatements.DEL_GUILD_RANKS, "DELETE FROM guild_rank WHERE guildid = ?");
PrepareStatement(CharStatements.DEL_GUILD_RANK, "DELETE FROM guild_rank WHERE guildid = ? AND rid = ?");
PrepareStatement(CharStatements.INS_GUILD_BANK_TAB, "INSERT INTO guild_bank_tab (guildid, TabId) VALUES (?, ?)");
PrepareStatement(CharStatements.DEL_GUILD_BANK_TAB, "DELETE FROM guild_bank_tab WHERE guildid = ? AND TabId = ?");
PrepareStatement(CharStatements.DEL_GUILD_BANK_TABS, "DELETE FROM guild_bank_tab WHERE guildid = ?");
PrepareStatement(CharStatements.INS_GUILD_BANK_ITEM, "INSERT INTO guild_bank_item (guildid, TabId, SlotId, item_guid) VALUES (?, ?, ?, ?)");
PrepareStatement(CharStatements.DEL_GUILD_BANK_ITEM, "DELETE FROM guild_bank_item WHERE guildid = ? AND TabId = ? AND SlotId = ?"); // 0: uint32, 1: uint8, 2: uint8
PrepareStatement(CharStatements.DEL_GUILD_BANK_ITEM, "DELETE FROM guild_bank_item WHERE guildid = ? AND TabId = ? AND SlotId = ?");
PrepareStatement(CharStatements.SEL_GUILD_BANK_ITEMS, "SELECT " + SelectItemInstanceContent + ", guildid, TabId, SlotId FROM guild_bank_item gbi INNER JOIN item_instance ii ON gbi.item_guid = ii.guid LEFT JOIN item_instance_gems ig ON ii.guid = ig.itemGuid LEFT JOIN item_instance_transmog iit ON ii.guid = iit.itemGuid LEFT JOIN item_instance_modifiers im ON ii.guid = im.itemGuid");
PrepareStatement(CharStatements.DEL_GUILD_BANK_ITEMS, "DELETE FROM guild_bank_item WHERE guildid = ?"); // 0: uint32
// 0: uint32, 1: uint8, 2: uint8, 3: uint8, 4: uint32
PrepareStatement(CharStatements.DEL_GUILD_BANK_ITEMS, "DELETE FROM guild_bank_item WHERE guildid = ?");
PrepareStatement(CharStatements.INS_GUILD_BANK_RIGHT, "INSERT INTO guild_bank_right (guildid, TabId, rid, gbright, SlotPerDay) VALUES (?, ?, ?, ?, ?) " +
"ON DUPLICATE KEY UPDATE gbright = VALUES(gbright), SlotPerDay = VALUES(SlotPerDay)");
PrepareStatement(CharStatements.DEL_GUILD_BANK_RIGHTS, "DELETE FROM guild_bank_right WHERE guildid = ?"); // 0: uint32
PrepareStatement(CharStatements.DEL_GUILD_BANK_RIGHTS_FOR_RANK, "DELETE FROM guild_bank_right WHERE guildid = ? AND rid = ?"); // 0: uint32, 1: uint8
// 0-1: uint32, 2-3: uint8, 4-5: uint32, 6: uint16, 7: uint8, 8: uint64
PrepareStatement(CharStatements.DEL_GUILD_BANK_RIGHTS, "DELETE FROM guild_bank_right WHERE guildid = ?");
PrepareStatement(CharStatements.DEL_GUILD_BANK_RIGHTS_FOR_RANK, "DELETE FROM guild_bank_right WHERE guildid = ? AND rid = ?");
PrepareStatement(CharStatements.INS_GUILD_BANK_EVENTLOG, "INSERT INTO guild_bank_eventlog (guildid, LogGuid, TabId, EventType, PlayerGuid, ItemOrMoney, ItemStackCount, DestTabId, TimeStamp) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
PrepareStatement(CharStatements.DEL_GUILD_BANK_EVENTLOG, "DELETE FROM guild_bank_eventlog WHERE guildid = ? AND LogGuid = ? AND TabId = ?"); // 0: uint32, 1: uint32, 2: uint8
PrepareStatement(CharStatements.DEL_GUILD_BANK_EVENTLOGS, "DELETE FROM guild_bank_eventlog WHERE guildid = ?"); // 0: uint32
// 0-1: uint32, 2: uint8, 3-4: uint32, 5: uint8, 6: uint64
PrepareStatement(CharStatements.DEL_GUILD_BANK_EVENTLOG, "DELETE FROM guild_bank_eventlog WHERE guildid = ? AND LogGuid = ? AND TabId = ?");
PrepareStatement(CharStatements.DEL_GUILD_BANK_EVENTLOGS, "DELETE FROM guild_bank_eventlog WHERE guildid = ?");
PrepareStatement(CharStatements.INS_GUILD_EVENTLOG, "INSERT INTO guild_eventlog (guildid, LogGuid, EventType, PlayerGuid1, PlayerGuid2, NewRank, TimeStamp) VALUES (?, ?, ?, ?, ?, ?, ?)");
PrepareStatement(CharStatements.DEL_GUILD_EVENTLOG, "DELETE FROM guild_eventlog WHERE guildid = ? AND LogGuid = ?"); // 0: uint32, 1: uint32
PrepareStatement(CharStatements.DEL_GUILD_EVENTLOGS, "DELETE FROM guild_eventlog WHERE guildid = ?"); // 0: uint32
PrepareStatement(CharStatements.UPD_GUILD_MEMBER_PNOTE, "UPDATE guild_member SET pnote = ? WHERE guid = ?"); // 0: string, 1: uint32
PrepareStatement(CharStatements.UPD_GUILD_MEMBER_OFFNOTE, "UPDATE guild_member SET offnote = ? WHERE guid = ?"); // 0: string, 1: uint32
PrepareStatement(CharStatements.UPD_GUILD_MEMBER_RANK, "UPDATE guild_member SET rank = ? WHERE guid = ?"); // 0: uint8, 1: uint32
PrepareStatement(CharStatements.UPD_GUILD_MOTD, "UPDATE guild SET motd = ? WHERE guildid = ?"); // 0: string, 1: uint32
PrepareStatement(CharStatements.UPD_GUILD_INFO, "UPDATE guild SET info = ? WHERE guildid = ?"); // 0: string, 1: uint32
PrepareStatement(CharStatements.UPD_GUILD_LEADER, "UPDATE guild SET leaderguid = ? WHERE guildid = ?"); // 0: uint32, 1: uint32
PrepareStatement(CharStatements.UPD_GUILD_RANK_NAME, "UPDATE guild_rank SET rname = ? WHERE rid = ? AND guildid = ?"); // 0: string, 1: uint8, 2: uint32
PrepareStatement(CharStatements.UPD_GUILD_RANK_RIGHTS, "UPDATE guild_rank SET rights = ? WHERE rid = ? AND guildid = ?"); // 0: uint32, 1: uint8, 2: uint32
// 0-5: uint32
PrepareStatement(CharStatements.DEL_GUILD_EVENTLOG, "DELETE FROM guild_eventlog WHERE guildid = ? AND LogGuid = ?");
PrepareStatement(CharStatements.DEL_GUILD_EVENTLOGS, "DELETE FROM guild_eventlog WHERE guildid = ?");
PrepareStatement(CharStatements.UPD_GUILD_MEMBER_PNOTE, "UPDATE guild_member SET pnote = ? WHERE guid = ?");
PrepareStatement(CharStatements.UPD_GUILD_MEMBER_OFFNOTE, "UPDATE guild_member SET offnote = ? WHERE guid = ?");
PrepareStatement(CharStatements.UPD_GUILD_MEMBER_RANK, "UPDATE guild_member SET rank = ? WHERE guid = ?");
PrepareStatement(CharStatements.UPD_GUILD_MOTD, "UPDATE guild SET motd = ? WHERE guildid = ?");
PrepareStatement(CharStatements.UPD_GUILD_INFO, "UPDATE guild SET info = ? WHERE guildid = ?");
PrepareStatement(CharStatements.UPD_GUILD_LEADER, "UPDATE guild SET leaderguid = ? WHERE guildid = ?");
PrepareStatement(CharStatements.UPD_GUILD_RANK_NAME, "UPDATE guild_rank SET rname = ? WHERE rid = ? AND guildid = ?");
PrepareStatement(CharStatements.UPD_GUILD_RANK_RIGHTS, "UPDATE guild_rank SET rights = ? WHERE rid = ? AND guildid = ?");
PrepareStatement(CharStatements.UPD_GUILD_EMBLEM_INFO, "UPDATE guild SET EmblemStyle = ?, EmblemColor = ?, BorderStyle = ?, BorderColor = ?, BackgroundColor = ? WHERE guildid = ?");
// 0: string, 1: string, 2: uint32, 3: uint8
PrepareStatement(CharStatements.UPD_GUILD_BANK_TAB_INFO, "UPDATE guild_bank_tab SET TabName = ?, TabIcon = ? WHERE guildid = ? AND TabId = ?");
PrepareStatement(CharStatements.UPD_GUILD_BANK_MONEY, "UPDATE guild SET BankMoney = ? WHERE guildid = ?"); // 0: uint64, 1: uint32
// 0: uint8, 1: uint32, 2: uint8, 3: uint32
PrepareStatement(CharStatements.UPD_GUILD_RANK_BANK_MONEY, "UPDATE guild_rank SET BankMoneyPerDay = ? WHERE rid = ? AND guildid = ?"); // 0: uint32, 1: uint8, 2: uint32
PrepareStatement(CharStatements.UPD_GUILD_BANK_TAB_TEXT, "UPDATE guild_bank_tab SET TabText = ? WHERE guildid = ? AND TabId = ?"); // 0: string, 1: uint32, 2: uint8
PrepareStatement(CharStatements.UPD_GUILD_BANK_MONEY, "UPDATE guild SET BankMoney = ? WHERE guildid = ?");
PrepareStatement(CharStatements.UPD_GUILD_RANK_BANK_MONEY, "UPDATE guild_rank SET BankMoneyPerDay = ? WHERE rid = ? AND guildid = ?");
PrepareStatement(CharStatements.UPD_GUILD_BANK_TAB_TEXT, "UPDATE guild_bank_tab SET TabText = ? WHERE guildid = ? AND TabId = ?");
PrepareStatement(CharStatements.INS_GUILD_MEMBER_WITHDRAW_TABS, "INSERT INTO guild_member_withdraw (guid, tab0, tab1, tab2, tab3, tab4, tab5, tab6, tab7) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) " +
"ON DUPLICATE KEY UPDATE tab0 = VALUES (tab0), tab1 = VALUES (tab1), tab2 = VALUES (tab2), tab3 = VALUES (tab3), tab4 = VALUES (tab4), tab5 = VALUES (tab5), tab6 = VALUES (tab6), tab7 = VALUES (tab7)");
PrepareStatement(CharStatements.INS_GUILD_MEMBER_WITHDRAW_MONEY, "INSERT INTO guild_member_withdraw (guid, money) VALUES (?, ?) ON DUPLICATE KEY UPDATE money = VALUES (money)");
PrepareStatement(CharStatements.DEL_GUILD_MEMBER_WITHDRAW, "TRUNCATE guild_member_withdraw");
// 0: uint32, 1: uint32, 2: uint32
PrepareStatement(CharStatements.SEL_CHAR_DATA_FOR_GUILD, "SELECT name, level, class, gender, zone, account FROM characters WHERE guid = ?");
PrepareStatement(CharStatements.DEL_GUILD_ACHIEVEMENT, "DELETE FROM guild_achievement WHERE guildId = ? AND achievement = ?");
PrepareStatement(CharStatements.INS_GUILD_ACHIEVEMENT, "INSERT INTO guild_achievement (guildId, achievement, date, guids) VALUES (?, ?, ?, ?)");
@@ -474,13 +470,13 @@ namespace Framework.Database
"map, instance_id, dungeonDifficulty, raidDifficulty, legacyRaidDifficulty, position_x, position_y, position_z, orientation, trans_x, trans_y, trans_z, trans_o, transguid, " +
"taximask, createTime, createMode, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, resettalents_time, primarySpecialization, " +
"extra_flags, stable_slots, at_login, death_expire_time, taxi_path, totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, health, power1, power2, power3, " +
"power4, power5, power6, latency, activeTalentGroup, lootSpecId, exploredZones, equipmentCache, knownTitles, actionBars, lastLoginBuild) VALUES " +
"(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
"power4, power5, power6, power7, latency, activeTalentGroup, lootSpecId, exploredZones, equipmentCache, knownTitles, actionBars, lastLoginBuild) VALUES " +
"(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
PrepareStatement(CharStatements.UPD_CHARACTER, "UPDATE characters SET name=?,race=?,class=?,gender=?,level=?,xp=?,money=?,inventorySlots=?,bankSlots=?,restState=?,playerFlags=?,playerFlagsEx=?," +
"map=?,instance_id=?,dungeonDifficulty=?,raidDifficulty=?,legacyRaidDifficulty=?,position_x=?,position_y=?,position_z=?,orientation=?,trans_x=?,trans_y=?,trans_z=?,trans_o=?,transguid=?,taximask=?,cinematic=?,totaltime=?,leveltime=?,rest_bonus=?," +
"logout_time=?,is_logout_resting=?,resettalents_cost=?,resettalents_time=?,numRespecs=?,primarySpecialization=?,extra_flags=?,stable_slots=?,at_login=?,zone=?,death_expire_time=?,taxi_path=?," +
"totalKills=?,todayKills=?,yesterdayKills=?,chosenTitle=?," +
"watchedFaction=?,drunk=?,health=?,power1=?,power2=?,power3=?,power4=?,power5=?,power6=?,latency=?,activeTalentGroup=?,lootSpecId=?,exploredZones=?," +
"watchedFaction=?,drunk=?,health=?,power1=?,power2=?,power3=?,power4=?,power5=?,power6=?,power7=?,latency=?,activeTalentGroup=?,lootSpecId=?,exploredZones=?," +
"equipmentCache=?,knownTitles=?,actionBars=?,online=?,honor=?,honorLevel=?,honorRestState=?,honorRestBonus=?,lastLoginBuild=? WHERE guid=?");
PrepareStatement(CharStatements.UPD_ADD_AT_LOGIN_FLAG, "UPDATE characters SET at_login = at_login | ? WHERE guid = ?");
@@ -664,9 +660,9 @@ namespace Framework.Database
PrepareStatement(CharStatements.UPD_CHAR_SKILLS, "UPDATE character_skills SET value = ?, max = ? WHERE guid = ? AND skill = ?");
PrepareStatement(CharStatements.INS_CHAR_SPELL, "INSERT INTO character_spell (guid, spell, active, disabled) VALUES (?, ?, ?, ?)");
PrepareStatement(CharStatements.DEL_CHAR_STATS, "DELETE FROM character_stats WHERE guid = ?");
PrepareStatement(CharStatements.INS_CHAR_STATS, "INSERT INTO character_stats (guid, maxhealth, maxpower1, maxpower2, maxpower3, maxpower4, maxpower5, maxpower6, strength, agility, stamina, intellect, " +
PrepareStatement(CharStatements.INS_CHAR_STATS, "INSERT INTO character_stats (guid, maxhealth, maxpower1, maxpower2, maxpower3, maxpower4, maxpower5, maxpower6, maxpower7, strength, agility, stamina, intellect, " +
"armor, resHoly, resFire, resNature, resFrost, resShadow, resArcane, blockPct, dodgePct, parryPct, critPct, rangedCritPct, spellCritPct, attackPower, rangedAttackPower, " +
"spellPower, resilience) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
"spellPower, resilience) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
PrepareStatement(CharStatements.DEL_PETITION_BY_OWNER, "DELETE FROM petition WHERE ownerguid = ?");
PrepareStatement(CharStatements.DEL_PETITION_SIGNATURE_BY_OWNER, "DELETE FROM petition_sign WHERE ownerguid = ?");
PrepareStatement(CharStatements.INS_CHAR_GLYPHS, "INSERT INTO character_glyphs VALUES(?, ?, ?)");
@@ -688,7 +684,6 @@ namespace Framework.Database
PrepareStatement(CharStatements.DEL_CHAR_CUF_PROFILES_BY_ID, "DELETE FROM character_cuf_profiles WHERE guid = ? AND id = ?");
PrepareStatement(CharStatements.DEL_CHAR_CUF_PROFILES, "DELETE FROM character_cuf_profiles WHERE guid = ?");
// Items that hold loot or money
PrepareStatement(CharStatements.SEL_ITEMCONTAINER_ITEMS, "SELECT container_id, item_id, item_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_bonus, context, bonus_list_ids FROM item_loot_items");
PrepareStatement(CharStatements.DEL_ITEMCONTAINER_ITEMS, "DELETE FROM item_loot_items WHERE container_id = ?");
@@ -1347,7 +1342,6 @@ namespace Framework.Database
DEL_CHAR_CUF_PROFILES_BY_ID,
DEL_CHAR_CUF_PROFILES,
REP_CALENDAR_EVENT,
DEL_CALENDAR_EVENT,
REP_CALENDAR_INVITE,
@@ -112,21 +112,22 @@ namespace Game.Entities
_shape = GetCreateProperties().Shape;
_maxSearchRadius = GetCreateProperties().GetMaxSearchRadius();
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.Caster), caster.GetGUID());
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.CreatingEffectGUID), castId);
var areaTriggerData = m_values.ModifyValue(m_areaTriggerData);
SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.Caster), caster.GetGUID());
SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.CreatingEffectGUID), castId);
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.SpellID), spell.Id);
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.SpellForVisuals), spell.Id);
SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.SpellID), spell.Id);
SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.SpellForVisuals), spell.Id);
SpellCastVisualField spellCastVisual = m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.SpellVisual);
SpellCastVisualField spellCastVisual = areaTriggerData.ModifyValue(m_areaTriggerData.SpellVisual);
SetUpdateFieldValue(ref spellCastVisual.SpellXSpellVisualID, spellVisual.SpellXSpellVisualID);
SetUpdateFieldValue(ref spellCastVisual.ScriptVisualID, spellVisual.ScriptVisualID);
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.TimeToTargetScale), GetCreateProperties().TimeToTargetScale != 0 ? GetCreateProperties().TimeToTargetScale : m_areaTriggerData.Duration);
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.BoundsRadius2D), GetMaxSearchRadius());
SetUpdateFieldValue(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.DecalPropertiesID), GetCreateProperties().DecalPropertiesId);
SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.TimeToTargetScale), GetCreateProperties().TimeToTargetScale != 0 ? GetCreateProperties().TimeToTargetScale : m_areaTriggerData.Duration);
SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.BoundsRadius2D), GetMaxSearchRadius());
SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.DecalPropertiesID), GetCreateProperties().DecalPropertiesId);
ScaleCurve extraScaleCurve = m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.ExtraScaleCurve);
ScaleCurve extraScaleCurve = areaTriggerData.ModifyValue(m_areaTriggerData.ExtraScaleCurve);
if (GetCreateProperties().ExtraScale.Structured.StartTimeOffset != 0)
SetUpdateFieldValue(extraScaleCurve.ModifyValue(extraScaleCurve.StartTimeOffset), GetCreateProperties().ExtraScale.Structured.StartTimeOffset);
@@ -148,6 +149,11 @@ namespace Game.Entities
SetUpdateFieldValue(extraScaleCurve.ModifyValue(extraScaleCurve.OverrideActive), GetCreateProperties().ExtraScale.Structured.OverrideActive != 0);
}
VisualAnim visualAnim = areaTriggerData.ModifyValue(m_areaTriggerData.VisualAnim);
SetUpdateFieldValue(visualAnim.ModifyValue(visualAnim.AnimationDataID), GetCreateProperties().AnimId);
SetUpdateFieldValue(visualAnim.ModifyValue(visualAnim.AnimKitID), GetCreateProperties().AnimKitId);
if (GetTemplate() != null && GetTemplate().HasFlag(AreaTriggerFlags.Unk3))
SetUpdateFieldValue(visualAnim.ModifyValue(visualAnim.Field_C), true);
PhasingHandler.InheritPhaseShift(this, caster);
+176 -143
View File
@@ -824,9 +824,9 @@ namespace Game.Entities
public class AzeriteItemData : BaseUpdateData<AzeriteItem>
{
public UpdateField<bool> Enabled = new(0, 1);
public DynamicUpdateField<UnlockedAzeriteEssence>UnlockedEssences = new(0, 2);
public DynamicUpdateField<uint>UnlockedEssenceMilestones = new(0, 4);
public DynamicUpdateField<SelectedAzeriteEssences>SelectedEssences = new(0, 3);
public DynamicUpdateField<UnlockedAzeriteEssence> UnlockedEssences = new(0, 2);
public DynamicUpdateField<uint> UnlockedEssenceMilestones = new(0, 4);
public DynamicUpdateField<SelectedAzeriteEssences> SelectedEssences = new(0, 3);
public UpdateField<ulong> Xp = new(0, 5);
public UpdateField<uint> Level = new(0, 6);
public UpdateField<uint> AuraLevel = new(0, 7);
@@ -1210,32 +1210,33 @@ namespace Game.Entities
public UpdateField<uint> MaxItemLevel = new(96, 106);
public UpdateField<int> AzeriteItemLevel = new(96, 107);
public UpdateField<uint> WildBattlePetLevel = new(96, 108);
public UpdateField<uint> BattlePetCompanionNameTimestamp = new(96, 109);
public UpdateField<int> InteractSpellID = new(96, 110);
public UpdateField<int> ScaleDuration = new(96, 111);
public UpdateField<int> LooksLikeMountID = new(96, 112);
public UpdateField<int> LooksLikeCreatureID = new(96, 113);
public UpdateField<int> LookAtControllerID = new(96, 114);
public UpdateField<int> TaxiNodesID = new(96, 115);
public UpdateField<ObjectGuid> GuildGUID = new(96, 116);
public UpdateField<ObjectGuid> SkinningOwnerGUID = new(96, 117);
public UpdateField<uint> SilencedSchoolMask = new(96, 118);
public UpdateField<ObjectGuid> NameplateAttachToGUID = new(96, 119); // When set, nameplate of this unit will instead appear on that object
public UpdateFieldArray<uint> NpcFlags = new(2, 120, 121);
public UpdateFieldArray<int> Power = new(6, 123, 124);
public UpdateFieldArray<uint> MaxPower = new(6, 123, 130);
public UpdateFieldArray<float> PowerRegenFlatModifier = new(6, 123, 136);
public UpdateFieldArray<float> PowerRegenInterruptedFlatModifier = new(6, 123, 142);
public UpdateFieldArray<VisibleItem> VirtualItems = new(3, 148, 149);
public UpdateFieldArray<uint> AttackRoundBaseTime = new(2, 152, 153);
public UpdateFieldArray<int> Stats = new(4, 155, 156);
public UpdateFieldArray<int> StatPosBuff = new(4, 155, 160);
public UpdateFieldArray<int> StatNegBuff = new(4, 155, 164);
public UpdateFieldArray<int> Resistances = new(7, 168, 169);
public UpdateFieldArray<int> BonusResistanceMods = new(7, 168, 176);
public UpdateFieldArray<int> ManaCostModifier = new(7, 168, 183);
public UpdateField<int> Field_220 = new(96, 109);
public UpdateField<uint> BattlePetCompanionNameTimestamp = new(96, 110);
public UpdateField<int> InteractSpellID = new(96, 111);
public UpdateField<int> ScaleDuration = new(96, 112);
public UpdateField<int> LooksLikeMountID = new(96, 113);
public UpdateField<int> LooksLikeCreatureID = new(96, 114);
public UpdateField<int> LookAtControllerID = new(96, 115);
public UpdateField<int> TaxiNodesID = new(96, 116);
public UpdateField<ObjectGuid> GuildGUID = new(96, 117);
public UpdateField<ObjectGuid> SkinningOwnerGUID = new(96, 118);
public UpdateField<uint> SilencedSchoolMask = new(96, 119);
public UpdateField<ObjectGuid> NameplateAttachToGUID = new(96, 120); // When set, nameplate of this unit will instead appear on that object
public UpdateFieldArray<uint> NpcFlags = new(2, 121, 122);
public UpdateFieldArray<int> Power = new(7, 124, 125);
public UpdateFieldArray<uint> MaxPower = new(7, 124, 132);
public UpdateFieldArray<float> PowerRegenFlatModifier = new(7, 124, 139);
public UpdateFieldArray<float> PowerRegenInterruptedFlatModifier = new(7, 124, 146);
public UpdateFieldArray<VisibleItem> VirtualItems = new(3, 153, 154);
public UpdateFieldArray<uint> AttackRoundBaseTime = new(2, 157, 158);
public UpdateFieldArray<int> Stats = new(4, 160, 161);
public UpdateFieldArray<int> StatPosBuff = new(4, 160, 165);
public UpdateFieldArray<int> StatNegBuff = new(4, 160, 169);
public UpdateFieldArray<int> Resistances = new(7, 173, 174);
public UpdateFieldArray<int> BonusResistanceMods = new(7, 173, 181);
public UpdateFieldArray<int> ManaCostModifier = new(7, 173, 188);
public UnitData() : base(0, TypeId.Unit, 190) { }
public UnitData() : base(0, TypeId.Unit, 195) { }
public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver)
{
@@ -1274,14 +1275,14 @@ namespace Game.Entities
data.WriteUInt8(DisplayPower);
data.WriteUInt32(OverrideDisplayPowerID);
data.WriteUInt64(Health);
for (int i = 0; i < 6; ++i)
for (int i = 0; i < 7; ++i)
{
data.WriteInt32(Power[i]);
data.WriteUInt32(MaxPower[i]);
}
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner) || fieldVisibilityFlags.HasFlag(UpdateFieldFlag.UnitAll))
{
for (int i = 0; i < 6; ++i)
for (int i = 0; i < 7; ++i)
{
data.WriteFloat(PowerRegenFlatModifier[i]);
data.WriteFloat(PowerRegenInterruptedFlatModifier[i]);
@@ -1402,6 +1403,7 @@ namespace Game.Entities
data.WriteUInt32(MaxItemLevel);
data.WriteInt32(AzeriteItemLevel);
data.WriteUInt32(WildBattlePetLevel);
data.WriteInt32(Field_220);
data.WriteUInt32(BattlePetCompanionNameTimestamp);
data.WriteInt32(InteractSpellID);
data.WriteInt32(ScaleDuration);
@@ -1429,7 +1431,7 @@ namespace Game.Entities
public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver)
{
UpdateMask allowedMaskForTarget = new(192, new uint[] { 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0x07F000FFu, 0x00000000u });
UpdateMask allowedMaskForTarget = new(195, new uint[] { 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0xFE0007FFu, 0x00000000u, 0x00000000u });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
}
@@ -1437,24 +1439,24 @@ namespace Game.Entities
public void AppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags)
{
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner))
allowedMaskForTarget.OR(new UpdateMask(190, new uint[] { 0x00002000u, 0x1E008000u, 0xFFE10000u, 0x0800007Eu, 0xF80FFF00u, 0x3FFFFFFFu }));
allowedMaskForTarget.OR(new UpdateMask(195, new uint[] { 0x00002000u, 0x1E008000u, 0xFFE10000u, 0x1000007Eu, 0x01FFF800u, 0xFFFFFFFFu, 0x00000007u }));
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.UnitAll))
allowedMaskForTarget.OR(new UpdateMask(190, new uint[] { 0x00000000u, 0x00000000u, 0x00000000u, 0x08000000u, 0x000FFF00u, 0x00000000u }));
allowedMaskForTarget.OR(new UpdateMask(195, new uint[] { 0x00000000u, 0x00000000u, 0x00000000u, 0x10000000u, 0x01FFF800u, 0x00000000u, 0x00000000u }));
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Empath))
allowedMaskForTarget.OR(new UpdateMask(190, new uint[] { 0x00000000u, 0x1E000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0000FF00u }));
allowedMaskForTarget.OR(new UpdateMask(195, new uint[] { 0x00000000u, 0x1E000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x001FE000u, 0x00000000u }));
}
public void FilterDisallowedFieldsMaskForFlag(UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags)
{
UpdateMask allowedMaskForTarget = new(190, new[] { 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0x07F000FFu, 0x00000000u });
UpdateMask allowedMaskForTarget = new(195, new[] { 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0xFE0007FFu, 0x00000000u, 0x00000000u });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
changesMask.AND(allowedMaskForTarget);
}
public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, Unit owner, Player receiver)
{
data.WriteBits(changesMask.GetBlocksMask(0), 6);
for (uint i = 0; i < 6; ++i)
data.WriteBits(changesMask.GetBlocksMask(0), 7);
for (uint i = 0; i < 7; ++i)
if (changesMask.GetBlock(i) != 0)
data.WriteBits(changesMask.GetBlock(i), 32);
@@ -1942,132 +1944,136 @@ namespace Game.Entities
}
if (changesMask[109])
{
data.WriteUInt32(BattlePetCompanionNameTimestamp);
data.WriteInt32(Field_220);
}
if (changesMask[110])
{
data.WriteInt32(InteractSpellID);
data.WriteUInt32(BattlePetCompanionNameTimestamp);
}
if (changesMask[111])
{
data.WriteInt32(ScaleDuration);
data.WriteInt32(InteractSpellID);
}
if (changesMask[112])
{
data.WriteInt32(LooksLikeMountID);
data.WriteInt32(ScaleDuration);
}
if (changesMask[113])
{
data.WriteInt32(LooksLikeCreatureID);
data.WriteInt32(LooksLikeMountID);
}
if (changesMask[114])
{
data.WriteInt32(LookAtControllerID);
data.WriteInt32(LooksLikeCreatureID);
}
if (changesMask[115])
{
data.WriteInt32(TaxiNodesID);
data.WriteInt32(LookAtControllerID);
}
if (changesMask[116])
{
data.WritePackedGuid(GuildGUID);
data.WriteInt32(TaxiNodesID);
}
if (changesMask[117])
{
data.WritePackedGuid(SkinningOwnerGUID);
data.WritePackedGuid(GuildGUID);
}
if (changesMask[118])
{
data.WriteUInt32(SilencedSchoolMask);
data.WritePackedGuid(SkinningOwnerGUID);
}
if (changesMask[119])
{
data.WriteUInt32(SilencedSchoolMask);
}
if (changesMask[120])
{
data.WritePackedGuid(NameplateAttachToGUID);
}
}
if (changesMask[120])
if (changesMask[121])
{
for (int i = 0; i < 2; ++i)
{
if (changesMask[121 + i])
if (changesMask[122 + i])
{
data.WriteUInt32(GetViewerDependentNpcFlags(this, i, owner, receiver));
}
}
}
if (changesMask[123])
if (changesMask[124])
{
for (int i = 0; i < 6; ++i)
for (int i = 0; i < 7; ++i)
{
if (changesMask[124 + i])
if (changesMask[125 + i])
{
data.WriteInt32(Power[i]);
}
if (changesMask[130 + i])
if (changesMask[132 + i])
{
data.WriteUInt32(MaxPower[i]);
}
if (changesMask[136 + i])
if (changesMask[139 + i])
{
data.WriteFloat(PowerRegenFlatModifier[i]);
}
if (changesMask[142 + i])
if (changesMask[146 + i])
{
data.WriteFloat(PowerRegenInterruptedFlatModifier[i]);
}
}
}
if (changesMask[148])
if (changesMask[153])
{
for (int i = 0; i < 3; ++i)
{
if (changesMask[149 + i])
if (changesMask[154 + i])
{
VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
if (changesMask[152])
if (changesMask[157])
{
for (int i = 0; i < 2; ++i)
{
if (changesMask[153 + i])
if (changesMask[158 + i])
{
data.WriteUInt32(AttackRoundBaseTime[i]);
}
}
}
if (changesMask[155])
if (changesMask[160])
{
for (int i = 0; i < 4; ++i)
{
if (changesMask[156 + i])
if (changesMask[161 + i])
{
data.WriteInt32(Stats[i]);
}
if (changesMask[160 + i])
if (changesMask[165 + i])
{
data.WriteInt32(StatPosBuff[i]);
}
if (changesMask[164 + i])
if (changesMask[169 + i])
{
data.WriteInt32(StatNegBuff[i]);
}
}
}
if (changesMask[168])
if (changesMask[173])
{
for (int i = 0; i < 7; ++i)
{
if (changesMask[169 + i])
if (changesMask[174 + i])
{
data.WriteInt32(Resistances[i]);
}
if (changesMask[176 + i])
if (changesMask[181 + i])
{
data.WriteInt32(BonusResistanceMods[i]);
}
if (changesMask[183 + i])
if (changesMask[188 + i])
{
data.WriteInt32(ManaCostModifier[i]);
}
@@ -2182,6 +2188,7 @@ namespace Game.Entities
ClearChangesMask(MaxItemLevel);
ClearChangesMask(AzeriteItemLevel);
ClearChangesMask(WildBattlePetLevel);
ClearChangesMask(Field_220);
ClearChangesMask(BattlePetCompanionNameTimestamp);
ClearChangesMask(InteractSpellID);
ClearChangesMask(ScaleDuration);
@@ -2501,9 +2508,9 @@ namespace Game.Entities
{
public UpdateField<bool> HasQuestSession = new(0, 1);
public UpdateField<bool> HasLevelLink = new(0, 2);
public DynamicUpdateField<ChrCustomizationChoice>Customizations = new(0, 3);
public DynamicUpdateField<QuestLog>QuestSessionQuestLog = new(0, 4);
public DynamicUpdateField<ArenaCooldown>ArenaCooldowns = new(0, 5);
public DynamicUpdateField<ChrCustomizationChoice> Customizations = new(0, 3);
public DynamicUpdateField<QuestLog> QuestSessionQuestLog = new(0, 4);
public DynamicUpdateField<ArenaCooldown> ArenaCooldowns = new(0, 5);
public UpdateField<ObjectGuid> DuelArbiter = new(0, 6);
public UpdateField<ObjectGuid> WowAccount = new(0, 7);
public UpdateField<ObjectGuid> LootTargetGUID = new(0, 8);
@@ -2532,9 +2539,9 @@ namespace Game.Entities
public UpdateField<int> CovenantID = new(0, 31);
public UpdateField<int> SoulbindID = new(32, 33);
public UpdateField<DungeonScoreSummary> DungeonScore = new(32, 34);
public UpdateFieldArray<QuestLog>QuestLog = new(125, 35, 36);
public UpdateFieldArray<VisibleItem>VisibleItems = new(19, 161, 162);
public UpdateFieldArray<float>AvgItemLevel = new(6, 181, 182);
public UpdateFieldArray<QuestLog> QuestLog = new(125, 35, 36);
public UpdateFieldArray<VisibleItem> VisibleItems = new(19, 161, 162);
public UpdateFieldArray<float> AvgItemLevel = new(6, 181, 182);
public PlayerData() : base(0, TypeId.Player, 188) { }
@@ -3045,8 +3052,10 @@ namespace Game.Entities
public UpdateField<uint> SeasonBestRating = new(0, 8);
public UpdateField<uint> PvpTierID = new(0, 9);
public UpdateField<uint> WeeklyBestWinPvpTierID = new(0, 10);
public UpdateField<uint> Field_28 = new(0, 11);
public UpdateField<uint> Field_2C = new(0, 12);
public PVPInfo() : base(11) { }
public PVPInfo() : base(13) { }
public void WriteCreate(WorldPacket data, Player owner, Player receiver)
{
@@ -3059,6 +3068,8 @@ namespace Game.Entities
data.WriteUInt32(SeasonBestRating);
data.WriteUInt32(PvpTierID);
data.WriteUInt32(WeeklyBestWinPvpTierID);
data.WriteUInt32(Field_28);
data.WriteUInt32(Field_2C);
data.WriteBit(Disqualified);
data.FlushBits();
}
@@ -3069,7 +3080,7 @@ namespace Game.Entities
if (ignoreChangesMask)
changesMask.SetAll();
data.WriteBits(changesMask.GetBlock(0), 11);
data.WriteBits(changesMask.GetBlock(0), 13);
if (changesMask[0])
{
@@ -3117,6 +3128,14 @@ namespace Game.Entities
{
data.WriteUInt32(WeeklyBestWinPvpTierID);
}
if (changesMask[11])
{
data.WriteUInt32(Field_28);
}
if (changesMask[12])
{
data.WriteUInt32(Field_2C);
}
}
data.FlushBits();
}
@@ -3133,6 +3152,8 @@ namespace Game.Entities
ClearChangesMask(SeasonBestRating);
ClearChangesMask(PvpTierID);
ClearChangesMask(WeeklyBestWinPvpTierID);
ClearChangesMask(Field_28);
ClearChangesMask(Field_2C);
_changesMask.ResetAll();
}
}
@@ -3285,8 +3306,8 @@ namespace Game.Entities
public class ActivePlayerUnk901 : BaseUpdateData<Player>
{
public UpdateField<ObjectGuid> Field_0 = new(0, 1 );
public UpdateField<int> Field_10 = new(0, 2 );
public UpdateField<ObjectGuid> Field_0 = new(0, 1);
public UpdateField<int> Field_10 = new(0, 2);
public ActivePlayerUnk901() : base(3) { }
@@ -3525,7 +3546,7 @@ namespace Game.Entities
public UpdateField<ulong> GuildClubMemberID = new(98, 101);
public UpdateField<uint> Honor = new(98, 102);
public UpdateField<uint> HonorNextLevel = new(98, 103);
public UpdateField<byte>NumBankSlots = new(98, 104);
public UpdateField<byte> NumBankSlots = new(98, 104);
public UpdateField<ActivePlayerUnk901> Field_1410 = new(98, 106);
public UpdateField<Optional<QuestSession>> QuestSession = new(98, 105);
public UpdateField<int> UiChromieTimeExpansionID = new(98, 107);
@@ -3534,26 +3555,25 @@ namespace Game.Entities
public UpdateField<short> DEBUGSoulbindConduitRank = new(98, 110);
public UpdateField<DungeonScoreData> DungeonScore = new(98, 111);
public UpdateFieldArray<ObjectGuid> InvSlots = new(199, 112, 113);
public UpdateFieldArray<uint> TrackResourceMask = new(2, 312, 313);
public UpdateFieldArray<ulong> ExploredZones = new(240, 315, 316);
public UpdateFieldArray<RestInfo> RestInfo = new(2, 556, 557);
public UpdateFieldArray<int> ModDamageDonePos = new(7, 559, 560);
public UpdateFieldArray<int> ModDamageDoneNeg = new(7, 559, 567);
public UpdateFieldArray<float> ModDamageDonePercent = new(7, 559, 574);
public UpdateFieldArray<float> ModHealingDonePercent = new(7, 559, 581);
public UpdateFieldArray<float> WeaponDmgMultipliers = new(3, 588, 589);
public UpdateFieldArray<float> WeaponAtkSpeedMultipliers = new(3, 588, 592);
public UpdateFieldArray<uint> BuybackPrice = new(12, 595, 596);
public UpdateFieldArray<uint> BuybackTimestamp = new(12, 595, 608);
public UpdateFieldArray<uint> CombatRatings = new(32, 620, 621);
public UpdateFieldArray<PVPInfo> PvpInfo = new(6, 653, 654);
public UpdateFieldArray<uint> NoReagentCostMask = new(4, 660, 661);
public UpdateFieldArray<uint> ProfessionSkillLine = new(2, 665, 666);
public UpdateFieldArray<uint> BagSlotFlags = new(4, 668, 669);
public UpdateFieldArray<uint> BankBagSlotFlags = new(7, 673, 674);
public UpdateFieldArray<ulong> QuestCompleted = new(875, 681, 682);
public UpdateFieldArray<ulong> ExploredZones = new(240, 312, 313);
public UpdateFieldArray<RestInfo> RestInfo = new(2, 553, 554);
public UpdateFieldArray<int> ModDamageDonePos = new(7, 556, 557);
public UpdateFieldArray<int> ModDamageDoneNeg = new(7, 556, 564);
public UpdateFieldArray<float> ModDamageDonePercent = new(7, 556, 571);
public UpdateFieldArray<float> ModHealingDonePercent = new(7, 556, 578);
public UpdateFieldArray<float> WeaponDmgMultipliers = new(3, 585, 586);
public UpdateFieldArray<float> WeaponAtkSpeedMultipliers = new(3, 585, 589);
public UpdateFieldArray<uint> BuybackPrice = new(12, 592, 593);
public UpdateFieldArray<uint> BuybackTimestamp = new(12, 592, 605);
public UpdateFieldArray<uint> CombatRatings = new(32, 617, 618);
public UpdateFieldArray<PVPInfo> PvpInfo = new(6, 650, 651);
public UpdateFieldArray<uint> NoReagentCostMask = new(4, 657, 658);
public UpdateFieldArray<uint> ProfessionSkillLine = new(2, 662, 663);
public UpdateFieldArray<uint> BagSlotFlags = new(4, 665, 666);
public UpdateFieldArray<uint> BankBagSlotFlags = new(7, 670, 671);
public UpdateFieldArray<ulong> QuestCompleted = new(875, 678, 679);
public ActivePlayerData() : base(0, TypeId.ActivePlayer, 1557) { }
public ActivePlayerData() : base(0, TypeId.ActivePlayer, 1554) { }
public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver)
{
@@ -3572,10 +3592,6 @@ namespace Game.Entities
data.WriteUInt32(CharacterPoints);
data.WriteUInt32(MaxTalentTiers);
data.WriteUInt32(TrackCreatureMask);
for (int i = 0; i < 2; ++i)
{
data.WriteUInt32(TrackResourceMask[i]);
}
data.WriteFloat(MainhandExpertise);
data.WriteFloat(OffhandExpertise);
data.WriteFloat(RangedExpertise);
@@ -4611,150 +4627,140 @@ namespace Game.Entities
}
}
if (changesMask[312])
{
for (int i = 0; i < 2; ++i)
{
if (changesMask[313 + i])
{
data.WriteUInt32(TrackResourceMask[i]);
}
}
}
if (changesMask[315])
{
for (int i = 0; i < 240; ++i)
{
if (changesMask[316 + i])
if (changesMask[313 + i])
{
data.WriteUInt64(ExploredZones[i]);
}
}
}
if (changesMask[556])
if (changesMask[553])
{
for (int i = 0; i < 2; ++i)
{
if (changesMask[557 + i])
if (changesMask[554 + i])
{
RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
if (changesMask[559])
if (changesMask[556])
{
for (int i = 0; i < 7; ++i)
{
if (changesMask[560 + i])
if (changesMask[557 + i])
{
data.WriteInt32(ModDamageDonePos[i]);
}
if (changesMask[567 + i])
if (changesMask[564 + i])
{
data.WriteInt32(ModDamageDoneNeg[i]);
}
if (changesMask[574 + i])
if (changesMask[571 + i])
{
data.WriteFloat(ModDamageDonePercent[i]);
}
if (changesMask[581 + i])
if (changesMask[578 + i])
{
data.WriteFloat(ModHealingDonePercent[i]);
}
}
}
if (changesMask[588])
if (changesMask[585])
{
for (int i = 0; i < 3; ++i)
{
if (changesMask[589 + i])
if (changesMask[586 + i])
{
data.WriteFloat(WeaponDmgMultipliers[i]);
}
if (changesMask[592 + i])
if (changesMask[589 + i])
{
data.WriteFloat(WeaponAtkSpeedMultipliers[i]);
}
}
}
if (changesMask[595])
if (changesMask[592])
{
for (int i = 0; i < 12; ++i)
{
if (changesMask[596 + i])
if (changesMask[593 + i])
{
data.WriteUInt32(BuybackPrice[i]);
}
if (changesMask[608 + i])
if (changesMask[605 + i])
{
data.WriteUInt32(BuybackTimestamp[i]);
}
}
}
if (changesMask[620])
if (changesMask[617])
{
for (int i = 0; i < 32; ++i)
{
if (changesMask[621 + i])
if (changesMask[618 + i])
{
data.WriteUInt32(CombatRatings[i]);
}
}
}
if (changesMask[660])
if (changesMask[657])
{
for (int i = 0; i < 4; ++i)
{
if (changesMask[661 + i])
if (changesMask[658 + i])
{
data.WriteUInt32(NoReagentCostMask[i]);
}
}
}
if (changesMask[665])
if (changesMask[662])
{
for (int i = 0; i < 2; ++i)
{
if (changesMask[666 + i])
if (changesMask[663 + i])
{
data.WriteUInt32(ProfessionSkillLine[i]);
}
}
}
if (changesMask[668])
if (changesMask[665])
{
for (int i = 0; i < 4; ++i)
{
if (changesMask[669 + i])
if (changesMask[666 + i])
{
data.WriteUInt32(BagSlotFlags[i]);
}
}
}
if (changesMask[673])
if (changesMask[670])
{
for (int i = 0; i < 7; ++i)
{
if (changesMask[674 + i])
if (changesMask[671 + i])
{
data.WriteUInt32(BankBagSlotFlags[i]);
}
}
}
if (changesMask[681])
if (changesMask[678])
{
for (int i = 0; i < 875; ++i)
{
if (changesMask[682 + i])
if (changesMask[679 + i])
{
data.WriteUInt64(QuestCompleted[i]);
}
}
}
if (changesMask[653])
if (changesMask[650])
{
for (int i = 0; i < 6; ++i)
{
if (changesMask[654 + i])
if (changesMask[651 + i])
{
PvpInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
@@ -4873,7 +4879,6 @@ namespace Game.Entities
ClearChangesMask(DEBUGSoulbindConduitRank);
ClearChangesMask(DungeonScore);
ClearChangesMask(InvSlots);
ClearChangesMask(TrackResourceMask);
ClearChangesMask(ExploredZones);
ClearChangesMask(RestInfo);
ClearChangesMask(ModDamageDonePos);
@@ -5429,6 +5434,31 @@ namespace Game.Entities
}
}
public class VisualAnim : BaseUpdateData<AreaTrigger>
{
public UpdateField<bool> Field_C = new(0, 1);
public UpdateField<uint> AnimationDataID = new(0, 2);
public UpdateField<uint> AnimKitID = new(0, 3);
public UpdateField<uint> AnimProgress = new(0, 4);
public VisualAnim() : base(0, TypeId.AreaTrigger, 5) { }
void WriteCreate(WorldPacket data, AreaTrigger owner, Player receiver)
{
}
void WriteUpdate(WorldPacket data, bool ignoreChangesMask, AreaTrigger owner, Player receiver)
{
}
public override void ClearChangesMask()
{
}
}
public class AreaTriggerFieldData : BaseUpdateData<AreaTrigger>
{
public UpdateField<ScaleCurve> OverrideScaleCurve = new(0, 1);
@@ -5444,8 +5474,10 @@ namespace Game.Entities
public UpdateField<float> BoundsRadius2D = new(0, 11);
public UpdateField<uint> DecalPropertiesID = new(0, 12);
public UpdateField<ObjectGuid> CreatingEffectGUID = new(0, 13);
public UpdateField<ObjectGuid> Field_80 = new(0, 14);
public UpdateField<VisualAnim> VisualAnim = new(0, 15);
public AreaTriggerFieldData() : base(0, TypeId.AreaTrigger, 14) { }
public AreaTriggerFieldData() : base(0, TypeId.AreaTrigger, 16) { }
public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, AreaTrigger owner, Player receiver)
{
@@ -5690,9 +5722,10 @@ namespace Game.Entities
public UpdateField<List<ConversationLine>> Lines = new(0, 2);
public DynamicUpdateField<ConversationActorField> Actors = new(0, 3);
public UpdateField<uint> LastLineEndTime = new(0, 4);
public UpdateField<uint>Progress = new(0, 5);
public UpdateField<uint> Progress = new(0, 5);
public UpdateField<uint> Flags = new(0, 6);
public ConversationData() : base(0, TypeId.Conversation, 6) { }
public ConversationData() : base(0, TypeId.Conversation, 7) { }
public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Conversation owner, Player receiver)
{
@@ -459,10 +459,6 @@ namespace Game.Entities
bool hasMorphCurveID = createProperties != null && createProperties.MorphCurveId != 0;
bool hasFacingCurveID = createProperties != null && createProperties.FacingCurveId != 0;
bool hasMoveCurveID = createProperties != null && createProperties.MoveCurveId != 0;
bool hasAnimation = createProperties != null && createProperties.AnimId != 0;
bool hasUnk3 = areaTriggerTemplate != null && areaTriggerTemplate.HasFlag(AreaTriggerFlags.Unk3);
bool hasAnimKitID = createProperties != null && createProperties.AnimKitId != 0;
bool hasAnimProgress = false;
bool hasAreaTriggerSphere = shape.IsSphere();
bool hasAreaTriggerBox = shape.IsBox();
bool hasAreaTriggerPolygon = createProperties != null && shape.IsPolygon();
@@ -482,10 +478,6 @@ namespace Game.Entities
data.WriteBit(hasMorphCurveID);
data.WriteBit(hasFacingCurveID);
data.WriteBit(hasMoveCurveID);
data.WriteBit(hasAnimation);
data.WriteBit(hasAnimKitID);
data.WriteBit(hasUnk3);
data.WriteBit(hasAnimProgress);
data.WriteBit(hasAreaTriggerSphere);
data.WriteBit(hasAreaTriggerBox);
data.WriteBit(hasAreaTriggerPolygon);
@@ -494,9 +486,6 @@ namespace Game.Entities
data.WriteBit(hasOrbit);
data.WriteBit(hasMovementScript);
if (hasUnk3)
data.WriteBit(false);
data.FlushBits();
if (hasAreaTriggerSpline)
@@ -522,15 +511,6 @@ namespace Game.Entities
if (hasMoveCurveID)
data.WriteUInt32(createProperties.MoveCurveId);
if (hasAnimation)
data.WriteUInt32(createProperties.AnimId);
if (hasAnimKitID)
data.WriteUInt32(createProperties.AnimKitId);
if (hasAnimProgress)
data.WriteUInt32(0);
if (hasAreaTriggerSphere)
{
data.WriteFloat(shape.SphereDatas.Radius);
+9 -9
View File
@@ -2309,7 +2309,7 @@ namespace Game.Entities
stmt.AddValue(index++, GetMaxHealth());
for (byte i = 0; i < (int)PowerType.MaxPerClass; ++i)
stmt.AddValue(index++, GetMaxPower((PowerType)i));
stmt.AddValue(index++, m_unitData.MaxPower[i]);
for (byte i = 0; i < (int)Stats.Max; ++i)
stmt.AddValue(index++, GetStat((Stats)i));
@@ -2317,14 +2317,14 @@ namespace Game.Entities
for (int i = 0; i < (int)SpellSchools.Max; ++i)
stmt.AddValue(index++, GetResistance((SpellSchools)i));
stmt.AddValue(index++, (float)m_activePlayerData.BlockPercentage);
stmt.AddValue(index++, (float)m_activePlayerData.DodgePercentage);
stmt.AddValue(index++, (float)m_activePlayerData.ParryPercentage);
stmt.AddValue(index++, (float)m_activePlayerData.CritPercentage);
stmt.AddValue(index++, (float)m_activePlayerData.RangedCritPercentage);
stmt.AddValue(index++, (float)m_activePlayerData.SpellCritPercentage);
stmt.AddValue(index++, (int)m_unitData.AttackPower);
stmt.AddValue(index++, (int)m_unitData.RangedAttackPower);
stmt.AddValue(index++, m_activePlayerData.BlockPercentage);
stmt.AddValue(index++, m_activePlayerData.DodgePercentage);
stmt.AddValue(index++, m_activePlayerData.ParryPercentage);
stmt.AddValue(index++, m_activePlayerData.CritPercentage);
stmt.AddValue(index++, m_activePlayerData.RangedCritPercentage);
stmt.AddValue(index++, m_activePlayerData.SpellCritPercentage);
stmt.AddValue(index++, m_unitData.AttackPower);
stmt.AddValue(index++, m_unitData.RangedAttackPower);
stmt.AddValue(index++, GetBaseSpellPowerBonus());
stmt.AddValue(index, m_activePlayerData.CombatRatings[(int)CombatRating.ResiliencePlayerDamage]);
-3
View File
@@ -7436,9 +7436,6 @@ namespace Game.Entities
public void AddTrackCreatureFlag(uint flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.TrackCreatureMask), flags); }
public void RemoveTrackCreatureFlag(uint flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.TrackCreatureMask), flags); }
public void AddTrackResourceFlag(uint index, uint flags) { SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.TrackResourceMask, (int)index), flags); }
public void RemoveTrackResourceFlag(uint index, uint flags) { RemoveUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.TrackResourceMask, (int)index), flags); }
public void SetVersatilityBonus(float value) { SetUpdateFieldStatValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.VersatilityBonus), value); }
public void ApplyModOverrideSpellPowerByAPPercent(float mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.OverrideSpellPowerByAPPercent), mod, apply); }
@@ -23,7 +23,7 @@ namespace Game.Networking.Packets
public struct DungeonScoreMapSummary
{
public int ChallengeModeID;
public int MapScore;
public float MapScore;
public int BestRunLevel;
public int BestRunDurationMS;
public bool FinishedSuccess;
@@ -31,7 +31,7 @@ namespace Game.Networking.Packets
public void Write(WorldPacket data)
{
data.WriteInt32(ChallengeModeID);
data.WriteInt32(MapScore);
data.WriteFloat(MapScore);
data.WriteInt32(BestRunLevel);
data.WriteInt32(BestRunDurationMS);
data.WriteBit(FinishedSuccess);
@@ -41,12 +41,12 @@ namespace Game.Networking.Packets
public class DungeonScoreSummary
{
public int CurrentSeasonScore;
public float CurrentSeasonScore;
public List<DungeonScoreMapSummary> Runs = new();
public void Write(WorldPacket data)
{
data.WriteInt32(CurrentSeasonScore);
data.WriteFloat(CurrentSeasonScore);
data.WriteInt32(Runs.Count);
foreach (var dungeonScoreMapSummary in Runs)
dungeonScoreMapSummary.Write(data);
@@ -93,7 +93,7 @@ namespace Game.Networking.Packets
public long CompletionDate;
public int Season;
public List<MythicPlusMember> Members = new();
public int RunScore;
public float RunScore;
public int[] KeystoneAffixIDs = new int[4];
public void Write(WorldPacket data)
@@ -108,7 +108,7 @@ namespace Game.Networking.Packets
data.WriteInt32(id);
data.WriteInt32(Members.Count);
data.WriteInt32(RunScore);
data.WriteFloat(RunScore);
foreach (var member in Members)
member.Write(data);
@@ -121,12 +121,12 @@ namespace Game.Networking.Packets
{
public int KeystoneAffixID;
public MythicPlusRun Run = new();
public int Score;
public float Score;
public void Write(WorldPacket data)
{
data.WriteInt32(KeystoneAffixID);
data.WriteInt32(Score);
data.WriteFloat(Score);
Run.Write(data);
}
}
@@ -135,13 +135,13 @@ namespace Game.Networking.Packets
{
public int MapChallengeModeID;
public List<DungeonScoreBestRunForAffix> BestRuns = new();
public int OverAllScore;
public float OverAllScore;
public void Write(WorldPacket data)
{
data.WriteInt32(MapChallengeModeID);
data.WriteInt32(BestRuns.Count);
data.WriteInt32(OverAllScore);
data.WriteFloat(OverAllScore);
foreach (var bestRun in BestRuns)
bestRun.Write(data);
}
@@ -151,13 +151,13 @@ namespace Game.Networking.Packets
{
public int Season;
public List<DungeonScoreMapData> Maps = new();
public int SeasonScore;
public float SeasonScore;
public void Write(WorldPacket data)
{
data.WriteInt32(Season);
data.WriteInt32(Maps.Count);
data.WriteInt32(SeasonScore);
data.WriteFloat(SeasonScore);
foreach (var map in Maps)
map.Write(data);
}
-19
View File
@@ -1943,25 +1943,6 @@ namespace Game.Spells
target.RemoveTrackCreatureFlag(1u << (GetMiscValue() - 1));
}
[AuraEffectHandler(AuraType.TrackResources)]
void HandleAuraTrackResources(AuraApplication aurApp, AuraEffectHandleModes mode, bool apply)
{
if (!mode.HasAnyFlag(AuraEffectHandleModes.SendForClientMask))
return;
Player target = aurApp.GetTarget().ToPlayer();
if (target == null)
return;
uint bitIndex = (uint)GetMiscValue() - 1;
uint index = bitIndex / 32;
uint flag = 1u << ((int)bitIndex % 32);
if (apply)
target.AddTrackResourceFlag(index, flag);
else
target.RemoveTrackResourceFlag(index, flag);
}
[AuraEffectHandler(AuraType.TrackStealthed)]
void HandleAuraTrackStealthed(AuraApplication aurApp, AuraEffectHandleModes mode, bool apply)
{
+4 -1
View File
@@ -1632,6 +1632,7 @@ CREATE TABLE `character_stats` (
`maxpower4` int(10) unsigned NOT NULL DEFAULT '0',
`maxpower5` int(10) unsigned NOT NULL DEFAULT '0',
`maxpower6` int(10) unsigned NOT NULL DEFAULT '0',
`maxpower7` int(10) unsigned NOT NULL DEFAULT '0',
`strength` int(10) unsigned NOT NULL DEFAULT '0',
`agility` int(10) unsigned NOT NULL DEFAULT '0',
`stamina` int(10) unsigned NOT NULL DEFAULT '0',
@@ -1843,6 +1844,7 @@ CREATE TABLE `characters` (
`power4` int(10) unsigned NOT NULL DEFAULT '0',
`power5` int(10) unsigned NOT NULL DEFAULT '0',
`power6` int(10) unsigned NOT NULL DEFAULT '0',
`power7` int(10) unsigned NOT NULL DEFAULT '0',
`latency` mediumint(8) unsigned NOT NULL DEFAULT '0',
`activeTalentGroup` tinyint(3) unsigned NOT NULL DEFAULT '0',
`lootSpecId` int(10) unsigned NOT NULL DEFAULT '0',
@@ -3670,7 +3672,8 @@ INSERT INTO `updates` VALUES
('2021_10_02_01_characters.sql','F97B956F3B5F909294CA399F75B5795A07C4D8EC','ARCHIVED','2021-10-02 21:47:38',0),
('2021_10_15_00_characters.sql','906FECD65CBA7C406969F45FDF28DDEF8AAF8715','ARCHIVED','2021-10-15 10:11:47',0),
('2021_10_16_00_characters.sql','B5A31BB6FBC34512767475EDF13099DEC948EBB7','RELEASED','2021-10-16 01:12:20',0),
('2021_11_02_00_characters.sql','A3C0A6DA70CC70803C80685E4E2ED6255156520A','RELEASED','2021-11-02 18:11:13',0);
('2021_11_02_00_characters.sql','A3C0A6DA70CC70803C80685E4E2ED6255156520A','RELEASED','2021-11-02 18:11:13',0),
('2021_11_04_00_characters.sql','ED533235ADAD174F91A6B8E51D1046243B78B46D','RELEASED','2021-11-04 21:53:04',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
@@ -0,0 +1,2 @@
ALTER TABLE `characters` ADD `power7` int(10) unsigned NOT NULL DEFAULT '0' AFTER `power6`;
ALTER TABLE `character_stats` ADD `maxpower7` int(10) unsigned NOT NULL DEFAULT '0' AFTER `maxpower6`;