Core/Vehicle: Added RideSpellID field to override npc_spellclick_spells
Port From (https://github.com/TrinityCore/TrinityCore/commit/46251b56553b610588eea89b83b4b4e8b88e47da)
This commit is contained in:
@@ -1497,7 +1497,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
// // We need to be immune to all types
|
// // We need to be immune to all types
|
||||||
return (schoolImmunityMask & schoolMask) == schoolMask;
|
return (schoolImmunityMask & schoolMask) == schoolMask;
|
||||||
};
|
}
|
||||||
|
|
||||||
// If m_immuneToSchool type contain this school type, IMMUNE damage.
|
// If m_immuneToSchool type contain this school type, IMMUNE damage.
|
||||||
if (hasImmunity(m_spellImmune[(int)SpellImmunity.School]))
|
if (hasImmunity(m_spellImmune[(int)SpellImmunity.School]))
|
||||||
@@ -2745,72 +2745,8 @@ namespace Game.Entities
|
|||||||
if (!Global.ConditionMgr.IsObjectMeetingSpellClickConditions(spellClickEntry, clickInfo.spellId, clicker, this))
|
if (!Global.ConditionMgr.IsObjectMeetingSpellClickConditions(spellClickEntry, clickInfo.spellId, clicker, this))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
Unit caster = Convert.ToBoolean(clickInfo.castFlags & (byte)SpellClickCastFlags.CasterClicker) ? clicker : this;
|
spellClickHandled = HandleSpellClick(clicker, seatId, clickInfo.spellId, flags, clickInfo);
|
||||||
Unit target = Convert.ToBoolean(clickInfo.castFlags & (byte)SpellClickCastFlags.TargetClicker) ? clicker : this;
|
|
||||||
ObjectGuid origCasterGUID = Convert.ToBoolean(clickInfo.castFlags & (byte)SpellClickCastFlags.OrigCasterOwner) ? GetOwnerGUID() : clicker.GetGUID();
|
|
||||||
|
|
||||||
SpellInfo spellEntry = Global.SpellMgr.GetSpellInfo(clickInfo.spellId, caster.GetMap().GetDifficultyID());
|
|
||||||
// if (!spellEntry) should be checked at npc_spellclick load
|
// if (!spellEntry) should be checked at npc_spellclick load
|
||||||
|
|
||||||
SpellCastResult castResult = SpellCastResult.Success;
|
|
||||||
if (seatId > -1)
|
|
||||||
{
|
|
||||||
byte i = 0;
|
|
||||||
bool valid = false;
|
|
||||||
foreach (var spellEffectInfo in spellEntry.GetEffects())
|
|
||||||
{
|
|
||||||
if (spellEffectInfo.ApplyAuraName == AuraType.ControlVehicle)
|
|
||||||
{
|
|
||||||
valid = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!valid)
|
|
||||||
{
|
|
||||||
Log.outError(LogFilter.Sql, "Spell {0} specified in npc_spellclick_spells is not a valid vehicle enter aura!", clickInfo.spellId);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsInMap(caster))
|
|
||||||
{
|
|
||||||
CastSpellExtraArgs args = new(flags);
|
|
||||||
args.OriginalCaster = origCasterGUID;
|
|
||||||
args.AddSpellMod(SpellValueMod.BasePoint0 + i, seatId + 1);
|
|
||||||
castResult = caster.CastSpell(target, clickInfo.spellId, args);
|
|
||||||
}
|
|
||||||
else // This can happen during Player._LoadAuras
|
|
||||||
{
|
|
||||||
int[] bp = new int[SpellConst.MaxEffects];
|
|
||||||
foreach (var spellEffectInfo in spellEntry.GetEffects())
|
|
||||||
bp[spellEffectInfo.EffectIndex] = (int)spellEffectInfo.BasePoints;
|
|
||||||
|
|
||||||
bp[i] = seatId;
|
|
||||||
|
|
||||||
AuraCreateInfo createInfo = new(ObjectGuid.Create(HighGuid.Cast, SpellCastSource.Normal, GetMapId(), spellEntry.Id, GetMap().GenerateLowGuid(HighGuid.Cast)), spellEntry, GetMap().GetDifficultyID(), SpellConst.MaxEffectMask, this);
|
|
||||||
createInfo.SetCaster(clicker);
|
|
||||||
createInfo.SetBaseAmount(bp);
|
|
||||||
createInfo.SetCasterGUID(origCasterGUID);
|
|
||||||
|
|
||||||
Aura.TryRefreshStackOrCreate(createInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (IsInMap(caster))
|
|
||||||
castResult = caster.CastSpell(target, spellEntry.Id, new CastSpellExtraArgs().SetOriginalCaster(origCasterGUID));
|
|
||||||
else
|
|
||||||
{
|
|
||||||
AuraCreateInfo createInfo = new(ObjectGuid.Create(HighGuid.Cast, SpellCastSource.Normal, GetMapId(), spellEntry.Id, GetMap().GenerateLowGuid(HighGuid.Cast)), spellEntry, GetMap().GetDifficultyID(), SpellConst.MaxEffectMask, this);
|
|
||||||
createInfo.SetCaster(clicker);
|
|
||||||
createInfo.SetCasterGUID(origCasterGUID);
|
|
||||||
|
|
||||||
Aura.TryRefreshStackOrCreate(createInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
spellClickHandled = castResult == SpellCastResult.Success;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Creature creature = ToCreature();
|
Creature creature = ToCreature();
|
||||||
@@ -2818,6 +2754,92 @@ namespace Game.Entities
|
|||||||
creature.GetAI().OnSpellClick(clicker, ref spellClickHandled);
|
creature.GetAI().OnSpellClick(clicker, ref spellClickHandled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool HandleSpellClick(Unit clicker, sbyte seatId, uint spellId, TriggerCastFlags flags = TriggerCastFlags.None, SpellClickInfo spellClickInfo = null)
|
||||||
|
{
|
||||||
|
Unit caster = clicker;
|
||||||
|
Unit target = this;
|
||||||
|
ObjectGuid origCasterGUID = caster.GetGUID();
|
||||||
|
SpellCastResult castResult = SpellCastResult.Success;
|
||||||
|
|
||||||
|
if (spellClickInfo != null)
|
||||||
|
{
|
||||||
|
caster = (spellClickInfo.castFlags & (byte)SpellClickCastFlags.CasterClicker) != 0 ? clicker : this;
|
||||||
|
target = (spellClickInfo.castFlags & (byte)SpellClickCastFlags.TargetClicker) != 0 ? clicker : this;
|
||||||
|
origCasterGUID = (spellClickInfo.castFlags & (byte)SpellClickCastFlags.OrigCasterOwner) != 0 ? GetOwnerGUID() : clicker.GetGUID();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spellId == 0)
|
||||||
|
{
|
||||||
|
Log.outError(LogFilter.Sql, $"No valid spell specified for clickee {target.GetGUID()} and clicker {caster.GetGUID()}!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
SpellInfo spellEntry = Global.SpellMgr.GetSpellInfo(spellId, caster.GetMap().GetDifficultyID());
|
||||||
|
|
||||||
|
byte effectIndex = 0;
|
||||||
|
bool hasControlVehicleAura = false;
|
||||||
|
foreach (SpellEffectInfo spellEffectInfo in spellEntry.GetEffects())
|
||||||
|
{
|
||||||
|
if (spellEffectInfo.ApplyAuraName == AuraType.ControlVehicle)
|
||||||
|
{
|
||||||
|
hasControlVehicleAura = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
++effectIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (seatId > -1)
|
||||||
|
{
|
||||||
|
if (!hasControlVehicleAura)
|
||||||
|
{
|
||||||
|
if (spellClickInfo == null)
|
||||||
|
Log.outError(LogFilter.Sql, $"RideSpell {spellId} specified in vehicle_accessory or vehicle_template_accessory is not a valid vehicle enter aura!");
|
||||||
|
else
|
||||||
|
Log.outError(LogFilter.Sql, $"Spell {spellId} specified in npc_spellclick_spells is not a valid vehicle enter aura!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsInMap(caster))
|
||||||
|
{
|
||||||
|
CastSpellExtraArgs args = new(flags);
|
||||||
|
args.OriginalCaster = origCasterGUID;
|
||||||
|
args.AddSpellMod(SpellValueMod.BasePoint0 + effectIndex, seatId + 1);
|
||||||
|
castResult = caster.CastSpell(target, spellId, args);
|
||||||
|
}
|
||||||
|
else // This can happen during Player::_LoadAuras
|
||||||
|
{
|
||||||
|
int[] bp = new int[SpellConst.MaxEffects];
|
||||||
|
foreach (SpellEffectInfo spellEffectInfo in spellEntry.GetEffects())
|
||||||
|
bp[spellEffectInfo.EffectIndex] = (int)spellEffectInfo.BasePoints;
|
||||||
|
|
||||||
|
bp[effectIndex] = seatId;
|
||||||
|
|
||||||
|
AuraCreateInfo createInfo = new(ObjectGuid.Create(HighGuid.Cast, SpellCastSource.Normal, GetMapId(), spellEntry.Id, GetMap().GenerateLowGuid(HighGuid.Cast)), spellEntry, GetMap().GetDifficultyID(), SpellConst.MaxEffectMask, this);
|
||||||
|
createInfo.SetCaster(clicker);
|
||||||
|
createInfo.SetBaseAmount(bp);
|
||||||
|
createInfo.SetCasterGUID(origCasterGUID);
|
||||||
|
|
||||||
|
Aura.TryRefreshStackOrCreate(createInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (IsInMap(caster))
|
||||||
|
castResult = caster.CastSpell(target, spellEntry.Id, new CastSpellExtraArgs().SetOriginalCaster(origCasterGUID));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AuraCreateInfo createInfo = new(ObjectGuid.Create(HighGuid.Cast, SpellCastSource.Normal, GetMapId(), spellEntry.Id, GetMap().GenerateLowGuid(HighGuid.Cast)), spellEntry, GetMap().GetDifficultyID(), SpellConst.MaxEffectMask, this);
|
||||||
|
createInfo.SetCaster(clicker);
|
||||||
|
createInfo.SetCasterGUID(origCasterGUID);
|
||||||
|
|
||||||
|
|
||||||
|
Aura.TryRefreshStackOrCreate(createInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return castResult == SpellCastResult.Success;
|
||||||
|
}
|
||||||
|
|
||||||
public bool HasAura(uint spellId, ObjectGuid casterGUID = default, ObjectGuid itemCasterGUID = default, uint reqEffMask = 0)
|
public bool HasAura(uint spellId, ObjectGuid casterGUID = default, ObjectGuid itemCasterGUID = default, uint reqEffMask = 0)
|
||||||
{
|
{
|
||||||
return GetAuraApplication(spellId, casterGUID, itemCasterGUID, reqEffMask) != null;
|
return GetAuraApplication(spellId, casterGUID, itemCasterGUID, reqEffMask) != null;
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ namespace Game.Entities
|
|||||||
// Set or remove correct flags based on available seats. Will overwrite db data (if wrong).
|
// Set or remove correct flags based on available seats. Will overwrite db data (if wrong).
|
||||||
if (UsableSeatNum != 0)
|
if (UsableSeatNum != 0)
|
||||||
_me.SetNpcFlag(_me.IsTypeId(TypeId.Player) ? NPCFlags.PlayerVehicle : NPCFlags.SpellClick);
|
_me.SetNpcFlag(_me.IsTypeId(TypeId.Player) ? NPCFlags.PlayerVehicle : NPCFlags.SpellClick);
|
||||||
else if(unit.m_unitData.InteractSpellID == 0)
|
else if (unit.m_unitData.InteractSpellID == 0)
|
||||||
_me.RemoveNpcFlag(_me.IsTypeId(TypeId.Player) ? NPCFlags.PlayerVehicle : NPCFlags.SpellClick);
|
_me.RemoveNpcFlag(_me.IsTypeId(TypeId.Player) ? NPCFlags.PlayerVehicle : NPCFlags.SpellClick);
|
||||||
|
|
||||||
InitMovementInfoForBase();
|
InitMovementInfoForBase();
|
||||||
@@ -74,7 +74,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
foreach (var acc in accessories)
|
foreach (var acc in accessories)
|
||||||
if (!evading || acc.IsMinion) // only install minions on evade mode
|
if (!evading || acc.IsMinion) // only install minions on evade mode
|
||||||
InstallAccessory(acc.AccessoryEntry, acc.SeatId, acc.IsMinion, acc.SummonedType, acc.SummonTime);
|
InstallAccessory(acc.AccessoryEntry, acc.SeatId, acc.IsMinion, acc.SummonedType, acc.SummonTime, acc.RideSpellID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Uninstall()
|
public void Uninstall()
|
||||||
@@ -261,7 +261,7 @@ namespace Game.Entities
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InstallAccessory(uint entry, sbyte seatId, bool minion, byte type, uint summonTime)
|
void InstallAccessory(uint entry, sbyte seatId, bool minion, byte type, uint summonTime, uint? rideSpellId = null)
|
||||||
{
|
{
|
||||||
// @Prevent adding accessories when vehicle is uninstalling. (Bad script in OnUninstall/OnRemovePassenger/PassengerBoarded hook.)
|
// @Prevent adding accessories when vehicle is uninstalling. (Bad script in OnUninstall/OnRemovePassenger/PassengerBoarded hook.)
|
||||||
|
|
||||||
@@ -280,7 +280,10 @@ namespace Game.Entities
|
|||||||
if (minion)
|
if (minion)
|
||||||
accessory.AddUnitTypeMask(UnitTypeMask.Accessory);
|
accessory.AddUnitTypeMask(UnitTypeMask.Accessory);
|
||||||
|
|
||||||
_me.HandleSpellClick(accessory, seatId);
|
if (rideSpellId.HasValue)
|
||||||
|
_me.HandleSpellClick(accessory, seatId, rideSpellId.Value);
|
||||||
|
else
|
||||||
|
_me.HandleSpellClick(accessory, seatId);
|
||||||
|
|
||||||
// If for some reason adding accessory to vehicle fails it will unsummon in
|
// If for some reason adding accessory to vehicle fails it will unsummon in
|
||||||
// @VehicleJoinEvent.Abort
|
// @VehicleJoinEvent.Abort
|
||||||
@@ -362,7 +365,7 @@ namespace Game.Entities
|
|||||||
var seat = GetSeatKeyValuePairForPassenger(unit);
|
var seat = GetSeatKeyValuePairForPassenger(unit);
|
||||||
Cypher.Assert(seat.Value != null);
|
Cypher.Assert(seat.Value != null);
|
||||||
|
|
||||||
Log.outDebug( LogFilter.Vehicle, "Unit {0} exit vehicle entry {1} id {2} dbguid {3} seat {4}",
|
Log.outDebug(LogFilter.Vehicle, "Unit {0} exit vehicle entry {1} id {2} dbguid {3} seat {4}",
|
||||||
unit.GetName(), _me.GetEntry(), _vehicleInfo.Id, _me.GetGUID().ToString(), seat.Key);
|
unit.GetName(), _me.GetEntry(), _vehicleInfo.Id, _me.GetGUID().ToString(), seat.Key);
|
||||||
|
|
||||||
if (seat.Value.SeatInfo.CanEnterOrExit() && ++UsableSeatNum != 0)
|
if (seat.Value.SeatInfo.CanEnterOrExit() && ++UsableSeatNum != 0)
|
||||||
@@ -392,7 +395,7 @@ namespace Game.Entities
|
|||||||
_me.ToCreature().GetAI().PassengerBoarded(unit, seat.Key, false);
|
_me.ToCreature().GetAI().PassengerBoarded(unit, seat.Key, false);
|
||||||
|
|
||||||
if (GetBase().IsTypeId(TypeId.Unit))
|
if (GetBase().IsTypeId(TypeId.Unit))
|
||||||
Global.ScriptMgr.OnRemovePassenger(this, unit);
|
Global.ScriptMgr.OnRemovePassenger(this, unit);
|
||||||
|
|
||||||
unit.SetVehicle(null);
|
unit.SetVehicle(null);
|
||||||
return this;
|
return this;
|
||||||
@@ -535,7 +538,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public void RemovePendingEventsForPassenger(Unit passenger)
|
public void RemovePendingEventsForPassenger(Unit passenger)
|
||||||
{
|
{
|
||||||
for (var i = 0; i< _pendingJoinEvents.Count; ++i)
|
for (var i = 0; i < _pendingJoinEvents.Count; ++i)
|
||||||
{
|
{
|
||||||
var joinEvent = _pendingJoinEvents[i];
|
var joinEvent = _pendingJoinEvents[i];
|
||||||
if (joinEvent.Passenger == passenger)
|
if (joinEvent.Passenger == passenger)
|
||||||
@@ -797,19 +800,21 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public struct VehicleAccessory
|
public struct VehicleAccessory
|
||||||
{
|
{
|
||||||
public VehicleAccessory(uint entry, sbyte seatId, bool isMinion, byte summonType, uint summonTime)
|
public VehicleAccessory(uint entry, sbyte seatId, bool isMinion, byte summonType, uint summonTime, uint? rideSpellID)
|
||||||
{
|
{
|
||||||
AccessoryEntry = entry;
|
AccessoryEntry = entry;
|
||||||
IsMinion = isMinion;
|
IsMinion = isMinion;
|
||||||
SummonTime = summonTime;
|
SummonTime = summonTime;
|
||||||
SeatId = seatId;
|
SeatId = seatId;
|
||||||
SummonedType = summonType;
|
SummonedType = summonType;
|
||||||
|
RideSpellID = rideSpellID;
|
||||||
}
|
}
|
||||||
public uint AccessoryEntry;
|
public uint AccessoryEntry;
|
||||||
public bool IsMinion;
|
public bool IsMinion;
|
||||||
public uint SummonTime;
|
public uint SummonTime;
|
||||||
public sbyte SeatId;
|
public sbyte SeatId;
|
||||||
public byte SummonedType;
|
public byte SummonedType;
|
||||||
|
public uint? RideSpellID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class VehicleTemplate
|
public class VehicleTemplate
|
||||||
|
|||||||
@@ -11404,8 +11404,8 @@ namespace Game
|
|||||||
|
|
||||||
uint count = 0;
|
uint count = 0;
|
||||||
|
|
||||||
// 0 1 2 3 4 5
|
// 0 1 2 3 4 5 6
|
||||||
SQLResult result = DB.World.Query("SELECT `entry`, `accessory_entry`, `seat_id`, `minion`, `summontype`, `summontimer` FROM `vehicle_template_accessory`");
|
SQLResult result = DB.World.Query("SELECT `entry`, `accessory_entry`, `seat_id`, `minion`, `summontype`, `summontimer`, `RideSpellID` FROM `vehicle_template_accessory`");
|
||||||
if (result.IsEmpty())
|
if (result.IsEmpty())
|
||||||
{
|
{
|
||||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 vehicle template accessories. DB table `vehicle_template_accessory` is empty.");
|
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 vehicle template accessories. DB table `vehicle_template_accessory` is empty.");
|
||||||
@@ -11421,6 +11421,18 @@ namespace Game
|
|||||||
byte summonType = result.Read<byte>(4);
|
byte summonType = result.Read<byte>(4);
|
||||||
uint summonTimer = result.Read<uint>(5);
|
uint summonTimer = result.Read<uint>(5);
|
||||||
|
|
||||||
|
uint? rideSpellId = null;
|
||||||
|
if (!result.IsNull(6))
|
||||||
|
{
|
||||||
|
rideSpellId = result.Read<uint>(6);
|
||||||
|
|
||||||
|
if (!Global.SpellMgr.HasSpellInfo(rideSpellId.Value, Difficulty.None))
|
||||||
|
{
|
||||||
|
Log.outError(LogFilter.Sql, $"Table `vehicle_template_accessory`: rideSpellId {rideSpellId} does not exist for entry {entry}.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (GetCreatureTemplate(entry) == null)
|
if (GetCreatureTemplate(entry) == null)
|
||||||
{
|
{
|
||||||
Log.outError(LogFilter.Sql, "Table `vehicle_template_accessory`: creature template entry {0} does not exist.", entry);
|
Log.outError(LogFilter.Sql, "Table `vehicle_template_accessory`: creature template entry {0} does not exist.", entry);
|
||||||
@@ -11439,7 +11451,7 @@ namespace Game
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
_vehicleTemplateAccessoryStore.Add(entry, new VehicleAccessory(accessory, seatId, isMinion, summonType, summonTimer));
|
_vehicleTemplateAccessoryStore.Add(entry, new VehicleAccessory(accessory, seatId, isMinion, summonType, summonTimer, rideSpellId));
|
||||||
|
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
@@ -11455,8 +11467,8 @@ namespace Game
|
|||||||
|
|
||||||
uint count = 0;
|
uint count = 0;
|
||||||
|
|
||||||
// 0 1 2 3 4 5
|
// 0 1 2 3 4 5 6
|
||||||
SQLResult result = DB.World.Query("SELECT `guid`, `accessory_entry`, `seat_id`, `minion`, `summontype`, `summontimer` FROM `vehicle_accessory`");
|
SQLResult result = DB.World.Query("SELECT `guid`, `accessory_entry`, `seat_id`, `minion`, `summontype`, `summontimer`, `RideSpellID` FROM `vehicle_accessory`");
|
||||||
|
|
||||||
if (result.IsEmpty())
|
if (result.IsEmpty())
|
||||||
{
|
{
|
||||||
@@ -11473,13 +11485,25 @@ namespace Game
|
|||||||
byte uiSummonType = result.Read<byte>(4);
|
byte uiSummonType = result.Read<byte>(4);
|
||||||
uint uiSummonTimer = result.Read<uint>(5);
|
uint uiSummonTimer = result.Read<uint>(5);
|
||||||
|
|
||||||
|
uint? rideSpellId = null;
|
||||||
|
if (!result.IsNull(6))
|
||||||
|
{
|
||||||
|
rideSpellId = result.Read<uint>(6);
|
||||||
|
|
||||||
|
if (!Global.SpellMgr.HasSpellInfo(rideSpellId.Value, Difficulty.None))
|
||||||
|
{
|
||||||
|
Log.outError(LogFilter.Sql, $"Table `vehicle_accessory`: rideSpellId {rideSpellId} does not exist for guid {uiGUID}.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (GetCreatureTemplate(uiAccessory) == null)
|
if (GetCreatureTemplate(uiAccessory) == null)
|
||||||
{
|
{
|
||||||
Log.outError(LogFilter.Sql, "Table `vehicle_accessory`: Accessory {0} does not exist.", uiAccessory);
|
Log.outError(LogFilter.Sql, "Table `vehicle_accessory`: Accessory {0} does not exist.", uiAccessory);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
_vehicleAccessoryStore.Add(uiGUID, new VehicleAccessory(uiAccessory, uiSeat, bMinion, uiSummonType, uiSummonTimer));
|
_vehicleAccessoryStore.Add(uiGUID, new VehicleAccessory(uiAccessory, uiSeat, bMinion, uiSummonType, uiSummonTimer, rideSpellId));
|
||||||
|
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user