Core/Vehicles: add a way to delay the Vehicle despawn Time if its needed.
Port From (https://github.com/TrinityCore/TrinityCore/commit/c7b10d3c5fd082faf6c2835239e340babc3dfc76)
This commit is contained in:
@@ -232,7 +232,7 @@ namespace Game.Entities
|
|||||||
SetInventorySlotCount(InventorySlots.DefaultSize);
|
SetInventorySlotCount(InventorySlots.DefaultSize);
|
||||||
|
|
||||||
// set starting level
|
// set starting level
|
||||||
SetLevel((uint)GetStartLevel(createInfo.RaceId, createInfo.ClassId, createInfo.TemplateSet));
|
SetLevel(GetStartLevel(createInfo.RaceId, createInfo.ClassId, createInfo.TemplateSet));
|
||||||
|
|
||||||
InitRunes();
|
InitRunes();
|
||||||
|
|
||||||
|
|||||||
@@ -966,7 +966,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
if (vehicle.GetBase().HasUnitTypeMask(UnitTypeMask.Minion) && vehicle.GetBase().IsTypeId(TypeId.Unit))
|
if (vehicle.GetBase().HasUnitTypeMask(UnitTypeMask.Minion) && vehicle.GetBase().IsTypeId(TypeId.Unit))
|
||||||
if (((Minion)vehicle.GetBase()).GetOwner() == this)
|
if (((Minion)vehicle.GetBase()).GetOwner() == this)
|
||||||
vehicle.GetBase().ToCreature().DespawnOrUnsummon();
|
vehicle.GetBase().ToCreature().DespawnOrUnsummon(vehicle.GetDespawnDelay());
|
||||||
|
|
||||||
if (HasUnitTypeMask(UnitTypeMask.Accessory))
|
if (HasUnitTypeMask(UnitTypeMask.Accessory))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -509,6 +509,15 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TimeSpan GetDespawnDelay()
|
||||||
|
{
|
||||||
|
VehicleTemplate vehicleTemplate = Global.ObjectMgr.GetVehicleTemplate(this);
|
||||||
|
if (vehicleTemplate != null)
|
||||||
|
return vehicleTemplate.DespawnDelay;
|
||||||
|
|
||||||
|
return TimeSpan.FromMilliseconds(1);
|
||||||
|
}
|
||||||
|
|
||||||
public Unit GetBase() { return _me; }
|
public Unit GetBase() { return _me; }
|
||||||
public VehicleRecord GetVehicleInfo() { return _vehicleInfo; }
|
public VehicleRecord GetVehicleInfo() { return _vehicleInfo; }
|
||||||
public uint GetCreatureEntry() { return _creatureEntry; }
|
public uint GetCreatureEntry() { return _creatureEntry; }
|
||||||
@@ -718,4 +727,9 @@ namespace Game.Entities
|
|||||||
public sbyte SeatId;
|
public sbyte SeatId;
|
||||||
public byte SummonedType;
|
public byte SummonedType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class VehicleTemplate
|
||||||
|
{
|
||||||
|
public TimeSpan DespawnDelay;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10022,6 +10022,38 @@ namespace Game
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Vehicles
|
//Vehicles
|
||||||
|
public void LoadVehicleTemplate()
|
||||||
|
{
|
||||||
|
uint oldMSTime = Time.GetMSTime();
|
||||||
|
|
||||||
|
_vehicleTemplateStore.Clear();
|
||||||
|
|
||||||
|
// 0 1
|
||||||
|
SQLResult result = DB.World.Query("SELECT creatureId, despawnDelayMs FROM vehicle_template");
|
||||||
|
if (result.IsEmpty())
|
||||||
|
{
|
||||||
|
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 vehicle template. DB table `vehicle_template` is empty.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
uint creatureId = result.Read<uint>(0);
|
||||||
|
|
||||||
|
if (Global.ObjectMgr.GetCreatureTemplate(creatureId) == null)
|
||||||
|
{
|
||||||
|
Log.outError(LogFilter.Sql, $"Table `vehicle_template`: Vehicle {creatureId} does not exist.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
VehicleTemplate vehicleTemplate = new VehicleTemplate();
|
||||||
|
vehicleTemplate.DespawnDelay = TimeSpan.FromMilliseconds(result.Read<int>(1));
|
||||||
|
_vehicleTemplateStore[creatureId] = vehicleTemplate;
|
||||||
|
|
||||||
|
} while (result.NextRow());
|
||||||
|
|
||||||
|
Log.outInfo(LogFilter.ServerLoading, $"Loaded {_vehicleTemplateStore.Count} Vehicle Template entries in {Time.GetMSTimeDiffToNow(oldMSTime)} ms");
|
||||||
|
}
|
||||||
public void LoadVehicleTemplateAccessories()
|
public void LoadVehicleTemplateAccessories()
|
||||||
{
|
{
|
||||||
uint oldMSTime = Time.GetMSTime();
|
uint oldMSTime = Time.GetMSTime();
|
||||||
@@ -10073,6 +10105,7 @@ namespace Game
|
|||||||
|
|
||||||
Log.outInfo(LogFilter.ServerLoading, "Loaded {0} Vehicle Template Accessories in {1} ms", count, Time.GetMSTimeDiffToNow(oldMSTime));
|
Log.outInfo(LogFilter.ServerLoading, "Loaded {0} Vehicle Template Accessories in {1} ms", count, Time.GetMSTimeDiffToNow(oldMSTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadVehicleAccessories()
|
public void LoadVehicleAccessories()
|
||||||
{
|
{
|
||||||
uint oldMSTime = Time.GetMSTime();
|
uint oldMSTime = Time.GetMSTime();
|
||||||
@@ -10114,6 +10147,10 @@ namespace Game
|
|||||||
Log.outInfo(LogFilter.ServerLoading, "Loaded {0} Vehicle Accessories in {1} ms", count, Time.GetMSTimeDiffToNow(oldMSTime));
|
Log.outInfo(LogFilter.ServerLoading, "Loaded {0} Vehicle Accessories in {1} ms", count, Time.GetMSTimeDiffToNow(oldMSTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public VehicleTemplate GetVehicleTemplate(Vehicle veh)
|
||||||
|
{
|
||||||
|
return _vehicleTemplateStore.LookupByKey(veh.GetCreatureEntry());
|
||||||
|
}
|
||||||
public List<VehicleAccessory> GetVehicleAccessoryList(Vehicle veh)
|
public List<VehicleAccessory> GetVehicleAccessoryList(Vehicle veh)
|
||||||
{
|
{
|
||||||
Creature cre = veh.GetBase().ToCreature();
|
Creature cre = veh.GetBase().ToCreature();
|
||||||
@@ -10239,6 +10276,7 @@ namespace Game
|
|||||||
MultiMap<uint, string> _petHalfName1 = new MultiMap<uint, string>();
|
MultiMap<uint, string> _petHalfName1 = new MultiMap<uint, string>();
|
||||||
|
|
||||||
//Vehicles
|
//Vehicles
|
||||||
|
Dictionary<uint, VehicleTemplate> _vehicleTemplateStore = new Dictionary<uint, VehicleTemplate>();
|
||||||
MultiMap<uint, VehicleAccessory> _vehicleTemplateAccessoryStore = new MultiMap<uint, VehicleAccessory>();
|
MultiMap<uint, VehicleAccessory> _vehicleTemplateAccessoryStore = new MultiMap<uint, VehicleAccessory>();
|
||||||
MultiMap<ulong, VehicleAccessory> _vehicleAccessoryStore = new MultiMap<ulong, VehicleAccessory>();
|
MultiMap<ulong, VehicleAccessory> _vehicleAccessoryStore = new MultiMap<ulong, VehicleAccessory>();
|
||||||
|
|
||||||
|
|||||||
@@ -652,6 +652,9 @@ namespace Game
|
|||||||
Log.outInfo(LogFilter.ServerLoading, "Loading NPCSpellClick Data..."); // must be after LoadQuests
|
Log.outInfo(LogFilter.ServerLoading, "Loading NPCSpellClick Data..."); // must be after LoadQuests
|
||||||
Global.ObjectMgr.LoadNPCSpellClickSpells();
|
Global.ObjectMgr.LoadNPCSpellClickSpells();
|
||||||
|
|
||||||
|
Log.outInfo(LogFilter.ServerLoading, "Loading Vehicle Templates...");
|
||||||
|
Global.ObjectMgr.LoadVehicleTemplate(); // must be after LoadCreatureTemplates()
|
||||||
|
|
||||||
Log.outInfo(LogFilter.ServerLoading, "Loading Vehicle Template Accessories...");
|
Log.outInfo(LogFilter.ServerLoading, "Loading Vehicle Template Accessories...");
|
||||||
Global.ObjectMgr.LoadVehicleTemplateAccessories(); // must be after LoadCreatureTemplates() and LoadNPCSpellClickSpells()
|
Global.ObjectMgr.LoadVehicleTemplateAccessories(); // must be after LoadCreatureTemplates() and LoadNPCSpellClickSpells()
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
--
|
||||||
|
-- Table structure for table `vehicle_template`
|
||||||
|
--
|
||||||
|
DROP TABLE IF EXISTS `vehicle_template`;
|
||||||
|
CREATE TABLE `vehicle_template` (
|
||||||
|
`creatureId` int(10) unsigned NOT NULL,
|
||||||
|
`despawnDelayMs` int(11) NOT NULL DEFAULT '0',
|
||||||
|
PRIMARY KEY (`creatureId`)
|
||||||
|
) ENGINE=MyISAM;
|
||||||
|
|
||||||
|
DELETE FROM `command` WHERE `name`='reload vehicle_template';
|
||||||
|
INSERT INTO `command` (`name`,`permission`,`help`) VALUES
|
||||||
|
('reload vehicle_template', 881, "Syntax: .reload vehicle_template
|
||||||
|
|
||||||
|
Reloads vehicle template definitions from the database.");
|
||||||
Reference in New Issue
Block a user