mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 19:37:03 +00:00
[10912] Move scripting related functions from ObjectMgr to ScriptMgr
This commit is contained in:
parent
f61166c2bf
commit
0d6f990e4e
23 changed files with 1297 additions and 1185 deletions
|
|
@ -25,6 +25,7 @@
|
|||
#include "Log.h"
|
||||
#include "MapManager.h"
|
||||
#include "ObjectGuid.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "SpellMgr.h"
|
||||
#include "UpdateMask.h"
|
||||
#include "World.h"
|
||||
|
|
@ -51,14 +52,6 @@
|
|||
|
||||
INSTANTIATE_SINGLETON_1(ObjectMgr);
|
||||
|
||||
ScriptMapMap sQuestEndScripts;
|
||||
ScriptMapMap sQuestStartScripts;
|
||||
ScriptMapMap sSpellScripts;
|
||||
ScriptMapMap sGameObjectScripts;
|
||||
ScriptMapMap sEventScripts;
|
||||
ScriptMapMap sGossipScripts;
|
||||
ScriptMapMap sCreatureMovementScripts;
|
||||
|
||||
bool normalizePlayerName(std::string& name)
|
||||
{
|
||||
if(name.empty())
|
||||
|
|
@ -494,7 +487,7 @@ struct SQLCreatureLoader : public SQLStorageLoaderBase<SQLCreatureLoader>
|
|||
template<class D>
|
||||
void convert_from_str(uint32 /*field_pos*/, char const *src, D &dst)
|
||||
{
|
||||
dst = D(sObjectMgr.GetScriptId(src));
|
||||
dst = D(sScriptMgr.GetScriptId(src));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -1870,7 +1863,7 @@ struct SQLItemLoader : public SQLStorageLoaderBase<SQLItemLoader>
|
|||
template<class D>
|
||||
void convert_from_str(uint32 /*field_pos*/, char const *src, D &dst)
|
||||
{
|
||||
dst = D(sObjectMgr.GetScriptId(src));
|
||||
dst = D(sScriptMgr.GetScriptId(src));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -4553,594 +4546,6 @@ void ObjectMgr::LoadQuestLocales()
|
|||
sLog.outString( ">> Loaded %lu Quest locale strings", (unsigned long)mQuestLocaleMap.size() );
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadScripts(ScriptMapMap& scripts, char const* tablename)
|
||||
{
|
||||
if (sWorld.IsScriptScheduled()) // function don't must be called in time scripts use.
|
||||
return;
|
||||
|
||||
sLog.outString("%s :", tablename);
|
||||
|
||||
scripts.clear(); // need for reload support
|
||||
|
||||
QueryResult *result = WorldDatabase.PQuery("SELECT id, delay, command, datalong, datalong2, datalong3, datalong4, data_flags, dataint, dataint2, dataint3, dataint4, x, y, z, o FROM %s", tablename);
|
||||
|
||||
uint32 count = 0;
|
||||
|
||||
if (!result)
|
||||
{
|
||||
barGoLink bar(1);
|
||||
bar.step();
|
||||
|
||||
sLog.outString();
|
||||
sLog.outString(">> Loaded %u script definitions", count);
|
||||
return;
|
||||
}
|
||||
|
||||
barGoLink bar((int)result->GetRowCount());
|
||||
|
||||
do
|
||||
{
|
||||
bar.step();
|
||||
|
||||
Field *fields = result->Fetch();
|
||||
ScriptInfo tmp;
|
||||
tmp.id = fields[0].GetUInt32();
|
||||
tmp.delay = fields[1].GetUInt32();
|
||||
tmp.command = fields[2].GetUInt32();
|
||||
tmp.raw.data[0] = fields[3].GetUInt32();
|
||||
tmp.raw.data[1] = fields[4].GetUInt32();
|
||||
tmp.raw.data[2] = fields[5].GetUInt32();
|
||||
tmp.raw.data[3] = fields[6].GetUInt32();
|
||||
tmp.raw.data[4] = fields[7].GetUInt32();
|
||||
tmp.raw.data[5] = fields[8].GetInt32();
|
||||
tmp.raw.data[6] = fields[9].GetInt32();
|
||||
tmp.raw.data[7] = fields[10].GetInt32();
|
||||
tmp.raw.data[8] = fields[11].GetInt32();
|
||||
tmp.x = fields[12].GetFloat();
|
||||
tmp.y = fields[13].GetFloat();
|
||||
tmp.z = fields[14].GetFloat();
|
||||
tmp.o = fields[15].GetFloat();
|
||||
|
||||
// generic command args check
|
||||
switch(tmp.command)
|
||||
{
|
||||
case SCRIPT_COMMAND_TALK:
|
||||
{
|
||||
if (tmp.talk.chatType > CHAT_TYPE_ZONE_YELL)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has invalid CHAT_TYPE_ (datalong = %u) in SCRIPT_COMMAND_TALK for script id %u", tablename, tmp.talk.chatType, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (tmp.talk.creatureEntry && !GetCreatureTemplate(tmp.talk.creatureEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_TALK for script id %u, but this creature_template does not exist.", tablename, tmp.talk.creatureEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (tmp.talk.creatureEntry && !tmp.talk.searchRadius)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_TALK for script id %u, but search radius is too small (datalong3 = %u).", tablename, tmp.talk.creatureEntry, tmp.id, tmp.talk.searchRadius);
|
||||
continue;
|
||||
}
|
||||
if (!GetLanguageDescByID(tmp.talk.language))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong4 = %u in SCRIPT_COMMAND_TALK for script id %u, but this language does not exist.", tablename, tmp.talk.language, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (tmp.talk.textId[0] == 0)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has invalid talk text id (dataint = %i) in SCRIPT_COMMAND_TALK for script id %u", tablename, tmp.talk.textId[0], tmp.id);
|
||||
continue;
|
||||
}
|
||||
|
||||
for(int i = 0; i < MAX_TEXT_ID; ++i)
|
||||
{
|
||||
if (tmp.talk.textId[i] && (tmp.talk.textId[i] < MIN_DB_SCRIPT_STRING_ID || tmp.talk.textId[i] >= MAX_DB_SCRIPT_STRING_ID))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has out of range text id (dataint = %i expected %u-%u) in SCRIPT_COMMAND_TALK for script id %u", tablename, tmp.talk.textId[i], MIN_DB_SCRIPT_STRING_ID, MAX_DB_SCRIPT_STRING_ID, tmp.id);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// if (!GetMangosStringLocale(tmp.dataint)) will be checked after db_script_string loading
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_EMOTE:
|
||||
{
|
||||
if (!sEmotesStore.LookupEntry(tmp.emote.emoteId))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has invalid emote id (datalong = %u) in SCRIPT_COMMAND_EMOTE for script id %u", tablename, tmp.emote.emoteId, tmp.id);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_TELEPORT_TO:
|
||||
{
|
||||
if (!sMapStore.LookupEntry(tmp.teleportTo.mapId))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has invalid map (Id: %u) in SCRIPT_COMMAND_TELEPORT_TO for script id %u", tablename, tmp.teleportTo.mapId, tmp.id);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!MaNGOS::IsValidMapCoord(tmp.x, tmp.y, tmp.z, tmp.o))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has invalid coordinates (X: %f Y: %f) in SCRIPT_COMMAND_TELEPORT_TO for script id %u", tablename, tmp.x, tmp.y, tmp.id);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_QUEST_EXPLORED:
|
||||
{
|
||||
Quest const* quest = GetQuestTemplate(tmp.questExplored.questId);
|
||||
if (!quest)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has invalid quest (ID: %u) in SCRIPT_COMMAND_QUEST_EXPLORED in `datalong` for script id %u", tablename, tmp.questExplored.questId, tmp.id);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!quest->HasSpecialFlag(QUEST_SPECIAL_FLAG_EXPLORATION_OR_EVENT))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has quest (ID: %u) in SCRIPT_COMMAND_QUEST_EXPLORED in `datalong` for script id %u, but quest not have flag QUEST_SPECIAL_FLAG_EXPLORATION_OR_EVENT in quest flags. Script command or quest flags wrong. Quest modified to require objective.", tablename, tmp.questExplored.questId, tmp.id);
|
||||
|
||||
// this will prevent quest completing without objective
|
||||
const_cast<Quest*>(quest)->SetSpecialFlag(QUEST_SPECIAL_FLAG_EXPLORATION_OR_EVENT);
|
||||
|
||||
// continue; - quest objective requirement set and command can be allowed
|
||||
}
|
||||
|
||||
if (float(tmp.questExplored.distance) > DEFAULT_VISIBILITY_DISTANCE)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has too large distance (%u) for exploring objective complete in `datalong2` in SCRIPT_COMMAND_QUEST_EXPLORED in `datalong` for script id %u",
|
||||
tablename, tmp.questExplored.distance, tmp.id);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tmp.questExplored.distance && float(tmp.questExplored.distance) > DEFAULT_VISIBILITY_DISTANCE)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has too large distance (%u) for exploring objective complete in `datalong2` in SCRIPT_COMMAND_QUEST_EXPLORED in `datalong` for script id %u, max distance is %f or 0 for disable distance check",
|
||||
tablename, tmp.questExplored.distance, tmp.id, DEFAULT_VISIBILITY_DISTANCE);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tmp.questExplored.distance && float(tmp.questExplored.distance) < INTERACTION_DISTANCE)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has too small distance (%u) for exploring objective complete in `datalong2` in SCRIPT_COMMAND_QUEST_EXPLORED in `datalong` for script id %u, min distance is %f or 0 for disable distance check",
|
||||
tablename, tmp.questExplored.distance, tmp.id, INTERACTION_DISTANCE);
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_KILL_CREDIT:
|
||||
{
|
||||
if (!GetCreatureTemplate(tmp.killCredit.creatureEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has invalid creature (Entry: %u) in SCRIPT_COMMAND_KILL_CREDIT for script id %u", tablename, tmp.killCredit.creatureEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_RESPAWN_GAMEOBJECT:
|
||||
{
|
||||
GameObjectData const* data = GetGOData(tmp.GetGOGuid());
|
||||
if (!data)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has invalid gameobject (GUID: %u) in SCRIPT_COMMAND_RESPAWN_GAMEOBJECT for script id %u", tablename, tmp.GetGOGuid(), tmp.id);
|
||||
continue;
|
||||
}
|
||||
|
||||
GameObjectInfo const* info = GetGameObjectInfo(data->id);
|
||||
if (!info)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has gameobject with invalid entry (GUID: %u Entry: %u) in SCRIPT_COMMAND_RESPAWN_GAMEOBJECT for script id %u", tablename, tmp.GetGOGuid(), data->id, tmp.id);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (info->type == GAMEOBJECT_TYPE_FISHINGNODE ||
|
||||
info->type == GAMEOBJECT_TYPE_FISHINGHOLE ||
|
||||
info->type == GAMEOBJECT_TYPE_DOOR ||
|
||||
info->type == GAMEOBJECT_TYPE_BUTTON ||
|
||||
info->type == GAMEOBJECT_TYPE_TRAP)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` have gameobject type (%u) unsupported by command SCRIPT_COMMAND_RESPAWN_GAMEOBJECT for script id %u", tablename, info->id, tmp.id);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_TEMP_SUMMON_CREATURE:
|
||||
{
|
||||
if (!MaNGOS::IsValidMapCoord(tmp.x, tmp.y, tmp.z, tmp.o))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has invalid coordinates (X: %f Y: %f) in SCRIPT_COMMAND_TEMP_SUMMON_CREATURE for script id %u", tablename, tmp.x, tmp.y, tmp.id);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!GetCreatureTemplate(tmp.summonCreature.creatureEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has invalid creature (Entry: %u) in SCRIPT_COMMAND_TEMP_SUMMON_CREATURE for script id %u", tablename, tmp.summonCreature.creatureEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_OPEN_DOOR:
|
||||
case SCRIPT_COMMAND_CLOSE_DOOR:
|
||||
{
|
||||
GameObjectData const* data = GetGOData(tmp.GetGOGuid());
|
||||
if (!data)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has invalid gameobject (GUID: %u) in %s for script id %u", tablename, tmp.GetGOGuid(), (tmp.command == SCRIPT_COMMAND_OPEN_DOOR ? "SCRIPT_COMMAND_OPEN_DOOR" : "SCRIPT_COMMAND_CLOSE_DOOR"), tmp.id);
|
||||
continue;
|
||||
}
|
||||
|
||||
GameObjectInfo const* info = GetGameObjectInfo(data->id);
|
||||
if (!info)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has gameobject with invalid entry (GUID: %u Entry: %u) in %s for script id %u", tablename, tmp.GetGOGuid(), data->id, (tmp.command == SCRIPT_COMMAND_OPEN_DOOR ? "SCRIPT_COMMAND_OPEN_DOOR" : "SCRIPT_COMMAND_CLOSE_DOOR"), tmp.id);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (info->type != GAMEOBJECT_TYPE_DOOR)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has gameobject type (%u) non supported by command %s for script id %u", tablename, info->id, (tmp.command == SCRIPT_COMMAND_OPEN_DOOR ? "SCRIPT_COMMAND_OPEN_DOOR" : "SCRIPT_COMMAND_CLOSE_DOOR"), tmp.id);
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_REMOVE_AURA:
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(tmp.removeAura.spellId))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` using nonexistent spell (id: %u) in SCRIPT_COMMAND_REMOVE_AURA or SCRIPT_COMMAND_CAST_SPELL for script id %u",
|
||||
tablename, tmp.removeAura.spellId, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (tmp.removeAura.isSourceTarget & ~0x1) // 1 bits (0,1)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` using unknown flags in datalong2 (%u)i n SCRIPT_COMMAND_CAST_SPELL for script id %u",
|
||||
tablename, tmp.removeAura.isSourceTarget, tmp.id);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_CAST_SPELL:
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(tmp.castSpell.spellId))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` using nonexistent spell (id: %u) in SCRIPT_COMMAND_REMOVE_AURA or SCRIPT_COMMAND_CAST_SPELL for script id %u",
|
||||
tablename, tmp.castSpell.spellId, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (tmp.castSpell.flags & ~0x3) // 2 bits
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` using unknown flags in datalong2 (%u)i n SCRIPT_COMMAND_CAST_SPELL for script id %u",
|
||||
tablename, tmp.castSpell.flags, tmp.id);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_CREATE_ITEM:
|
||||
{
|
||||
if (!GetItemPrototype(tmp.createItem.itemEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has nonexistent item (entry: %u) in SCRIPT_COMMAND_CREATE_ITEM for script id %u",
|
||||
tablename, tmp.createItem.itemEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (!tmp.createItem.amount)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` SCRIPT_COMMAND_CREATE_ITEM but amount is %u for script id %u",
|
||||
tablename, tmp.createItem.amount, tmp.id);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_DESPAWN_SELF:
|
||||
{
|
||||
// for later, we might consider despawn by database guid, and define in datalong2 as option to despawn self.
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_PLAY_MOVIE:
|
||||
{
|
||||
if (!sMovieStore.LookupEntry(tmp.playMovie.movieId))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` use non-existing movie_id (id: %u) in SCRIPT_COMMAND_PLAY_MOVIE for script id %u",
|
||||
tablename, tmp.playMovie.movieId, tmp.id);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_MOVEMENT:
|
||||
{
|
||||
if (tmp.movement.movementType >= MAX_DB_MOTION_TYPE)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` SCRIPT_COMMAND_MOVEMENT has invalid MovementType %u for script id %u",
|
||||
tablename, tmp.movement.movementType, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (tmp.movement.creatureEntry && !GetCreatureTemplate(tmp.movement.creatureEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MOVEMENT for script id %u, but this creature_template does not exist.", tablename, tmp.movement.creatureEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (tmp.movement.creatureEntry && !tmp.movement.searchRadius)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MOVEMENT for script id %u, but search radius is too small (datalong3 = %u).", tablename, tmp.movement.creatureEntry, tmp.id, tmp.movement.searchRadius);
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_SET_ACTIVEOBJECT:
|
||||
{
|
||||
if (tmp.activeObject.creatureEntry && !GetCreatureTemplate(tmp.activeObject.creatureEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_SET_ACTIVEOBJECT for script id %u, but this creature_template does not exist.", tablename, tmp.activeObject.creatureEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (tmp.activeObject.creatureEntry && !tmp.activeObject.searchRadius)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_SET_ACTIVEOBJECT for script id %u, but search radius is too small (datalong3 = %u).", tablename, tmp.activeObject.creatureEntry, tmp.id, tmp.activeObject.searchRadius);
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_SET_FACTION:
|
||||
{
|
||||
if (tmp.faction.factionId && !sFactionStore.LookupEntry(tmp.faction.factionId))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_SET_FACTION for script id %u, but this faction does not exist.", tablename, tmp.faction.factionId, tmp.id);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tmp.faction.creatureEntry && !GetCreatureTemplate(tmp.faction.creatureEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_SET_FACTION for script id %u, but this creature_template does not exist.", tablename, tmp.faction.creatureEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (tmp.faction.creatureEntry && !tmp.faction.searchRadius)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_SET_FACTION for script id %u, but search radius is too small (datalong3 = %u).", tablename, tmp.faction.creatureEntry, tmp.id, tmp.faction.searchRadius);
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL:
|
||||
{
|
||||
if (tmp.morph.flags & 0x01)
|
||||
{
|
||||
if (tmp.morph.creatureOrModelEntry && !sCreatureDisplayInfoStore.LookupEntry(tmp.morph.creatureOrModelEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL for script id %u, but this model does not exist.", tablename, tmp.morph.creatureOrModelEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (tmp.morph.creatureOrModelEntry && !GetCreatureTemplate(tmp.morph.creatureOrModelEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL for script id %u, but this creature_template does not exist.", tablename, tmp.morph.creatureOrModelEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (tmp.morph.creatureEntry && !GetCreatureTemplate(tmp.morph.creatureEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL for script id %u, but this creature_template does not exist.", tablename, tmp.morph.creatureEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (tmp.morph.creatureEntry && !tmp.morph.searchRadius)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MORPH_TO_ENTRY_OR_MODEL for script id %u, but search radius is too small (datalong3 = %u).", tablename, tmp.morph.creatureEntry, tmp.id, tmp.morph.searchRadius);
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_MOUNT_TO_ENTRY_OR_MODEL:
|
||||
{
|
||||
if (tmp.mount.flags & 0x01)
|
||||
{
|
||||
if (tmp.mount.creatureOrModelEntry && !sCreatureDisplayInfoStore.LookupEntry(tmp.mount.creatureOrModelEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MOUNT_TO_ENTRY_OR_MODEL for script id %u, but this model does not exist.", tablename, tmp.mount.creatureOrModelEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (tmp.mount.creatureOrModelEntry && !GetCreatureTemplate(tmp.mount.creatureOrModelEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MOUNT_TO_ENTRY_OR_MODEL for script id %u, but this creature_template does not exist.", tablename, tmp.mount.creatureOrModelEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (tmp.mount.creatureEntry && !GetCreatureTemplate(tmp.mount.creatureEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MOUNT_TO_ENTRY_OR_MODEL for script id %u, but this creature_template does not exist.", tablename, tmp.mount.creatureEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (tmp.mount.creatureEntry && !tmp.mount.searchRadius)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_MOUNT_TO_ENTRY_OR_MODEL for script id %u, but search radius is too small (datalong3 = %u).", tablename, tmp.mount.creatureEntry, tmp.id, tmp.mount.searchRadius);
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SCRIPT_COMMAND_SET_RUN:
|
||||
{
|
||||
if (tmp.run.creatureEntry && !GetCreatureTemplate(tmp.run.creatureEntry))
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_SET_RUN for script id %u, but this creature_template does not exist.", tablename, tmp.run.creatureEntry, tmp.id);
|
||||
continue;
|
||||
}
|
||||
if (tmp.run.creatureEntry && !tmp.run.searchRadius)
|
||||
{
|
||||
sLog.outErrorDb("Table `%s` has datalong2 = %u in SCRIPT_COMMAND_SET_RUN for script id %u, but search radius is too small (datalong3 = %u).", tablename, tmp.run.creatureEntry, tmp.id, tmp.run.searchRadius);
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (scripts.find(tmp.id) == scripts.end())
|
||||
{
|
||||
ScriptMap emptyMap;
|
||||
scripts[tmp.id] = emptyMap;
|
||||
}
|
||||
scripts[tmp.id].insert(ScriptMap::value_type(tmp.delay, tmp));
|
||||
|
||||
++count;
|
||||
} while(result->NextRow());
|
||||
|
||||
delete result;
|
||||
|
||||
sLog.outString();
|
||||
sLog.outString(">> Loaded %u script definitions", count);
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadGameObjectScripts()
|
||||
{
|
||||
LoadScripts(sGameObjectScripts, "gameobject_scripts");
|
||||
|
||||
// check ids
|
||||
for(ScriptMapMap::const_iterator itr = sGameObjectScripts.begin(); itr != sGameObjectScripts.end(); ++itr)
|
||||
{
|
||||
if (!GetGOData(itr->first))
|
||||
sLog.outErrorDb("Table `gameobject_scripts` has not existing gameobject (GUID: %u) as script id", itr->first);
|
||||
}
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadQuestEndScripts()
|
||||
{
|
||||
LoadScripts(sQuestEndScripts, "quest_end_scripts");
|
||||
|
||||
// check ids
|
||||
for(ScriptMapMap::const_iterator itr = sQuestEndScripts.begin(); itr != sQuestEndScripts.end(); ++itr)
|
||||
{
|
||||
if (!GetQuestTemplate(itr->first))
|
||||
sLog.outErrorDb("Table `quest_end_scripts` has not existing quest (Id: %u) as script id", itr->first);
|
||||
}
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadQuestStartScripts()
|
||||
{
|
||||
LoadScripts(sQuestStartScripts, "quest_start_scripts");
|
||||
|
||||
// check ids
|
||||
for(ScriptMapMap::const_iterator itr = sQuestStartScripts.begin(); itr != sQuestStartScripts.end(); ++itr)
|
||||
{
|
||||
if (!GetQuestTemplate(itr->first))
|
||||
sLog.outErrorDb("Table `quest_start_scripts` has not existing quest (Id: %u) as script id", itr->first);
|
||||
}
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadSpellScripts()
|
||||
{
|
||||
LoadScripts(sSpellScripts, "spell_scripts");
|
||||
|
||||
// check ids
|
||||
for(ScriptMapMap::const_iterator itr = sSpellScripts.begin(); itr != sSpellScripts.end(); ++itr)
|
||||
{
|
||||
SpellEntry const* spellInfo = sSpellStore.LookupEntry(itr->first);
|
||||
|
||||
if (!spellInfo)
|
||||
{
|
||||
sLog.outErrorDb("Table `spell_scripts` has not existing spell (Id: %u) as script id", itr->first);
|
||||
continue;
|
||||
}
|
||||
|
||||
//check for correct spellEffect
|
||||
bool found = false;
|
||||
for(int i = 0; i < MAX_EFFECT_INDEX; ++i)
|
||||
{
|
||||
// skip empty effects
|
||||
if (!spellInfo->Effect[i])
|
||||
continue;
|
||||
|
||||
if (spellInfo->Effect[i] == SPELL_EFFECT_SCRIPT_EFFECT)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found)
|
||||
sLog.outErrorDb("Table `spell_scripts` has unsupported spell (Id: %u) without SPELL_EFFECT_SCRIPT_EFFECT (%u) spell effect", itr->first, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadEventScripts()
|
||||
{
|
||||
LoadScripts(sEventScripts, "event_scripts");
|
||||
|
||||
std::set<uint32> evt_scripts;
|
||||
|
||||
// Load all possible script entries from gameobjects
|
||||
for(uint32 i = 1; i < sGOStorage.MaxEntry; ++i)
|
||||
if (GameObjectInfo const* goInfo = sGOStorage.LookupEntry<GameObjectInfo>(i))
|
||||
if (uint32 eventId = goInfo->GetEventScriptId())
|
||||
evt_scripts.insert(eventId);
|
||||
|
||||
// Load all possible script entries from spells
|
||||
for(uint32 i = 1; i < sSpellStore.GetNumRows(); ++i)
|
||||
{
|
||||
SpellEntry const* spell = sSpellStore.LookupEntry(i);
|
||||
if (spell)
|
||||
{
|
||||
for(int j = 0; j < MAX_EFFECT_INDEX; ++j)
|
||||
{
|
||||
if (spell->Effect[j] == SPELL_EFFECT_SEND_EVENT)
|
||||
{
|
||||
if (spell->EffectMiscValue[j])
|
||||
evt_scripts.insert(spell->EffectMiscValue[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(size_t path_idx = 0; path_idx < sTaxiPathNodesByPath.size(); ++path_idx)
|
||||
{
|
||||
for(size_t node_idx = 0; node_idx < sTaxiPathNodesByPath[path_idx].size(); ++node_idx)
|
||||
{
|
||||
TaxiPathNodeEntry const& node = sTaxiPathNodesByPath[path_idx][node_idx];
|
||||
|
||||
if (node.arrivalEventID)
|
||||
evt_scripts.insert(node.arrivalEventID);
|
||||
|
||||
if (node.departureEventID)
|
||||
evt_scripts.insert(node.departureEventID);
|
||||
}
|
||||
}
|
||||
|
||||
// Then check if all scripts are in above list of possible script entries
|
||||
for(ScriptMapMap::const_iterator itr = sEventScripts.begin(); itr != sEventScripts.end(); ++itr)
|
||||
{
|
||||
std::set<uint32>::const_iterator itr2 = evt_scripts.find(itr->first);
|
||||
if (itr2 == evt_scripts.end())
|
||||
sLog.outErrorDb("Table `event_scripts` has script (Id: %u) not referring to any gameobject_template type 10 data2 field, type 3 data6 field, type 13 data 2 field or any spell effect %u or path taxi node data",
|
||||
itr->first, SPELL_EFFECT_SEND_EVENT);
|
||||
}
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadGossipScripts()
|
||||
{
|
||||
LoadScripts(sGossipScripts, "gossip_scripts");
|
||||
|
||||
// checks are done in LoadGossipMenuItems
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadCreatureMovementScripts()
|
||||
{
|
||||
LoadScripts(sCreatureMovementScripts, "creature_movement_scripts");
|
||||
|
||||
// checks are done in WaypointManager::Load
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadPageTexts()
|
||||
{
|
||||
sPageTextStore.Free(); // for reload case
|
||||
|
|
@ -5248,7 +4653,7 @@ struct SQLInstanceLoader : public SQLStorageLoaderBase<SQLInstanceLoader>
|
|||
template<class D>
|
||||
void convert_from_str(uint32 /*field_pos*/, char const *src, D &dst)
|
||||
{
|
||||
dst = D(sObjectMgr.GetScriptId(src));
|
||||
dst = D(sScriptMgr.GetScriptId(src));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -5668,134 +5073,6 @@ void ObjectMgr::LoadTavernAreaTriggers()
|
|||
sLog.outString( ">> Loaded %u tavern triggers", count );
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadAreaTriggerScripts()
|
||||
{
|
||||
m_AreaTriggerScripts.clear(); // need for reload case
|
||||
QueryResult *result = WorldDatabase.Query("SELECT entry, ScriptName FROM scripted_areatrigger");
|
||||
|
||||
uint32 count = 0;
|
||||
|
||||
if (!result)
|
||||
{
|
||||
barGoLink bar(1);
|
||||
bar.step();
|
||||
|
||||
sLog.outString();
|
||||
sLog.outString(">> Loaded %u scripted areatrigger", count);
|
||||
return;
|
||||
}
|
||||
|
||||
barGoLink bar((int)result->GetRowCount());
|
||||
|
||||
do
|
||||
{
|
||||
++count;
|
||||
bar.step();
|
||||
|
||||
Field *fields = result->Fetch();
|
||||
|
||||
uint32 triggerId = fields[0].GetUInt32();
|
||||
const char *scriptName = fields[1].GetString();
|
||||
|
||||
if (!sAreaTriggerStore.LookupEntry(triggerId))
|
||||
{
|
||||
sLog.outErrorDb("Table `scripted_areatrigger` has area trigger (ID: %u) not listed in `AreaTrigger.dbc`.", triggerId);
|
||||
continue;
|
||||
}
|
||||
|
||||
m_AreaTriggerScripts[triggerId] = GetScriptId(scriptName);
|
||||
} while(result->NextRow());
|
||||
|
||||
delete result;
|
||||
|
||||
sLog.outString();
|
||||
sLog.outString(">> Loaded %u areatrigger scripts", count);
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadEventIdScripts()
|
||||
{
|
||||
m_EventIdScripts.clear(); // need for reload case
|
||||
QueryResult *result = WorldDatabase.Query("SELECT id, ScriptName FROM scripted_event_id");
|
||||
|
||||
uint32 count = 0;
|
||||
|
||||
if (!result)
|
||||
{
|
||||
barGoLink bar(1);
|
||||
bar.step();
|
||||
|
||||
sLog.outString();
|
||||
sLog.outString(">> Loaded %u scripted event id", count);
|
||||
return;
|
||||
}
|
||||
|
||||
barGoLink bar((int)result->GetRowCount());
|
||||
|
||||
// TODO: remove duplicate code below, same way to collect event id's used in LoadEventScripts()
|
||||
std::set<uint32> evt_scripts;
|
||||
|
||||
// Load all possible event entries from gameobjects
|
||||
for(uint32 i = 1; i < sGOStorage.MaxEntry; ++i)
|
||||
if (GameObjectInfo const* goInfo = sGOStorage.LookupEntry<GameObjectInfo>(i))
|
||||
if (uint32 eventId = goInfo->GetEventScriptId())
|
||||
evt_scripts.insert(eventId);
|
||||
|
||||
// Load all possible event entries from spells
|
||||
for(uint32 i = 1; i < sSpellStore.GetNumRows(); ++i)
|
||||
{
|
||||
SpellEntry const* spell = sSpellStore.LookupEntry(i);
|
||||
if (spell)
|
||||
{
|
||||
for(int j = 0; j < MAX_EFFECT_INDEX; ++j)
|
||||
{
|
||||
if (spell->Effect[j] == SPELL_EFFECT_SEND_EVENT)
|
||||
{
|
||||
if (spell->EffectMiscValue[j])
|
||||
evt_scripts.insert(spell->EffectMiscValue[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Load all possible event entries from taxi path nodes
|
||||
for(size_t path_idx = 0; path_idx < sTaxiPathNodesByPath.size(); ++path_idx)
|
||||
{
|
||||
for(size_t node_idx = 0; node_idx < sTaxiPathNodesByPath[path_idx].size(); ++node_idx)
|
||||
{
|
||||
TaxiPathNodeEntry const& node = sTaxiPathNodesByPath[path_idx][node_idx];
|
||||
|
||||
if (node.arrivalEventID)
|
||||
evt_scripts.insert(node.arrivalEventID);
|
||||
|
||||
if (node.departureEventID)
|
||||
evt_scripts.insert(node.departureEventID);
|
||||
}
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
++count;
|
||||
bar.step();
|
||||
|
||||
Field *fields = result->Fetch();
|
||||
|
||||
uint32 eventId = fields[0].GetUInt32();
|
||||
const char *scriptName = fields[1].GetString();
|
||||
|
||||
std::set<uint32>::const_iterator itr = evt_scripts.find(eventId);
|
||||
if (itr == evt_scripts.end())
|
||||
sLog.outErrorDb("Table `scripted_event_id` has id %u not referring to any gameobject_template type 10 data2 field, type 3 data6 field, type 13 data 2 field or any spell effect %u or path taxi node data",
|
||||
eventId, SPELL_EFFECT_SEND_EVENT);
|
||||
|
||||
m_EventIdScripts[eventId] = GetScriptId(scriptName);
|
||||
} while(result->NextRow());
|
||||
|
||||
delete result;
|
||||
|
||||
sLog.outString();
|
||||
sLog.outString(">> Loaded %u scripted event id", count);
|
||||
}
|
||||
|
||||
uint32 ObjectMgr::GetNearestTaxiNode( float x, float y, float z, uint32 mapid, Team team )
|
||||
{
|
||||
bool found = false;
|
||||
|
|
@ -6543,7 +5820,7 @@ struct SQLGameObjectLoader : public SQLStorageLoaderBase<SQLGameObjectLoader>
|
|||
template<class D>
|
||||
void convert_from_str(uint32 /*field_pos*/, char const *src, D &dst)
|
||||
{
|
||||
dst = D(sObjectMgr.GetScriptId(src));
|
||||
dst = D(sScriptMgr.GetScriptId(src));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -8215,24 +7492,6 @@ bool ObjectMgr::CheckDeclinedNames( std::wstring mainpart, DeclinedName const& n
|
|||
return true;
|
||||
}
|
||||
|
||||
uint32 ObjectMgr::GetAreaTriggerScriptId(uint32 triggerId) const
|
||||
{
|
||||
AreaTriggerScriptMap::const_iterator itr = m_AreaTriggerScripts.find(triggerId);
|
||||
if (itr != m_AreaTriggerScripts.end())
|
||||
return itr->second;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32 ObjectMgr::GetEventIdScriptId(uint32 eventId) const
|
||||
{
|
||||
EventIdScriptMap::const_iterator itr = m_EventIdScripts.find(eventId);
|
||||
if (itr != m_EventIdScripts.end())
|
||||
return itr->second;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Checks if player meets the condition
|
||||
bool PlayerCondition::Meets(Player const * player) const
|
||||
{
|
||||
|
|
@ -9564,108 +8823,6 @@ bool ObjectMgr::IsVendorItemValid(bool isTemplate, char const* tableName, uint32
|
|||
return true;
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadScriptNames()
|
||||
{
|
||||
m_scriptNames.push_back("");
|
||||
QueryResult *result = WorldDatabase.Query(
|
||||
"SELECT DISTINCT(ScriptName) FROM creature_template WHERE ScriptName <> '' "
|
||||
"UNION "
|
||||
"SELECT DISTINCT(ScriptName) FROM gameobject_template WHERE ScriptName <> '' "
|
||||
"UNION "
|
||||
"SELECT DISTINCT(ScriptName) FROM item_template WHERE ScriptName <> '' "
|
||||
"UNION "
|
||||
"SELECT DISTINCT(ScriptName) FROM scripted_areatrigger WHERE ScriptName <> '' "
|
||||
"UNION "
|
||||
"SELECT DISTINCT(ScriptName) FROM scripted_event_id WHERE ScriptName <> '' "
|
||||
"UNION "
|
||||
"SELECT DISTINCT(ScriptName) FROM instance_template WHERE ScriptName <> ''");
|
||||
|
||||
if (!result)
|
||||
{
|
||||
barGoLink bar(1);
|
||||
bar.step();
|
||||
sLog.outString();
|
||||
sLog.outErrorDb(">> Loaded empty set of Script Names!");
|
||||
return;
|
||||
}
|
||||
|
||||
barGoLink bar((int)result->GetRowCount());
|
||||
uint32 count = 0;
|
||||
|
||||
do
|
||||
{
|
||||
bar.step();
|
||||
m_scriptNames.push_back((*result)[0].GetString());
|
||||
++count;
|
||||
} while (result->NextRow());
|
||||
delete result;
|
||||
|
||||
std::sort(m_scriptNames.begin(), m_scriptNames.end());
|
||||
sLog.outString();
|
||||
sLog.outString( ">> Loaded %d Script Names", count );
|
||||
}
|
||||
|
||||
uint32 ObjectMgr::GetScriptId(const char *name) const
|
||||
{
|
||||
// use binary search to find the script name in the sorted vector
|
||||
// assume "" is the first element
|
||||
if (!name)
|
||||
return 0;
|
||||
|
||||
ScriptNameMap::const_iterator itr =
|
||||
std::lower_bound(m_scriptNames.begin(), m_scriptNames.end(), name);
|
||||
|
||||
if (itr == m_scriptNames.end() || *itr != name)
|
||||
return 0;
|
||||
|
||||
return uint32(itr - m_scriptNames.begin());
|
||||
}
|
||||
|
||||
void ObjectMgr::CheckScriptTexts(ScriptMapMap const& scripts,std::set<int32>& ids)
|
||||
{
|
||||
for(ScriptMapMap::const_iterator itrMM = scripts.begin(); itrMM != scripts.end(); ++itrMM)
|
||||
{
|
||||
for(ScriptMap::const_iterator itrM = itrMM->second.begin(); itrM != itrMM->second.end(); ++itrM)
|
||||
{
|
||||
if (itrM->second.command == SCRIPT_COMMAND_TALK)
|
||||
{
|
||||
for(int i = 0; i < MAX_TEXT_ID; ++i)
|
||||
{
|
||||
if (itrM->second.talk.textId[i] && !GetMangosStringLocale (itrM->second.talk.textId[i]))
|
||||
sLog.outErrorDb( "Table `db_script_string` is missing string id %u, used in database script id %u.", itrM->second.talk.textId[i], itrMM->first);
|
||||
|
||||
if (ids.find(itrM->second.talk.textId[i]) != ids.end())
|
||||
ids.erase(itrM->second.talk.textId[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadDbScriptStrings()
|
||||
{
|
||||
LoadMangosStrings(WorldDatabase,"db_script_string",MIN_DB_SCRIPT_STRING_ID,MAX_DB_SCRIPT_STRING_ID);
|
||||
|
||||
std::set<int32> ids;
|
||||
|
||||
for(int32 i = MIN_DB_SCRIPT_STRING_ID; i < MAX_DB_SCRIPT_STRING_ID; ++i)
|
||||
if(GetMangosStringLocale(i))
|
||||
ids.insert(i);
|
||||
|
||||
CheckScriptTexts(sQuestEndScripts,ids);
|
||||
CheckScriptTexts(sQuestStartScripts,ids);
|
||||
CheckScriptTexts(sSpellScripts,ids);
|
||||
CheckScriptTexts(sGameObjectScripts,ids);
|
||||
CheckScriptTexts(sEventScripts,ids);
|
||||
CheckScriptTexts(sGossipScripts,ids);
|
||||
CheckScriptTexts(sCreatureMovementScripts,ids);
|
||||
|
||||
sWaypointMgr.CheckTextsExistance(ids);
|
||||
|
||||
for(std::set<int32>::const_iterator itr = ids.begin(); itr != ids.end(); ++itr)
|
||||
sLog.outErrorDb( "Table `db_script_string` has unused string id %u", *itr);
|
||||
}
|
||||
|
||||
void ObjectMgr::AddGuild( Guild* guild )
|
||||
{
|
||||
mGuildMap[guild->GetId()] = guild ;
|
||||
|
|
@ -9697,16 +8854,6 @@ void ObjectMgr::RemoveArenaTeam( uint32 Id )
|
|||
}
|
||||
|
||||
// Functions for scripting access
|
||||
uint32 GetAreaTriggerScriptId(uint32 triggerId)
|
||||
{
|
||||
return sObjectMgr.GetAreaTriggerScriptId(triggerId);
|
||||
}
|
||||
|
||||
uint32 GetEventIdScriptId(uint32 eventId)
|
||||
{
|
||||
return sObjectMgr.GetEventIdScriptId(eventId);
|
||||
}
|
||||
|
||||
bool LoadMangosStrings(DatabaseType& db, char const* table,int32 start_value, int32 end_value)
|
||||
{
|
||||
// MAX_DB_SCRIPT_STRING_ID is max allowed negative value for scripts (scrpts can use only more deep negative values
|
||||
|
|
@ -9720,16 +8867,6 @@ bool LoadMangosStrings(DatabaseType& db, char const* table,int32 start_value, in
|
|||
return sObjectMgr.LoadMangosStrings(db,table,start_value,end_value);
|
||||
}
|
||||
|
||||
uint32 MANGOS_DLL_SPEC GetScriptId(const char *name)
|
||||
{
|
||||
return sObjectMgr.GetScriptId(name);
|
||||
}
|
||||
|
||||
ObjectMgr::ScriptNameMap const& GetScriptNames()
|
||||
{
|
||||
return sObjectMgr.GetScriptNames();
|
||||
}
|
||||
|
||||
CreatureInfo const* GetCreatureTemplateStore(uint32 entry)
|
||||
{
|
||||
return sCreatureStorage.LookupEntry<CreatureInfo>(entry);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue