* added long time forgotten script func "leavechannel"

* added script func "listchannel" (get all guids on players in a channel, query their names and store them in list macro @ChannelList.
* fixed /me-like emotes (server will no longer treat them as crash attempt :D )
* stuffextract: added output of database names into SCP files.
This commit is contained in:
False.Genesis 2007-10-21 00:28:15 +00:00
parent 8d261e5da0
commit b7a4ae92c5
10 changed files with 70 additions and 28 deletions

View File

@ -7,7 +7,6 @@
#include <stdarg.h> #include <stdarg.h>
#include "VarSet.h" #include "VarSet.h"
#include "DefScript.h" #include "DefScript.h"
#include "DefScriptTools.h"
using namespace DefScriptTools; using namespace DefScriptTools;
@ -90,6 +89,7 @@ void DefScriptPackage::_InitFunctions(void)
AddFunc("shdn",&DefScriptPackage::func_shdn); AddFunc("shdn",&DefScriptPackage::func_shdn);
AddFunc("loaddef",&DefScriptPackage::func_loaddef); AddFunc("loaddef",&DefScriptPackage::func_loaddef);
AddFunc("reloaddef",&DefScriptPackage::func_reloaddef); AddFunc("reloaddef",&DefScriptPackage::func_reloaddef);
AddFunc("reloaddef",&DefScriptPackage::func_unloaddef);
AddFunc("setscriptpermission",&DefScriptPackage::func_setscriptpermission); AddFunc("setscriptpermission",&DefScriptPackage::func_setscriptpermission);
AddFunc("toint",&DefScriptPackage::func_toint); AddFunc("toint",&DefScriptPackage::func_toint);
AddFunc("add",&DefScriptPackage::func_add); AddFunc("add",&DefScriptPackage::func_add);
@ -124,6 +124,8 @@ void DefScriptPackage::_InitFunctions(void)
AddFunc("random",&DefScriptPackage::func_random); AddFunc("random",&DefScriptPackage::func_random);
AddFunc("fileexists",&DefScriptPackage::func_fileexists); AddFunc("fileexists",&DefScriptPackage::func_fileexists);
AddFunc("strfind",&DefScriptPackage::func_strfind); AddFunc("strfind",&DefScriptPackage::func_strfind);
AddFunc("funcexists",&DefScriptPackage::func_funcexists);
AddFunc("scriptexists",&DefScriptPackage::func_scriptexists);
// list functions // list functions
AddFunc("lpushback",&DefScriptPackage::func_lpushback); AddFunc("lpushback",&DefScriptPackage::func_lpushback);

View File

@ -2,14 +2,14 @@
#ifndef __DEFSCRIPT_H #ifndef __DEFSCRIPT_H
#define __DEFSCRIPT_H #define __DEFSCRIPT_H
#include "DefScriptDefines.h"
#include <map> #include <map>
#include <deque> #include <deque>
#include <fstream> #include <fstream>
#include "VarSet.h" #include "VarSet.h"
#include "DynamicEvent.h" #include "DynamicEvent.h"
#include "ListStorage.h" #include "ListStorage.h"
#include "DefScriptTools.h"
#include "DefScriptDefines.h"
class DefScriptPackage; class DefScriptPackage;
class DefScript; class DefScript;
@ -169,6 +169,7 @@ private:
DefReturnResult func_unset(CmdSet&); DefReturnResult func_unset(CmdSet&);
DefReturnResult func_loaddef(CmdSet&); DefReturnResult func_loaddef(CmdSet&);
DefReturnResult func_reloaddef(CmdSet&); DefReturnResult func_reloaddef(CmdSet&);
DefReturnResult func_unloaddef(CmdSet&);
DefReturnResult func_out(CmdSet&); DefReturnResult func_out(CmdSet&);
DefReturnResult func_eof(CmdSet&); DefReturnResult func_eof(CmdSet&);
DefReturnResult func_shdn(CmdSet&); DefReturnResult func_shdn(CmdSet&);
@ -204,6 +205,9 @@ private:
DefReturnResult func_random(CmdSet&); DefReturnResult func_random(CmdSet&);
DefReturnResult func_fileexists(CmdSet&); DefReturnResult func_fileexists(CmdSet&);
DefReturnResult func_strfind(CmdSet&); DefReturnResult func_strfind(CmdSet&);
DefReturnResult func_scriptexists(CmdSet&);
DefReturnResult func_funcexists(CmdSet&);
// list functions // list functions
DefReturnResult func_lpushback(CmdSet&); DefReturnResult func_lpushback(CmdSet&);

View File

@ -6,7 +6,6 @@
#include <sstream> #include <sstream>
#include <math.h> #include <math.h>
#include "DefScript.h" #include "DefScript.h"
#include "DefScriptTools.h"
using namespace DefScriptTools; using namespace DefScriptTools;
@ -66,6 +65,14 @@ DefReturnResult DefScriptPackage::func_reloaddef(CmdSet& Set){
return r; 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 DefScriptPackage::func_unset(CmdSet& Set){
DefReturnResult r; DefReturnResult r;
r.ret=Set.defaultarg; r.ret=Set.defaultarg;
@ -494,5 +501,17 @@ DefReturnResult DefScriptPackage::func_strfind(CmdSet& Set)
return toString((uint64)pos); 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;
}

View File

@ -3,7 +3,6 @@
#include <string> #include <string>
#include <algorithm> #include <algorithm>
#include "DefScript.h" #include "DefScript.h"
#include "DefScriptTools.h"
using namespace DefScriptTools; using namespace DefScriptTools;

View File

@ -20,6 +20,8 @@ void DefScriptPackage::_InitDefScriptInterface(void)
AddFunc("savecache",&DefScriptPackage::SCsavecache); AddFunc("savecache",&DefScriptPackage::SCsavecache);
AddFunc("sendchatmessage",&DefScriptPackage::SCSendChatMessage); AddFunc("sendchatmessage",&DefScriptPackage::SCSendChatMessage);
AddFunc("joinchannel",&DefScriptPackage::SCjoinchannel); AddFunc("joinchannel",&DefScriptPackage::SCjoinchannel);
AddFunc("leavechannel",&DefScriptPackage::SCleavechannel);
AddFunc("listchannel",&DefScriptPackage::SClistchannel);
AddFunc("loadconf",&DefScriptPackage::SCloadconf); AddFunc("loadconf",&DefScriptPackage::SCloadconf);
AddFunc("applyconf",&DefScriptPackage::SCapplyconf); AddFunc("applyconf",&DefScriptPackage::SCapplyconf);
AddFunc("applypermissions",&DefScriptPackage::SCapplypermissions); AddFunc("applypermissions",&DefScriptPackage::SCapplypermissions);
@ -167,6 +169,18 @@ DefReturnResult DefScriptPackage::SCjoinchannel(CmdSet& Set){
return true; 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){ DefReturnResult DefScriptPackage::SCleavechannel(CmdSet& Set){
if(Set.defaultarg.empty()) if(Set.defaultarg.empty())
return false; return false;

View File

@ -3,7 +3,7 @@
#define USING_DEFSCRIPT_EXTENSIONS true #define USING_DEFSCRIPT_EXTENSIONS true
void _InitDefScriptInterface(void); void _InitDefScriptInterface(void);
// Useable own internal functions: // Usable own internal functions:
DefReturnResult SCpause(CmdSet&); DefReturnResult SCpause(CmdSet&);
DefReturnResult SCSendChatMessage(CmdSet&); DefReturnResult SCSendChatMessage(CmdSet&);
DefReturnResult SCsavecache(CmdSet&); DefReturnResult SCsavecache(CmdSet&);
@ -12,6 +12,7 @@ DefReturnResult SCfollow(CmdSet&);
DefReturnResult SCshdn(CmdSet&); DefReturnResult SCshdn(CmdSet&);
DefReturnResult SCjoinchannel(CmdSet&); DefReturnResult SCjoinchannel(CmdSet&);
DefReturnResult SCleavechannel(CmdSet&); DefReturnResult SCleavechannel(CmdSet&);
DefReturnResult SClistchannel(CmdSet&);
DefReturnResult SCloadconf(CmdSet&); DefReturnResult SCloadconf(CmdSet&);
DefReturnResult SCapplypermissions(CmdSet&); DefReturnResult SCapplypermissions(CmdSet&);
DefReturnResult SCapplyconf(CmdSet&); DefReturnResult SCapplyconf(CmdSet&);

View File

@ -11,25 +11,20 @@ void WorldSession::SendChatMessage(uint32 type, uint32 lang, std::string msg, st
if((!_logged) || msg.empty()) if((!_logged) || msg.empty())
return; return;
WorldPacket packet; WorldPacket packet;
packet<<type<<lang; packet << type << lang;
switch(type){ switch(type){
case CHAT_MSG_SAY:
case CHAT_MSG_YELL:
case CHAT_MSG_PARTY:
case CHAT_MSG_GUILD:
case CHAT_MSG_OFFICER: // not sure about that
packet<<msg;
break;
case CHAT_MSG_WHISPER: case CHAT_MSG_WHISPER:
if(to.empty()) if(to.empty())
return; return;
packet<<to<<msg; packet << to << msg;
break; break;
case CHAT_MSG_CHANNEL: case CHAT_MSG_CHANNEL:
if(to.empty() /*|| !_channels->IsOnChannel(to)*/) if(to.empty() /*|| !_channels->IsOnChannel(to)*/)
return; return;
packet<<to<<msg; packet << to << msg;
break; break;
default:
packet << msg;
} }
packet.SetOpcode(CMSG_MESSAGECHAT); packet.SetOpcode(CMSG_MESSAGECHAT);
SendWorldPacket(packet); SendWorldPacket(packet);

View File

@ -195,16 +195,20 @@ void Channel::HandleListRequest(WorldPacket& recvPacket)
uint64 guid; uint64 guid;
uint8 mode; uint8 mode;
recvPacket >> unk >> size; recvPacket >> 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++) for(uint32 i = 0; i < size; i++)
{ {
recvPacket >> guid >> mode; recvPacket >> guid >> mode;
cpl[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; std::string pname;
bool muted,mod; 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++) for(ChannelPlayerList::iterator i = cpl.begin(); i != cpl.end(); i++)
{ {
pname = _worldSession->plrNameCache.GetName(i->first); pname = _worldSession->plrNameCache.GetName(i->first);
@ -220,7 +224,7 @@ void Channel::HandleListRequest(WorldPacket& recvPacket)
while(pname.length()<12) while(pname.length()<12)
pname += " "; // for better formatting 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)":"");
} }
} }

View File

@ -192,12 +192,16 @@ std::string AutoGetDataString(DBCFile::Iterator& it, const char* format, uint32
// output a formatted scp file // output a formatted scp file
void OutSCP(char *fn, SCPStorageMap& scp) void OutSCP(char *fn, SCPStorageMap& scp, std::string dbName="")
{ {
std::fstream f; std::fstream f;
f.open(fn, std::ios_base::out); f.open(fn, std::ios_base::out);
if(f.is_open()) if(f.is_open())
{ {
if(dbName.length())
{
f << "#dbname=" << dbName << "\n";
}
for(SCPStorageMap::iterator mi = scp.begin(); mi != scp.end(); mi++) for(SCPStorageMap::iterator mi = scp.begin(); mi != scp.end(); mi++)
{ {
f << "[" << mi->first << "]\n"; f << "[" << mi->first << "]\n";
@ -413,12 +417,12 @@ bool ConvertDBC(void)
CreateDir("stuffextract/data/scp"); CreateDir("stuffextract/data/scp");
printf("Writing SCP files:\n"); printf("Writing SCP files:\n");
printf("emote.."); OutSCP(SCPDIR "/emote.scp",EmoteDataStorage); printf("emote.."); OutSCP(SCPDIR "/emote.scp",EmoteDataStorage, "emote");
printf("race.."); OutSCP(SCPDIR "/race.scp",RaceDataStorage); printf("race.."); OutSCP(SCPDIR "/race.scp",RaceDataStorage, "race");
printf("sound.."); OutSCP(SCPDIR "/sound.scp",SoundDataStorage); printf("sound.."); OutSCP(SCPDIR "/sound.scp",SoundDataStorage, "sound");
printf("map.."); OutSCP(SCPDIR "/map.scp",MapDataStorage); printf("map.."); OutSCP(SCPDIR "/map.scp",MapDataStorage, "map");
printf("area.."); OutSCP(SCPDIR "/area.scp",AreaDataStorage); printf("area.."); OutSCP(SCPDIR "/area.scp",AreaDataStorage, "area");
printf("itemdisplayinfo."); OutSCP(SCPDIR "/itemdisplayinfo.scp",ItemDisplayInfoStorage); printf("itemdisplayinfo."); OutSCP(SCPDIR "/itemdisplayinfo.scp",ItemDisplayInfoStorage, "itemdisplayinfo");
//... //...
printf("DONE!\n"); printf("DONE!\n");

View File

@ -18,7 +18,7 @@ int main(int argc, char *argv[]);
void ProcessCmdArgs(int argc, char *argv[]); void ProcessCmdArgs(int argc, char *argv[]);
void PrintConfig(void); void PrintConfig(void);
void PrintHelp(void); void PrintHelp(void);
void OutSCP(char*, SCPStorageMap&); void OutSCP(char*, SCPStorageMap&, std::string);
void OutMD5(char*, MD5FileMap&); void OutMD5(char*, MD5FileMap&);
bool ConvertDBC(void); bool ConvertDBC(void);
void ExtractMaps(void); void ExtractMaps(void);