mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 04:37:00 +00:00
Script refactoring done as per previous cores
Script name now no longer exists in creature_template, item_template, instance_template, and gameobject_template. They are now held in the script_binding table.
This commit is contained in:
parent
8580efa00f
commit
a2537e7954
8 changed files with 75 additions and 16 deletions
|
|
@ -2339,7 +2339,8 @@ std::string Creature::GetScriptName() const
|
||||||
|
|
||||||
uint32 Creature::GetScriptId() const
|
uint32 Creature::GetScriptId() const
|
||||||
{
|
{
|
||||||
return ObjectMgr::GetCreatureTemplate(GetEntry())->ScriptID;
|
// scripts bound to DB guid have priority over ones bound to creature entry
|
||||||
|
return sScriptMgr.GetBoundScriptId(SCRIPTED_UNIT, -int32(GetGUIDLow())) ? sScriptMgr.GetBoundScriptId(SCRIPTED_UNIT, -int32(GetGUIDLow())) : sScriptMgr.GetBoundScriptId(SCRIPTED_UNIT, GetEntry());
|
||||||
}
|
}
|
||||||
|
|
||||||
VendorItemData const* Creature::GetVendorItems() const
|
VendorItemData const* Creature::GetVendorItems() const
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,6 @@ struct CreatureInfo
|
||||||
uint32 vendorId;
|
uint32 vendorId;
|
||||||
uint32 MechanicImmuneMask;
|
uint32 MechanicImmuneMask;
|
||||||
uint32 ExtraFlags;
|
uint32 ExtraFlags;
|
||||||
uint32 ScriptID;
|
|
||||||
|
|
||||||
// helpers
|
// helpers
|
||||||
HighGuid GetHighGuid() const
|
HighGuid GetHighGuid() const
|
||||||
|
|
|
||||||
|
|
@ -426,7 +426,6 @@ struct GameObjectInfo
|
||||||
uint32 unk2;
|
uint32 unk2;
|
||||||
uint32 MinMoneyLoot;
|
uint32 MinMoneyLoot;
|
||||||
uint32 MaxMoneyLoot;
|
uint32 MaxMoneyLoot;
|
||||||
uint32 ScriptId;
|
|
||||||
|
|
||||||
// helpers
|
// helpers
|
||||||
bool IsDespawnAtAction() const
|
bool IsDespawnAtAction() const
|
||||||
|
|
|
||||||
|
|
@ -622,8 +622,7 @@ struct ItemPrototype
|
||||||
float ArmorDamageModifier;
|
float ArmorDamageModifier;
|
||||||
uint32 Duration;
|
uint32 Duration;
|
||||||
uint32 ItemLimitCategory; // id from ItemLimitCategory.dbc
|
uint32 ItemLimitCategory; // id from ItemLimitCategory.dbc
|
||||||
uint32 HolidayId; // id from Holidays.dbc
|
uint32 HolidayId;
|
||||||
uint32 ScriptId;
|
|
||||||
uint32 DisenchantID;
|
uint32 DisenchantID;
|
||||||
uint32 FoodType;
|
uint32 FoodType;
|
||||||
float StatScalingFactor;
|
float StatScalingFactor;
|
||||||
|
|
|
||||||
|
|
@ -571,7 +571,7 @@ void ObjectMgr::LoadCreatureTemplates()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (difficultyInfo->ScriptID)
|
if (sScriptMgr.GetBoundScriptId(SCRIPTED_UNIT, difficultyInfo->Entry))
|
||||||
{
|
{
|
||||||
sLog.outErrorDb("Difficulty %u mode creature (Entry: %u) has `ScriptName`, but in any case will used difficulty 0 mode creature (Entry: %u) ScriptName.",
|
sLog.outErrorDb("Difficulty %u mode creature (Entry: %u) has `ScriptName`, but in any case will used difficulty 0 mode creature (Entry: %u) ScriptName.",
|
||||||
diff + 1, cInfo->DifficultyEntry[diff], i);
|
diff + 1, cInfo->DifficultyEntry[diff], i);
|
||||||
|
|
|
||||||
|
|
@ -44,20 +44,21 @@
|
||||||
// };
|
// };
|
||||||
//
|
//
|
||||||
|
|
||||||
const char CreatureInfosrcfmt[] = "iiiiiiiiiisssiiiiiiiiiiifffiffiifiiiiiiiiiiiffiiiiiiiiiiiiiiisiiffliiiiiiiliiiiiis";
|
const char CreatureInfosrcfmt[] = "iiiiiiiiiisssiiiiiiiiiiifffiffiifiiiiiiiiiiiffiiiiiiiiiiiiiiisiiffliiiiiiiliiiiii";
|
||||||
const char CreatureInfodstfmt[] = "iiiiiiiiiisssiiiiiiiiiiifffiffiifiiiiiiiiiiiffiiiiiiiiiiiiiiisiiffliiiiiiiliiiiiii";
|
const char CreatureInfodstfmt[] = "iiiiiiiiiisssiiiiiiiiiiifffiffiifiiiiiiiiiiiffiiiiiiiiiiiiiiisiiffliiiiiiiliiiiii";
|
||||||
const char CreatureDataAddonInfofmt[] = "iiibbiis";
|
const char CreatureDataAddonInfofmt[] = "iiibbiis";
|
||||||
const char CreatureModelfmt[] = "iffbii";
|
const char CreatureModelfmt[] = "iffbii";
|
||||||
const char CreatureInfoAddonInfofmt[] = "iiibbiis";
|
const char CreatureInfoAddonInfofmt[] = "iiibbiis";
|
||||||
const char GameObjectInfoAddonInfofmt[] = "iffff";
|
const char GameObjectInfoAddonInfofmt[] = "iffff";
|
||||||
const char EquipmentInfofmt[] = "iiii";
|
const char EquipmentInfofmt[] = "iiii";
|
||||||
const char GameObjectInfosrcfmt[] = "iiissssiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis";
|
const char GameObjectInfosrcfmt[] = "iiissssiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii";
|
||||||
const char GameObjectInfodstfmt[] = "iiissssiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii";
|
const char GameObjectInfodstfmt[] = "iiissssiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii";
|
||||||
const char ItemPrototypesrcfmt[] = "iiiisiiiiffiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiifiiisiifiiiii";
|
// 1 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160
|
||||||
const char ItemPrototypedstfmt[] = "iiiisiiiiffiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiifiiiiiifiiiii";
|
const char ItemPrototypesrcfmt[] = "iiiisiiiiffiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiifiiiiifiiiii";
|
||||||
|
const char ItemPrototypedstfmt[] = "iiiisiiiiffiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiifiiiiifiiiii";
|
||||||
const char PageTextfmt[] = "isi";
|
const char PageTextfmt[] = "isi";
|
||||||
const char InstanceTemplatesrcfmt[] = "iiiis";
|
const char InstanceTemplatesrcfmt[] = "iiii";
|
||||||
const char InstanceTemplatedstfmt[] = "iiiii";
|
const char InstanceTemplatedstfmt[] = "iiii";
|
||||||
const char WorldTemplatesrcfmt[] = "is";
|
const char WorldTemplatesrcfmt[] = "is";
|
||||||
const char WorldTemplatedstfmt[] = "ii";
|
const char WorldTemplatedstfmt[] = "ii";
|
||||||
const char ConditionsSrcFmt[] = "iiii";
|
const char ConditionsSrcFmt[] = "iiii";
|
||||||
|
|
|
||||||
|
|
@ -1191,6 +1191,67 @@ void Map::RemoveFromActive(WorldObject* obj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Map::CreateInstanceData(bool load)
|
||||||
|
{
|
||||||
|
if (i_data != NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 i_script_id = GetScriptId();
|
||||||
|
|
||||||
|
if (!i_script_id)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
i_data = sScriptMgr.CreateInstanceData(this);
|
||||||
|
if (!i_data)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (load)
|
||||||
|
{
|
||||||
|
// TODO: make a global storage for this
|
||||||
|
QueryResult* result;
|
||||||
|
|
||||||
|
if (Instanceable())
|
||||||
|
{
|
||||||
|
result = CharacterDatabase.PQuery("SELECT data FROM instance WHERE id = '%u'", i_InstanceId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = CharacterDatabase.PQuery("SELECT data FROM world WHERE map = '%u'", GetId());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
Field* fields = result->Fetch();
|
||||||
|
const char* data = fields[0].GetString();
|
||||||
|
if (data)
|
||||||
|
{
|
||||||
|
DEBUG_LOG("Loading instance data for `%s` (Map: %u Instance: %u)", sScriptMgr.GetScriptName(i_script_id), GetId(), i_InstanceId);
|
||||||
|
i_data->Load(data);
|
||||||
|
}
|
||||||
|
delete result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// for non-instanceable map always add data to table if not found, later code expected that for map in `word` exist always after load
|
||||||
|
if (!Instanceable())
|
||||||
|
{
|
||||||
|
CharacterDatabase.PExecute("INSERT INTO world VALUES ('%u', '')", GetId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DEBUG_LOG("New instance data, \"%s\" ,initialized!", sScriptMgr.GetScriptName(i_script_id));
|
||||||
|
i_data->Initialize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
void Map::CreateInstanceData(bool load)
|
void Map::CreateInstanceData(bool load)
|
||||||
{
|
{
|
||||||
if (i_data != NULL)
|
if (i_data != NULL)
|
||||||
|
|
@ -1247,7 +1308,7 @@ void Map::CreateInstanceData(bool load)
|
||||||
DEBUG_LOG("New instance data, \"%s\" ,initialized!", sScriptMgr.GetScriptName(i_script_id));
|
DEBUG_LOG("New instance data, \"%s\" ,initialized!", sScriptMgr.GetScriptName(i_script_id));
|
||||||
i_data->Initialize();
|
i_data->Initialize();
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
|
|
||||||
void Map::SetWeather(uint32 zoneId, WeatherType type, float grade, bool permanently)
|
void Map::SetWeather(uint32 zoneId, WeatherType type, float grade, bool permanently)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,6 @@ struct InstanceTemplate
|
||||||
// or 0 (not related to continent 0 map id)
|
// or 0 (not related to continent 0 map id)
|
||||||
uint32 levelMin;
|
uint32 levelMin;
|
||||||
uint32 levelMax;
|
uint32 levelMax;
|
||||||
uint32 script_id;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct WorldTemplate
|
struct WorldTemplate
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue