mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
[7640] Move spell and chair height checks to functions for gameobject loading code. Fixed some field ids.
This commit is contained in:
parent
4ec75c7c9e
commit
f87684bab6
2 changed files with 59 additions and 68 deletions
|
|
@ -5375,7 +5375,7 @@ struct SQLGameObjectLoader : public SQLStorageLoaderBase<SQLGameObjectLoader>
|
||||||
|
|
||||||
inline void CheckGOLockId(GameObjectInfo const* goInfo,uint32 dataN,uint32 N)
|
inline void CheckGOLockId(GameObjectInfo const* goInfo,uint32 dataN,uint32 N)
|
||||||
{
|
{
|
||||||
if(sLockStore.LookupEntry(dataN))
|
if (sLockStore.LookupEntry(dataN))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data%d=%u but lock (Id: %u) not found.",
|
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data%d=%u but lock (Id: %u) not found.",
|
||||||
|
|
@ -5384,9 +5384,9 @@ inline void CheckGOLockId(GameObjectInfo const* goInfo,uint32 dataN,uint32 N)
|
||||||
|
|
||||||
inline void CheckGOLinkedTrapId(GameObjectInfo const* goInfo,uint32 dataN,uint32 N)
|
inline void CheckGOLinkedTrapId(GameObjectInfo const* goInfo,uint32 dataN,uint32 N)
|
||||||
{
|
{
|
||||||
if(GameObjectInfo const* trapInfo = sGOStorage.LookupEntry<GameObjectInfo>(dataN))
|
if (GameObjectInfo const* trapInfo = sGOStorage.LookupEntry<GameObjectInfo>(dataN))
|
||||||
{
|
{
|
||||||
if(trapInfo->type!=GAMEOBJECT_TYPE_TRAP)
|
if (trapInfo->type!=GAMEOBJECT_TYPE_TRAP)
|
||||||
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data%d=%u but GO (Entry %u) have not GAMEOBJECT_TYPE_TRAP (%u) type.",
|
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data%d=%u but GO (Entry %u) have not GAMEOBJECT_TYPE_TRAP (%u) type.",
|
||||||
goInfo->id,goInfo->type,N,dataN,dataN,GAMEOBJECT_TYPE_TRAP);
|
goInfo->id,goInfo->type,N,dataN,dataN,GAMEOBJECT_TYPE_TRAP);
|
||||||
}
|
}
|
||||||
|
|
@ -5397,6 +5397,27 @@ inline void CheckGOLinkedTrapId(GameObjectInfo const* goInfo,uint32 dataN,uint32
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void CheckGOSpellId(GameObjectInfo const* goInfo,uint32 dataN,uint32 N)
|
||||||
|
{
|
||||||
|
if (sSpellStore.LookupEntry(dataN))
|
||||||
|
return;
|
||||||
|
|
||||||
|
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data%d=%u but Spell (Entry %u) not exist.",
|
||||||
|
goInfo->id,goInfo->type,N,dataN,dataN);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void CheckAndFixGOChairHeightId(GameObjectInfo const* goInfo,uint32 const& dataN,uint32 N)
|
||||||
|
{
|
||||||
|
if (dataN <= (UNIT_STAND_STATE_SIT_HIGH_CHAIR-UNIT_STAND_STATE_SIT_LOW_CHAIR) )
|
||||||
|
return;
|
||||||
|
|
||||||
|
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data%d=%u but correct chair height in range 0..%i.",
|
||||||
|
goInfo->id,goInfo->type,N,dataN,UNIT_STAND_STATE_SIT_HIGH_CHAIR-UNIT_STAND_STATE_SIT_LOW_CHAIR);
|
||||||
|
|
||||||
|
// prevent client and server unexpected work
|
||||||
|
const_cast<uint32&>(dataN) = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void ObjectMgr::LoadGameobjectInfo()
|
void ObjectMgr::LoadGameobjectInfo()
|
||||||
{
|
{
|
||||||
SQLGameObjectLoader loader;
|
SQLGameObjectLoader loader;
|
||||||
|
|
@ -5406,115 +5427,100 @@ void ObjectMgr::LoadGameobjectInfo()
|
||||||
for(uint32 id = 1; id < sGOStorage.MaxEntry; id++)
|
for(uint32 id = 1; id < sGOStorage.MaxEntry; id++)
|
||||||
{
|
{
|
||||||
GameObjectInfo const* goInfo = sGOStorage.LookupEntry<GameObjectInfo>(id);
|
GameObjectInfo const* goInfo = sGOStorage.LookupEntry<GameObjectInfo>(id);
|
||||||
if(!goInfo)
|
if (!goInfo)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
switch(goInfo->type)
|
switch(goInfo->type)
|
||||||
{
|
{
|
||||||
case GAMEOBJECT_TYPE_DOOR: //0
|
case GAMEOBJECT_TYPE_DOOR: //0
|
||||||
{
|
{
|
||||||
if(goInfo->door.lockId)
|
if (goInfo->door.lockId)
|
||||||
CheckGOLockId(goInfo,goInfo->door.lockId,1);
|
CheckGOLockId(goInfo,goInfo->door.lockId,1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GAMEOBJECT_TYPE_BUTTON: //1
|
case GAMEOBJECT_TYPE_BUTTON: //1
|
||||||
{
|
{
|
||||||
if(goInfo->button.lockId)
|
if (goInfo->button.lockId)
|
||||||
CheckGOLockId(goInfo,goInfo->button.lockId,1);
|
CheckGOLockId(goInfo,goInfo->button.lockId,1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GAMEOBJECT_TYPE_QUESTGIVER: //2
|
case GAMEOBJECT_TYPE_QUESTGIVER: //2
|
||||||
{
|
{
|
||||||
if(goInfo->questgiver.lockId)
|
if (goInfo->questgiver.lockId)
|
||||||
CheckGOLockId(goInfo,goInfo->questgiver.lockId,0);
|
CheckGOLockId(goInfo,goInfo->questgiver.lockId,0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GAMEOBJECT_TYPE_CHEST: //3
|
case GAMEOBJECT_TYPE_CHEST: //3
|
||||||
{
|
{
|
||||||
if(goInfo->chest.lockId)
|
if (goInfo->chest.lockId)
|
||||||
CheckGOLockId(goInfo,goInfo->chest.lockId,0);
|
CheckGOLockId(goInfo,goInfo->chest.lockId,0);
|
||||||
|
|
||||||
if(goInfo->chest.linkedTrapId) // linked trap
|
if (goInfo->chest.linkedTrapId) // linked trap
|
||||||
CheckGOLinkedTrapId(goInfo,goInfo->chest.linkedTrapId,7);
|
CheckGOLinkedTrapId(goInfo,goInfo->chest.linkedTrapId,7);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GAMEOBJECT_TYPE_TRAP: //6
|
case GAMEOBJECT_TYPE_TRAP: //6
|
||||||
{
|
{
|
||||||
if(goInfo->trap.lockId)
|
if (goInfo->trap.lockId)
|
||||||
CheckGOLockId(goInfo,goInfo->trap.lockId,0);
|
CheckGOLockId(goInfo,goInfo->trap.lockId,0);
|
||||||
/* disable check for while
|
/* disable check for while, too many not existed spells
|
||||||
if(goInfo->trap.spellId) // spell
|
if (goInfo->trap.spellId) // spell
|
||||||
{
|
CheckGOSpellId(goInfo,goInfo->trap.spellId,3);
|
||||||
if(!sSpellStore.LookupEntry(goInfo->trap.spellId))
|
|
||||||
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data3=%u but Spell (Entry %u) not exist.",
|
|
||||||
id,goInfo->type,goInfo->trap.spellId,goInfo->trap.spellId);
|
|
||||||
}
|
|
||||||
*/
|
*/
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GAMEOBJECT_TYPE_CHAIR: //7
|
case GAMEOBJECT_TYPE_CHAIR: //7
|
||||||
if(goInfo->chair.height > (UNIT_STAND_STATE_SIT_HIGH_CHAIR-UNIT_STAND_STATE_SIT_LOW_CHAIR) )
|
CheckAndFixGOChairHeightId(goInfo,goInfo->chair.height,1);
|
||||||
{
|
|
||||||
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data1=%u but correct chair height in range 0..%i.",
|
|
||||||
id,goInfo->type,goInfo->chair.height,UNIT_STAND_STATE_SIT_HIGH_CHAIR-UNIT_STAND_STATE_SIT_LOW_CHAIR);
|
|
||||||
|
|
||||||
// prevent client and server unexpected work
|
|
||||||
const_cast<GameObjectInfo*>(goInfo)->chair.height = 0;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case GAMEOBJECT_TYPE_SPELL_FOCUS: //8
|
case GAMEOBJECT_TYPE_SPELL_FOCUS: //8
|
||||||
{
|
{
|
||||||
if(goInfo->spellFocus.focusId)
|
if (goInfo->spellFocus.focusId)
|
||||||
{
|
{
|
||||||
if(!sSpellFocusObjectStore.LookupEntry(goInfo->spellFocus.focusId))
|
if (!sSpellFocusObjectStore.LookupEntry(goInfo->spellFocus.focusId))
|
||||||
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data0=%u but SpellFocus (Id: %u) not exist.",
|
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data0=%u but SpellFocus (Id: %u) not exist.",
|
||||||
id,goInfo->type,goInfo->spellFocus.focusId,goInfo->spellFocus.focusId);
|
id,goInfo->type,goInfo->spellFocus.focusId,goInfo->spellFocus.focusId);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(goInfo->spellFocus.linkedTrapId) // linked trap
|
if (goInfo->spellFocus.linkedTrapId) // linked trap
|
||||||
CheckGOLinkedTrapId(goInfo,goInfo->spellFocus.linkedTrapId,2);
|
CheckGOLinkedTrapId(goInfo,goInfo->spellFocus.linkedTrapId,2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GAMEOBJECT_TYPE_GOOBER: //10
|
case GAMEOBJECT_TYPE_GOOBER: //10
|
||||||
{
|
{
|
||||||
if(goInfo->goober.lockId)
|
if (goInfo->goober.lockId)
|
||||||
CheckGOLockId(goInfo,goInfo->goober.lockId,0);
|
CheckGOLockId(goInfo,goInfo->goober.lockId,0);
|
||||||
|
|
||||||
if(goInfo->goober.pageId) // pageId
|
if (goInfo->goober.pageId) // pageId
|
||||||
{
|
{
|
||||||
if(!sPageTextStore.LookupEntry<PageText>(goInfo->goober.pageId))
|
if (!sPageTextStore.LookupEntry<PageText>(goInfo->goober.pageId))
|
||||||
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data7=%u but PageText (Entry %u) not exist.",
|
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data7=%u but PageText (Entry %u) not exist.",
|
||||||
id,goInfo->type,goInfo->goober.pageId,goInfo->goober.pageId);
|
id,goInfo->type,goInfo->goober.pageId,goInfo->goober.pageId);
|
||||||
}
|
}
|
||||||
/* disable check for while
|
/* disable check for while, too many not existed spells
|
||||||
if(goInfo->goober.spellId) // spell
|
if (goInfo->goober.spellId) // spell
|
||||||
{
|
CheckGOSpellId(goInfo,goInfo->goober.spellId,10);
|
||||||
if(!sSpellStore.LookupEntry(goInfo->goober.spellId))
|
|
||||||
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data2=%u but Spell (Entry %u) not exist.",
|
|
||||||
id,goInfo->type,goInfo->goober.spellId,goInfo->goober.spellId);
|
|
||||||
}
|
|
||||||
*/
|
*/
|
||||||
if(goInfo->goober.linkedTrapId) // linked trap
|
if (goInfo->goober.linkedTrapId) // linked trap
|
||||||
CheckGOLinkedTrapId(goInfo,goInfo->goober.linkedTrapId,12);
|
CheckGOLinkedTrapId(goInfo,goInfo->goober.linkedTrapId,12);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GAMEOBJECT_TYPE_AREADAMAGE: //12
|
case GAMEOBJECT_TYPE_AREADAMAGE: //12
|
||||||
{
|
{
|
||||||
if(goInfo->areadamage.lockId)
|
if (goInfo->areadamage.lockId)
|
||||||
CheckGOLockId(goInfo,goInfo->areadamage.lockId,0);
|
CheckGOLockId(goInfo,goInfo->areadamage.lockId,0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GAMEOBJECT_TYPE_CAMERA: //13
|
case GAMEOBJECT_TYPE_CAMERA: //13
|
||||||
{
|
{
|
||||||
if(goInfo->camera.lockId)
|
if (goInfo->camera.lockId)
|
||||||
CheckGOLockId(goInfo,goInfo->camera.lockId,0);
|
CheckGOLockId(goInfo,goInfo->camera.lockId,0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GAMEOBJECT_TYPE_MO_TRANSPORT: //15
|
case GAMEOBJECT_TYPE_MO_TRANSPORT: //15
|
||||||
{
|
{
|
||||||
if(goInfo->moTransport.taxiPathId)
|
if (goInfo->moTransport.taxiPathId)
|
||||||
{
|
{
|
||||||
if(goInfo->moTransport.taxiPathId >= sTaxiPathNodesByPath.size() || sTaxiPathNodesByPath[goInfo->moTransport.taxiPathId].empty())
|
if (goInfo->moTransport.taxiPathId >= sTaxiPathNodesByPath.size() || sTaxiPathNodesByPath[goInfo->moTransport.taxiPathId].empty())
|
||||||
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data0=%u but TaxiPath (Id: %u) not exist.",
|
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data0=%u but TaxiPath (Id: %u) not exist.",
|
||||||
id,goInfo->type,goInfo->moTransport.taxiPathId,goInfo->moTransport.taxiPathId);
|
id,goInfo->type,goInfo->moTransport.taxiPathId,goInfo->moTransport.taxiPathId);
|
||||||
}
|
}
|
||||||
|
|
@ -5522,53 +5528,38 @@ void ObjectMgr::LoadGameobjectInfo()
|
||||||
}
|
}
|
||||||
case GAMEOBJECT_TYPE_SUMMONING_RITUAL: //18
|
case GAMEOBJECT_TYPE_SUMMONING_RITUAL: //18
|
||||||
{
|
{
|
||||||
/* disabled
|
/* disable check for while, too many not existed spells
|
||||||
if(goInfo->summoningRitual.spellId)
|
// always must have spell
|
||||||
{
|
CheckGOSpellId(goInfo,goInfo->summoningRitual.spellId,1);
|
||||||
if(!sSpellStore.LookupEntry(goInfo->summoningRitual.spellId))
|
|
||||||
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data1=%u but Spell (Entry %u) not exist.",
|
|
||||||
id,goInfo->type,goInfo->summoningRitual.spellId,goInfo->summoningRitual.spellId);
|
|
||||||
}
|
|
||||||
*/
|
*/
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GAMEOBJECT_TYPE_SPELLCASTER: //22
|
case GAMEOBJECT_TYPE_SPELLCASTER: //22
|
||||||
{
|
{
|
||||||
if(goInfo->spellcaster.spellId) // spell
|
// always must have spell
|
||||||
{
|
CheckGOSpellId(goInfo,goInfo->spellcaster.spellId,0);
|
||||||
if(!sSpellStore.LookupEntry(goInfo->spellcaster.spellId))
|
|
||||||
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data3=%u but Spell (Entry %u) not exist.",
|
|
||||||
id,goInfo->type,goInfo->spellcaster.spellId,goInfo->spellcaster.spellId);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GAMEOBJECT_TYPE_FLAGSTAND: //24
|
case GAMEOBJECT_TYPE_FLAGSTAND: //24
|
||||||
{
|
{
|
||||||
if(goInfo->flagstand.lockId)
|
if (goInfo->flagstand.lockId)
|
||||||
CheckGOLockId(goInfo,goInfo->flagstand.lockId,0);
|
CheckGOLockId(goInfo,goInfo->flagstand.lockId,0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GAMEOBJECT_TYPE_FISHINGHOLE: //25
|
case GAMEOBJECT_TYPE_FISHINGHOLE: //25
|
||||||
{
|
{
|
||||||
if(goInfo->fishinghole.lockId)
|
if (goInfo->fishinghole.lockId)
|
||||||
CheckGOLockId(goInfo,goInfo->fishinghole.lockId,4);
|
CheckGOLockId(goInfo,goInfo->fishinghole.lockId,4);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GAMEOBJECT_TYPE_FLAGDROP: //26
|
case GAMEOBJECT_TYPE_FLAGDROP: //26
|
||||||
{
|
{
|
||||||
if(goInfo->flagdrop.lockId)
|
if (goInfo->flagdrop.lockId)
|
||||||
CheckGOLockId(goInfo,goInfo->flagdrop.lockId,0);
|
CheckGOLockId(goInfo,goInfo->flagdrop.lockId,0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GAMEOBJECT_TYPE_BARBER_CHAIR: //32
|
case GAMEOBJECT_TYPE_BARBER_CHAIR: //32
|
||||||
if(goInfo->barberChair.chairheight > (UNIT_STAND_STATE_SIT_HIGH_CHAIR-UNIT_STAND_STATE_SIT_LOW_CHAIR) )
|
CheckAndFixGOChairHeightId(goInfo,goInfo->barberChair.chairheight,0);
|
||||||
{
|
|
||||||
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data1=%u but correct chair height in range 0..%i.",
|
|
||||||
id,goInfo->type,goInfo->barberChair.chairheight,UNIT_STAND_STATE_SIT_HIGH_CHAIR-UNIT_STAND_STATE_SIT_LOW_CHAIR);
|
|
||||||
|
|
||||||
// prevent client and server unexpected work
|
|
||||||
const_cast<GameObjectInfo*>(goInfo)->barberChair.chairheight = 0;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "7639"
|
#define REVISION_NR "7640"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue