diff --git a/src/Client/DefScript/DefScript.cpp b/src/Client/DefScript/DefScript.cpp index 9480d8c..784e136 100644 --- a/src/Client/DefScript/DefScript.cpp +++ b/src/Client/DefScript/DefScript.cpp @@ -81,6 +81,7 @@ void DefScriptPackage::_InitFunctions(void) AddFunc("and",&DefScriptPackage::func_and); AddFunc("or",&DefScriptPackage::func_or); AddFunc("xor",&DefScriptPackage::func_xor); + AddFunc("substr",&DefScriptPackage::func_substr); } void DefScriptPackage::AddFunc(std::string n,DefReturnResult (DefScriptPackage::*f)(CmdSet& Set)) @@ -688,7 +689,7 @@ DefXChgResult DefScriptPackage::ReplaceVars(std::string str, CmdSet *pSet, unsig bLen=closingBracket-openingBracket-1; subStr=str.substr(openingBracket+1,bLen); //printf("SUBSTR: \"%s\"\n",subStr.c_str()); - xchg=ReplaceVars(subStr,pSet,nextVar,true); + xchg=ReplaceVars(subStr,pSet,nextVar,run_embedded); if( nextVar==DEFSCRIPT_NONE && hasVar && xchg.changed ) { str.erase(openingBracket+1,subStr.length()); diff --git a/src/Client/DefScript/DefScript.h b/src/Client/DefScript/DefScript.h index 0bbd73d..d49c8d8 100644 --- a/src/Client/DefScript/DefScript.h +++ b/src/Client/DefScript/DefScript.h @@ -172,7 +172,7 @@ private: DefReturnResult func_and(CmdSet&); DefReturnResult func_or(CmdSet&); DefReturnResult func_xor(CmdSet&); - + DefReturnResult func_substr(CmdSet&); // setup own function declarations here # include "DefScriptInterfaceInclude.h" diff --git a/src/Client/DefScript/DefScriptFunctions.cpp b/src/Client/DefScript/DefScriptFunctions.cpp index 07a9242..a217766 100644 --- a/src/Client/DefScript/DefScriptFunctions.cpp +++ b/src/Client/DefScript/DefScriptFunctions.cpp @@ -368,32 +368,22 @@ DefReturnResult DefScriptPackage::func_isset(CmdSet& Set) return variables.Exists(Set.defaultarg); } -// TODO: fix this funtion to work with large values up to (0xFFFF FFFF FFFF FFFF = 2^64) DefReturnResult DefScriptPackage::func_tohex(CmdSet& Set) { DefReturnResult r; char buf[50]; - ldbl d=toNumber(Set.defaultarg); - bool negative=d<0; - if(stringToLower(Set.arg[0])=="abs") - { - negative=false; - } - else - { - d=fabs(d); - } - uint64 u=(uint64)floor(d); - + bool full=stringToLower(Set.arg[0])=="full"; + uint64 u=toUint64(Set.defaultarg); #if COMPILER == COMPILER_MICROSOFT sprintf(buf,"%016I64X",u); #else sprintf(buf,"%016llX",u); #endif std::string str=buf; - while(str.length() && str.at(0)=='0') - str.erase(0,1); - r.ret = negative ? (std::string("-0x").append(str)) : std::string("0x").append(str); + if(!full) + while(str.length() && str.at(0)=='0') + str.erase(0,1); + r.ret = std::string("0x").append(str); return r; } @@ -419,3 +409,15 @@ DefReturnResult DefScriptPackage::func_xor(CmdSet& Set) return (isTrue(Set.defaultarg) && isTrue(Set.arg[0])) || ( (!isTrue(Set.defaultarg)) && (!isTrue(Set.arg[0]) ) ); } +DefReturnResult DefScriptPackage::func_substr(CmdSet& Set) +{ + DefReturnResult r; + unsigned int start,len; + len=(unsigned int)toNumber(Set.arg[0]); + start=(unsigned int)toNumber(Set.arg[1]); + if(start+len::iterator i = my_usrPermissionMap.begin(); i != my_usrPermissionMap.end(); i++) + if(i->first == Set.defaultarg) + perm = i->second; + r.ret = toString(perm); + return r; +} + +DefReturnResult DefScriptPackage::SCGetScriptPerm(CmdSet& Set) +{ + DefReturnResult r; + uint8 perm=0; + for (std::map::iterator i = scriptPermissionMap.begin(); i != scriptPermissionMap.end(); i++) + if(i->first == Set.defaultarg) + perm = i->second; + r.ret = toString(perm); + return r; +} + DefReturnResult DefScriptPackage::SCGetItemProtoValue(CmdSet& Set) { if(!(((PseuInstance*)parentMethod)->GetWSession() && ((PseuInstance*)parentMethod)->GetWSession()->IsValid())) diff --git a/src/Client/DefScriptInterfaceInclude.h b/src/Client/DefScriptInterfaceInclude.h index 7bd6997..e3c46a6 100644 --- a/src/Client/DefScriptInterfaceInclude.h +++ b/src/Client/DefScriptInterfaceInclude.h @@ -33,5 +33,7 @@ DefReturnResult SCGetEntry(CmdSet&); DefReturnResult SCGetItemProtoValue(CmdSet&); DefReturnResult SCGetObjectType(CmdSet&); DefReturnResult SCObjectKnown(CmdSet&); +DefReturnResult SCGetPlayerPerm(CmdSet&); +DefReturnResult SCGetScriptPerm(CmdSet&); #endif \ No newline at end of file