function LenheartAdditionalAttributes(obj) { //在副本中 if (sq_GetCurrentModuleType() == 3) { if (!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "appendage/lenheartap.nut")) { if ("LenheartAttributesTable" in getroottable()) { local Abarr = array(32, 0); foreach(AtObj in getroottable()["LenheartAttributesTable"]) { foreach(Apos, At in AtObj) { Abarr[Apos] += At; } } local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "appendage/lenheartap.nut", true); CNSquirrelAppendage.sq_Append(appendage, obj, obj); local change_appendage = appendage.sq_getChangeStatus("Yosin_LenheartDgnBuff"); if (!change_appendage) { change_appendage = appendage.sq_AddChangeStatusAppendageID(obj, obj, 0, CHANGE_STATUS_TYPE_COOLTIME_DECLINE, false, 0, 115514); } if (change_appendage) { change_appendage.clearParameter(); foreach(Key, Value in Abarr) { if (Key == 0) change_appendage.addParameter(13, false, Value.tofloat()); //HP else if (Key == 1) change_appendage.addParameter(48, false, Value.tofloat()); //MP else if (Key == 2) change_appendage.addParameter(0, false, Value.tofloat()); //力量 else if (Key == 3) change_appendage.addParameter(1, false, Value.tofloat()); //智力 else if (Key == 4) change_appendage.addParameter(2, false, Value.tofloat()); //体力 else if (Key == 5) change_appendage.addParameter(3, false, Value.tofloat()); //精神 else if (Key == 6) change_appendage.addParameter(4, false, Value.tofloat()); //物攻 else if (Key == 7) change_appendage.addParameter(31, false, Value.tofloat()); //魔攻 else if (Key == 8) { change_appendage.addParameter(53, false, Value.tofloat()); //独立 change_appendage.addParameter(54, false, Value.tofloat()); //独立 } else if (Key == 10) change_appendage.addParameter(5, false, Value.tofloat()); //物理防御 else if (Key == 11) change_appendage.addParameter(32, false, Value.tofloat()); //魔法防御 else if (Key == 12) change_appendage.addParameter(15, false, Value.tofloat() / 10.0); //物理暴击 else if (Key == 13) change_appendage.addParameter(16, false, Value.tofloat() / 10.0); //魔法暴击 else if (Key == 14) change_appendage.addParameter(10, false, Value.tofloat()); //攻速 else if (Key == 15) change_appendage.addParameter(12, false, Value.tofloat()); //释放 else if (Key == 16) change_appendage.addParameter(11, false, Value.tofloat()); //移速 else if (Key == 17) change_appendage.addParameter(39, false, Value.tofloat()); //抗磨 else if (Key == 18) change_appendage.addParameter(33, false, Value.tofloat()); //命中 else if (Key == 19) change_appendage.addParameter(27, false, Value.tofloat()); //闪避 else if (Key == 20) change_appendage.addParameter(14, false, Value.tofloat()); //HP恢复 else if (Key == 21) change_appendage.addParameter(29, false, Value.tofloat()); //MP恢复 else if (Key == 22) change_appendage.addParameter(41, false, Value.tofloat()); //僵直 else if (Key == 23) change_appendage.addParameter(34, false, Value.tofloat()); //硬直 else if (Key == 24) change_appendage.addParameter(42, false, Value.tofloat()); //火强 else if (Key == 25) change_appendage.addParameter(20, false, Value.tofloat()); //火抗 else if (Key == 26) change_appendage.addParameter(43, false, Value.tofloat()); //冰强 else if (Key == 27) change_appendage.addParameter(21, false, Value.tofloat()); //冰抗 else if (Key == 28) change_appendage.addParameter(45, false, Value.tofloat()); //光强 else if (Key == 29) change_appendage.addParameter(23, false, Value.tofloat()); //光抗 else if (Key == 30) change_appendage.addParameter(44, false, Value.tofloat()); //暗强 else if (Key == 31) change_appendage.addParameter(22, false, Value.tofloat()); //暗抗 } } } } } } if (getroottable().rawin("LenheartFuncTab")) { getroottable()["LenheartFuncTab"].rawset("LenheartAdditionalAttributesFunc", LenheartAdditionalAttributes); } else { local T = {}; T.rawset("LenheartAdditionalAttributesFunc", LenheartAdditionalAttributes); getroottable().rawset("LenheartFuncTab", T); } class LenheartTextClass { function GetStringLength(str) { return L_sq_GetStringDrawLength(str); } } class ItemInfoClass { //Gm模式 GmModel = true; Info = null; PageLength = 0; //静态品级颜色 static RarityColor = [ 0xFFFFFFFF, //白 0xFFEDD568, //蓝 0xFFFF6BB3, //紫 0xFFF000FF, //粉 0xFF00B1FF, //黄 0xFF6666FF, //红 0xFF0055FF, //橙 ]; // print(format("0x%02X as ",sq_RGBA(255, 85, 0, 255))); //我的品级颜色 MyRarityColor = null; //我的售价长度 MyPriceLength = null; //我的冷却时间长度 MyCoolTimeLength = null; //获取真实类型 function GetRealType(Type) { switch (Type) { case "[material]\r": return "材料"; break; default: return "道具"; break; } } constructor(gInfo) { Info = clone(gInfo); //Gm模式显示编号 if (GmModel) Info.Name += "[" + Info.Id + "]"; //配置品级颜色 if (Info.Rarity< 0 || Info.Rarity > 6) { MyRarityColor = Info.Rarity; } else { MyRarityColor = RarityColor[Info.Rarity]; } //配置售价长度 if ("Price" in Info) { MyPriceLength = LenheartTextClass.GetStringLength(Info.Price.tostring()); } //配置冷却时间长度 if ("CoolTime" in Info) { MyCoolTimeLength = LenheartTextClass.GetStringLength((Info.CoolTime / 1000.0).tostring()); } //配置类型 if ("Type" in Info) { Info.Type = GetRealType(Info.Type); } // CheckInfoLength("Name", 40); // CheckInfoLength("Price", 16); // CheckInfoLength("Type", 16); PageLength += 72; CheckStrLength(); } function CheckInfoLength(TableKey, AddLength) { if (TableKey in Info) { PageLength += AddLength; } } function CheckStrLength() { if ("Explain" in Info) { local Buf = LenheartTextClass.GetStringLength(Info.Explain.tostring()); local Pn = (Buf / 211.0); if (Pn< 1) PageLength += 12; if (Pn > 1) Pn = Pn.tointeger() + 1; PageLength += (16 * Pn); } } //高级绘制文字(带换行) function L_sq_DrawCode_Ex(str, x, y, rgba, mb, jc, hl) { local strarr = []; if (str.find("\n") == null) L_sq_DrawCode(str, x, y, rgba, mb, jc); else { local Bpos = 0; while (true) { local Npos = str.find("\n", Bpos); if (!Npos) { local strbuff = str.slice(Bpos, str.len()); strarr.append(strbuff); break; } local strbuff = str.slice(Bpos, Npos); strarr.append(strbuff); Bpos = Npos + 1; } for (local z = 0; z< strarr.len(); z++) { L_sq_DrawCode(strarr[z], x, y + (z * 14), rgba, mb, jc); } } } function Show(X, Y) { if (X< 0) X = 0; if ((X + 211) > 800) X = (800 - 211); if (Y< 0) Y = 0; if (Y + PageLength > 600) Y = 600 - PageLength; //Item信息框一般为211的宽度 L_sq_DrawWindow(X, Y, 211, PageLength, "interface2/popup/popup.img", 134, 6, 12, 6, 13); //绘制名字 和 图标 if ("Id" in Info) L_Sq_DrawItem(X + 8 + 174, Y + 8, Info.Id, 1, 0, 0, 0); if ("Name2" in Info) L_sq_DrawCode(Info.Name2, X + 8, Y + 9, MyRarityColor, 1, 1); if ("Name" in Info) L_sq_DrawCode(Info.Name, X + 8, Y + 23, MyRarityColor, 1, 1); //绘制线 L_sq_DrawImg("interface2/popup/popup.img", 270, X + 7, Y + 26 + 16); //绘制重量 if ("Weight" in Info) { L_sq_DrawCode((Info.Weight).tostring() + "kg", X + 7, Y + 24 + 24, 0xFFFFFFFF, 1, 1); } //绘制售价 if ("Price" in Info) { L_sq_DrawCode("金币", X + 186, Y + 24 + 24, 0xFFFFFFFF, 1, 1); L_sq_DrawCode(Info.Price.tostring(), X - MyPriceLength + 186, Y + 24 + 24, 0xFFFFFFFF, 1, 1); } //绘制类型 if ("Type" in Info) { L_sq_DrawCode(Info.Type.tostring(), X + 7, Y + 48 + 16, 0xFFFFFFFF, 1, 1); } //绘制冷却时间 if ("CoolTime" in Info) { L_sq_DrawCode("秒", X + 186 + 12, Y + 48 + 16, 0xFFFFFFFF, 1, 1); L_sq_DrawCode((Info.CoolTime / 1000.0).tostring(), X - MyCoolTimeLength + 214 - 18, Y + 48 + 16, 0xFFFFFFFF, 1, 1); } //绘制普通描述 if ("Explain" in Info) { local a = L_sq_GetStringDrawArray(Info.Explain, 251); foreach(Pos, va in a) { // Sout("文本内容嗯: %L", va); L_sq_DrawCode(va, X + 7, Y + 48 + 16 + 24 + (Pos * 16), 0xFFEDD568, 1, 1); } // Sout("A%L", a[0]); } } } function GetOtherPlayerAttributeLMain(Chunk) { if (L_sq_RA(0x1A5FB4C, "0x14+0x28+") == 0) return; local PlayerName = L_Sq_GetPlayerEachName(); if (PlayerName) { local T = { op = 20231017, realop = 2023102002, name = PlayerName, } BasicsDrawTool.SendPack(T); } } if (!(getroottable().rawin("GetOtherPlayerAttributeLMainCCC"))) { SendPackTypeTable.rawset(8, GetOtherPlayerAttributeLMain); getroottable().rawset("GetOtherPlayerAttributeLMainCCC", 1); } function GetOtherPlayerAttributeLMainCallBack(Chunk) { // Sout("收到包内容: %L", Chunk); local Jso = Json.Decode(Chunk); getroottable().LenheartOtherPlayerAb <- Jso.attribute; } Pack_Control.rawset(2023102002, GetOtherPlayerAttributeLMainCallBack); function Sq_L_OtherPlayerInfo(x, y, Type, Value, ImgBuf) { if ("LenheartOtherPlayerAb" in getroottable()) { if (sq_GetCurrentModuleType() == 1) Value = Value + (getroottable().LenheartOtherPlayerAb[Type].tofloat() / 100.0).tointeger(); } local str = Value.tostring(); if ((Type >= 12 && Type <= 16) || Type == 18 || Type == 19) { str = format("+%d.0/", Value); } local lenght = LenheartTextClass.GetStringLength(str); L_sq_DrawImg(ImgBuf, x + 70 - lenght, y + 5); return Value; } class LenheartWindow extends BasicsDrawTool { //宽度 Width = null; //高度 Height = null; //标题高度 TitleH = null; //X坐标 X = null; B_X = null; //Y坐标 Y = null; B_Y = null; YMouseSw = true; DeBugMode = false; Mobj = null; M_Xpos = null; M_Ypos = null; constructor(gX, gY, gWidth, gHeight, gTitleH) { //宽度 Width = gWidth; //高度 Height = gHeight; //标题高度 TitleH = gTitleH; //X坐标 X = gX; //Y坐标 Y = gY; if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; } //设定鼠标逻辑 function LockMouse() { if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { IMouse.LockMouseClick(); YMouseSw = false; L_sq_WA(0x1b46898, 1); } else { if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { IMouse.ReleaseMouseClick(); YMouseSw = true; L_sq_WA(0x1b46898, 0); } } } //设定窗口拖动逻辑 function MoveWindow() { if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, TitleH)) { if (Mobj.Lb == 1) { if (!M_Xpos) M_Xpos = IMouse.GetXPos(); //原始鼠标位置数据 if (!M_Ypos) M_Ypos = IMouse.GetYPos(); if (!B_X) B_X = X; //原始窗口位置 if (!B_Y) B_Y = Y; X = B_X - (M_Xpos - IMouse.GetXPos()); Y = B_Y - (M_Ypos - IMouse.GetYPos()); } else if (Mobj.Lb == 0) { M_Xpos = null; M_Ypos = null; B_X = null; B_Y = null; } } } function Show(obj) { if (DeBugMode) sq_DrawBox(X, Y, Width, Height, 0xffffffff); //设定鼠标逻辑 LockMouse(); //设定窗口拖动逻辑 MoveWindow(); } } class LenheartcommonUiC { X = null; Y = null; Width = null; Height = null; Mobj = null; //鼠标对象 constructor(x, y, width, height) { this.X = x; this.Y = y; this.Width = width; this.Height = height; if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; } //同步坐标 function SyncPos(x, y) { this.X = x; this.Y = y; } //悬停状态 function isInRect() { if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) return true; else return false; } //左键按下状态 function isLBDown() { if (isInRect() && Mobj.Lb == 1) return true; else return false; } //左键弹起状态 function isLBUp() { if (isInRect() && Mobj.Lb == 0) return true; else return false; } //左键单击状态 function isLBActive() { if (isInRect() && Mobj.LbEvent) { State = 1; return true; } else return false; } } //复选框 class LenheartcommonSwitchButton extends LenheartcommonUiC { State = 0; ImgIndex = null; constructor(X, Y) { LenheartcommonUiC.constructor(X, Y, 14, 15); } function Show() { //不可用 if (State == 8) { L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 3 : 141, X, Y + 1); } else { //悬停 if (isLBDown()) { L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 2 : 140, X, Y + 1); } //按下 else if (isInRect()) { if (State == 0) L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 1 : 139, X, Y); if (State == 1) L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 2 : 140, X, Y); } //普通 else { if (State == 0) L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex : 138, X, Y); if (State == 1) L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 2 : 140, X, Y); } } } } class LenheartcommonSwitchButtonText extends LenheartcommonSwitchButton { TextStr = null; TextX = 0; TextY = 0; TextColor = null; TextRColor = null; constructor(X, Y, Str) { LenheartcommonSwitchButton.constructor(X, Y); this.TextStr = Str; TextColor = sq_RGBA(221, 197, 147, 250); TextRColor = sq_RGBA(255, 255, 184, 250); } function SetTextColor(RGBA) { TextColor = RGBA; } function SetTextPos(gX, gY) { TextX = gX; TextY = gY; } function Show() { LenheartcommonSwitchButton.Show(); local Color = TextColor; local SY = Y; if (State != 8) { if (isLBDown()) { SY = Y + 1; } if (isInRect() || State == 1) { Color = TextRColor; } } L_sq_DrawCode(TextStr, X + 16 + TextX, SY + 1 + TextY, Color, 0, 1); } } class LenheartTabbars extends LenheartcommonUiC { State = 0; Path = "interface/lenheartwindowcommon.img"; Idx = 29; constructor(X, Y, ...) { if (vargc == 2) { LenheartcommonUiC.constructor(X, Y, vargv[0], vargv[1]); } else { LenheartcommonUiC.constructor(X, Y, 61, 19); } } function SetFrame(gPath, gIdx) { if (gPath) Path = gPath; Idx = gIdx; } function Show() { //不可用 if (State == 8) { L_sq_DrawImg(Path, Idx + 3, X, Y); } else { //按下 if (isLBDown()) { L_sq_DrawImg(Path, Idx + 1, X, Y + 1); } //悬停 else if (isInRect()) { if (State == 0) L_sq_DrawImg(Path, Idx + 1, X, Y); if (State == 1) L_sq_DrawImg(Path, Idx + 2, X, Y); } //普通 else { if (State == 0) L_sq_DrawImg(Path, Idx, X, Y); if (State == 1) L_sq_DrawImg(Path, Idx + 2, X, Y); } } } } class LenheartTabbarsText extends LenheartTabbars { TextStr = null; TextX = null; TextY = null; TextColor = null; TextRColor = null; TextXoffset = null; TextYoffset = null; constructor(X, Y, Str, ...) { if (vargc == 2) { LenheartTabbars.constructor(X, Y, vargv[0], vargv[1]); } else { LenheartTabbars.constructor(X, Y); } this.TextStr = Str; TextColor = sq_RGBA(124, 110, 82, 255); TextRColor = sq_RGBA(185, 172, 145, 255); TextXoffset = 19; TextYoffset = 3; } function SetTextColor(RGBA) { TextColor = RGBA; } function SetTextOffset(gX, gY) { TextXoffset = gX; TextYoffset = gY; } function Show() { LenheartTabbars.Show(); local Color = TextColor; local SY = Y + TextYoffset; if (State != 8) { if (isLBDown()) { SY = Y + TextYoffset + 1; } if (isInRect() || State == 1) { Color = TextRColor; } } if (State == 1) L_sq_DrawCode(TextStr, X + TextXoffset, SY, Color, 0, 1); if (State == 0 || State == 8) L_sq_DrawCode(TextStr, X + TextXoffset, SY + 2, Color, 0, 1); } } class LenheartButton extends LenheartcommonUiC { State = 0; BaseIdx = 29; DWidth = null; Path = "interface/lenheartwindowcommon.img"; Idx = 172; FillWidth = 2; FirstWidth = 28; constructor(X, Y, W) { this.DWidth = W; LenheartcommonUiC.constructor(X, Y, W + 28 * 2, 24); } function SetFrame(gPath, gIdx) { if (gPath) Path = gPath; Idx = gIdx; } function Show() { //不可用 if (State == 8) { L_sq_DrawButton(X, Y + 1, this.DWidth, Path, Idx + 9,FillWidth,FirstWidth); } else { //按下 if (isLBDown()) { L_sq_DrawButton(X, Y + 1, this.DWidth, Path, Idx + 3,FillWidth,FirstWidth); } //悬停 else if (isInRect()) { L_sq_DrawButton(X, Y, this.DWidth, Path, Idx + 3,FillWidth,FirstWidth); } //普通 else { L_sq_DrawButton(X, Y, this.DWidth, Path, Idx,FillWidth,FirstWidth); } } } } class LenheartButtonText extends LenheartButton { TextStr = null; TextX = null; TextY = null; TextColor = null; TextRColor = null; TextXoffset = null; TextYoffset = null; constructor(X, Y, W, Str) { LenheartButton.constructor(X, Y, W); this.TextStr = Str; TextColor = sq_RGBA(185, 148, 96, 255); TextRColor = sq_RGBA(227, 212, 154, 255); TextXoffset = 19; TextYoffset = 3; } function SetTextColor(RGBA) { TextColor = RGBA; } function SetTextOffset(gX, gY) { TextXoffset = gX; TextYoffset = gY; } function Show() { LenheartButton.Show(); local Color = TextColor; local SY = Y + TextYoffset; if (State != 8) { if (isLBDown()) { SY = Y + TextYoffset + 1; } if (isInRect() || State == 1) { Color = TextRColor; } } L_sq_DrawCode(TextStr, X + TextXoffset + 19, SY + 5, Color, 0, 1); } } class LenheartBaseButton extends LenheartcommonUiC { State = 0; BaseIdx = 29; DWidth = null; Path = null; Idx = null; constructor(X, Y, W, H, Path, Idx) { this.DWidth = W; this.Path = Path; this.Idx = Idx; LenheartcommonUiC.constructor(X, Y, W, H); } function SetFrame(gPath, gIdx) { if (gPath) Path = gPath; Idx = gIdx; } function Show() { //不可用 if (State == 8) { L_sq_DrawImg(Path, Idx + 3, X, Y + 1); } else { //按下 if (isLBDown()) { L_sq_DrawImg(Path, Idx + 2, X, Y + 1); } //悬停 else if (isInRect()) { L_sq_DrawImg(Path, Idx + 1, X, Y); } //普通 else { L_sq_DrawImg(Path, Idx, X, Y); } } } } class LenheartBaseButtonText extends LenheartBaseButton { TextStr = null; TextX = null; TextY = null; TextColor = null; TextRColor = null; TextXoffset = null; TextYoffset = null; constructor(X, Y, W, H, Path, Idx, Str) { LenheartBaseButton.constructor(X, Y, W, H, Path, Idx); this.TextStr = Str; TextColor = sq_RGBA(185, 148, 96, 255); TextRColor = sq_RGBA(227, 212, 154, 255); TextXoffset = 19; TextYoffset = 3; } function SetTextColor(RGBA) { TextColor = RGBA; } function SetTextOffset(gX, gY) { TextXoffset = gX; TextYoffset = gY; } function Show() { LenheartBaseButton.Show(); local Color = TextColor; local SY = Y + TextYoffset; if (State != 8) { if (isLBDown()) { SY = Y + TextYoffset + 1; } if (isInRect() || State == 1) { Color = TextRColor; } } L_sq_DrawCode(TextStr, X + TextXoffset + 19, SY + 5, Color, 0, 1); } } class LenheartBaseInput extends LenheartcommonUiC { State = 0; InputState = 0; DWidth = null; str = ""; sliceCode = "|"; BaseTime = 0; InputController = null; constructor(X, Y, W, H) { this.DWidth = W; LenheartcommonUiC.constructor(X, Y, W, H); } function sliceCodeFlicker() { local T = Clock(); if ((T - 500) >= BaseTime) { BaseTime = T; if (sliceCode.len() > 0) sliceCode = ""; else if (sliceCode.len() == 0) sliceCode = "|"; } } //同步坐标 function SyncPos(x, y) { this.X = x; this.Y = y; } function Show() { //光标闪烁 if (InputState == 1) sliceCodeFlicker(); else sliceCode = ""; L_sq_DrawImg("interface/lenheartwindowcommon.img", 63, this.X, this.Y); for (local i = 0; i< this.Width; i++) { L_sq_DrawImg("interface/lenheartwindowcommon.img", 64, this.X + 3 + i, this.Y); } L_sq_DrawImg("interface/lenheartwindowcommon.img", 65, this.X + 3 + this.Width, this.Y); L_sq_DrawCode(str + sliceCode, this.X + 4, this.Y + 3, sq_RGBA(179, 169, 135, 255), 0, 1); if (this.isLBActive()) { InputController = L_sq_NewInputBox(this.X, this.Y, this.Width, this.Height, str); InputState = 1; } if (InputController) { local StrBuf = L_sq_GetInputBoxStr(InputController); if (StrBuf != "LenheartNULL") str = StrBuf; else { InputController = null; InputState = 0; } } } } //在DrawMain后面调用 function L_drawMainCustomUI_All() { local obj = sq_GetMyMasterCharacter(); //尝试调用百级UI if (getroottable().rawin("Lenheart_100UI_Event_BackGround")) Lenheart_100UI_Event_BackGround(); if (getroottable().rawin("Lenheart_100UI")) Lenheart_100UI(obj); } if (!getroottable().rawin("L_CompleteTaskTable")) L_CompleteTaskTable <- {} //完成任务回调 function Sq_CompleteTask(a2, a3, a4) { foreach(Func in L_CompleteTaskTable) { Func(a2, a3, a4); } } DIK_ESCAPE <- 0x01 DIK_1 <- 0x02 DIK_2 <- 0x03 DIK_3 <- 0x04 DIK_4 <- 0x05 DIK_5 <- 0x06 DIK_6 <- 0x07 DIK_7 <- 0x08 DIK_8 <- 0x09 DIK_9 <- 0x0A DIK_0 <- 0x0B DIK_MINUS <- 0x0C /* - on main keyboard */ DIK_EQUALS <- 0x0D DIK_BACK <- 0x0E /* backspace */ DIK_TAB <- 0x0F DIK_Q <- 0x10 DIK_W <- 0x11 DIK_E <- 0x12 DIK_R <- 0x13 DIK_T <- 0x14 DIK_Y <- 0x15 DIK_U <- 0x16 DIK_I <- 0x17 DIK_O <- 0x18 DIK_P <- 0x19 DIK_LBRACKET <- 0x1A DIK_RBRACKET <- 0x1B DIK_RETURN <- 0x1C /* Enter on main keyboard */ DIK_LCONTROL <- 0x1D DIK_A <- 0x1E DIK_S <- 0x1F DIK_D <- 0x20 DIK_F <- 0x21 DIK_G <- 0x22 DIK_H <- 0x23 DIK_J <- 0x24 DIK_K <- 0x25 DIK_L <- 0x26 DIK_SEMICOLON <- 0x27 DIK_APOSTROPHE <- 0x28 DIK_GRAVE <- 0x29 /* accent grave */ DIK_LSHIFT <- 0x2A DIK_BACKSLASH <- 0x2B DIK_Z <- 0x2C DIK_X <- 0x2D DIK_C <- 0x2E DIK_V <- 0x2F DIK_B <- 0x30 DIK_N <- 0x31 DIK_M <- 0x32 DIK_COMMA <- 0x33 DIK_PERIOD <- 0x34 /* . on main keyboard */ DIK_SLASH <- 0x35 /* / on main keyboard */ DIK_RSHIFT <- 0x36 DIK_MULTIPLY <- 0x37 /* * on numeric keypad */ DIK_LMENU <- 0x38 /* left Alt */ DIK_SPACE <- 0x39 DIK_CAPITAL <- 0x3A DIK_F1 <- 0x3B DIK_F2 <- 0x3C DIK_F3 <- 0x3D DIK_F4 <- 0x3E DIK_F5 <- 0x3F DIK_F6 <- 0x40 DIK_F7 <- 0x41 DIK_F8 <- 0x42 DIK_F9 <- 0x43 DIK_F10 <- 0x44 DIK_NUMLOCK <- 0x45 DIK_SCROLL <- 0x46 /* Scroll Lock */ DIK_NUMPAD7 <- 0x47 DIK_NUMPAD8 <- 0x48 DIK_NUMPAD9 <- 0x49 DIK_SUBTRACT <- 0x4A /* - on numeric keypad */ DIK_NUMPAD4 <- 0x4B DIK_NUMPAD5 <- 0x4C DIK_NUMPAD6 <- 0x4D DIK_ADD <- 0x4E /* + on numeric keypad */ DIK_NUMPAD1 <- 0x4F DIK_NUMPAD2 <- 0x50 DIK_NUMPAD3 <- 0x51 DIK_NUMPAD0 <- 0x52 DIK_DECIMAL <- 0x53 /* . on numeric keypad */ DIK_OEM_102 <- 0x56 /* <> or \| on RT 102-key keyboard (Non-U.S.) */ DIK_F11 <- 0x57 DIK_F12 <- 0x58 DIK_F13 <- 0x64 /* (NEC PC98) */ DIK_F14 <- 0x65 /* (NEC PC98) */ DIK_F15 <- 0x66 /* (NEC PC98) */ DIK_KANA <- 0x70 /* (Japanese keyboard) */ DIK_ABNT_C1 <- 0x73 /* /? on Brazilian keyboard */ DIK_CONVERT <- 0x79 /* (Japanese keyboard) */ DIK_NOCONVERT <- 0x7B /* (Japanese keyboard) */ DIK_YEN <- 0x7D /* (Japanese keyboard) */ DIK_ABNT_C2 <- 0x7E /* Numpad . on Brazilian keyboard */ DIK_NUMPADEQUALS <- 0x8D /* = on numeric keypad (NEC PC98) */ DIK_PREVTRACK <- 0x90 /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */ DIK_AT <- 0x91 /* (NEC PC98) */ DIK_COLON <- 0x92 /* (NEC PC98) */ DIK_UNDERLINE <- 0x93 /* (NEC PC98) */ DIK_KANJI <- 0x94 /* (Japanese keyboard) */ DIK_STOP <- 0x95 /* (NEC PC98) */ DIK_AX <- 0x96 /* (Japan AX) */ DIK_UNLABELED <- 0x97 /* (J3100) */ DIK_NEXTTRACK <- 0x99 /* Next Track */ DIK_NUMPADENTER <- 0x9C /* Enter on numeric keypad */ DIK_RCONTROL <- 0x9D DIK_MUTE <- 0xA0 /* Mute */ DIK_CALCULATOR <- 0xA1 /* Calculator */ DIK_PLAYPAUSE <- 0xA2 /* Play / Pause */ DIK_MEDIASTOP <- 0xA4 /* Media Stop */ DIK_VOLUMEDOWN <- 0xAE /* Volume - */ DIK_VOLUMEUP <- 0xB0 /* Volume + */ DIK_WEBHOME <- 0xB2 /* Web home */ DIK_NUMPADCOMMA <- 0xB3 /* , on numeric keypad (NEC PC98) */ DIK_DIVIDE <- 0xB5 /* / on numeric keypad */ DIK_SYSRQ <- 0xB7 DIK_RMENU <- 0xB8 /* right Alt */ DIK_PAUSE <- 0xC5 /* Pause */ DIK_HOME <- 0xC7 /* Home on arrow keypad */ DIK_UP <- 0xC8 /* UpArrow on arrow keypad */ DIK_PRIOR <- 0xC9 /* PgUp on arrow keypad */ DIK_LEFT <- 0xCB /* LeftArrow on arrow keypad */ DIK_RIGHT <- 0xCD /* RightArrow on arrow keypad */ DIK_END <- 0xCF /* End on arrow keypad */ DIK_DOWN <- 0xD0 /* DownArrow on arrow keypad */ DIK_NEXT <- 0xD1 /* PgDn on arrow keypad */ DIK_INSERT <- 0xD2 /* Insert on arrow keypad */ DIK_DELETE <- 0xD3 /* Delete on arrow keypad */ DIK_LWIN <- 0xDB /* Left Windows key */ DIK_RWIN <- 0xDC /* Right Windows key */ DIK_APPS <- 0xDD /* AppMenu key */ DIK_POWER <- 0xDE /* System Power */ DIK_SLEEP <- 0xDF /* System Sleep */ DIK_WAKE <- 0xE3 /* System Wake */ DIK_WEBSEARCH <- 0xE5 /* Web Search */ DIK_WEBFAVORITES <- 0xE6 /* Web Favorites */ DIK_WEBREFRESH <- 0xE7 /* Web Refresh */ DIK_WEBSTOP <- 0xE8 /* Web Stop */ DIK_WEBFORWARD <- 0xE9 /* Web Forward */ DIK_WEBBACK <- 0xEA /* Web Back */ DIK_MYCOMPUTER <- 0xEB /* My Computer */ DIK_MAIL <- 0xEC /* Mail */ DIK_MEDIASELECT <- 0xED /* Media Select */ //Json类 class Json { constructor() { } function Encode(Table) { local Size = Table.len(); local Pos = 0; local Str = "{"; foreach(Key, Value in Table) { ++Pos; Str += "\""; Str += Key.tostring(); Str += "\""; Str += ":"; if (typeof(Value) == "string") { print(Value.len()); Sout("中文字符串為: %L",Value); Str += "\""; Str += Value; Str += "\""; } else if (typeof(Value) == "table") { Str += Json.Encode(Value); } else if (typeof(Value) == "array") { Str += "["; foreach(ArrObj in Value) { if(typeof(ArrObj) == "table")Str += Json.Encode(Value); else{ Str += ArrObj; Str += ","; } } Str = Str.slice(0,Str.len() - 1); Str += "]"; }else Str += Value; if (Pos != Size) Str += ","; } Str += "}"; return Str; } function Decode(Str) { Str = L_sq_DecondeJson(Str); local Str = "local _M = " + Str + ";\n return _M;\n"; local Func = compilestring(Str); return Func(); } }