From f87684bab6b64700f1df498c0ccc44fa7c832982 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Wed, 8 Apr 2009 22:52:37 +0400 Subject: [PATCH] [7640] Move spell and chair height checks to functions for gameobject loading code. Fixed some field ids. --- src/game/ObjectMgr.cpp | 125 ++++++++++++++++++--------------------- src/shared/revision_nr.h | 2 +- 2 files changed, 59 insertions(+), 68 deletions(-) diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index d6ee584a6..1d35205a0 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -5375,7 +5375,7 @@ struct SQLGameObjectLoader : public SQLStorageLoaderBase inline void CheckGOLockId(GameObjectInfo const* goInfo,uint32 dataN,uint32 N) { - if(sLockStore.LookupEntry(dataN)) + if (sLockStore.LookupEntry(dataN)) return; 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) { - if(GameObjectInfo const* trapInfo = sGOStorage.LookupEntry(dataN)) + if (GameObjectInfo const* trapInfo = sGOStorage.LookupEntry(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.", 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(dataN) = 0; +} + void ObjectMgr::LoadGameobjectInfo() { SQLGameObjectLoader loader; @@ -5406,115 +5427,100 @@ void ObjectMgr::LoadGameobjectInfo() for(uint32 id = 1; id < sGOStorage.MaxEntry; id++) { GameObjectInfo const* goInfo = sGOStorage.LookupEntry(id); - if(!goInfo) + if (!goInfo) continue; switch(goInfo->type) { case GAMEOBJECT_TYPE_DOOR: //0 { - if(goInfo->door.lockId) + if (goInfo->door.lockId) CheckGOLockId(goInfo,goInfo->door.lockId,1); break; } case GAMEOBJECT_TYPE_BUTTON: //1 { - if(goInfo->button.lockId) + if (goInfo->button.lockId) CheckGOLockId(goInfo,goInfo->button.lockId,1); break; } case GAMEOBJECT_TYPE_QUESTGIVER: //2 { - if(goInfo->questgiver.lockId) + if (goInfo->questgiver.lockId) CheckGOLockId(goInfo,goInfo->questgiver.lockId,0); break; } case GAMEOBJECT_TYPE_CHEST: //3 { - if(goInfo->chest.lockId) + if (goInfo->chest.lockId) CheckGOLockId(goInfo,goInfo->chest.lockId,0); - if(goInfo->chest.linkedTrapId) // linked trap + if (goInfo->chest.linkedTrapId) // linked trap CheckGOLinkedTrapId(goInfo,goInfo->chest.linkedTrapId,7); break; } case GAMEOBJECT_TYPE_TRAP: //6 { - if(goInfo->trap.lockId) + if (goInfo->trap.lockId) CheckGOLockId(goInfo,goInfo->trap.lockId,0); - /* disable check for while - if(goInfo->trap.spellId) // spell - { - 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); - } + /* disable check for while, too many not existed spells + if (goInfo->trap.spellId) // spell + CheckGOSpellId(goInfo,goInfo->trap.spellId,3); */ break; } case GAMEOBJECT_TYPE_CHAIR: //7 - if(goInfo->chair.height > (UNIT_STAND_STATE_SIT_HIGH_CHAIR-UNIT_STAND_STATE_SIT_LOW_CHAIR) ) - { - 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(goInfo)->chair.height = 0; - } + CheckAndFixGOChairHeightId(goInfo,goInfo->chair.height,1); break; 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.", 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); break; } case GAMEOBJECT_TYPE_GOOBER: //10 { - if(goInfo->goober.lockId) + if (goInfo->goober.lockId) CheckGOLockId(goInfo,goInfo->goober.lockId,0); - if(goInfo->goober.pageId) // pageId + if (goInfo->goober.pageId) // pageId { - if(!sPageTextStore.LookupEntry(goInfo->goober.pageId)) + if (!sPageTextStore.LookupEntry(goInfo->goober.pageId)) 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); } - /* disable check for while - if(goInfo->goober.spellId) // spell - { - 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); - } + /* disable check for while, too many not existed spells + if (goInfo->goober.spellId) // spell + CheckGOSpellId(goInfo,goInfo->goober.spellId,10); */ - if(goInfo->goober.linkedTrapId) // linked trap + if (goInfo->goober.linkedTrapId) // linked trap CheckGOLinkedTrapId(goInfo,goInfo->goober.linkedTrapId,12); break; } case GAMEOBJECT_TYPE_AREADAMAGE: //12 { - if(goInfo->areadamage.lockId) + if (goInfo->areadamage.lockId) CheckGOLockId(goInfo,goInfo->areadamage.lockId,0); break; } case GAMEOBJECT_TYPE_CAMERA: //13 { - if(goInfo->camera.lockId) + if (goInfo->camera.lockId) CheckGOLockId(goInfo,goInfo->camera.lockId,0); break; } 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.", id,goInfo->type,goInfo->moTransport.taxiPathId,goInfo->moTransport.taxiPathId); } @@ -5522,53 +5528,38 @@ void ObjectMgr::LoadGameobjectInfo() } case GAMEOBJECT_TYPE_SUMMONING_RITUAL: //18 { - /* disabled - if(goInfo->summoningRitual.spellId) - { - 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); - } + /* disable check for while, too many not existed spells + // always must have spell + CheckGOSpellId(goInfo,goInfo->summoningRitual.spellId,1); */ break; } case GAMEOBJECT_TYPE_SPELLCASTER: //22 { - if(goInfo->spellcaster.spellId) // spell - { - 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); - } + // always must have spell + CheckGOSpellId(goInfo,goInfo->spellcaster.spellId,0); break; } case GAMEOBJECT_TYPE_FLAGSTAND: //24 { - if(goInfo->flagstand.lockId) + if (goInfo->flagstand.lockId) CheckGOLockId(goInfo,goInfo->flagstand.lockId,0); break; } case GAMEOBJECT_TYPE_FISHINGHOLE: //25 { - if(goInfo->fishinghole.lockId) + if (goInfo->fishinghole.lockId) CheckGOLockId(goInfo,goInfo->fishinghole.lockId,4); break; } case GAMEOBJECT_TYPE_FLAGDROP: //26 { - if(goInfo->flagdrop.lockId) + if (goInfo->flagdrop.lockId) CheckGOLockId(goInfo,goInfo->flagdrop.lockId,0); break; } case GAMEOBJECT_TYPE_BARBER_CHAIR: //32 - if(goInfo->barberChair.chairheight > (UNIT_STAND_STATE_SIT_HIGH_CHAIR-UNIT_STAND_STATE_SIT_LOW_CHAIR) ) - { - 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(goInfo)->barberChair.chairheight = 0; - } + CheckAndFixGOChairHeightId(goInfo,goInfo->barberChair.chairheight,0); break; } } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 700dc5404..8c9cd3e3d 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "7639" + #define REVISION_NR "7640" #endif // __REVISION_NR_H__