diff --git a/src/Client/DefScript/DefScript.cpp b/src/Client/DefScript/DefScript.cpp index d1b9817..3006f03 100644 --- a/src/Client/DefScript/DefScript.cpp +++ b/src/Client/DefScript/DefScript.cpp @@ -7,7 +7,6 @@ #include #include "VarSet.h" #include "DefScript.h" -#include "DefScriptTools.h" using namespace DefScriptTools; @@ -90,6 +89,7 @@ void DefScriptPackage::_InitFunctions(void) AddFunc("shdn",&DefScriptPackage::func_shdn); AddFunc("loaddef",&DefScriptPackage::func_loaddef); AddFunc("reloaddef",&DefScriptPackage::func_reloaddef); + AddFunc("reloaddef",&DefScriptPackage::func_unloaddef); AddFunc("setscriptpermission",&DefScriptPackage::func_setscriptpermission); AddFunc("toint",&DefScriptPackage::func_toint); AddFunc("add",&DefScriptPackage::func_add); @@ -124,6 +124,8 @@ void DefScriptPackage::_InitFunctions(void) AddFunc("random",&DefScriptPackage::func_random); AddFunc("fileexists",&DefScriptPackage::func_fileexists); AddFunc("strfind",&DefScriptPackage::func_strfind); + AddFunc("funcexists",&DefScriptPackage::func_funcexists); + AddFunc("scriptexists",&DefScriptPackage::func_scriptexists); // list functions AddFunc("lpushback",&DefScriptPackage::func_lpushback); diff --git a/src/Client/DefScript/DefScript.h b/src/Client/DefScript/DefScript.h index 81c8247..7e76966 100644 --- a/src/Client/DefScript/DefScript.h +++ b/src/Client/DefScript/DefScript.h @@ -2,14 +2,14 @@ #ifndef __DEFSCRIPT_H #define __DEFSCRIPT_H +#include "DefScriptDefines.h" #include #include #include #include "VarSet.h" #include "DynamicEvent.h" #include "ListStorage.h" - -#include "DefScriptDefines.h" +#include "DefScriptTools.h" class DefScriptPackage; class DefScript; @@ -169,6 +169,7 @@ private: DefReturnResult func_unset(CmdSet&); DefReturnResult func_loaddef(CmdSet&); DefReturnResult func_reloaddef(CmdSet&); + DefReturnResult func_unloaddef(CmdSet&); DefReturnResult func_out(CmdSet&); DefReturnResult func_eof(CmdSet&); DefReturnResult func_shdn(CmdSet&); @@ -204,6 +205,9 @@ private: DefReturnResult func_random(CmdSet&); DefReturnResult func_fileexists(CmdSet&); DefReturnResult func_strfind(CmdSet&); + DefReturnResult func_scriptexists(CmdSet&); + DefReturnResult func_funcexists(CmdSet&); + // list functions DefReturnResult func_lpushback(CmdSet&); diff --git a/src/Client/DefScript/DefScriptFunctions.cpp b/src/Client/DefScript/DefScriptFunctions.cpp index a135905..65d77c9 100644 --- a/src/Client/DefScript/DefScriptFunctions.cpp +++ b/src/Client/DefScript/DefScriptFunctions.cpp @@ -6,7 +6,6 @@ #include #include #include "DefScript.h" -#include "DefScriptTools.h" using namespace DefScriptTools; @@ -66,6 +65,14 @@ DefReturnResult DefScriptPackage::func_reloaddef(CmdSet& Set){ return r; } +DefReturnResult DefScriptPackage::func_unloaddef(CmdSet& Set) +{ + if(!ScriptExists(Set.defaultarg)) + return false; + this->DeleteScript(Set.defaultarg); + return true; +} + DefReturnResult DefScriptPackage::func_unset(CmdSet& Set){ DefReturnResult r; r.ret=Set.defaultarg; @@ -494,5 +501,17 @@ DefReturnResult DefScriptPackage::func_strfind(CmdSet& Set) return toString((uint64)pos); } +DefReturnResult DefScriptPackage::func_scriptexists(CmdSet& Set) +{ + return ScriptExists(Set.defaultarg); +} - +DefReturnResult DefScriptPackage::func_funcexists(CmdSet& Set) +{ + for(DefScriptFunctionTable::iterator i = _functable.begin(); i != _functable.end(); i++) + { + if(i->name == stringToLower(Set.defaultarg)) + return true; + } + return false; +} \ No newline at end of file diff --git a/src/Client/DefScript/DefScriptListFunctions.cpp b/src/Client/DefScript/DefScriptListFunctions.cpp index 7e21575..fd5ab6c 100644 --- a/src/Client/DefScript/DefScriptListFunctions.cpp +++ b/src/Client/DefScript/DefScriptListFunctions.cpp @@ -3,7 +3,6 @@ #include #include #include "DefScript.h" -#include "DefScriptTools.h" using namespace DefScriptTools; diff --git a/src/Client/DefScriptInterface.cpp b/src/Client/DefScriptInterface.cpp index 23d9877..a8dfd6d 100644 --- a/src/Client/DefScriptInterface.cpp +++ b/src/Client/DefScriptInterface.cpp @@ -20,6 +20,8 @@ void DefScriptPackage::_InitDefScriptInterface(void) AddFunc("savecache",&DefScriptPackage::SCsavecache); AddFunc("sendchatmessage",&DefScriptPackage::SCSendChatMessage); AddFunc("joinchannel",&DefScriptPackage::SCjoinchannel); + AddFunc("leavechannel",&DefScriptPackage::SCleavechannel); + AddFunc("listchannel",&DefScriptPackage::SClistchannel); AddFunc("loadconf",&DefScriptPackage::SCloadconf); AddFunc("applyconf",&DefScriptPackage::SCapplyconf); AddFunc("applypermissions",&DefScriptPackage::SCapplypermissions); @@ -167,6 +169,18 @@ DefReturnResult DefScriptPackage::SCjoinchannel(CmdSet& Set){ return true; } +DefReturnResult DefScriptPackage::SClistchannel(CmdSet& Set){ + if(Set.defaultarg.empty()) + return false; + if(!(((PseuInstance*)parentMethod)->GetWSession())) + { + logerror("Invalid Script call: SClistchannel: WorldSession not valid"); + DEF_RETURN_ERROR; + } + ((PseuInstance*)parentMethod)->GetWSession()->GetChannels()->RequestList(Set.defaultarg); + return true; +} + DefReturnResult DefScriptPackage::SCleavechannel(CmdSet& Set){ if(Set.defaultarg.empty()) return false; diff --git a/src/Client/DefScriptInterfaceInclude.h b/src/Client/DefScriptInterfaceInclude.h index b6442dd..71a8a0f 100644 --- a/src/Client/DefScriptInterfaceInclude.h +++ b/src/Client/DefScriptInterfaceInclude.h @@ -3,7 +3,7 @@ #define USING_DEFSCRIPT_EXTENSIONS true void _InitDefScriptInterface(void); -// Useable own internal functions: +// Usable own internal functions: DefReturnResult SCpause(CmdSet&); DefReturnResult SCSendChatMessage(CmdSet&); DefReturnResult SCsavecache(CmdSet&); @@ -12,6 +12,7 @@ DefReturnResult SCfollow(CmdSet&); DefReturnResult SCshdn(CmdSet&); DefReturnResult SCjoinchannel(CmdSet&); DefReturnResult SCleavechannel(CmdSet&); +DefReturnResult SClistchannel(CmdSet&); DefReturnResult SCloadconf(CmdSet&); DefReturnResult SCapplypermissions(CmdSet&); DefReturnResult SCapplyconf(CmdSet&); diff --git a/src/Client/World/CMSGConstructor.cpp b/src/Client/World/CMSGConstructor.cpp index 55efad0..bc682e0 100644 --- a/src/Client/World/CMSGConstructor.cpp +++ b/src/Client/World/CMSGConstructor.cpp @@ -11,25 +11,20 @@ void WorldSession::SendChatMessage(uint32 type, uint32 lang, std::string msg, st if((!_logged) || msg.empty()) return; WorldPacket packet; - packet<IsOnChannel(to)*/) return; - packet<> unk >> size; + + // store list of GUIDs in: @ChannelList + DefList *l = _worldSession->GetInstance()->GetScripts()->lists.Get("@ChannelList"); + l->clear(); for(uint32 i = 0; i < size; i++) { recvPacket >> guid >> mode; cpl[guid] = mode; + l->push_back(DefScriptTools::toString(guid)); } - // now we could do something with that list, but for now, only request names of unknown players std::string pname; bool muted,mod; - log("Player channel list, %u players:",size); + logcustom(0,WHITE,"Player channel list, %u players:",size); for(ChannelPlayerList::iterator i = cpl.begin(); i != cpl.end(); i++) { pname = _worldSession->plrNameCache.GetName(i->first); @@ -220,7 +224,7 @@ void Channel::HandleListRequest(WorldPacket& recvPacket) while(pname.length()<12) pname += " "; // for better formatting - log("%s ["I64FMT"] %s %s",pname.c_str(),i->first,muted?"(muted)":"",mod?"(moderator)":""); + logcustom(0,WHITE,"%s ["I64FMT"] %s %s",pname.c_str(),i->first,muted?"(muted)":"",mod?"(moderator)":""); } } diff --git a/src/tools/stuffextract/StuffExtract.cpp b/src/tools/stuffextract/StuffExtract.cpp index bd7b9a4..65373bb 100644 --- a/src/tools/stuffextract/StuffExtract.cpp +++ b/src/tools/stuffextract/StuffExtract.cpp @@ -192,12 +192,16 @@ std::string AutoGetDataString(DBCFile::Iterator& it, const char* format, uint32 // output a formatted scp file -void OutSCP(char *fn, SCPStorageMap& scp) +void OutSCP(char *fn, SCPStorageMap& scp, std::string dbName="") { std::fstream f; f.open(fn, std::ios_base::out); if(f.is_open()) { + if(dbName.length()) + { + f << "#dbname=" << dbName << "\n"; + } for(SCPStorageMap::iterator mi = scp.begin(); mi != scp.end(); mi++) { f << "[" << mi->first << "]\n"; @@ -413,12 +417,12 @@ bool ConvertDBC(void) CreateDir("stuffextract/data/scp"); printf("Writing SCP files:\n"); - printf("emote.."); OutSCP(SCPDIR "/emote.scp",EmoteDataStorage); - printf("race.."); OutSCP(SCPDIR "/race.scp",RaceDataStorage); - printf("sound.."); OutSCP(SCPDIR "/sound.scp",SoundDataStorage); - printf("map.."); OutSCP(SCPDIR "/map.scp",MapDataStorage); - printf("area.."); OutSCP(SCPDIR "/area.scp",AreaDataStorage); - printf("itemdisplayinfo."); OutSCP(SCPDIR "/itemdisplayinfo.scp",ItemDisplayInfoStorage); + printf("emote.."); OutSCP(SCPDIR "/emote.scp",EmoteDataStorage, "emote"); + printf("race.."); OutSCP(SCPDIR "/race.scp",RaceDataStorage, "race"); + printf("sound.."); OutSCP(SCPDIR "/sound.scp",SoundDataStorage, "sound"); + printf("map.."); OutSCP(SCPDIR "/map.scp",MapDataStorage, "map"); + printf("area.."); OutSCP(SCPDIR "/area.scp",AreaDataStorage, "area"); + printf("itemdisplayinfo."); OutSCP(SCPDIR "/itemdisplayinfo.scp",ItemDisplayInfoStorage, "itemdisplayinfo"); //... printf("DONE!\n"); diff --git a/src/tools/stuffextract/StuffExtract.h b/src/tools/stuffextract/StuffExtract.h index 6dc3591..616b913 100644 --- a/src/tools/stuffextract/StuffExtract.h +++ b/src/tools/stuffextract/StuffExtract.h @@ -18,7 +18,7 @@ int main(int argc, char *argv[]); void ProcessCmdArgs(int argc, char *argv[]); void PrintConfig(void); void PrintHelp(void); -void OutSCP(char*, SCPStorageMap&); +void OutSCP(char*, SCPStorageMap&, std::string); void OutMD5(char*, MD5FileMap&); bool ConvertDBC(void); void ExtractMaps(void);