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
|
||||
{
|
||||
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
|
||||
|
|
|
|||
|
|
@ -145,7 +145,6 @@ struct CreatureInfo
|
|||
uint32 vendorId;
|
||||
uint32 MechanicImmuneMask;
|
||||
uint32 ExtraFlags;
|
||||
uint32 ScriptID;
|
||||
|
||||
// helpers
|
||||
HighGuid GetHighGuid() const
|
||||
|
|
|
|||
|
|
@ -426,7 +426,6 @@ struct GameObjectInfo
|
|||
uint32 unk2;
|
||||
uint32 MinMoneyLoot;
|
||||
uint32 MaxMoneyLoot;
|
||||
uint32 ScriptId;
|
||||
|
||||
// helpers
|
||||
bool IsDespawnAtAction() const
|
||||
|
|
|
|||
|
|
@ -622,8 +622,7 @@ struct ItemPrototype
|
|||
float ArmorDamageModifier;
|
||||
uint32 Duration;
|
||||
uint32 ItemLimitCategory; // id from ItemLimitCategory.dbc
|
||||
uint32 HolidayId; // id from Holidays.dbc
|
||||
uint32 ScriptId;
|
||||
uint32 HolidayId;
|
||||
uint32 DisenchantID;
|
||||
uint32 FoodType;
|
||||
float StatScalingFactor;
|
||||
|
|
|
|||
|
|
@ -571,7 +571,7 @@ void ObjectMgr::LoadCreatureTemplates()
|
|||
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.",
|
||||
diff + 1, cInfo->DifficultyEntry[diff], i);
|
||||
|
|
|
|||
|
|
@ -44,20 +44,21 @@
|
|||
// };
|
||||
//
|
||||
|
||||
const char CreatureInfosrcfmt[] = "iiiiiiiiiisssiiiiiiiiiiifffiffiifiiiiiiiiiiiffiiiiiiiiiiiiiiisiiffliiiiiiiliiiiiis";
|
||||
const char CreatureInfodstfmt[] = "iiiiiiiiiisssiiiiiiiiiiifffiffiifiiiiiiiiiiiffiiiiiiiiiiiiiiisiiffliiiiiiiliiiiiii";
|
||||
const char CreatureInfosrcfmt[] = "iiiiiiiiiisssiiiiiiiiiiifffiffiifiiiiiiiiiiiffiiiiiiiiiiiiiiisiiffliiiiiiiliiiiii";
|
||||
const char CreatureInfodstfmt[] = "iiiiiiiiiisssiiiiiiiiiiifffiffiifiiiiiiiiiiiffiiiiiiiiiiiiiiisiiffliiiiiiiliiiiii";
|
||||
const char CreatureDataAddonInfofmt[] = "iiibbiis";
|
||||
const char CreatureModelfmt[] = "iffbii";
|
||||
const char CreatureInfoAddonInfofmt[] = "iiibbiis";
|
||||
const char GameObjectInfoAddonInfofmt[] = "iffff";
|
||||
const char EquipmentInfofmt[] = "iiii";
|
||||
const char GameObjectInfosrcfmt[] = "iiissssiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis";
|
||||
const char GameObjectInfodstfmt[] = "iiissssiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii";
|
||||
const char ItemPrototypesrcfmt[] = "iiiisiiiiffiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiifiiisiifiiiii";
|
||||
const char ItemPrototypedstfmt[] = "iiiisiiiiffiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiifiiiiiifiiiii";
|
||||
const char GameObjectInfosrcfmt[] = "iiissssiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii";
|
||||
const char GameObjectInfodstfmt[] = "iiissssiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii";
|
||||
// 1 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160
|
||||
const char ItemPrototypesrcfmt[] = "iiiisiiiiffiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiifiiiiifiiiii";
|
||||
const char ItemPrototypedstfmt[] = "iiiisiiiiffiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiifiiiiifiiiii";
|
||||
const char PageTextfmt[] = "isi";
|
||||
const char InstanceTemplatesrcfmt[] = "iiiis";
|
||||
const char InstanceTemplatedstfmt[] = "iiiii";
|
||||
const char InstanceTemplatesrcfmt[] = "iiii";
|
||||
const char InstanceTemplatedstfmt[] = "iiii";
|
||||
const char WorldTemplatesrcfmt[] = "is";
|
||||
const char WorldTemplatedstfmt[] = "ii";
|
||||
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)
|
||||
{
|
||||
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));
|
||||
i_data->Initialize();
|
||||
}
|
||||
}
|
||||
} */
|
||||
|
||||
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)
|
||||
uint32 levelMin;
|
||||
uint32 levelMax;
|
||||
uint32 script_id;
|
||||
};
|
||||
|
||||
struct WorldTemplate
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue