diff --git a/src/Client/DefScriptInterface.cpp b/src/Client/DefScriptInterface.cpp index 949fb43..ab1b3af 100644 --- a/src/Client/DefScriptInterface.cpp +++ b/src/Client/DefScriptInterface.cpp @@ -11,6 +11,7 @@ #include "CacheHandler.h" #include "SCPDatabase.h" + void DefScriptPackage::_InitDefScriptInterface(void) { AddFunc("pause",&DefScriptPackage::SCpause); @@ -64,21 +65,17 @@ DefReturnResult DefScriptPackage::SCSendChatMessage(CmdSet& Set){ std::stringstream ss; uint32 type=atoi(Set.arg[0].c_str()); uint32 lang=atoi(Set.arg[1].c_str()); - // TODO: need better database support to get the lang id from a given name - /*ss << lang; + + ss << lang; if(ss.str()!=Set.arg[1]) // given lang is NOT a number { - - for(uint32 i=0;i<=33;i++) - { - ((PseuInstance*)parentMethod)->dbmgr.GetDB("language").GetFieldByValue("name" - if(!stricmp(Set.arg[1].c_str(),LookupName(i,langNames))) - { - lang=i; - break; - } - } - }*/ + uint32 dblang; + dblang = ((PseuInstance*)parentMethod)->dbmgr.GetDB("language").GetFieldByValue("name",Set.arg[1]); + logdev("looking up language id for lang '%s', found %i",Set.arg[1].c_str(),dblang); + if(dblang != -1) + lang = dblang; + } + std::string msg=Set.arg[2]; std::string to=Set.arg[3]; ((PseuInstance*)parentMethod)->GetWSession()->SendChatMessage(type,lang,msg,to); diff --git a/src/Client/DefScriptInterfaceInclude.h b/src/Client/DefScriptInterfaceInclude.h index e3c46a6..0a8b716 100644 --- a/src/Client/DefScriptInterfaceInclude.h +++ b/src/Client/DefScriptInterfaceInclude.h @@ -2,7 +2,7 @@ #define DEFSCRIPTINTERFACEINCLUDE_H #define USING_DEFSCRIPT_EXTENSIONS true -void _InitDefScriptInterface(); +void _InitDefScriptInterface(void); // Useable own internal functions: DefReturnResult SCpause(CmdSet&); DefReturnResult SCSendChatMessage(CmdSet&); diff --git a/src/Client/World/UpdateData.cpp b/src/Client/World/UpdateData.cpp index f184ef3..7cc1791 100644 --- a/src/Client/World/UpdateData.cpp +++ b/src/Client/World/UpdateData.cpp @@ -167,7 +167,7 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r { uint8 flags; uint32 unk32,flags2,time,transtime,higuid; - float unkf,x,y,z,o,tx,ty,tz,to; + float unkfx,unkfy,unkfz,x,y,z,o,tx,ty,tz,to; uint64 transguid; // uint64 fullguid; // see below float speedWalk, speedRun, speedSwimBack, speedSwim, speedWalkBack, speedTurn, speedFly, speedFlyBack; @@ -189,26 +189,35 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r { if(flags & UPDATEFLAG_TRANSPORT) { - recvPacket >> unkf >> unkf >> unkf >> o; // 3x (float)0 followed by orientation + recvPacket >> unkfx >> unkfy >> unkfz >> o; // 3x (float)0 followed by orientation + logdev("TRANSPORT_FLOATS @ flags: x=%f y=%f z=%f o=%f",unkfx,unkfy,unkfz,o); } else { recvPacket >> x >> y >> z >> o; + logdev("FLOATS: x=%f y=%f z=%f o=%f",x,y,z,o); } - + } + + if(flags & UPDATEFLAG_LIVING) + { if(flags2 & FLAGS2_TRANSPORT) { recvPacket >> transguid >> tx >> ty >> tz >> to; recvPacket >> unk32; // added in 2.0.3 + logdev("TRANSPORT_FLOATS @ flags2: x=%f y=%f z=%f o=%f",tx,ty,tz,to); } - } - if(flags & UPDATEFLAG_LIVING) - { + recvPacket >> unk32; + + /* + // not sure if this is/was correct, MaNGOS doesnt use it anymore if(flags2 & 0x2000) // 0x2000 = ?? { recvPacket >> unkf >> unkf >> unkf >> unkf; } + */ + recvPacket >> speedWalk >> speedRun >> speedSwimBack >> speedSwim; recvPacket >> speedWalkBack >> speedFly >> speedFlyBack >> speedTurn; // fly added in 2.0.x if(u) @@ -237,8 +246,8 @@ void WorldSession::_MovementUpdate(uint8 objtypeid, uint64 uguid, WorldPacket& r if(flags & UPDATEFLAG_HIGHGUID) { recvPacket >> higuid; // 2.0.6 - high guid was there, unk for 2.0.12 - // not sure if this is correct - obj->SetUInt32Value(OBJECT_FIELD_GUID+1,higuid); // note that this sets only the high part of the guid + // not sure if this is correct, MaNGOS sends 0 always. + //obj->SetUInt32Value(OBJECT_FIELD_GUID+1,higuid); // note that this sets only the high part of the guid } if(flags & UPDATEFLAG_FULLGUID)