Json stl拓展完成
This commit is contained in:
@@ -4,12 +4,10 @@
|
||||
#include "RSAC.h"
|
||||
#include "STL.h"
|
||||
|
||||
int squirrel::SQloadfile(uint32_t v, const wchar_t* filename, bool printerror)
|
||||
int squirrel::SQloadfile(uint32_t v, const wchar_t* filename, BOOL printerror)
|
||||
{
|
||||
//wchar_t* 转 char*
|
||||
int size = wcslen(filename);
|
||||
char* fname = (char*)new char[size];
|
||||
DNFTOOL::UnicodeToAnsi(filename, fname, size);
|
||||
char* fname = DNFTOOL::wchar_tTochar((wchar_t*)filename);
|
||||
|
||||
FILE* file;
|
||||
file = fopen(fname, "rb");
|
||||
@@ -55,7 +53,7 @@ int squirrel::SQloadfile(uint32_t v, const wchar_t* filename, bool printerror)
|
||||
return -1;
|
||||
}
|
||||
|
||||
int squirrel::SQdofile(uint32_t v, const wchar_t* filename, bool retval, bool printerror)
|
||||
int squirrel::SQdofile(uint32_t v, const wchar_t* filename, BOOL retval, BOOL printerror)
|
||||
{
|
||||
if (SQloadfile(v, filename, printerror) >= 0)
|
||||
{
|
||||
@@ -274,14 +272,9 @@ int squirrel::SendPackWChar(uint32_t v)
|
||||
wchar_t* n1;
|
||||
|
||||
SQGetString(v, 2, &n1);
|
||||
std::wcout << u8"字符串值为:" << n1 << std::endl;
|
||||
|
||||
//wchar_t* 转 char*
|
||||
int size = wcslen(n1);
|
||||
char* fname = (char*)new char[size];
|
||||
DNFTOOL::UnicodeToAnsi(n1, fname, size);
|
||||
fname[size] = '\0';
|
||||
std::cout << u8"字符串值为:" << fname << std::endl;
|
||||
char* fname = DNFTOOL::wchar_tTochar(n1);
|
||||
_SendPacksChar(*_SendClass, 0, fname, strlen(fname));
|
||||
|
||||
SQPushInt(v, 1);
|
||||
@@ -724,9 +717,9 @@ int squirrel::Set_STL(uint32_t v)
|
||||
int ParameterNum = SQGetTop(v);
|
||||
|
||||
int IntValue;
|
||||
float FloatValue;
|
||||
FLOAT FloatValue;
|
||||
char* StrValue;
|
||||
bool BoolValue;
|
||||
BOOL BoolValue;
|
||||
if (ParameterNum == 5)
|
||||
{
|
||||
//获取容器名字
|
||||
@@ -1059,6 +1052,126 @@ int squirrel::Set_DragonModel(uint32_t v)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if defined JSON_STL
|
||||
//构造Json类型容器
|
||||
static std::map<wchar_t*, std::string>Json_STL;
|
||||
//Json容器
|
||||
int squirrel::Jsoner_STL(uint32_t v)
|
||||
{
|
||||
wchar_t* Name;
|
||||
int Type;
|
||||
int ParameterNum = SQGetTop(v);
|
||||
if (ParameterNum == 3)
|
||||
{
|
||||
//获取容器名字
|
||||
SQGetString(v, 2, &Name);
|
||||
//获取模式
|
||||
SQGetInt(v, 3, &Type);
|
||||
|
||||
switch (Type)
|
||||
{
|
||||
case 0://构造
|
||||
{
|
||||
if (Json_STL.count(Name) != 0)//如果这个hash不存在 就创建
|
||||
{
|
||||
//构造对应 hash 的 Json容器
|
||||
std::string str = "";
|
||||
Json_STL[Name] = str;
|
||||
}
|
||||
else
|
||||
{
|
||||
SQPushBool(v, false);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 1://读取
|
||||
{
|
||||
wchar_t* buffer = DNFTOOL::charTowchar_t((char*)Json_STL[Name].c_str());
|
||||
SQPushString(v, buffer, wcslen(buffer));//传给nut
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
SQPushBool(v, true);
|
||||
}
|
||||
else if (ParameterNum == 4)
|
||||
{
|
||||
//获取容器名字
|
||||
SQGetString(v, 2, &Name);
|
||||
//获取Key 的名字
|
||||
wchar_t* keybuffer;
|
||||
SQGetString(v, 3, &keybuffer);
|
||||
//转化为可用Key
|
||||
char* key = DNFTOOL::wchar_tTochar(keybuffer);
|
||||
|
||||
//构造json dom
|
||||
rapidjson::Document Dom;
|
||||
Dom.Parse(Json_STL[Name].c_str());//加载 字符串
|
||||
if(Json_STL[Name].length() == 0 )Dom.SetObject();//如果未初始化就初始化一次
|
||||
|
||||
rapidjson::Value BB;
|
||||
|
||||
//获取值的类型
|
||||
int ValueType = SQ_GetType(v, 4);
|
||||
//判断值类型
|
||||
switch (ValueType)
|
||||
{
|
||||
case OT_INTEGER://int类型
|
||||
{
|
||||
int Value;
|
||||
SQGetInt(v, 4, &Value);
|
||||
BB.SetInt(Value);
|
||||
break;
|
||||
}
|
||||
case OT_FLOAT://float类型
|
||||
{
|
||||
FLOAT Value;
|
||||
SQGetFloat(v, 4, &Value);
|
||||
BB.SetFloat(Value);
|
||||
break;
|
||||
}
|
||||
case OT_BOOL://bool类型
|
||||
{
|
||||
BOOL Value;
|
||||
SQGetBool(v, 4, &Value);
|
||||
BB.SetBool(Value);
|
||||
break;
|
||||
}
|
||||
case OT_STRING://string类型
|
||||
{
|
||||
wchar_t* Value;
|
||||
SQGetString(v, 4, &Value);
|
||||
char* str = DNFTOOL::wchar_tTochar(Value);
|
||||
BB.SetString(rapidjson::StringRef(str));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (Dom[key].IsNull())
|
||||
{
|
||||
Dom.AddMember(rapidjson::StringRef(key), BB, Dom.GetAllocator());
|
||||
}
|
||||
|
||||
rapidjson::StringBuffer jsonBuffer;
|
||||
rapidjson::Writer<rapidjson::StringBuffer> writer(jsonBuffer);
|
||||
Dom.Accept(writer);
|
||||
Json_STL[Name] = jsonBuffer.GetString();
|
||||
//delete[] key;
|
||||
SQPushBool(v, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
SQPushBool(v, false);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
//获取Squirrel v 基址
|
||||
inline uint32_t GetSqVm()
|
||||
{
|
||||
@@ -1142,6 +1255,11 @@ void squirrel::R_Register_Nut()
|
||||
RegisterNutApi(L"L_Timer_STL", squirrel::Timer_STL);//时间容器
|
||||
#endif
|
||||
|
||||
//Json STL
|
||||
#if defined JSON_STL
|
||||
RegisterNutApi(L"L_Json_STL", squirrel::Jsoner_STL);//时间容器
|
||||
#endif
|
||||
|
||||
//龙盒
|
||||
#if defined DRAGONBOX_SWITCH
|
||||
RegisterNutApi(L"L_Get_DragonModel", squirrel::Get_DragonModel);//获取龙盒模式
|
||||
|
||||
Reference in New Issue
Block a user