2008-10-11 14:16:25 -05:00
/* Copyright (C) 2006 - 2008 TrinityScript <https://scriptdev2.svn.sourceforge.net/>
* This program is free software licensed under GPL version 2
* Please see the included DOCS/LICENSE.TXT for more information */
2009-10-17 15:51:44 -07:00
2010-06-07 16:21:52 -06:00
# include "ScriptPCH.h"
# include "Configuration/Config.h"
2008-10-11 14:16:25 -05:00
# include "Database/DatabaseEnv.h"
2009-03-27 09:58:20 -06:00
# include "DBCStores.h"
2008-10-11 14:16:25 -05:00
# include "ObjectMgr.h"
# include "ProgressBar.h"
2010-01-19 11:36:05 +01:00
# include "ScriptLoader.h"
# include "ScriptSystem.h"
# include "Policies/SingletonImp.h"
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
INSTANTIATE_SINGLETON_1 ( ScriptMgr ) ;
2008-11-20 16:16:57 -06:00
int num_sc_scripts ;
2008-10-11 14:16:25 -05:00
Script * m_scripts [ MAX_SCRIPTS ] ;
2009-10-17 15:51:44 -07:00
2008-10-11 14:16:25 -05:00
void FillSpellSummary ( ) ;
2009-02-05 15:38:24 -06:00
void LoadOverridenSQLData ( ) ;
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
void ScriptMgr : : LoadDatabase ( )
2008-10-11 14:16:25 -05:00
{
2010-02-05 13:01:32 +01:00
pSystemMgr . LoadVersion ( ) ;
pSystemMgr . LoadScriptTexts ( ) ;
pSystemMgr . LoadScriptTextsCustom ( ) ;
pSystemMgr . LoadScriptWaypoints ( ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-11 14:16:25 -05:00
struct TSpellSummary {
uint8 Targets ; // set of enum SelectTarget
2009-02-04 10:33:18 -06:00
uint8 Effects ; // set of enum SelectEffect
2008-10-11 14:16:25 -05:00
} extern * SpellSummary ;
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
ScriptMgr : : ScriptMgr ( )
2008-11-20 16:16:57 -06:00
{
2010-04-07 18:09:10 +02:00
2010-01-19 11:36:05 +01:00
}
ScriptMgr : : ~ ScriptMgr ( )
{
2010-04-07 18:09:10 +02:00
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-02-05 13:01:32 +01:00
void ScriptMgr : : ScriptsInit ( )
2008-10-11 14:16:25 -05:00
{
//Trinity Script startup
outstring_log ( " _____ _ _ _ ____ _ _ " ) ;
outstring_log ( " |_ _| __(_)_ __ (_) |_ _ _/ ___| ___ _ __(_)_ __ | |_ " ) ;
outstring_log ( " | || '__| | '_ \\ | | __| | | \\ ___ \\ / __| \' __| | \' _ \\ | __| " ) ;
outstring_log ( " | || | | | | | | | |_| |_| |___) | (__| | | | |_) | |_ " ) ;
outstring_log ( " |_||_| |_|_| |_|_| \\ __| \\ __, |____/ \\ ___|_| |_| .__/ \\ __| " ) ;
outstring_log ( " |___/ |_| " ) ;
outstring_log ( " " ) ;
outstring_log ( " " ) ;
2009-10-17 15:51:44 -07:00
2009-08-16 19:38:18 +02:00
//Load database (must be called after SD2Config.SetSource).
LoadDatabase ( ) ;
2009-10-17 15:51:44 -07:00
2008-10-11 14:16:25 -05:00
outstring_log ( " TSCR: Loading C++ scripts " ) ;
barGoLink bar ( 1 ) ;
bar . step ( ) ;
outstring_log ( " " ) ;
2009-10-17 15:51:44 -07:00
2009-10-17 16:20:24 -07:00
for ( uint16 i = 0 ; i < MAX_SCRIPTS ; + + i )
2008-10-11 14:16:25 -05:00
m_scripts [ i ] = NULL ;
2009-10-17 15:51:44 -07:00
2008-10-11 14:16:25 -05:00
FillSpellSummary ( ) ;
2009-10-17 15:51:44 -07:00
2009-08-16 01:45:49 +02:00
AddScripts ( ) ;
2009-10-17 15:51:44 -07:00
2009-02-09 08:16:34 -05:00
outstring_log ( " >> Loaded %i C++ Scripts. " , num_sc_scripts ) ;
2009-10-17 15:51:44 -07:00
2009-02-05 15:38:24 -06:00
outstring_log ( " >> Load Overriden SQL Data. " ) ;
LoadOverridenSQLData ( ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-11 14:16:25 -05:00
//*********************************
2008-10-25 11:40:10 -05:00
//*** Functions used globally ***
2009-10-17 15:51:44 -07:00
2009-08-16 19:38:18 +02:00
void DoScriptText ( int32 iTextEntry , WorldObject * pSource , Unit * pTarget )
2008-10-11 14:16:25 -05:00
{
if ( ! pSource )
{
2009-08-16 19:38:18 +02:00
error_log ( " TSCR: DoScriptText entry %i, invalid Source pointer. " , iTextEntry ) ;
2008-10-11 14:16:25 -05:00
return ;
}
2009-10-17 15:51:44 -07:00
2009-08-16 19:38:18 +02:00
if ( iTextEntry > = 0 )
2008-10-11 14:16:25 -05:00
{
2009-08-16 19:38:18 +02:00
error_log ( " TSCR: DoScriptText with source entry %u (TypeId=%u, guid=%u) attempts to process text entry %i, but text entry must be negative. " , pSource - > GetEntry ( ) , pSource - > GetTypeId ( ) , pSource - > GetGUIDLow ( ) , iTextEntry ) ;
2008-10-11 14:16:25 -05:00
return ;
}
2009-10-17 15:51:44 -07:00
2009-08-16 19:38:18 +02:00
const StringTextData * pData = pSystemMgr . GetTextData ( iTextEntry ) ;
2009-10-17 15:51:44 -07:00
2009-08-16 19:38:18 +02:00
if ( ! pData )
2008-10-11 14:16:25 -05:00
{
2009-08-16 19:38:18 +02:00
error_log ( " TSCR: DoScriptText with source entry %u (TypeId=%u, guid=%u) could not find text entry %i. " , pSource - > GetEntry ( ) , pSource - > GetTypeId ( ) , pSource - > GetGUIDLow ( ) , iTextEntry ) ;
2008-10-11 14:16:25 -05:00
return ;
}
2009-10-17 15:51:44 -07:00
2009-08-16 19:38:18 +02:00
debug_log ( " TSCR: DoScriptText: text entry=%i, Sound=%u, Type=%u, Language=%u, Emote=%u " , iTextEntry , pData - > uiSoundId , pData - > uiType , pData - > uiLanguage , pData - > uiEmote ) ;
2009-10-17 15:51:44 -07:00
2010-04-07 19:14:10 +02:00
if ( pData - > uiSoundId )
2008-10-11 14:16:25 -05:00
{
2010-04-07 19:14:10 +02:00
if ( GetSoundEntriesStore ( ) - > LookupEntry ( pData - > uiSoundId ) )
2008-10-11 14:16:25 -05:00
{
2009-08-16 19:38:18 +02:00
pSource - > SendPlaySound ( pData - > uiSoundId , false ) ;
2008-10-11 14:16:25 -05:00
}
else
2009-08-16 19:38:18 +02:00
error_log ( " TSCR: DoScriptText entry %i tried to process invalid sound id %u. " , iTextEntry , pData - > uiSoundId ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-04-07 19:14:10 +02:00
if ( pData - > uiEmote )
2009-02-09 08:16:34 -05:00
{
if ( pSource - > GetTypeId ( ) = = TYPEID_UNIT | | pSource - > GetTypeId ( ) = = TYPEID_PLAYER )
2009-08-16 19:38:18 +02:00
( ( Unit * ) pSource ) - > HandleEmoteCommand ( pData - > uiEmote ) ;
2009-02-09 08:16:34 -05:00
else
2009-08-16 19:38:18 +02:00
error_log ( " TSCR: DoScriptText entry %i tried to process emote for invalid TypeId (%u). " , iTextEntry , pSource - > GetTypeId ( ) ) ;
2009-02-09 08:16:34 -05:00
}
2009-10-17 15:51:44 -07:00
2009-08-16 19:38:18 +02:00
switch ( pData - > uiType )
2008-10-11 14:16:25 -05:00
{
case CHAT_TYPE_SAY :
2009-08-16 19:38:18 +02:00
pSource - > MonsterSay ( iTextEntry , pData - > uiLanguage , pTarget ? pTarget - > GetGUID ( ) : 0 ) ;
2008-10-11 14:16:25 -05:00
break ;
case CHAT_TYPE_YELL :
2009-08-16 19:38:18 +02:00
pSource - > MonsterYell ( iTextEntry , pData - > uiLanguage , pTarget ? pTarget - > GetGUID ( ) : 0 ) ;
2008-10-11 14:16:25 -05:00
break ;
case CHAT_TYPE_TEXT_EMOTE :
2009-08-16 19:38:18 +02:00
pSource - > MonsterTextEmote ( iTextEntry , pTarget ? pTarget - > GetGUID ( ) : 0 ) ;
2008-10-11 14:16:25 -05:00
break ;
case CHAT_TYPE_BOSS_EMOTE :
2009-08-16 19:38:18 +02:00
pSource - > MonsterTextEmote ( iTextEntry , pTarget ? pTarget - > GetGUID ( ) : 0 , true ) ;
2008-10-11 14:16:25 -05:00
break ;
case CHAT_TYPE_WHISPER :
{
2009-08-16 19:38:18 +02:00
if ( pTarget & & pTarget - > GetTypeId ( ) = = TYPEID_PLAYER )
pSource - > MonsterWhisper ( iTextEntry , pTarget - > GetGUID ( ) ) ;
else
2009-10-27 22:09:45 -07:00
error_log ( " TSCR: DoScriptText entry %i cannot whisper without target unit (TYPEID_PLAYER). " , iTextEntry ) ;
}
break ;
2008-10-11 14:16:25 -05:00
case CHAT_TYPE_BOSS_WHISPER :
{
2009-08-16 19:38:18 +02:00
if ( pTarget & & pTarget - > GetTypeId ( ) = = TYPEID_PLAYER )
pSource - > MonsterWhisper ( iTextEntry , pTarget - > GetGUID ( ) , true ) ;
else
2009-10-27 22:09:45 -07:00
error_log ( " TSCR: DoScriptText entry %i cannot whisper without target unit (TYPEID_PLAYER). " , iTextEntry ) ;
}
break ;
2009-04-03 16:54:20 -06:00
case CHAT_TYPE_ZONE_YELL :
2009-08-16 19:38:18 +02:00
pSource - > MonsterYellToZone ( iTextEntry , pData - > uiLanguage , pTarget ? pTarget - > GetGUID ( ) : 0 ) ;
2009-04-03 16:54:20 -06:00
break ;
2008-10-11 14:16:25 -05:00
}
}
2009-10-17 15:51:44 -07:00
2008-11-20 16:16:57 -06:00
void Script : : RegisterSelf ( )
2008-11-03 08:14:21 -06:00
{
2010-05-14 20:07:45 +02:00
// try to find scripts which try to use another script's allocated memory
// that means didn't allocate memory for script
for ( uint16 i = 0 ; i < MAX_SCRIPTS ; + + i )
{
// somebody forgot to allocate memory for a script by a method like this: newscript = new Script
if ( m_scripts [ i ] = = this )
{
error_log ( " ScriptName: '%s' - Forgot to allocate memory, so this script and/or the script before that can't work. " , Name . c_str ( ) ) ;
// don't register it
// and don't delete it because its memory is used for another script
return ;
}
}
2008-11-20 16:16:57 -06:00
int id = GetScriptId ( Name . c_str ( ) ) ;
2010-04-07 19:14:10 +02:00
if ( id )
2008-10-11 14:16:25 -05:00
{
2010-05-13 14:15:11 +02:00
// try to find the script in assigned scripts
bool IsExist = false ;
for ( uint16 i = 0 ; i < MAX_SCRIPTS ; + + i )
{
if ( m_scripts [ i ] )
{
// if the assigned script's name and the new script's name is the same
if ( m_scripts [ i ] - > Name = = Name )
{
IsExist = true ;
break ;
}
}
}
// if the script doesn't assigned -> assign it!
if ( ! IsExist )
{
m_scripts [ id ] = this ;
+ + num_sc_scripts ;
}
// if the script is already assigned -> delete it!
else
{
// TODO: write a better error message than this one :)
error_log ( " ScriptName: '%s' already assigned with the same ScriptName, so the script can't work. " , Name . c_str ( ) ) ;
delete this ;
}
2009-02-20 14:14:16 +01:00
}
2010-05-12 23:30:41 +02:00
else
2009-02-20 14:14:16 +01:00
{
2010-05-12 23:30:41 +02:00
if ( Name . find ( " example " ) = = std : : string : : npos )
error_db_log ( " TrinityScript: RegisterSelf, but script named %s does not have ScriptName assigned in database. " , ( this ) - > Name . c_str ( ) ) ;
2009-02-20 14:14:16 +01:00
delete this ;
}
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
void ScriptMgr : : OnLogin ( Player * pPlayer )
2009-09-13 00:01:35 -07:00
{
Script * tmpscript = m_scripts [ GetScriptId ( " scripted_on_events " ) ] ;
if ( ! tmpscript | | ! tmpscript - > pOnLogin ) return ;
tmpscript - > pOnLogin ( pPlayer ) ;
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
void ScriptMgr : : OnLogout ( Player * pPlayer )
2009-09-13 00:01:35 -07:00
{
Script * tmpscript = m_scripts [ GetScriptId ( " scripted_on_events " ) ] ;
if ( ! tmpscript | | ! tmpscript - > pOnLogout ) return ;
tmpscript - > pOnLogout ( pPlayer ) ;
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
void ScriptMgr : : OnPVPKill ( Player * killer , Player * killed )
2009-09-13 00:01:35 -07:00
{
Script * tmpscript = m_scripts [ GetScriptId ( " scripted_on_events " ) ] ;
if ( ! tmpscript | | ! tmpscript - > pOnPVPKill ) return ;
tmpscript - > pOnPVPKill ( killer , killed ) ;
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : OnSpellCast ( Unit * pUnitTarget , Item * pItemTarget , GameObject * pGoTarget , uint32 i , SpellEntry const * spell )
2009-09-23 20:19:21 -07:00
{
Script * tmpscript = m_scripts [ GetScriptId ( " scripted_on_events " ) ] ;
if ( ! tmpscript | | ! tmpscript - > pOnSpellCast ) return true ;
return tmpscript - > pOnSpellCast ( pUnitTarget , pItemTarget , pGoTarget , i , spell ) ;
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
uint32 ScriptMgr : : OnGetXP ( Player * pPlayer , uint32 amount )
2009-09-23 20:19:21 -07:00
{
Script * tmpscript = m_scripts [ GetScriptId ( " scripted_on_events " ) ] ;
if ( ! tmpscript | | ! tmpscript - > pOnGetXP ) return amount ;
return tmpscript - > pOnGetXP ( pPlayer , amount ) ;
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
uint32 ScriptMgr : : OnGetMoney ( Player * pPlayer , int32 amount )
2009-09-23 20:19:21 -07:00
{
Script * tmpscript = m_scripts [ GetScriptId ( " scripted_on_events " ) ] ;
if ( ! tmpscript | | ! tmpscript - > pOnGetMoney ) return amount ;
return tmpscript - > pOnGetMoney ( pPlayer , amount ) ;
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : OnPlayerChat ( Player * pPlayer , const char * text )
2009-09-23 20:19:21 -07:00
{
Script * tmpscript = m_scripts [ GetScriptId ( " scripted_on_events " ) ] ;
if ( ! tmpscript | | ! tmpscript - > pOnPlayerChat ) return true ;
return tmpscript - > pOnPlayerChat ( pPlayer , text ) ;
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
void ScriptMgr : : OnServerStartup ( )
2009-09-23 20:19:21 -07:00
{
Script * tmpscript = m_scripts [ GetScriptId ( " scripted_on_events " ) ] ;
if ( ! tmpscript | | ! tmpscript - > pOnServerStartup ) return ;
tmpscript - > pOnServerStartup ( ) ;
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
void ScriptMgr : : OnServerShutdown ( )
2009-09-23 20:19:21 -07:00
{
Script * tmpscript = m_scripts [ GetScriptId ( " scripted_on_events " ) ] ;
if ( ! tmpscript | | ! tmpscript - > pOnServerShutdown ) return ;
tmpscript - > pOnServerShutdown ( ) ;
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
void ScriptMgr : : OnAreaChange ( Player * pPlayer , AreaTableEntry const * pArea )
2009-09-23 20:19:21 -07:00
{
Script * tmpscript = m_scripts [ GetScriptId ( " scripted_on_events " ) ] ;
if ( ! tmpscript | | ! tmpscript - > pOnAreaChange ) return ;
tmpscript - > pOnAreaChange ( pPlayer , pArea ) ;
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : OnItemClick ( Player * pPlayer , Item * pItem )
2009-09-23 20:19:21 -07:00
{
Script * tmpscript = m_scripts [ GetScriptId ( " scripted_on_events " ) ] ;
if ( ! tmpscript | | ! tmpscript - > pOnItemClick ) return true ;
return tmpscript - > pOnItemClick ( pPlayer , pItem ) ;
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : OnItemOpen ( Player * pPlayer , Item * pItem )
2009-09-23 20:19:21 -07:00
{
Script * tmpscript = m_scripts [ GetScriptId ( " scripted_on_events " ) ] ;
if ( ! tmpscript | | ! tmpscript - > pOnItemOpen ) return true ;
return tmpscript - > pOnItemOpen ( pPlayer , pItem ) ;
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : OnGoClick ( Player * pPlayer , GameObject * pGameObject )
2009-09-23 20:19:21 -07:00
{
Script * tmpscript = m_scripts [ GetScriptId ( " scripted_on_events " ) ] ;
if ( ! tmpscript | | ! tmpscript - > pOnGoClick ) return true ;
return tmpscript - > pOnGoClick ( pPlayer , pGameObject ) ;
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
void ScriptMgr : : OnCreatureKill ( Player * pPlayer , Creature * pCreature )
2009-09-23 20:19:21 -07:00
{
Script * tmpscript = m_scripts [ GetScriptId ( " scripted_on_events " ) ] ;
if ( ! tmpscript | | ! tmpscript - > pOnCreatureKill ) return ;
tmpscript - > pOnCreatureKill ( pPlayer , pCreature ) ;
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
char const * ScriptMgr : : ScriptsVersion ( )
2008-11-20 16:16:57 -06:00
{
2010-01-19 11:36:05 +01:00
return " Integrated Trinity Scripts " ;
2008-11-20 16:16:57 -06:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : GossipHello ( Player * pPlayer , Creature * pCreature )
2008-10-11 14:16:25 -05:00
{
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pCreature - > GetScriptId ( ) ] ;
2008-10-25 11:40:10 -05:00
if ( ! tmpscript | | ! tmpscript - > pGossipHello ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
pPlayer - > PlayerTalkClass - > ClearMenus ( ) ;
return tmpscript - > pGossipHello ( pPlayer , pCreature ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : GossipSelect ( Player * pPlayer , Creature * pCreature , uint32 uiSender , uint32 uiAction )
2008-10-11 14:16:25 -05:00
{
2009-08-15 00:32:04 +02:00
debug_log ( " TSCR: Gossip selection, sender: %d, action: %d " , uiSender , uiAction ) ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pCreature - > GetScriptId ( ) ] ;
2008-10-25 11:40:10 -05:00
if ( ! tmpscript | | ! tmpscript - > pGossipSelect ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
pPlayer - > PlayerTalkClass - > ClearMenus ( ) ;
return tmpscript - > pGossipSelect ( pPlayer , pCreature , uiSender , uiAction ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : GossipSelectWithCode ( Player * pPlayer , Creature * pCreature , uint32 uiSender , uint32 uiAction , const char * sCode )
2008-10-11 14:16:25 -05:00
{
2009-08-15 00:32:04 +02:00
debug_log ( " TSCR: Gossip selection with code, sender: %d, action: %d " , uiSender , uiAction ) ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pCreature - > GetScriptId ( ) ] ;
2008-10-25 11:40:10 -05:00
if ( ! tmpscript | | ! tmpscript - > pGossipSelectWithCode ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
pPlayer - > PlayerTalkClass - > ClearMenus ( ) ;
return tmpscript - > pGossipSelectWithCode ( pPlayer , pCreature , uiSender , uiAction , sCode ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : GOSelect ( Player * pPlayer , GameObject * pGO , uint32 uiSender , uint32 uiAction )
2009-03-30 16:57:17 +02:00
{
2010-04-07 19:14:10 +02:00
if ( ! pGO )
2009-04-19 18:48:20 +02:00
return false ;
2009-08-15 00:32:04 +02:00
debug_log ( " TSCR: Gossip selection, sender: %d, action: %d " , uiSender , uiAction ) ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pGO - > GetGOInfo ( ) - > ScriptId ] ;
2010-04-07 19:14:10 +02:00
if ( ! tmpscript | | ! tmpscript - > pGOSelect ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
pPlayer - > PlayerTalkClass - > ClearMenus ( ) ;
return tmpscript - > pGOSelect ( pPlayer , pGO , uiSender , uiAction ) ;
2009-03-30 16:57:17 +02:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : GOSelectWithCode ( Player * pPlayer , GameObject * pGO , uint32 uiSender , uint32 uiAction , const char * sCode )
2009-03-30 16:57:17 +02:00
{
2010-04-07 19:14:10 +02:00
if ( ! pGO )
2009-04-19 18:48:20 +02:00
return false ;
2009-08-15 00:32:04 +02:00
debug_log ( " TSCR: Gossip selection, sender: %d, action: %d " , uiSender , uiAction ) ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pGO - > GetGOInfo ( ) - > ScriptId ] ;
2010-04-07 19:14:10 +02:00
if ( ! tmpscript | | ! tmpscript - > pGOSelectWithCode ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
pPlayer - > PlayerTalkClass - > ClearMenus ( ) ;
return tmpscript - > pGOSelectWithCode ( pPlayer , pGO , uiSender , uiAction , sCode ) ;
2009-03-30 16:57:17 +02:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : QuestAccept ( Player * pPlayer , Creature * pCreature , Quest const * pQuest )
2008-10-11 14:16:25 -05:00
{
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pCreature - > GetScriptId ( ) ] ;
2008-10-25 11:40:10 -05:00
if ( ! tmpscript | | ! tmpscript - > pQuestAccept ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
pPlayer - > PlayerTalkClass - > ClearMenus ( ) ;
return tmpscript - > pQuestAccept ( pPlayer , pCreature , pQuest ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : QuestSelect ( Player * pPlayer , Creature * pCreature , Quest const * pQuest )
2008-10-11 14:16:25 -05:00
{
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pCreature - > GetScriptId ( ) ] ;
2008-10-25 11:40:10 -05:00
if ( ! tmpscript | | ! tmpscript - > pQuestSelect ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
pPlayer - > PlayerTalkClass - > ClearMenus ( ) ;
return tmpscript - > pQuestSelect ( pPlayer , pCreature , pQuest ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : QuestComplete ( Player * pPlayer , Creature * pCreature , Quest const * pQuest )
2008-10-11 14:16:25 -05:00
{
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pCreature - > GetScriptId ( ) ] ;
2008-10-25 11:40:10 -05:00
if ( ! tmpscript | | ! tmpscript - > pQuestComplete ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
pPlayer - > PlayerTalkClass - > ClearMenus ( ) ;
return tmpscript - > pQuestComplete ( pPlayer , pCreature , pQuest ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : ChooseReward ( Player * pPlayer , Creature * pCreature , Quest const * pQuest , uint32 opt )
2008-10-11 14:16:25 -05:00
{
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pCreature - > GetScriptId ( ) ] ;
2008-10-25 11:40:10 -05:00
if ( ! tmpscript | | ! tmpscript - > pChooseReward ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
pPlayer - > PlayerTalkClass - > ClearMenus ( ) ;
return tmpscript - > pChooseReward ( pPlayer , pCreature , pQuest , opt ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
uint32 ScriptMgr : : NPCDialogStatus ( Player * pPlayer , Creature * pCreature )
2008-10-11 14:16:25 -05:00
{
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pCreature - > GetScriptId ( ) ] ;
2008-10-25 11:40:10 -05:00
if ( ! tmpscript | | ! tmpscript - > pNPCDialogStatus ) return 100 ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
pPlayer - > PlayerTalkClass - > ClearMenus ( ) ;
return tmpscript - > pNPCDialogStatus ( pPlayer , pCreature ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
uint32 ScriptMgr : : GODialogStatus ( Player * pPlayer , GameObject * pGO )
2008-10-11 14:16:25 -05:00
{
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pGO - > GetGOInfo ( ) - > ScriptId ] ;
2008-11-20 16:16:57 -06:00
if ( ! tmpscript | | ! tmpscript - > pGODialogStatus ) return 100 ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
pPlayer - > PlayerTalkClass - > ClearMenus ( ) ;
return tmpscript - > pGODialogStatus ( pPlayer , pGO ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : ItemHello ( Player * pPlayer , Item * pItem , Quest const * pQuest )
2008-10-11 14:16:25 -05:00
{
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pItem - > GetProto ( ) - > ScriptId ] ;
2008-10-25 11:40:10 -05:00
if ( ! tmpscript | | ! tmpscript - > pItemHello ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
pPlayer - > PlayerTalkClass - > ClearMenus ( ) ;
return tmpscript - > pItemHello ( pPlayer , pItem , pQuest ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : ItemQuestAccept ( Player * pPlayer , Item * pItem , Quest const * pQuest )
2008-10-11 14:16:25 -05:00
{
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pItem - > GetProto ( ) - > ScriptId ] ;
2008-10-25 11:40:10 -05:00
if ( ! tmpscript | | ! tmpscript - > pItemQuestAccept ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
pPlayer - > PlayerTalkClass - > ClearMenus ( ) ;
return tmpscript - > pItemQuestAccept ( pPlayer , pItem , pQuest ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : GOHello ( Player * pPlayer , GameObject * pGO )
2008-10-11 14:16:25 -05:00
{
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pGO - > GetGOInfo ( ) - > ScriptId ] ;
2008-10-25 11:40:10 -05:00
if ( ! tmpscript | | ! tmpscript - > pGOHello ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
pPlayer - > PlayerTalkClass - > ClearMenus ( ) ;
return tmpscript - > pGOHello ( pPlayer , pGO ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : GOQuestAccept ( Player * pPlayer , GameObject * pGO , Quest const * pQuest )
2008-10-11 14:16:25 -05:00
{
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pGO - > GetGOInfo ( ) - > ScriptId ] ;
2008-10-25 11:40:10 -05:00
if ( ! tmpscript | | ! tmpscript - > pGOQuestAccept ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
pPlayer - > PlayerTalkClass - > ClearMenus ( ) ;
return tmpscript - > pGOQuestAccept ( pPlayer , pGO , pQuest ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : GOChooseReward ( Player * pPlayer , GameObject * pGO , Quest const * pQuest , uint32 opt )
2008-10-11 14:16:25 -05:00
{
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pGO - > GetGOInfo ( ) - > ScriptId ] ;
2008-10-25 11:40:10 -05:00
if ( ! tmpscript | | ! tmpscript - > pGOChooseReward ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
pPlayer - > PlayerTalkClass - > ClearMenus ( ) ;
return tmpscript - > pGOChooseReward ( pPlayer , pGO , pQuest , opt ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-06-03 14:29:04 +02:00
void ScriptMgr : : GODestroyed ( Player * pPlayer , GameObject * pGO , uint32 destroyedEvent )
{
Script * tmpscript = m_scripts [ pGO - > GetGOInfo ( ) - > ScriptId ] ;
if ( ! tmpscript ) return ;
tmpscript - > pGODestroyed ( pPlayer , pGO , destroyedEvent ) ;
}
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : AreaTrigger ( Player * pPlayer , AreaTriggerEntry const * atEntry )
2008-10-11 14:16:25 -05:00
{
2008-11-20 16:16:57 -06:00
Script * tmpscript = m_scripts [ GetAreaTriggerScriptId ( atEntry - > id ) ] ;
2008-10-25 11:40:10 -05:00
if ( ! tmpscript | | ! tmpscript - > pAreaTrigger ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
return tmpscript - > pAreaTrigger ( pPlayer , atEntry ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
CreatureAI * ScriptMgr : : GetAI ( Creature * pCreature )
2008-10-11 14:16:25 -05:00
{
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pCreature - > GetScriptId ( ) ] ;
2008-10-25 11:40:10 -05:00
if ( ! tmpscript | | ! tmpscript - > GetAI ) return NULL ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
return tmpscript - > GetAI ( pCreature ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : ItemUse ( Player * pPlayer , Item * pItem , SpellCastTargets const & targets )
2008-10-11 14:16:25 -05:00
{
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pItem - > GetProto ( ) - > ScriptId ] ;
2008-10-25 11:40:10 -05:00
if ( ! tmpscript | | ! tmpscript - > pItemUse ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
return tmpscript - > pItemUse ( pPlayer , pItem , targets ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : ItemExpire ( Player * pPlayer , ItemPrototype const * pItemProto )
2009-08-04 01:44:14 +02:00
{
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pItemProto - > ScriptId ] ;
2009-08-04 01:44:14 +02:00
if ( ! tmpscript | | ! tmpscript - > pItemExpire ) return true ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
return tmpscript - > pItemExpire ( pPlayer , pItemProto ) ;
2009-08-04 01:44:14 +02:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : EffectDummyCreature ( Unit * caster , uint32 spellId , uint32 effIndex , Creature * crTarget )
2008-10-11 14:16:25 -05:00
{
2009-04-03 16:54:20 -06:00
Script * tmpscript = m_scripts [ crTarget - > GetScriptId ( ) ] ;
2009-10-17 15:51:44 -07:00
2009-04-03 16:54:20 -06:00
if ( ! tmpscript | | ! tmpscript - > pEffectDummyCreature ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
return tmpscript - > pEffectDummyCreature ( caster , spellId , effIndex , crTarget ) ;
2008-10-11 14:16:25 -05:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : EffectDummyGameObj ( Unit * caster , uint32 spellId , uint32 effIndex , GameObject * gameObjTarget )
2009-03-13 20:34:36 -06:00
{
Script * tmpscript = m_scripts [ gameObjTarget - > GetGOInfo ( ) - > ScriptId ] ;
2009-10-17 15:51:44 -07:00
2009-03-13 20:34:36 -06:00
if ( ! tmpscript | | ! tmpscript - > pEffectDummyGameObj ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
return tmpscript - > pEffectDummyGameObj ( caster , spellId , effIndex , gameObjTarget ) ;
2009-03-13 20:34:36 -06:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
bool ScriptMgr : : EffectDummyItem ( Unit * caster , uint32 spellId , uint32 effIndex , Item * itemTarget )
2009-03-13 20:34:36 -06:00
{
2009-04-03 16:54:20 -06:00
Script * tmpscript = m_scripts [ itemTarget - > GetProto ( ) - > ScriptId ] ;
2009-10-17 15:51:44 -07:00
2009-04-03 16:54:20 -06:00
if ( ! tmpscript | | ! tmpscript - > pEffectDummyItem ) return false ;
2009-10-17 15:51:44 -07:00
2009-08-15 00:32:04 +02:00
return tmpscript - > pEffectDummyItem ( caster , spellId , effIndex , itemTarget ) ;
2009-03-13 20:34:36 -06:00
}
2009-10-17 15:51:44 -07:00
2010-01-19 11:36:05 +01:00
InstanceData * ScriptMgr : : CreateInstanceData ( Map * map )
2009-03-13 20:34:36 -06:00
{
2009-04-03 16:54:20 -06:00
if ( ! map - > IsDungeon ( ) ) return NULL ;
2009-10-17 15:51:44 -07:00
2009-04-03 16:54:20 -06:00
Script * tmpscript = m_scripts [ ( ( InstanceMap * ) map ) - > GetScriptId ( ) ] ;
if ( ! tmpscript | | ! tmpscript - > GetInstanceData ) return NULL ;
2009-10-17 15:51:44 -07:00
2009-04-03 16:54:20 -06:00
return tmpscript - > GetInstanceData ( map ) ;
2009-03-13 20:34:36 -06:00
}
2009-04-03 16:54:20 -06:00