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 */
#include "precompiled.h"
#include "Config/Config.h"
#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"
2009-08-16 01:45:49 +02:00
#include "../system/ScriptLoader.h"
2009-08-16 19:38:18 +02:00
#include "../system/system.h"
2008-10-11 14:16:25 -05:00
#define _FULLVERSION "TrinityScript"
#ifndef _TRINITY_SCRIPT_CONFIG
2008-10-12 17:35:16 -05:00
# define _TRINITY_SCRIPT_CONFIG "trinitycore.conf"
#endif _TRINITY_SCRIPT_CONFIG
2008-10-11 14:16:25 -05:00
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 ];
Config TScriptConfig ;
void FillSpellSummary ();
2009-02-05 15:38:24 -06:00
void LoadOverridenSQLData ();
void LoadOverridenDBCData ();
2008-10-11 14:16:25 -05:00
void LoadDatabase ()
{
//Get db string from file
2009-03-18 20:32:17 -06:00
std :: string dbstring = TScriptConfig . GetStringDefault ( "WorldDatabaseInfo" , "" );
2008-10-11 14:16:25 -05:00
2009-08-15 00:32:04 +02:00
if ( dbstring . empty ())
2008-10-11 14:16:25 -05:00
{
2008-10-12 17:35:16 -05:00
error_log ( "TSCR: Missing world database info from configuration file. Load database aborted." );
2008-10-11 14:16:25 -05:00
return ;
}
//Initialize connection to DB
2009-08-15 00:32:04 +02:00
if ( ! dbstring . empty () && TScriptDB . Initialize ( dbstring . c_str ()))
2008-10-11 14:16:25 -05:00
{
2009-08-30 20:34:47 -07:00
outstring_log ( "TSCR: TrinityScript database initialized successfully." );
2008-10-11 14:16:25 -05:00
outstring_log ( "" );
2009-08-16 19:38:18 +02:00
pSystemMgr . LoadVersion ();
pSystemMgr . LoadScriptTexts ();
pSystemMgr . LoadScriptTextsCustom ();
pSystemMgr . LoadScriptWaypoints ();
2009-03-22 23:11:55 +01:00
}
else
{
2009-08-30 20:34:47 -07:00
error_log ( "TSCR: Unable to connect to database at %s. Load database aborted." , dbstring . c_str ());
2009-08-16 19:38:18 +02:00
return ;
2009-03-22 23:11:55 +01:00
}
2008-10-11 14:16:25 -05:00
TScriptDB . HaltDelayThread ();
}
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 ;
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2008-10-11 14:16:25 -05:00
void ScriptsFree ()
2008-11-20 16:16:57 -06:00
{
2008-10-11 14:16:25 -05:00
// Free Spell Summary
delete [] SpellSummary ;
// Free resources before library unload
2009-08-13 22:27:55 +02:00
for ( uint16 i = 0 ; i < MAX_SCRIPTS ; ++ i )
2008-10-11 14:16:25 -05:00
delete m_scripts [ i ];
2008-11-20 16:16:57 -06:00
num_sc_scripts = 0 ;
2008-10-11 14:16:25 -05:00
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-04-25 13:35:46 -04:00
void ScriptsInit ( char const * cfg_file = "trinitycore.conf" )
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 ( "Trinity Script initializing %s" , _FULLVERSION );
outstring_log ( "" );
//Get configuration file
2009-04-25 13:35:46 -04:00
if ( ! TScriptConfig . SetSource ( cfg_file ))
2008-10-11 14:16:25 -05:00
error_log ( "TSCR: Unable to open configuration file. Database will be unaccessible. Configuration values will use default." );
2009-08-16 19:38:18 +02:00
else
outstring_log ( "TSCR: Using configuration file %s" , cfg_file );
2008-10-11 14:16:25 -05:00
outstring_log ( "" );
2009-08-16 19:38:18 +02:00
//Load database (must be called after SD2Config.SetSource).
LoadDatabase ();
2008-10-11 14:16:25 -05:00
outstring_log ( "TSCR: Loading C++ scripts" );
barGoLink bar ( 1 );
bar . step ();
outstring_log ( "" );
2009-08-13 22:27:55 +02:00
for ( uint16 i = 0 ; i < MAX_SCRIPTS ; ++ i )
2008-10-11 14:16:25 -05:00
m_scripts [ i ] = NULL ;
FillSpellSummary ();
2009-08-16 01:45:49 +02:00
AddScripts ();
2008-10-11 14:16:25 -05:00
2009-02-09 08:16:34 -05:00
outstring_log ( ">> Loaded %i C++ Scripts." , num_sc_scripts );
2009-02-05 15:38:24 -06:00
outstring_log ( ">> Load Overriden SQL Data." );
LoadOverridenSQLData ();
outstring_log ( ">> Load Overriden DBC Data." );
LoadOverridenDBCData ();
2008-10-11 14:16:25 -05:00
}
//*********************************
2008-10-25 11:40:10 -05:00
//*** Functions used globally ***
2008-10-11 14:16:25 -05: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-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-08-16 19:38:18 +02:00
const StringTextData * pData = pSystemMgr . GetTextData ( iTextEntry );
2008-10-11 14:16:25 -05: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-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 );
2008-10-25 11:40:10 -05:00
2009-08-16 19:38:18 +02:00
if ( pData -> uiSoundId )
2008-10-11 14:16:25 -05:00
{
2009-08-16 19:38:18 +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-08-16 19:38:18 +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
}
2008-12-31 12:33:54 +01: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
error_log ( "TSCR: DoScriptText entry %i cannot whisper without target unit (TYPEID_PLAYER)." , iTextEntry );
2008-10-11 14:16:25 -05:00
} break ;
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
error_log ( "TSCR: DoScriptText entry %i cannot whisper without target unit (TYPEID_PLAYER)." , iTextEntry );
2008-10-11 14:16:25 -05:00
} 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
}
}
2008-10-25 11:40:10 -05:00
//*********************************
//*** Functions used internally ***
2008-11-20 16:16:57 -06:00
void Script :: RegisterSelf ()
2008-11-03 08:14:21 -06:00
{
2008-11-20 16:16:57 -06:00
int id = GetScriptId ( Name . c_str ());
2009-04-19 10:17:38 -05:00
if ( id )
2008-10-11 14:16:25 -05:00
{
2008-11-20 16:16:57 -06:00
m_scripts [ id ] = this ;
++ num_sc_scripts ;
2009-02-20 14:14:16 +01:00
}
2009-05-12 11:16:26 -05:00
else if ( Name . find ( "example" ) == std :: string :: npos )
2009-02-20 14:14:16 +01:00
{
2009-04-19 10:17:38 -05:00
error_db_log ( "CRASH ALERT! 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
}
//********************************
//*** Functions to be Exported ***
2008-11-20 16:16:57 -06:00
TRINITY_DLL_EXPORT
char const * ScriptsVersion ()
{
2009-02-09 08:16:34 -05:00
return "Default Trinity scripting library" ;
2008-11-20 16:16:57 -06:00
}
2009-08-16 19:38:18 +02:00
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool 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 ;
2008-10-11 14:16:25 -05: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
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool 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 );
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 -> pGossipSelect ) return false ;
2008-10-11 14:16:25 -05: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
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool 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 );
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 -> pGossipSelectWithCode ) return false ;
2008-10-11 14:16:25 -05: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-03-30 16:57:17 +02:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool GOSelect ( Player * pPlayer , GameObject * pGO , uint32 uiSender , uint32 uiAction )
2009-03-30 16:57:17 +02:00
{
2009-08-15 00:32:04 +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-03-30 16:57:17 +02:00
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pGO -> GetGOInfo () -> ScriptId ];
2009-03-30 16:57:17 +02:00
if ( ! tmpscript || ! tmpscript -> pGOSelect ) return false ;
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
}
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool GOSelectWithCode ( Player * pPlayer , GameObject * pGO , uint32 uiSender , uint32 uiAction , const char * sCode )
2009-03-30 16:57:17 +02:00
{
2009-08-15 00:32:04 +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-03-30 16:57:17 +02:00
2009-08-15 00:32:04 +02:00
Script * tmpscript = m_scripts [ pGO -> GetGOInfo () -> ScriptId ];
2009-03-30 16:57:17 +02:00
if ( ! tmpscript || ! tmpscript -> pGOSelectWithCode ) return false ;
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
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool 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 ;
2008-10-11 14:16:25 -05: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
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool 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 ;
2008-10-11 14:16:25 -05: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
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool 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 ;
2008-10-11 14:16:25 -05: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
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool 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 ;
2008-10-11 14:16:25 -05: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
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
uint32 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 ;
2008-10-11 14:16:25 -05: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
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
uint32 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 ;
2008-10-11 14:16:25 -05: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
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool 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 ;
2008-10-11 14:16:25 -05: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
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool 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 ;
2008-10-11 14:16:25 -05: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
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool 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 ;
2008-10-11 14:16:25 -05: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
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool 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 ;
2008-10-11 14:16:25 -05: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
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool 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 ;
2008-10-11 14:16:25 -05: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
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool AreaTrigger ( Player * pPlayer , AreaTriggerEntry * 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 ;
2008-10-11 14:16:25 -05:00
2009-08-15 00:32:04 +02:00
return tmpscript -> pAreaTrigger ( pPlayer , atEntry );
2008-10-11 14:16:25 -05:00
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
CreatureAI * 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 ;
2008-11-20 16:16:57 -06:00
2009-08-15 00:32:04 +02:00
return tmpscript -> GetAI ( pCreature );
2008-10-11 14:16:25 -05:00
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool 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 ;
2008-10-11 14:16:25 -05:00
2009-08-15 00:32:04 +02:00
return tmpscript -> pItemUse ( pPlayer , pItem , targets );
2008-10-11 14:16:25 -05:00
}
2009-08-04 01:44:14 +02:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool 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-08-15 00:32:04 +02:00
return tmpscript -> pItemExpire ( pPlayer , pItemProto );
2009-08-04 01:44:14 +02:00
}
2008-10-14 11:57:03 -05:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool 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 ()];
2008-10-11 14:16:25 -05:00
2009-04-03 16:54:20 -06:00
if ( ! tmpscript || ! tmpscript -> pEffectDummyCreature ) return false ;
2008-10-11 14:16:25 -05: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-02-17 20:07:49 -06:00
2009-03-13 20:34:36 -06:00
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool EffectDummyGameObj ( Unit * caster , uint32 spellId , uint32 effIndex , GameObject * gameObjTarget )
2009-03-13 20:34:36 -06:00
{
Script * tmpscript = m_scripts [ gameObjTarget -> GetGOInfo () -> ScriptId ];
if ( ! tmpscript || ! tmpscript -> pEffectDummyGameObj ) return false ;
2009-08-15 00:32:04 +02:00
return tmpscript -> pEffectDummyGameObj ( caster , spellId , effIndex , gameObjTarget );
2009-03-13 20:34:36 -06:00
}
TRINITY_DLL_EXPORT
2009-08-15 00:32:04 +02:00
bool 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-03-13 20:34:36 -06:00
2009-04-03 16:54:20 -06:00
if ( ! tmpscript || ! tmpscript -> pEffectDummyItem ) return false ;
2009-03-13 20:34:36 -06:00
2009-08-15 00:32:04 +02:00
return tmpscript -> pEffectDummyItem ( caster , spellId , effIndex , itemTarget );
2009-03-13 20:34:36 -06:00
}
TRINITY_DLL_EXPORT
2009-04-03 16:54:20 -06:00
InstanceData * 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-03-13 20:34:36 -06:00
2009-04-03 16:54:20 -06:00
Script * tmpscript = m_scripts [(( InstanceMap * ) map ) -> GetScriptId ()];
if ( ! tmpscript || ! tmpscript -> GetInstanceData ) return NULL ;
2009-03-13 20:34:36 -06: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