* fixed possible crash in defscript when an if block was appened to a script during runtime and this if was not endif'd
* more toNumber() -> toUint64() changes for number consistency * fixed MyCharacter naming on char char list recv * added script to list own/near player's inventory, for debugging. copy it into main scripts dir if you want to use it. * inlined 2 funcs in DefScript * changed args of script event "_onobjectdelete". @0 is now typeid, @1 out of range.
This commit is contained in:
parent
4dce611346
commit
4405563a6b
@ -50,7 +50,8 @@ endif
|
|||||||
|
|
||||||
#script=_onobjectdelete
|
#script=_onobjectdelete
|
||||||
// @def: GUID of deleted object
|
// @def: GUID of deleted object
|
||||||
// @0: [out of range object deletion=true, else false]
|
// @0: TypeID of deleted object
|
||||||
|
// @1: [out of range object deletion=true, else false]
|
||||||
// The object can be accessed with the object handling functions listed above.
|
// The object can be accessed with the object handling functions listed above.
|
||||||
// It will be deleted right after handling this script.
|
// It will be deleted right after handling this script.
|
||||||
|
|
||||||
|
|||||||
113
bin/scripts/optional/item_debugger.def
Normal file
113
bin/scripts/optional/item_debugger.def
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
// Item/Inventory debugger
|
||||||
|
// Using Player/Item fields
|
||||||
|
// Works for 2.3.x
|
||||||
|
// Usage: As soon as this file is loaded, the debugger will be attached automatically (put this file in /scripts/ directory)
|
||||||
|
// Known problems: If player/item names are not yet known, this script will display empty names. At second time everything will be fine.
|
||||||
|
|
||||||
|
#script=itemdebugger_loader
|
||||||
|
#onload
|
||||||
|
if ?{not ?{ishooked _onobjectcreate}}
|
||||||
|
hookstart _onobjectcreate
|
||||||
|
#escape-all=1
|
||||||
|
hookadd if ?{equal,4 ${@0}} // MaNGOS creates the player object after all items are created, so just need to check for that and read everything out of the player fields
|
||||||
|
hookadd playeritemdebugger ${@def}
|
||||||
|
hookadd endif
|
||||||
|
#escape-all=0
|
||||||
|
hookend
|
||||||
|
endif
|
||||||
|
if ?{not ?{ishooked _onobjectdelete}}
|
||||||
|
hookstart _onobjectdelete
|
||||||
|
#escape-all=1
|
||||||
|
hookadd if ?{or,?{equal,1 ${@0}} ?{equal,2 ${@0}}}
|
||||||
|
hookadd itemdebugger_del ${@def}
|
||||||
|
hookadd endif
|
||||||
|
#escape-all=0
|
||||||
|
hookend
|
||||||
|
endif
|
||||||
|
#/onload
|
||||||
|
logdetail Item debugger attached
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#script=playeritemdebugger
|
||||||
|
// @def: player guid
|
||||||
|
|
||||||
|
set,pguid ${@def}
|
||||||
|
set,pname ?{getname,guid ${pguid}}
|
||||||
|
|
||||||
|
// between these fields all item guids are stored (check UpdateFields.h)
|
||||||
|
set,fstart 0x26E // PLAYER_FIELD_INV_SLOT_HEAD
|
||||||
|
set,fend 0x35A // PLAYER_FIELD_KEYRING_SLOT_1 + 64
|
||||||
|
|
||||||
|
set,f ${fstart}
|
||||||
|
set,slot 0
|
||||||
|
loop
|
||||||
|
if ?{bigger_eq,${f} ${fend}}
|
||||||
|
exitloop
|
||||||
|
endif
|
||||||
|
set,iguid ?{getobjectvalue,${f},i64 ${pguid}}
|
||||||
|
if ${iguid}
|
||||||
|
//-- show info about item
|
||||||
|
itemdebugger,{Player '${pname}' Slot ${slot} (field ${f}): } ${iguid}
|
||||||
|
|
||||||
|
//-- Iterate over bags --
|
||||||
|
if ?{equal,2 ?{getobjecttype ${iguid}}}
|
||||||
|
bagitemdebugger ${iguid}
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
add,f 2
|
||||||
|
add,slot 1
|
||||||
|
endloop
|
||||||
|
|
||||||
|
|
||||||
|
#script=bagitemdebugger
|
||||||
|
set,bagslots ?{getobjectvalue,60 ${@def}} // CONTAINER_FIELD_NUM_SLOTS
|
||||||
|
set,j 0
|
||||||
|
loop
|
||||||
|
set,t ${j}
|
||||||
|
mul,t 2
|
||||||
|
if ?{bigger,${t} ${bagslots}} // max. bag size = 36 slots
|
||||||
|
exitloop
|
||||||
|
endif
|
||||||
|
set,field 62 // CONTAINER_FIELD_SLOT_1 - 36
|
||||||
|
add,field ${t}
|
||||||
|
set,itemguid ?{getobjectvalue,${field},i64 ${@def}}
|
||||||
|
itemdebugger,{Bag slot ${j} (field: ${field}) -> } ${itemguid}
|
||||||
|
|
||||||
|
add,j 1
|
||||||
|
endloop
|
||||||
|
|
||||||
|
|
||||||
|
#script=itemdebugger
|
||||||
|
// @def: item guid
|
||||||
|
// @0: text prefix
|
||||||
|
set,itemguid ${@def}
|
||||||
|
if ?{not ?{objectknown ${itemguid}}}
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if ${itemguid}
|
||||||
|
set,itemname ?{getname,guid ${itemguid}}
|
||||||
|
set,itementry ?{getentry ${itemguid}}
|
||||||
|
log ${@0}Item: '${itemname}' (${itementry}) [${itemguid}]
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
#script=itemdebugger_del
|
||||||
|
// @def: item guid
|
||||||
|
|
||||||
|
set,itemguid ${@def}
|
||||||
|
//if ?{not ?{objectknown ${itemguid}}}
|
||||||
|
// return
|
||||||
|
//endif
|
||||||
|
|
||||||
|
if ${itemguid}
|
||||||
|
set,itemname ?{getname,guid ${itemguid}}
|
||||||
|
set,itementry ?{getentry ${itemguid}}
|
||||||
|
set,owner ?{getobjectvalue,6,i64 ${itemguid}}
|
||||||
|
set,ownername ?{getname,guid ${owner}}
|
||||||
|
|
||||||
|
log Delete Item: '${itemname}' (${itementry}) (${ownername}) [${itemguid}]
|
||||||
|
endif
|
||||||
|
|
||||||
@ -531,16 +531,6 @@ std::string DefScript::GetName(void)
|
|||||||
return scriptname;
|
return scriptname;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int DefScript::GetLines(void)
|
|
||||||
{
|
|
||||||
return Line.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string DefScript::GetLine(unsigned int id)
|
|
||||||
{
|
|
||||||
return Line[id];
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DefScript::AddLine(std::string l){
|
bool DefScript::AddLine(std::string l){
|
||||||
if(l.empty())
|
if(l.empty())
|
||||||
return false;
|
return false;
|
||||||
@ -703,7 +693,7 @@ DefReturnResult DefScriptPackage::RunScript(std::string name, CmdSet *pSet,std::
|
|||||||
if(!b.istrue)
|
if(!b.istrue)
|
||||||
{
|
{
|
||||||
unsigned int other_ifs=0;
|
unsigned int other_ifs=0;
|
||||||
for(i=b.startline+1;;i++)
|
for(i=b.startline+1; i < sc->GetLines() ;i++)
|
||||||
{
|
{
|
||||||
if(!memcmp(sc->GetLine(i).c_str(),"if ",3))
|
if(!memcmp(sc->GetLine(i).c_str(),"if ",3))
|
||||||
other_ifs++;
|
other_ifs++;
|
||||||
|
|||||||
@ -84,8 +84,9 @@ class DefScript {
|
|||||||
public:
|
public:
|
||||||
DefScript(DefScriptPackage *p);
|
DefScript(DefScriptPackage *p);
|
||||||
~DefScript();
|
~DefScript();
|
||||||
std::string GetLine(unsigned int);
|
|
||||||
unsigned int GetLines(void);
|
inline std::string GetLine(unsigned int id) { return Line[id]; }
|
||||||
|
inline unsigned int DefScript::GetLines(void) { return Line.size(); }
|
||||||
bool AddLine(std::string );
|
bool AddLine(std::string );
|
||||||
std::string GetName(void);
|
std::string GetName(void);
|
||||||
void SetName(std::string);
|
void SetName(std::string);
|
||||||
|
|||||||
@ -180,7 +180,7 @@ DefReturnResult DefScriptPackage::func_setscriptpermission(CmdSet& Set)
|
|||||||
DefReturnResult DefScriptPackage::func_toint(CmdSet& Set)
|
DefReturnResult DefScriptPackage::func_toint(CmdSet& Set)
|
||||||
{
|
{
|
||||||
DefReturnResult r;
|
DefReturnResult r;
|
||||||
std::string num=toString(floor(toNumber(Set.defaultarg)));
|
std::string num=toString(toUint64(Set.defaultarg));
|
||||||
if(!Set.arg[0].empty())
|
if(!Set.arg[0].empty())
|
||||||
{
|
{
|
||||||
std::string vname=_NormalizeVarName(Set.arg[0], Set.myname);
|
std::string vname=_NormalizeVarName(Set.arg[0], Set.myname);
|
||||||
|
|||||||
@ -381,7 +381,7 @@ DefReturnResult DefScriptPackage::SCScpSectionExists(CmdSet& Set)
|
|||||||
dbname=Set.arg[0];
|
dbname=Set.arg[0];
|
||||||
return (!Set.defaultarg.empty()) && (!dbname.empty())
|
return (!Set.defaultarg.empty()) && (!dbname.empty())
|
||||||
&& ((PseuInstance*)parentMethod)->dbmgr.HasDB(dbname)
|
&& ((PseuInstance*)parentMethod)->dbmgr.HasDB(dbname)
|
||||||
&& ((PseuInstance*)parentMethod)->dbmgr.GetDB(dbname).HasField((uint32)DefScriptTools::toNumber(Set.defaultarg));
|
&& ((PseuInstance*)parentMethod)->dbmgr.GetDB(dbname).HasField((uint32)DefScriptTools::toUint64(Set.defaultarg));
|
||||||
}
|
}
|
||||||
|
|
||||||
DefReturnResult DefScriptPackage::SCScpEntryExists(CmdSet& Set)
|
DefReturnResult DefScriptPackage::SCScpEntryExists(CmdSet& Set)
|
||||||
@ -391,7 +391,7 @@ DefReturnResult DefScriptPackage::SCScpEntryExists(CmdSet& Set)
|
|||||||
if(!Set.arg[0].empty())
|
if(!Set.arg[0].empty())
|
||||||
dbname=Set.arg[0];
|
dbname=Set.arg[0];
|
||||||
if(!Set.arg[1].empty())
|
if(!Set.arg[1].empty())
|
||||||
keyid=(uint32)DefScriptTools::toNumber(Set.arg[1]);
|
keyid=(uint32)DefScriptTools::toUint64(Set.arg[1]);
|
||||||
return (!Set.defaultarg.empty()) && (!dbname.empty())
|
return (!Set.defaultarg.empty()) && (!dbname.empty())
|
||||||
&& ((PseuInstance*)parentMethod)->dbmgr.HasDB(dbname)
|
&& ((PseuInstance*)parentMethod)->dbmgr.HasDB(dbname)
|
||||||
&& ((PseuInstance*)parentMethod)->dbmgr.GetDB(dbname).HasField(keyid)
|
&& ((PseuInstance*)parentMethod)->dbmgr.GetDB(dbname).HasField(keyid)
|
||||||
@ -411,7 +411,7 @@ DefReturnResult DefScriptPackage::SCGetScpValue(CmdSet& Set)
|
|||||||
if(!Set.arg[0].empty())
|
if(!Set.arg[0].empty())
|
||||||
dbname=Set.arg[0];
|
dbname=Set.arg[0];
|
||||||
if(!Set.arg[1].empty())
|
if(!Set.arg[1].empty())
|
||||||
keyid=(uint32)DefScriptTools::toNumber(Set.arg[1]);
|
keyid=(uint32)DefScriptTools::toUint64(Set.arg[1]);
|
||||||
if(!Set.defaultarg.empty())
|
if(!Set.defaultarg.empty())
|
||||||
entry=Set.defaultarg;
|
entry=Set.defaultarg;
|
||||||
if( (!entry.empty()) && (!dbname.empty())
|
if( (!entry.empty()) && (!dbname.empty())
|
||||||
@ -555,7 +555,7 @@ DefReturnResult DefScriptPackage::SCObjectKnown(CmdSet& Set)
|
|||||||
logerror("Invalid Script call: SCObjectIsKnown: WorldSession not valid");
|
logerror("Invalid Script call: SCObjectIsKnown: WorldSession not valid");
|
||||||
DEF_RETURN_ERROR;
|
DEF_RETURN_ERROR;
|
||||||
}
|
}
|
||||||
uint64 guid=DefScriptTools::toNumber(Set.defaultarg);
|
uint64 guid=DefScriptTools::toUint64(Set.defaultarg);
|
||||||
Object *o=((PseuInstance*)parentMethod)->GetWSession()->objmgr.GetObj(guid);
|
Object *o=((PseuInstance*)parentMethod)->GetWSession()->objmgr.GetObj(guid);
|
||||||
return o!=NULL;
|
return o!=NULL;
|
||||||
}
|
}
|
||||||
@ -590,7 +590,7 @@ DefReturnResult DefScriptPackage::SCGetItemProtoValue(CmdSet& Set)
|
|||||||
DEF_RETURN_ERROR;
|
DEF_RETURN_ERROR;
|
||||||
}
|
}
|
||||||
DefReturnResult r;
|
DefReturnResult r;
|
||||||
uint32 entry=DefScriptTools::toNumber(Set.arg[0]);
|
uint32 entry=DefScriptTools::toUint64(Set.arg[0]);
|
||||||
ItemProto *proto=((PseuInstance*)parentMethod)->GetWSession()->objmgr.GetItemProto(entry);
|
ItemProto *proto=((PseuInstance*)parentMethod)->GetWSession()->objmgr.GetItemProto(entry);
|
||||||
if(proto)
|
if(proto)
|
||||||
{
|
{
|
||||||
@ -880,7 +880,7 @@ DefReturnResult DefScriptPackage::SCGetRace(CmdSet &Set)
|
|||||||
DEF_RETURN_ERROR;
|
DEF_RETURN_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64 guid = DefScriptTools::toNumber(Set.defaultarg);
|
uint64 guid = DefScriptTools::toUint64(Set.defaultarg);
|
||||||
Object *o = ws->objmgr.GetObj(guid);
|
Object *o = ws->objmgr.GetObj(guid);
|
||||||
if(o && (o->GetTypeId() == TYPEID_UNIT || o->GetTypeId() == TYPEID_PLAYER))
|
if(o && (o->GetTypeId() == TYPEID_UNIT || o->GetTypeId() == TYPEID_PLAYER))
|
||||||
{
|
{
|
||||||
@ -898,7 +898,7 @@ DefReturnResult DefScriptPackage::SCGetClass(CmdSet &Set)
|
|||||||
DEF_RETURN_ERROR;
|
DEF_RETURN_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64 guid = DefScriptTools::toNumber(Set.defaultarg);
|
uint64 guid = DefScriptTools::toUint64(Set.defaultarg);
|
||||||
Object *o = ws->objmgr.GetObj(guid);
|
Object *o = ws->objmgr.GetObj(guid);
|
||||||
if(o && (o->GetTypeId() == TYPEID_UNIT || o->GetTypeId() == TYPEID_PLAYER))
|
if(o && (o->GetTypeId() == TYPEID_UNIT || o->GetTypeId() == TYPEID_PLAYER))
|
||||||
{
|
{
|
||||||
@ -1153,7 +1153,7 @@ DefReturnResult DefScriptPackage::SCSpoofWorldPacket(CmdSet &Set)
|
|||||||
ByteBuffer *bb = bytebuffers.GetNoCreate(_NormalizeVarName(Set.defaultarg,Set.myname));
|
ByteBuffer *bb = bytebuffers.GetNoCreate(_NormalizeVarName(Set.defaultarg,Set.myname));
|
||||||
if(bb)
|
if(bb)
|
||||||
{
|
{
|
||||||
uint32 opcode = (uint32)DefScriptTools::toNumber(Set.arg[0]);
|
uint32 opcode = (uint32)DefScriptTools::toUint64(Set.arg[0]);
|
||||||
if(opcode) // ok, here again CMSG_NULL_ACTION doesnt work, but who cares
|
if(opcode) // ok, here again CMSG_NULL_ACTION doesnt work, but who cares
|
||||||
{
|
{
|
||||||
WorldPacket *wp = new WorldPacket(opcode, bb->size()); // will be deleted by the opcode handler later
|
WorldPacket *wp = new WorldPacket(opcode, bb->size()); // will be deleted by the opcode handler later
|
||||||
|
|||||||
@ -114,9 +114,11 @@ void WorldSession::_HandleDestroyObjectOpcode(WorldPacket& recvPacket)
|
|||||||
// call script just before object removal
|
// call script just before object removal
|
||||||
if(GetInstance()->GetScripts()->ScriptExists("_onobjectdelete"))
|
if(GetInstance()->GetScripts()->ScriptExists("_onobjectdelete"))
|
||||||
{
|
{
|
||||||
|
Object *o = objmgr.GetObj(guid);
|
||||||
CmdSet Set;
|
CmdSet Set;
|
||||||
Set.defaultarg = toString(guid);
|
Set.defaultarg = toString(guid);
|
||||||
Set.arg[0] = "false"; // out of range = false
|
Set.arg[0] = o ? toString(o->GetTypeId()) : "";
|
||||||
|
Set.arg[1] = "false"; // out of range = false
|
||||||
GetInstance()->GetScripts()->RunScript("_onobjectdelete", &Set);
|
GetInstance()->GetScripts()->RunScript("_onobjectdelete", &Set);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -185,9 +185,11 @@ void WorldSession::_HandleUpdateObjectOpcode(WorldPacket& recvPacket)
|
|||||||
// call script just before object removal
|
// call script just before object removal
|
||||||
if(GetInstance()->GetScripts()->ScriptExists("_onobjectdelete"))
|
if(GetInstance()->GetScripts()->ScriptExists("_onobjectdelete"))
|
||||||
{
|
{
|
||||||
|
Object *del_obj = objmgr.GetObj(uguid);
|
||||||
CmdSet Set;
|
CmdSet Set;
|
||||||
Set.defaultarg = toString(uguid);
|
Set.defaultarg = toString(uguid);
|
||||||
Set.arg[0] = "true"; // out of range = true
|
Set.arg[0] = del_obj ? toString(del_obj->GetTypeId()) : "";
|
||||||
|
Set.arg[1] = "true"; // out of range = true
|
||||||
GetInstance()->GetScripts()->RunScript("_onobjectdelete", &Set);
|
GetInstance()->GetScripts()->RunScript("_onobjectdelete", &Set);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -446,47 +446,50 @@ void WorldSession::_HandleAuthResponseOpcode(WorldPacket& recvPacket)
|
|||||||
void WorldSession::_HandleCharEnumOpcode(WorldPacket& recvPacket)
|
void WorldSession::_HandleCharEnumOpcode(WorldPacket& recvPacket)
|
||||||
{
|
{
|
||||||
uint8 num;
|
uint8 num;
|
||||||
PlayerEnum plr[10]; // max characters per realm is 10
|
uint8 charId;
|
||||||
uint8 dummy8;
|
PlayerEnum plr[10]; // max characters per realm is 10
|
||||||
|
uint8 dummy8;
|
||||||
|
|
||||||
recvPacket >> num;
|
recvPacket >> num;
|
||||||
if(num==0){
|
if(num==0)
|
||||||
logerror("No chars found!");
|
{
|
||||||
GetInstance()->SetError();
|
logerror("No chars found!");
|
||||||
return;
|
GetInstance()->SetError();
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
logdetail("Chars in list: %u\n",num);
|
logdetail("Chars in list: %u\n",num);
|
||||||
_LoadCache(); // we are about to login, so we need cache data
|
_LoadCache(); // we are about to login, so we need cache data
|
||||||
for(unsigned int i=0;i<num;i++){
|
for(unsigned int i=0;i<num;i++)
|
||||||
recvPacket >> plr[i]._guid;
|
|
||||||
recvPacket >> plr[i]._name;
|
|
||||||
recvPacket >> plr[i]._race;
|
|
||||||
recvPacket >> plr[i]._class;
|
|
||||||
recvPacket >> plr[i]._gender;
|
|
||||||
recvPacket >> plr[i]._bytes1;
|
|
||||||
recvPacket >> plr[i]._bytes2;
|
|
||||||
recvPacket >> plr[i]._bytes3;
|
|
||||||
recvPacket >> plr[i]._bytes4;
|
|
||||||
recvPacket >> plr[i]._bytesx;
|
|
||||||
recvPacket >> plr[i]._level;
|
|
||||||
recvPacket >> plr[i]._zoneId;
|
|
||||||
recvPacket >> plr[i]._mapId;
|
|
||||||
recvPacket >> plr[i]._x;
|
|
||||||
recvPacket >> plr[i]._y;
|
|
||||||
recvPacket >> plr[i]._z;
|
|
||||||
recvPacket >> plr[i]._guildId;
|
|
||||||
recvPacket >> dummy8;
|
|
||||||
recvPacket >> plr[i]._flags;
|
|
||||||
recvPacket >> dummy8 >> dummy8 >> dummy8;
|
|
||||||
recvPacket >> plr[i]._petInfoId;
|
|
||||||
recvPacket >> plr[i]._petLevel;
|
|
||||||
recvPacket >> plr[i]._petFamilyId;
|
|
||||||
for(unsigned int inv=0;inv<20;inv++)
|
|
||||||
{
|
{
|
||||||
recvPacket >> plr[i]._items[inv].displayId >> plr[i]._items[inv].inventorytype;
|
recvPacket >> plr[i]._guid;
|
||||||
}
|
recvPacket >> plr[i]._name;
|
||||||
plrNameCache.AddInfo(plr[i]._guid, plr[i]._name);
|
recvPacket >> plr[i]._race;
|
||||||
|
recvPacket >> plr[i]._class;
|
||||||
|
recvPacket >> plr[i]._gender;
|
||||||
|
recvPacket >> plr[i]._bytes1;
|
||||||
|
recvPacket >> plr[i]._bytes2;
|
||||||
|
recvPacket >> plr[i]._bytes3;
|
||||||
|
recvPacket >> plr[i]._bytes4;
|
||||||
|
recvPacket >> plr[i]._bytesx;
|
||||||
|
recvPacket >> plr[i]._level;
|
||||||
|
recvPacket >> plr[i]._zoneId;
|
||||||
|
recvPacket >> plr[i]._mapId;
|
||||||
|
recvPacket >> plr[i]._x;
|
||||||
|
recvPacket >> plr[i]._y;
|
||||||
|
recvPacket >> plr[i]._z;
|
||||||
|
recvPacket >> plr[i]._guildId;
|
||||||
|
recvPacket >> dummy8;
|
||||||
|
recvPacket >> plr[i]._flags;
|
||||||
|
recvPacket >> dummy8 >> dummy8 >> dummy8;
|
||||||
|
recvPacket >> plr[i]._petInfoId;
|
||||||
|
recvPacket >> plr[i]._petLevel;
|
||||||
|
recvPacket >> plr[i]._petFamilyId;
|
||||||
|
for(unsigned int inv=0;inv<20;inv++)
|
||||||
|
{
|
||||||
|
recvPacket >> plr[i]._items[inv].displayId >> plr[i]._items[inv].inventorytype;
|
||||||
|
}
|
||||||
|
plrNameCache.AddInfo(plr[i]._guid, plr[i]._name);
|
||||||
}
|
}
|
||||||
bool char_found=false;
|
bool char_found=false;
|
||||||
|
|
||||||
@ -499,31 +502,34 @@ void WorldSession::_HandleCharEnumOpcode(WorldPacket& recvPacket)
|
|||||||
GetDBMgr().GetClassName_(plr[i]._class).c_str(),
|
GetDBMgr().GetClassName_(plr[i]._class).c_str(),
|
||||||
GetDBMgr().GetMapName(plr[i]._mapId).c_str(),
|
GetDBMgr().GetMapName(plr[i]._mapId).c_str(),
|
||||||
GetDBMgr().GetZoneName(plr[i]._zoneId).c_str());
|
GetDBMgr().GetZoneName(plr[i]._zoneId).c_str());
|
||||||
|
|
||||||
logdetail("-> coords: map=%u zone=%u x=%f y=%f z=%f",
|
logdetail("-> coords: map=%u zone=%u x=%f y=%f z=%f",
|
||||||
plr[i]._mapId,plr[i]._zoneId,plr[i]._x,plr[i]._y,plr[i]._z);
|
plr[i]._mapId,plr[i]._zoneId,plr[i]._x,plr[i]._y,plr[i]._z);
|
||||||
for(unsigned int inv=0;inv<20;inv++)
|
|
||||||
{
|
for(unsigned int inv=0;inv<20;inv++)
|
||||||
if(plr[i]._items[inv].displayId)
|
{
|
||||||
logdebug("-> Has Item: Model=%u InventoryType=%u",plr[i]._items[inv].displayId,plr[i]._items[inv].inventorytype);
|
if(plr[i]._items[inv].displayId)
|
||||||
}
|
logdebug("-> Has Item: Model=%u InventoryType=%u",plr[i]._items[inv].displayId,plr[i]._items[inv].inventorytype);
|
||||||
if(plr[i]._name==GetInstance()->GetConf()->charname)
|
}
|
||||||
{
|
if(plr[i]._name==GetInstance()->GetConf()->charname)
|
||||||
char_found=true;
|
{
|
||||||
_myGUID=plr[i]._guid;
|
charId = i;
|
||||||
GetInstance()->GetScripts()->variables.Set("@myguid",toString(plr[i]._guid));
|
char_found=true;
|
||||||
GetInstance()->GetScripts()->variables.Set("@myrace",toString(plr[i]._race));
|
_myGUID=plr[i]._guid;
|
||||||
}
|
GetInstance()->GetScripts()->variables.Set("@myguid",toString(plr[i]._guid));
|
||||||
|
GetInstance()->GetScripts()->variables.Set("@myrace",toString(plr[i]._race));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if(!char_found)
|
if(!char_found)
|
||||||
{
|
{
|
||||||
logerror("Character \"%s\" was not found on char list!",GetInstance()->GetConf()->charname.c_str());
|
logerror("Character \"%s\" was not found on char list!", plr[charId]._name.c_str());
|
||||||
GetInstance()->SetError();
|
GetInstance()->SetError();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
log("Entering World with Character \"%s\"...",GetInstance()->GetConf()->charname.c_str());
|
log("Entering World with Character \"%s\"...", plr[charId]._name.c_str());
|
||||||
|
|
||||||
// create the character and add it to the objmgr.
|
// create the character and add it to the objmgr.
|
||||||
// note: this is the only object that has to stay in memory unless its explicitly deleted by the server!
|
// note: this is the only object that has to stay in memory unless its explicitly deleted by the server!
|
||||||
@ -531,6 +537,7 @@ void WorldSession::_HandleCharEnumOpcode(WorldPacket& recvPacket)
|
|||||||
MyCharacter *my = new MyCharacter();
|
MyCharacter *my = new MyCharacter();
|
||||||
my->Create(_myGUID);
|
my->Create(_myGUID);
|
||||||
objmgr.Add(my);
|
objmgr.Add(my);
|
||||||
|
my->SetName(plr[charId]._name);
|
||||||
|
|
||||||
// TODO: initialize the world here, and load required maps.
|
// TODO: initialize the world here, and load required maps.
|
||||||
// must remove appropriate code from _HandleLoginVerifyWorldOpcode() then!!
|
// must remove appropriate code from _HandleLoginVerifyWorldOpcode() then!!
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user