Show
Ignore:
Timestamp:
11/22/08 00:35:41 (17 years ago)
Author:
yumileroy
Message:

Delete possessed AI only on creature delete.

Original author: gvcoman
Date: 2008-11-16 14:38:02-05:00

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/bindings/scripts/ScriptMgr.cpp

    r260 r272  
    1818 
    1919//*** Global data *** 
    20 int num_db_scripts; 
    21 int num_sc_scripts; 
     20int nrscripts; 
    2221Script *m_scripts[MAX_SCRIPTS]; 
    2322 
     
    4847// Text Maps 
    4948UNORDERED_MAP<int32, StringTextData> TextMap; 
     49 
    5050 
    5151//*** End Global data *** 
     
    11811181TRINITY_DLL_EXPORT 
    11821182void ScriptsFree() 
    1183 { 
     1183{    
    11841184    // Free Spell Summary 
    11851185    delete []SpellSummary; 
    11861186 
    11871187    // Free resources before library unload 
    1188     for(int i=0;i<num_db_scripts;i++) 
     1188    for(int i=0;i<nrscripts;i++) 
    11891189        delete m_scripts[i]; 
    11901190 
    1191     num_db_scripts = 0; 
    1192     num_sc_scripts = 0; 
     1191    nrscripts = 0; 
    11931192} 
    11941193 
     
    12411240        LoadDatabase(); 
    12421241 
    1243     num_db_scripts = GetScriptNames().size(); 
    1244  
    12451242    outstring_log("TSCR: Loading C++ scripts"); 
    12461243    barGoLink bar(1); 
     
    12481245    outstring_log(""); 
    12491246 
     1247    nrscripts = 0; 
    12501248    for(int i=0;i<MAX_SCRIPTS;i++) 
    12511249        m_scripts[i]=NULL; 
     
    17781776    // ------------------- 
    17791777 
    1780     outstring_log(">> Loaded %i C++ Scripts (of %i ScriptNames defined in Mangos database)", num_sc_scripts, num_db_scripts); 
     1778    outstring_log("TSCR: Loaded %u C++ Scripts", nrscripts); 
     1779    outstring_log(""); 
    17811780} 
    17821781 
     
    18501849//*** Functions used internally *** 
    18511850 
    1852 void Script::RegisterSelf() 
    1853 { 
    1854     int id = GetScriptId(Name.c_str()); 
    1855     if (id != 0) 
    1856     { 
    1857         m_scripts[id] = this; 
    1858         ++num_sc_scripts; 
    1859     } else 
    1860         debug_log("SD2: RegisterSelf, but script named %s does not have ScriptName assigned in database.",(this)->Name.c_str()); 
     1851TRINITY_DLL_EXPORT 
     1852char const* ScriptsVersion() 
     1853{ 
     1854        return "Default Trinity scripting library"; 
     1855} 
     1856 
     1857Script* GetScriptByName(std::string Name) 
     1858{ 
     1859    if (Name.empty()) 
     1860        return NULL; 
     1861 
     1862    for(int i=0;i<MAX_SCRIPTS;i++) 
     1863    { 
     1864        if (m_scripts[i] && m_scripts[i]->Name == Name) 
     1865            return m_scripts[i]; 
     1866    } 
     1867    return NULL; 
    18611868} 
    18621869 
     
    18651872 
    18661873TRINITY_DLL_EXPORT 
    1867 char const* ScriptsVersion() 
    1868 { 
    1869         return "Default Trinity scripting library"; 
    1870 } 
    1871 TRINITY_DLL_EXPORT 
    18721874bool GossipHello ( Player * player, Creature *_Creature ) 
    18731875{ 
    1874     Script *tmpscript = m_scripts[_Creature->GetScriptId()]; 
     1876    Script *tmpscript = GetScriptByName(_Creature->GetScriptName()); 
    18751877    if (!tmpscript || !tmpscript->pGossipHello) return false; 
    18761878 
     
    18841886    debug_log("TSCR: Gossip selection, sender: %d, action: %d",sender, action); 
    18851887 
    1886     Script *tmpscript = m_scripts[_Creature->GetScriptId()]; 
     1888    Script *tmpscript = GetScriptByName(_Creature->GetScriptName()); 
    18871889    if (!tmpscript || !tmpscript->pGossipSelect) return false; 
    18881890 
     
    18961898    debug_log("TSCR: Gossip selection with code, sender: %d, action: %d",sender, action); 
    18971899 
    1898     Script *tmpscript = m_scripts[_Creature->GetScriptId()]; 
     1900    Script *tmpscript = GetScriptByName(_Creature->GetScriptName()); 
    18991901    if (!tmpscript || !tmpscript->pGossipSelectWithCode) return false; 
    19001902 
     
    19061908bool QuestAccept( Player *player, Creature *_Creature, Quest const *_Quest ) 
    19071909{ 
    1908     Script *tmpscript = m_scripts[_Creature->GetScriptId()]; 
     1910    Script *tmpscript = GetScriptByName(_Creature->GetScriptName()); 
    19091911    if (!tmpscript || !tmpscript->pQuestAccept) return false; 
    19101912 
     
    19161918bool QuestSelect( Player *player, Creature *_Creature, Quest const *_Quest ) 
    19171919{ 
    1918     Script *tmpscript = m_scripts[_Creature->GetScriptId()]; 
     1920    Script *tmpscript = GetScriptByName(_Creature->GetScriptName()); 
    19191921    if (!tmpscript || !tmpscript->pQuestSelect) return false; 
    19201922 
     
    19261928bool QuestComplete( Player *player, Creature *_Creature, Quest const *_Quest ) 
    19271929{ 
    1928     Script *tmpscript = m_scripts[_Creature->GetScriptId()]; 
     1930    Script *tmpscript = GetScriptByName(_Creature->GetScriptName()); 
    19291931    if (!tmpscript || !tmpscript->pQuestComplete) return false; 
    19301932 
     
    19361938bool ChooseReward( Player *player, Creature *_Creature, Quest const *_Quest, uint32 opt ) 
    19371939{ 
    1938     Script *tmpscript = m_scripts[_Creature->GetScriptId()]; 
     1940    Script *tmpscript = GetScriptByName(_Creature->GetScriptName()); 
    19391941    if (!tmpscript || !tmpscript->pChooseReward) return false; 
    19401942 
     
    19461948uint32 NPCDialogStatus( Player *player, Creature *_Creature ) 
    19471949{ 
    1948     Script *tmpscript = m_scripts[_Creature->GetScriptId()]; 
     1950    Script *tmpscript = GetScriptByName(_Creature->GetScriptName()); 
    19491951    if (!tmpscript || !tmpscript->pNPCDialogStatus) return 100; 
    19501952 
     
    19561958uint32 GODialogStatus( Player *player, GameObject *_GO ) 
    19571959{ 
    1958     Script *tmpscript = m_scripts[_GO->GetGOInfo()->ScriptId]; 
    1959     if (!tmpscript || !tmpscript->pGODialogStatus) return 100; 
     1960    Script *tmpscript = GetScriptByName(_GO->GetGOInfo()->ScriptName); 
     1961    if(!tmpscript || !tmpscript->pGODialogStatus) return 100; 
    19601962 
    19611963    player->PlayerTalkClass->ClearMenus(); 
     
    19661968bool ItemHello( Player *player, Item *_Item, Quest const *_Quest ) 
    19671969{ 
    1968     Script *tmpscript = m_scripts[_Item->GetProto()->ScriptId]; 
     1970    Script *tmpscript = GetScriptByName(_Item->GetProto()->ScriptName); 
    19691971    if (!tmpscript || !tmpscript->pItemHello) return false; 
    19701972 
     
    19761978bool ItemQuestAccept( Player *player, Item *_Item, Quest const *_Quest ) 
    19771979{ 
    1978     Script *tmpscript = m_scripts[_Item->GetProto()->ScriptId]; 
     1980    Script *tmpscript = GetScriptByName(_Item->GetProto()->ScriptName); 
    19791981    if (!tmpscript || !tmpscript->pItemQuestAccept) return false; 
    19801982 
     
    19861988bool GOHello( Player *player, GameObject *_GO ) 
    19871989{ 
    1988     Script *tmpscript = m_scripts[_GO->GetGOInfo()->ScriptId]; 
     1990    Script *tmpscript = GetScriptByName(_GO->GetGOInfo()->ScriptName); 
    19891991    if (!tmpscript || !tmpscript->pGOHello) return false; 
    19901992 
     
    19961998bool GOQuestAccept( Player *player, GameObject *_GO, Quest const *_Quest ) 
    19971999{ 
    1998     Script *tmpscript = m_scripts[_GO->GetGOInfo()->ScriptId]; 
     2000    Script *tmpscript = GetScriptByName(_GO->GetGOInfo()->ScriptName); 
    19992001    if (!tmpscript || !tmpscript->pGOQuestAccept) return false; 
    20002002 
     
    20062008bool GOChooseReward( Player *player, GameObject *_GO, Quest const *_Quest, uint32 opt ) 
    20072009{ 
    2008     Script *tmpscript = m_scripts[_GO->GetGOInfo()->ScriptId]; 
     2010    Script *tmpscript = GetScriptByName(_GO->GetGOInfo()->ScriptName); 
    20092011    if (!tmpscript || !tmpscript->pGOChooseReward) return false; 
    20102012 
     
    20162018bool AreaTrigger( Player *player, AreaTriggerEntry * atEntry) 
    20172019{ 
    2018     Script *tmpscript = m_scripts[GetAreaTriggerScriptId(atEntry->id)]; 
     2020    Script *tmpscript = NULL; 
     2021 
     2022    tmpscript = GetScriptByName(GetAreaTriggerScriptNameById(atEntry->id)); 
    20192023    if (!tmpscript || !tmpscript->pAreaTrigger) return false; 
    20202024 
     
    20252029CreatureAI* GetAI(Creature *_Creature) 
    20262030{ 
    2027     Script *tmpscript = m_scripts[_Creature->GetScriptId()]; 
     2031    Script *tmpscript = GetScriptByName(_Creature->GetScriptName()); 
     2032 
    20282033    if (!tmpscript || !tmpscript->GetAI) return NULL; 
    2029  
    20302034    return tmpscript->GetAI(_Creature); 
    20312035} 
     
    20342038bool ItemUse( Player *player, Item* _Item, SpellCastTargets const& targets) 
    20352039{ 
    2036     Script *tmpscript = m_scripts[_Item->GetProto()->ScriptId]; 
     2040    Script *tmpscript = GetScriptByName(_Item->GetProto()->ScriptName); 
    20372041    if (!tmpscript || !tmpscript->pItemUse) return false; 
    20382042 
     
    20432047bool ReceiveEmote( Player *player, Creature *_Creature, uint32 emote ) 
    20442048{ 
    2045     Script *tmpscript = m_scripts[_Creature->GetScriptId()]; 
     2049    Script *tmpscript = GetScriptByName(_Creature->GetScriptName()); 
    20462050    if (!tmpscript || !tmpscript->pReceiveEmote) return false; 
    20472051 
     
    20522056InstanceData* CreateInstanceData(Map *map) 
    20532057{ 
    2054     if (!map->IsDungeon()) return NULL; 
    2055  
    2056     Script *tmpscript = m_scripts[((InstanceMap*)map)->GetScriptId()]; 
    2057     if (!tmpscript || !tmpscript->GetInstanceData) return NULL; 
     2058    Script *tmpscript = NULL; 
     2059 
     2060    if (!map->IsDungeon()) return false; 
     2061 
     2062    tmpscript = GetScriptByName(((InstanceMap*)map)->GetScript()); 
     2063    if (!tmpscript || !tmpscript->GetInstanceData) return false; 
    20582064 
    20592065    return tmpscript->GetInstanceData(map);