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:
Charles A Edwards 2016-08-10 14:31:06 +01:00 committed by Antz
parent 8580efa00f
commit a2537e7954
8 changed files with 75 additions and 16 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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;

View file

@ -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);

View file

@ -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";

View file

@ -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)
{ {

View file

@ -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