* 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 "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);

View File

@ -2,14 +2,14 @@
#ifndef __DEFSCRIPT_H
#define __DEFSCRIPT_H
#include "DefScriptDefines.h"
#include <map>
#include <deque>
#include <fstream>
#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&);

View File

@ -6,7 +6,6 @@
#include <sstream>
#include <math.h>
#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;
}

View File

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

View File

@ -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;

View File

@ -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&);

View File

@ -13,13 +13,6 @@ void WorldSession::SendChatMessage(uint32 type, uint32 lang, std::string msg, st
WorldPacket packet;
packet << type << lang;
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:
if(to.empty())
return;
@ -30,6 +23,8 @@ void WorldSession::SendChatMessage(uint32 type, uint32 lang, std::string msg, st
return;
packet << to << msg;
break;
default:
packet << msg;
}
packet.SetOpcode(CMSG_MESSAGECHAT);
SendWorldPacket(packet);

View File

@ -195,16 +195,20 @@ void Channel::HandleListRequest(WorldPacket& recvPacket)
uint64 guid;
uint8 mode;
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++)
{
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)":"");
}
}

View File

@ -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");

View File

@ -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);