diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..a739fa1 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,22 @@ +# Repository Guidelines + +## Project Structure & Module Organization +This repository is a DP-S game-server hotfix tree. `Main.nut` is the entry point and hot-loads five roots: `OfficialConfig/`, `OfficialProject/`, `_DPS_/_Core/`, `_DPS_/_BuiltProject/`, and `MyProject/`. Put shared framework code, hooks, and callback glue in `_DPS_/_Core/`. Treat `_DPS_/_BuiltProject/` as bundled baseline features. Add official feature modules under `OfficialProject/<功能名>/`, usually with a matching `<功能名>.nut` and optional `Proj.ifo`; keep module JSON beside it in `OfficialConfig/`. Use `MyProject/` for local or experimental scripts. Runtime outputs belong in `log/`; native binaries and maintenance scripts live in `lib/`. + +## Build, Test, and Development Commands +There is no standalone compile step for `.nut` scripts; the server reloads them through `GameManager.OpenHotFix(...)` in `Main.nut`. + +- `git status` - check the workspace before editing or submitting. +- `git diff --stat` - review the size and scope of your change. +- `Get-Content Main.nut` - confirm hotfix load order and active roots. +- `Get-ChildItem OfficialProject, OfficialConfig, MyProject` - inspect feature and config layout. +- `bash lib/strip_other_funcs_unix.sh lib/libAurora.so` - maintenance-only helper for the Aurora binary; do not run unless you are intentionally updating symbols. + +## Coding Style & Naming Conventions +Use 4-space indentation and keep lines readable. Follow existing Squirrel patterns: `PascalCase` for helper functions, callback maps like `Cb_*`, and descriptive feature names for folders and main scripts. Keep one primary feature per folder/file pair, for example `OfficialProject/战力榜/战力榜.nut`. Name configs by feature, optionally with a server suffix such as `战力榜配置_南瓜.json`. Prefer small, focused hooks over large unrelated edits. + +## Testing Guidelines +This repo has no automated test suite yet. Validate changes on a development server by reloading the affected hotfix path, exercising the related GM command, callback, or dungeon flow, and checking `log/` for regressions. When a module reads JSON, test both the script change and the matching config file together. + +## Commit & Pull Request Guidelines +Recent history favors Conventional Commit prefixes such as `feat`, `fix`, `refactor`, and `docs`, often with a scope: `feat(偷窃系统): ...`. Keep new commits in that style even though older messages are mixed. PRs should explain gameplay impact, list touched paths, call out config or data migrations, and include screenshots or log snippets when the change affects announcements, UI text, or player-visible flows. diff --git a/绀轰緥椤圭洰/DPS鍚姩鍣/DPS鍚姩鍣.nut b/绀轰緥椤圭洰/DPS鍚姩鍣/DPS鍚姩鍣.nut new file mode 100644 index 0000000..7d0a450 --- /dev/null +++ b/绀轰緥椤圭洰/DPS鍚姩鍣/DPS鍚姩鍣.nut @@ -0,0 +1,169 @@ +class _DPS_Login_Gateway_ { + + //鏁版嵁搴撹繛鎺 + MysqlObject = null; + + PackHandleMap = null; + + + constructor() { + PackHandleMap = {}; + + MysqlObject = Mysql(Str_Ptr("127.0.0.1"), 3306, Str_Ptr("taiwan_cain"), Str_Ptr("game"), Str_Ptr("uu5!^%jg")); + MysqlObject.Exec_Sql(format("SET NAMES %s", "latin1")); + + //鍒涘缓涓涓狧ttp Server + try { + local HS = HttpServer("0.0.0.0", "41817"); + HS.Listen(function(SocketObject, Header, Msg) { + getroottable()._DPS_Login_Gateway_Object_._HttpServer_Event_DPS_(SocketObject, Header, Msg); + }); + } catch (exception) { + + } + + PackHandleMap["/GetConfig"] <- function(SocketObject, Header, Jso) { + local Config = sq_ReadJsonFile("/dp_s/OfficialConfig/鐧诲綍鍣ㄩ厤缃.json"); + //璇诲彇DPS鐧诲綍鍣ㄧ殑閰嶇疆骞跺彂閫 + SocketObject.Write(Config); + } + + + PackHandleMap["/Login"] <- function(SocketObject, Header, Jso) { + if (!Jso.rawin("account")) return; + if (!Jso.rawin("passwd")) return; + local account = Jso.account; + local passwd = Jso.passwd; + local passwd_hash = MD5_Hash(passwd); + + + //姝e垯琛ㄨ揪寮 鍙厑璁稿瓧姣嶅拰鏁板瓧 + local regex = regexp("^[A-Za-z0-9]{1,19}$"); + if (!regex.match(account)) { + SocketObject.Write({ + error = "璐﹀彿鍙兘鍖呭惈瀛楁瘝鍜屾暟瀛椾笖闀垮害灏忎簬20" + }); + return; + } + + local sql = format("select UID from d_taiwan.accounts where accountname='%s' and password='%s';", account, passwd_hash); + local Ret = MysqlObject.Select(sql, ["int"]); + if (Ret && Ret.len() > 0) { + local Uid = Ret[0][0]; + local str = format("%08x010101010101010101010101010101010101010101010101010101010101010155914510010403030101", Uid); + local Byte = Sq_Rsa_Private_Encrypt(str); + local EnStr = MD5.base64_encode(Byte); + //鍙戦佺櫥褰昑oken + SocketObject.Write({ + token = EnStr + }); + } else { + SocketObject.Write({ + error = "璐﹀彿鎴栧瘑鐮侀敊璇!" + }); + } + }.bindenv(this); + + + PackHandleMap["/Register"] <- function(SocketObject, Header, Jso) { + + if (!Jso.rawin("account")) return; + if (!Jso.rawin("passwd")) return; + + local account = Jso.account; + local passwd = Jso.passwd; + + + //姝e垯琛ㄨ揪寮 鍙厑璁稿瓧姣嶅拰鏁板瓧 + local regex = regexp("^[A-Za-z0-9]{1,19}$"); + if (account.len() == 0 || !regex.match(account)) { + SocketObject.Write({ + error = "璐﹀彿鍙兘鍖呭惈瀛楁瘝鍜屾暟瀛椾笖闀垮害澶т簬0灏忎簬20" + }); + return; + } + if (passwd.len() == 0 || !regex.match(passwd)) { + SocketObject.Write({ + error = "瀵嗙爜鍙兘鍖呭惈瀛楁瘝鍜屾暟瀛椾笖闀垮害澶т簬0灏忎簬20" + }); + return; + } + if (GetAccountByName(account) != null) { + SocketObject.Write({ + error = "璐﹀彿宸插瓨鍦" + }) + return; + } + local passwd_hash = MD5_Hash(passwd); + + + local sql = format("INSERT INTO d_taiwan.accounts(accountname, password)VALUES( '%s' , '%s');", account, passwd_hash); + MysqlObject.Exec_Sql(sql); + local Ret = MysqlObject.Select("SELECT LAST_INSERT_ID()", ["int"]); + if (Ret && Ret.len() > 0) { + local Uid = Ret[0][0].tostring(); + MysqlObject.Exec_Sql(format("INSERT INTO d_taiwan.member_info(m_id, user_id)VALUES('%s','%s');", Uid, Uid)); + MysqlObject.Exec_Sql(format("INSERT INTO d_taiwan.member_white_account(m_id)VALUES('%s')", Uid)); + MysqlObject.Exec_Sql(format("INSERT INTO taiwan_login.member_login(m_id)VALUES('%s')", Uid)); + MysqlObject.Exec_Sql(format("INSERT INTO taiwan_billing.cash_cera(account, cera,mod_tran,mod_date, reg_date)VALUES('%s',0,0,NOW(), NOW())", Uid)); + MysqlObject.Exec_Sql(format("INSERT INTO taiwan_billing.cash_cera_point(account, cera_point,mod_date, reg_date)VALUES('%s',0,NOW(), NOW())", Uid)); + SocketObject.Write({ + success = "璐﹀彿娉ㄥ唽鎴愬姛,鐜板湪鎮ㄥ彲浠ョ櫥褰曚簡!" + }); + return; + } + + }.bindenv(this); + + + } + + + function GetAccountByName(account) { + local sql = format("select UID , accountname, password from d_taiwan.accounts where accountname='%s'", account); + local Ret = MysqlObject.Select(sql, ["int", "string", "string"]); + print(Ret); + if (!Ret || Ret.len() == 0) { + return null; + } + + return { + uid = Ret[0][0], + account = Ret[0][1], + passwd = Ret[0][2] + } + } + + function _HttpServer_Event_DPS_(SocketObject, Header, Msg) { + if (PackHandleMap.rawin(Header.path)) { + local Jso = null; + try { + Jso = Json.Decode(Msg); + } catch (exception) { + + } + if (!Jso) return; + PackHandleMap[Header.path](SocketObject, Header, Jso); + + } else { + SocketObject.Write({ + error = "error url" + }); + } + } + + function MD5_Hash(str) { + local Ctx = Memory.alloc(0x100); + MD5.MD5_Init(Ctx.C_Object); + MD5.MD5_Update(Ctx.C_Object, Memory.allocUtf8String(str).C_Object, str.len()); + local Result = Memory.alloc(16); + MD5.MD5_Final(Result.C_Object, Ctx.C_Object); + return MD5.hex_encode(Result.readUtf8String(16)); + } +} + + +function _DPS_Login_Gateway_Init_(){ + getroottable()._DPS_Login_Gateway_Object_ <- _DPS_Login_Gateway_(); + print("\x1b[96m" + "############DPS鍚姩鍣ㄧ綉鍏冲伐浣滀腑############" + "\x1b[0m"); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/DPS鍚姩鍣/Proj.ifo b/绀轰緥椤圭洰/DPS鍚姩鍣/Proj.ifo new file mode 100644 index 0000000..2ba4d4e --- /dev/null +++ b/绀轰緥椤圭洰/DPS鍚姩鍣/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "DPS鍚姩鍣", + "ProjectDescribe": "DPS浣滀负缃戝叧,QT缂栧啓鐨勭函鍑鐧诲綍鍣", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.0, + "ProjectConfig": "鐧诲綍鍣ㄩ厤缃.json", + "ProjectFiles": [ + "DPS鍚姩鍣.nut" + ], + "ProjectRunFunc": "_DPS_Login_Gateway_Init_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/DPS鍚姩鍣/鐧诲綍鍣ㄩ厤缃.json b/绀轰緥椤圭洰/DPS鍚姩鍣/鐧诲綍鍣ㄩ厤缃.json new file mode 100644 index 0000000..eda4d13 --- /dev/null +++ b/绀轰緥椤圭洰/DPS鍚姩鍣/鐧诲綍鍣ㄩ厤缃.json @@ -0,0 +1,51 @@ +{ + "noticeclass": [ + "鍏憡", + "娲诲姩", + "鐜╂硶" + ], + "notice": [ + { + "type": "img", + "category": 3, + "text": "瀹夊浘鎭╂敾鍧氭垬鏉ヨ,鑽掑彜姝﹀櫒绛変綘鎷!", + "link": "https://dnf.qq.com/cp/a20260108festivalgift/", + "content": "http://192.168.200.25:3000/Lenheart/ImageHosting/raw/branch/main/anton.png" + }, + { + "type": "img", + "category": 2, + "text": "鍛借繍搴忓垪绀煎寘,2026鏂版槬绀煎寘涓婄嚎!", + "content": "http://192.168.200.25:3000/Lenheart/ImageHosting/raw/branch/main/mingyunxulie.png", + "link": "https://dnf.qq.com/cp/a20260108festivalgift/" + }, + { + "type": "img", + "category": 3, + "text": "缁堢粨鐙勭憺鍚夌殑涓嶇伃鐏惧巹锛岀粓缁撲笉鐏殑瀹垮懡鎶!", + "content": "http://192.168.200.25:3000/Lenheart/ImageHosting/raw/branch/main/diruiji.png", + "link": "https://dnf.qq.com/cp/a20260108diregieactivity/" + }, + { + "type": "link", + "category": 1, + "text": "1鏈9鏃 5鐐瑰仠鏈烘洿鏂板叕鍛", + "link": "https://dnf.qq.com/webplat/info/news_version3/119/495/498/m21449/202601/980616.shtml" + }, + { + "type": "link", + "category": 2, + "text": "DNF鍚у弻绂忓埄鏉ヨ锛佹劅鏌撲箣鍦版寫鎴樺拰鐩栨ゼ浜掑姩锛7000Q甯佺媯閫佷笉鍋滐紒", + "link": "https://dnf.qq.com/webplat/info/news_version3/119/495/496/m22999/202512/979722.shtml" + }, + { + "type": "link", + "category": 1, + "text": "鍏充簬1鏈8鏃ュ垵濮嬪寲娆箰浠e竵鍒哥殑鍏憡", + "link": "https://dnf.qq.com/webplat/info/news_version3/119/495/498/m21449/202512/980292.shtml" + } + ], + "scriptMd5": "", + "pluginsMd5": [], + "updateUrl": "www.baidu.com" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/GM渚挎嵎鎿嶄綔鍙/GM渚挎嵎鎿嶄綔鍙.nut b/绀轰緥椤圭洰/GM渚挎嵎鎿嶄綔鍙/GM渚挎嵎鎿嶄綔鍙.nut new file mode 100644 index 0000000..08e8dbd --- /dev/null +++ b/绀轰緥椤圭洰/GM渚挎嵎鎿嶄綔鍙/GM渚挎嵎鎿嶄綔鍙.nut @@ -0,0 +1,145 @@ +function _Dps_GmConvenienceConsole_Logic_() { + local Config = GlobalConfig.Get("GM渚挎嵎鎿嶄綔鍙癬Lenheart.json"); + + + Gm_InputFunc_Handle[Config["鍙戦侀亾鍏锋寚浠"]] <- function(SUser, CmdString) { + local count = -1; + local pos = 0; + local handler = []; + do { + local start = pos; + pos = CmdString.find(" ", pos + 1); + if (pos != null) { + handler.append(CmdString.slice(start + 1, pos)); + } else + handler.append(CmdString.slice(start + 1)); + count = count + 1 + } while (pos != null) + + //寰楀埌绌烘牸鏁伴噺 + if (count == 1) { + local Ret = SUser.GiveItem(handler[1].tointeger(), 1); + if (!Ret) SUser.SendNotiPacketMessage("鍙戦佸け璐ヨ儗鍖呮槸涓嶆槸婊′簡", 8); + } else if (count == 2) { + local Ret = SUser.GiveItem(handler[1].tointeger(), handler[2].tointeger()); + if (!Ret) SUser.SendNotiPacketMessage("鍙戦佸け璐ヨ儗鍖呮槸涓嶆槸婊′簡", 8); + } + } + + Gm_InputFunc_Handle[Config["杞亴瑙夐啋鎸囦护"]] <- function(SUser, CmdString) { + local count = -1; + local pos = 0; + local handler = []; + do { + local start = pos; + pos = CmdString.find(" ", pos + 1); + if (pos != null) { + handler.append(CmdString.slice(start + 1, pos)); + } else + handler.append(CmdString.slice(start + 1)); + count = count + 1 + } while (pos != null) + + //寰楀埌绌烘牸鏁伴噺 + if (count == 1) { + SUser.ChangeGrowType(handler[1].tointeger(), 0); + SUser.SendNotiPacket(0, 2, 0); + SUser.InitSkillW(handler[1].tointeger(), 0); + } else if (count == 2) { + SUser.ChangeGrowType(handler[1].tointeger(), handler[2].tointeger()); + SUser.SendNotiPacket(0, 2, 0); + SUser.InitSkillW(handler[1].tointeger(), handler[2].tointeger()); + } + } + + + Gm_InputFunc_Handle[Config["瀹屾垚浠诲姟鎸囦护"]] <- function(SUser, CmdString) { + local count = -1; + local pos = 0; + local handler = []; + do { + local start = pos; + pos = CmdString.find(" ", pos + 1); + if (pos != null) { + handler.append(CmdString.slice(start + 1, pos)); + } else + handler.append(CmdString.slice(start + 1)); + count = count + 1 + } while (pos != null) + + //寰楀埌绌烘牸鏁伴噺 + if (count == 1) { + SUser.ClearQuest_Gm(handler[1].tointeger()); + } + } + + Gm_InputFunc_Handle[Config["璁剧疆绛夌骇鎸囦护"]] <- function(SUser, CmdString) { + local count = -1; + local pos = 0; + local handler = []; + do { + local start = pos; + pos = CmdString.find(" ", pos + 1); + if (pos != null) { + handler.append(CmdString.slice(start + 1, pos)); + } else + handler.append(CmdString.slice(start + 1)); + count = count + 1 + } while (pos != null) + + //寰楀埌绌烘牸鏁伴噺 + if (count == 1) { + SUser.SetCharacLevel(handler[1].tointeger()); + } + } + + //鑾峰彇浣嶇疆淇℃伅 + Gm_InputFunc_Handle[Config["鑾峰彇浣嶇疆鎸囦护"]] <- function(SUser, CmdString) { + local Location = SUser.GetLocation(); + SUser.SendNotiPacketMessage("X鍧愭爣: " + Location.Pos.X, 8); + SUser.SendNotiPacketMessage("Y鍧愭爣: " + Location.Pos.Y, 8); + SUser.SendNotiPacketMessage("鍩庨晣缂栧彿: " + Location.Town, 8); + SUser.SendNotiPacketMessage("鍖哄煙缂栧彿: " + Location.Area, 8); + }; + + //韪汉涓嬬嚎 + Gm_InputFunc_Handle[Config["韪㈢帺瀹朵笅绾挎寚浠"]] <- function(SUser, CmdString) { + local count = -1; + local pos = 0; + local handler = []; + do { + local start = pos; + pos = CmdString.find(" ", pos + 1); + if (pos != null) { + handler.append(CmdString.slice(start + 1, pos)); + } else + handler.append(CmdString.slice(start + 1)); + count = count + 1 + } while (pos != null) + + //寰楀埌绌烘牸鏁伴噺 + if (count == 1) { + local TUser = World.GetUserByName(handler[1]); + if(TUser)TUser.Kick(); + } + }; +} + + + +function _Dps_GmConvenienceConsole_Main_() { + _Dps_GmConvenienceConsole_Logic_(); +} + +function _Dps_GmConvenienceConsole_Main_Reload_(OldConfig) { + + foreach (Key,Value in OldConfig) { + try { + Gm_InputFunc_Handle.rawdelete(Key); + } catch (exception){ + + } + } + + _Dps_GmConvenienceConsole_Logic_(); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/GM渚挎嵎鎿嶄綔鍙/GM渚挎嵎鎿嶄綔鍙癬Lenheart.json b/绀轰緥椤圭洰/GM渚挎嵎鎿嶄綔鍙/GM渚挎嵎鎿嶄綔鍙癬Lenheart.json new file mode 100644 index 0000000..e981254 --- /dev/null +++ b/绀轰緥椤圭洰/GM渚挎嵎鎿嶄綔鍙/GM渚挎嵎鎿嶄綔鍙癬Lenheart.json @@ -0,0 +1,16 @@ +{ + "鍙戦侀亾鍏锋寚浠": "GiveItem", + "杞亴瑙夐啋鎸囦护": "GrowType", + "瀹屾垚浠诲姟鎸囦护": "MakeQuest", + "璁剧疆绛夌骇鎸囦护": "SetLevel", + "鑾峰彇浣嶇疆鎸囦护": "GetLocation", + "韪㈢帺瀹朵笅绾挎寚浠": "KickPlayer", + + "鍙戦侀亾鍏锋寚浠や緥瀛": "褰撴湁涓涓┖鏍兼椂璺熼亾鍏风紪鍙 褰撴湁涓や釜绌烘牸鏃 璺熼亾鍏风紪鍙峰拰鍙戦佹暟閲 渚: '//GiveItem 3037' '//GiveItem 3037 100'", + "杞亴瑙夐啋鎸囦护渚嬪瓙": "褰撴湁涓涓┖鏍兼椂璺熻浆鑱岃亴涓 褰撴湁涓や釜绌烘牸鏃 璺熻浆鑱岃亴涓氬拰鏄惁瑙夐啋 渚: '//GrowType 1' '//GrowType 1 1'", + "瀹屾垚浠诲姟鎸囦护渚嬪瓙": "褰撴湁涓涓┖鏍兼椂璺熶换鍔$紪鍙 渚: '//MakeQuest 1'", + "璁剧疆绛夌骇鎸囦护渚嬪瓙": "褰撴湁涓涓┖鏍兼椂璺熻瀹氱瓑绾 渚: '//SetLevel 100'", + "鑾峰彇浣嶇疆鎸囦护渚嬪瓙": "鏃犵壒娈婄敤娉 '//GetLocation'", + "韪㈢帺瀹朵笅绾挎寚浠や緥瀛": "褰撴湁涓涓┖鏍兼椂璺熸兂瑕佽涪闄ょ殑鐜╁鍚嶅瓧 渚: '//KickPlayer 鍊炬唱瀵'", + "璇存槑" : "鎵鏈夋寚浠ら兘鍙洿鏀 鐩稿浜庣殑瑙﹀彂鏂瑰紡杈撳叆鑷繁璁惧畾鐨勬寚浠ゅ嵆鍙" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/GM渚挎嵎鎿嶄綔鍙/Proj.ifo b/绀轰緥椤圭洰/GM渚挎嵎鎿嶄綔鍙/Proj.ifo new file mode 100644 index 0000000..6be3718 --- /dev/null +++ b/绀轰緥椤圭洰/GM渚挎嵎鎿嶄綔鍙/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "GM渚挎嵎鎿嶄綔鍙", + "ProjectDescribe": "鏈」鐩彁渚涗簡璁稿GM鐨勪究鎹锋搷浣 鏂逛究骞虫椂璋冭瘯鎴栧啓浠g爜 \n杈撳叆'//' + 璁惧畾鐨勬寚浠ゅ嵆鍙墽琛岄昏緫 ", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.0, + "ProjectConfig": "GM渚挎嵎鎿嶄綔鍙癬Lenheart.json", + "ProjectFiles": [ + "GM渚挎嵎鎿嶄綔鍙.nut" + ], + "ProjectRunFunc": "_Dps_GmConvenienceConsole_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/NPC鍟嗗簵闄愯喘/NPC鍟嗗簵闄愯喘.nut b/绀轰緥椤圭洰/NPC鍟嗗簵闄愯喘/NPC鍟嗗簵闄愯喘.nut new file mode 100644 index 0000000..1112d9c --- /dev/null +++ b/绀轰緥椤圭洰/NPC鍟嗗簵闄愯喘/NPC鍟嗗簵闄愯喘.nut @@ -0,0 +1,290 @@ +g_ShopLimitCache <- {}; + +class _Shop_Limit_Bynangua { + function get_trade_time() { + local currentDate = date() + local year = currentDate.year + local month = currentDate.month + 1 + local day = currentDate.day + local hour = currentDate.hour + local minute = currentDate.min + local second = currentDate.sec + return format("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second) + } + + // 璁$畻涓嬩釜鏈堢殑1鍙锋棭涓6鐐 + function GetFirstOfNextMonth() { + local currentDate = date() + local year = currentDate.year + local month = currentDate.month + 2 // +2鏄洜涓簃onth鏄粠0寮濮嬬殑锛屼笖瑕佺畻涓嬩釜鏈 + local day = 1 + local hour = 6 + local minute = 0 + local second = 0 + return format("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second) + } + + // 璁$畻涓嬪懆涓鏃╀笂6鐐 + function GetNextMonday() { + local currentDate = date() + local day = currentDate.wday // 0鏄懆鏃ワ紝1-6鏄懆涓鍒板懆鍏 + local diff = (day == 0) ? 1 : (8 - day) + currentDate.day += diff + local year = currentDate.year + local month = currentDate.month + 1 + local day = currentDate.day + local hour = 6 + local minute = 0 + local second = 0 + return format("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second) + } + + // 璁$畻绗簩澶╂棭涓6鐐 + function GetSixAMNextDay() { + local currentDate = date() + local year = currentDate.year + local month = currentDate.month + 1 + local day = currentDate.day + 1 + local hour = 6 + local minute = 0 + local second = 0 + return format("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second) + } + + // 鑾峰彇鍒锋柊鏃堕棿 + function GetRefreshTime(refresh_month, refresh_weeks, refresh_days) { + if (refresh_month == 1) { + return GetFirstOfNextMonth() + } else if (refresh_weeks == 1) { + return GetNextMonday() + } else if (refresh_days == 1) { + return GetSixAMNextDay() + } + return null + } + + function HandlePurchase(SUser, item_id, item_shop_id, item_info, item_cnt) { + local charac_no = SUser.GetCID(); + local cache_key = charac_no + "_" + item_id + "_" + item_shop_id; + + if (g_ShopLimitCache.rawin(cache_key)) { + local cache_data = g_ShopLimitCache[cache_key]; + local buy_count = cache_data.buy_count; + local refresh_time = cache_data.refresh_time; + local current_time = get_trade_time(); + + if (current_time >= refresh_time) { + if (item_cnt > item_info[1]) { + SUser.SendNotiPacketMessage("璐拱澶辫触锛屽彲璐拱鏁伴噺鍓╀綑 " + item_info[1] + " 涓", 8); + return true; + } + + local new_refresh_time = GetRefreshTime(item_info[2], item_info[3], item_info[4]); + g_ShopLimitCache[cache_key] <- { + buy_count = item_cnt, + refresh_time = new_refresh_time + }; + + updateDatabaseAsync(charac_no, item_id, item_shop_id, item_cnt, new_refresh_time); + } else { + local remaining = item_info[1] - buy_count; + if (item_cnt > remaining) { + if (remaining == 0) { + local refresh_msg = ""; + if (item_info[2] == 1) { // 鏈堝埛鏂 + refresh_msg = "姣忔湀涓鏃ヤ笂鍗堝叚鐐"; + } else if (item_info[3] == 1) { // 鍛ㄥ埛鏂 + refresh_msg = "姣忓懆涓鏃ヤ笂鍗堝叚鐐"; + } else if (item_info[4] == 1) { // 鏃ュ埛鏂 + refresh_msg = "姣忔棩涓鏃ヤ笂鍗堝叚鐐"; + } + SUser.SendNotiPacketMessage("褰撳墠鍟嗗搧宸插敭缃勶紝灏嗗湪" + refresh_msg + "鍒锋柊", 8); + } else { + SUser.SendNotiPacketMessage("璐拱澶辫触锛屽彲璐拱鏁伴噺鍓╀綑 " + remaining + " 涓", 8); + } + return true; + } + + g_ShopLimitCache[cache_key] <- { + buy_count = buy_count + item_cnt, + refresh_time = refresh_time + }; + + updateDatabaseAsync(charac_no, item_id, item_shop_id, buy_count + item_cnt, refresh_time); + } + return false; + } + + local SqlObj = MysqlPool.GetInstance().GetConnect(); + local query = "SELECT id, charac_no, item_id, buy_count, item_shop, refresh_time FROM DP_S.restrict_npc_shop_buy WHERE charac_no=" + charac_no + " AND item_id=" + item_id + " AND item_shop=" + item_shop_id; + local column_type_list = ["int", "int", "int", "int", "int", "string"]; + local result = SqlObj.Select(query, column_type_list); + MysqlPool.GetInstance().PutConnect(SqlObj); + + if (result.len() == 0) { + if (item_cnt > item_info[1]) { + SUser.SendNotiPacketMessage("璐拱澶辫触锛屽彲璐拱鏁伴噺鍓╀綑 " + item_info[1] + " 涓", 8); + return true; + } + + local refresh_time = GetRefreshTime(item_info[2], item_info[3], item_info[4]); + + g_ShopLimitCache[cache_key] <- { + buy_count = item_cnt, + refresh_time = refresh_time + }; + + updateDatabaseAsync(charac_no, item_id, item_shop_id, item_cnt, refresh_time); + } else { + local buy_count = result[0][3]; + local refresh_time = result[0][5]; + local current_time = get_trade_time(); + + g_ShopLimitCache[cache_key] <- { + buy_count = buy_count, + refresh_time = refresh_time + }; + + if (current_time >= refresh_time) { + if (item_cnt > item_info[1]) { + SUser.SendNotiPacketMessage("璐拱澶辫触锛屽彲璐拱鏁伴噺鍓╀綑 " + item_info[1] + " 涓", 8); + return true; + } + + local new_refresh_time = GetRefreshTime(item_info[2], item_info[3], item_info[4]); + g_ShopLimitCache[cache_key] <- { + buy_count = item_cnt, + refresh_time = new_refresh_time + }; + + updateDatabaseAsync(charac_no, item_id, item_shop_id, item_cnt, new_refresh_time); + } else { + local remaining = item_info[1] - buy_count; + if (item_cnt > remaining) { + if (remaining == 0) { + local refresh_msg = ""; + if (item_info[2] == 1) { // 鏈堝埛鏂 + refresh_msg = "姣忔湀涓鏃ヤ笂鍗堝叚鐐"; + } else if (item_info[3] == 1) { // 鍛ㄥ埛鏂 + refresh_msg = "姣忓懆涓鏃ヤ笂鍗堝叚鐐"; + } else if (item_info[4] == 1) { // 鏃ュ埛鏂 + refresh_msg = "姣忔棩涓鏃ヤ笂鍗堝叚鐐"; + } + SUser.SendNotiPacketMessage("褰撳墠鍟嗗搧宸插敭缃勶紝灏嗗湪" + refresh_msg + "鍒锋柊", 8); + } else { + SUser.SendNotiPacketMessage("璐拱澶辫触锛屽彲璐拱鏁伴噺鍓╀綑 " + remaining + " 涓", 8); + } + return true; + } + + g_ShopLimitCache[cache_key] <- { + buy_count = buy_count + item_cnt, + refresh_time = refresh_time + }; + + updateDatabaseAsync(charac_no, item_id, item_shop_id, buy_count + item_cnt, refresh_time); + } + } + return false; + } +} + +// 鏇存柊缂撳瓨鍒版暟鎹簱 +function updateDatabaseAsync(charac_no, item_id, item_shop_id, buy_count, refresh_time) { + local SqlObj = MysqlPool.GetInstance().GetConnect(); + // 浣跨敤 ON DUPLICATE KEY UPDATE 鏉ユ洿鏂板凡瀛樺湪鐨勮褰 + local query = "INSERT INTO DP_S.restrict_npc_shop_buy (charac_no, item_id, buy_count, item_shop, refresh_time) " + + "VALUES (" + charac_no + ", " + item_id + ", " + buy_count + ", " + item_shop_id + ", '" + refresh_time + "') " + + "ON DUPLICATE KEY UPDATE buy_count = VALUES(buy_count), refresh_time = VALUES(refresh_time)"; + SqlObj.Select(query, []); + MysqlPool.GetInstance().PutConnect(SqlObj); +} + +// 鏈嶅姟鍣ㄥ惎鍔ㄦ椂鍔犺浇缂撳瓨 +function loadShopLimitCache() { + local SqlObj = MysqlPool.GetInstance().GetConnect(); + local query = "SELECT charac_no, item_id, item_shop, buy_count, refresh_time FROM DP_S.restrict_npc_shop_buy"; + local column_type_list = ["int", "int", "int", "int", "string"]; + local result = SqlObj.Select(query, column_type_list); + MysqlPool.GetInstance().PutConnect(SqlObj); + + foreach(row in result) { + local cache_key = row[0] + "_" + row[1] + "_" + row[2]; + g_ShopLimitCache[cache_key] <- { + buy_count = row[3], + refresh_time = row[4] + }; + } +} + +// 鏈嶅姟鍣ㄥ叧闂椂淇濆瓨缂撳瓨 +Cb_Server_Close_Enter_Func.ShopLimitSave <- function(arg) { + foreach(cache_key, data in g_ShopLimitCache) { + local parts = split(cache_key, "_"); + local charac_no = parts[0].tointeger(); + local item_id = parts[1].tointeger(); + local item_shop = parts[2].tointeger(); + updateDatabaseAsync(charac_no, item_id, item_shop, data.buy_count, data.refresh_time); + } + g_ShopLimitCache <- {}; +} + +function _Dps_Shop_Limit_Main_() { + CreateShopLimitTable(); + loadShopLimitCache(); + Cb_BuyItem_check_error_Leave_Func.Shop_Limit_ByNangua <- function(args) { + local Config = GlobalConfig.Get("NPC鍟嗗簵闄愯喘閰嶇疆_Nangua.json"); + local shop_limit_config = Config["鍟嗗簵闄愯喘閰嶇疆"]; + local is_buy = false; + local SUser = User(args[1]); + local msg_base = args[2]; + local Item_id = NativePointer(msg_base).add(13).readU32(); + local item_shop = NativePointer(msg_base).add(21).readU32(); + local item_cnt = NativePointer(msg_base).add(17).readU32(); + local item_shop_id = item_shop.tostring(); + if (item_shop_id in shop_limit_config) { + local items_list = shop_limit_config[item_shop_id]; + foreach(item_info in items_list) { + if (item_info[0] == Item_id) { + is_buy = _Shop_Limit_Bynangua.HandlePurchase(SUser, Item_id, item_shop, item_info, item_cnt); + break; + } + } + } + if (is_buy) { + return 19; + } + } +} + +function CreateShopLimitTable() { + local Config = GlobalConfig.Get("NPC鍟嗗簵闄愯喘閰嶇疆_Nangua.json"); + local PoolObj = MysqlPool.GetInstance(); + local Ip = Config["鏁版嵁搴揑P 涓嶆槸澶栫疆鏁版嵁搴撲笉瑕佹洿鏀"]; + local Port = Config["鏁版嵁搴撶鍙 涓嶆噦涓嶈鏇存敼"]; + local DbName = Config["鏁版嵁搴撶敤鎴峰悕 鏈湴鐢ㄦ埛鍚嶄笉鎳備笉瑕佹洿鏀"]; + local Password = Config["鏁版嵁搴撳瘑鐮 鏈湴瀵嗙爜涓嶆噦涓嶈鏇存敼"]; + + PoolObj.SetBaseConfiguration(Ip, Port, DbName, Password); + PoolObj.PoolSize = 10; + PoolObj.Init(); + + // 寤哄簱寤鸿〃SQL + local CreateSql1 = "create database if not exists DP_S default charset utf8;"; + local CreateSql2 = "CREATE TABLE IF NOT EXISTS DP_S.restrict_npc_shop_buy (" + + "id int(11) AUTO_INCREMENT, " + + "charac_no int(11) NOT NULL, " + + "item_id int(11) NOT NULL, " + + "buy_count int(11) NOT NULL, " + + "item_shop int(11) NOT NULL, " + + "refresh_time varchar(255) NOT NULL, " + + "PRIMARY KEY (id), " + + "UNIQUE KEY unique_purchase (charac_no, item_id, item_shop)" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8;"; + + // 鎵цSQL + local SqlObj = MysqlPool.GetInstance().GetConnect(); + SqlObj.Exec_Sql(CreateSql1); + SqlObj.Exec_Sql(CreateSql2); + MysqlPool.GetInstance().PutConnect(SqlObj); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/NPC鍟嗗簵闄愯喘/NPC鍟嗗簵闄愯喘閰嶇疆_Nangua.json b/绀轰緥椤圭洰/NPC鍟嗗簵闄愯喘/NPC鍟嗗簵闄愯喘閰嶇疆_Nangua.json new file mode 100644 index 0000000..fae9dbc --- /dev/null +++ b/绀轰緥椤圭洰/NPC鍟嗗簵闄愯喘/NPC鍟嗗簵闄愯喘閰嶇疆_Nangua.json @@ -0,0 +1,20 @@ +{ + "鎻愮ず1": "15浠h〃鍟嗗簵NPC缂栧彿[閬撳叿ID,闄愯喘鏁伴噺,姣忔湀涓鍙峰埛鏂,鍛ㄤ竴鍒锋柊,姣忓ぉ涓婂崍鍏偣鍒锋柊]", + "鎻愮ず2":"鏈堝懆鏃ュ湪瀵瑰簲鐨勪綅缃~1浠h〃鐢熸晥濡俒2680313, 10, 0, 0, 1]浠h〃閬撳叿ID涓2680313鐨勯亾鍏峰湪15鍙峰晢搴楅檺璐10涓,姣忓ぉ涓婂崍鍏偣鍒锋柊", + "鎻愮ず3":"鏈堝懆鏃ュ湪瀵瑰簲鐨勪綅缃~1浠h〃鐢熸晥濡俒2680313, 10, 0, 1, 0]浠h〃閬撳叿ID涓2680313鐨勯亾鍏峰湪15鍙峰晢搴楅檺璐10涓,姣忓懆涓涓婂崍鍏偣鍒锋柊", + "鎻愮ず4":"鏈堝懆鏃ュ湪瀵瑰簲鐨勪綅缃~1浠h〃鐢熸晥濡俒2680313, 10, 1, 0, 0]浠h〃閬撳叿ID涓2680313鐨勯亾鍏峰湪15鍙峰晢搴楅檺璐10涓,姣忔湀涓鍙蜂笂鍗堝叚鐐瑰埛鏂", + "鍟嗗簵闄愯喘閰嶇疆": { + "15": [ + [2680313, 10, 0, 0, 1], + [326211, 10, 0, 0, 1] + ], + "16": [ + [2680314, 10, 0, 0, 1], + [326211, 10, 0, 0, 1] + ] + }, + "鏁版嵁搴揑P 涓嶆槸澶栫疆鏁版嵁搴撲笉瑕佹洿鏀": "127.0.0.1", + "鏁版嵁搴撶鍙 涓嶆噦涓嶈鏇存敼": 3306, + "鏁版嵁搴撶敤鎴峰悕 鏈湴鐢ㄦ埛鍚嶄笉鎳備笉瑕佹洿鏀": "game", + "鏁版嵁搴撳瘑鐮 鏈湴瀵嗙爜涓嶆噦涓嶈鏇存敼": "uu5!^%jg" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/NPC鍟嗗簵闄愯喘/Proj.ifo b/绀轰緥椤圭洰/NPC鍟嗗簵闄愯喘/Proj.ifo new file mode 100644 index 0000000..418fc52 --- /dev/null +++ b/绀轰緥椤圭洰/NPC鍟嗗簵闄愯喘/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "NPC鍟嗗簵闄愯喘", + "ProjectDescribe": "鎸囧畾NPC鍟嗗簵鐨勬寚瀹氱墿鍝佺殑鍙喘涔版暟閲忥紝鍙涓烘瘡鏃ャ佹瘡鍛ㄤ竴銆佹瘡鏈1鍙风殑涓婂崍鍏偣鍒锋柊", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.0, + "ProjectConfig": "NPC鍟嗗簵闄愯喘閰嶇疆_Nangua.json", + "ProjectFiles": [ + "NPC鍟嗗簵闄愯喘.nut" + ], + "ProjectRunFunc": "_Dps_Shop_Limit_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/SP_TP灞炴х煶杩旇繕/Proj.ifo b/绀轰緥椤圭洰/SP_TP灞炴х煶杩旇繕/Proj.ifo new file mode 100644 index 0000000..9f83f25 --- /dev/null +++ b/绀轰緥椤圭洰/SP_TP灞炴х煶杩旇繕/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "SP_TP灞炴х煶杩旇繕", + "ProjectDescribe": "鍒濆鍖栦互鍙婅浆鑱屾椂杩旇繕浣跨敤杩囩殑sp/tp浠ュ強灞炴х煶,涓嶆槸鐩存帴杩旇繕灞炴х煶鎴栬匰P/TP涔﹁屾槸鐩存帴澧炲姞,浣跨敤姝ら」鐩墠澧炲姞鐨剆p/tp灞炴х煶閮戒笉浼氳繑杩橈紝浣跨敤鍚庢墠浼氬鍔犺褰曚粠鑰岃繘琛岃繑杩", + "ProjectAuthor": "灏忓崡鐡", + "ProjectVersion": 1.2, + "ProjectConfig": "SP_TP灞炴х煶杩旇繕_Nangua.json", + "ProjectFiles": [ + "SP_TP灞炴х煶杩旇繕.nut" + ], + "ProjectRunFunc": "_Dps_SPTP_Attributes_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/SP_TP灞炴х煶杩旇繕/SP_TP灞炴х煶杩旇繕.nut b/绀轰緥椤圭洰/SP_TP灞炴х煶杩旇繕/SP_TP灞炴х煶杩旇繕.nut new file mode 100644 index 0000000..fe172ef --- /dev/null +++ b/绀轰緥椤圭洰/SP_TP灞炴х煶杩旇繕/SP_TP灞炴х煶杩旇繕.nut @@ -0,0 +1,309 @@ +// 鍒涘缓鏁版嵁搴撳拰琛 +function createAttributesTable() { + local Config = GlobalConfig.Get("SP_TP灞炴х煶杩旇繕_Nangua.json"); + local PoolObj = MysqlPool.GetInstance(); + local Ip = Config["鏁版嵁搴揑P 涓嶆槸澶栫疆鏁版嵁搴撲笉瑕佹洿鏀"]; + local Port = Config["鏁版嵁搴撶鍙 涓嶆噦涓嶈鏇存敼"]; + local DbName = Config["鏁版嵁搴撶敤鎴峰悕 鏈湴鐢ㄦ埛鍚嶄笉鎳備笉瑕佹洿鏀"]; + local Password = Config["鏁版嵁搴撳瘑鐮 鏈湴瀵嗙爜涓嶆噦涓嶈鏇存敼"]; + + PoolObj.SetBaseConfiguration(Ip, Port, DbName, Password); + PoolObj.PoolSize = 10; + PoolObj.Init(); + + local CreateSql1 = "create database if not exists DP_S default charset utf8;"; + local CreateSql2 = "CREATE TABLE IF NOT EXISTS DP_S.charac_attributes (" + + "id int(11) AUTO_INCREMENT, " + + "charac_no int(11) NOT NULL, " + + "item_id int(11) DEFAULT NULL, " + + "type int(11) DEFAULT NULL, " + + "guildExpBook int(11) DEFAULT NULL, " + + "total_sp int(11) DEFAULT 0, " + + "total_tp int(11) DEFAULT 0, " + + "PRIMARY KEY (id), " + + "UNIQUE KEY unique_char_item (charac_no, item_id)" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8;"; + + local SqlObj = MysqlPool.GetInstance().GetConnect(); + SqlObj.Exec_Sql(CreateSql1); + SqlObj.Exec_Sql(CreateSql2); + MysqlPool.GetInstance().PutConnect(SqlObj); +} + +// 鍒濆鍖栨妧鑳芥椂杩旇繕SP/TP +Cb_SkillInit_process_skill_Leave_Func.SkillInitByNangua <- function(args) { + local SUser = User(args[1]); + local Skill = SUser.GetSkillW(); + local charac_no = SUser.GetCID(); + + local SqlObj = MysqlPool.GetInstance().GetConnect(); + local query = "SELECT IFNULL(total_sp, 0) as total_sp, IFNULL(total_tp, 0) as total_tp " + + "FROM DP_S.charac_attributes WHERE charac_no = " + charac_no + " AND item_id IS NULL"; + + local result = SqlObj.Select(query, ["int", "int"]); + MysqlPool.GetInstance().PutConnect(SqlObj); + + local total_sp = 0; + local total_tp = 0; + if (result.len() > 0) { + total_sp = result[0][0]; + total_tp = result[0][1]; + } + + local SkillTreeIndex = Sq_CallFunc(S_Ptr("0x0822f33c"), "int", ["pointer"], SUser.C_Object); + local remain_sp_0 = Sq_CallFunc(S_Ptr("0x08603528"), "int", ["pointer", "int"], Skill, 0); + local remain_sp_1 = Sq_CallFunc(S_Ptr("0x08603528"), "int", ["pointer", "int"], Skill, 1); + local remain_tp_0 = Sq_CallFunc(S_Ptr("0x086035f2"), "int", ["pointer", "int"], Skill, 2); + local remain_tp_1 = Sq_CallFunc(S_Ptr("0x086035f2"), "int", ["pointer", "int"], Skill, 3); + + if (SkillTreeIndex == -1 || SkillTreeIndex == 0) { + Sq_CallFunc(S_Ptr("0x086034f8"), "int", ["pointer", "int", "int"], Skill, remain_sp_0 + total_sp, 0); + Sq_CallFunc(S_Ptr("0x08603590"), "int", ["pointer", "int", "int"], Skill, remain_tp_0 + total_tp, 2); + } + if (SkillTreeIndex == 1) { + Sq_CallFunc(S_Ptr("0x086034f8"), "int", ["pointer", "int", "int"], Skill, remain_sp_1 + total_sp, 1); + Sq_CallFunc(S_Ptr("0x08603590"), "int", ["pointer", "int", "int"], Skill, remain_tp_1 + total_tp, 3); + } +} + +// 杞亴鏃惰繑杩楽P/TP鍜屽睘鎬х煶 +Cb_User_set_grow_Leave_Func.changegrowByNangua <- function(args) { + local SUser = User(args[0]); + local grow = args[2]; + local charac_no = SUser.GetCID(); + local Skill = SUser.GetSkillW(); + + local SqlObj = MysqlPool.GetInstance().GetConnect(); + + // 鏌ヨSP/TP + local querySpTp = "SELECT IFNULL(total_sp, 0) as total_sp, IFNULL(total_tp, 0) as total_tp " + + "FROM DP_S.charac_attributes WHERE charac_no = " + charac_no + " AND item_id IS NULL"; + local spTpResult = SqlObj.Select(querySpTp, ["int", "int"]); + + local total_sp = 0; + local total_tp = 0; + if (spTpResult.len() > 0) { + total_sp = spTpResult[0][0]; + total_tp = spTpResult[0][1]; + } + + // 鏍规嵁杞亴绫诲瀷鍐冲畾鏄惁鏌ヨ灞炴х煶 + local attrResult = []; + if (grow == 0) { + local queryAttr = "SELECT type, guildExpBook FROM DP_S.charac_attributes " + + "WHERE charac_no = " + charac_no + " AND item_id IS NOT NULL"; + attrResult = SqlObj.Select(queryAttr, ["int", "int"]); + } + + MysqlPool.GetInstance().PutConnect(SqlObj); + + // 澶勭悊SP/TP + local SkillTreeIndex = Sq_CallFunc(S_Ptr("0x0822f33c"), "int", ["pointer"], SUser.C_Object); + local remain_sp_0 = Sq_CallFunc(S_Ptr("0x08603528"), "int", ["pointer", "int"], Skill, 0); + local remain_sp_1 = Sq_CallFunc(S_Ptr("0x08603528"), "int", ["pointer", "int"], Skill, 1); + local remain_tp_0 = Sq_CallFunc(S_Ptr("0x086035f2"), "int", ["pointer", "int"], Skill, 2); + local remain_tp_1 = Sq_CallFunc(S_Ptr("0x086035f2"), "int", ["pointer", "int"], Skill, 3); + + if (SkillTreeIndex == -1) { + Sq_CallFunc(S_Ptr("0x086034f8"), "int", ["pointer", "int", "int"], Skill, remain_sp_0 + total_sp, 0); + Sq_CallFunc(S_Ptr("0x08603590"), "int", ["pointer", "int", "int"], Skill, remain_tp_0 + total_tp, 2); + Sq_CallFunc(S_Ptr("0x866C46A"), "void", ["pointer"], SUser.C_Object); + } + if (SkillTreeIndex == 0 || SkillTreeIndex == 1) { + Sq_CallFunc(S_Ptr("0x086034f8"), "int", ["pointer", "int", "int"], Skill, remain_sp_0 + total_sp, 0); + Sq_CallFunc(S_Ptr("0x086034f8"), "int", ["pointer", "int", "int"], Skill, remain_sp_1 + total_sp, 1); + Sq_CallFunc(S_Ptr("0x08603590"), "int", ["pointer", "int", "int"], Skill, remain_tp_0 + total_tp, 2); + Sq_CallFunc(S_Ptr("0x08603590"), "int", ["pointer", "int", "int"], Skill, remain_tp_1 + total_tp, 3); + Sq_CallFunc(S_Ptr("0x866C46A"), "void", ["pointer"], SUser.C_Object); + } + + // 澶勭悊灞炴х煶锛堜粎褰 grow == 0 鏃讹級 + if (grow == 0 && attrResult.len() > 0) { + local userAddInfo = Sq_CallFunc(S_Ptr("0x086960d8"), "pointer", ["pointer"], SUser.C_Object); + + foreach (idx, row in attrResult) { + local type = row[0]; + local guildExpBook = row[1]; + + switch (type) { + case 2: + NativePointer(userAddInfo).writeU32(NativePointer(userAddInfo).readU32() + guildExpBook); + break; + case 3: + NativePointer(userAddInfo).add(4).writeU32(NativePointer(userAddInfo).add(4).readU32() + guildExpBook); + break; + case 4: + NativePointer(userAddInfo).add(8).writeU16(NativePointer(userAddInfo).add(8).readU16() + guildExpBook); + break; + case 5: + NativePointer(userAddInfo).add(10).writeU16(NativePointer(userAddInfo).add(10).readU16() + guildExpBook); + break; + case 6: + NativePointer(userAddInfo).add(12).writeU16(NativePointer(userAddInfo).add(12).readU16() + guildExpBook); + break; + case 7: + NativePointer(userAddInfo).add(14).writeU16(NativePointer(userAddInfo).add(14).readU16() + guildExpBook); + break; + case 8: + NativePointer(userAddInfo).add(66).writeU32(NativePointer(userAddInfo).add(66).readU32() + guildExpBook); + break; + case 9: + for (local j = 0; j < 4; j++) { + local offset = 2 * j * 8; + local ptr = NativePointer(userAddInfo).add(offset); + ptr.writeU16(ptr.readU16() + guildExpBook); + } + break; + } + + api_recover_attributes(SUser, type, guildExpBook, -1); + } + } +} + +// 浣跨敤閬撳叿鏃舵洿鏂版暟鎹簱 +Cb_User_increase_status_Enter_Func.UseItemByNangua <- function(args) { + local SUser = User(args[0]); + local Slot = args[1]; + local userItem = Memory.alloc(128); + local InvenObj = SUser.GetInven(); + if (!InvenObj) { + return; + } + + Sq_CallFunc(S_Ptr("0x084fb918"), "pointer", ["pointer", "pointer", "int", "int"], userItem.C_Object, InvenObj.C_Object, 1, Slot); + local item_id = NativePointer(userItem.C_Object).add(2).readU32(); + local charac_no = SUser.GetCID(); + + local SqlObj = MysqlPool.GetInstance().GetConnect(); + + // SP閬撳叿 + if (item_id == 1031) { + updateSPTP(SqlObj, charac_no, 5, false); + } else if (item_id == 1038) { + updateSPTP(SqlObj, charac_no, 20, false); + } + // TP閬撳叿 + else if (item_id == 1204) { + updateSPTP(SqlObj, charac_no, 1, true); + } else if (item_id == 1205) { + updateSPTP(SqlObj, charac_no, 5, true); + } + // 灞炴х煶 + else { + local type = -1; + local guildExpBook = 0; + + switch (item_id) { + case 1039: type = 4; guildExpBook = 50; break; + case 1040: type = 6; guildExpBook = 50; break; + case 1041: type = 5; guildExpBook = 50; break; + case 1042: type = 7; guildExpBook = 50; break; + case 1043: type = 2; guildExpBook = 250; break; + case 1044: type = 3; guildExpBook = 250; break; + case 1045: type = 8; guildExpBook = 10; break; + case 1046: type = 9; guildExpBook = 10; break; + } + + if (type != -1) { + local query = "INSERT INTO DP_S.charac_attributes (charac_no, item_id, type, guildExpBook) " + + "VALUES (" + charac_no + ", " + item_id + ", " + type + ", " + guildExpBook + ") " + + "ON DUPLICATE KEY UPDATE guildExpBook = guildExpBook + " + guildExpBook; + SqlObj.Select(query, []); + } + } + + MysqlPool.GetInstance().PutConnect(SqlObj); +} + +Cb_ChangeGrowType_Item_Leave_Func.ApplyAttributesByNangua <- function(args) { + local SUser = User(args[0]); + local slot = args[2]; + local charac_no = SUser.GetCID(); + + local userItem = Memory.alloc(128); + local InvenObj = SUser.GetInven(); + if (!InvenObj) return; + + Sq_CallFunc(S_Ptr("0x084fb918"), "pointer", ["pointer", "pointer", "int", "int"], userItem.C_Object, InvenObj.C_Object, 1, slot); + local item_id = NativePointer(userItem.C_Object).add(2).readU32(); + if (!(item_id == 2660779 || item_id == 2660702)) return; + + local SqlObj = MysqlPool.GetInstance().GetConnect(); + local query = "SELECT type, guildExpBook FROM DP_S.charac_attributes " + + "WHERE charac_no = " + charac_no + " AND item_id IS NOT NULL"; + local attrResult = SqlObj.Select(query, ["int", "int"]); + MysqlPool.GetInstance().PutConnect(SqlObj); + + if (attrResult.len() == 0) return; + + local userAddInfo = Sq_CallFunc(S_Ptr("0x086960d8"), "pointer", ["pointer"], SUser.C_Object); + + foreach (row in attrResult) { + local type = row[0]; + local guildExpBook = row[1]; + + switch (type) { + case 2: NativePointer(userAddInfo).writeU32(NativePointer(userAddInfo).readU32() + guildExpBook); break; + case 3: NativePointer(userAddInfo).add(4).writeU32(NativePointer(userAddInfo).add(4).readU32() + guildExpBook); break; + case 4: NativePointer(userAddInfo).add(8).writeU16(NativePointer(userAddInfo).add(8).readU16() + guildExpBook); break; + case 5: NativePointer(userAddInfo).add(10).writeU16(NativePointer(userAddInfo).add(10).readU16() + guildExpBook); break; + case 6: NativePointer(userAddInfo).add(12).writeU16(NativePointer(userAddInfo).add(12).readU16() + guildExpBook); break; + case 7: NativePointer(userAddInfo).add(14).writeU16(NativePointer(userAddInfo).add(14).readU16() + guildExpBook); break; + case 8: NativePointer(userAddInfo).add(66).writeU32(NativePointer(userAddInfo).add(66).readU32() + guildExpBook); break; + case 9: + for (local j = 0; j < 4; j++) { + local ptr = NativePointer(userAddInfo).add(2 * j * 8); + ptr.writeU16(ptr.readU16() + guildExpBook); + } + break; + } + + api_recover_attributes(SUser, type, guildExpBook, -1); + } +} + +// 鏇存柊SP/TP鍊 +function updateSPTP(SqlObj, charac_no, value, is_tp) { + local query = "SELECT id, total_sp, total_tp FROM DP_S.charac_attributes " + + "WHERE charac_no = " + charac_no + " AND item_id IS NULL"; + local result = SqlObj.Select(query, ["int", "int", "int"]); + + if (result.len() > 0) { + local current_sp = result[0][1]; + local current_tp = result[0][2]; + local new_sp = is_tp ? current_sp : (current_sp + value); + local new_tp = is_tp ? (current_tp + value) : current_tp; + + query = "UPDATE DP_S.charac_attributes " + + "SET total_sp = " + new_sp + ", total_tp = " + new_tp + " " + + "WHERE charac_no = " + charac_no + " AND item_id IS NULL"; + } else { + query = "INSERT INTO DP_S.charac_attributes (charac_no, total_sp, total_tp) " + + "VALUES (" + charac_no + ", " + + (is_tp ? "0" : value.tostring()) + ", " + + (is_tp ? value.tostring() : "0") + ")"; + } + + SqlObj.Select(query, []); +} + +// 鍙戝寘鏇存柊澧炲姞鐜╁灞炴 +function api_recover_attributes(SUser, type, guildExpBook, slof) { + local Pack = Packet(); + Pack.Put_Header(1, 32); + Pack.Put_Byte(1); + Pack.Put_Short(slof); + Pack.Put_Byte(type); + Pack.Put_Int(guildExpBook); + Pack.Put_Short(0); + Pack.Put_Short(0); + Pack.Finalize(true); + SUser.Send(Pack); + Pack.Delete(); +} + +// 涓诲嚱鏁 +function _Dps_SPTP_Attributes_Main_() { + createAttributesTable(); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/SP_TP灞炴х煶杩旇繕/SP_TP灞炴х煶杩旇繕_Nangua.json b/绀轰緥椤圭洰/SP_TP灞炴х煶杩旇繕/SP_TP灞炴х煶杩旇繕_Nangua.json new file mode 100644 index 0000000..702a348 --- /dev/null +++ b/绀轰緥椤圭洰/SP_TP灞炴х煶杩旇繕/SP_TP灞炴х煶杩旇繕_Nangua.json @@ -0,0 +1,7 @@ +{ + "鎻愮ず":"鎸傝浇鍚庡彧鏈夋柊浣跨敤鐨剆p,tp,灞炴х煶浼氳繑杩,涔嬪墠浣跨敤杩囩殑涓嶄細杩旇繕", + "鏁版嵁搴揑P 涓嶆槸澶栫疆鏁版嵁搴撲笉瑕佹洿鏀": "127.0.0.1", + "鏁版嵁搴撶鍙 涓嶆噦涓嶈鏇存敼": 3306, + "鏁版嵁搴撶敤鎴峰悕 鏈湴鐢ㄦ埛鍚嶄笉鎳備笉瑕佹洿鏀": "game", + "鏁版嵁搴撳瘑鐮 鏈湴瀵嗙爜涓嶆噦涓嶈鏇存敼": "uu5!^%jg" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/涓閿垎瑙e嵎/Proj.ifo b/绀轰緥椤圭洰/涓閿垎瑙e嵎/Proj.ifo new file mode 100644 index 0000000..39d7199 --- /dev/null +++ b/绀轰緥椤圭洰/涓閿垎瑙e嵎/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "涓閿垎瑙e嵎", + "ProjectDescribe": "浣跨敤閬撳叿灏嗛渶瑕佸垎瑙g殑瑁呭鍒嗚В锛屽鏈紑鍚壇鑱屼笟鍙婂紑鍚憜鎽婂垎瑙e垯璋冪敤璇洪】鍒嗚В鏈哄垎瑙", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.3, + "ProjectConfig": "涓閿垎瑙e嵎_Lenheart.json", + "ProjectFiles": [ + "涓閿垎瑙e嵎.nut" + ], + "ProjectRunFunc": "_Dps_OneClickDisassemblyOfRoll_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/涓閿垎瑙e嵎/涓閿垎瑙e嵎.nut b/绀轰緥椤圭洰/涓閿垎瑙e嵎/涓閿垎瑙e嵎.nut new file mode 100644 index 0000000..0e1990e --- /dev/null +++ b/绀轰緥椤圭洰/涓閿垎瑙e嵎/涓閿垎瑙e嵎.nut @@ -0,0 +1,92 @@ +function _Dps_OneClickDisassemblyOfRoll_Logic_() { + local Config = GlobalConfig.Get("涓閿垎瑙e嵎_Lenheart.json"); + //鍒嗚В鍒 + Cb_Use_Item_Sp_Func[Config["鍒嗚В鍗风殑閬撳叿ID"]] <- function(SUser, ItemId) { + local index = 0; + local InvenObj = SUser.GetInven(); + if (InvenObj) { + for (local i = Config["涓閿垎瑙g殑璧峰浣嶇疆_灏辨槸鑳屽寘浠庣鍑犳牸寮濮"]; i <= Config["涓閿垎瑙g殑缁撴潫浣嶇疆_灏辨槸鑳屽寘鍒扮鍑犳牸缁撴潫"]; i++) { // 閬嶅巻9鍒16鍙疯儗鍖呮牸瀛 + local ItemObj = InvenObj.GetSlot(1, i); + if (!ItemObj.IsEmpty) { + local item_id = ItemObj.GetIndex(); // 鑾峰彇鐗╁搧ID + local PvfItemObj = PvfItem.GetPvfItemById(item_id); + local CItem_get_rarity = PvfItemObj.GetRarity(); // 瑁呭鍝佺骇 + local item_upgrade = ItemObj.GetUpgrade(); + local item_name = PvfItem.GetNameById(item_id); + if (CItem_get_rarity <= Config["鍒嗚В鍝佺骇(鍚)"]) { // 绮夎鍙婁互涓嬪搧绾ц澶 + + // 妫鏌ュ壇鑱屼笟鏄惁寮鍚 + local checkTag = Sq_CallFunc(S_Ptr("0x822f8d4"), "int", ["pointer"], SUser.C_Object); + local is = SUser.GetCurCharacExpertJob(); + if (!is) { + // 濡傛灉鍓亴涓氭湭寮鍚垯璋冪敤璇洪】鍒嗚В鏈 + SUser.DisPatcher_DisJointItem_disjoint(i, 28, S_Ptr("0x0")); + } else { + // 濡傛灉鍓亴涓氬凡寮鍚垯璋冪敤鑷韩鍒嗚В鏈 + SUser.DisPatcher_DisJointItem_disjoint(i, 239, SUser.C_Object); + } + if (item_upgrade > 0) { + item_name = "+" + item_upgrade + item_name; + } + local newItemObj = InvenObj.GetSlot(1, i); + if (newItemObj.IsEmpty) { // 濡傛灉鍒嗚В鎴愬姛 + index++; + SUser.SendUpdateItemList(1, 0, i); + local AdMsgObj = AdMsg(); + AdMsgObj.PutType(Config["鍒嗚В鎴愬姛鎻愮ず鍙戦佷綅缃"]); + if (Config["鍒嗚В鎴愬姛鎻愮ず鍙戦佷綅缃"] != 14) { + AdMsgObj.PutString(" "); + } + AdMsgObj.PutString(" 鎴愬姛鍒嗚В瑁呭"); + AdMsgObj.PutEquipment("[" + item_name + "]", ItemObj, DisJointItemBynangua.RarityColor(item_id)); + AdMsgObj.Finalize(); + SUser.Send(AdMsgObj.MakePack()); + AdMsgObj.Delete(); + } + } + } + } + + if (index > 0) { + SUser.SendNotiPacketMessage("鎭枩: " + index + " 浠惰澶囧垎瑙f垚鍔熴", 8); + } else { + SUser.SendNotiPacketMessage("瑁呭鍒嗚В澶辫触锛岄亾鍏峰凡杩旇繕", 8); + } + if (Config["鏄惁杩旇繕鍒嗚В鍒搁亾鍏(true浠h〃杩旇繕,false浠h〃涓嶈繑杩)"]) { + Timer.setTimeout(function() { + SUser.GiveItem(ItemId, 1); + }, 1); + } + } + }; +} + +class DisJointItemBynangua { + function RarityColor(item_id) { + local PvfItemObj = PvfItem.GetPvfItemById(item_id); + if (PvfItemObj == null) { + return; + } + local CItem_get_rarity = PvfItemObj.GetRarity(); // 瑁呭鍝佺骇 + return DisJointItemBynangua.rarityColorMap[(CItem_get_rarity).tostring()]; + } + rarityColorMap = { + "0": [255, 255, 255], // 鏅 + "1": [104, 213, 237], // 楂樼骇 + "2": [179, 107, 255], // 绋鏈 + "3": [255, 0, 255], // 绁炲櫒 + "4": [255, 180, 0], // 鍙茶瘲 + "5": [255, 102, 102], // 鍕囪 + "6": [255, 20, 147], // 娣辩矇绾㈣壊 + "7": [255, 215, 0] // 閲戣壊 + }; +} + +function _Dps_OneClickDisassemblyOfRoll_Main_() { + _Dps_OneClickDisassemblyOfRoll_Logic_(); +} + +function _Dps_OneClickDisassemblyOfRoll_Main_Reload_(OldConfig) { + Cb_Use_Item_Sp_Func.rawdelete(OldConfig["鍒嗚В鍗风殑閬撳叿ID"]); + _Dps_OneClickDisassemblyOfRoll_Logic_(); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/涓閿垎瑙e嵎/涓閿垎瑙e嵎_Lenheart.json b/绀轰緥椤圭洰/涓閿垎瑙e嵎/涓閿垎瑙e嵎_Lenheart.json new file mode 100644 index 0000000..51cd4e9 --- /dev/null +++ b/绀轰緥椤圭洰/涓閿垎瑙e嵎/涓閿垎瑙e嵎_Lenheart.json @@ -0,0 +1,9 @@ +{ + "鍒嗚В鍗风殑閬撳叿ID": 7577, + "鏄惁杩旇繕鍒嗚В鍒搁亾鍏(true浠h〃杩旇繕,false浠h〃涓嶈繑杩)": true, + "涓閿垎瑙g殑璧峰浣嶇疆_灏辨槸鑳屽寘浠庣鍑犳牸寮濮": 9, + "涓閿垎瑙g殑缁撴潫浣嶇疆_灏辨槸鑳屽寘鍒扮鍑犳牸缁撴潫": 16, + "鍒嗚В鍝佺骇(鍚)": 4, + "鍒嗚В鎴愬姛鎻愮ず鍙戦佷綅缃": 3, + "鎻愮ず":"璧峰浣嶇疆蹇嵎鏍(蹇嵎鏍3-8),瑁呭鏍(蹇嵎鏍9-56,濡傜涓鎺掍负9-16,绗簩鎺掍负17-24,绗笁鎺掍负25-32,绗洓鎺掍负33-40,绗簲鎺掍负41-48,绗叚鎺掍负49-56)" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/涓閿瓨鍏ヤ釜浜洪噾搴/Proj.ifo b/绀轰緥椤圭洰/涓閿瓨鍏ヤ釜浜洪噾搴/Proj.ifo new file mode 100644 index 0000000..6d08451 --- /dev/null +++ b/绀轰緥椤圭洰/涓閿瓨鍏ヤ釜浜洪噾搴/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "涓閿瓨鍏ヤ釜浜洪噾搴", + "ProjectDescribe": "浣跨敤涔嬪墠,璇峰姟蹇呬繚璇佸畨瑁呬簡缇ゅ唴鐨 \"瀹㈡埛绔秷鎭233.dll\" 鎻掍欢,杩欎釜鎻掍欢鏀惧叆浣犲鎴风鐨勬彃浠跺姞杞界洰褰曞嵆鍙,鍦ㄦ父鎴忎腑杈撳叆 //yjcc 鍗冲彲涓閿瓨鍏ヤ釜浜洪噾搴,涔熷彲浠ュ湪娓告垙涓殑蹇嵎鍠婅瘽涓坊鍔犱负蹇嵎閿 閰嶇疆涓彲鏇存敼 yjcc 鍏抽敭瀛", + "ProjectAuthor": "鍊炬唱瀵 & 鍗楃摐", + "ProjectVersion": 1.3, + "ProjectConfig": "涓閿瓨鍏ヤ釜浜洪噾搴揰Lenheart.json", + "ProjectFiles": [ + "涓閿叆搴.nut" + ], + "ProjectRunFunc": "_Dps_OneClickStorage_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/涓閿瓨鍏ヤ釜浜洪噾搴/涓閿叆搴.nut b/绀轰緥椤圭洰/涓閿瓨鍏ヤ釜浜洪噾搴/涓閿叆搴.nut new file mode 100644 index 0000000..9f38ebc --- /dev/null +++ b/绀轰緥椤圭洰/涓閿瓨鍏ヤ釜浜洪噾搴/涓閿叆搴.nut @@ -0,0 +1,116 @@ +/* +鏂囦欢鍚:涓閿叆搴.nut +璺緞:MyProject/涓閿叆搴.nut +鍒涘缓鏃ユ湡:2025-03-25 14:42 +鏂囦欢鐢ㄩ:涓閿叆搴 +*/ + +function _Dps_OneClickStorage_Logic_() { + local Config = GlobalConfig.Get("涓閿瓨鍏ヤ釜浜洪噾搴揰Lenheart.json"); + //鍦ㄦ父鎴忎腑杈撳叆//涓閿叆搴撳嵆鍙皟鐢 + Gm_InputFunc_Handle[Config["涓閿瓨浠撳懡浠"]] <- function(SUser, Cmd) { + // 鑾峰彇瑙掕壊鑳屽寘 + local InvenObj = SUser.GetInven(); + // 瑙掕壊浠撳簱 + local CargoObj = Sq_CallFunc(S_Ptr("0x08151a94"), "pointer", ["pointer"], SUser.C_Object); + // 娣诲姞璁℃暟鍣 + local transferCount = 0; + // 閬嶅巻鑳屽寘娑堣楀搧鏍忓強鏉愭枡鏍 + for (local i = 57; i <= 152; ++i) { + // 鑾峰彇鑳屽寘鐗╁搧 + local ItemObj = InvenObj.GetSlot(1, i); + // 鑾峰彇鑳屽寘鐗╁搧ID + local Item_Id = ItemObj.GetIndex(); + local ItemName = PvfItem.GetNameById(Item_Id); + // 濡傛灉鐗╁搧ID涓0鎴3037锛岃烦杩(鍦ㄦ鍙互娣诲姞鍏朵粬闇瑕佽烦杩囩殑鐗╁搧ID) + if (Item_Id == 0 || Config["鎸囧畾閬撳叿ID涓嶅瓨鍏"].find(Item_Id) != null) { + continue; + } + + // 瑙掕壊浠撳簱鏄惁瀛樺湪鑳屽寘鐗╁搧 + local CargoSlot = Sq_CallFunc(S_Ptr("0x850bc14"), "int", ["pointer", "int"], CargoObj, Item_Id); + // 濡傛灉瑙掕壊浠撳簱涓病鏈夎鐗╁搧锛岃烦杩 + if (CargoSlot == -1) { + continue; + } + + // 鑾峰彇浠撳簱鐗╁搧鎸囬拡 + local cargoItemPointer = NativePointer(CargoObj).add(4).readPointer(); + // 鑾峰彇瑙掕壊浠撳簱鐗╁搧瀵硅薄 + local cargoItemObj = NativePointer(cargoItemPointer).add(61 * CargoSlot); + // 鑾峰彇瑙掕壊浠撳簱鐗╁搧ID + local cargoItemId = NativePointer(cargoItemPointer).add(61 * CargoSlot + 2).readU32(); + // 鑾峰彇瑙掕壊浠撳簱鐗╁搧鏁伴噺 + local cargoItemCount = Sq_CallFunc(S_Ptr("0x80F783A"), "int", ["pointer"], cargoItemObj.C_Object); + + // 鑾峰彇鐗╁搧瀵硅薄 + local PvfItem = PvfItem.GetPvfItemById(cargoItemId); + + // 鑾峰彇鐗╁搧鍙爢鍙犳暟閲 + local getStackableLimit = Sq_CallFunc(S_Ptr("0x0822C9FC"), "int", ["pointer"], PvfItem.C_Object); + + // 濡傛灉浠撳簱宸茶揪鍫嗗彔涓婇檺锛岃烦杩囨鐗╁搧 + if (cargoItemCount >= getStackableLimit) { + continue; + } + + // 鑾峰彇鑳屽寘鐗╁搧鏁伴噺 + local inventoryItemCount = Sq_CallFunc(S_Ptr("0x80F783A"), "int", ["pointer"], ItemObj.C_Object); + // 鑾峰彇鐗╁搧鏄惁鍙爢鍙 + local checkStackableLimit = Sq_CallFunc(S_Ptr("0x08501A79"), "int", ["int", "int"], cargoItemId, cargoItemCount + inventoryItemCount); + // 灏濊瘯灏嗙墿鍝佸偍瀛樿嚦瑙掕壊浠撳簱涓 + local tryAddStackItem = Sq_CallFunc(S_Ptr("0x0850B4B0"), "int", ["pointer", "pointer", "int"], CargoObj, ItemObj.C_Object, CargoSlot); + if (tryAddStackItem >= 0) { + // 姝e紡灏嗙墿鍝佹彃鍏ヨ鑹蹭粨搴撲腑 + Sq_CallFunc(S_Ptr("0x850b672"), "pointer", ["pointer", "pointer", "int"], CargoObj, ItemObj.C_Object, CargoSlot); + // 鍒犻櫎鑳屽寘涓殑鐗╁搧 + ItemObj.Delete(); + transferCount++; + SUser.SendNotiPacketMessage("[ " + ItemName + " ]" + "鎴愬姛鍏ュ簱 x " + inventoryItemCount, 8); + } + + // 澶勭悊鍙爢鍙犵墿鍝 + if (checkStackableLimit == 0) { + // 鑾峰彇鐗╁搧鎬绘暟 + local totalCount = cargoItemCount + inventoryItemCount; + + // 濡傛灉鎬绘暟涓嶈秴杩囦笂闄愶紝鍏ㄩ儴鍫嗗埌浠撳簱 + if (totalCount <= getStackableLimit) { + // 灏嗙墿鍝佸爢鍒颁粨搴 + Sq_CallFunc(S_Ptr("0x80CB884"), "int", ["pointer", "int"], cargoItemObj.C_Object, totalCount); + // 鍒犻櫎鑳屽寘涓殑鐗╁搧 + ItemObj.Delete(); + transferCount++; + SUser.SendNotiPacketMessage("[ " + ItemName + " ]" + "鎴愬姛鍏ュ簱 x " + inventoryItemCount, 8); + } else { + // 濡傛灉鎬绘暟瓒呰繃涓婇檺 + // 灏嗕粨搴撶殑鐗╁搧鏁伴噺璁剧疆涓烘渶澶ф暟閲 + Sq_CallFunc(S_Ptr("0x80CB884"), "int", ["pointer", "int"], cargoItemObj.C_Object, getStackableLimit); + // 灏嗚儗鍖呮暟閲忓噺鍘昏浆绉昏嚦浠撳簱鐨勬暟閲 + local transferAmount = getStackableLimit - cargoItemCount; + Sq_CallFunc(S_Ptr("0x80CB884"), "int", ["pointer", "int"], ItemObj.C_Object, totalCount - getStackableLimit); + transferCount++; + SUser.SendNotiPacketMessage("[ " + ItemName + " ]" + "鎴愬姛鍏ュ簱 x " + transferAmount, 8); + } + } + + // 閫氱煡瀹㈡埛绔洿鏂拌儗鍖 + SUser.SendUpdateItemList(1, 0, i); + } + + if (transferCount == 0) { + SUser.SendNotiBox("娌℃湁鍙浆绉荤殑鐗╁搧锛", 1); + } + // 閫氱煡瀹㈡埛绔洿鏂颁粨搴 + SUser.SendItemSpace(2); + } +} +//鍚姩鍑芥暟 鑷畾涔夌殑闇瑕佸啓鍦╥fo涓 +function _Dps_OneClickStorage_Main_() { + _Dps_OneClickStorage_Logic_(); +} + +function _Dps_OneClickStorage_Main_Reload(OldConfig) { + Gm_InputFunc_Handle.rawdelete(OldConfig["涓閿瓨浠撳懡浠"]); + _Dps_OneClickStorage_Logic_(); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/涓閿瓨鍏ヤ釜浜洪噾搴/涓閿瓨鍏ヤ釜浜洪噾搴揰Lenheart.json b/绀轰緥椤圭洰/涓閿瓨鍏ヤ釜浜洪噾搴/涓閿瓨鍏ヤ釜浜洪噾搴揰Lenheart.json new file mode 100644 index 0000000..cc46453 --- /dev/null +++ b/绀轰緥椤圭洰/涓閿瓨鍏ヤ釜浜洪噾搴/涓閿瓨鍏ヤ釜浜洪噾搴揰Lenheart.json @@ -0,0 +1,4 @@ +{ + "涓閿瓨浠撳懡浠": "yjcc", + "鎸囧畾閬撳叿ID涓嶅瓨鍏": [3037, 3038] +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/涓婄嚎鑷姩瀹屾垚浠诲姟/Proj.ifo b/绀轰緥椤圭洰/涓婄嚎鑷姩瀹屾垚浠诲姟/Proj.ifo new file mode 100644 index 0000000..cfac8d5 --- /dev/null +++ b/绀轰緥椤圭洰/涓婄嚎鑷姩瀹屾垚浠诲姟/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "涓婄嚎鑷姩瀹屾垚浠诲姟", + "ProjectDescribe": "涓婄嚎鑷姩瀹屾垚浠诲姟", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.0, + "ProjectConfig": "涓婄嚎鑷姩瀹屾垚浠诲姟_Lenheart.json", + "ProjectFiles": [ + "涓婄嚎鑷姩瀹屾垚浠诲姟.nut" + ], + "ProjectRunFunc": "_Dps_AutomaticallyCompleteTasksOnline_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/涓婄嚎鑷姩瀹屾垚浠诲姟/涓婄嚎鑷姩瀹屾垚浠诲姟.nut b/绀轰緥椤圭洰/涓婄嚎鑷姩瀹屾垚浠诲姟/涓婄嚎鑷姩瀹屾垚浠诲姟.nut new file mode 100644 index 0000000..19ce68e --- /dev/null +++ b/绀轰緥椤圭洰/涓婄嚎鑷姩瀹屾垚浠诲姟/涓婄嚎鑷姩瀹屾垚浠诲姟.nut @@ -0,0 +1,9 @@ +function _Dps_AutomaticallyCompleteTasksOnline_Main_() { + Cb_History_MileageSet_Func["_DPS_涓婄嚎鑷姩瀹屾垚浠诲姟_"] <- function(SUser, Data) { + local Config = GlobalConfig.Get("涓婄嚎鑷姩瀹屾垚浠诲姟_Lenheart.json"); + local QuestArr = Config["闇瑕佸畬鎴愮殑浠诲姟缂栧彿"]; + foreach(QuestId in QuestArr) { + SUser.ClearQuest_Gm(QuestId); + } + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/涓婄嚎鑷姩瀹屾垚浠诲姟/涓婄嚎鑷姩瀹屾垚浠诲姟_Lenheart.json b/绀轰緥椤圭洰/涓婄嚎鑷姩瀹屾垚浠诲姟/涓婄嚎鑷姩瀹屾垚浠诲姟_Lenheart.json new file mode 100644 index 0000000..a2f87c8 --- /dev/null +++ b/绀轰緥椤圭洰/涓婄嚎鑷姩瀹屾垚浠诲姟/涓婄嚎鑷姩瀹屾垚浠诲姟_Lenheart.json @@ -0,0 +1,4 @@ +{ + "闇瑕佸畬鎴愮殑浠诲姟缂栧彿" : [674,649,675,650], + "娉ㄦ剰浜嬮」": "璇风‘淇濅綘鐨勪换鍔¢渶姹傜瓑绾ф槸1绾,鍚﹀垯鍙兘鏃犳硶瀹屾垚銆傝鍦≒VF涓洿鏀逛换鍔¢渶瑕佺殑绛夌骇銆" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/浜ゆ槗閭欢鎾姤/Proj.ifo b/绀轰緥椤圭洰/浜ゆ槗閭欢鎾姤/Proj.ifo new file mode 100644 index 0000000..43cb57f --- /dev/null +++ b/绀轰緥椤圭洰/浜ゆ槗閭欢鎾姤/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "浜ゆ槗閭欢鎾姤", + "ProjectDescribe": "浜ゆ槗閭欢鎾姤", + "ProjectAuthor": "宸呭嘲 & 鍊炬唱瀵", + "ProjectVersion": 1.2, + "ProjectConfig": "浜ゆ槗閭欢鎾姤.json", + "ProjectFiles": [ + "浜ゆ槗閭欢鎾姤.nut" + ], + "ProjectRunFunc": "_Dps_JYYJBB_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/浜ゆ槗閭欢鎾姤/浜ゆ槗閭欢鎾姤.json b/绀轰緥椤圭洰/浜ゆ槗閭欢鎾姤/浜ゆ槗閭欢鎾姤.json new file mode 100644 index 0000000..ddc8bf0 --- /dev/null +++ b/绀轰緥椤圭洰/浜ゆ槗閭欢鎾姤/浜ゆ槗閭欢鎾姤.json @@ -0,0 +1,4 @@ +{ + + "鎻愮ず": "鏆傛椂娌″啓閰嶇疆" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/浜ゆ槗閭欢鎾姤/浜ゆ槗閭欢鎾姤.nut b/绀轰緥椤圭洰/浜ゆ槗閭欢鎾姤/浜ゆ槗閭欢鎾姤.nut new file mode 100644 index 0000000..ee1929f --- /dev/null +++ b/绀轰緥椤圭洰/浜ゆ槗閭欢鎾姤/浜ゆ槗閭欢鎾姤.nut @@ -0,0 +1,126 @@ +function _Dps_JYYJBB_Main_() { + + Cb_History_ItemUp_Func["浜ゆ槗閭欢鎾姤"] <- function(SUser, args) { + local reason = args[18]; + if (reason == "1") { + local pvfitem = PvfItem.GetNameById(args[15].tointeger()); + local LoginMsgObj = AdMsg(); + LoginMsgObj.PutType(14); + LoginMsgObj.PutColorString("鐜╁[", [255, 255, 0]); + LoginMsgObj.PutColorString(SUser.GetCharacName(), [255, 0, 0]); + LoginMsgObj.PutColorString("]", [255, 255, 0]); + LoginMsgObj.PutColorString("鑾峰緱", [255, 255, 0]); + LoginMsgObj.PutColorString("[" + args[20] + "]", [255, 255, 0]); + LoginMsgObj.PutColorString("浜ゆ槗鐨勯亾鍏", [255, 255, 0]); + LoginMsgObj.PutColorString(pvfitem, [255, 255, 0]); + LoginMsgObj.PutColorString(args[17] + "涓", [255, 255, 0]); + LoginMsgObj.Finalize(); + World.SendAll(LoginMsgObj.MakePack()); + LoginMsgObj.Delete(); + } + } + + + + + Cb_History_MoneyUp_Func["浜ゆ槗閭欢鎾姤"] <- function(SUser, args) { + local reason = args[16]; + if (reason == "1") { + local LoginMsgObj = AdMsg(); + LoginMsgObj.PutType(14); + LoginMsgObj.PutColorString("鐜╁[", [255, 255, 0]); + LoginMsgObj.PutColorString(SUser.GetCharacName(), [255, 0, 0]); + LoginMsgObj.PutColorString("]", [255, 255, 0]); + LoginMsgObj.PutColorString("鑾峰緱", [255, 255, 0]); + LoginMsgObj.PutColorString("[" + getFirstBracketContent(args[17]) + "]", [255, 255, 0]); + LoginMsgObj.PutColorString("浜ゆ槗鐨", [255, 255, 0]); + LoginMsgObj.PutColorString(args[15], [255, 255, 0]); + LoginMsgObj.PutColorString("閲戝竵", [255, 255, 0]); + LoginMsgObj.Finalize(); + World.SendAll(LoginMsgObj.MakePack()); + LoginMsgObj.Delete(); + } + } + + Cb_MailBox11_Send_Leave_Func["浜ゆ槗閭欢鎾姤"] <- function(args) { + local jewelSocketID = NativePointer(args[0]).readPointer(); + local SUser = User(jewelSocketID); + local name = SUser.GetCharacName(); + local receive_name = NativePointer(args[1]).add(17).readUtf8String(); + local send_gold_count = NativePointer(args[1]).add(46).readU32(); + local send_item_id = NativePointer(args[1]).add(57).readU32(); + local send_item_count = NativePointer(args[1]).add(61).readU32(); //鍙戦侀亾鍏锋暟閲 + local item_name; + if (send_item_id > 0) { + item_name = PvfItem.GetNameById(send_item_id); + } + // 鍙戦佷笘鐣屽叕鍛婃挱鎶 + if (send_gold_count > 0 && send_item_id > 0) { + local LoginMsgObj = AdMsg(); + LoginMsgObj.PutType(14); + LoginMsgObj.PutColorString("鐜╁[", [255, 255, 0]); + LoginMsgObj.PutColorString(SUser.GetCharacName(), [0, 255, 0]); + LoginMsgObj.PutColorString("]", [255, 255, 0]); + LoginMsgObj.PutColorString("鍒氬垰閫氳繃閭欢鍚", [255, 255, 0]); + LoginMsgObj.PutColorString("[" + receive_name + "]", [0, 255, 0]); + LoginMsgObj.PutColorString("鍙戦佷簡", [255, 255, 0]); + LoginMsgObj.PutColorString("閲戝竵*" + send_gold_count, [255, 170, 0]); + LoginMsgObj.PutColorString("鍜", [255, 255, 0]); + LoginMsgObj.PutColorString(send_item_count + "涓", [255, 255, 0]); + LoginMsgObj.PutColorString(item_name, [255, 255, 0]); + LoginMsgObj.Finalize(); + World.SendAll(LoginMsgObj.MakePack()); + LoginMsgObj.Delete(); + } else if (send_gold_count > 0) { + local LoginMsgObj = AdMsg(); + LoginMsgObj.PutType(14); + LoginMsgObj.PutColorString("鐜╁[", [255, 255, 0]); + LoginMsgObj.PutColorString(SUser.GetCharacName(), [0, 255, 0]); + LoginMsgObj.PutColorString("]", [255, 255, 0]); + LoginMsgObj.PutColorString("鍒氬垰閫氳繃閭欢鍚", [255, 255, 0]); + LoginMsgObj.PutColorString("[" + receive_name + "]", [0, 255, 0]); + LoginMsgObj.PutColorString("鍙戦佷簡", [255, 255, 0]); + LoginMsgObj.PutColorString("閲戝竵*" + send_gold_count, [255, 170, 0]); + LoginMsgObj.Finalize(); + World.SendAll(LoginMsgObj.MakePack()); + LoginMsgObj.Delete(); + } else if (send_item_id > 0) { + local LoginMsgObj = AdMsg(); + LoginMsgObj.PutType(14); + LoginMsgObj.PutColorString("鐜╁[", [255, 255, 0]); + LoginMsgObj.PutColorString(SUser.GetCharacName(), [0, 255, 0]); + LoginMsgObj.PutColorString("]", [255, 255, 0]); + LoginMsgObj.PutColorString("鍒氬垰閫氳繃閭欢鍚", [255, 255, 0]); + LoginMsgObj.PutColorString("[" + receive_name + "]", [0, 255, 0]); + LoginMsgObj.PutColorString("鍙戦佷簡", [255, 255, 0]); + LoginMsgObj.PutColorString(send_item_count + "涓", [255, 255, 0]); + LoginMsgObj.PutColorString(item_name, [255, 255, 0]); + LoginMsgObj.Finalize(); + World.SendAll(LoginMsgObj.MakePack()); + LoginMsgObj.Delete(); + } else { + local LoginMsgObj = AdMsg(); + LoginMsgObj.PutType(14); + LoginMsgObj.PutColorString("鐜╁[", [255, 255, 0]); + LoginMsgObj.PutColorString(SUser.GetCharacName(), [0, 255, 0]); + LoginMsgObj.PutColorString("]", [255, 255, 0]); + LoginMsgObj.PutColorString("鍒氬垰閫氳繃閭欢鍚", [255, 255, 0]); + LoginMsgObj.PutColorString("[" + receive_name + "]", [0, 255, 0]); + LoginMsgObj.PutColorString("鍙戦佷簡涓灏侀偖浠", [255, 255, 0]); + LoginMsgObj.Finalize(); + World.SendAll(LoginMsgObj.MakePack()); + LoginMsgObj.Delete(); + } + } +} + + + +function getFirstBracketContent(str) { + local startPos = str.find("("); + if (startPos == null) return null; + local endPos = str.find(")", startPos + 1); + if (endPos == null) return null; + // 鎻愬彇鎷彿鍐呯殑鍐呭锛堜笉鍖呮嫭鎷彿鏈韩锛 + return str.slice(startPos + 1, endPos); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗/Proj.ifo b/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗/Proj.ifo new file mode 100644 index 0000000..74f1ef4 --- /dev/null +++ b/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗/Proj.ifo @@ -0,0 +1,12 @@ +{ + "ProjectName": "浠诲姟娓呴櫎鍗", + "ProjectDescribe": "娓呯悊鍚勭被鍨嬩换鍔′互鍙婇噸缃浉鍏充换鍔", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.3, + "ProjectConfig": "浠诲姟鐩稿叧閰嶇疆_鍗楃摐.json", + "ProjectFiles": [ + "浠诲姟娓呴櫎鍗.nut" + ], + "ProjectIcon":"http://103.36.223.176:5244/d/DP_S/logo2.png?sign=aH3AjsyJgmomCqT3To_QfDY6a2RlSI-T3eUmtW0raoA=:0", + "ProjectRunFunc": "_Dps_QuestInfo_nangua_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗/浠诲姟娓呴櫎鍗.nut b/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗/浠诲姟娓呴櫎鍗.nut new file mode 100644 index 0000000..97eaa1e --- /dev/null +++ b/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗/浠诲姟娓呴櫎鍗.nut @@ -0,0 +1,231 @@ +_NG_QUEST_GRADE_COMMON_UNIQUE <- 5 //鏅氫换鍔 +_NG_QUEST_GRADE_EPIC <- 0 //涓荤嚎浠诲姟 +_NG_QUEST_GRADE_ACHIEVEMENT <- 2 //鎴愬氨浠诲姟 + +// 浠诲姟绫诲瀷涓庢帓闄ゅ垪琛ㄧ殑鏄犲皠 +_QUEST_EXCLUDE_MAP <- { + [_NG_QUEST_GRADE_COMMON_UNIQUE] = "鏅氫换鍔¢渶鎺掗櫎浠诲姟ID", + [_NG_QUEST_GRADE_ACHIEVEMENT] = "鎴愬氨浠诲姟闇鎺掗櫎浠诲姟ID", + [_NG_QUEST_GRADE_EPIC] = "涓荤嚎浠诲姟闇鎺掗櫎浠诲姟ID" +} + +function clear_all_quest_by_character_level_nangua(SUser, Item_id) { + local Cofig = GlobalConfig.Get("浠诲姟鐩稿叧閰嶇疆_鍗楃摐.json"); + local poolMapping = { + [Cofig["涓荤嚎浠诲姟瀹屾垚鍒搁亾鍏稩D"]] = _NG_QUEST_GRADE_EPIC, + [Cofig["鏅氫换鍔″畬鎴愬埜閬撳叿ID"]] = _NG_QUEST_GRADE_COMMON_UNIQUE, + [Cofig["鎴愬氨浠诲姟瀹屾垚鍒搁亾鍏稩D"]] = _NG_QUEST_GRADE_ACHIEVEMENT + }; + // 鑾峰彇瀵瑰簲鐨則ype + local quest_type = poolMapping[Item_id]; + // 鐜╁浠诲姟淇℃伅 + local user_quest = SUser.GetQuest(); + + // 鐜╁宸插畬鎴愪换鍔′俊鎭 + local WongWork_CQuestClear = NativePointer(user_quest).add(4); + // 鐜╁褰撳墠绛夌骇 + local charac_lv = SUser.GetCharacLevel(); + // 鏈瀹屾垚浠诲姟鏁伴噺 + local clear_quest_cnt = 0; + // 鑾峰彇pvf鏁版嵁 + local data_manager = Sq_CallFunc(S_Ptr("0x80CC19B"), "pointer"); + + // 浣跨敤鍏ㄥ眬鎺掗櫎鍒楄〃 + local exclude_quset_id = _QUEST_EXCLUDE_MAP.rawin(quest_type) ? Cofig[_QUEST_EXCLUDE_MAP[quest_type]] : []; + + //瀹屾垚褰撳墠宸叉帴浠诲姟 + for (local i = 0; i < 20; i++) { + // 浠诲姟id + local doing_quest_id = NativePointer(user_quest).add(4 * (i + 7500 + 2)).readInt(); + + if (doing_quest_id > 0) { + // 鑾峰彇褰撳墠浠诲姟鐨勬暟鎹 + local quest = Sq_CallFunc(S_Ptr("0x835FDC6"), "pointer", ["pointer", "int"], data_manager, doing_quest_id); + if (quest) { + // 浠诲姟绫诲瀷 + local quest_grade = NativePointer(quest).add(8).readInt(); + + // 鍒ゆ柇浠诲姟绫诲瀷骞朵笖涓嶅湪鎺掗櫎鍒楄〃涓 + if (quest_grade == quest_type && exclude_quset_id.find(doing_quest_id) == null) { + // 鏃犳潯浠跺畬鎴愪换鍔 + SUser.ClearQuest_Gm(doing_quest_id); + } + } + } + } + + // 閬嶅巻鎵鏈変换鍔D + for (local quest_id = 1; quest_id < 30000; quest_id++) { + // 妫鏌ヤ换鍔℃槸鍚﹀湪鎺掗櫎鍒楄〃涓 + if (exclude_quset_id.find(quest_id) != null) { + continue; + } + + // 璺宠繃宸插畬鎴愮殑浠诲姟 + local isCleared = isClearedQuest(WongWork_CQuestClear.C_Object, quest_id); + if (isCleared) { + continue; + } + + // 鑾峰彇浠诲姟鏁版嵁 + local quest = Sq_CallFunc(S_Ptr("0x835FDC6"), "pointer", ["pointer", "int"], data_manager, quest_id); + if (quest) { + // 浠诲姟绫诲瀷 + local quest_grade = NativePointer(quest).add(8).readInt(); + + if (quest_grade == quest_type) { + // 鍙垽鏂换鍔℃渶浣庣瓑绾ц姹 蹇界暐 鑱屼笟/鍓嶇疆 绛変换鍔¤姹 鍙竴娆℃у畬鎴愬綋鍓嶇瓑绾ф墍鏈変换鍔 + local quest_min_lv = NativePointer(quest).add(0x20).readInt(); + + if (quest_min_lv <= charac_lv) { + Sq_CallFunc(S_Ptr("0x808BA78"), "int", ["pointer", "int"], WongWork_CQuestClear.C_Object, quest_id); + + // 鏈鑷姩瀹屾垚浠诲姟璁℃暟 + clear_quest_cnt++; + } + } + } + } + + // 閫氱煡瀹㈡埛绔洿鏂 + if (clear_quest_cnt > 0) { + local Pack = Packet(); + Sq_CallFunc(S_Ptr("0x868B044"), "int", ["pointer"], SUser.C_Object); + Sq_CallFunc(S_Ptr("0x86ABBA8"), "int", ["pointer", "pointer"], user_quest, Pack.C_Object); + SUser.Send(Pack); + Pack.Delete(); + // 鍏憡閫氱煡瀹㈡埛绔湰娆¤嚜鍔ㄥ畬鎴愪换鍔℃暟鎹 + SUser.SendNotiPacketMessage("宸茶嚜鍔ㄥ畬鎴愬綋鍓嶇瓑绾т换鍔℃暟閲: " + clear_quest_cnt, 8); + }else{ + SUser.SendNotiPacketMessage("娌℃湁鍙竻鐞嗙殑浠诲姟", 8); + SUser.GiveItem(Item_id, 1); + } +} + +//鎸囧畾姣忔棩浠诲姟瀹屾垚鍒 +function QUEST_ByMRFuncBynangua(SUser, ItemId) { + local Cofig = GlobalConfig.Get("浠诲姟鐩稿叧閰嶇疆_鍗楃摐.json"); + // 鐜╁宸插畬鎴愪换鍔′俊鎭 + local user_quest = SUser.GetQuest(); + local WongWork_CQuestClear = NativePointer(user_quest).add(4); + + // 鏄惁鏈変换鍔″凡琚竻鐞 + local anyTaskCleared = false; + + // 閬嶅巻骞跺畬鎴愭瘡涓涓换鍔 + for (local i = 0; i < Cofig["鎸囧畾瀹屾垚姣忔棩浠诲姟ID"].len(); i++) { + local quest_id = Cofig["鎸囧畾瀹屾垚姣忔棩浠诲姟ID"][i]; + local isCleared = isClearedQuest(WongWork_CQuestClear.C_Object, quest_id); + + if (isCleared) { + continue; + } else { + SUser.ClearQuest_Gm(quest_id); + anyTaskCleared = true; + } + } + + if (anyTaskCleared) { + SUser.SendNotiPacketMessage("鎸囧畾姣忔棩浠诲姟宸插畬鎴!", 8); + } else { + SUser.SendNotiPacketMessage("娌℃湁鍙竻鐞嗙殑浠诲姟", 8); + SUser.GiveItem(ItemId, 1); + } +} + +//鎸囧畾姣忔棩浠诲姟閲嶇疆鍒 +function QUEST_ByCZMRFuncBynangua(SUser, ItemId) { + local Cofig = GlobalConfig.Get("浠诲姟鐩稿叧閰嶇疆_鍗楃摐.json"); + // 鐜╁宸插畬鎴愪换鍔′俊鎭 + local user_quest = SUser.GetQuest(); + local WongWork_CQuestClear = NativePointer(user_quest).add(4); + + // 鏄惁鏈変换鍔¤閲嶇疆 + local anyTaskReset = false; + + // 閬嶅巻骞堕噸缃瘡涓涓换鍔 + for (local i = 0; i < Cofig["鎸囧畾瀹屾垚姣忔棩浠诲姟ID"].len(); i++) { + local quest_id = Cofig["鎸囧畾瀹屾垚姣忔棩浠诲姟ID"][i]; + local isCleared = isClearedQuest(WongWork_CQuestClear.C_Object, quest_id); + + if (!isCleared) { + continue; + } else { + Sq_CallFunc(S_Ptr("0x808BAAC"), "int", ["pointer", "int"], WongWork_CQuestClear.C_Object, quest_id); + anyTaskReset = true; + } + } + + if (anyTaskReset) { + //閫氱煡瀹㈡埛绔洿鏂颁换鍔″垪琛 + Sq_CallFunc(S_Ptr("0x868B044"), "int", ["pointer"], SUser.C_Object); + local Pack = Packet(); + Sq_CallFunc(S_Ptr("0x86ABBA8"), "int", ["pointer", "pointer"], user_quest, Pack.C_Object); + SUser.Send(Pack); + Pack.Delete(); + SUser.SendNotiPacketMessage("鎸囧畾姣忔棩浠诲姟宸查噸缃!", 8); + } else { + SUser.SendNotiPacketMessage("娌℃湁鍙噸缃殑浠诲姟", 8); + SUser.GiveItem(ItemId, 1); + } +} + +//閲嶇疆鎵鏈変换鍔′负鏈畬鎴愮姸鎬 +function QUEST_ByALLFuncBynangua(SUser, ItemId) { + local GetState = SUser.GetState() + local user_quest = SUser.GetQuest(); + local WongWork_CQuestClear = NativePointer(user_quest).add(4); + //娓呯┖宸叉帴浠诲姟鍒楄〃 + for (local i = 0; i < 20; i++) { + NativePointer(user_quest).add(4 * (i + 7500 + 2)).writeInt(0); + } + //鎵鏈変换鍔¤缃湭瀹屾垚鐘舵 + for (local i = 0; i < 29999; i++) { + Sq_CallFunc(S_Ptr("0x808BAAC"), "int", ["pointer", "int"], WongWork_CQuestClear.C_Object, i); + } + //閫氱煡瀹㈡埛绔洿鏂颁换鍔″垪琛 + Sq_CallFunc(S_Ptr("0x868B044"), "int", ["pointer"], SUser.C_Object); + local Pack = Packet(); + Sq_CallFunc(S_Ptr("0x86ABBA8"), "int", ["pointer", "pointer"], user_quest, Pack.C_Object); + SUser.Send(Pack); + Pack.Delete(); + SUser.SendNotiPacketMessage("鎵鏈変换鍔″凡閲嶇疆!", 8); +} + +function isClearedQuest(C_Object, questID) { + return Sq_CallFunc(S_Ptr("0x808BAE0"), "bool", ["pointer", "int"], C_Object, questID); +} + +//鍔犺浇鍏ュ彛 +function _Dps_QuestInfo_nangua_Main_() { + _Dps_QuestInfo_nangua_Logic_(); +} + +//閲嶈浇鍏ュ彛 +function _Dps_QuestInfo_nangua_Main_Reload_(OldConfig) { + Cb_Use_Item_Sp_Func.rawdelete(OldConfig["涓荤嚎浠诲姟瀹屾垚鍒搁亾鍏稩D"].tointeger()); + Cb_Use_Item_Sp_Func.rawdelete(OldConfig["鏅氫换鍔″畬鎴愬埜閬撳叿ID"].tointeger()); + Cb_Use_Item_Sp_Func.rawdelete(OldConfig["鎴愬氨浠诲姟瀹屾垚鍒搁亾鍏稩D"].tointeger()); + Cb_Use_Item_Sp_Func.rawdelete(OldConfig["鎸囧畾姣忔棩浠诲姟瀹屾垚鍒搁亾鍏稩D"].tointeger()); + Cb_Use_Item_Sp_Func.rawdelete(OldConfig["鎸囧畾姣忔棩浠诲姟閲嶇疆鍒搁亾鍏稩D"].tointeger()); + Cb_Use_Item_Sp_Func.rawdelete(OldConfig["閲嶇疆鎵鏈変换鍔¢亾鍏稩D"].tointeger()); + + //閲嶆柊娉ㄥ唽 + _Dps_QuestInfo_nangua_Logic_(); +} + +function _Dps_QuestInfo_nangua_Logic_() { + local Cofig = GlobalConfig.Get("浠诲姟鐩稿叧閰嶇疆_鍗楃摐.json"); + // 涓荤嚎浠诲姟瀹屾垚鍒 + Cb_Use_Item_Sp_Func[Cofig["涓荤嚎浠诲姟瀹屾垚鍒搁亾鍏稩D"]] <- clear_all_quest_by_character_level_nangua; + // 鏅氫换鍔″畬鎴愬埜 + Cb_Use_Item_Sp_Func[Cofig["鏅氫换鍔″畬鎴愬埜閬撳叿ID"]] <- clear_all_quest_by_character_level_nangua; + // 鎴愬氨浠诲姟瀹屾垚鍒 + Cb_Use_Item_Sp_Func[Cofig["鎴愬氨浠诲姟瀹屾垚鍒搁亾鍏稩D"]] <- clear_all_quest_by_character_level_nangua; + // 姣忔棩浠诲姟瀹屾垚鍒 + Cb_Use_Item_Sp_Func[Cofig["鎸囧畾姣忔棩浠诲姟瀹屾垚鍒搁亾鍏稩D"]] <- QUEST_ByMRFuncBynangua; + // 姣忔棩浠诲姟閲嶇疆鍒 + Cb_Use_Item_Sp_Func[Cofig["鎸囧畾姣忔棩浠诲姟閲嶇疆鍒搁亾鍏稩D"]] <- QUEST_ByCZMRFuncBynangua; + // 鎵鏈変换鍔¢噸缃埜 + Cb_Use_Item_Sp_Func[Cofig["閲嶇疆鎵鏈変换鍔¢亾鍏稩D"]] <- QUEST_ByALLFuncBynangua; +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗/浠诲姟鐩稿叧閰嶇疆_鍗楃摐.json b/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗/浠诲姟鐩稿叧閰嶇疆_鍗楃摐.json new file mode 100644 index 0000000..b0937b1 --- /dev/null +++ b/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗/浠诲姟鐩稿叧閰嶇疆_鍗楃摐.json @@ -0,0 +1,12 @@ +{ + "涓荤嚎浠诲姟瀹屾垚鍒搁亾鍏稩D":2021458801, + "鏅氫换鍔″畬鎴愬埜閬撳叿ID":2021458802, + "鎴愬氨浠诲姟瀹屾垚鍒搁亾鍏稩D":2021458804, + "閲嶇疆鎵鏈変换鍔¢亾鍏稩D":2021458813, + "鎸囧畾姣忔棩浠诲姟瀹屾垚鍒搁亾鍏稩D":2021458803, + "鎸囧畾姣忔棩浠诲姟閲嶇疆鍒搁亾鍏稩D":20214588091, + "鎸囧畾瀹屾垚姣忔棩浠诲姟ID":[2411, 2412], + "涓荤嚎浠诲姟闇鎺掗櫎浠诲姟ID":[1111111], + "鏅氫换鍔¢渶鎺掗櫎浠诲姟ID":[4443, 7898, 7889, 7895, 7892, 7873, 7876, 7870, 7879, 4065, 4068, 999, 7827, 7817, 7824, 7820, 7834, 7837, 7831, 7840, 4427, 4428, 4429, 4430, 4431, 4432, 4433, 4434, 4435, 7848, 7842, 7845, 7851, 7866, 7855, 7862, 7859, 7814, 7810, 7807, 7803, 7886, 7882, 2708, 2710, 2712, 2702], + "鎴愬氨浠诲姟闇鎺掗櫎浠诲姟ID":[1111111] +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗2/Proj.ifo b/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗2/Proj.ifo new file mode 100644 index 0000000..56e92b0 --- /dev/null +++ b/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗2/Proj.ifo @@ -0,0 +1,12 @@ +{ + "ProjectName": "浠诲姟娓呴櫎鍗2", + "ProjectDescribe": "娓呯悊鍚勭被鍨嬩换鍔′互鍙婇噸缃浉鍏充换鍔,闄や簡7577绫婚亾鍏 涔熷彲浠ヤ娇鐢ㄧぜ鍖呯被閬撳叿瑙﹀彂", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.0, + "ProjectConfig": "浠诲姟鐩稿叧閰嶇疆_2.json", + "ProjectFiles": [ + "浠诲姟娓呴櫎鍗.nut" + ], + "ProjectIcon":"http://103.36.223.176:5244/d/DP_S/logo2.png?sign=aH3AjsyJgmomCqT3To_QfDY6a2RlSI-T3eUmtW0raoA=:0", + "ProjectRunFunc": "_Dps_QuestInfo_nangua_Main_2" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗2/浠诲姟娓呴櫎鍗.nut b/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗2/浠诲姟娓呴櫎鍗.nut new file mode 100644 index 0000000..4009592 --- /dev/null +++ b/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗2/浠诲姟娓呴櫎鍗.nut @@ -0,0 +1,260 @@ +_NG_QUEST_GRADE_COMMON_UNIQUE <- 5 //鏅氫换鍔 +_NG_QUEST_GRADE_EPIC <- 0 //涓荤嚎浠诲姟 +_NG_QUEST_GRADE_ACHIEVEMENT <- 2 //鎴愬氨浠诲姟 + +// 浠诲姟绫诲瀷涓庢帓闄ゅ垪琛ㄧ殑鏄犲皠 +_QUEST_EXCLUDE_MAP2 <- { + [_NG_QUEST_GRADE_COMMON_UNIQUE] = "鏅氫换鍔¢渶鎺掗櫎浠诲姟ID", + [_NG_QUEST_GRADE_ACHIEVEMENT] = "鎴愬氨浠诲姟闇鎺掗櫎浠诲姟ID", + [_NG_QUEST_GRADE_EPIC] = "涓荤嚎浠诲姟闇鎺掗櫎浠诲姟ID" +} + +function clear_all_quest_by_character_level_nangua2(SUser, Date) { + + local Item_id = Date[15].tointeger(); + + if (Date[18] != "3") { + return; + } + + + local Cofig = GlobalConfig.Get("浠诲姟鐩稿叧閰嶇疆_2.json"); + local poolMapping = { + [Cofig["涓荤嚎浠诲姟瀹屾垚鍒搁亾鍏稩D"]] = _NG_QUEST_GRADE_EPIC, + [Cofig["鏅氫换鍔″畬鎴愬埜閬撳叿ID"]] = _NG_QUEST_GRADE_COMMON_UNIQUE, + [Cofig["鎴愬氨浠诲姟瀹屾垚鍒搁亾鍏稩D"]] = _NG_QUEST_GRADE_ACHIEVEMENT + }; + // 鑾峰彇瀵瑰簲鐨則ype + local quest_type = poolMapping[Item_id]; + // 鐜╁浠诲姟淇℃伅 + local user_quest = SUser.GetQuest(); + + // 鐜╁宸插畬鎴愪换鍔′俊鎭 + local WongWork_CQuestClear = NativePointer(user_quest).add(4); + // 鐜╁褰撳墠绛夌骇 + local charac_lv = SUser.GetCharacLevel(); + // 鏈瀹屾垚浠诲姟鏁伴噺 + local clear_quest_cnt = 0; + // 鑾峰彇pvf鏁版嵁 + local data_manager = Sq_CallFunc(S_Ptr("0x80CC19B"), "pointer"); + + // 浣跨敤鍏ㄥ眬鎺掗櫎鍒楄〃 + local exclude_quset_id = _QUEST_EXCLUDE_MAP2.rawin(quest_type) ? Cofig[_QUEST_EXCLUDE_MAP2[quest_type]] : []; + + //瀹屾垚褰撳墠宸叉帴浠诲姟 + for (local i = 0; i< 20; i++) { + // 浠诲姟id + local doing_quest_id = NativePointer(user_quest).add(4 * (i + 7500 + 2)).readInt(); + + if (doing_quest_id > 0) { + // 鑾峰彇褰撳墠浠诲姟鐨勬暟鎹 + local quest = Sq_CallFunc(S_Ptr("0x835FDC6"), "pointer", ["pointer", "int"], data_manager, doing_quest_id); + if (quest) { + // 浠诲姟绫诲瀷 + local quest_grade = NativePointer(quest).add(8).readInt(); + + // 鍒ゆ柇浠诲姟绫诲瀷骞朵笖涓嶅湪鎺掗櫎鍒楄〃涓 + if (quest_grade == quest_type && exclude_quset_id.find(doing_quest_id) == null) { + // 鏃犳潯浠跺畬鎴愪换鍔 + SUser.ClearQuest_Gm(doing_quest_id); + } + } + } + } + + // 閬嶅巻鎵鏈変换鍔D + for (local quest_id = 1; quest_id< 30000; quest_id++) { + // 妫鏌ヤ换鍔℃槸鍚﹀湪鎺掗櫎鍒楄〃涓 + if (exclude_quset_id.find(quest_id) != null) { + continue; + } + + // 璺宠繃宸插畬鎴愮殑浠诲姟 + local isCleared = isClearedQuest(WongWork_CQuestClear.C_Object, quest_id); + if (isCleared) { + continue; + } + + // 鑾峰彇浠诲姟鏁版嵁 + local quest = Sq_CallFunc(S_Ptr("0x835FDC6"), "pointer", ["pointer", "int"], data_manager, quest_id); + if (quest) { + // 浠诲姟绫诲瀷 + local quest_grade = NativePointer(quest).add(8).readInt(); + + if (quest_grade == quest_type) { + // 鍙垽鏂换鍔℃渶浣庣瓑绾ц姹 蹇界暐 鑱屼笟/鍓嶇疆 绛変换鍔¤姹 鍙竴娆℃у畬鎴愬綋鍓嶇瓑绾ф墍鏈変换鍔 + local quest_min_lv = NativePointer(quest).add(0x20).readInt(); + + if (quest_min_lv <= charac_lv) { + Sq_CallFunc(S_Ptr("0x808BA78"), "int", ["pointer", "int"], WongWork_CQuestClear.C_Object, quest_id); + + // 鏈鑷姩瀹屾垚浠诲姟璁℃暟 + clear_quest_cnt++; + } + } + } + } + + // 閫氱煡瀹㈡埛绔洿鏂 + if (clear_quest_cnt > 0) { + local Pack = Packet(); + Sq_CallFunc(S_Ptr("0x868B044"), "int", ["pointer"], SUser.C_Object); + Sq_CallFunc(S_Ptr("0x86ABBA8"), "int", ["pointer", "pointer"], user_quest, Pack.C_Object); + SUser.Send(Pack); + Pack.Delete(); + // 鍏憡閫氱煡瀹㈡埛绔湰娆¤嚜鍔ㄥ畬鎴愪换鍔℃暟鎹 + SUser.SendNotiPacketMessage("宸茶嚜鍔ㄥ畬鎴愬綋鍓嶇瓑绾т换鍔℃暟閲: " + clear_quest_cnt, 8); + } else { + SUser.SendNotiPacketMessage("娌℃湁鍙竻鐞嗙殑浠诲姟", 8); + } +} + +//鎸囧畾姣忔棩浠诲姟瀹屾垚鍒 +function QUEST_ByMRFuncBynangua2(SUser, Date) { + + local ItemId = Date[15].tointeger(); + + if (Date[18] != "3") { + return; + } + local Cofig = GlobalConfig.Get("浠诲姟鐩稿叧閰嶇疆_2.json"); + // 鐜╁宸插畬鎴愪换鍔′俊鎭 + local user_quest = SUser.GetQuest(); + local WongWork_CQuestClear = NativePointer(user_quest).add(4); + + // 鏄惁鏈変换鍔″凡琚竻鐞 + local anyTaskCleared = false; + + // 閬嶅巻骞跺畬鎴愭瘡涓涓换鍔 + for (local i = 0; i< Cofig["鎸囧畾瀹屾垚姣忔棩浠诲姟ID"].len(); i++) { + local quest_id = Cofig["鎸囧畾瀹屾垚姣忔棩浠诲姟ID"][i]; + local isCleared = isClearedQuest(WongWork_CQuestClear.C_Object, quest_id); + + if (isCleared) { + continue; + } else { + SUser.ClearQuest_Gm(quest_id); + anyTaskCleared = true; + } + } + + if (anyTaskCleared) { + SUser.SendNotiPacketMessage("鎸囧畾姣忔棩浠诲姟宸插畬鎴!", 8); + } else { + SUser.SendNotiPacketMessage("娌℃湁鍙竻鐞嗙殑浠诲姟", 8); + } +} + +//鎸囧畾姣忔棩浠诲姟閲嶇疆鍒 +function QUEST_ByCZMRFuncBynangua2(SUser, Date) { + local ItemId = Date[15].tointeger(); + + if (Date[18] != "3") { + return; + } + local Cofig = GlobalConfig.Get("浠诲姟鐩稿叧閰嶇疆_2.json"); + // 鐜╁宸插畬鎴愪换鍔′俊鎭 + local user_quest = SUser.GetQuest(); + local WongWork_CQuestClear = NativePointer(user_quest).add(4); + + // 鏄惁鏈変换鍔¤閲嶇疆 + local anyTaskReset = false; + + // 閬嶅巻骞堕噸缃瘡涓涓换鍔 + for (local i = 0; i< Cofig["鎸囧畾瀹屾垚姣忔棩浠诲姟ID"].len(); i++) { + local quest_id = Cofig["鎸囧畾瀹屾垚姣忔棩浠诲姟ID"][i]; + local isCleared = isClearedQuest(WongWork_CQuestClear.C_Object, quest_id); + + if (!isCleared) { + continue; + } else { + Sq_CallFunc(S_Ptr("0x808BAAC"), "int", ["pointer", "int"], WongWork_CQuestClear.C_Object, quest_id); + anyTaskReset = true; + } + } + + if (anyTaskReset) { + //閫氱煡瀹㈡埛绔洿鏂颁换鍔″垪琛 + Sq_CallFunc(S_Ptr("0x868B044"), "int", ["pointer"], SUser.C_Object); + local Pack = Packet(); + Sq_CallFunc(S_Ptr("0x86ABBA8"), "int", ["pointer", "pointer"], user_quest, Pack.C_Object); + SUser.Send(Pack); + Pack.Delete(); + SUser.SendNotiPacketMessage("鎸囧畾姣忔棩浠诲姟宸查噸缃!", 8); + } else { + SUser.SendNotiPacketMessage("娌℃湁鍙噸缃殑浠诲姟", 8); + } +} + +//閲嶇疆鎵鏈変换鍔′负鏈畬鎴愮姸鎬 +function QUEST_ByALLFuncBynangua2(SUser, Date) { + local ItemId = Date[15].tointeger(); + + if (Date[18] != "3") { + return; + } + local GetState = SUser.GetState() + local user_quest = SUser.GetQuest(); + local WongWork_CQuestClear = NativePointer(user_quest).add(4); + //娓呯┖宸叉帴浠诲姟鍒楄〃 + for (local i = 0; i< 20; i++) { + NativePointer(user_quest).add(4 * (i + 7500 + 2)).writeInt(0); + } + //鎵鏈変换鍔¤缃湭瀹屾垚鐘舵 + for (local i = 0; i< 29999; i++) { + Sq_CallFunc(S_Ptr("0x808BAAC"), "int", ["pointer", "int"], WongWork_CQuestClear.C_Object, i); + } + //閫氱煡瀹㈡埛绔洿鏂颁换鍔″垪琛 + Sq_CallFunc(S_Ptr("0x868B044"), "int", ["pointer"], SUser.C_Object); + local Pack = Packet(); + Sq_CallFunc(S_Ptr("0x86ABBA8"), "int", ["pointer", "pointer"], user_quest, Pack.C_Object); + SUser.Send(Pack); + Pack.Delete(); + SUser.SendNotiPacketMessage("鎵鏈変换鍔″凡閲嶇疆!", 8); +} + +function isClearedQuest(C_Object, questID) { + return Sq_CallFunc(S_Ptr("0x808BAE0"), "bool", ["pointer", "int"], C_Object, questID); +} + +//鍔犺浇鍏ュ彛 +function _Dps_QuestInfo_nangua_Main_2() { + _Dps_QuestInfo_nangua_Logic_2(); +} + +//閲嶈浇鍏ュ彛 +function _Dps_QuestInfo_nangua_Main_Reload_2(OldConfig) { + +} + +function _Dps_QuestInfo_nangua_Logic_2() { + local Cofig = GlobalConfig.Get("浠诲姟鐩稿叧閰嶇疆_2.json"); + // 涓荤嚎浠诲姟瀹屾垚鍒 + Cb_History_ItemDown_Func["浠诲姟瀹屾垚鍒"] <- Cb_History_ItemDown_FuncMapRW; +} + + +function Cb_History_ItemDown_FuncMapRW(SUser, Date) { + local Cofig = GlobalConfig.Get("浠诲姟鐩稿叧閰嶇疆_2.json"); + + switch (Date[15].tointeger()) { + case Cofig["涓荤嚎浠诲姟瀹屾垚鍒搁亾鍏稩D"]: + clear_all_quest_by_character_level_nangua2(SUser, Date); + break; + case Cofig["鏅氫换鍔″畬鎴愬埜閬撳叿ID"]: + clear_all_quest_by_character_level_nangua2(SUser, Date); + break; + case Cofig["鎴愬氨浠诲姟瀹屾垚鍒搁亾鍏稩D"]: + clear_all_quest_by_character_level_nangua2(SUser, Date); + break; + case Cofig["鎸囧畾姣忔棩浠诲姟瀹屾垚鍒搁亾鍏稩D"]: + QUEST_ByMRFuncBynangua2(SUser, Date); + break; + case Cofig["鎸囧畾姣忔棩浠诲姟閲嶇疆鍒搁亾鍏稩D"]: + QUEST_ByCZMRFuncBynangua2(SUser, Date); + break; + case Cofig["閲嶇疆鎵鏈変换鍔¢亾鍏稩D"]: + QUEST_ByALLFuncBynangua2(SUser, Date); + break; + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗2/浠诲姟鐩稿叧閰嶇疆_2.json b/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗2/浠诲姟鐩稿叧閰嶇疆_2.json new file mode 100644 index 0000000..b0937b1 --- /dev/null +++ b/绀轰緥椤圭洰/浠诲姟娓呴櫎鍗2/浠诲姟鐩稿叧閰嶇疆_2.json @@ -0,0 +1,12 @@ +{ + "涓荤嚎浠诲姟瀹屾垚鍒搁亾鍏稩D":2021458801, + "鏅氫换鍔″畬鎴愬埜閬撳叿ID":2021458802, + "鎴愬氨浠诲姟瀹屾垚鍒搁亾鍏稩D":2021458804, + "閲嶇疆鎵鏈変换鍔¢亾鍏稩D":2021458813, + "鎸囧畾姣忔棩浠诲姟瀹屾垚鍒搁亾鍏稩D":2021458803, + "鎸囧畾姣忔棩浠诲姟閲嶇疆鍒搁亾鍏稩D":20214588091, + "鎸囧畾瀹屾垚姣忔棩浠诲姟ID":[2411, 2412], + "涓荤嚎浠诲姟闇鎺掗櫎浠诲姟ID":[1111111], + "鏅氫换鍔¢渶鎺掗櫎浠诲姟ID":[4443, 7898, 7889, 7895, 7892, 7873, 7876, 7870, 7879, 4065, 4068, 999, 7827, 7817, 7824, 7820, 7834, 7837, 7831, 7840, 4427, 4428, 4429, 4430, 4431, 4432, 4433, 4434, 4435, 7848, 7842, 7845, 7851, 7866, 7855, 7862, 7859, 7814, 7810, 7807, 7803, 7886, 7882, 2708, 2710, 2712, 2702], + "鎴愬氨浠诲姟闇鎺掗櫎浠诲姟ID":[1111111] +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/淇鍗PC鍟嗗簵閬撳叿/Proj.ifo b/绀轰緥椤圭洰/淇鍗PC鍟嗗簵閬撳叿/Proj.ifo new file mode 100644 index 0000000..0e87ba0 --- /dev/null +++ b/绀轰緥椤圭洰/淇鍗PC鍟嗗簵閬撳叿/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "淇鍗PC鍟嗗簵閬撳叿", + "ProjectDescribe": "淇浜嗗鎴风閫氳繃BUG鍗PC鍟嗗簵閬撳叿鐨勯棶棰", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.0, + "ProjectConfig": "", + "ProjectFiles": [ + "淇鍗PC鍟嗗簵閬撳叿.nut" + ], + "ProjectRunFunc": "_Dps_RepairCardNpcStoreProps_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/淇鍗PC鍟嗗簵閬撳叿/淇鍗PC鍟嗗簵閬撳叿.nut b/绀轰緥椤圭洰/淇鍗PC鍟嗗簵閬撳叿/淇鍗PC鍟嗗簵閬撳叿.nut new file mode 100644 index 0000000..5751ac7 --- /dev/null +++ b/绀轰緥椤圭洰/淇鍗PC鍟嗗簵閬撳叿/淇鍗PC鍟嗗簵閬撳叿.nut @@ -0,0 +1,12 @@ + + + +function _Dps_RepairCardNpcStoreProps_Main_() +{ + Cb_BuyItem_Get_Data_Leave_Func["_DPS_RepairCardNpcStoreProps_"] <- function (args) + { + if(NativePointer(args[3]).add(156).readInt() < 0){ + return 10; + } + } +} diff --git a/绀轰緥椤圭洰/鍏ㄨ亴涓氶氱敤杞亴涔/Proj.ifo b/绀轰緥椤圭洰/鍏ㄨ亴涓氶氱敤杞亴涔/Proj.ifo new file mode 100644 index 0000000..97a912f --- /dev/null +++ b/绀轰緥椤圭洰/鍏ㄨ亴涓氶氱敤杞亴涔/Proj.ifo @@ -0,0 +1,12 @@ +{ + "ProjectName": "鍏ㄨ亴涓氶氱敤杞亴涔", + "ProjectDescribe": "鍏ㄨ亴涓氶兘鍙敤鐨勮浆鑱屼功銆傛瘡涓浆鑱岃亴涓氭槸涓暟缁,鍙互鍐欏涓浆鑱屽嵎缂栧彿锛屼豢鐓7577鐨勯亾鍏风被鍨嬪嵆鍙紝浣跨敤\",\"闅斿紑銆", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.0, + "ProjectConfig": "", + "ProjectConfig": "鍏ㄨ亴涓氶氱敤杞亴涔Lenheart.json", + "ProjectFiles": [ + "鍏ㄨ亴涓氶氱敤杞亴涔.nut" + ], + "ProjectRunFunc": "_Dps_GeneralJobTransferCertificateForAllProfessions_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍏ㄨ亴涓氶氱敤杞亴涔/鍏ㄨ亴涓氶氱敤杞亴涔.nut b/绀轰緥椤圭洰/鍏ㄨ亴涓氶氱敤杞亴涔/鍏ㄨ亴涓氶氱敤杞亴涔.nut new file mode 100644 index 0000000..2e06747 --- /dev/null +++ b/绀轰緥椤圭洰/鍏ㄨ亴涓氶氱敤杞亴涔/鍏ㄨ亴涓氶氱敤杞亴涔.nut @@ -0,0 +1,50 @@ +/* +鏂囦欢鍚:鍏ㄨ亴涓氶氱敤杞亴涔.nut +璺緞:OfficialProject/鍏ㄨ亴涓氶氱敤杞亴涔/鍏ㄨ亴涓氶氱敤杞亴涔.nut +鍒涘缓鏃ユ湡:2025-10-24 22:26 +鏂囦欢鐢ㄩ: +*/ + +//閲嶈浇鍏ュ彛 +function _Dps_GeneralJobTransferCertificateForAllProfessions_Main_Reload_(OldConfig) { + //鍏堥攢姣佸師鏉ユ敞鍐岀殑 + local JobArr = []; + JobArr.push(GlobalConfig["杞亴鍒濆鑱屼笟"]); + JobArr.push(GlobalConfig["杞亴绗竴鑱屼笟"]); + JobArr.push(GlobalConfig["杞亴绗簩鑱屼笟"]); + JobArr.push(GlobalConfig["杞亴绗笁鑱屼笟"]); + JobArr.push(GlobalConfig["杞亴绗洓鑱屼笟"]); + JobArr.push(GlobalConfig["杞亴绗簲鑱屼笟"]); + + foreach(Index, arr in JobArr) { + foreach(ItemId in arr) { + if (Cb_Use_Item_Sp_Func.rawin(ItemId)) Cb_Use_Item_Sp_Func.rawdelete(ItemId); + } + } + + //閲嶆柊娉ㄥ唽 + _Dps_GeneralJobTransferCertificateForAllProfessions_Main_(); +} + +function _Dps_GeneralJobTransferCertificateForAllProfessions_Main_() { + local Config = GlobalConfig.Get("鍏ㄨ亴涓氶氱敤杞亴涔Lenheart.json"); + local JobArr = []; + JobArr.push(Config["杞亴鍒濆鑱屼笟"]); + JobArr.push(Config["杞亴绗竴鑱屼笟"]); + JobArr.push(Config["杞亴绗簩鑱屼笟"]); + JobArr.push(Config["杞亴绗笁鑱屼笟"]); + JobArr.push(Config["杞亴绗洓鑱屼笟"]); + JobArr.push(Config["杞亴绗簲鑱屼笟"]); + + + + foreach(Index, arr in JobArr) { + foreach(ItemId in arr) { + Cb_Use_Item_Sp_Func[ItemId] <- function(SUser, ItemId) { + SUser.ChangeGrowType(Index, 0); + SUser.SendNotiPacket(0, 2, 0); + SUser.InitSkillW(0, 0); + } + } + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍏ㄨ亴涓氶氱敤杞亴涔/鍏ㄨ亴涓氶氱敤杞亴涔Lenheart.json b/绀轰緥椤圭洰/鍏ㄨ亴涓氶氱敤杞亴涔/鍏ㄨ亴涓氶氱敤杞亴涔Lenheart.json new file mode 100644 index 0000000..6573fc7 --- /dev/null +++ b/绀轰緥椤圭洰/鍏ㄨ亴涓氶氱敤杞亴涔/鍏ㄨ亴涓氶氱敤杞亴涔Lenheart.json @@ -0,0 +1,8 @@ +{ + "杞亴鍒濆鑱屼笟":[7577], + "杞亴绗竴鑱屼笟":[7577], + "杞亴绗簩鑱屼笟":[7577], + "杞亴绗笁鑱屼笟":[7577], + "杞亴绗洓鑱屼笟":[7577], + "杞亴绗簲鑱屼笟":[7577] +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍓湰浣跨敤閬撳叿濂栧姳/Proj.ifo b/绀轰緥椤圭洰/鍓湰浣跨敤閬撳叿濂栧姳/Proj.ifo new file mode 100644 index 0000000..52fa7b9 --- /dev/null +++ b/绀轰緥椤圭洰/鍓湰浣跨敤閬撳叿濂栧姳/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鍓湰浣跨敤閬撳叿濂栧姳", + "ProjectDescribe": "鐗瑰畾鍓湰浣跨敤鐗瑰畾閬撳叿浼氳繑杩樿嚜瀹氫箟鐨勫鍔", + "ProjectAuthor": "鑷冲皻 & 鍊炬唱瀵", + "ProjectVersion": 1.0, + "ProjectConfig": "鍓湰浣跨敤閬撳叿濂栧姳.json", + "ProjectFiles": [ + "鍓湰浣跨敤閬撳叿濂栧姳.nut" + ], + "ProjectRunFunc": "_Dps_ReturnDuplicateItems_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍓湰浣跨敤閬撳叿濂栧姳/鍓湰浣跨敤閬撳叿濂栧姳.json b/绀轰緥椤圭洰/鍓湰浣跨敤閬撳叿濂栧姳/鍓湰浣跨敤閬撳叿濂栧姳.json new file mode 100644 index 0000000..8299a5f --- /dev/null +++ b/绀轰緥椤圭洰/鍓湰浣跨敤閬撳叿濂栧姳/鍓湰浣跨敤閬撳叿濂栧姳.json @@ -0,0 +1,7 @@ +{ + "鍓湰杩旇繕閰嶇疆鍒楄〃": [ + [1,1106,3037,10], + [2,1108,3038,10] + ], + "鎻愮ず": "绗竴涓负鍓湰id 绗簩涓负浣跨敤鐨勯亾鍏穒d 绗笁涓负杩旇繕鐨勯亾鍏穒d 绗洓涓负杩旇繕鐨勬暟閲" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍓湰浣跨敤閬撳叿濂栧姳/鍓湰浣跨敤閬撳叿濂栧姳.nut b/绀轰緥椤圭洰/鍓湰浣跨敤閬撳叿濂栧姳/鍓湰浣跨敤閬撳叿濂栧姳.nut new file mode 100644 index 0000000..e56f98a --- /dev/null +++ b/绀轰緥椤圭洰/鍓湰浣跨敤閬撳叿濂栧姳/鍓湰浣跨敤閬撳叿濂栧姳.nut @@ -0,0 +1,32 @@ + +function _Dps_ReturnDuplicateItems_Main_() { + local Config = GlobalConfig.Get("鍓湰浣跨敤閬撳叿濂栧姳.json"); + //鍒嗚В鍒 + + Cb_History_ItemDown_Func.DWSSSS <- function(user, date) { + + + local itemId = date[15].tointeger(); + + local PartyObj = user.GetParty(); + + if (date[18].tointeger()!= 3) return; + + if (PartyObj) { + local Bfobj = PartyObj.GetBattleField(); + local DgnObj = Bfobj.GetDgn(); + + if (DgnObj) { + local Dungeon_Id = DgnObj.GetId(); + local FBSYDJ = Config["鍓湰杩旇繕閰嶇疆鍒楄〃"]; + foreach(ints in FBSYDJ) { + + if (ints[0] == Dungeon_Id && itemId == ints[1]) { + + user.GiveItem(ints[2].tointeger(), ints[3].tointeger()); + } + } + } + } + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍓湰鍐呯姝涪寮冪墿鍝/Proj.ifo b/绀轰緥椤圭洰/鍓湰鍐呯姝涪寮冪墿鍝/Proj.ifo new file mode 100644 index 0000000..1ded3cc --- /dev/null +++ b/绀轰緥椤圭洰/鍓湰鍐呯姝涪寮冪墿鍝/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鍓湰鍐呯姝涪寮冪墿鍝", + "ProjectDescribe": "鍓湰鍐呯姝涪寮冪墿鍝佸強閲戝竵", + "ProjectAuthor": "鍊炬唱瀵&鍗楃摐", + "ProjectVersion": 1.0, + "ProjectConfig": "", + "ProjectFiles": [ + "鍓湰鍐呯姝涪寮冪墿鍝.nut" + ], + "ProjectRunFunc": "_Dps_DgnCannotDropItem_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍓湰鍐呯姝涪寮冪墿鍝/鍓湰鍐呯姝涪寮冪墿鍝.nut b/绀轰緥椤圭洰/鍓湰鍐呯姝涪寮冪墿鍝/鍓湰鍐呯姝涪寮冪墿鍝.nut new file mode 100644 index 0000000..e3dddb3 --- /dev/null +++ b/绀轰緥椤圭洰/鍓湰鍐呯姝涪寮冪墿鍝/鍓湰鍐呯姝涪寮冪墿鍝.nut @@ -0,0 +1,27 @@ +Cb_DropItem_check_error_Enter_Func.Rindro <- function(args){ + getroottable()._EmptyHook_Flag_ = true; + args[1] = getroottable()._EmptyCharacInfo_Flag_.C_Object; + return args; +} +Cb_DropItem_check_error_Leave_Func.Rindro <- function(args){ + if(getroottable()._EmptyHook_Flag_){ + getroottable()._EmptyHook_Flag_ = false; + return 19; + } +} + +function _Dps_DgnCannotDropItem_Main_() { + _Jump_DropItem_check_error_(); +} + +function _Jump_DropItem_check_error_() { + //濡傛灉娌℃湁鍒涘缓杩囪繖涓ā鎷熷唴瀛樺氨鍒涘缓 + if(!getroottable().rawin("_EmptyCharacInfo_Flag_")){ + getroottable()._EmptyCharacInfo_Flag_ <- Memory.alloc(17); + Memory.reset(getroottable()._EmptyCharacInfo_Flag_,17); + } + //濡傛灉娌℃湁鍒涘缓杩囪繖涓烦杞現lag灏卞垱寤哄苟鍒濆鍖 + if(!getroottable().rawin("_EmptyHook_Flag_")){ + getroottable()._EmptyHook_Flag_ <- false; + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍓湰鎾姤/Proj.ifo b/绀轰緥椤圭洰/鍓湰鎾姤/Proj.ifo new file mode 100644 index 0000000..10b7e01 --- /dev/null +++ b/绀轰緥椤圭洰/鍓湰鎾姤/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鍓湰鎾姤", + "ProjectDescribe": "閫氬叧鍙婃湭閫氬叧鏃舵挱鎶ヨ楁椂鏃堕暱", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.3, + "ProjectConfig": "鍓湰鎾姤閰嶇疆_Nangua.json", + "ProjectFiles": [ + "鍓湰鎾姤.nut" + ], + "ProjectRunFunc": "_Dps_send_dungeon_msg_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍓湰鎾姤/鍓湰鎾姤.nut b/绀轰緥椤圭洰/鍓湰鎾姤/鍓湰鎾姤.nut new file mode 100644 index 0000000..6737e20 --- /dev/null +++ b/绀轰緥椤圭洰/鍓湰鎾姤/鍓湰鎾姤.nut @@ -0,0 +1,227 @@ +dungeon_cleared <- {}; +dungeon_cache <- {}; +function _Dps_send_dungeon_msg_Main_() { + //杩涘叆鍓湰鍔犺浇瀹屾瘯鏃 + Cb_Party_OnStartMapFinishLoading_Enter_Func.EnterStartMapByNangua <- function(args) { + local Cofig = GlobalConfig.Get("鍓湰鎾姤閰嶇疆_Nangua.json"); + local PartyObj = Party(args[0]); + + if(!PartyObj || !Cofig["鍓湰鎾姤寮鍏(true寮鍚,false鍏抽棴)"]) + return + for (local i = 0; i < 4; ++i) { + local SUser = PartyObj.GetUser(i); + if (SUser) { + if (Cofig["鎸囧畾瑙掕壊CID涓嶆挱鎶"].find(SUser.GetCID()) != null && _clear_dgn_Bynangua.CParty_get_member_count(PartyObj.C_Object) < 2) { + return; + } + if(SUser.GetCID() in dungeon_cache){ + dungeon_cache.rawdelete(SUser.GetCID()); + } + dungeon_cleared[SUser.GetCID()] <- false; // 杩涘叆鍓湰鏃跺垵濮嬪寲鏍囧織涓烘湭閫氬叧 + + local Bfobj = PartyObj.GetBattleField(); + local DgnObj = Bfobj.GetDgn(); + local DgnID = DgnObj.GetId(); + local Dungeon_Name = DgnObj.GetName(); + local dungeon_type = NativePointer(Bfobj.C_Object).add(460).readU8(); // 0 涓烘櫘閫氬壇鏈紝1 涓洪潪甯稿洶闅炬繁娓婏紝2 涓哄洶闅炬繁娓 + local dungeon_diff = Sq_CallFunc(S_Ptr("0x080F981C"), "int", ["pointer"], Bfobj.C_Object); // 鑾峰彇鍓湰闅惧害 + local diff_name = Cofig["鍓湰闅惧害鍛藉悕"][(dungeon_diff).tostring()]; // 鑾峰彇鍓湰闅惧害鍚嶇О + local dgntypeName = _clear_dgn_Bynangua.DungeonType[(dungeon_type).tostring()]; + + local DgnData = { + "entered": true, + "Dungeon_Name": Dungeon_Name, + "dgntypeName": dgntypeName, + "diff_name": diff_name, + "totalTime": 0, + "HellParty_time_recorded": false, + "last_HellParty_time": 0, + "is_HellParty_room": false + }; + //浠ヨ鑹睮D涓洪敭璁板綍鍓湰淇℃伅 + dungeon_cache[SUser.GetCID()] <- DgnData; + } + } + } + + //娓呯悊鎴块棿瀹屾瘯鏃 + Cb_Battle_Field_onClearMap_Leave_Func.onClearMapByNangua <- function(args) { + local Cofig = GlobalConfig.Get("鍓湰鎾姤閰嶇疆_Nangua.json"); + local retval = args.pop(); + local CBattle_Field = args[0]; + local PartyObj = Party(NativePointer(CBattle_Field).add(-2852).C_Object); + if(!PartyObj) + return + local DgnId = NativePointer(args[0]).add(404).readInt(); + if (!Cofig["鍓湰鎾姤寮鍏(true寮鍚,false鍏抽棴)"]) { + return; + } + if (retval == DgnId) { + for (local i = 0; i < 4; ++i) { + local SUser = PartyObj.GetUser(i); + if (SUser) { + if (dungeon_cache.rawin(SUser.GetCID()) && dungeon_cache[SUser.GetCID()].rawin("entered")) { + local time = Sq_CallFunc(S_Ptr("0x085B6768"), "int", ["pointer"], PartyObj.C_Object); + if (!dungeon_cache[SUser.GetCID()]["is_HellParty_room"]) { + dungeon_cache[SUser.GetCID()]["totalTime"] += time; + } else { + dungeon_cache[SUser.GetCID()]["is_HellParty_room"] = false; + } + } + } + } + } + } + + //鏀惧純鍓湰鎴栨湭閫氬叧鍓湰鏃 + Cb_Party_giveup_game_Enter_Func.giveupByNangua <- function(args) { + local Cofig = GlobalConfig.Get("鍓湰鎾姤閰嶇疆_Nangua.json"); + local PartyObj = Party(args[0]); + local killcount = Sq_CallFunc(S_Ptr("0x085BF456"), "int", ["pointer"], NativePointer(args[0]).add(812).C_Object); + if (!PartyObj) return; + if (!Cofig["鍓湰鎾姤寮鍏(true寮鍚,false鍏抽棴)"]) return; + local SUser = User(args[1]); + local Party_Master = PartyObj.GetMaster(); + local MasterName = Party_Master.GetCharacName(); + local formattedTime = ""; + local DgnId = NativePointer(args[0]).add(814 * 4).readInt(); + local name = SUser.GetCharacName(); + + // 濡傛灉鍓湰ID涓嶅湪鍏佽鎾姤鐨勬暟缁勫唴鍒欒烦鍑 + if (Cofig["涓嶉渶瑕佹挱鎶ョ殑鍓湰ID(瀹炰緥涓殑ID涓烘墿鏀诲煄鐨勫壇鏈琁D灏介噺涓嶈鍒)"].find(DgnId) != null) { + return; + } + + if (SUser.GetCID() in dungeon_cache) { + local dungeonInfo = dungeon_cache[SUser.GetCID()]; + local dgnTypeName = dungeonInfo["dgntypeName"]; + local dungeonName = dungeonInfo["Dungeon_Name"]; + local diffName = dungeonInfo["diff_name"]; + local totalTime = 0; + if (dungeon_cache.rawin(SUser.GetCID()) && dungeon_cache[SUser.GetCID()].rawin("totalTime")) { + totalTime = dungeon_cache[SUser.GetCID()]["totalTime"]; + formattedTime = _clear_dgn_Bynangua.formatMilliseconds(totalTime); + } + if (dungeon_cleared.rawin(SUser.GetCID()) && dungeon_cleared[SUser.GetCID()] == true) { + dungeon_cache.rawdelete(SUser.GetCID()); + dungeon_cleared[SUser.GetCID()] <- false; + } else { + // 鍙戦佹湭閫氬叧淇℃伅 + if (totalTime == 0) { + World.SendNotiPacketMessage(format(Cofig["鏈氳繃涓涓皬鍦板浘鎾姤淇℃伅"], name, dgnTypeName, dungeonName, diffName, killcount), Cofig["鍙戦佷俊鎭綅缃"]); + } else if (MasterName == SUser.GetCharacName()) { + World.SendNotiPacketMessage(format(Cofig["鏀惧純鍓湰"], name, dgnTypeName, dungeonName, diffName, formattedTime, killcount), Cofig["鍙戦佷俊鎭綅缃"]); + } else { + World.SendNotiPacketMessage(format(Cofig["鍦ㄩ槦浼嶄腑鎻愬墠閫鍑哄壇鏈"], name, MasterName, dgnTypeName, dungeonName, diffName, formattedTime, killcount), Cofig["鍙戦佷俊鎭綅缃"]) + } + dungeon_cache.rawdelete(SUser.GetCID()); + } + } + } + + Cb_Field_KillHellPartyGroupMonsterCnt_Leave_Func.KillHellPartyGroupMonsterCntByNangua <- function(args){ + local Cofig = GlobalConfig.Get("鍓湰鎾姤閰嶇疆_Nangua.json"); + local CBattle_Field = args[0]; + local PartyObj = Party(NativePointer(CBattle_Field).add(-2852).C_Object); + if(!PartyObj) + return + if (!Cofig["鍓湰鎾姤寮鍏(true寮鍚,false鍏抽棴)"]) { + return; + } + local time = Sq_CallFunc(S_Ptr("0x085B6768"), "int", ["pointer"], PartyObj.C_Object); + local CBattle_Field_IsKilledAllHellGruoups = Sq_CallFunc(S_Ptr("0x085BF250"), "int", ["pointer"], CBattle_Field); + for (local i = 0; i < 4; ++i) { + local SUser = PartyObj.GetUser(i); + if (SUser) { + if (dungeon_cache.rawin(SUser.GetCID()) && dungeon_cache[SUser.GetCID()].rawin("entered")) { + dungeon_cache[SUser.GetCID()]["is_HellParty_room"] = true; + if (CBattle_Field_IsKilledAllHellGruoups == 1) { + dungeon_cache[SUser.GetCID()]["HellParty_time_recorded"] <- true; + dungeon_cache[SUser.GetCID()]["last_HellParty_time"] = time; + dungeon_cache[SUser.GetCID()]["totalTime"] += time; + } + } + } + } + } + + //閫氬叧鍓湰鏃 + Cb_CParty_SetBestClearTime_Enter_Func.ClearTimeByNangua <- function (args) { + local Cofig = GlobalConfig.Get("鍓湰鎾姤閰嶇疆_Nangua.json"); + local PartyObj = Party(args[0]); + local killcount = Sq_CallFunc(S_Ptr("0x085BF456"), "int", ["pointer"], NativePointer(args[0]).add(812).C_Object); + if(!PartyObj || !Cofig["鍓湰鎾姤寮鍏(true寮鍚,false鍏抽棴)"]) + return + local dungeon_diff = args[2]; + local clearTime = args[3]; + local Bfobj = PartyObj.GetBattleField(); + local DgnObj = Bfobj.GetDgn(); + local diff_name = Cofig["鍓湰闅惧害鍛藉悕"][(dungeon_diff).tostring()]; + if (DgnObj) { + local Dungeon_Name = DgnObj.GetName(); + local MemberNames = []; + for (local i = 0; i < 4; ++i) { + local SUser = PartyObj.GetUser(i); + if (SUser) { + if (Cofig["鎸囧畾瑙掕壊CID涓嶆挱鎶"].find(SUser.GetCID()) != null && _clear_dgn_Bynangua.CParty_get_member_count(PartyObj.C_Object) < 2) { + return; + } + local name = SUser.GetCharacName(); + MemberNames.append(name); + dungeon_cleared[SUser.GetCID()] <- true; + } + } + + local joinedNames = _clear_dgn_Bynangua.join(MemberNames, ", "); + local time = _clear_dgn_Bynangua.formatMilliseconds(clearTime); + World.SendNotiPacketMessage(format(Cofig["閫氬叧鎾姤淇℃伅"], joinedNames, Dungeon_Name, diff_name, time, killcount), Cofig["鍙戦佷俊鎭綅缃"]); + for (local i = 0; i < 4; ++i) { + local TUser = PartyObj.GetUser(i); + if (TUser) { + local CID = TUser.GetCID(); + if (CID) { + dungeon_cache.rawdelete(CID); + } + } + } + } + } +} + +class _clear_dgn_Bynangua { + DungeonType = { + "0": "", + "1": "闈炲父鍥伴毦绾ф繁娓-", + "2": "鍥伴毦绾ф繁娓-", + }; + + function join(array, delimiter) { + local result = ""; + for (local i = 0; i < array.len(); ++i) { + if (i > 0) { + result += delimiter; + } + result += array[i]; + } + return result; + } + function formatMilliseconds(ms) { + local str = ""; + local minutes = ms / 60000; + local seconds = (ms % 60000) / 1000; + local milliseconds = (ms % 1000) / 10; + if (minutes > 0) { + str = minutes + "鍒" + + (seconds < 10 ? "0" : "") + seconds + "绉" + + (milliseconds < 10 ? "0" : "") + milliseconds; + } else { + str = seconds + "绉" + + (milliseconds < 10 ? "0" : "") + milliseconds; + } + return str; + } + function CParty_get_member_count(C_Object) { + return Sq_CallFunc(S_Ptr("0x0859A16A"), "int", ["pointer"], C_Object); + } +} + diff --git a/绀轰緥椤圭洰/鍓湰鎾姤/鍓湰鎾姤閰嶇疆_Nangua.json b/绀轰緥椤圭洰/鍓湰鎾姤/鍓湰鎾姤閰嶇疆_Nangua.json new file mode 100644 index 0000000..52def23 --- /dev/null +++ b/绀轰緥椤圭洰/鍓湰鎾姤/鍓湰鎾姤閰嶇疆_Nangua.json @@ -0,0 +1,18 @@ +{ + "鍓湰鎾姤寮鍏(true寮鍚,false鍏抽棴)":true, + "涓嶉渶瑕佹挱鎶ョ殑鍓湰ID(瀹炰緥涓殑ID涓烘墿鏀诲煄鐨勫壇鏈琁D灏介噺涓嶈鍒)":[20002, 20001, 20002, 20003, 20004, 20005, 20006, 20007, 20008, 20009, 20010, 20020, 20021, 20022, 20023, 20024], + "鎸囧畾瑙掕壊CID涓嶆挱鎶":[1111111, 2222222], + "鎻愮ず": "瑙掕壊ID鍙互鏌ョ湅鏁版嵁搴撲腑 taiwan_cain 鈫 charac_info 鈫 charac_no浠h〃瑙掕壊ID", + "閫氬叧鎾姤淇℃伅":"鐜╁[%s]閫氬叧[%s - %s]鐢ㄦ椂:[%s],鍑绘潃鎬墿鏁伴噺<%d>", + "鏈氳繃涓涓皬鍦板浘鎾姤淇℃伅":"鐜╁[%s]鍦╗%s%s-%s]涓繛涓涓湴鍥鹃兘娌¢氳繃,鍑绘潃鎬墿鏁伴噺<%d>", + "鏀惧純鍓湰":"寰堥仐鎲,鐜╁[%s]鍦╗%s%s-%s]涓鎵撶殑钀借崚鑰岄,鐢ㄦ椂: %s,鍑绘潃鎬墿鏁伴噺<%d>", + "鍦ㄩ槦浼嶄腑鎻愬墠閫鍑哄壇鏈":"鐜╁[%s]鍦<%s>鐨勯槦浼嶄腑,鎻愬墠閫鍑轰簡[%s%s-%s],鐢ㄦ椂: %s,鍑绘潃鎬墿鏁伴噺<%d>", + "鍙戦佷俊鎭綅缃":14, + "鍓湰闅惧害鍛藉悕" : { + "0": "鏅氱骇", + "1": "鍐掗櫓绾", + "2": "鍕囧+绾", + "3": "鐜嬭呯骇", + "4": "鍦扮嫳绾" + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍓湰闅惧害瑙i攣鍒/Proj.ifo b/绀轰緥椤圭洰/鍓湰闅惧害瑙i攣鍒/Proj.ifo new file mode 100644 index 0000000..db4ee8d --- /dev/null +++ b/绀轰緥椤圭洰/鍓湰闅惧害瑙i攣鍒/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鍓湰闅惧害瑙i攣鍒", + "ProjectDescribe": "浣跨敤鎸囧畾閬撳叿瑙i攣褰撳墠璐﹀彿鍓湰鎵鏈夐毦搴", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.0, + "ProjectConfig": "鍓湰闅惧害瑙i攣_Nangua.json", + "ProjectFiles": [ + "鍓湰闅惧害瑙i攣鍒.nut" + ], + "ProjectRunFunc": "_Dps_unlock_all_dgn_diff_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍓湰闅惧害瑙i攣鍒/鍓湰闅惧害瑙i攣_Nangua.json b/绀轰緥椤圭洰/鍓湰闅惧害瑙i攣鍒/鍓湰闅惧害瑙i攣_Nangua.json new file mode 100644 index 0000000..f50a2d8 --- /dev/null +++ b/绀轰緥椤圭洰/鍓湰闅惧害瑙i攣鍒/鍓湰闅惧害瑙i攣_Nangua.json @@ -0,0 +1,4 @@ +{ + "瑙i攣鎴愬姛鎻愮ず淇℃伅": "宸插皢璇ヨ处鍙风殑鍓湰闅惧害寮鍚,灏嗚嚜鍔ㄨ繑鍥為夋嫨瑙掕壊鐣岄潰...", + "鍓湰闅惧害瑙i攣鍒搁亾鍏稩D": 7577 +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍓湰闅惧害瑙i攣鍒/鍓湰闅惧害瑙i攣鍒.nut b/绀轰緥椤圭洰/鍓湰闅惧害瑙i攣鍒/鍓湰闅惧害瑙i攣鍒.nut new file mode 100644 index 0000000..e07194d --- /dev/null +++ b/绀轰緥椤圭洰/鍓湰闅惧害瑙i攣鍒/鍓湰闅惧害瑙i攣鍒.nut @@ -0,0 +1,12 @@ +function _Dps_unlock_all_dgn_diff_Main_() { + local Cofig = GlobalConfig.Get("鍓湰闅惧害瑙i攣_Nangua.json"); + Cb_Use_Item_Sp_Func[Cofig["鍓湰闅惧害瑙i攣鍒搁亾鍏稩D"]] <- function(SUser, ItemId) { + local a3 = Memory.allocUtf8String("3"); + Sq_CallFunc(S_Ptr("0x0820BA90"), "int", ["pointer", "int", "pointer"], SUser.C_Object, 120, a3.C_Object); + + Timer.SetTimeOut(function(SUser) { + Sq_CallFunc(S_Ptr("0x8686FEE"), "int", ["pointer", "int"], SUser.C_Object, 1); + }, 1, SUser); + SUser.SendNotiPacketMessage(Cofig["瑙i攣鎴愬姛鎻愮ず淇℃伅"], 8); + } +} diff --git a/绀轰緥椤圭洰/鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏/Proj.ifo b/绀轰緥椤圭洰/鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏/Proj.ifo new file mode 100644 index 0000000..a46ca83 --- /dev/null +++ b/绀轰緥椤圭洰/鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏", + "ProjectDescribe": "鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏", + "ProjectAuthor": "鍑屼紬", + "ProjectVersion": 1.0, + "ProjectConfig": "鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏Lenheart.json", + "ProjectFiles": [ + "鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏.nut" + ], + "ProjectRunFunc": "_Dps_MapNeedItem_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏/鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏.nut b/绀轰緥椤圭洰/鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏/鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏.nut new file mode 100644 index 0000000..5f32d5d --- /dev/null +++ b/绀轰緥椤圭洰/鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏/鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏.nut @@ -0,0 +1,38 @@ + + + + + +function _Dps_MapNeedItem_Main_() { + +// 绂佹杩涘叆鍓湰 +Cb_SelectDungeon_Check_Error_Leave_Func.MapNeedItem <- function (args) { + + + local Config = GlobalConfig.Get("鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏Lenheart.json"); + + local body = Config["鍓湰闇瑕佹寔鏈夐亾鍏锋墠鍏佽杩涘叆"]; + + local SUser = User(args[1]); + + local mapid = NativePointer(args[2]).add(13).readShort(); + if(body.rawin(mapid.tostring())){ + local ItemId = body[mapid.tostring()]; + local PartyObj = SUser.GetParty(); + if (!PartyObj) { + return; + } + for (local i = 0; i < 4; ++i) { + local PSUser = PartyObj.GetUser(i); + if (PSUser) { + local InvenObj = SUser.GetInven(); + local SlotIdx = InvenObj.GetSlotById(ItemId); + if(SlotIdx == -1){ + SUser.SendNotiBox(Config["鍏憡"]+PvfItem.GetNameById(ItemId),1); + return 1; // 绂佹杩涘叆鍓湰 + } + } + } + } +} +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏/鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏Lenheart.json b/绀轰緥椤圭洰/鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏/鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏Lenheart.json new file mode 100644 index 0000000..cf2b3d8 --- /dev/null +++ b/绀轰緥椤圭洰/鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏/鍓湰闇瑕佹寔鏈夐亾鍏疯繘鍏Lenheart.json @@ -0,0 +1,7 @@ +{ + "鍏憡": "缂哄皯杩涘叆鍑瘉:", + "鍓湰闇瑕佹寔鏈夐亾鍏锋墠鍏佽杩涘叆":{ + "65":3037, + "64":3038 + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍙茶瘲鍏嶇‘璁/Proj.ifo b/绀轰緥椤圭洰/鍙茶瘲鍏嶇‘璁/Proj.ifo new file mode 100644 index 0000000..66d1ea4 --- /dev/null +++ b/绀轰緥椤圭洰/鍙茶瘲鍏嶇‘璁/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鍙茶瘲鍏嶇‘璁", + "ProjectDescribe": "鍙茶瘲鍏嶇‘璁", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.1, + "ProjectConfig": "", + "ProjectFiles": [ + "鍙茶瘲鍏嶇‘璁.nut" + ], + "ProjectRunFunc": "_Dps_EpicNoConfirmationRequired_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍙茶瘲鍏嶇‘璁/鍙茶瘲鍏嶇‘璁.nut b/绀轰緥椤圭洰/鍙茶瘲鍏嶇‘璁/鍙茶瘲鍏嶇‘璁.nut new file mode 100644 index 0000000..e0a88b6 --- /dev/null +++ b/绀轰緥椤圭洰/鍙茶瘲鍏嶇‘璁/鍙茶瘲鍏嶇‘璁.nut @@ -0,0 +1,7 @@ +function _Dps_EpicNoConfirmationRequired_Main_() { + NativePointer("0x085A56CE").add(2).writeU8(9); + Cb_CItem_IsRoutingItem_Leave_Func["DPSOFFICIAL"] <- function (args) + { + return 0 + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍙茶瘲鎺夎惤濂栧姳/Proj.ifo b/绀轰緥椤圭洰/鍙茶瘲鎺夎惤濂栧姳/Proj.ifo new file mode 100644 index 0000000..affefe4 --- /dev/null +++ b/绀轰緥椤圭洰/鍙茶瘲鎺夎惤濂栧姳/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鍙茶瘲鎺夎惤濂栧姳", + "ProjectDescribe": "鑾峰彇鎸囧畾鏁伴噺鑾峰緱濂栧姳浠ュ強鎸囧畾閬撳叿鑾峰緱濂栧姳", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.1, + "ProjectConfig": "鍙茶瘲鎺夎惤濂栧姳閰嶇疆_鍗楃摐.json", + "ProjectFiles": [ + "鍙茶瘲鎺夎惤濂栧姳.nut" + ], + "ProjectRunFunc": "_Dps_SSDL_nangua_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍙茶瘲鎺夎惤濂栧姳/鍙茶瘲鎺夎惤濂栧姳.nut b/绀轰緥椤圭洰/鍙茶瘲鎺夎惤濂栧姳/鍙茶瘲鎺夎惤濂栧姳.nut new file mode 100644 index 0000000..cba4e2d --- /dev/null +++ b/绀轰緥椤圭洰/鍙茶瘲鎺夎惤濂栧姳/鍙茶瘲鎺夎惤濂栧姳.nut @@ -0,0 +1,333 @@ +_SpecialItemBynangua <- { + "Rarity4": {}, + "Rarity3": {}, + "Rarity2": {} +} + +function _Dps_SSDL_nangua_Main_() { + //杩涘叆鍓湰 + Cb_History_DungeonEnter_Func.RindroSSEnterByNangua <- function(SUser, Data) { + _SpecialItemBynangua.Rarity4.rawset(SUser.GetCID(), []); + _SpecialItemBynangua.Rarity3.rawset(SUser.GetCID(), []); + _SpecialItemBynangua.Rarity2.rawset(SUser.GetCID(), []); + } + + //绂诲紑鍓湰 + Cb_History_DungeonLeave_Func.RindroSSLeaveByNangua <- function(SUser, Data) { + local Cofig = GlobalConfig.Get("鍙茶瘲鎺夎惤濂栧姳閰嶇疆_鍗楃摐.json"); + local PartyObj = SUser.GetParty(); + if (!PartyObj) return; + local Bfobj = PartyObj.GetBattleField(); + local DgnObj = Bfobj.GetDgn(); + if (DgnObj) { + local Dungeon_Name = DgnObj.GetName(); + + // 澶勭悊鍙茶瘲瑁呭 + if (_SpecialItemBynangua.Rarity4.rawin(SUser.GetCID())) { + local ItemObjS = _SpecialItemBynangua.Rarity4[SUser.GetCID()]; + if (ItemObjS != null && ItemObjS.len() > 0) { + local config = Cofig["濂栧姳鎺у埗"]["澶氫欢SS瀵瑰簲濂栧姳(鍙茶瘲)"]; + local key = ItemObjS.len().tostring(); + if (config.rawin(key)) { + Nangua_SSMSG.SendTitle(SUser, Dungeon_Name, "涓幏寰楀彶璇楄澶"); + foreach(ItemObj in ItemObjS) { + local item_id = ItemObj.GetIndex(); + Nangua_SSMSG.ItemMsg(item_id, ItemObj); + } + Nangua_SSMSG.SendCntMsg(ItemObjS.len()); + Nangua_SSMSG.SendMiddle(); + ProcessRewards(SUser, config[key]); + Nangua_SSMSG.EndMsg(); + } + } + _SpecialItemBynangua.Rarity4.rawset(SUser.GetCID(), []); + } + + // 澶勭悊绁炲櫒瑁呭 + if (_SpecialItemBynangua.Rarity3.rawin(SUser.GetCID())) { + local ItemObjS = _SpecialItemBynangua.Rarity3[SUser.GetCID()]; + if (ItemObjS != null && ItemObjS.len() > 0) { + local config = Cofig["濂栧姳鎺у埗"]["澶氫欢绁炲櫒瀵瑰簲濂栧姳"]; + local key = ItemObjS.len().tostring(); + if (config.rawin(key)) { + Nangua_SSMSG.SendTitle(SUser, Dungeon_Name, "涓幏寰楃鍣ㄨ澶"); + foreach(ItemObj in ItemObjS) { + local item_id = ItemObj.GetIndex(); + Nangua_SSMSG.ItemMsg(item_id, ItemObj); + } + Nangua_SSMSG.SendCntMsg(ItemObjS.len()); + Nangua_SSMSG.SendMiddle(); + ProcessRewards(SUser, config[key]); + Nangua_SSMSG.EndMsg(); + } + } + _SpecialItemBynangua.Rarity3.rawset(SUser.GetCID(), []); + } + + // 澶勭悊绋鏈夎澶 + if (_SpecialItemBynangua.Rarity2.rawin(SUser.GetCID())) { + local ItemObjS = _SpecialItemBynangua.Rarity2[SUser.GetCID()]; + if (ItemObjS != null && ItemObjS.len() > 0) { + local config = Cofig["濂栧姳鎺у埗"]["澶氫欢绋鏈夊搴斿鍔"]; + local key = ItemObjS.len().tostring(); + if (config.rawin(key)) { + Nangua_SSMSG.SendTitle(SUser, Dungeon_Name, "涓幏寰楃█鏈夎澶"); + foreach(ItemObj in ItemObjS) { + local item_id = ItemObj.GetIndex(); + Nangua_SSMSG.ItemMsg(item_id, ItemObj); + } + Nangua_SSMSG.SendCntMsg(ItemObjS.len()); + Nangua_SSMSG.SendMiddle(); + ProcessRewards(SUser, config[key]); + Nangua_SSMSG.EndMsg(); + } + } + _SpecialItemBynangua.Rarity2.rawset(SUser.GetCID(), []); + } + } + } + + Cb_UserHistoryLog_ItemAdd_Enter_Func.ItemAddByNangua <- function(args) { + local Cofig = GlobalConfig.Get("鍙茶瘲鎺夎惤濂栧姳閰嶇疆_鍗楃摐.json"); + local SUser = User(NativePointer(args[0]).readPointer()); + local InvenObj = SUser.GetInven(); + local ItemObj = Item(args[4]); + local type = args[5]; + local PartyObj = SUser.GetParty(); + if (!PartyObj) return; + local Bfobj = PartyObj.GetBattleField(); + local DgnObj = Bfobj.GetDgn(); + if (!DgnObj) return; + local Dungeon_Name = DgnObj.GetName(); + if (!ItemObj) return; + local item_id = ItemObj.GetIndex(); + local ItemType = Sq_CallFunc(S_Ptr("0x085018D2"), "int", ["pointer", "int"], InvenObj.C_Object, item_id); + local pvfitem = PvfItem.GetPvfItemById(item_id); + + // 鍙茶瘲瑁呭璁板綍 + if (pvfitem.GetRarity() == 4 && type == 4 && ItemType == 1 && Cofig["濂栧姳鎺у埗"]["澶氫欢鍙茶瘲濂栧姳鎺у埗寮鍏"]) { + if (!_SpecialItemBynangua.Rarity4.rawin(SUser.GetCID())) { + _SpecialItemBynangua.Rarity4.rawset(SUser.GetCID(), []); + } + _SpecialItemBynangua.Rarity4[SUser.GetCID()].append(ItemObj); + } + // 绁炲櫒瑁呭璁板綍 + else if (pvfitem.GetRarity() == 3 && type == 4 && ItemType == 1 && Cofig["濂栧姳鎺у埗"]["澶氫欢绁炲櫒濂栧姳鎺у埗寮鍏"]) { + if (!_SpecialItemBynangua.Rarity3.rawin(SUser.GetCID())) { + _SpecialItemBynangua.Rarity3.rawset(SUser.GetCID(), []); + } + _SpecialItemBynangua.Rarity3[SUser.GetCID()].append(ItemObj); + } + // 绋鏈夎澶囪褰 + else if (pvfitem.GetRarity() == 2 && type == 4 && ItemType == 1 && Cofig["濂栧姳鎺у埗"]["澶氫欢绋鏈夊鍔辨帶鍒跺紑鍏"]) { + if (!_SpecialItemBynangua.Rarity2.rawin(SUser.GetCID())) { + _SpecialItemBynangua.Rarity2.rawset(SUser.GetCID(), []); + } + _SpecialItemBynangua.Rarity2[SUser.GetCID()].append(ItemObj); + } + + // 鎸囧畾閬撳叿濂栧姳閫昏緫淇濇寔涓嶅彉 + if (!Cofig["鎸囧畾閬撳叿濂栧姳鎺у埗"]["鎸囧畾閬撳叿濂栧姳鎺у埗寮鍏"]) return; + local Itemid = item_id.tostring(); + if (Cofig["鎸囧畾閬撳叿濂栧姳鎺у埗"]["鎸囧畾閬撳叿瀵瑰簲濂栧姳"].rawin(Itemid) && type == 4) { + Nangua_SSMSG.SendTitle(SUser, Dungeon_Name, "涓幏寰楃壒瀹氶亾鍏"); + Nangua_SSMSG.ItemMsg(item_id, ItemObj); + Nangua_SSMSG.SendMiddle(); + ProcessRewards(SUser, Cofig["鎸囧畾閬撳叿濂栧姳鎺у埗"]["鎸囧畾閬撳叿瀵瑰簲濂栧姳"][Itemid]); + Nangua_SSMSG.EndMsg(); + } + } + // 澶勭悊濂栧姳閫昏緫 + function ProcessRewards(SUser, rewards) { + local Cofig = GlobalConfig.Get("鍙茶瘲鎺夎惤濂栧姳閰嶇疆_鍗楃摐.json"); + local config = Cofig["淇℃伅鎾姤"]; + local totalRewards = []; + local rewardMessages = []; + // 閬嶅巻濂栧姳鍒楄〃 + foreach(reward in rewards) { + local itemId = reward[0]; + local itemCnt = reward[1]; + if (itemId == 0) { + // 鐐瑰埜濂栧姳 + local ceraMsgObj = AdMsg(); + ceraMsgObj.PutType(config["鍙戦佷綅缃"]); + if (config["鍙戦佷綅缃"] != 14) { + ceraMsgObj.PutString(" "); + } + ceraMsgObj.PutColorString("鐐瑰埜", config["鍐呭棰滆壊"]); + ceraMsgObj.PutColorString("[" + itemCnt + "]", [255, 20, 0]); + ceraMsgObj.Finalize(); + World.SendAll(ceraMsgObj.MakePack()); + ceraMsgObj.Delete(); + SUser.RechargeCera(itemCnt); + } else { + totalRewards.append([itemId, itemCnt]); + local itemName = PvfItem.GetNameById(itemId); + local color = Nangua_SSMSG.RarityColor(itemId); + rewardMessages.append([itemName, itemCnt, color]); + } + } + Nangua_SSMSG.api_CUser_Add_Item_list(SUser, totalRewards); + // 鍙戦佸鍔辩墿鍝佷俊鎭氱煡 + if (rewardMessages.len() > 0) { + local rewardMsgObj = AdMsg(); + rewardMsgObj.PutType(config["鍙戦佷綅缃"]); + if (config["鍙戦佷綅缃"] != 14) { + rewardMsgObj.PutString(" "); + } + foreach(message in rewardMessages) { + rewardMsgObj.PutColorString("[" + message[0] + "]", message[2]); + rewardMsgObj.PutColorString("<" + message[1] + ">", [255, 20, 0]); + rewardMsgObj.PutColorString("涓", config["鍐呭棰滆壊"]); + } + rewardMsgObj.Finalize(); + World.SendAll(rewardMsgObj.MakePack()); + rewardMsgObj.Delete(); + } + } +} + +class Nangua_SSMSG { + function SendTitle(SUser, Dungeon_Name, msg) { + local Cofig = GlobalConfig.Get("鍙茶瘲鎺夎惤濂栧姳閰嶇疆_鍗楃摐.json"); + local config = Cofig["淇℃伅鎾姤"]; + local title = AdMsg(); + title.PutType(config["鍙戦佷綅缃"]); + if (config["鍙戦佷綅缃"] != 14) { + title.PutString(" "); + } + title.PutColorString(config["鏍囬"][0], config["鏍囬"][1]); + title.PutColorString("鎭枩鐜╁", config["鍐呭棰滆壊"]); + title.PutColorString("[" + SUser.GetCharacName() + "]", [255, 20, 0]); + title.PutColorString("鍦", config["鍐呭棰滆壊"]); + title.PutColorString("[" + Dungeon_Name + "]", [255, 20, 0]); + title.PutColorString("" + msg + "", config["鍐呭棰滆壊"]); + title.Finalize(); + World.SendAll(title.MakePack()); + title.Delete(); + } + + function SendMiddle() { + local Cofig = GlobalConfig.Get("鍙茶瘲鎺夎惤濂栧姳閰嶇疆_鍗楃摐.json"); + local config = Cofig["淇℃伅鎾姤"]; + local MiddleMsgObj = AdMsg(); + MiddleMsgObj.PutType(config["鍙戦佷綅缃"]); + if (config["鍙戦佷綅缃"] != 14) { + MiddleMsgObj.PutString(" "); + } + MiddleMsgObj.PutColorString("鐗规濂栧姳:", config["鍐呭棰滆壊"]); + MiddleMsgObj.Finalize(); + World.SendAll(MiddleMsgObj.MakePack()); + MiddleMsgObj.Delete(); + } + + function SendCntMsg(cnt) { + local Cofig = GlobalConfig.Get("鍙茶瘲鎺夎惤濂栧姳閰嶇疆_鍗楃摐.json"); + local config = Cofig["淇℃伅鎾姤"]; + local CntMsgObj = AdMsg(); + CntMsgObj.PutType(config["鍙戦佷綅缃"]); + if (config["鍙戦佷綅缃"] != 14) { + CntMsgObj.PutString(" "); + } + CntMsgObj.PutColorString("鍚堣", config["鍐呭棰滆壊"]); + CntMsgObj.PutColorString("[" + cnt + "]", [255, 20, 0]); + CntMsgObj.PutColorString("浠惰澶", config["鍐呭棰滆壊"]); + CntMsgObj.Finalize(); + World.SendAll(CntMsgObj.MakePack()); + CntMsgObj.Delete(); + } + + function ItemMsg(item_id, ItemObj) { + local Cofig = GlobalConfig.Get("鍙茶瘲鎺夎惤濂栧姳閰嶇疆_鍗楃摐.json"); + local config = Cofig["淇℃伅鎾姤"]; + local MsgObj = AdMsg(); + MsgObj.PutType(config["鍙戦佷綅缃"]); + if (config["鍙戦佷綅缃"] != 14) { + MsgObj.PutString(" "); + } + MsgObj.PutEquipment("[" + PvfItem.GetNameById(item_id) + "]", ItemObj, Nangua_SSMSG.RarityColor(item_id)); + MsgObj.Finalize(); + World.SendAll(MsgObj.MakePack()); + MsgObj.Delete(); + } + + function EndMsg() { + local Cofig = GlobalConfig.Get("鍙茶瘲鎺夎惤濂栧姳閰嶇疆_鍗楃摐.json"); + local config = Cofig["淇℃伅鎾姤"]; + local endMsgObj = AdMsg(); + endMsgObj.PutType(config["鍙戦佷綅缃"]); + if (config["鍙戦佷綅缃"] != 14) { + endMsgObj.PutString(" "); + } + endMsgObj.PutColorString(config["缁撳熬"][0], config["缁撳熬"][1]); + endMsgObj.Finalize(); + World.SendAll(endMsgObj.MakePack()); + endMsgObj.Delete(); + } + function api_CUser_Add_Item_list(SUser, item_list) { + for (local i = 0; i < item_list.len(); i++) { + local item_id = item_list[i][0]; // 閬撳叿浠g爜 + local quantity = item_list[i][1]; // 閬撳叿鏁伴噺 + local cnt = Nangua_SSMSG.checkInventorySlot(SUser, item_id); + if (cnt == 1) { + SUser.GiveItem(item_id, quantity); //浣跨敤绐楀彛鍙戦佸鍔 + } else { + local RewardItems = []; + RewardItems.append([item_id, quantity]); + local title = "GM" + local Text = "鐢变簬鑳屽寘绌洪棿涓嶈冻锛屽凡閫氳繃閭欢鍙戦侊紝璇锋煡鏀讹紒" + //瑙掕壊绫 鍙戦侀偖浠跺嚱鏁 (鏍囬, 姝f枃, 閲戝竵, 閬撳叿鍒楄〃[[3037,100],[3038,100]]) + SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems) + } + } + Nangua_SSMSG.SendItemWindowNotification(SUser, item_list); + } + function SendItemWindowNotification(SUser, item_list) { + local Pack = Packet(); + Pack.Put_Header(1, 163); //鍗忚 + Pack.Put_Byte(1); //榛樿1 + Pack.Put_Short(0); //妲戒綅id 濉叆0鍗冲彲 + Pack.Put_Int(0); //鏈煡 0浠ヤ笂鍗冲彲 + Pack.Put_Short(item_list.len()); //閬撳叿缁勬暟 + //鍐欏叆閬撳叿浠g爜鍜岄亾鍏锋暟閲 + for (local i = 0; i < item_list.len(); i++) { + Pack.Put_Int(item_list[i][0]); //閬撳叿浠g爜 + Pack.Put_Int(item_list[i][1]); //閬撳叿鏁伴噺 瑁呭/鏃惰鏃 浠绘剰鍧囧彲 + } + Pack.Finalize(true); //纭畾鍙戝寘鍐呭 + SUser.Send(Pack); //鍙戝寘 + Pack.Delete(); //娓呯┖buff鍖 + } + /** + * 鏍规嵁閬撳叿绫诲瀷鑳屽寘绌烘牸鏁伴噺 + * @param {pointer} SUser - 鐢ㄦ埛 + * @param {int} item_id - 闇瑕佹煡鎵剧殑閬撳叿ID + * @returns {int} - 绌烘牸鏁伴噺 + */ + function checkInventorySlot(SUser, itemid) { + local InvenObj = SUser.GetInven(); + local type = Sq_CallFunc(S_Ptr("0x085018D2"), "int", ["pointer", "int"], InvenObj.C_Object, itemid); + local cnt = Sq_CallFunc(S_Ptr("0x08504F64"), "int", ["pointer", "int", "int"], InvenObj.C_Object, type, 1); + + return cnt; + } + function RarityColor(item_id) { + local PvfItemObj = PvfItem.GetPvfItemById(item_id); + if (PvfItemObj == null) { + return; + } + local CItem_get_rarity = PvfItemObj.GetRarity(); // 瑁呭鍝佺骇 + return Nangua_SSMSG.rarityColorMap[(CItem_get_rarity).tostring()]; + } + //鍝佺骇瀵瑰簲鐨凴GB + rarityColorMap = { + "0": [255, 255, 255], // 鏅 + "1": [104, 213, 237], // 楂樼骇 + "2": [179, 107, 255], // 绋鏈 + "3": [255, 0, 255], // 绁炲櫒 + "4": [255, 180, 0], // 鍙茶瘲 + "5": [255, 102, 102], // 鍕囪 + "6": [255, 20, 147], // 娣辩矇绾㈣壊 + "7": [255, 215, 0] // 閲戣壊 + }; +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍙茶瘲鎺夎惤濂栧姳/鍙茶瘲鎺夎惤濂栧姳閰嶇疆_鍗楃摐.json b/绀轰緥椤圭洰/鍙茶瘲鎺夎惤濂栧姳/鍙茶瘲鎺夎惤濂栧姳閰嶇疆_鍗楃摐.json new file mode 100644 index 0000000..4908752 --- /dev/null +++ b/绀轰緥椤圭洰/鍙茶瘲鎺夎惤濂栧姳/鍙茶瘲鎺夎惤濂栧姳閰嶇疆_鍗楃摐.json @@ -0,0 +1,94 @@ +{ + "濂栧姳鎺у埗": { + "寮鍏宠鏄(true涓哄紑鍚,false涓哄叧闂)杩欐槸鎻愮ず璇锋棤瑙,鍚庨潰鐨0涔熶笉鐢ㄧ":0, + "澶氫欢鍙茶瘲濂栧姳鎺у埗寮鍏": true, + "澶氫欢绁炲櫒濂栧姳鎺у埗寮鍏": false, + "澶氫欢绋鏈夊鍔辨帶鍒跺紑鍏": false, + "绋鏈夎澶囧紑鍏冲鏋滃紑鍚細瀵艰嚧鍙互鍦ㄥ壇鏈唴涓㈠純鎷惧彇棰嗗彇濂栧姳,闇鎼厤绂佹涓㈠純鐗╁搧浣跨敤(杩欐槸鎻愮ず璇锋棤瑙,鍚庨潰鐨0涔熶笉鐢ㄧ)":0, + "tips>>>濡傛灉濂栧姳濉0浠h〃鐐瑰埜(杩欐槸鎻愮ず璇锋棤瑙,鍚庨潰鐨0涔熶笉鐢ㄧ)":0, + "澶氫欢SS瀵瑰簲濂栧姳(鍙茶瘲)": { + "2": [ + [3038, 2], + [3037, 10] + ], + "3": [ + [0, 10000], + [123014, 10] + ], + "4": [ + [0, 50000], + [3037, 2000], + [3038, 2000] + ], + "5": [ + [0, 50000], + [3037, 2000], + [3038, 2000] + ] + }, + "澶氫欢绁炲櫒瀵瑰簲濂栧姳": { + "2": [ + [3038, 1], + [3037, 5] + ], + "3": [ + [0, 5000], + [123014, 5] + ], + "4": [ + [0, 20000], + [3037, 1000], + [3038, 1000] + ], + "5": [ + [0, 20000], + [3037, 1000], + [3038, 1000] + ] + }, + "澶氫欢绋鏈夊搴斿鍔": { + "2": [ + [3038, 1], + [3037, 2] + ], + "3": [ + [0, 2000], + [123014, 2] + ], + "4": [ + [0, 10000], + [3037, 500], + [3038, 500] + ], + "5": [ + [0, 10000], + [3037, 500], + [3038, 500] + ] + } + }, + "鎸囧畾閬撳叿濂栧姳鎺у埗": { + "鎸囧畾閬撳叿濂栧姳鎺у埗寮鍏": true, + "鎸囧畾閬撳叿瀵瑰簲濂栧姳": { + "3037": [ + [3038, 2], + [3037, 10] + ], + "3038": [ + [0, 10000], + [123014, 10] + ], + "3039": [ + [0, 50000], + [3037, 2000], + [3038, 2000] + ] + } + }, + "淇℃伅鎾姤":{ + "鍙戦佷綅缃":14, + "鏍囬":["-----------鈽嗗ぉ闄嶉缚杩愨槅--------------", [255, 130, 0]], + "鍐呭棰滆壊":[255, 120, 0], + "缁撳熬":["-----------鈽嗘伃鍠滆繖閫尖槅--------------", [255, 130, 0]] + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍙茶瘲鑽墏/Proj.ifo b/绀轰緥椤圭洰/鍙茶瘲鑽墏/Proj.ifo new file mode 100644 index 0000000..0bcfd8a --- /dev/null +++ b/绀轰緥椤圭洰/鍙茶瘲鑽墏/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鍙茶瘲鑽墏", + "ProjectDescribe": "鍦ㄥ崟浜烘繁娓婁腑浣跨敤鎸囧畾ID鐨勯亾鍏蜂娇鐜╁鑾峰緱鐖嗙巼鍔犳垚銆(缁勯槦鏃犳晥)锛屽彶璇楄嵂鍓傞亾鍏风殑鍐峰嵈鏃堕棿鍜屾寔缁椂闂撮渶涓鑷达紒锛", + "ProjectAuthor": "鍊炬唱瀵 & 鍗楃摐", + "ProjectVersion": 1.7, + "ProjectConfig": "鍙茶瘲鑽墏閰嶇疆鏂囦欢.json", + "ProjectFiles": [ + "鍙茶瘲鑽墏.nut" + ], + "ProjectRunFunc": "_Dps_EpicPotion_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍙茶瘲鑽墏/鍙茶瘲鑽墏.nut b/绀轰緥椤圭洰/鍙茶瘲鑽墏/鍙茶瘲鑽墏.nut new file mode 100644 index 0000000..3f5b412 --- /dev/null +++ b/绀轰緥椤圭洰/鍙茶瘲鑽墏/鍙茶瘲鑽墏.nut @@ -0,0 +1,47 @@ +/* +鏂囦欢鍚:鍙茶瘲鑽墏.nut +璺緞:MyProject/鍙茶瘲鑽墏.nut +鍒涘缓鏃ユ湡:2025-03-28 10:21 +鏂囦欢鐢ㄩ:鍙茶瘲鑽墏 +*/ + +//鍚姩鍑芥暟 鑷畾涔夌殑闇瑕佸啓鍦╥fo涓 +function _Dps_EpicPotion_Main_() { + //娉ㄥ唽鑾峰彇閬撳叿绋鏈夊害杩涘叆鍥炶皟 + Cb_GetItemRarity_Enter_Func["鍙茶瘲鑽墏_閫昏緫"] <- function(args) { + // print("鑾峰彇閬撳叿绋鏈夊害杩涘叆鍥炶皟"); + local Cofig = GlobalConfig.Get("鍙茶瘲鑽墏閰嶇疆鏂囦欢.json"); + local Addr = NativePointer(args[0]); + local VectorSize = (Addr.add(4).readU32() - Addr.readU32()) / 4; + // 閬嶅巻闃熶紞鎴愬憳锛屾壘鍒颁娇鐢ㄤ簡鍙茶瘲鑽墏鐨勭帺瀹 + local userWithPotion = null; + for (local i = 0; i< VectorSize; i++) { + local elementAddr = NativePointer(Addr.readPointer()).add(i * 4); + local user = elementAddr.readPointer(); + if (user && Sq_CallFunc(S_Ptr("0x865E994"), "int", ["pointer", "int"], user, Cofig["鍙茶瘲鑽墏ID"])) { + userWithPotion = User(user); + break; + } + } + if (userWithPotion && Haker.NextReturnAddress == "0x853583a") { + local partyobj = userWithPotion.GetParty(); + // 妫鏌ユ槸鍚﹀崟浜 + if (Sq_CallFunc(S_Ptr("0x0859A16A"), "int", ["pointer", ], partyobj.C_Object) == 1) { + local MaxRoll = NativePointer(args[1]).add(16).readU32(); + local odds = Cofig["鍙茶瘲鑽墏榛樿鍔犳垚鍑犵巼"]; // 榛樿鑽墏鐨勫鍔犲嚑鐜 + // 妫鏌ユ槸鍚IP鐜╁ + local charac_no = userWithPotion.GetCID(); + local cfg = Cofig["鎸囧畾瑙掕壊ID棰濆鍙犲姞鍔犳垚鍑犵巼"]; + local key = charac_no.tostring(); + if (cfg != null && cfg.rawin(key)) { + odds = cfg[key]; + //print("VIP鐜╁:" + key + " 鍔犳垚鍑犵巼:" + odds); + } + // 璁$畻鏂扮殑roll鍊 + args[2] = MathClass.getMin(args[2] + args[2] * odds, MaxRoll); + // print("鏂扮殑roll鍊:" + args[2] + " 鍔犳垚鍑犵巼:" + odds + " 鏈澶oll鍊:" + MaxRoll + " 瑙掕壊ID:" + charac_no); + } + } + return args; + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍙茶瘲鑽墏/鍙茶瘲鑽墏閰嶇疆鏂囦欢.json b/绀轰緥椤圭洰/鍙茶瘲鑽墏/鍙茶瘲鑽墏閰嶇疆鏂囦欢.json new file mode 100644 index 0000000..8d9057c --- /dev/null +++ b/绀轰緥椤圭洰/鍙茶瘲鑽墏/鍙茶瘲鑽墏閰嶇疆鏂囦欢.json @@ -0,0 +1,14 @@ +{ + "鍙茶瘲鑽墏ID": 2600010, + "鍙茶瘲鑽墏榛樿鍔犳垚鍑犵巼": 0.2, + "鎸囧畾瑙掕壊ID棰濆鍙犲姞鍔犳垚鍑犵巼": { + "1": 1.0, + "2": 1.0 + }, + "鎻愮ず1": "鍙茶瘲鑽墏閬撳叿鐨勫喎鍗存椂闂村拰鎸佺画鏃堕棿闇涓鑷村惁鍒欐棤鏁!!!", + "鎻愮ず2": "姣斿榛樿鍑犵巼鏄0.2,鎸囧畾瑙掕壊ID鏄1,閭d箞鏈缁堝嚑鐜囨槸0.2+1=1.2", + "鎻愮ず3": "缇ゆ枃浠朵腑鏈夊彶璇楄嵂鍓傜殑stk鏂囦欢,鍙互鑷淇敼!!!", + "鎻愮ず4": "瑙掕壊ID鍙互鏌ョ湅鏁版嵁搴撲腑 taiwan_cain 鈫 charac_info 鈫 charac_no浠h〃瑙掕壊ID", + "鎻愮ず5": "0.1鍑犵巼鏄姞鎴10%浠ユ绫绘帹锛屽彈骞歌繍鍊煎奖鍝,鍏蜂綋鍔犳垚璇疯嚜琛屾祴绠!", + "鎻愮ず6": "2600010鏄拰骞冲憪鍠婄殑閬撳叿ID,鐢ㄦ閬撳叿鏈夊浘鏍囨彁绀轰互鍙婃椂闂存彁绀,浣嗘槸鍏蜂綋瀛楃涓茬浉鍏宠嚜琛岃В鍐" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍦ㄧ嚎娉$偣/Proj.ifo b/绀轰緥椤圭洰/鍦ㄧ嚎娉$偣/Proj.ifo new file mode 100644 index 0000000..f99650b --- /dev/null +++ b/绀轰緥椤圭洰/鍦ㄧ嚎娉$偣/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鍦ㄧ嚎娉$偣", + "ProjectDescribe": "鏍规嵁璁惧畾鏃堕棿闂撮殧缁欎笌鐐瑰埜鎴栦唬甯佹椿璺冨鍔", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.0, + "ProjectConfig": "鍦ㄧ嚎娉$偣閰嶇疆_Nangua.json", + "ProjectFiles": [ + "鍦ㄧ嚎娉$偣.nut" + ], + "ProjectRunFunc": "_Dps_Online_rewardsBynangua_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鍦ㄧ嚎娉$偣/鍦ㄧ嚎娉$偣.nut b/绀轰緥椤圭洰/鍦ㄧ嚎娉$偣/鍦ㄧ嚎娉$偣.nut new file mode 100644 index 0000000..ad3655e --- /dev/null +++ b/绀轰緥椤圭洰/鍦ㄧ嚎娉$偣/鍦ㄧ嚎娉$偣.nut @@ -0,0 +1,97 @@ +_total_rewardBynangua <- {}; // 瀛樺偍姣忎釜鐜╁鐨勭疮璁″鍔 + +function _Online_rewardsBynangua() { + local Config = GlobalConfig.Get("鍦ㄧ嚎娉$偣閰嶇疆_Nangua.json"); + local OnlinePlayerList = World.GetOnlinePlayer(); + + // 鍙戞斁濂栧姳 + foreach(SUser in OnlinePlayerList) { + local IP = _Online_rewardsBynangua_api.CUser_get_public_ip_address(SUser); + if (!Config["鏄惁鍙戞斁濂栧姳缁欏亣浜(true鍙戞斁/false涓嶅彂鏀)"] && IP == Config["绂荤嚎鍋囦汉IP"]) { + continue; + } + + // 鑾峰彇濂栧姳绫诲瀷鍜屾暟閲 + local isCera = Config["鍦ㄧ嚎娉$偣閰嶇疆"]["濂栧姳绫诲瀷(true鐐瑰埜/false浠e竵)"]; + local rewardAmount = isCera ? Config["鍦ㄧ嚎娉$偣閰嶇疆"]["鐐瑰埜濂栧姳"] : Config["鍦ㄧ嚎娉$偣閰嶇疆"]["浠e竵濂栧姳"]; + + if (rewardAmount > 0) { + // 鍒濆鍖栫疮璁″鍔 + if (!(SUser.GetCID() in _total_rewardBynangua)) { + _total_rewardBynangua[SUser.GetCID()] <- 0; + } + _total_rewardBynangua[SUser.GetCID()] += rewardAmount; + + // 鍙戞斁濂栧姳 + if (isCera) { + SUser.RechargeCera(rewardAmount); + } else { + SUser.RechargeCeraPoint(rewardAmount); + } + + // 鍙戦佹秷鎭 + local AdMsgObj = AdMsg(); + AdMsgObj.PutType(Config["鍦ㄧ嚎娉$偣閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if (Config["鍦ㄧ嚎娉$偣閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + AdMsgObj.PutString(" "); + } + AdMsgObj.PutImoticon(Config["鍦ㄧ嚎娉$偣閰嶇疆"]["鍥炬爣"]); + AdMsgObj.PutColorString(Config["鍦ㄧ嚎娉$偣閰嶇疆"]["鏍囬"], Config["鍦ㄧ嚎娉$偣閰嶇疆"]["鏂囧瓧棰滆壊rgb"]); + AdMsgObj.PutColorString("[" + rewardAmount + "]", Config["鍦ㄧ嚎娉$偣閰嶇疆"]["鏁伴噺棰滆壊rgb"]); + AdMsgObj.PutColorString(Config["鍦ㄧ嚎娉$偣閰嶇疆"]["濂栧姳鍐呭(浠e竵/鐐瑰埜)"], Config["鍦ㄧ嚎娉$偣閰嶇疆"]["鏂囧瓧棰滆壊rgb"]); + AdMsgObj.PutColorString(Config["鍦ㄧ嚎娉$偣閰嶇疆"]["濂栧姳"], Config["鍦ㄧ嚎娉$偣閰嶇疆"]["鏂囧瓧棰滆壊rgb"]); + AdMsgObj.PutColorString("[" + _total_rewardBynangua[SUser.GetCID()] + "]", Config["鍦ㄧ嚎娉$偣閰嶇疆"]["鏁伴噺棰滆壊rgb"]); + AdMsgObj.PutColorString(Config["鍦ㄧ嚎娉$偣閰嶇疆"]["濂栧姳鍐呭(浠e竵/鐐瑰埜)"], Config["鍦ㄧ嚎娉$偣閰嶇疆"]["鏂囧瓧棰滆壊rgb"]); + AdMsgObj.Finalize(); + SUser.Send(AdMsgObj.MakePack()); + AdMsgObj.Delete(); + } + } +} + +// 鍦ㄧ嚎娉$偣娲诲姩鍏ュ彛鐐 +function _Dps_Online_rewardsBynangua_Main_() { + _Dps_Online_rewardsBynangua_Logic_(); +} + +// 鍦ㄧ嚎娉$偣娲诲姩閲嶈浇鍏ュ彛鐐 +function _Dps_Online_rewardsBynangua_Main_Reload_(OldConfig) { + // 鍏堢Щ闄ゆ棫鐨勫畾鏃朵换鍔 + Timer.RemoveCronTask("OnlineRewardTask"); + + // 閲嶆柊娉ㄥ唽 + _Dps_Online_rewardsBynangua_Logic_(); + // 娓呯悊缂撳瓨 + _total_rewardBynangua <- {}; +} + +// 鍦ㄧ嚎娉$偣娲诲姩閫昏緫鍏ュ彛鐐 +function _Dps_Online_rewardsBynangua_Logic_() { + local Config = GlobalConfig.Get("鍦ㄧ嚎娉$偣閰嶇疆_Nangua.json"); + local interval = Config["鍦ㄧ嚎娉$偣閰嶇疆"]["鏃堕棿闂撮殧(鍒嗛挓)"]; + local cronExpression = format("0 */%d * * * *", interval); + // 娉ㄥ唽瀹氭椂浠诲姟 + Timer.SetCronTask(_Online_rewardsBynangua, { + Cron = cronExpression, + Name = "OnlineRewardTask" + }); +} + +class _Online_rewardsBynangua_api { + function CUser_get_public_ip_address(SUser){ + local s_addr = Sq_CallFunc(S_Ptr("0x084EC90A"), "int", ["pointer"], SUser.C_Object); + if(s_addr){ + local inet_ntoa = Sq_CallFunc(S_Ptr("0x0807DDC0"), "pointer", ["int"], s_addr); + return NativePointer(inet_ntoa).readUtf8String(); + } + return null; + } +} + +// 鐜╁涓嬬嚎鏃讹紝娓呯┖绱濂栧姳 +Cb_CUser_LogoutToPCRoom_Enter_Func.Online_rewardsBynangua <- function(args) { + local SUser = User(args[0]); + if (SUser.GetCID() in _total_rewardBynangua) { + _total_rewardBynangua.rawdelete(SUser.GetCID()); + } +} diff --git a/绀轰緥椤圭洰/鍦ㄧ嚎娉$偣/鍦ㄧ嚎娉$偣閰嶇疆_Nangua.json b/绀轰緥椤圭洰/鍦ㄧ嚎娉$偣/鍦ㄧ嚎娉$偣閰嶇疆_Nangua.json new file mode 100644 index 0000000..46c1113 --- /dev/null +++ b/绀轰緥椤圭洰/鍦ㄧ嚎娉$偣/鍦ㄧ嚎娉$偣閰嶇疆_Nangua.json @@ -0,0 +1,17 @@ +{ + "鍦ㄧ嚎娉$偣閰嶇疆": { + "鏃堕棿闂撮殧(鍒嗛挓)":1, + "鐐瑰埜濂栧姳":10, + "浠e竵濂栧姳":10, + "濂栧姳绫诲瀷(true鐐瑰埜/false浠e竵)":true, + "淇℃伅鍙戦佷綅缃":0, + "鍥炬爣":1, + "鏂囧瓧棰滆壊rgb":[120, 255, 0], + "鏁伴噺棰滆壊rgb":[255, 215, 0], + "鏍囬":"娲昏穬濂栧姳鑾峰緱", + "濂栧姳鍐呭(浠e竵/鐐瑰埜)":"鐐瑰埜", + "濂栧姳":" 绱鑾峰緱" + }, + "鏄惁鍙戞斁濂栧姳缁欏亣浜(true鍙戞斁/false涓嶅彂鏀)":false, + "绂荤嚎鍋囦汉IP":"10.0.0.1" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/澶氬僵铚滆湣鏀硅法鐣岀煶/Proj.ifo b/绀轰緥椤圭洰/澶氬僵铚滆湣鏀硅法鐣岀煶/Proj.ifo new file mode 100644 index 0000000..b890375 --- /dev/null +++ b/绀轰緥椤圭洰/澶氬僵铚滆湣鏀硅法鐣岀煶/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "澶氬僵铚滆湣鏀硅法鐣岀煶", + "ProjectDescribe": "灏嗙墿鍝佽法鐣屽瓨鏀捐嚦璐﹀彿浠撳簱,闇dll鎴栧惎鍔ㄥ櫒鏀寔,鍚﹀垯鏃犳硶鏀惧叆鐗╁搧", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.0, + "ProjectConfig": "澶氬僵铚滆湣鏀硅法鐣岀煶_Nangua.json", + "ProjectFiles": [ + "澶氬僵铚滆湣鏀硅法鐣岀煶.nut" + ], + "ProjectRunFunc": "_Dps_Cross_Stone_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/澶氬僵铚滆湣鏀硅法鐣岀煶/澶氬僵铚滆湣鏀硅法鐣岀煶.nut b/绀轰緥椤圭洰/澶氬僵铚滆湣鏀硅法鐣岀煶/澶氬僵铚滆湣鏀硅法鐣岀煶.nut new file mode 100644 index 0000000..cd53e34 --- /dev/null +++ b/绀轰緥椤圭洰/澶氬僵铚滆湣鏀硅法鐣岀煶/澶氬僵铚滆湣鏀硅法鐣岀煶.nut @@ -0,0 +1,108 @@ +function _Dps_Cross_Stone_Main_() { + Cb_ModItemattr_Enter_Func.Cross_Stone <- function(args) { + local SUser = User(args[1]); + local pack = NativePointer(args[2]); + local a = NativePointer(pack.add(20).readPointer()); + local itemSlot = a.add(13).add(6).readShort(); + local equSlot = a.add(13).add(0).readShort(); + local InvenObj = SUser.GetInven(); + if (InvenObj) { + local ItemObj = InvenObj.GetSlot(1, itemSlot); + if (ItemObj.GetIndex() == 2675422) { + Sq_WriteByteArr(S_Ptr("0x820110E"), array(5, 0x90)); + Sq_WriteByteArr(S_Ptr("0x8201647"), array(5, 0x90)); + } + } + } + + Cb_ModItemattr_Leave_Func.Cross_Stone <- function(args) { + local Config = GlobalConfig.Get("澶氬僵铚滆湣鏀硅法鐣岀煶_Nangua.json"); + local SUser = User(args[1]); + local pack = NativePointer(args[2]); + local a = NativePointer(pack.add(20).readPointer()); + local itemSlot = a.add(13).add(6).readShort(); + local equSlot = a.add(13).add(0).readShort(); + local InvenObj = SUser.GetInven(); + local result = 0; + if (InvenObj) { + local ItemObj = InvenObj.GetSlot(1, itemSlot); + local equObj = InvenObj.GetSlot(1, equSlot); + if (ItemObj.GetIndex() == 2675422) { + local PvfItemObj = PvfItem.GetPvfItemById(equObj.GetIndex()); + local qixi1 = NativePointer(equObj.C_Object).add(31).readU8(); + local qixi2 = NativePointer(equObj.C_Object).add(32).readU8(); + local ItemType = NativePointer(PvfItemObj.C_Object).add(141 * 4).readU32(); + //鑾峰彇璐﹀彿閲戝簱瀵硅薄 + local CargoObj = SUser.GetAccountCargo(); + //鑾峰彇璐﹀彿閲戝簱涓殑涓涓┖鏍煎瓙 + local EmptySlot = CargoObj.GetEmptySlot(); + local CheckItemLock = Sq_CallFunc(S_Ptr("0x8646942"), "int", ["pointer", "int", "int"], SUser.C_Object, 1, equSlot); + if (CheckItemLock) { + _Cross_StoneBynangua.CUser_SendCmdErrorPacket(SUser, 84, 13) + } else if(qixi1 > 0 || qixi2 > 0) { + _Cross_StoneBynangua.sendNotification(SUser, true, itemSlot, Config["璺ㄧ晫澶辫触鎻愮ず4"]); + _Cross_StoneBynangua.CUser_SendCmdErrorPacket(SUser, 84, 13) + } else if (Config["涓嶅彲璺ㄧ晫瑁呭"].find(equObj.GetIndex()) != null) { + _Cross_StoneBynangua.sendNotification(SUser, true, itemSlot, format(Config["璺ㄧ晫澶辫触鎻愮ず2"], PvfItem.GetNameById(equObj.GetIndex()))); + _Cross_StoneBynangua.CUser_SendCmdErrorPacket(SUser, 84, 13) + } else if (Config["涓嶅彲璺ㄧ晫鐨勮澶囩被鍨"].find(ItemType) != null) { + _Cross_StoneBynangua.sendNotification(SUser, true, itemSlot, Config["璺ㄧ晫澶辫触鎻愮ず3"]); + _Cross_StoneBynangua.CUser_SendCmdErrorPacket(SUser, 84, 13) + } else if (EmptySlot == -1) { + _Cross_StoneBynangua.sendNotification(SUser, true, itemSlot, Config["璺ㄧ晫澶辫触鎻愮ず1"]); + _Cross_StoneBynangua.CUser_SendCmdErrorPacket(SUser, 84, 13) + } else { + local Flag = CargoObj.InsertItem(equObj, EmptySlot); + if (Flag == -1) { + _Cross_StoneBynangua.sendNotification(SUser, true, itemSlot, Config["璺ㄧ晫澶辫触鎻愮ず5"]); + _Cross_StoneBynangua.CUser_SendCmdErrorPacket(SUser, 84, 13) + } else { + local num = NativePointer(ItemObj.C_Object).add(7).readU32(); + _Cross_StoneBynangua.SendConsume(SUser, itemSlot, num); + //閿姣佽儗鍖呬腑鐨勯亾鍏 + equObj.Delete(); + //鍒锋柊鐜╁鑳屽寘鍒楄〃 + SUser.SendUpdateItemList(1, 0, equSlot); + //鍒锋柊璐﹀彿閲戝簱鍒楄〃 + Timer.SetTimeOut(function() { + CargoObj.SendItemList(); + }, 1); + _Cross_StoneBynangua.sendNotification(SUser, false, itemSlot, format(Config["璺ㄧ晫鎴愬姛鎻愮ず"], PvfItem.GetNameById(equObj.GetIndex()))); + } + } + Sq_WriteByteArr(S_Ptr("0x820110E"), [0x3D, 0x4E, 0xD1, 0x28, 0x00]); + Sq_WriteByteArr(S_Ptr("0x8201647"), [0xE8, 0xEC, 0x02, 0x00, 0x00]); + } + } + return result; + } +} + +class _Cross_StoneBynangua { + function sendNotification(SUser, bool, slot, message) { + local Config = GlobalConfig.Get("澶氬僵铚滆湣鏀硅法鐣岀煶_Nangua.json"); + if(bool){ + SUser.GiveItem(2675422, 1); + SUser.SendUpdateItemList(1, 0, slot); + } + if (Config["233寮圭獥鎻愮ず寮鍚(true寮鍚/false鍏抽棴)"]) { + SUser.SendNotiBox(message, 1); + } else { + SUser.SendNotiPacketMessage(message, 8); + } + } + function CUser_SendCmdErrorPacket(SUser, a, b) { + return Sq_CallFunc(S_Ptr("0x0867BF42"), "int", ["pointer", "int", "int"], SUser.C_Object, a, b); + } + function SendConsume(SUser,ItemSlot,num){ + local Pack = Packet(); + Pack.Put_Header(1, 84); + Pack.Put_Byte(1); + Pack.Put_Short(ItemSlot); + Pack.Put_Int(num); + Pack.Put_Short(2); + Pack.Finalize(true); + SUser.Send(Pack); + Pack.Delete(); + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/澶氬僵铚滆湣鏀硅法鐣岀煶/澶氬僵铚滆湣鏀硅法鐣岀煶_Nangua.json b/绀轰緥椤圭洰/澶氬僵铚滆湣鏀硅法鐣岀煶/澶氬僵铚滆湣鏀硅法鐣岀煶_Nangua.json new file mode 100644 index 0000000..0fb63a8 --- /dev/null +++ b/绀轰緥椤圭洰/澶氬僵铚滆湣鏀硅法鐣岀煶/澶氬僵铚滆湣鏀硅法鐣岀煶_Nangua.json @@ -0,0 +1,15 @@ +{ + "璇风湅杩欓噷": "姝ゅ姛鑳介渶瑕佺櫥褰曞櫒鏀寔鎴栬卍ll鏀寔,鍚﹀垯鏃犳硶浣跨敤(澶氬僵铚滆湣)", + "璺ㄧ晫鎴愬姛鎻愮ず": "宸叉垚鍔熷皢 [%s] 璺ㄧ晫瀛樻斁鑷宠处鍙蜂粨搴", + "璺ㄧ晫澶辫触鎻愮ず1": "璐﹀彿浠撳簱宸叉弧 鏃犳硶杩涜璺ㄧ晫", + "璺ㄧ晫澶辫触鎻愮ず2": "璺ㄧ晫澶辫触, [%s] 涓嶅彲浠ヨ法鐣", + "璺ㄧ晫澶辫触鎻愮ず3": "璺ㄧ晫澶辫触, 璇ヨ澶囩被鍨嬫棤娉曡法鐣", + "璺ㄧ晫澶辫触鎻愮ず4": "璺ㄧ晫澶辫触, 鎼哄甫寮傜晫姘旀伅鐨勮澶囨棤娉曡繘琛岃法鐣", + "璺ㄧ晫澶辫触鎻愮ず5": "璺ㄧ晫澶辫触", + "涓嶅彲璺ㄧ晫瑁呭": [270981, 33333], + "涓嶅彲璺ㄧ晫鐨勮澶囩被鍨":[10], + "瑁呭绫诲瀷(10姝﹀櫒 11绉板彿 12涓婅。 13澶磋偐 14涓嬭 15闉嬪瓙 16鑵板甫 17椤归摼 18鎵嬮暞 19鎴掓寚 20宸︽Ы 21鍙虫Ы)":"", + "璺ㄧ晫鐭冲浐瀹氶亾鍏稩D涓2675422鏇存敼鏃犳晥": "", + "233寮圭獥鎻愮ず寮鍚(true寮鍚/false鍏抽棴)":true, + "鎻愮ず":"寮鍚脊绐楁彁绀洪渶鍦ㄧ兢鏂囦欢涓嬭浇 <瀹㈡埛绔秷鎭233.dll> 鎻掍欢,鍚﹀垯浼氬鑷存父鎴忓穿婧" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/瀹犵墿闄勯瓟/Proj.ifo b/绀轰緥椤圭洰/瀹犵墿闄勯瓟/Proj.ifo new file mode 100644 index 0000000..25f51c9 --- /dev/null +++ b/绀轰緥椤圭洰/瀹犵墿闄勯瓟/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "瀹犵墿闄勯瓟", + "ProjectDescribe": "鍙互瀹炵幇瀹犵墿闄勯瓟,闇瑕佺櫥褰曞櫒鎴杁ll鏀寔!", + "ProjectAuthor": "涓冩父浜戣禐鍔", + "ProjectVersion": 1.0, + "ProjectConfig": "", + "ProjectFiles": [ + "瀹犵墿闄勯瓟.nut" + ], + "ProjectRunFunc": "_Dps_PetEnchantment_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/瀹犵墿闄勯瓟/瀹犵墿闄勯瓟.nut b/绀轰緥椤圭洰/瀹犵墿闄勯瓟/瀹犵墿闄勯瓟.nut new file mode 100644 index 0000000..9f80e76 --- /dev/null +++ b/绀轰緥椤圭洰/瀹犵墿闄勯瓟/瀹犵墿闄勯瓟.nut @@ -0,0 +1,84 @@ +function _Dps_UpdateCreatureEnchantMysql_(card_id, charac_no, uuid) { + local sql = "select card from `taiwan_cain_2nd`.`creature_items_enchant` where ui_id = " + uuid + ";"; + local column_type_list = ["int"]; + local SqlObj = MysqlPool.GetInstance().GetConnect(); + local result = SqlObj.Select(sql, column_type_list); + local UpdateSql = "update `taiwan_cain_2nd`.`creature_items_enchant` set `card` = " + card_id + " where `ui_id` = " + uuid + ";"; + if (result.len() <= 0 || result[0].len() <= 0) { + UpdateSql = "INSERT INTO `taiwan_cain_2nd`.`creature_items_enchant`(`ui_id`, `charac_no`, `card`) VALUES (" + uuid + "," + charac_no + "," + card_id + ");"; + } + SqlObj.Exec_Sql(UpdateSql); + MysqlPool.GetInstance().PutConnect(SqlObj); +} + +function _Dps_GetCreatureEnchantMysql_(charac_no) { + local sql = "select ui_id,card from `taiwan_cain_2nd`.`creature_items_enchant` where charac_no = " + charac_no + ";"; + local column_type_list = ["int", "int"]; + local SqlObj = MysqlPool.GetInstance().GetConnect(); + local result = SqlObj.Select(sql, column_type_list); + MysqlPool.GetInstance().PutConnect(SqlObj); + return result; +} + +function _Dps_PetEnchantment_Main_() { + //鍒濆寤鸿〃鎸囦护 + local CreateSql = "CREATE TABLE `taiwan_cain_2nd`.`creature_items_enchant` (`ui_id` int(11) NOT NULL DEFAULT '0',`charac_no` int(11) DEFAULT NULL,`card` int(11) NOT NULL DEFAULT '0',PRIMARY KEY (`ui_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"; + local SqlObj = MysqlPool.GetInstance().GetConnect(); + SqlObj.Exec_Sql(CreateSql); + MysqlPool.GetInstance().PutConnect(SqlObj); + //蹇界暐瀹犵墿闄勯瓟閿欒 + Sq_WriteByteArr(S_Ptr("0x850dede"), array(2, 0x90)); + + Cb_ExpertOnEnchantByBead_Leave_Func["瀹犵墿闄勯瓟"] <- function(args) { + if (args[5] > 56) { + local SUser = User(args[1]); + local InvenObj = SUser.GetInven(); + local Bead_id = InvenObj.GetSlot(1, args[3]).GetIndex() + local PvfItemObj = PvfItem.GetPvfItemById(InvenObj.GetSlot(1, args[3]).GetIndex()) + local Card_Id = Sq_CallFunc(S_Ptr("0x0849F530"), "int", ["pointer"], PvfItemObj.C_Object); + local a7 = args[5] - 57; + local ItemObj = InvenObj.GetSlot(3, a7) + local Item_Id = ItemObj.GetIndex(); + NativePointer(ItemObj.C_Object).add(13).writeU32(Card_Id); + if (a7< 140) { + local uuid = NativePointer(ItemObj.C_Object).add(7).readInt(); + _Dps_UpdateCreatureEnchantMysql_(Card_Id, SUser.GetCID(), uuid); + } + local Pack = Packet(); + Pack.Put_Header(1, 275); + Pack.Put_Byte(1); + Pack.Finalize(true); + SUser.Send(Pack); + Pack.Delete(); + SUser.SendUpdateItemList(1, 7, a7); + InvenObj.DeleteItemCount(Bead_id, 1); + SUser.SendUpdateItemList(1, 0, args[3]); + return 0; + } + } + + Cb_reach_game_world_Func["瀹犵墿闄勯瓟"] <- function(SUser) { + local Data = _Dps_GetCreatureEnchantMysql_(SUser.GetCID()); + local DMap = {}; + foreach(data_obj in Data) { + local uuid = data_obj[0]; + local card_id = data_obj[1]; + DMap.rawset(uuid, card_id); + } + local InvenObj = SUser.GetInven(); + for (local i = 0; i< 141; i++) { + local equ; + if (i == 140) { + equ = InvenObj.GetSlot(0, 22); //鑾峰彇褰撳墠鏍煎瓙鐨勫疇鐗 + } else { + equ = InvenObj.GetSlot(3, i); + } + local equ_uuid = NativePointer(equ.C_Object).add(7).readInt(); + if (DMap.rawin(equ_uuid)) { + NativePointer(equ.C_Object).add(13).writeU32(DMap[equ_uuid]); + if (i == 140) SUser.SendUpdateItemList(1, 0, 22); + else SUser.SendUpdateItemList(1, 7, i); + } + } + } +} diff --git a/绀轰緥椤圭洰/寮傜晫閲嶇疆/Proj.ifo b/绀轰緥椤圭洰/寮傜晫閲嶇疆/Proj.ifo new file mode 100644 index 0000000..eed75d8 --- /dev/null +++ b/绀轰緥椤圭洰/寮傜晫閲嶇疆/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "寮傜晫閲嶇疆", + "ProjectDescribe": "寮傜晫閲嶇疆", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.1, + "ProjectConfig": "寮傜晫閲嶇疆_Lenheart.json", + "ProjectFiles": [ + "寮傜晫閲嶇疆.nut" + ], + "ProjectRunFunc": "_Dps_MapReset_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/寮傜晫閲嶇疆/寮傜晫閲嶇疆.nut b/绀轰緥椤圭洰/寮傜晫閲嶇疆/寮傜晫閲嶇疆.nut new file mode 100644 index 0000000..7b9d419 --- /dev/null +++ b/绀轰緥椤圭洰/寮傜晫閲嶇疆/寮傜晫閲嶇疆.nut @@ -0,0 +1,39 @@ +function ResetDimensionInout(SUser, index) { + local data_manager = Sq_CallFunc(S_Ptr("0x80CC19B"), "pointer"); + local dimensionInout = Sq_CallFunc(S_Ptr("0x0822b612"), "int", ["pointer", "int"], data_manager, index); + Sq_CallFunc(S_Ptr("0x0822f184"), "int", ["pointer", "int", "int"], SUser.C_Object, index, dimensionInout); +} +function ResetE2DgnFuncBynangua(SUser, ItemId) { + for (local i = 0; i <= 2; i++) { + ResetDimensionInout(SUser, i) + } + SUser.SendNotiPacketMessage("宸查噸缃瓻2寮傜晫鍦颁笅鍩庢鏁", 8); +} +function ResetE3DgnFuncBynangua(SUser, ItemId) { + for (local i = 3; i <= 5; i++) { + ResetDimensionInout(SUser, i) + } + SUser.SendNotiPacketMessage("宸查噸缃瓻3寮傜晫鍦颁笅鍩庢鏁", 8); +} +//鍔犺浇鍏ュ彛 +function _Dps_MapReset_Main_() { + _Dps_MapReset_Logic_(); +} + +//閲嶈浇鍏ュ彛 +function _Dps_MapReset_Main_Reload_(OldConfig) { + local Cofig = GlobalConfig.Get("寮傜晫閲嶇疆_Lenheart.json"); + Cb_Use_Item_Sp_Func.rawdelete(OldConfig["閲嶇疆E2寮傜晫鍦颁笅鍩庢鏁"].tointeger()); + Cb_Use_Item_Sp_Func.rawdelete(OldConfig["閲嶇疆E3寮傜晫鍦颁笅鍩庢鏁"].tointeger()); + + //閲嶆柊娉ㄥ唽 + _Dps_MapReset_Logic_(); +} + +function _Dps_MapReset_Logic_() { + local Cofig = GlobalConfig.Get("寮傜晫閲嶇疆_Lenheart.json"); + // E2寮傜晫閲嶇疆鍒 + Cb_Use_Item_Sp_Func[Cofig["閲嶇疆E2寮傜晫鍦颁笅鍩庢鏁"]] <- ResetE2DgnFuncBynangua; + // E3寮傜晫閲嶇疆鍒 + Cb_Use_Item_Sp_Func[Cofig["閲嶇疆E3寮傜晫鍦颁笅鍩庢鏁"]] <- ResetE3DgnFuncBynangua; +} diff --git a/绀轰緥椤圭洰/寮傜晫閲嶇疆/寮傜晫閲嶇疆_Lenheart.json b/绀轰緥椤圭洰/寮傜晫閲嶇疆/寮傜晫閲嶇疆_Lenheart.json new file mode 100644 index 0000000..d55ecc0 --- /dev/null +++ b/绀轰緥椤圭洰/寮傜晫閲嶇疆/寮傜晫閲嶇疆_Lenheart.json @@ -0,0 +1,4 @@ +{ + "閲嶇疆E2寮傜晫鍦颁笅鍩庢鏁": 2021458805, + "閲嶇疆E3寮傜晫鍦颁笅鍩庢鏁": 2021458806 +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/寮哄寲澧炲箙鑽墏/Proj.ifo b/绀轰緥椤圭洰/寮哄寲澧炲箙鑽墏/Proj.ifo new file mode 100644 index 0000000..d26273b --- /dev/null +++ b/绀轰緥椤圭洰/寮哄寲澧炲箙鑽墏/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "寮哄寲澧炲箙鑽墏", + "ProjectDescribe": "浣跨敤鎸囧畾鑽墏澧炲姞寮哄寲/澧炲箙", + "ProjectAuthor": "Pluto", + "ProjectVersion": 1.1, + "ProjectConfig": "寮哄寲澧炲箙鑽墏_Pluto.json", + "ProjectFiles": [ + "寮哄寲澧炲箙鑽墏.nut" + ], + "ProjectRunFunc": "_Dps_EnhancementPotion_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/寮哄寲澧炲箙鑽墏/寮哄寲澧炲箙鑽墏.nut b/绀轰緥椤圭洰/寮哄寲澧炲箙鑽墏/寮哄寲澧炲箙鑽墏.nut new file mode 100644 index 0000000..18896c5 --- /dev/null +++ b/绀轰緥椤圭洰/寮哄寲澧炲箙鑽墏/寮哄寲澧炲箙鑽墏.nut @@ -0,0 +1,63 @@ +/* +鏂囦欢鍚:寮哄寲鑽墏.nut +璺緞:寮哄寲鑽墏/寮哄寲鑽墏.nut +鍒涘缓鏃ユ湡:2025-03-10 +鏂囦欢鐢ㄩ:浣跨敤寮哄寲鑽墏澧炲姞寮哄寲鎴愬姛鍑犵巼 +*/ + +function _Dps_EnhancementPotion_Main_() { + // 娉ㄥ唽寮哄寲杩涘叆鍥炶皟 + Cb_WongWork_CItemUpgrade_Enter_Func["寮哄寲鑽墏_閫昏緫"] <- function(args) { + local Config = GlobalConfig.Get("寮哄寲澧炲箙鑽墏_Pluto.json"); + local SUser = User(args[1]); + local invenItem = args[2]; + local upgradeInfo = args[3]; + + // 妫鏌ュ紑鍏 + if (!Config["寮鍏(true/false)"]) { + return args; + } + + // 妫鏌ョ敤鎴锋槸鍚︽嫢鏈夊己鍖栬嵂鍓 + local hasPotion = Sq_CallFunc( + S_Ptr("0x865E994"), + "int", + ["pointer", "int"], + SUser.C_Object, + Config["寮哄寲鑽墏ID"] + ); + + if (!hasPotion) { + return args; + } + + // 璇诲彇鍩虹姒傜巼 + local probBase = NativePointer(args[0]).add(0x4EC).readU32(); + + // 鑾峰彇褰撳墠寮哄寲绛夌骇鍜岀洰鏍囩瓑绾 + local currentLevel = Sq_CallFunc(S_Ptr("0x080F506C"), "int", ["pointer"], invenItem); + local targetLevel = currentLevel + 1; + + // 璇诲彇鍘熷澶辫触鐜 + local originalFailRate = NativePointer(upgradeInfo).add(32).readU32(); + + // 鑾峰彇姒傜巼鍔犳垚鍊 + local charac_no = SUser.GetCID().tostring(); + local boost = Config["榛樿澧炲姞姒傜巼"]; + + // 妫鏌ユ槸鍚︽槸鎸囧畾瑙掕壊锛屼娇鐢ㄦ寚瀹氳鑹茬殑姒傜巼 + if (Config["鎸囧畾瑙掕壊姒傜巼"].rawin(charac_no)) { + boost = Config["鎸囧畾瑙掕壊姒傜巼"][charac_no]; + } + + // 璁$畻鏂扮殑澶辫触鐜 + if (boost > 0) { + local boostAmount = (probBase * boost / 100).tointeger(); + local newFailRate = originalFailRate - boostAmount; + if (newFailRate < 0) newFailRate = 0; + NativePointer(upgradeInfo).add(32).writeU32(newFailRate); + } + + return args; + } +} diff --git a/绀轰緥椤圭洰/寮哄寲澧炲箙鑽墏/寮哄寲澧炲箙鑽墏_Pluto.json b/绀轰緥椤圭洰/寮哄寲澧炲箙鑽墏/寮哄寲澧炲箙鑽墏_Pluto.json new file mode 100644 index 0000000..2dbeb13 --- /dev/null +++ b/绀轰緥椤圭洰/寮哄寲澧炲箙鑽墏/寮哄寲澧炲箙鑽墏_Pluto.json @@ -0,0 +1,11 @@ +{ + "寮鍏(true/false)": true, + "寮哄寲鑽墏ID": 2600025, + "榛樿澧炲姞姒傜巼": 10, + "鎸囧畾瑙掕壊姒傜巼": { + "1": 100, + "2": 50 + }, + "姒傜巼璇存槑":"姒傜巼鍊10浠h〃澧炲姞10%鐨勬鐜", + "鎸囧畾瑙掕壊璇存槑":"瑙掕壊ID鍙互鏌ョ湅鏁版嵁搴撲腑 taiwan_cain 鈫 charac_info 鈫 charac_no浠h〃瑙掕壊ID" +} diff --git a/绀轰緥椤圭洰/寮哄寲澧炲箙閿婚犺嵂鍓/Proj.ifo b/绀轰緥椤圭洰/寮哄寲澧炲箙閿婚犺嵂鍓/Proj.ifo new file mode 100644 index 0000000..51cb131 --- /dev/null +++ b/绀轰緥椤圭洰/寮哄寲澧炲箙閿婚犺嵂鍓/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "寮哄寲澧炲箙閿婚犺嵂鍓", + "ProjectDescribe": "浣跨敤鑽墏鎴栨寔鏈夋寚瀹氱墿鍝佹椂澧炲姞寮哄寲/澧炲箙/閿婚犳鐜", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.0, + "ProjectConfig": "寮哄寲澧炲箙閿婚犺嵂鍓傞厤缃甠nangua.json", + "ProjectFiles": [ + "寮哄寲澧炲箙閿婚犺嵂鍓.nut" + ], + "ProjectRunFunc": "_Dps_Increase_probability_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/寮哄寲澧炲箙閿婚犺嵂鍓/寮哄寲澧炲箙閿婚犺嵂鍓.nut b/绀轰緥椤圭洰/寮哄寲澧炲箙閿婚犺嵂鍓/寮哄寲澧炲箙閿婚犺嵂鍓.nut new file mode 100644 index 0000000..8653551 --- /dev/null +++ b/绀轰緥椤圭洰/寮哄寲澧炲箙閿婚犺嵂鍓/寮哄寲澧炲箙閿婚犺嵂鍓.nut @@ -0,0 +1,64 @@ +// 寮哄寲鏃朵娇鐢ㄨ鑹 +upgrade_user <- null; +// 寮哄寲鏃朵娇鐢ㄦ潗鏂 +current_material <- null; +// 閿婚犳椂浣跨敤瑙掕壊 +Separate_user <- null; +// 寮哄寲瑁呭鏃 +function _Dps_Increase_probability_Main_() { + Cb_WongWork_CItemUpgrade_Enter_Func._Upgrade_Item <- function(args) { + upgrade_user = User(args[1]); + local upgrade_info_t = args[3]; + local Upgrade_rand = NativePointer(upgrade_info_t).add(32).readU32(); + // 濡傛灉鏉愭枡鏄3242鍒欎唬琛ㄥ骞咃紝濡傛灉鏄3171鍒欎唬琛ㄥ己鍖 + current_material = NativePointer(upgrade_info_t).add(44).readU32(); + } + + // 閿婚犺澶囨椂 + Cb_WongWork_CItemUpgrade_Separate_Enter_Func.Separate_Upgrade <- function(args) { + Separate_user = User(args[1]); + local upgrade_info_t = args[3]; + local Upgrade_rand = NativePointer(upgrade_info_t).add(4).readU32(); + local Separate_rand = 10 * Upgrade_rand; + } + // 闅忔満鍊 + Cb_CMTRand_randInt_Leave_Func._Upgrade_Item <- function(args) { + local address = Haker.NextReturnAddress; + local Config = GlobalConfig.Get("寮哄寲澧炲箙閿婚犺嵂鍓傞厤缃甠nangua.json"); + if(address == "0x8547768") { + local rand = args.pop(); + local charac_no = upgrade_user.GetCID().tostring(); + if (current_material == Config["寮哄寲鑽墏"]["寮哄寲鏉愭枡(濡備綘鐨勫己鍖栨潗鏂欐槸3171,鍒欒繖閲屽啓3171)"] && Sq_CallFunc(S_Ptr("0x865E994"), "int", ["pointer", "int"], upgrade_user.C_Object, Config["寮哄寲鑽墏"]["鑽墏ID"]) && Config["寮哄寲鑽墏"]["寮鍏(true寮鍚/false鍏抽棴)"]) { + local prob = Config["寮哄寲鑽墏"]["澧炲姞姒傜巼鍊"]; + if (Config["寮哄寲鑽墏"]["鎸囧畾瑙掕壊姒傜巼鍊"].rawin(charac_no)) { + prob = Config["寮哄寲鑽墏"]["鎸囧畾瑙掕壊姒傜巼鍊"][charac_no]; + } + local increase = rand * prob; + local result = rand + increase; + if (result > 100000) result = 100000; + return result; + }else if (current_material == Config["澧炲箙鑽墏"]["澧炲箙鏉愭枡(濡備綘鐨勫骞呮潗鏂欐槸3242,鍒欒繖閲屽啓3242)"] && Sq_CallFunc(S_Ptr("0x865E994"), "int", ["pointer", "int"], upgrade_user.C_Object, Config["澧炲箙鑽墏"]["鑽墏ID"]) && Config["澧炲箙鑽墏"]["寮鍏(true寮鍚/false鍏抽棴)"]) { + local prob = Config["澧炲箙鑽墏"]["澧炲姞姒傜巼鍊"]; + if (Config["澧炲箙鑽墏"]["鎸囧畾瑙掕壊姒傜巼鍊"].rawin(charac_no)) { + prob = Config["澧炲箙鑽墏"]["鎸囧畾瑙掕壊姒傜巼鍊"][charac_no]; + } + local increase = rand * prob; + local result = rand + increase; + if (result > 100000) result = 100000; + return result; + } + }else if(address == "0x811e506" && Config["閿婚犺嵂鍓"]["寮鍏(true寮鍚/false鍏抽棴)"]) { + local rand = args.pop(); + local charac_no = Separate_user.GetCID().tostring(); + if (Sq_CallFunc(S_Ptr("0x865E994"), "int", ["pointer", "int"], Separate_user.C_Object, Config["閿婚犺嵂鍓"]["鑽墏ID"])) { + local prob = Config["閿婚犺嵂鍓"]["澧炲姞姒傜巼鍊"]; + if (Config["閿婚犺嵂鍓"]["鎸囧畾瑙掕壊姒傜巼鍊"].rawin(charac_no)) { + prob = Config["閿婚犺嵂鍓"]["鎸囧畾瑙掕壊姒傜巼鍊"][charac_no]; + } + local result = rand / (1 + prob); + if (result < 1) result = 1; + return result; + } + } + } +} diff --git a/绀轰緥椤圭洰/寮哄寲澧炲箙閿婚犺嵂鍓/寮哄寲澧炲箙閿婚犺嵂鍓傞厤缃甠nangua.json b/绀轰緥椤圭洰/寮哄寲澧炲箙閿婚犺嵂鍓/寮哄寲澧炲箙閿婚犺嵂鍓傞厤缃甠nangua.json new file mode 100644 index 0000000..55f16dd --- /dev/null +++ b/绀轰緥椤圭洰/寮哄寲澧炲箙閿婚犺嵂鍓/寮哄寲澧炲箙閿婚犺嵂鍓傞厤缃甠nangua.json @@ -0,0 +1,35 @@ +{ + "寮哄寲鑽墏": { + "寮鍏(true寮鍚/false鍏抽棴)":true, + "鑽墏ID":2600025, + "寮哄寲鏉愭枡(濡備綘鐨勫己鍖栨潗鏂欐槸3171,鍒欒繖閲屽啓3171)":3171, + "澧炲姞姒傜巼鍊":0.1, + "鎸囧畾瑙掕壊姒傜巼鍊":{ + "1":0.1, + "2":0.1 + } + }, + "澧炲箙鑽墏": { + "寮鍏(true寮鍚/false鍏抽棴)":true, + "鑽墏ID":2600025, + "澧炲箙鏉愭枡(濡備綘鐨勫骞呮潗鏂欐槸3242,鍒欒繖閲屽啓3242)":3242, + "澧炲姞姒傜巼鍊":0.1, + "鎸囧畾瑙掕壊姒傜巼鍊":{ + "1":0.1, + "2":0.1 + } + }, + "閿婚犺嵂鍓": { + "寮鍏(true寮鍚/false鍏抽棴)":true, + "鑽墏ID":2600025, + "澧炲姞姒傜巼鍊":0.1, + "鎸囧畾瑙掕壊姒傜巼鍊":{ + "1":0.1, + "2":0.1 + } + }, + "姒傜巼璇存槑1":"1姒傜巼鍊0.1浠h〃10%鐨勬鐜,10%骞朵笉鏄鎻愰珮10%鐨勬鐜,鍥犱负寮哄寲鏃舵湁涓涓殢鏈烘暟0-10涓", + "姒傜巼璇存槑2":"鎵浠ュ己鍖栨椂濡傛灉闅忔満鍊兼槸1涓,鎻愰珮10%鐨勬鐜囧氨鏄10000*0.1=1000,鏈缁堥殢鏈烘暟鏄11000(10000+1000)", + "姒傜巼璇存槑3":"鍦ㄥ己鍖栨椂濡傛垚鍔熺巼鏄20%,閭d箞浠栫殑闅忔満鍊煎氨鏄20000,濡傛灉姒傜巼鍊煎ぇ浜20000灏变細寮哄寲鎴愬姛,濡傛灉姒傜巼鍊煎皬浜20000灏变細澶辫触", + "鎸囧畾瑙掕壊璇存槑":"瑙掕壊ID鍙互鏌ョ湅鏁版嵁搴撲腑 taiwan_cain 鈫 charac_info 鈫 charac_no浠h〃瑙掕壊ID" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/寮哄寲鐩稿叧姒傜巼鎻愬崌/Proj.ifo b/绀轰緥椤圭洰/寮哄寲鐩稿叧姒傜巼鎻愬崌/Proj.ifo new file mode 100644 index 0000000..5bb6317 --- /dev/null +++ b/绀轰緥椤圭洰/寮哄寲鐩稿叧姒傜巼鎻愬崌/Proj.ifo @@ -0,0 +1,9 @@ +{ + "ProjectName": "寮哄寲鐩稿叧姒傜巼鎻愬崌", + "ProjectDescribe": "寮哄寲銆佸骞呫侀敾閫犲彲浠ユ牴鎹鑹睮D鎴栬呯┛鎴寸殑鐗╁搧ID鎻愬崌姒傜巼鍙互鍙犲姞姒傜巼锛屾寚瀹氳鑹蹭紭鍏堢骇鏈楂", + "ProjectAuthor": "灏忓崡鐡", + "ProjectVersion": 1.0, + "ProjectConfig": "寮哄寲鐩稿叧姒傜巼閰嶇疆.json", + "ProjectFiles": ["寮哄寲澧炲箙閿婚.nut"], + "ProjectRunFunc": "_Dps_Upgrade_Boost_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/寮哄寲鐩稿叧姒傜巼鎻愬崌/寮哄寲澧炲箙閿婚.nut b/绀轰緥椤圭洰/寮哄寲鐩稿叧姒傜巼鎻愬崌/寮哄寲澧炲箙閿婚.nut new file mode 100644 index 0000000..dec45bd --- /dev/null +++ b/绀轰緥椤圭洰/寮哄寲鐩稿叧姒傜巼鎻愬崌/寮哄寲澧炲箙閿婚.nut @@ -0,0 +1,134 @@ +function _Dps_Upgrade_Boost_Main_() { + _Dps_Upgrade_Boost_Logic_(); +} + +function _Dps_Upgrade_Boost_Main_Reload_(OldConfig) { + _Dps_Upgrade_Boost_Logic_(); +} + +function _Dps_Upgrade_Boost_Logic_() { + + Cb_WongWork_CItemUpgrade_Enter_Func._Upgrade_Boost <- function(args) { + local SUser = User(args[1]); + local characNo = SUser.GetCID(); + local invenItem = args[2]; + local upgradeInfo = args[3]; + local probBase = NativePointer(args[0]).add(0x4EC).readU32(); + + local currentLevel = Sq_CallFunc(S_Ptr("0x080F506C"), "int", ["pointer"], invenItem); + local targetLevel = currentLevel + 1; + + local originalFailRate = NativePointer(upgradeInfo).add(32).readU32(); + local isAmplify = _UpgradeBoostHelper.hasAmplifyAbility(invenItem); + local upgradeType = isAmplify ? "澧炲箙" : "寮哄寲"; + + local boost = _UpgradeBoostHelper.getFinalBoost(SUser, targetLevel, upgradeType); + + if (boost > 0) { + local boostAmount = (probBase * boost / 100).tointeger(); + local newFailRate = originalFailRate - boostAmount; + if (newFailRate < 0) newFailRate = 0; + NativePointer(upgradeInfo).add(32).writeU32(newFailRate); + } + } + + Cb_WongWork_CItemUpgrade_Separate_Enter_Func._Separate_Boost <- function(args) { + local thisPtr = args[0]; + local SUser = User(args[1]); + local invenItem = args[2]; + local upgradeInfo = args[3]; + + local originalFailRate = NativePointer(upgradeInfo).add(4).readU32(); + local probBase = NativePointer(thisPtr).add(400).readU32(); + local currentLevel = NativePointer(invenItem).add(51).readU8(); + local targetLevel = currentLevel + 1; + + local boost = _UpgradeBoostHelper.getFinalBoost(SUser, targetLevel, "閿婚"); + + if (boost > 0) { + local boostAmount = ((probBase / 10) * boost / 100).tointeger(); + local newFailRate = originalFailRate + boostAmount; + if (newFailRate > 10000) newFailRate = 10000; + NativePointer(upgradeInfo).add(4).writeU32(newFailRate); + } + } +} + +class _UpgradeBoostHelper { + + function hasAmplifyAbility(invenItem) { + return NativePointer(invenItem).add(17).readU8() != 0; + } + + function isInRange(level, rangeStr) { + local parts = split(rangeStr, "-"); + + if (parts.len() == 1) { + return level == parts[0].tointeger(); + } else if (parts.len() == 2) { + local min = parts[0].tointeger(); + local max = parts[1].tointeger(); + return level >= min && level <= max; + } + + return false; + } + + function getBoostFromConfig(config, level, upgradeType) { + if (!config.rawin(upgradeType)) return 0; + + local typeConfig = config[upgradeType]; + + if (typeof typeConfig == "array") { + foreach (rule in typeConfig) { + if (rule.rawin("鐩爣绛夌骇") && rule.rawin("鍔犳垚")) { + if (_UpgradeBoostHelper.isInRange(level, rule["鐩爣绛夌骇"])) { + return rule["鍔犳垚"]; + } + } + } + return 0; + } + + if (typeof typeConfig == "table") { + local levelKey = level.tostring(); + if (typeConfig.rawin(levelKey)) { + return typeConfig[levelKey]; + } + } + + return 0; + } + + function getFinalBoost(user, level, upgradeType) { + local Config = GlobalConfig.Get("寮哄寲鐩稿叧姒傜巼閰嶇疆.json"); + local characNo = user.GetCID(); + + // 1. 妫鏌IP + foreach (vip in Config["VIP閰嶇疆"]) { + if (vip["瑙掕壊ID"] == characNo) { + return _UpgradeBoostHelper.getBoostFromConfig(vip, level, upgradeType); + } + } + + // 2. 妫鏌ョ┛鎴寸墿鍝侊紙鍙犲姞锛 + local InvenObj = user.GetInven(); + if (!InvenObj) return 0; + + local totalBoost = 0; + + foreach (itemCfg in Config["鐗╁搧閰嶇疆"]) { + local itemObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_BODY, itemCfg["妲戒綅"]); + if (itemObj.IsEmpty) continue; + + local itemId = itemObj.GetIndex(); + + if (itemId == itemCfg["鐗╁搧ID"]) { + local itemBoost = _UpgradeBoostHelper.getBoostFromConfig(itemCfg, level, upgradeType); + totalBoost += itemBoost; + } + } + + return totalBoost; + } +} diff --git a/绀轰緥椤圭洰/寮哄寲鐩稿叧姒傜巼鎻愬崌/寮哄寲鐩稿叧姒傜巼閰嶇疆.json b/绀轰緥椤圭洰/寮哄寲鐩稿叧姒傜巼鎻愬崌/寮哄寲鐩稿叧姒傜巼閰嶇疆.json new file mode 100644 index 0000000..6c317bd --- /dev/null +++ b/绀轰緥椤圭洰/寮哄寲鐩稿叧姒傜巼鎻愬崌/寮哄寲鐩稿叧姒傜巼閰嶇疆.json @@ -0,0 +1,71 @@ +{ + "VIP閰嶇疆": [ + { + "瑙掕壊ID": 1111111, + "澶囨敞": "GM娴嬭瘯鍙", + "寮哄寲": [ + {"鐩爣绛夌骇": "1-4", "鍔犳垚": 20}, + {"鐩爣绛夌骇": "5-7", "鍔犳垚": 15}, + {"鐩爣绛夌骇": "8-10", "鍔犳垚": 10}, + {"鐩爣绛夌骇": "11-15", "鍔犳垚": 5} + ], + "澧炲箙": [ + {"鐩爣绛夌骇": "1-4", "鍔犳垚": 20}, + {"鐩爣绛夌骇": "5-7", "鍔犳垚": 15}, + {"鐩爣绛夌骇": "8-10", "鍔犳垚": 10}, + {"鐩爣绛夌骇": "11-15", "鍔犳垚": 5} + ], + "閿婚": [ + {"鐩爣绛夌骇": "1-3", "鍔犳垚": 10}, + {"鐩爣绛夌骇": "4-7", "鍔犳垚": 5} + ] + } + ], + "鐗╁搧閰嶇疆": [ + { + "妲戒綅": 11, + "鐗╁搧ID": 600330013, + "澶囨敞": "绉板彿", + "寮哄寲": [ + {"鐩爣绛夌骇": "1-4", "鍔犳垚": 20}, + {"鐩爣绛夌骇": "5-10", "鍔犳垚": 15}, + {"鐩爣绛夌骇": "11-15", "鍔犳垚": 10} + ], + "澧炲箙": [ + {"鐩爣绛夌骇": "1-4", "鍔犳垚": 20}, + {"鐩爣绛夌骇": "5-10", "鍔犳垚": 15}, + {"鐩爣绛夌骇": "11-15", "鍔犳垚": 10} + ], + "閿婚": [ + {"鐩爣绛夌骇": "1-3", "鍔犳垚": 10}, + {"鐩爣绛夌骇": "4-7", "鍔犳垚": 5} + ] + }, + { + "妲戒綅": 22, + "鐗╁搧ID": 63118, + "澶囨敞": "瀹犵墿", + "寮哄寲": [ + {"鐩爣绛夌骇": "1-10", "鍔犳垚": 15}, + {"鐩爣绛夌骇": "11-15", "鍔犳垚": 10} + ], + "澧炲箙": [ + {"鐩爣绛夌骇": "1-10", "鍔犳垚": 15}, + {"鐩爣绛夌骇": "11-15", "鍔犳垚": 10} + ], + "閿婚": [ + {"鐩爣绛夌骇": "1-7", "鍔犳垚": 8} + ] + } + ], + "閰嶇疆璇存槑": { + "鐩爣绛夌骇璇存槑": "鐩爣绛夌骇5琛ㄧず寮哄寲鍒+5(浠+4寮哄埌+5)", + "鑼冨洿璇存槑": "5-10琛ㄧず寮哄寲鍒+5~+10閮戒韩鍙楁鍔犳垚", + "鍗曚釜鏁板瓧": "涔熷彲浠ュ啓鍗曚釜鏁板瓧濡 10 琛ㄧず鍙湁+10浜彈鍔犳垚", + "鍔犳垚璁$畻": "鍘熸鐜+鍔犳垚鍊,濡傚師鏈10%鍔犳垚20鍒欏彉30%", + "浼樺厛绾": "VIP閰嶇疆浼樺厛,鐗╁搧閰嶇疆鍙犲姞", + "妲戒綅": "韬笂绌跨殑瑁呭妲戒綅(0-25)//0鏃惰甯藉瓙, 1鏃惰澶村彂, 2鏃惰鑴搁儴, 3鏃惰涓婅。, 4鏃惰涓嬭, 5鏃惰闉嬪瓙, 6鏃惰鎶よ偐, 7鏃惰鑵板甫, 8鏃惰鐨偆, 9鍏夌幆, 10姝﹀櫒, 11绉板彿, 12涓婅。, 13澶磋偐, 14涓嬭, 15闉嬪瓙, 16鑵板甫, 17椤归摼, 18鎵嬮暞, 19鎴掓寚, 20宸︽Ы, 21鍙虫Ы, 22瀹犵墿, 23瀹犵墿瑁呭绾, 24瀹犵墿瑁呭钃, 25瀹犵墿瑁呭缁", + "瑙掕壊ID": "瑙掕壊ID鍙互鑷鏌ョ湅鏁版嵁搴撲腑 搴撳悕taiwan_cain 鈫 琛ㄥ悕charac_info 鈫 瀛楁charac_no浠h〃瑙掕壊ID, 鍙互鐞嗚В涓鸿鑹叉敞鍐岄『搴, 绗竴涓敞鍐岀殑瑙掕壊ID灏辨槸1" + } +} + diff --git a/绀轰緥椤圭洰/蹇冩偊鎾姤/Proj.ifo b/绀轰緥椤圭洰/蹇冩偊鎾姤/Proj.ifo new file mode 100644 index 0000000..635cc91 --- /dev/null +++ b/绀轰緥椤圭洰/蹇冩偊鎾姤/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "蹇冩偊鎾姤", + "ProjectDescribe": "鐧诲綍鏃舵牴鎹畬鎴愮殑蹇冩偊浠诲姟瀵瑰簲绛夌骇鎾姤涓嶅悓鐨勬彁绀", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.0, + "ProjectConfig": "蹇冩偊鎾姤閰嶇疆_Nangua.json", + "ProjectFiles": [ + "蹇冩偊鎾姤.nut" + ], + "ProjectRunFunc": "_Dps_LoginByXY_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/蹇冩偊鎾姤/蹇冩偊鎾姤.nut b/绀轰緥椤圭洰/蹇冩偊鎾姤/蹇冩偊鎾姤.nut new file mode 100644 index 0000000..fb33de1 --- /dev/null +++ b/绀轰緥椤圭洰/蹇冩偊鎾姤/蹇冩偊鎾姤.nut @@ -0,0 +1,45 @@ +function _Dps_LoginByXY_Main_() { + Cb_reach_game_world_Func.LoginByXy <- function(SUser) { + local Config = GlobalConfig.Get("蹇冩偊鎾姤閰嶇疆_Nangua.json"); + local quest = SUser.GetQuest(); // 鑾峰彇浠诲姟瀵硅薄 + local WongWork_CQuestClear = NativePointer(quest).add(4); + local highestRank = 0; + local highestRankConfig = null; + foreach(taskConfig in Config["蹇冩偊鎾姤閰嶇疆"]["浠诲姟绛夌骇閰嶇疆"]) { + local isCleared = _LoginBynangua.isClearedQuest(WongWork_CQuestClear.C_Object, taskConfig["浠诲姟ID"]); + if (isCleared && taskConfig["蹇冩偊绛夌骇"] > highestRank) { + highestRank = taskConfig["蹇冩偊绛夌骇"]; + highestRankConfig = taskConfig; + } + } + + local config = Config["蹇冩偊鎾姤閰嶇疆"]["蹇冩偊浼氬憳鐧诲綍鎾姤"]; + if (highestRank > 0 && config["寮鍏(true涓哄紑鍚,false涓哄叧闂)"]) { + Timer.SetTimeOut(function(SUser, config, highestRankConfig) { + _LoginBynangua.VIP_LoginBynangua(SUser, config, highestRankConfig); + }, 1, SUser, config, highestRankConfig); + } + } +} + +//蹇冩偊浼氬憳鐧诲綍鎾姤 +class _LoginBynangua { + function VIP_LoginBynangua(SUser, config, rankConfig) { + local LoginMsgObj = AdMsg(); + LoginMsgObj.PutType(config["淇℃伅鎾姤鍙戦佷綅缃"]); + if (config["淇℃伅鎾姤鍙戦佷綅缃"] != 14) { + LoginMsgObj.PutString(" "); + } + LoginMsgObj.PutImoticon(rankConfig["鍥炬爣"]); + LoginMsgObj.PutColorString(config["鏍囬"], rankConfig["鏂囨湰棰滆壊"]); + LoginMsgObj.PutColorString("<" + rankConfig["蹇冩偊绛夌骇"] + ">", rankConfig["蹇冩偊绛夌骇棰滆壊"]); + LoginMsgObj.PutColorString("[" + SUser.GetCharacName() + "]", rankConfig["瑙掕壊鍚嶅瓧棰滆壊"]); + LoginMsgObj.PutColorString(config["缁撳熬淇℃伅鍐呭"], rankConfig["鏂囨湰棰滆壊"]); + LoginMsgObj.Finalize(); + World.SendAll(LoginMsgObj.MakePack()); + LoginMsgObj.Delete(); + } + function isClearedQuest(C_Object, questID) { + return Sq_CallFunc(S_Ptr("0x808BAE0"), "bool", ["pointer", "int"], C_Object, questID); + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/蹇冩偊鎾姤/蹇冩偊鎾姤閰嶇疆_Nangua.json b/绀轰緥椤圭洰/蹇冩偊鎾姤/蹇冩偊鎾姤閰嶇疆_Nangua.json new file mode 100644 index 0000000..1366d91 --- /dev/null +++ b/绀轰緥椤圭洰/蹇冩偊鎾姤/蹇冩偊鎾姤閰嶇疆_Nangua.json @@ -0,0 +1,36 @@ +{ + "蹇冩偊鎾姤閰嶇疆":{ + "蹇冩偊浼氬憳鐧诲綍鎾姤":{ + "寮鍏(true涓哄紑鍚,false涓哄叧闂)":true, + "淇℃伅鎾姤鍙戦佷綅缃":14, + "鏍囬":" 灏婅吹蹇冩偊", + "缁撳熬淇℃伅鍐呭":"宸茬櫥褰曟父鎴" + }, + "浠诲姟绛夌骇閰嶇疆": [ + { + "浠诲姟ID": 102, + "蹇冩偊绛夌骇": 1, + "蹇冩偊绛夌骇棰滆壊":[0, 255, 128], + "鍥炬爣":48, + "瑙掕壊鍚嶅瓧棰滆壊":[255, 20, 0], + "鏂囨湰棰滆壊":[255, 120, 0] + }, + { + "浠诲姟ID": 103, + "蹇冩偊绛夌骇": 2, + "蹇冩偊绛夌骇棰滆壊":[255, 0, 128], + "鍥炬爣":49, + "瑙掕壊鍚嶅瓧棰滆壊":[255, 20, 0], + "鏂囨湰棰滆壊":[255, 120, 0] + }, + { + "浠诲姟ID": 104, + "蹇冩偊绛夌骇": 3, + "蹇冩偊绛夌骇棰滆壊":[255, 255, 0], + "鍥炬爣":50, + "瑙掕壊鍚嶅瓧棰滆壊":[255, 20, 0], + "鏂囨湰棰滆壊":[255, 120, 0] + } + ] + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鎬墿鏀诲煄/Proj.ifo b/绀轰緥椤圭洰/鎬墿鏀诲煄/Proj.ifo new file mode 100644 index 0000000..068d2d2 --- /dev/null +++ b/绀轰緥椤圭洰/鎬墿鏀诲煄/Proj.ifo @@ -0,0 +1,12 @@ +{ + "ProjectName": "鎬墿鏀诲煄", + "ProjectDescribe": "鏍规嵁json鐨勬椂闂村紑鍚墿鏀诲煄锛屽彲瀹炴椂淇敼锛屾病鏈夐樁娈垫ф病鏈夋儵缃氾紝鍗曠函鏉鎬粰濂栧姳", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.2, + "ProjectIcon": "http://su782j8qj.hd-bkt.clouddn.com/image/%E6%80%AA%E7%89%A9%E6%94%BB%E5%9F%8E%E5%9B%BE%E6%A0%87.jpg", + "ProjectConfig": "鎬墿鏀诲煄_鍗楃摐.json", + "ProjectFiles": [ + "鎬墿鏀诲煄.nut" + ], + "ProjectRunFunc": "_Dps_VillageAttack_nangua_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鎬墿鏀诲煄/鎬墿鏀诲煄.nut b/绀轰緥椤圭洰/鎬墿鏀诲煄/鎬墿鏀诲煄.nut new file mode 100644 index 0000000..29f4096 --- /dev/null +++ b/绀轰緥椤圭洰/鎬墿鏀诲煄/鎬墿鏀诲煄.nut @@ -0,0 +1,397 @@ +//娲诲姩寮濮嬮樁娈 +local VILLAGEATTACK_STATE_START = 0; +//娲诲姩缁撴潫闃舵 +local VILLAGEATTACK_STATE_END = 3; + +//鎬墿鏀诲煄娲诲姩鏁版嵁 +local villageAttackEventInfo = { + "state": VILLAGEATTACK_STATE_END, //娲诲姩褰撳墠鐘舵 + "score": 0, //褰撳墠闃舵棰戦亾鍐呮籔T + "start_time": 0, //娲诲姩寮濮嬫椂闂 + "defend_success": 0, //鎬墿鏀诲煄娲诲姩闃插畧鎴愬姛 + "user_pt_info": {}, //瑙掕壊涓汉pt鏁版嵁 +} + +//閲嶇疆娲诲姩鏁版嵁 +function Reset_Villageattack_info() { + villageAttackEventInfo.state = VILLAGEATTACK_STATE_START; + villageAttackEventInfo.score = 0; + villageAttackEventInfo.user_pt_info = {}; + villageAttackEventInfo.start_time = time(); + villageAttackEventInfo.defend_success = 0; + print(">>>>>>>>>>>>>>娲诲姩鏁版嵁宸插垵濮嬪寲鎴愬姛<<<<<<<<<<<<<<") +} + +//鎬墿鏀诲煄娲诲姩璁℃椂鍣(姣5绉掕Е鍙戜竴娆) +function Event_Villageattack_Timer() { + if (villageAttackEventInfo.state == VILLAGEATTACK_STATE_END) + return; + //娲诲姩缁撴潫妫娴 + local remain_time = event_villageattack_get_remain_time(); + if (remain_time <= 0) { + //娲诲姩缁撴潫 + on_end_event_villageattack(); + return; + } +} + +//璁$畻娲诲姩鍓╀綑鏃堕棿 +function event_villageattack_get_remain_time() { + local Config = GlobalConfig.Get("鎬墿鏀诲煄_鍗楃摐.json"); + local cur_time = time(); + local event_end_time = villageAttackEventInfo.start_time + Config["鎬墿鏀诲煄閰嶇疆"]["鎬墿鏀诲煄鎬绘椂闀(绉)"]; + local remain_time = event_end_time - cur_time; + return remain_time; +} + +//鏇存柊鎬墿鏀诲煄褰撳墠杩涘害(骞挎挱缁欓閬撳唴鍦ㄧ嚎鐜╁) +function Gameworld_Update_Villageattack_Score() { + local Config = GlobalConfig.Get("鎬墿鏀诲煄_鍗楃摐.json"); + //璁$畻娲诲姩鍓╀綑鏃堕棿 + local remain_time = event_villageattack_get_remain_time(); + if ((remain_time <= 0) || (villageAttackEventInfo.state == VILLAGEATTACK_STATE_END)) + return; + + local Pack = Packet(); + Pack.Put_Header(0, 247); //鍗忚: ENUM_NOTIPACKET_UPDATE_VILLAGE_ATTACKED + Pack.Put_Int(remain_time); //娲诲姩鍓╀綑鏃堕棿 + Pack.Put_Int(villageAttackEventInfo.score); //褰撳墠棰戦亾PT鐐规暟 + Pack.Put_Int(Config["鎬墿鏀诲煄閰嶇疆"]["鎬墿鏀诲煄鑳滃埄鎵闇pt鐐"]); //鎴愬姛闃插畧鎵闇鐐规暟 + + Pack.Finalize(true); + World.SendAll(Pack); + Pack.Delete(); +} + +//寮鍚墿鏀诲煄娲诲姩 +function Start_Villageattack() { + local Config = GlobalConfig.Get("鎬墿鏀诲煄_鍗楃摐.json"); + local a3 = Memory.alloc(100); + //娲诲姩鍓╀綑鏃堕棿 + NativePointer(a3).add(10).writeInt(Config["鎬墿鏀诲煄閰嶇疆"]["鎬墿鏀诲煄鎬绘椂闀(绉)"]); + //褰撳墠棰戦亾PT鐐规暟 + NativePointer(a3).add(14).writeInt(villageAttackEventInfo.score); + //鎴愬姛闃插畧鎵闇鐐规暟 + NativePointer(a3).add(18).writeInt(Config["鎬墿鏀诲煄閰嶇疆"]["鎬墿鏀诲煄鑳滃埄鎵闇pt鐐"]); + //寮鍚墿鏀诲煄 + Sq_CallFunc(S_Ptr("0x84DF47A"), "pointer", ["pointer", "pointer", "pointer"], S_Ptr("0x0"), S_Ptr("0x0"), a3.C_Object); + //璁剧疆鍓湰闅惧害 + NativePointer(S_Ptr("0x085B9605")).writeInt(Config["鎬墿鏀诲煄閰嶇疆"]["娲诲姩榛樿闅惧害(0-4: 鏅-鑻遍泟)"]); + //patch鐩稿叧鍑芥暟, 淇娲诲姩娴佺▼ + Hook_VillageAttack(); + print(">>>>>>>>>>>>>>鎬墿鏀诲煄宸插惎鍔<<<<<<<<<<<<<<<<<<<<"); +} + +//缁撴潫鎬墿鏀诲煄娲诲姩(绔嬪嵆閿姣佹敾鍩庢墿, 涓嶅紑鍚嗚涔嬭胺, 涓嶅彂閫佹椿鍔ㄥ鍔) +function end_villageattack() { + local GlobalData_s_villageMonsterMgr = NativePointer("0x941F77C").readPointer(); + Sq_CallFunc(S_Ptr("0x086B43D4"), "pointer", ["pointer", "int"], GlobalData_s_villageMonsterMgr, 2); + print(">>>>>>>>>>>>>>鎬墿鏀诲煄宸茬粨鏉<<<<<<<<<<<<<<"); +} + +// 寮濮嬫墿鏀诲煄娲诲姩 +function On_Start_Event_VillageattackBynangua() { + // 閲嶇疆娲诲姩鏁版嵁 + Reset_Villageattack_info(); + // 娉ㄥ唽5绉掓鏌ュ畾鏃跺櫒 + Timer.SetCronTask(Event_Villageattack_Timer, { + Cron = "*/5 * * * * *", // 姣5绉掓墽琛屼竴娆 + Name = "VillageAttackCheckTask" + }); + // 閫氱煡鍏ㄦ湇鐜╁娲诲姩寮濮 骞跺埛鏂板煄闀囨墿 + Start_Villageattack(); + Gameworld_Update_Villageattack_Score(); + + // 鍙戦佹椿鍔ㄥ紑濮嬪叕鍛 + local Config = GlobalConfig.Get("鎬墿鏀诲煄_鍗楃摐.json"); + World.SendNotiPacketMessage(Config["鎬墿鏀诲煄鍏憡"]["寮濮"], Config["鎬墿鏀诲煄鍏憡"]["鍙戦佷綅缃"]); +} + +Cb_reach_game_world_Func.villageattackByNangua <- function(SUser) { + //鎬墿鏀诲煄娲诲姩鏇存柊杩涘害 + if (villageAttackEventInfo.state != VILLAGEATTACK_STATE_END) { + //閫氱煡瀹㈡埛绔墦寮娲诲姩UI + Notify_Villageattack_Score(SUser); + } +} + +//閫氱煡鐜╁鎬墿鏀诲煄杩涘害 +function Notify_Villageattack_Score(SUser) { + local Config = GlobalConfig.Get("鎬墿鏀诲煄_鍗楃摐.json"); + // 鐜╁褰撳墠PT鐐 + local charac_no = SUser.GetCID().tostring(); + local villageattack_pt = 0; + + if (charac_no in villageAttackEventInfo.user_pt_info) + villageattack_pt = villageAttackEventInfo.user_pt_info[charac_no][1]; + + // 璁$畻娲诲姩鍓╀綑鏃堕棿 + local remain_time = event_villageattack_get_remain_time(); + + if ((remain_time <= 0) || (villageAttackEventInfo.state == VILLAGEATTACK_STATE_END)) + return; + // 鍙戝寘閫氱煡瑙掕壊鎵撳紑鎬墿鏀诲煄UI骞舵洿鏂板綋鍓嶈繘搴 + local Pack = Packet(); + Pack.Put_Header(0, 248); + Pack.Put_Int(remain_time); // 娲诲姩鍓╀綑鏃堕棿 + Pack.Put_Int(villageAttackEventInfo.score); // 褰撳墠棰戦亾PT鐐规暟 + Pack.Put_Int(Config["鎬墿鏀诲煄閰嶇疆"]["鎬墿鏀诲煄鑳滃埄鎵闇pt鐐"]); // 鎴愬姛闃插畧鎵闇鐐规暟 + Pack.Put_Int(villageattack_pt); // 涓汉PT鐐规暟 + Pack.Finalize(true); + SUser.Send(Pack); + Pack.Delete(); +} + +//鎬墿鏀诲煄娲诲姩鐩稿叧patch +function Hook_VillageAttack() { + Cb_CVillageMonster_SendVillageMonsterFightResult_Leave_Func.Bynangua <- function(args) { + local Config = GlobalConfig.Get("鎬墿鏀诲煄_鍗楃摐.json"); + local village_monster = args[0]; + local SUser = User(args[1]); + local result = args[2]; + if (result) { + local bonus_pt = 1; + local PartyObj = SUser.GetParty(); + if (!PartyObj) return; + for (local i = 0; i < 4; ++i) { + local TUser = PartyObj.GetUser(i); + if (TUser) { + local charac_no = TUser.GetCID().tostring(); + if (!(charac_no in villageAttackEventInfo.user_pt_info)){ + villageAttackEventInfo.user_pt_info[charac_no] <- [TUser.GetUID(), 0]; + } + villageAttackEventInfo.user_pt_info[charac_no][1] += bonus_pt; + VillageAttackedRewardSendReward(TUser); + } + } + villageAttackEventInfo.score += bonus_pt; + Gameworld_Update_Villageattack_Score(); + if (villageAttackEventInfo.score >= Config["鎬墿鏀诲煄閰嶇疆"]["鎬墿鏀诲煄鑳滃埄鎵闇pt鐐"]) { + //鎬墿鏀诲煄娲诲姩闃插畧鎴愬姛, 绔嬪嵆缁撴潫娲诲姩 + villageAttackEventInfo.defend_success = 1; + Timer.SetTimeOut(on_end_event_villageattack, 15); + return; + } + //閫氱煡闃熶紞涓殑鎵鏈夌帺瀹舵洿鏂癙T鐐规暟 + for (local i = 0; i < 4; ++i) { + local TUser = PartyObj.GetUser(i); + if (TUser) { + Notify_Villageattack_Score(TUser); + } + } + } + } +} + +//缁撴潫鎬墿鏀诲煄娲诲姩 +function on_end_event_villageattack() { + local Config = GlobalConfig.Get("鎬墿鏀诲煄_鍗楃摐.json"); + if (villageAttackEventInfo.state == VILLAGEATTACK_STATE_END) + return; + // 璁剧疆娲诲姩鐘舵 + villageAttackEventInfo.state = VILLAGEATTACK_STATE_END; + // 绉婚櫎5绉掓鏌ュ畾鏃跺櫒 + Timer.RemoveCronTask("VillageAttackCheckTask"); + // 绔嬪嵆缁撴潫鎬墿鏀诲煄娲诲姩 + end_villageattack(); + local OnlinePlayerList = World.GetOnlinePlayer(); + // 闃插畧鎴愬姛 + if (villageAttackEventInfo.defend_success == 1) { + // 棰戦亾鍐呭湪绾跨帺瀹跺彂濂 + foreach(SUser in OnlinePlayerList) { + local RewardItems = []; + + // 浠庨厤缃枃浠朵腑鑾峰彇鍥哄畾濂栧姳 + foreach(reward in Config["鎬墿鏀诲煄閰嶇疆"]["鎬墿鏀诲煄闃插畧鎴愬姛鍥哄畾濂栧姳閰嶇疆"]) { + RewardItems.append([reward[0], reward[1]]); + } + + // 鍙戦侀偖浠 + local title = "<鎬墿鏀诲煄娲诲姩>" + local Text = "鎭枩鍕囧+鎴愬姛瀹堟姢鎴戜滑鐨勫鍥!" + SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems) + } + + // 姒滀竴澶у摜 + local rank_first_charac_no = 0; + local rank_first_account_id = 0; + local max_pt = 0; + + // 璁哄姛琛岃祻 + foreach(charac_no, data in villageAttackEventInfo.user_pt_info) { + // 鍙戠偣鍒 + local account_id = villageAttackEventInfo.user_pt_info[charac_no][0]; + local pt = villageAttackEventInfo.user_pt_info[charac_no][1]; + local reward_cera = pt * Config["鎬墿鏀诲煄閰嶇疆"]["鎬墿鏀诲煄鍏朵綑鐜╁鐐瑰埜濂栧姳"]; + // 鐐瑰埜濂栧姳 = 涓汉PT * 10 + + local user_pr = World.GetUserByUid(account_id); + if(Config["鎬墿鏀诲煄閰嶇疆"]["鎬墿鏀诲煄鍏朵綑鐜╁鐐瑰埜濂栧姳"] > 0){ + user_pr.RechargeCera(reward_cera); + user_pr.SendNotiPacketMessage("<鎬墿鏀诲煄娲诲姩> 闃插畧鎴愬姛, 鑾峰緱pt鐐 * " + Config["鎬墿鏀诲煄閰嶇疆"]["鎬墿鏀诲煄鍏朵綑鐜╁鐐瑰埜濂栧姳"] + " 鐨勭偣鍒稿鍔", 14); + } + // 鎵惧嚭姒滀竴澶у摜 + if (pt > max_pt) { + rank_first_charac_no = charac_no; + rank_first_account_id = account_id; + max_pt = pt; + } + } + + // 棰戦亾鍐呭叕鍛婃椿鍔ㄥ凡缁撴潫 + World.SendNotiPacketMessage(Config["鎬墿鏀诲煄鍏憡"]["闃插畧鎴愬姛"], Config["鎬墿鏀诲煄鍏憡"]["鍙戦佷綅缃"]); + if (rank_first_charac_no) { + // 涓汉绉垎鎺掕姒滅涓鍚 棰濆鑾峰緱10鍊嶇偣鍒稿鍔 + local user_pr = World.GetUserByUid(rank_first_account_id); + if(Config["鎬墿鏀诲煄閰嶇疆"]["鎬墿鏀诲煄姒滀竴澶у摜棰濆鐐瑰埜濂栧姳"] > 0){ + user_pr.RechargeCera(max_pt * Config["鎬墿鏀诲煄閰嶇疆"]["鎬墿鏀诲煄姒滀竴澶у摜棰濆鐐瑰埜濂栧姳"]); + user_pr.SendNotiPacketMessage("<鎬墿鏀诲煄娲诲姩> 鎺掕姒滅涓鍚, 鑾峰緱pt鐐 * " + Config["鎬墿鏀诲煄閰嶇疆"]["鎬墿鏀诲煄姒滀竴澶у摜棰濆鐐瑰埜濂栧姳"] + " 鐨勭偣鍒稿鍔", 14); + } + if(Config["鎬墿鏀诲煄閰嶇疆"]["鎬墿鏀诲煄姒滀竴澶у摜棰濆濂栧姳閬撳叿(true寮鍚/false鍏抽棴)"]){ + local reward_items = {}; + foreach(reward in Config["鎬墿鏀诲煄閰嶇疆"]["鎬墿鏀诲煄姒滀竴澶у摜棰濆濂栧姳閬撳叿"]){ + reward_items[reward[0]] <- reward[1]; + } + Timer.SetTimeOut(function(){ + user_pr.SendMail(reward_items, { + Title = "<鎬墿鏀诲煄娲诲姩>", + Text = "鎭枩鑾峰緱鎺掕姒滅涓鍚!" + }); + user_pr.SendNotiPacketMessage("<鎬墿鏀诲煄娲诲姩> 鎭枩鑾峰緱鎺掕姒滅涓鍚,璇峰墠寰閭鏌ョ湅濂栧姳", 14); + }, 3); + } + // 棰戦亾鍐呭箍鎾湰杞椿鍔ㄦ帓琛屾绗竴鍚嶇帺瀹跺悕瀛 + local rank_first_charac_name = _VillageAttackBynangua.Get_charac_name_ByCID(rank_first_charac_no.tointeger()); + World.SendNotiPacketMessage("<鎬墿鏀诲煄娲诲姩> 鎭枩鍕囧+ 銆" + rank_first_charac_name + "銆 鎴愪负涓汉绉垎鎺掕姒滅涓鍚(" + max_pt + "pt)!", 14); + } + } else { + // 闃插畧澶辫触 + World.SendNotiPacketMessage(Config["鎬墿鏀诲煄鍏憡"]["闃插畧澶辫触"], Config["鎬墿鏀诲煄鍏憡"]["鍙戦佷綅缃"]); + } + + // 閲婃斁绌洪棿 + villageAttackEventInfo.user_pt_info = {}; +} + +function VillageAttackedRewardSendReward(SUser) { + local villageAttack_ConfigBynangua = GlobalConfig.Get("鎬墿鏀诲煄_鍗楃摐.json"); + local charac_no = SUser.GetCID().tostring(); + if ((charac_no in villageAttackEventInfo.user_pt_info)) { + local Count = villageAttackEventInfo.user_pt_info[charac_no][1]; + local Config = villageAttack_ConfigBynangua["鎬墿鏀诲煄閰嶇疆"]["鎬墿鏀诲煄濂栧姳閰嶇疆"]["鍑绘潃娆℃暟"]; + + if (Config.rawin(Count.tostring())) { + local rewardConfig = Config[Count.tostring()]; + if (rewardConfig) { + local title = "<鎬墿鏀诲煄娲诲姩>" + local Text = "鎭枩鍕囧+鎴愬姛瀹堟姢鎴戜滑鐨勫鍥!" + local RewardItems = []; + RewardItems.append([rewardConfig[0], rewardConfig[1]]); + SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems); + } + } else { + local title = "<鎬墿鏀诲煄娲诲姩>" + local Text = "鎭枩鍕囧+鎴愬姛瀹堟姢鎴戜滑鐨勫鍥!" + // 浣跨敤榛樿濂栧姳閰嶇疆 + local defaultRewards = villageAttack_ConfigBynangua["鎬墿鏀诲煄閰嶇疆"]["涓嶅湪閰嶇疆琛ㄩ噷鐨勫嚮鏉娆℃暟榛樿濂栧姳閬撳叿"]; + local RewardItems = []; + RewardItems.append([defaultRewards[0], defaultRewards[1]]); + SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems); + } + } +} +class _VillageAttackBynangua{ + function Get_charac_name_ByCID(charac_no) { + local Config = GlobalConfig.Get("鎬墿鏀诲煄_鍗楃摐.json"); + local PoolObj = MysqlPool.GetInstance(); + local Ip = Config["鏁版嵁搴揑P 涓嶆槸澶栫疆鏁版嵁搴撲笉瑕佹洿鏀"]; + local Port = Config["鏁版嵁搴撶鍙 涓嶆噦涓嶈鏇存敼"]; + local DbName = Config["鏁版嵁搴撶敤鎴峰悕 鏈湴鐢ㄦ埛鍚嶄笉鎳備笉瑕佹洿鏀"]; + local Password = Config["鏁版嵁搴撳瘑鐮 鏈湴瀵嗙爜涓嶆噦涓嶈鏇存敼"]; + //璁剧疆鏁版嵁搴撹繛鎺ヤ俊鎭 + PoolObj.SetBaseConfiguration(Ip, Port, DbName, Password); + //杩炴帴姹犲ぇ灏 + PoolObj.PoolSize = 10; + //鍒濆鍖 + PoolObj.Init(); + local sql = "select charac_name from charac_info where charac_no=" + charac_no + ";"; + local column_type_list = ["string"]; + local SqlObj = MysqlPool.GetInstance().GetConnect(); + local result = SqlObj.Select(sql, column_type_list); + MysqlPool.GetInstance().PutConnect(SqlObj); + if (result.len() > 0) { + return result[0][0]; + } + return null; + } +} + +// 鎬墿鏀诲煄娲诲姩鍏ュ彛鐐 +function _Dps_VillageAttack_nangua_Main_() { + _Dps_VillageAttack_nangua_Logic_(); +} + +// 鎬墿鏀诲煄娲诲姩閲嶈浇鍏ュ彛鐐 +function _Dps_VillageAttack_nangua_Main_Reload_(OldConfig) { + // 鍏堢Щ闄ゆ棫鐨勫畾鏃朵换鍔 + Timer.RemoveCronTask("VillageAttackTask"); + + // 閲嶆柊娉ㄥ唽 + _Dps_VillageAttack_nangua_Logic_(); +} + +// 鎬墿鏀诲煄娲诲姩閫昏緫鍏ュ彛鐐 +function _Dps_VillageAttack_nangua_Logic_() { + // 浠庨厤缃腑璇诲彇寮鍚椂闂 + local Config = GlobalConfig.Get("鎬墿鏀诲煄_鍗楃摐.json"); + local hour = Config["鎬墿鏀诲煄閰嶇疆"]["寮鍚椂闂碵XX鐐(24灏忔椂鍒), XX鍒(0-59)]"][0]; + local minute = Config["鎬墿鏀诲煄閰嶇疆"]["寮鍚椂闂碵XX鐐(24灏忔椂鍒), XX鍒(0-59)]"][1]; + + // cron 琛ㄨ揪寮 (绉 鍒 鏃 鏃 鏈 鍛) + local cronExpression = format("0 %d %d * * *", minute, hour); + + // 娉ㄥ唽瀹氭椂浠诲姟 + Timer.SetCronTask(On_Start_Event_VillageattackBynangua, { + Cron = cronExpression, + Name = "VillageAttackTask" + }); +} +//鍙戦両tem閭欢 Pubilc +function User::SendItemMailtest(UID, ItemList, title, content) { + local SUser = World.GetUserByUid(UID); + local CID = SUser.GetCID(); + local sql = "select letter_id from taiwan_cain_2nd.postal order by letter_id DESC"; + local column_type_list = ["int"]; + + local SqlObj = MysqlPool.GetInstance().GetConnect(); + local result = SqlObj.Select(sql, column_type_list); + local sl = 1; + if (result.len() > 0) { + sl = result[0][0] + 1; + } + + local time = date(); + local timeStr = time["year"] + "-" + (time["month"] + 1) + "-" + time["day"] + " " + time["hour"] + ":" + time["min"] + ":" + time["sec"]; + + foreach(value in ItemList) { + local sql1 = "insert into taiwan_cain_2nd.postal (occ_time,send_charac_name,receive_charac_no,amplify_option,amplify_value,seperate_upgrade,seal_flag,item_id,add_info,upgrade,gold,letter_id,avata_flag,creature_flag) values ('" + timeStr + "','" + title + "'," + CID + ",0,0,0,0," + value.item + "," + value.num + ",0,0," + sl + ",'0','0')"; + SqlObj.Select(sql1, []); + } + + local sql2 = "insert into taiwan_cain_2nd.letter (letter_id,charac_no,send_charac_name,letter_text,reg_date,stat) values ('" + sl + "'," + CID + ",'" + title + "','" + content + "','" + timeStr + "','1')"; + SqlObj.Select(sql2, []); + + MysqlPool.GetInstance().PutConnect(SqlObj); + + if (SUser) { + local Pack = Packet(); + Pack.Put_Header(0, 9); + local MailBox = Sq_CallFunc(S_Ptr("0x0823020C"), "int", ["pointer"], SUser.C_Object); + Sq_CallFunc(S_Ptr("0x0823455A"), "int", ["int"], MailBox); + local Not_Count = Sq_CallFunc(S_Ptr("0x084ED330"), "int", ["int"], MailBox); + Pack.Put_Short(Not_Count); + Pack.Finalize(true); + SUser.Send(Pack); + Pack.Delete(); + } +} diff --git a/绀轰緥椤圭洰/鎬墿鏀诲煄/鎬墿鏀诲煄_鍗楃摐.json b/绀轰緥椤圭洰/鎬墿鏀诲煄/鎬墿鏀诲煄_鍗楃摐.json new file mode 100644 index 0000000..d611dd3 --- /dev/null +++ b/绀轰緥椤圭洰/鎬墿鏀诲煄/鎬墿鏀诲煄_鍗楃摐.json @@ -0,0 +1,63 @@ +{ + "鎬墿鏀诲煄閰嶇疆":{ + "濡傛灉鏀诲煄寮鍚悗娌℃湁鎬墿鑷鎺掓煡PVF鏄惁鏈夋敾鍩庡壇鏈琋PK绛":"", + "寮鍏(true寮鍚/false鍏抽棴)":true, + "寮鍚椂闂碵XX鐐(24灏忔椂鍒), XX鍒(0-59)]":[20, 30], + "鎬墿鏀诲煄鑳滃埄鎵闇pt鐐":300, + "鎬墿鏀诲煄鎬绘椂闀(绉)":1800, + "娲诲姩榛樿闅惧害(0-4: 鏅-鑻遍泟)":3, + "鎬墿鏀诲煄濂栧姳閰嶇疆":{ + "鍑绘潃娆℃暟":{ + "1":[3037, 5], + "2":[3037, 5], + "3":[3037, 20], + "4":[1085, 5], + "5":[8, 5], + "6":[1085, 5], + "7":[8, 5], + "8":[15, 1], + "9":[15, 2], + "10":[15, 2], + "11":[15, 2], + "12":[15, 2], + "13":[15, 2], + "14":[15, 2], + "15":[15, 2], + "16":[15, 2], + "17":[15, 2], + "18":[15, 2], + "19":[15, 2], + "20":[15, 2], + "21":[15, 2], + "22":[15, 2], + "23":[15, 2], + "24":[15, 2], + "25":[15, 2], + "26":[15, 2], + "27":[15, 2], + "28":[15, 2], + "29":[15, 2], + "30":[15, 2] + } + }, + "涓嶅湪閰嶇疆琛ㄩ噷鐨勫嚮鏉娆℃暟榛樿濂栧姳閬撳叿":[3037, 10], + "鎬墿鏀诲煄闃插畧鎴愬姛鍥哄畾濂栧姳閰嶇疆":[[3037, 10], [3038, 10]], + "鎬墿鏀诲煄姒滀竴澶у摜棰濆鐐瑰埜濂栧姳":10, + "鎬墿鏀诲煄鍏朵綑鐜╁鐐瑰埜濂栧姳":10, + "鎬墿鏀诲煄姒滀竴澶у摜棰濆濂栧姳閬撳叿(true寮鍚/false鍏抽棴)":false, + "鎬墿鏀诲煄姒滀竴澶у摜棰濆濂栧姳閬撳叿":[[3037,20], [3038,20]], + "鎻愮ず1":"鐐瑰埜濂栧姳涓嶆兂鍙戞斁,鎶婄偣鍒稿悗闈㈢殑鏁板兼敼涓0灏变笉浼氬彂鏀", + "鎻愮ず2":"鐐瑰埜濂栧姳鐨勫彂鏀炬槸鐢盤T鐐逛箻浠ヨ缃殑鐐瑰埜,姣斿璁剧疆鐨勬槸10,閭d箞灏辨槸涓汉PT鐐*10" + }, + "鎬墿鏀诲煄鍏憡":{ + "寮濮":"鎬墿鏀诲煄娲诲姩宸插紑濮嬶紝璇峰悇浣嶇帺瀹跺墠寰鎸戞垬瀹堟姢鎴戜滑鐨勫鍥紒", + "闃插畧鎴愬姛":"鎬墿鏀诲煄娲诲姩闃插畧鎴愬姛锛屾劅璋㈠悇浣嶇帺瀹剁殑鍔姏锛屽鍔卞凡鍙戞斁锛", + "闃插畧澶辫触":"鎬墿鏀诲煄娲诲姩闃插畧澶辫触锛岃鍚勪綅鐜╁缁х画鍔姏锛", + "鍙戦佷綅缃":14, + ">>>鍙戦佷綅缃(0绯荤粺, 1绉佽亰, 2缁勯槦, 3鏅, 6鍏細, 8甯堝緬, 14鍠囧彮, 37绯荤粺)":"" + }, + "鏁版嵁搴揑P 涓嶆槸澶栫疆鏁版嵁搴撲笉瑕佹洿鏀": "127.0.0.1", + "鏁版嵁搴撶鍙 涓嶆噦涓嶈鏇存敼": 3306, + "鏁版嵁搴撶敤鎴峰悕 鏈湴鐢ㄦ埛鍚嶄笉鎳備笉瑕佹洿鏀": "game", + "鏁版嵁搴撳瘑鐮 鏈湴瀵嗙爜涓嶆噦涓嶈鏇存敼": "uu5!^%jg" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鎴樺姏姒/Proj.ifo b/绀轰緥椤圭洰/鎴樺姏姒/Proj.ifo new file mode 100644 index 0000000..4effa8f --- /dev/null +++ b/绀轰緥椤圭洰/鎴樺姏姒/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鎴樺姏姒", + "ProjectDescribe": "棣栧厛鏍规嵁浣跨敤鐨勭櫥褰曞櫒鍦ㄩ厤缃枃浠朵腑閫夊彇瀵瑰簲鐨勭櫥褰曞櫒銆侾VF鐩稿叧涓嶆彁渚涜嚜琛岀爺绌讹紝鏆備笉鏀寔RS鍚姩鍣", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.4, + "ProjectConfig": "鎴樺姏姒滈厤缃甠鍗楃摐.json", + "ProjectFiles": [ + "鎴樺姏姒.nut" + ], + "ProjectRunFunc": "_Dps_Rank_nangua_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鎴樺姏姒/鎴樺姏姒.nut b/绀轰緥椤圭洰/鎴樺姏姒/鎴樺姏姒.nut new file mode 100644 index 0000000..84582ab --- /dev/null +++ b/绀轰緥椤圭洰/鎴樺姏姒/鎴樺姏姒.nut @@ -0,0 +1,326 @@ +// 鎺掕姒滃墠涓夊悕鏁扮粍 榛樿鏁版嵁 +local Ranklist = { + "1": { + "rank": 100, + "characname": "甯濆皧澶╃┕", + "job": 0, + "lev": 60, + "Grow": 4, + "Guilkey": 0, + "GuildName": "璇哥涔嬭崳涓", + "str": "", + "equip": [0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0] + }, + "2": { + "rank": 90, + "characname": "鍦g殗鏋佸", + "job": 1, + "lev": 60, + "Grow": 4, + "Guilkey": 0, + "GuildName": "璇哥涔嬭崳涓", + "str": "", + "equip": [0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0] + }, + "3": { + "rank": 80, + "characname": "绁炵帇涔嬪穮", + "job": 2, + "lev": 60, + "Grow": 4, + "Guilkey": 0, + "GuildName": "璇哥涔嬭崳涓", + "str": "", + "equip": [0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0] + } +}; + +/** + * 鑾峰緱rank鍒嗭紙鎺掑悕鍒嗘暟锛 + * 鏍规嵁閰嶇疆閫夋嫨涓嶅悓鐨勬暟鎹簱鑾峰彇鎴樺姏鍊 + * @param {string} charac_no + * @returns 杩斿洖瀵瑰簲鐨勬垬鍔涘 + */ +function GetRankNumberBynangua(charac_no) { + local Config = GlobalConfig.Get("鎴樺姏姒滈厤缃甠鍗楃摐.json"); + local currentDB = Config["鎴樺姏姒滈厤缃"]["褰撳墠閫夋嫨"]; + local dbConfig = Config["鎴樺姏姒滈厤缃"]["鏁版嵁搴撻夋嫨"][currentDB]; + local SqlObj = MysqlPool.GetInstance().GetConnect(); + // 鏋勫缓鏌ヨ璇彞 - 鐩存帴浣跨敤瑙掕壊ID鏌ヨ + local insertQuery = "SELECT " + dbConfig["瀛楁鍚"] + " FROM " + dbConfig["鏁版嵁搴撳悕"] + "." + dbConfig["琛ㄥ悕"] + " WHERE " + dbConfig["鏉′欢瀛楁"] + "=" + charac_no; + local column_type_list = ["string"]; + local result = SqlObj.Select(insertQuery, column_type_list); + MysqlPool.GetInstance().PutConnect(SqlObj); + if (result.len() > 0) { + return result[0][0].tointeger(); + } + return 0; +} + +//鑾峰彇涓汉淇℃伅 +function GetMyEquInfo(SUser) { + local MyRanklist = { + "rank": 0, + "characname": "", + "job": 0, + "lev": 0, + "Grow": 0, + "Guilkey": 0, + "GuildName": "", + "str": "", + "equip": [] + }; + local Config = GlobalConfig.Get("鎴樺姏姒滈厤缃甠鍗楃摐.json"); + // 妫鏌ID鏄惁鍦ㄦ帓闄ゅ垪琛ㄤ腑 + if ("瑙掕壊CID" in Config["鎴樺姏姒滈厤缃"]["鎺掗櫎鍚嶅崟"]) { + foreach(excludedCID in Config["鎴樺姏姒滈厤缃"]["鎺掗櫎鍚嶅崟"]["瑙掕壊CID"]) { + if (SUser.GetCID() == excludedCID) { + return MyRanklist; + } + } + } + MyRanklist.rank = GetRankNumberBynangua(SUser.GetCID()); + MyRanklist.characname = SUser.GetCharacName(); + MyRanklist.job = SUser.GetCharacJob(); + MyRanklist.lev = SUser.GetCharacLevel(); + MyRanklist.Grow = Sq_CallFunc(S_Ptr("0x815741C"), "int", ["pointer"], SUser.C_Object); + MyRanklist.Guilkey = Sq_CallFunc(S_Ptr("0x822F46C"), "int", ["pointer"], SUser.C_Object); + MyRanklist.GuildName = SUser.GetGuildName(); + if (MyRanklist.GuildName.len() == 0) { + MyRanklist.GuildName = "澶╁湴浼"; //褰撳叕浼氫笉瀛樺湪鏃讹紝璁剧疆榛樿鍏細鍚嶅瓧 + } + local InvenObj = SUser.GetInven(); + if (!InvenObj) { + return; + } + if (InvenObj) { + for (local i = 0; i <= 10; i++) { + if (i != 9) { + local clearAvatar = Sq_CallFunc(S_Ptr("0x0850D374"), "int", ["pointer", "int"], InvenObj.C_Object, i); + local ItemObj = InvenObj.GetSlot(0, i); + local item_id = clearAvatar > 0 ? clearAvatar : ItemObj.GetIndex(); + MyRanklist.equip.push(item_id); + } else { + MyRanklist.equip.push(-1); + } + } + } + return MyRanklist; +} + +// 鐜╁涓嬬嚎鏃讹紝淇濆瓨鑷韩淇℃伅骞朵笖鍜屾帓琛屾杩涜鎺掑悕 +function SetRankingBynangua(SUser) { + local IP = Rank_nangua.api_CUser_get_public_ip_address(SUser); + if (IP == "10.0.0.1") { + return; + } + local MyRanklist = GetMyEquInfo(SUser); + local existingIndex = -1; + foreach(index, rankInfo in Ranklist) { + if (rankInfo.characname == MyRanklist.characname) { + existingIndex = index; + break; + } + } + + if (MyRanklist.rank > 0) { + if (existingIndex != -1) { + Ranklist[existingIndex] = MyRanklist; + } else { + if (!Ranklist.rawin("4")) { + Ranklist["4"] <- {}; + } + Ranklist["4"] = MyRanklist; + } + + local rankArray = []; + foreach(key, value in Ranklist) { + rankArray.append(value); + } + + rankArray.sort(function(a, b) { + return b.rank - a.rank; + }); + + // 鑾峰彇鍓嶄笁鍚嶇帺瀹剁殑淇℃伅 + local topThree = rankArray.slice(0, 3); + if (Ranklist.rawin("4")) { + Ranklist.rawdelete("4"); + } + Ranklist = { + "1": topThree[0], + "2": topThree[1], + "3": topThree[2] + }; + } +} + +//娓呴櫎鎺掑悕鐨勮嚜瀹氫箟鐣欒█淇℃伅 +function DeleteSpecificMessage() { + local G_CGameManager = Sq_CallFunc(S_Ptr("0x080cc18e"), "pointer", []); + local Message = Sq_CallFunc(S_Ptr("0x08298EEC"), "pointer", ["pointer"], G_CGameManager); + Sq_CallFunc(S_Ptr("0x08600D0C"), "char", ["pointer", "int"], Message, 1); + Sq_CallFunc(S_Ptr("0x08600D0C"), "char", ["pointer", "int"], Message, 2); + Sq_CallFunc(S_Ptr("0x08600D0C"), "char", ["pointer", "int"], Message, 3); +} + +//鍙戦佺暀瑷淇℃伅 +function UpdateServerMessageByBroadcast(SUser, Ranking, msg) { + DeleteSpecificMessage() + local Pack = Packet(); + Pack.Put_Header(0, 192); + Pack.Put_Byte(1); + Pack.Put_Byte(1); + Pack.Put_Byte(Ranking); + Rank_nangua.api_InterfacePacketBuf_put_string(Pack, msg); + Pack.Finalize(true); + SUser.Send(Pack); + Pack.Delete(); +} + +function SendRanklistPacket(SUser, Ranklist, bool) { + local Pack = Packet(); + Pack.Put_Header(0, 182); + + local rankArray = [Ranklist["1"], Ranklist["2"], Ranklist["3"]]; + + Pack.Put_Byte(rankArray.len()); + foreach(index, value in rankArray) { + Rank_nangua.api_InterfacePacketBuf_put_string(Pack, value.characname); + Pack.Put_Byte(value.lev); + Pack.Put_Byte(value.job); + Pack.Put_Byte(value.Grow); + Rank_nangua.api_InterfacePacketBuf_put_string(Pack, value.GuildName + ""); + Pack.Put_Int(value.Guilkey); + + for (local i = 0; i < value.equip.len(); i++) { + Pack.Put_Int((i != 9) ? value.equip[i] : -1); + } + } + Pack.Finalize(true); + + if (bool) { + World.SendAll(Pack); + } else { + SUser.Send(Pack); + } + + Pack.Delete(); +} + +//鍥犲鎴风鍘熷洜锛屽彧鏈夊悕绉版湁鍙樺姩鎴栨帓鍚嶆湁鍙樺姩鏃舵墠浼氬埛鏂板瑙傦紝鎵浠ュ彂閫佷竴娆″姞绌烘牸鐨勫悕瀛楋紝鐒跺悗鍒犻櫎绌烘牸鍐嶅彂閫佷竴娆 +function SendRankLists(SUser, bool) { + local ip = Rank_nangua.api_CUser_get_public_ip_address(SUser); + if (ip == "10.0.0.1") { + return; + } + local Config = GlobalConfig.Get("鎴樺姏姒滈厤缃甠鍗楃摐.json"); + foreach(key, value in Ranklist) { + value["characname"] = value["characname"] + " "; + } + SendRanklistPacket(SUser, Ranklist, bool); + + foreach(key, value in Ranklist) { + value["characname"] = value["characname"].slice(0, value["characname"].find(" ")) + value["characname"].slice(value["characname"].find(" ") + 1); + } + //鍙戦佹帓鍚嶇暀瑷淇℃伅 + UpdateServerMessageByBroadcast(SUser, 1, Config["鎴樺姏姒滈厤缃"]["鐣欒█淇℃伅"]["绗竴鍚"]); + UpdateServerMessageByBroadcast(SUser, 2, Config["鎴樺姏姒滈厤缃"]["鐣欒█淇℃伅"]["绗簩鍚"]); + UpdateServerMessageByBroadcast(SUser, 3, Config["鎴樺姏姒滈厤缃"]["鐣欒█淇℃伅"]["绗笁鍚"]); + SendRanklistPacket(SUser, Ranklist, bool); +} + +class Rank_nangua { + function api_InterfacePacketBuf_put_string(Pack, s) { + local p = Memory.allocUtf8String(s); + local len = s.len(); + Pack.Put_Int(len); + Pack.Put_BinaryEx(p.C_Object, len); + } + function api_CUser_get_public_ip_address(SUser){ + local s_addr = Sq_CallFunc(S_Ptr("0x084EC90A"), "int", ["pointer"], SUser.C_Object); + if(s_addr){ + local inet_ntoa = Sq_CallFunc(S_Ptr("0x0807DDC0"), "pointer", ["int"], s_addr); + return NativePointer(inet_ntoa).readUtf8String(); + } + return null; + } +} + +// 鍒涘缓鏁版嵁搴撳拰琛 +function createRankEventTable() { + local CreateSql1 = "create database if not exists DP_S default charset utf8;"; + local CreateSql2 = "CREATE TABLE IF NOT EXISTS DP_S.event (" + + "event_id varchar(30) NOT NULL, " + + "event_info mediumtext, " + + "PRIMARY KEY (event_id)" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8;"; + local SqlObj = MysqlPool.GetInstance().GetConnect(); + SqlObj.Exec_Sql(CreateSql1); + SqlObj.Exec_Sql(CreateSql2); + MysqlPool.GetInstance().PutConnect(SqlObj); +} + +// 淇濆瓨鎴樺姏姒滄暟鎹埌鏁版嵁搴 +function saveRanklistToDatabase() { + local SqlObj = MysqlPool.GetInstance().GetConnect(); + local ranklistJson = Json.Encode(Ranklist); + local query = "REPLACE INTO DP_S.event (event_id, event_info) VALUES ('ranklist', '" + ranklistJson + "')"; + SqlObj.Select(query, []); + MysqlPool.GetInstance().PutConnect(SqlObj); +} + +// 浠庢暟鎹簱鍔犺浇鎴樺姏姒滄暟鎹 +function loadRanklistFromDatabase() { + local SqlObj = MysqlPool.GetInstance().GetConnect(); + local query = "SELECT event_info FROM DP_S.event WHERE event_id = 'ranklist'"; + local result = SqlObj.Select(query, ["string"]); + if (result.len() > 0) { + local savedRanklist = Json.Decode(result[0][0]); + if (savedRanklist != null) { + Ranklist = savedRanklist; + } + } + MysqlPool.GetInstance().PutConnect(SqlObj); +} + +// 鏈嶅姟鍣ㄨKill鏃(涓嶅惈鐐搁閬撶瓑)淇濆瓨鎴樺姏姒滄暟鎹 +Cb_Server_ClossByKill_Leave_Func.ServerClossByKill <- function(args) { + local result = args.pop(); + if (result <= 0) { + saveRanklistToDatabase(); + } +} +// 鏈嶅姟鍣ㄥ紓甯稿穿婧冩椂淇濆瓨鎴樺姏姒滄暟鎹 +Cb_Server_Close_Enter_Func.Server_Close <- function(args) { + saveRanklistToDatabase(); +} + +function _Dps_Rank_nangua_Main_() { + local Config = GlobalConfig.Get("鎴樺姏姒滈厤缃甠鍗楃摐.json"); + local PoolObj = MysqlPool.GetInstance(); + local Ip = Config["鏁版嵁搴揑P 涓嶆槸澶栫疆鏁版嵁搴撲笉瑕佹洿鏀"]; + local Port = Config["鏁版嵁搴撶鍙 涓嶆噦涓嶈鏇存敼"]; + local DbName = Config["鏁版嵁搴撶敤鎴峰悕 鏈湴鐢ㄦ埛鍚嶄笉鎳備笉瑕佹洿鏀"]; + local Password = Config["鏁版嵁搴撳瘑鐮 鏈湴瀵嗙爜涓嶆噦涓嶈鏇存敼"]; + PoolObj.SetBaseConfiguration(Ip, Port, DbName, Password); + PoolObj.PoolSize = 10; + PoolObj.Init(); + // 鍒涘缓琛 + createRankEventTable(); + // 鍔犺浇鎴樺姏姒滄暟鎹 + loadRanklistFromDatabase(); + // 鐜╁涓嬬嚎鏃 + Cb_CUser_LogoutToPCRoom_Enter_Func.ReturnSelectCharac <- function(args) { + local SUser = User(args[0]); + SetRankingBynangua(SUser); + SendRankLists(SUser, false); + }; + + //鐜╁鐧诲綍鏃 + Cb_reach_game_world_Func.RankByNangua <- function(SUser) { + Timer.SetTimeOut(function(SUser) { + SendRankLists(SUser, true); + }, 3, SUser); + }; +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鎴樺姏姒/鎴樺姏姒滈厤缃甠鍗楃摐.json b/绀轰緥椤圭洰/鎴樺姏姒/鎴樺姏姒滈厤缃甠鍗楃摐.json new file mode 100644 index 0000000..316a61e --- /dev/null +++ b/绀轰緥椤圭洰/鎴樺姏姒/鎴樺姏姒滈厤缃甠鍗楃摐.json @@ -0,0 +1,80 @@ +{ + "鎴樺姏姒滈厤缃": { + "褰撳墠閫夋嫨": "闀胯櫣", + "鏁版嵁搴撻夋嫨": { + "鍏ユⅵ": { + "鏁版嵁搴撳悕": "mengyiqu", + "琛ㄥ悕": "m_ranks", + "瀛楁鍚": "m_rank", + "鏉′欢瀛楁": "m_cid" + }, + "鑻嶇┕": { + "鏁版嵁搴撳悕": "d_starsky", + "琛ㄥ悕": "zhanli", + "瀛楁鍚": "ZLZ", + "鏉′欢瀛楁": "CID" + }, + "涓囧浗": { + "鏁版嵁搴撳悕": "d_login", + "琛ㄥ悕": "zhanli", + "瀛楁鍚": "ZLZ", + "鏉′欢瀛楁": "CID" + }, + "澶╁瓙": { + "鏁版嵁搴撳悕": "taiwan_cain", + "琛ㄥ悕": "charac_info", + "瀛楁鍚": "zhandouli", + "鏉′欢瀛楁": "charac_no" + }, + "鏅寸┖": { + "鏁版嵁搴撳悕": "qk", + "琛ㄥ悕": "fightingcapacity", + "瀛楁鍚": "price", + "鏉′欢瀛楁": "CID" + }, + "榛戠埖": { + "鏁版嵁搴撳悕": "huazhi_v5", + "琛ㄥ悕": "zhanli", + "瀛楁鍚": "ZLZ", + "鏉′欢瀛楁": "CID" + }, + "鏆撮洦": { + "鏁版嵁搴撳悕": "d_baoyu", + "琛ㄥ悕": "zhanli", + "瀛楁鍚": "ZLZ", + "鏉′欢瀛楁": "CID" + }, + "鑺辨灊": { + "鏁版嵁搴撳悕": "huazhi", + "琛ㄥ悕": "zhanli", + "瀛楁鍚": "ZLZ", + "鏉′欢瀛楁": "CID" + }, + "绁炶瘽": { + "鏁版嵁搴撳悕": "asion_login", + "琛ㄥ悕": "myzhanli", + "瀛楁鍚": "zlz", + "鏉′欢瀛楁": "zcid" + }, + "闀胯櫣": { + "鏁版嵁搴撳悕": "d_changhong", + "琛ㄥ悕": "zhanli", + "瀛楁鍚": "ZLZ", + "鏉′欢瀛楁": "CID" + } + }, + "鐣欒█淇℃伅": { + "绗竴鍚": "鏅ぉ涔嬩笅,鍞垜鐙皧!", + "绗簩鍚": "鍥涙柟涔嬪唴,鍞垜鐙湼!", + "绗笁鍚": "涓栭棿涓囩墿,鍞垜鐙!" + }, + "鎺掗櫎鍚嶅崟":{ + "瑙掕壊CID":[111111, 222222] + }, + "鎻愮ず":"瑙掕壊CID鍙互鏌ョ湅鏁版嵁搴撲腑 taiwan_cain 鈫 charac_info 鈫 charac_no浠h〃瑙掕壊ID" + }, + "鏁版嵁搴揑P 涓嶆槸澶栫疆鏁版嵁搴撲笉瑕佹洿鏀": "127.0.0.1", + "鏁版嵁搴撶鍙 涓嶆噦涓嶈鏇存敼": 3306, + "鏁版嵁搴撶敤鎴峰悕 鏈湴鐢ㄦ埛鍚嶄笉鎳備笉瑕佹洿鏀": "game", + "鏁版嵁搴撳瘑鐮 鏈湴瀵嗙爜涓嶆噦涓嶈鏇存敼": "uu5!^%jg" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鎶鑳芥嫇灞14閿/Proj.ifo b/绀轰緥椤圭洰/鎶鑳芥嫇灞14閿/Proj.ifo new file mode 100644 index 0000000..306b7a2 --- /dev/null +++ b/绀轰緥椤圭洰/鎶鑳芥嫇灞14閿/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鎶鑳芥嫇灞14閿", + "ProjectDescribe": "14閿綅鎶鑳界殑鏈嶅姟绔慨澶嶇▼搴,闇瑕佸鎴风宸茬粡鍔犺浇浜14閿妧鑳界殑鎻掍欢銆", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.0, + "ProjectConfig": "", + "ProjectFiles": [ + "鎶鑳芥嫇灞14閿.nut" + ], + "ProjectRunFunc": "_Dps_SkillExpansion_14Keys_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鎶鑳芥嫇灞14閿/鎶鑳芥嫇灞14閿.nut b/绀轰緥椤圭洰/鎶鑳芥嫇灞14閿/鎶鑳芥嫇灞14閿.nut new file mode 100644 index 0000000..87b42b2 --- /dev/null +++ b/绀轰緥椤圭洰/鎶鑳芥嫇灞14閿/鎶鑳芥嫇灞14閿.nut @@ -0,0 +1,7 @@ + + + +function _Dps_SkillExpansion_14Keys_Main_() +{ + GameManager.Fix14Skill(); +} diff --git a/绀轰緥椤圭洰/鎶楅瓟鍊艰繘鍏ュ壇鏈/Proj.ifo b/绀轰緥椤圭洰/鎶楅瓟鍊艰繘鍏ュ壇鏈/Proj.ifo new file mode 100644 index 0000000..42d365c --- /dev/null +++ b/绀轰緥椤圭洰/鎶楅瓟鍊艰繘鍏ュ壇鏈/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鎶楅瓟鍊艰繘鍏ュ壇鏈", + "ProjectDescribe": "鎸囧畾鐨勫壇鏈寜闅惧害鍙婃姉榄斿兼墠鑳借繘鍏ュ壇鏈", + "ProjectAuthor": "鍗楃摐 & 鍊炬唱瀵", + "ProjectVersion": 1.0, + "ProjectConfig": "鎶楅瓟鍊艰繘鍏ュ壇鏈厤缃甠Nangua.json", + "ProjectFiles": [ + "鎶楅瓟鍊艰繘鍏ュ壇鏈.nut" + ], + "ProjectRunFunc": "_Dps_anti_evilDgnBynangua_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鎶楅瓟鍊艰繘鍏ュ壇鏈/鎶楅瓟鍊艰繘鍏ュ壇鏈.nut b/绀轰緥椤圭洰/鎶楅瓟鍊艰繘鍏ュ壇鏈/鎶楅瓟鍊艰繘鍏ュ壇鏈.nut new file mode 100644 index 0000000..201c4eb --- /dev/null +++ b/绀轰緥椤圭洰/鎶楅瓟鍊艰繘鍏ュ壇鏈/鎶楅瓟鍊艰繘鍏ュ壇鏈.nut @@ -0,0 +1,123 @@ +class _evilDgnBynangua { + function get_required_gradeBynangua(dgn_id, dgn_diff) { + local Config = GlobalConfig.Get("鎶楅瓟鍊艰繘鍏ュ壇鏈厤缃甠Nangua.json"); + if (Config["鎶楅瓟鍊艰繘鍏ュ壇鏈"]["鍓湰閰嶇疆"].rawin(dgn_id.tostring())) { + local requirements = Config["鎶楅瓟鍊艰繘鍏ュ壇鏈"]["鍓湰閰嶇疆"][dgn_id.tostring()]; + for (local i = 0; i < requirements.len(); i += 2) { + if (requirements[i] == dgn_diff) { + return requirements[i + 1]; + } + } + } + return null; + } + function api_CDungeon_getDungeonName(dungeon_id) { + local G_CDataManager = Sq_CallFunc(S_Ptr("0x80CC19B"), "pointer", []); + local cdungeon = Sq_CallFunc(S_Ptr("0x835F9F8"), "pointer", ["pointer", "int"], G_CDataManager, dungeon_id); + if (!cdungeon) { + return; + } + if (cdungeon) { + local dgnobj = Sq_CallFunc(S_Ptr("0x81455A6"), "pointer", ["pointer"], cdungeon); + local name = NativePointer(dgnobj).readUtf8String(); + return name; + } + return null; + } + function join(array, delimiter) { + local result = ""; + for (local i = 0; i < array.len(); ++i) { + if (i > 0) { + result += delimiter; + } + result += array[i]; + } + return result; + } +} + +getroottable()._Nangua_EquipmentData_List_ <- {}; +getroottable()._Nangua_EquipmentData_Anti_ <- {}; +function _Nangua_GetEquipmentData_Anti_(Equipment_id) { + try { + //濡傛灉鏁版嵁瀛樺湪 杩斿洖鏁版嵁 + if (getroottable()._Nangua_EquipmentData_Anti_.rawin(Equipment_id))return getroottable()._Nangua_EquipmentData_Anti_[Equipment_id]; + //閫氳繃瑁呭ID鑾峰彇瑁呭璺緞 + local Path = getroottable()._Nangua_EquipmentData_List_[Equipment_id]; + Path = "equipment/" + Path; + //璇诲彇瑁呭鏁版嵁 + local Data = ScriptData.GetFileData(Path, function(DataTable, Data) { + while (!Data.Eof()) { + local Key = Data.Get(); + if (Key == "[anti evil]") { + getroottable()._Nangua_EquipmentData_Anti_[Equipment_id] <- Data.Get(); + return getroottable()._Nangua_EquipmentData_Anti_[Equipment_id]; + } + } + }); + } catch (exception){ + + } + return 0; +} + +function _Dps_anti_evilDgnBynangua_Main_() { + local Config = GlobalConfig.Get("鎶楅瓟鍊艰繘鍏ュ壇鏈厤缃甠Nangua.json"); + Script(Config["PVF鍌ㄥ瓨璺緞_娌℃湁鏇存敼鐨勮瘽涓嶈鏀瑰姩姝ら厤缃"]); + //if (Config["PVF鍌ㄥ瓨璺緞_娌℃湁鏇存敼鐨勮瘽涓嶈鏀瑰姩姝ら厤缃"].len() > 0) Script(Config["PVF鍌ㄥ瓨璺緞_娌℃湁鏇存敼鐨勮瘽涓嶈鏀瑰姩姝ら厤缃"]); + //else Script(); + + //璇诲彇瑁呭鍒楄〃 + getroottable()._Nangua_EquipmentData_List_ = ScriptData.GetFileData("equipment/equipment.lst", function(DataTable, Data) { + while (!Data.Eof()) { + local Key = Data.Get(); + //娉ㄥ唽瑁呭鍒楄〃 璺緞鍐欏叆 鏁版嵁鏈鍙 + DataTable.rawset(Key, Data.Get()); + } + }); + + Cb_SelectDungeon_Check_Error_Leave_Func.Check_anti_evilByNangua <- function(args) { + local Config = GlobalConfig.Get("鎶楅瓟鍊艰繘鍏ュ壇鏈厤缃甠Nangua.json"); + local SUser = User(args[1]); + local msg_base = args[2]; + local PartyObj = SUser.GetParty(); + local dgn_id = NativePointer(msg_base).add(13).readU16(); // 鑾峰彇鍓湰ID + local dgn_diff = NativePointer(msg_base).add(15).readU8(); // 鑾峰彇鍓湰闅惧害 + local required_grade = _evilDgnBynangua.get_required_gradeBynangua(dgn_id, dgn_diff); + local diff_name = Config["鍓湰闅惧害鍛藉悕"][(dgn_diff).tostring()]; + local Dungeon_Name = _evilDgnBynangua.api_CDungeon_getDungeonName(dgn_id); + + if (PartyObj && Config["鎶楅瓟鍊艰繘鍏ュ壇鏈"]["鎶楅瓟鍊艰繘鍏ュ壇鏈紑鍏(true涓哄紑鍚,false涓哄叧闂)"]) { + local not_enough_users = []; + for (local i = 0; i < 4; ++i) { + local Tuser = PartyObj.GetUser(i); + if (Tuser) { + local total_grade = 0; + local InvenObj = Tuser.GetInven(); + if (InvenObj) { + for (local j = 0; j <= 25; j++) { + local ItemObj = InvenObj.GetSlot(0, j); + if (!ItemObj.IsEmpty) { + local item_id = ItemObj.GetIndex(); + print(item_id); + local Anti = _Nangua_GetEquipmentData_Anti_(item_id); + total_grade += Anti; + } + } + } + // 姣斿鎶楅瓟鍊兼槸鍚﹁冻澶 + if (total_grade < required_grade) { + not_enough_users.push(Tuser.GetCharacName()); + } + } + } + + // 澶勭悊鏈揪鍒版姉榄斿艰姹傜殑鐢ㄦ埛 + if (not_enough_users.len() > 0) { + local joinedNames = _evilDgnBynangua.join(not_enough_users, ", "); + SUser.SendNotiBox("闃熶紞涓帺瀹禰" + joinedNames + "] 鎶楅瓟鍊间綆浜 " + required_grade + " 锛屾棤娉曡繘鍏 [" + Dungeon_Name + " - " + diff_name + "]", 2) + return 1; // 绂佹杩涘叆鍓湰 + } + } + } +} diff --git a/绀轰緥椤圭洰/鎶楅瓟鍊艰繘鍏ュ壇鏈/鎶楅瓟鍊艰繘鍏ュ壇鏈厤缃甠Nangua.json b/绀轰緥椤圭洰/鎶楅瓟鍊艰繘鍏ュ壇鏈/鎶楅瓟鍊艰繘鍏ュ壇鏈厤缃甠Nangua.json new file mode 100644 index 0000000..d0ff8fa --- /dev/null +++ b/绀轰緥椤圭洰/鎶楅瓟鍊艰繘鍏ュ壇鏈/鎶楅瓟鍊艰繘鍏ュ壇鏈厤缃甠Nangua.json @@ -0,0 +1,23 @@ +{ + "鎶楅瓟鍊艰繘鍏ュ壇鏈":{ + "鎻愮ず":"鎶楅瓟鍊艰繘鍏ュ壇鏈厤缃(鍓湰ID[鏅氱骇,鎵闇鎶楅瓟鍊,鍐掗櫓绾,鎵闇鎶楅瓟鍊,鍕囧+绾,鎵闇鎶楅瓟鍊,鐜嬭呯骇,鎵闇鎶楅瓟鍊,鍦扮嫳绾,鎵闇鎶楅瓟鍊糫)", + "鎶楅瓟鍊艰繘鍏ュ壇鏈紑鍏(true涓哄紑鍚,false涓哄叧闂)":false, + "鍓湰閰嶇疆":{ + "1":[0, 100, 1, 200, 2, 300, 3, 400, 4, 500, 5, 600], + "2":[0, 100, 1, 200, 2, 300, 3, 400, 4, 500, 5, 600], + "3":[0, 100, 1, 200, 2, 300, 3, 400, 4, 500, 5, 600], + "4":[0, 100, 1, 200, 2, 300, 3, 400, 4, 500, 5, 600], + "5":[0, 100, 1, 200, 2, 300, 3, 400, 4, 500, 5, 600], + "6":[0, 100, 1, 200, 2, 300, 3, 400, 4, 500, 5, 600], + "7":[0, 100, 1, 200, 2, 300, 3, 400, 4, 500, 5, 600] + } + }, + "鍓湰闅惧害鍛藉悕" : { + "0": "鏅氱骇", + "1": "鍐掗櫓绾", + "2": "鍕囧+绾", + "3": "鐜嬭呯骇", + "4": "鍦扮嫳绾" + }, + "PVF鍌ㄥ瓨璺緞_娌℃湁鏇存敼鐨勮瘽涓嶈鏀瑰姩姝ら厤缃":"/home/neople/game/Script.pvf" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鎷撳睍鐬棿绉诲姩鑽墏/Proj.ifo b/绀轰緥椤圭洰/鎷撳睍鐬棿绉诲姩鑽墏/Proj.ifo new file mode 100644 index 0000000..0808363 --- /dev/null +++ b/绀轰緥椤圭洰/鎷撳睍鐬棿绉诲姩鑽墏/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鎷撳睍鐬棿绉诲姩鑽墏", + "ProjectDescribe": "寮鍚悗鍙弬鑰冨師PVF2600014鐬棿绉诲姩鑽墏,澶嶅埗鍑轰笉鍚岀殑绉诲姩鑽墏ID,鍙棤闄愭嫇灞", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.0, + "ProjectConfig": "", + "ProjectFiles": [ + "鎷撳睍鐬棿绉诲姩鑽墏.nut" + ], + "ProjectRunFunc": "_Dps_expand_teleport_item_" +} diff --git a/绀轰緥椤圭洰/鎷撳睍鐬棿绉诲姩鑽墏/鎷撳睍鐬棿绉诲姩鑽墏.nut b/绀轰緥椤圭洰/鎷撳睍鐬棿绉诲姩鑽墏/鎷撳睍鐬棿绉诲姩鑽墏.nut new file mode 100644 index 0000000..673c524 --- /dev/null +++ b/绀轰緥椤圭洰/鎷撳睍鐬棿绉诲姩鑽墏/鎷撳睍鐬棿绉诲姩鑽墏.nut @@ -0,0 +1,4 @@ +function _Dps_expand_teleport_item_() { + NativePointer("0x81D063A").writeS8(0xEB); + NativePointer("0x81D0651").writeS8(0xEB); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛/Proj.ifo b/绀轰緥椤圭洰/鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛/Proj.ifo new file mode 100644 index 0000000..b9a8ce7 --- /dev/null +++ b/绀轰緥椤圭洰/鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛", + "ProjectDescribe": "鎸囧畾UID鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛", + "ProjectAuthor": "Pluto", + "ProjectVersion": 1.2, + "ProjectConfig": "鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛_Pluto.json", + "ProjectFiles": [ + "鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛.nut" + ], + "ProjectRunFunc": "_Dps_VipUpgrade_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛/鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛.nut b/绀轰緥椤圭洰/鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛/鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛.nut new file mode 100644 index 0000000..d07f172 --- /dev/null +++ b/绀轰緥椤圭洰/鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛/鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛.nut @@ -0,0 +1,52 @@ +// ------------------------------------------------------------ +// 鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛 by Pluto +// ------------------------------------------------------------ + +// 鏍稿績閫昏緫鍑芥暟 +function _Dps_VipUpgrade_Main_() { + + // 鍘熺敓 C 鍑芥暟鎸囬拡锛氳瑁呭寮哄寲绛夌骇 +1 + local Inven_Item_IncUpgrade_Ptr = S_Ptr("0x0854B4BE"); + + // 灏佽璋冪敤鍑芥暟 + function IncUpgrade(item) { + return Sq_CallFunc(Inven_Item_IncUpgrade_Ptr, "int", ["pointer"], item); + } + + // VIP 寮哄寲蹇呮垚鍔熷洖璋 + Cb_WongWork_CItemUpgrade_Leave_Func.VipUpgrade <- function(args) { + + local Config = GlobalConfig.Get("鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛_Pluto.json"); + local vip_user_uid = Config["鎸囧畾鐢ㄦ埛鐨刄ID"]; + local vip_user_cid = Config["鎸囧畾鐢ㄦ埛鐨凜ID"]; + + print("=== 寮哄寲鍥炶皟瑙﹀彂 ==="); + + // 鍘熷嚱鏁拌繑鍥炲硷紙涓嶇牬鍧 args锛 + local OldRet = args[args.len() - 1]; + + // args[1] 鏄帺瀹跺璞★紝args[2] 鏄澶囧璞 + local SUser = User(args[1]); + local item = args[2]; + local uid = SUser.GetUID(); + local cid = SUser.GetCID(); + + // 浠呭 VIP UID 鐢熸晥 + if (vip_user_uid.find(uid) != null || vip_user_cid.find(cid) != null) { + if (OldRet == 0) { + print("VIP 鐜╁鍘熷己鍖栧け璐ワ紝寮哄埗鎴愬姛: " + SUser.GetCharacName()); + + local newLvl = IncUpgrade(item); + print("寮哄寲鍚庣瓑绾: " + newLvl); + + return 1; // 寮哄埗杩斿洖鎴愬姛 + } else { + print("VIP 鐜╁鍘熷己鍖栨垚鍔燂紝涓嶄慨鏀: " + SUser.GetCharacName()); + } + } + + // 榛樿杩斿洖鍘熺粨鏋 + //return OldRet; + } +} + diff --git a/绀轰緥椤圭洰/鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛/鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛_Pluto.json b/绀轰緥椤圭洰/鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛/鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛_Pluto.json new file mode 100644 index 0000000..ffe454a --- /dev/null +++ b/绀轰緥椤圭洰/鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛/鎸囧畾鐢ㄦ埛寮哄寲蹇呭畾鎴愬姛_Pluto.json @@ -0,0 +1,4 @@ +{ + "鎸囧畾鐢ㄦ埛鐨刄ID":[18000001,18000003], + "鎸囧畾鐢ㄦ埛鐨凜ID":[1,2] +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鏁寸偣鍦ㄧ嚎濂栧姳/Proj.ifo b/绀轰緥椤圭洰/鏁寸偣鍦ㄧ嚎濂栧姳/Proj.ifo new file mode 100644 index 0000000..001a0e8 --- /dev/null +++ b/绀轰緥椤圭洰/鏁寸偣鍦ㄧ嚎濂栧姳/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鏁寸偣鍦ㄧ嚎濂栧姳", + "ProjectDescribe": "鍙互璁剧疆鏌愪竴涓椂闂寸偣 鍏ㄦ湇鍙戞斁濂栧姳", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.3, + "ProjectConfig": "鏁寸偣鍦ㄧ嚎濂栧姳_Lenheart.json", + "ProjectFiles": [ + "鏁寸偣鍦ㄧ嚎濂栧姳.nut" + ], + "ProjectRunFunc": "_Dps_TimeReward_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鏁寸偣鍦ㄧ嚎濂栧姳/鏁寸偣鍦ㄧ嚎濂栧姳.nut b/绀轰緥椤圭洰/鏁寸偣鍦ㄧ嚎濂栧姳/鏁寸偣鍦ㄧ嚎濂栧姳.nut new file mode 100644 index 0000000..b901b2d --- /dev/null +++ b/绀轰緥椤圭洰/鏁寸偣鍦ㄧ嚎濂栧姳/鏁寸偣鍦ㄧ嚎濂栧姳.nut @@ -0,0 +1,103 @@ +// 鍦ㄧ嚎濂栧姳娲诲姩鍏ュ彛鐐 +function _Dps_TimeReward_Main_() { + _Dps_TimeReward_Logic_(); +} + +// 鏍煎紡鍖栨椂闂村瓧绗︿覆 +function normalize_time_format(time_str) { + local colonPos = time_str.find(":"); + if (colonPos == null) return null; + + local hour = time_str.slice(0, colonPos).tointeger(); + local minute = time_str.slice(colonPos + 1).tointeger(); + + return format("%02d:%02d", hour, minute); +} + +// 鍦ㄧ嚎濂栧姳娲诲姩閲嶈浇鍏ュ彛鐐 +function _Dps_TimeReward_Main_Reload_(OldConfig) { + // 绉婚櫎鏃ч厤缃腑鐨勬墍鏈夊畾鏃朵换鍔 + if (OldConfig && "濂栧姳鏃堕棿鍜屽唴瀹" in OldConfig) { + foreach(time, reward in OldConfig["濂栧姳鏃堕棿鍜屽唴瀹"]) { + local task_id = "TimeRewardTask_" + normalize_time_format(time); + Timer.RemoveCronTask(task_id); + } + } + + // 閲嶆柊娉ㄥ唽 + _Dps_TimeReward_Logic_(); +} + +// 鍦ㄧ嚎濂栧姳娲诲姩閫昏緫鍏ュ彛鐐 +function _Dps_TimeReward_Logic_() { + local Config = GlobalConfig.Get("鏁寸偣鍦ㄧ嚎濂栧姳_Lenheart.json"); + + if(!Config["鏄惁鍚敤鍦ㄧ嚎濂栧姳(true鍚敤/false涓嶅惎鐢)"]) { + return; + } + + // 閬嶅巻閰嶇疆鐨勬墍鏈夊鍔辨椂闂 + foreach(time, reward in Config["濂栧姳鏃堕棿鍜屽唴瀹"]) { + local hour = time.slice(0, time.find(":")).tointeger(); + local minute = time.slice(time.find(":") + 1).tointeger(); + + // 涓烘瘡涓椂闂寸偣鍒涘缓鐙珛鐨勫洖璋冨嚱鏁 + local callback = function(originalTime = time) { + SendTimeReward(originalTime); + } + + // 涓烘瘡涓椂闂寸偣娉ㄥ唽涓涓畾鏃朵换鍔 + local cronExpression = format("0 %d %d * * *", minute, hour); + Timer.SetCronTask(callback, { + Cron = cronExpression, + Name = "TimeRewardTask_" + normalize_time_format(time) + }); + } +} + +// 鍙戞斁鍦ㄧ嚎濂栧姳 +function SendTimeReward(rewardTime) { + local Config = GlobalConfig.Get("鏁寸偣鍦ㄧ嚎濂栧姳_Lenheart.json"); + local OnlinePlayerList = World.GetOnlinePlayer(); + + // 鐩存帴浣跨敤鍘熷鏃堕棿鏍煎紡鏌ユ壘濂栧姳 + local reward = Config["濂栧姳鏃堕棿鍜屽唴瀹"][rewardTime]; + if (!reward) return; + + // 鍙戞斁濂栧姳 + foreach(SUser in OnlinePlayerList) { + // 妫鏌ユ槸鍚︿负鍋囦汉 + local IP = _Dps_TimeReward_api.api_CUser_get_public_ip_address(SUser); + if (!Config["鏄惁鍙戞斁濂栧姳缁欏亣浜(true鍙戞斁/false涓嶅彂鏀)"] && IP == Config["绂荤嚎鍋囦汉IP"]) { + continue; + } + + // 鍑嗗閭欢濂栧姳鐗╁搧鍒楄〃 + local RewardItems = []; + foreach(itemR in reward) { + RewardItems.append([itemR[0], itemR[1]]); + } + + // 鍙戦侀偖浠讹紙鏄剧ず鏃朵娇鐢ㄨ鑼冨寲鐨勬椂闂存牸寮忥級 + local title = Config["閭欢鏍囬"]; + local Text = format(Config["閭欢鍐呭"], normalize_time_format(rewardTime)); + SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems); + } + + // 鍙戦佸叏鏈嶅叕鍛婏紙鏄剧ず鏃朵娇鐢ㄨ鑼冨寲鐨勬椂闂存牸寮忥級 + World.SendNotiPacketMessage(format(Config["鍏憡"], normalize_time_format(rewardTime)), 14); +} + +// API绫 +class _Dps_TimeReward_api { + // 鑾峰彇鐜╁IP鍦板潃 + function api_CUser_get_public_ip_address(SUser){ + local s_addr = Sq_CallFunc(S_Ptr("0x084EC90A"), "int", ["pointer"], SUser.C_Object); + if(s_addr){ + local inet_ntoa = Sq_CallFunc(S_Ptr("0x0807DDC0"), "pointer", ["int"], s_addr); + return NativePointer(inet_ntoa).readUtf8String(); + } + return null; + } +} + diff --git a/绀轰緥椤圭洰/鏁寸偣鍦ㄧ嚎濂栧姳/鏁寸偣鍦ㄧ嚎濂栧姳_Lenheart.json b/绀轰緥椤圭洰/鏁寸偣鍦ㄧ嚎濂栧姳/鏁寸偣鍦ㄧ嚎濂栧姳_Lenheart.json new file mode 100644 index 0000000..8fccbe6 --- /dev/null +++ b/绀轰緥椤圭洰/鏁寸偣鍦ㄧ嚎濂栧姳/鏁寸偣鍦ㄧ嚎濂栧姳_Lenheart.json @@ -0,0 +1,19 @@ +{ + "鏄惁鍚敤鍦ㄧ嚎濂栧姳(true鍚敤/false涓嶅惎鐢)":true, + "鏄惁鍙戞斁濂栧姳缁欏亣浜(true鍙戞斁/false涓嶅彂鏀)":false, + "绂荤嚎鍋囦汉IP":"10.0.0.1", + "濂栧姳鏃堕棿鍜屽唴瀹":{ + "12:00":[ + [3037,10], + [3038,11] + ], + "19:30":[ + [3037,10], + [3038,10] + ] + }, + "閭欢鏍囬":"姣忔棩鍦ㄧ嚎绂忓埄", + "閭欢鍐呭":"浜茬埍鐨勭帺瀹讹紝杩欐槸[%s]鐨勫湪绾垮鍔憋紝璇锋煡鏀讹紒", + "鍏憡":"浠婃棩 [%s] 鐨勫湪绾垮鍔卞凡鍙戞斁锛岃閫氳繃閭欢鏌ユ敹", + "鏃堕棿鏍煎紡(24灏忔椂鍒)":"涓婂崍8鐐规暣鍒欎负08:00,鏅氫笂19鐐30鍒嗗垯涓19:30,涔熷彲浠ユ槸8:0鏉ヨ〃绀,涔熷彲08:0琛ㄧず閮芥槸鍏佽鐨" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鏃惰涓庡疇鐗╂竻闄ゅ嵎/Proj.ifo b/绀轰緥椤圭洰/鏃惰涓庡疇鐗╂竻闄ゅ嵎/Proj.ifo new file mode 100644 index 0000000..4118ae0 --- /dev/null +++ b/绀轰緥椤圭洰/鏃惰涓庡疇鐗╂竻闄ゅ嵎/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鏃惰涓庡疇鐗╂竻闄ゅ嵎", + "ProjectDescribe": "閫氳繃鎸囧畾ID鐨勯亾鍏凤紝灏嗚澶囪儗鍖呯鍓嶄袱琛岀殑鏃惰鎴栧疇鐗╂竻闄ゃ", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.3, + "ProjectConfig": "鏃惰涓庡疇鐗╂竻闄ゅ嵎_Lenheart.json", + "ProjectFiles": [ + "鏃惰涓庡疇鐗╂竻闄ゅ嵎.nut" + ], + "ProjectRunFunc": "_Dps_FashionAndPetClearanceRoll_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鏃惰涓庡疇鐗╂竻闄ゅ嵎/鏃惰涓庡疇鐗╂竻闄ゅ嵎.nut b/绀轰緥椤圭洰/鏃惰涓庡疇鐗╂竻闄ゅ嵎/鏃惰涓庡疇鐗╂竻闄ゅ嵎.nut new file mode 100644 index 0000000..ce7f187 --- /dev/null +++ b/绀轰緥椤圭洰/鏃惰涓庡疇鐗╂竻闄ゅ嵎/鏃惰涓庡疇鐗╂竻闄ゅ嵎.nut @@ -0,0 +1,75 @@ +/* +鏂囦欢鍚:鏃惰涓庡疇鐗╂竻闄ゅ嵎.nut +璺緞:OfficialProject/鏃惰涓庡疇鐗╂竻闄ゅ嵎/鏃惰涓庡疇鐗╂竻闄ゅ嵎.nut +鍒涘缓鏃ユ湡:2025-04-01 21:42 +鏂囦欢鐢ㄩ: +*/ + +function _Dps_FashionAndPetClearanceRoll_Logic_() { + local Config = GlobalConfig.Get("鏃惰涓庡疇鐗╂竻闄ゅ嵎_Lenheart.json"); + //瀹犵墿鍒犻櫎 + Cb_Use_Item_Sp_Func[Config["瀹犵墿娓呴櫎鍗稩D"]] <- function(SUser, ItemId) { + if (Config["瀹犵墿娓呴櫎鍒告槸鍚﹁繑杩"]) SUser.GiveItem(ItemId, 1); + local Cid = SUser.GetCID(); + local InvenObj = SUser.GetInven(); + if (InvenObj) { + for (local i = 0; i <= 13; i++) { + local ItemObj = InvenObj.GetSlot(3, i); + local Flag = false; + if (ItemObj) { + deleteCreature(InvenObj, ItemObj); + ItemObj.Delete(); + } + } + local Sql = "delete from taiwan_cain_2nd.creature_items where charac_no=" + Cid + " and slot < 13 ;"; + local SqlObj = MysqlPool.GetInstance().GetConnect(); + SqlObj.Exec_Sql(Sql); + //鎶婅繛鎺ヨ繕姹犲瓙 + MysqlPool.GetInstance().PutConnect(SqlObj); + SUser.SendItemSpace(7); + SUser.SendNotiPacketMessage(Config["瀹犵墿娓呴櫎瀹屾垚鎻愮ず"], 8); + } + } + + //鏃惰鍒犻櫎 + Cb_Use_Item_Sp_Func[Config["鏃惰娓呴櫎鍗稩D"]] <- function(SUser, ItemId) { + if (Config["鏃惰娓呴櫎鍒告槸鍚﹁繑杩"]) SUser.GiveItem(ItemId, 1); + local Cid = SUser.GetCID(); + local InvenObj = SUser.GetInven(); + if (InvenObj) { + for (local i = 0; i <= 13; i++) { + local ItemObj = InvenObj.GetSlot(2, i); + if (ItemObj) { + ItemObj.Delete(); + } + } + local Sql = "delete from taiwan_cain_2nd.user_items where charac_no=" + Cid + " and slot >= 10 and slot <= 23"; + local SqlObj = MysqlPool.GetInstance().GetConnect(); + SqlObj.Exec_Sql(Sql); + //鎶婅繛鎺ヨ繕姹犲瓙 + MysqlPool.GetInstance().PutConnect(SqlObj); + SUser.SendItemSpace(1); + SUser.SendNotiPacketMessage(Config["鏃惰娓呴櫎瀹屾垚鎻愮ず"], 8); + } + } +} + +function deleteCreature(InvenObj, ItemObj) { + local creatureMgrPtr = Sq_CallFunc(S_Ptr("0x080dd568"), "pointer", ["pointer"], InvenObj.C_Object); + if (!creatureMgrPtr)return; + local creature_UID = NativePointer(ItemObj.C_Object).add(7).readU32(); + if(creature_UID == 0) return; + Sq_CallFunc(S_Ptr("0x0833A854"), "int", ["pointer", "int"], creatureMgrPtr, creature_UID); +} + +function _Dps_FashionAndPetClearanceRoll_Main_() { + _Dps_FashionAndPetClearanceRoll_Logic_(); +} + +function _Dps_FashionAndPetClearanceRoll_Main_Reload_(OldConfig) { + Cb_Use_Item_Sp_Func.rawdelete(OldConfig["瀹犵墿娓呴櫎鍗稩D"]); + Cb_Use_Item_Sp_Func.rawdelete(OldConfig["鏃惰娓呴櫎鍗稩D"]); + + _Dps_FashionAndPetClearanceRoll_Logic_(); +} +//Timer.SetTimeOut(_Dps_FashionAndPetClearanceRoll_Main_,1) \ No newline at end of file diff --git a/绀轰緥椤圭洰/鏃惰涓庡疇鐗╂竻闄ゅ嵎/鏃惰涓庡疇鐗╂竻闄ゅ嵎_Lenheart.json b/绀轰緥椤圭洰/鏃惰涓庡疇鐗╂竻闄ゅ嵎/鏃惰涓庡疇鐗╂竻闄ゅ嵎_Lenheart.json new file mode 100644 index 0000000..5a98e6e --- /dev/null +++ b/绀轰緥椤圭洰/鏃惰涓庡疇鐗╂竻闄ゅ嵎/鏃惰涓庡疇鐗╂竻闄ゅ嵎_Lenheart.json @@ -0,0 +1,8 @@ +{ + "鏃惰娓呴櫎鍗稩D": 2021458808, + "瀹犵墿娓呴櫎鍗稩D": 2021458807, + "鏃惰娓呴櫎瀹屾垚鎻愮ず": "娓呴櫎鍓嶄袱琛屾椂瑁呮垚鍔", + "瀹犵墿娓呴櫎瀹屾垚鎻愮ず": "娓呴櫎鍓嶄袱琛屽疇鐗╂垚鍔", + "鏃惰娓呴櫎鍒告槸鍚﹁繑杩": true, + "瀹犵墿娓呴櫎鍒告槸鍚﹁繑杩": true +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鏃惰娼滆兘/Proj.ifo b/绀轰緥椤圭洰/鏃惰娼滆兘/Proj.ifo new file mode 100644 index 0000000..ad9ab88 --- /dev/null +++ b/绀轰緥椤圭洰/鏃惰娼滆兘/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鏃惰娼滆兘", + "ProjectDescribe": "榛樿寮鍚椂瑁呮綔鑳戒互鍙婇殢鏈哄垎閰嶆綔鑳藉睘鎬", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.1, + "ProjectConfig": "", + "ProjectFiles": [ + "鏃惰娼滆兘.nut" + ], + "ProjectRunFunc": "_Dps_Avatar_hidden_option_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鏃惰娼滆兘/鏃惰娼滆兘.nut b/绀轰緥椤圭洰/鏃惰娼滆兘/鏃惰娼滆兘.nut new file mode 100644 index 0000000..f26e49f --- /dev/null +++ b/绀轰緥椤圭洰/鏃惰娼滆兘/鏃惰娼滆兘.nut @@ -0,0 +1,9 @@ +function _Dps_Avatar_hidden_option_Main_() { + NativePointer(S_Ptr("0x08509D49")).writeByteArray([0xEB]); + Cb_Inventory_AddAvatarItem_Enter_Func.hidden_option <- function(args) { + NativePointer(S_Ptr("0x08509D34")).writeUShort(MathClass.Rand(1, 64)); + } + Cb_Item_IsHiddenOption_Leave_Func.hidden_option <- function(args) { + return 1; + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鏄惁鍏佽鍒涘缓缂旈犺/Proj.ifo b/绀轰緥椤圭洰/鏄惁鍏佽鍒涘缓缂旈犺/Proj.ifo new file mode 100644 index 0000000..6667346 --- /dev/null +++ b/绀轰緥椤圭洰/鏄惁鍏佽鍒涘缓缂旈犺/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鏄惁鍏佽鍒涘缓缂旈犺", + "ProjectDescribe": "鏄惁鍏佽鍒涘缓缂旈犺.", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.0, + "ProjectConfig": "鏄惁鍏佽鍒涘缓缂旈犺卂Lenheart.json", + "ProjectFiles": [ + "鏄惁鍏佽鍒涘缓缂旈犺.nut" + ], + "ProjectRunFunc": "_Dps_EnableTheCreationOfCreators_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鏄惁鍏佽鍒涘缓缂旈犺/鏄惁鍏佽鍒涘缓缂旈犺.nut b/绀轰緥椤圭洰/鏄惁鍏佽鍒涘缓缂旈犺/鏄惁鍏佽鍒涘缓缂旈犺.nut new file mode 100644 index 0000000..e668dab --- /dev/null +++ b/绀轰緥椤圭洰/鏄惁鍏佽鍒涘缓缂旈犺/鏄惁鍏佽鍒涘缓缂旈犺.nut @@ -0,0 +1,16 @@ +function _Dps_EnableTheCreationOfCreators_Logic_() +{ + local Config = GlobalConfig.Get("鏄惁鍏佽鍒涘缓缂旈犺卂Lenheart.json"); + Sq_WriteByteArr(S_Ptr("0x81C029F"), Config["鏄惁鍏佽鍒涘缓"] ? [0xF] : [0xA]); +} + + +function _Dps_EnableTheCreationOfCreators_Main_() +{ + GameManager.OpenCreateJob_CreatorMage(); +} + +function _Dps_EnableTheCreationOfCreators_Main_Reload_(OldConfig) +{ + GameManager.OpenCreateJob_CreatorMage(); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鏄惁鍏佽鍒涘缓缂旈犺/鏄惁鍏佽鍒涘缓缂旈犺卂Lenheart.json b/绀轰緥椤圭洰/鏄惁鍏佽鍒涘缓缂旈犺/鏄惁鍏佽鍒涘缓缂旈犺卂Lenheart.json new file mode 100644 index 0000000..7999137 --- /dev/null +++ b/绀轰緥椤圭洰/鏄惁鍏佽鍒涘缓缂旈犺/鏄惁鍏佽鍒涘缓缂旈犺卂Lenheart.json @@ -0,0 +1,3 @@ +{ + "鏄惁鍏佽鍒涘缓": true +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鏇村姞浼橀泤鐨勮法鐣岀煶/Proj.ifo b/绀轰緥椤圭洰/鏇村姞浼橀泤鐨勮法鐣岀煶/Proj.ifo new file mode 100644 index 0000000..a787d14 --- /dev/null +++ b/绀轰緥椤圭洰/鏇村姞浼橀泤鐨勮法鐣岀煶/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鏇村姞浼橀泤鐨勮法鐣岀煶", + "ProjectDescribe": "閫氳繃鎸囧畾ID鐨勫疂鐝犻亾鍏凤紝璺ㄧ晫浣犵殑瑁呭锛堝拰闄勯瓟涓鏍凤級銆", + "ProjectAuthor": "Pluto", + "ProjectVersion": 1.0, + "ProjectConfig": "鏇村姞浼橀泤鐨勮法鐣岀煶_Pluto.json", + "ProjectFiles": [ + "鏇村姞浼橀泤鐨勮法鐣岀煶.nut" + ], + "ProjectRunFunc": "_Dps_Crossover_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鏇村姞浼橀泤鐨勮法鐣岀煶/鏇村姞浼橀泤鐨勮法鐣岀煶.nut b/绀轰緥椤圭洰/鏇村姞浼橀泤鐨勮法鐣岀煶/鏇村姞浼橀泤鐨勮法鐣岀煶.nut new file mode 100644 index 0000000..cd6f482 --- /dev/null +++ b/绀轰緥椤圭洰/鏇村姞浼橀泤鐨勮法鐣岀煶/鏇村姞浼橀泤鐨勮法鐣岀煶.nut @@ -0,0 +1,76 @@ +/* +鏂囦欢鍚:鏇村姞浼橀泤鐨勮法鐣岀煶.nut +璺緞:MyProject/鏇村姞浼橀泤鐨勮法鐣岀煶/鏇村姞浼橀泤鐨勮法鐣岀煶.nut +鍒涘缓鏃ユ湡:2026-03-23 +鏂囦欢鐢ㄩ:浣跨敤闄勯瓟瀹濈彔鎸囬拡杩涜璺ㄧ晫 +浣滆:Pluto +*/ + +function _Dps_Crossover_Main_() { + + Cb_ExpertOnEnchantByBead_Enter_Func.Crossover <- function (args) { + local cfg = GlobalConfig.Get("鏇村姞浼橀泤鐨勮法鐣岀煶_Pluto.json"); + local SUser = User(args[1]); + local beadSlot = args[3]; + local equipSlot = args[5]; + local inven = SUser.GetInven(); + local bead = inven.GetSlot(1,beadSlot); + local bead_id = bead.GetIndex(); + local bead_add_info = bead.GetAdd_Info(); + + if(bead_id == cfg["鍔熻兘閰嶇疆"]["璺ㄧ晫鐭矷D"]) + { + Sq_WriteByteArr(S_Ptr("0x0849ED23"), Haker.AsmGenerateMcd( + "add esp, 0x6C", + "pop ebx", + "pop esi", + "pop edi", + "pop ebp", + "xor eax, eax", //杩斿洖鍊 0 + "ret" + )); + local equ = inven.GetSlot(1,equipSlot); + local equ_id = equ.GetIndex(); + //print("[Enchant Hook] 鐜╁姝e湪浣跨敤閬撳叿 ID: " + bead_id + " 瑁呭 ID: " + equ_id + " 瀹濈彔鏁伴噺: " + bead_add_info); + //绂佹璺ㄧ晫鐗╁搧鐨刬d + local forbiddenItemIds = [27601, 27602]; + //鑾峰彇璐﹀彿閲戝簱瀵硅薄 + local CargoObj = SUser.GetAccountCargo(); + //鑾峰彇璐﹀彿閲戝簱涓殑涓涓┖鏍煎瓙 + local EmptySlot = CargoObj.GetEmptySlot(); + //绂佹璺ㄧ晫 + if (cfg["鍔熻兘閰嶇疆"]["绂佹璺ㄧ晫瑁呭ID"].find(equ_id) != null) { + SUser.SendNotiBox("璇ヨ澶囨棤娉曡法鐣岋紒", 1); + return; + } + //璐﹀彿閲戝簱宸叉弧 + if(EmptySlot == -1) { + SUser.SendNotiBox("璐﹀彿閲戝簱宸叉弧锛", 1); + return; + } + //璺ㄧ晫 + local Flag = CargoObj.InsertItem(equ, EmptySlot); + if(Flag == -1) { + SUser.SendNotiBox("璺ㄧ晫澶辫触锛", 1); + return; + }else{ + //閿姣佽澶囨爮涓殑閬撳叿 + equ.Delete(); + //瀹濈彔鏁伴噺鍑忎竴 + if(bead_add_info == 1) { + bead.Delete(); + }else{ + bead.SetAdd_Info(bead_add_info - 1); + bead.Flush(); + } + //鍒锋柊鐜╁瑁呭鍒楄〃 + SUser.SendUpdateItemList(1, 0, equipSlot); + //鍒锋柊鐜╁閬撳叿鍒楄〃 + SUser.SendUpdateItemList(1, 0, beadSlot); + //鍒锋柊璐﹀彿閲戝簱鍒楄〃 + CargoObj.SendItemList(); + SUser.SendNotiBox("璺ㄧ晫鎴愬姛锛", 1); + } + } + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鏇村姞浼橀泤鐨勮法鐣岀煶/鏇村姞浼橀泤鐨勮法鐣岀煶_Pluto.json b/绀轰緥椤圭洰/鏇村姞浼橀泤鐨勮法鐣岀煶/鏇村姞浼橀泤鐨勮法鐣岀煶_Pluto.json new file mode 100644 index 0000000..921244c --- /dev/null +++ b/绀轰緥椤圭洰/鏇村姞浼橀泤鐨勮法鐣岀煶/鏇村姞浼橀泤鐨勮法鐣岀煶_Pluto.json @@ -0,0 +1,9 @@ +{ + "鍔熻兘閰嶇疆": { + "璺ㄧ晫鐭矷D": 12600294, + "绂佹璺ㄧ晫瑁呭ID": [27601, 27602] + }, + "鎻愮ず1":"璺ㄧ晫鐭崇被鍨嬩负瀹濈彔", + "鎻愮ず2":"璇疯嚜琛屼慨鏀硅法鐣岀煶瀹濈彔鍥炬爣銆佹弿杩", + "鎻愮ず3":"娉ㄦ剰瀹濈彔鍙互闄勯瓟鐨勮澶囩被鍨嬪彲浠ョ洿鎺ュ奖鍝嶅彲璺ㄧ晫鐨勮澶囩被鍨" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鏈嶅姟鍣ㄩ槻鍏ヤ镜/Proj.ifo b/绀轰緥椤圭洰/鏈嶅姟鍣ㄩ槻鍏ヤ镜/Proj.ifo new file mode 100644 index 0000000..7c6751e --- /dev/null +++ b/绀轰緥椤圭洰/鏈嶅姟鍣ㄩ槻鍏ヤ镜/Proj.ifo @@ -0,0 +1,12 @@ +{ + "ProjectName": "鏈嶅姟鍣ㄩ槻鍏ヤ镜", + "ProjectDescribe": "鏈」鐩細鎸佺画鏇存柊,鍥犵壒娈婂師鍥犻昏緫涓嶄細鍏紑", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.0, + "ProjectIcon": "http://su782j8qj.hd-bkt.clouddn.com/image/%E9%BB%91%E5%AE%A2.png", + "ProjectConfig": "", + "ProjectFiles": [ + "鏈嶅姟鍣ㄩ槻鍏ヤ镜.sut" + ], + "ProjectRunFunc": "_Dps_ServerIntrusionPrevention_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鏈嶅姟鍣ㄩ槻鍏ヤ镜/鏈嶅姟鍣ㄩ槻鍏ヤ镜.sut b/绀轰緥椤圭洰/鏈嶅姟鍣ㄩ槻鍏ヤ镜/鏈嶅姟鍣ㄩ槻鍏ヤ镜.sut new file mode 100644 index 0000000..ab68246 Binary files /dev/null and b/绀轰緥椤圭洰/鏈嶅姟鍣ㄩ槻鍏ヤ镜/鏈嶅姟鍣ㄩ槻鍏ヤ镜.sut differ diff --git a/绀轰緥椤圭洰/鏉傞」鍔熻兘/Proj.ifo b/绀轰緥椤圭洰/鏉傞」鍔熻兘/Proj.ifo new file mode 100644 index 0000000..c2effea --- /dev/null +++ b/绀轰緥椤圭洰/鏉傞」鍔熻兘/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鏉傞」鍔熻兘", + "ProjectDescribe": "鍔熻兘涓:鍏抽棴鍟嗗簵鍥炶喘,鍔熻兘浜:鏃犺鍒涘缓瑙掕壊鏃堕棿鐩存帴鍙垹闄,鍔熻兘涓:鍙湪鍓湰闂ㄥ彛鎽嗘憡,鍔熻兘鍥:鑴辩鍏細鍚庡彲绔嬮┈鍔犲叆鏂板叕浼,鍔熻兘浜:璺ㄥ叕浼氳亰澶 浠ュ強鍚勭鏉傞」寮鍏", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.3, + "ProjectConfig": "鏉傞」鍔熻兘寮鍏砡Nangua.json", + "ProjectFiles": [ + "鏉傞」鍔熻兘.nut" + ], + "ProjectRunFunc": "_Dps_sundry_nangua_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鏉傞」鍔熻兘/鏉傞」鍔熻兘.nut b/绀轰緥椤圭洰/鏉傞」鍔熻兘/鏉傞」鍔熻兘.nut new file mode 100644 index 0000000..10c0f45 --- /dev/null +++ b/绀轰緥椤圭洰/鏉傞」鍔熻兘/鏉傞」鍔熻兘.nut @@ -0,0 +1,251 @@ +function _Dps_sundry_nangua_Main_() { + local config = GlobalConfig.Get("鏉傞」鍔熻兘寮鍏砡Nangua.json"); + if(config["鏉傞」鍔熻兘寮鍏"]["鎽嗘憡寮鍚袱鎺掓牸瀛"]){ + NativePointer(S_Ptr("0x085C6EB8")).writeByteArray([0x66, 0x83, 0xF8, 0x0E]); + // 瓒呰繃10涓偖浠舵椂鑷姩鍒嗗紑鍙戦 + Cb_ReqDBSendNewSystemMultiMail_Leave_Func._SendNewSystemMultiMail <- function(args) { + local num = args[2]; + if (num > 10) { + Sq_CallFunc(S_Ptr("0x8556B68"), "int", ["pointer", "pointer", "int", "int", "int", "pointer", "int", "int", "int", "int"], + args[0], args[1], 10, args[3], args[4], args[5], args[6], args[7], args[8], args[9]); + local left = num - 10; + local pack = Memory.alloc(0x1000); + for(local i = 0; i < left; i++){ + Memory.copy(pack.add(61 * i), NativePointer(args[1]).add(61 * (i + 10)), 61); + } + Sq_CallFunc(S_Ptr("0x8556B68"), "int", ["pointer", "pointer", "int", "int", "int", "pointer", "int", "int", "int", "int"], + args[0], pack.C_Object, left, args[3], args[4], args[5], args[6], args[7], args[8], args[9]); + } + } + } + + // 璁剧疆鏈澶х瓑绾 + if(config["鏉傞」鍔熻兘寮鍏"]["璁剧疆鏈楂樼瓑绾"][0]){ + local level = config["鏉傞」鍔熻兘寮鍏"]["璁剧疆鏈楂樼瓑绾"][1]; + GameManager.SetGameMaxLevel(level); + } + + // 瑁呭瑙i攣鏃堕棿 + if(config["鏉傞」鍔熻兘寮鍏"]["瑁呭瑙i攣(鍗曚綅:绉)"][0]){ + local time = config["鏉傞」鍔熻兘寮鍏"]["瑁呭瑙i攣(鍗曚綅:绉)"][1]; + GameManager.SetItemLockTime(time); + } + + // 鍒涘缓缂旈犺 + if(config["鏉傞」鍔熻兘寮鍏"]["鍒涘缓缂旈犺"]){ + GameManager.OpenCreateJob_CreatorMage(); + } + + // 鑷姩瑙i櫎榄旀硶灏佸嵃 + if(config["鏉傞」鍔熻兘寮鍏"]["鑷姩瑙i櫎榄旀硶灏佸嵃"]){ + GameManager.OpenRandomAutomaticUnblocking(); + } + + // 寮鍚澶囦笌鏃惰闀跺祵 + if(config["鏉傞」鍔熻兘寮鍏"]["寮鍚澶囦笌鏃惰闀跺祵"]){ + GameManager.FixEquipUseJewel(); + } + + // 淇涓嬬嚎鍗″煄闀 + if(config["鏉傞」鍔熻兘寮鍏"]["淇涓嬬嚎鍗″煄闀"]){ + GameManager.FixSaveTown(); + } + + // 淇缁濇湜涔嬪閲戝竵寮傚父 + if(config["鏉傞」鍔熻兘寮鍏"]["淇缁濇湜涔嬪閲戝竵寮傚父"]){ + GameManager.FixDespairGold(); + } + + // 缁濇湜涔嬪閫氬叧鍚庡彲浠ョ敤闂ㄧエ缁х画杩涘叆 + if(config["鏉傞」鍔熻兘寮鍏"]["缁濇湜涔嬪閫氬叧鍚庡彲浠ョ敤闂ㄧエ缁х画杩涘叆"]){ + Sq_WriteByteArr(S_Ptr("0x0864416F"), [0xEB, 0x47]); + } + + // 淇缁濇湜涔嬪姣10灞傝繘涓嶅幓鍓湰 + Cb_TowerOfDespairMgr_SendAPCInfo_Enter_Func._TowerOfDespair <- function(args) { + local config = GlobalConfig.Get("鏉傞」鍔熻兘寮鍏砡Nangua.json"); + if(config["鏉傞」鍔熻兘寮鍏"]["淇缁濇湜涔嬪姣10灞傝繘涓嶅幓鍓湰"]){ + local this_ptr = args[0]; + local tod_layer = args[1]; + local user = args[2]; + local apc_mgr = NativePointer(this_ptr).add(213 * 4).readPointer(); + local layer = NativePointer(tod_layer).readU16(); + local apc_info = Memory.alloc(0x100000); + local new_tod_layer = Memory.alloc(2); + new_tod_layer.writeU16(layer); + Sq_CallFunc(S_Ptr("0x085FED2E"), "void", ["pointer", "pointer", "pointer"], apc_mgr, new_tod_layer.C_Object, apc_info.C_Object); + } + } + + // 璁剧疆姣忔棩鍙氦鏄撻噾甯佷笂闄愬 + if(config["鏉傞」鍔熻兘寮鍏"]["璁剧疆姣忔棩鍙氦鏄撻噾甯佷笂闄愬"][0]){ + local max = config["鏉傞」鍔熻兘寮鍏"]["璁剧疆姣忔棩鍙氦鏄撻噾甯佷笂闄愬"][1]; + GameManager.FixGlodTradeDaily(max); + } + + // 寮哄寲13浠ヤ笂鍏嶅埛鏂 + if(config["鏉傞」鍔熻兘寮鍏"]["寮哄寲13浠ヤ笂鍏嶅埛鏂"]){ + GameManager.Fix_13Upgrade(); + } + + // 寮鍚14鏍兼妧鑳芥爮 + if(config["鏉傞」鍔熻兘寮鍏"]["寮鍚14鏍兼妧鑳芥爮"]){ + GameManager.Fix14Skill(); + } + + // 淇鎷嶅崠琛屾秷鑰楀搧涓婃灦 + if(config["鏉傞」鍔熻兘寮鍏"]["淇鎷嶅崠琛屾秷鑰楀搧涓婃灦"]){ + GameManager.Fix_Auction_Regist_Item(); + } + + // 鍓湰鍐呭彲涓㈠純鐗╁搧鍝佺骇 + if(config["鏉傞」鍔熻兘寮鍏"]["鍓湰鍐呭彲涓㈠純鐗╁搧鍝佺骇(寮鍚悗鍙涪寮冪矇瑁,3涓鸿澶囧搧绾)"][0]){ + local level = config["鏉傞」鍔熻兘寮鍏"]["鍓湰鍐呭彲涓㈠純鐗╁搧鍝佺骇(寮鍚悗鍙涪寮冪矇瑁,3涓鸿澶囧搧绾)"][1]; + GameManager.FixDungeonDropGrade(level); + } + + // 鍙戦侀偖浠舵椂楠岃瘉鍏抽棴 + if(config["鏉傞」鍔熻兘寮鍏"]["鍙戦侀偖浠舵椂楠岃瘉鍏抽棴"]){ + GameManager.FixEmailRemovalVerification(); + } + + // 鍏抽棴鍟嗗簵鍥炶喘 + Cb_Item_IsBanRedeemItem_Leave_Func.BanRedeemItemByNangua <- function(args) { + local config = GlobalConfig.Get("鏉傞」鍔熻兘寮鍏砡Nangua.json"); + if (config["鏉傞」鍔熻兘寮鍏"]["鍏抽棴鍟嗗簵鍥炶喘"]) { + return 1; + } + } + + // 鏃犺鍒涘缓瑙掕壊鏃堕棿鐩存帴鍒犻櫎瑙掕壊 + Cb_User_CheckDeleteCharacTime_Leave_Func.DeleteCharacByNangua <- function(args) { + local config = GlobalConfig.Get("鏉傞」鍔熻兘寮鍏砡Nangua.json"); + if (config["鏉傞」鍔熻兘寮鍏"]["鏃犺鍒涘缓瑙掕壊鏃堕棿鐩存帴鍒犻櫎瑙掕壊"]) { + return 1; + } + } + + // 蹇界暐鍦ㄥ壇鏈棬鍙g姝㈡憜鎽 + Cb_CPrivateStore_IsAreaNearEntranceDungeon_Leave_Func.PrivateStoreByNangua <- function(args) { + local config = GlobalConfig.Get("鏉傞」鍔熻兘寮鍏砡Nangua.json"); + if (config["鏉傞」鍔熻兘寮鍏"]["蹇界暐鍦ㄥ壇鏈棬鍙g姝㈡憜鎽"]) { + return 1; + } + } + + // 鑴辩鍏細鍚庡彲绔嬮┈鍔犲叆鏂板叕浼 + Cb_MonitorNoticeGuildSecede_dispatch_Enter_Func.DeleteSecedeByNangua <- function(args) { + local config = GlobalConfig.Get("鏉傞」鍔熻兘寮鍏砡Nangua.json"); + if (config["鏉傞」鍔熻兘寮鍏"]["鑴辩鍏細鍚庡彲绔嬮┈鍔犲叆鏂板叕浼"]) { + local SUser = User(args[1]); + local charac_no = SUser.GetCID(); + local updateQuery = "UPDATE d_guild.guild_member SET secede_time = '0000-00-00 00:00:00' where charac_no=" + charac_no + ";"; + local column_type_list = ["int"]; + local SqlObj = MysqlPool.GetInstance().GetConnect(); + SqlObj.Select(updateQuery, column_type_list); + MysqlPool.GetInstance().PutConnect(SqlObj); + } + } + + //鍏細鏅氫俊鎭簰閫 + Cb_MonitorNoticeGuildChatMsg_Leave_Func.GUildMessagetoCommonByNangua <- function(args) { + local config = GlobalConfig.Get("鏉傞」鍔熻兘寮鍏砡Nangua.json"); + if (config["鏉傞」鍔熻兘寮鍏"]["鍏細鑱婂ぉ浜掗"]) { + local SUser = User(args[1]); + local msgData = args[2]; + + local senderName = NativePointer(msgData).add(18).readUtf8String(); + if (SUser.GetCharacName() == senderName) { + local Guild_name = SUser.GetGuildName(); + _Dps_GuildmsgBynangua_Main_.SendMessagetoCommon(msgData, Guild_name); + } + } + } + //鍏細瓒呴摼鎺ヤ俊鎭簰閫 + Cb_MonitorNoticeGuildChatMsgHyperLink_Leave_Func.GUildMessagetoHyperLinkByNangua <- function(args) { + local config = GlobalConfig.Get("鏉傞」鍔熻兘寮鍏砡Nangua.json"); + local SUser = User(args[1]); + local msgData = args[2]; + + local senderName = NativePointer(msgData).add(18).readUtf8String(); + if (config["鏉傞」鍔熻兘寮鍏"]["鍏細鑱婂ぉ浜掗"] && SUser.GetCharacName() == senderName) { + local guild_name = SUser.GetGuildName(); + local Pack = _Dps_GuildmsgBynangua_Main_.SendMessagetoHyperLink(msgData, guild_name); + local users = World.GetOnlinePlayer(); + users.apply(function(Value) { + local onguildName = Value.GetGuildName() + local guildkey = Sq_CallFunc(S_Ptr("0x822F46C"), "int", ["pointer"], Value.C_Object); + if (onguildName != guild_name && guildkey > 0) { + Value.Send(Pack); + } + }); + Pack.Delete(); + } + } + + class _Dps_GuildmsgBynangua_Main_ { + function SendMessagetoCommon(msg, guild_name) { + local Pack = Packet(); + Pack.Put_Header(0, 65); + Pack.Put_Byte(6); + Pack.Put_Byte(0); + local name = NativePointer(msg).add(18).readUtf8String(); + _Dps_GuildmsgBynangua_Main_.api_InterfacePacketBuf_put_string(Pack, name); + Pack.Put_Byte(0); + local msgLen = NativePointer(msg).add(0x30).readU8(); + local content = NativePointer(msg).add(0x31); + local extraMsg = " [" + guild_name + "]璺ㄥ叕浼氫俊鎭"; + local extraContent = Memory.allocUtf8String(extraMsg); + local extraLen = extraMsg.len(); + local newMsgLen = msgLen + extraLen; + Pack.Put_Int(newMsgLen) + Pack.Put_BinaryEx(content.C_Object, msgLen); + Pack.Put_BinaryEx(extraContent.C_Object, extraLen); + Pack.Put_Byte(0); + Pack.Finalize(true); + local users = World.GetOnlinePlayer(); + users.apply(function(Value) { + local onguildName = Value.GetGuildName() + local guildkey = Sq_CallFunc(S_Ptr("0x822F46C"), "int", ["pointer"], Value.C_Object); + if (onguildName != guild_name && guildkey > 0) { + Value.Send(Pack); + } + }); + Pack.Delete(); + } + + function SendMessagetoHyperLink(msg, guild_name) { + local Pack = Packet(); + Pack.Put_Header(0, 371); + Pack.Put_Byte(6); + Pack.Put_Byte(0); + // 瑙掕壊鍚 + local name = NativePointer(msg).add(18).readUtf8String(); + _Dps_GuildmsgBynangua_Main_.api_InterfacePacketBuf_put_string(Pack, name); + Pack.Put_Byte(0); + local msgLen = NativePointer(msg).add(361).readU8(); + local content = NativePointer(msg).add(362); + local extraMsg = " [" + guild_name + "]璺ㄥ叕浼氫俊鎭"; + local extraContent = Memory.allocUtf8String(extraMsg); + local extraLen = extraMsg.len(); + local newMsgLen = msgLen + extraLen; + Pack.Put_Int(newMsgLen) + Pack.Put_BinaryEx(content.C_Object, msgLen); + Pack.Put_BinaryEx(extraContent.C_Object, extraLen); + + local itemCount = NativePointer(msg).add(48).readU8(); + Pack.Put_Byte(itemCount); + for (local i = 0; i < itemCount; i++) { + Pack.Put_BinaryEx(NativePointer(msg).add(104 * i + 49).C_Object, 104); + } + Pack.Finalize(true); + return Pack; + } + function api_InterfacePacketBuf_put_string(Pack, s) { + local p = Memory.allocUtf8String(s); + local len = s.len(); + Pack.Put_Int(len); + Pack.Put_BinaryEx(p.C_Object, len); + } + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鏉傞」鍔熻兘/鏉傞」鍔熻兘寮鍏砡Nangua.json b/绀轰緥椤圭洰/鏉傞」鍔熻兘/鏉傞」鍔熻兘寮鍏砡Nangua.json new file mode 100644 index 0000000..4402e20 --- /dev/null +++ b/绀轰緥椤圭洰/鏉傞」鍔熻兘/鏉傞」鍔熻兘寮鍏砡Nangua.json @@ -0,0 +1,30 @@ +{ + "鏉傞」鍔熻兘寮鍏":{ + "鎻愮ず":"寮鍏(true涓哄紑鍚,false涓哄叧闂)", + "鎻愮ず2":"鎽嗘憡寮鍚袱鎺掓牸瀛愩14鏍兼妧鑳芥爮銆侀暥宓岃繖鍑犱釜鍔熻兘缁惎鍔ㄥ櫒鏀寔鎴杁ll鏀寔", + "鍏抽棴鍟嗗簵鍥炶喘":true, + "鏃犺鍒涘缓瑙掕壊鏃堕棿鐩存帴鍒犻櫎瑙掕壊":true, + "蹇界暐鍦ㄥ壇鏈棬鍙g姝㈡憜鎽":true, + "鑴辩鍏細鍚庡彲绔嬮┈鍔犲叆鏂板叕浼":true, + "鍏細鑱婂ぉ浜掗":true, + "鈫戔啈鈫戜笂杩板姛鑳藉彲闅忔椂鏇存敼鏃犻』浜斿浗鈫戔啈鈫":"", + + "鈫撯啌鈫撲笅鏂瑰姛鑳芥洿鏀归』浜斿浗鐢熸晥鈫撯啌鈫":"", + "鎽嗘憡寮鍚袱鎺掓牸瀛":true, + "璁剧疆鏈楂樼瓑绾":[false, 60], + "瑁呭瑙i攣(鍗曚綅:绉)":[false, 1], + "鍒涘缓缂旈犺":false, + "鑷姩瑙i櫎榄旀硶灏佸嵃":false, + "寮鍚澶囦笌鏃惰闀跺祵":false, + "淇涓嬬嚎鍗″煄闀":true, + "淇缁濇湜涔嬪閲戝竵寮傚父":true, + "缁濇湜涔嬪閫氬叧鍚庡彲浠ョ敤闂ㄧエ缁х画杩涘叆":true, + "淇缁濇湜涔嬪姣10灞傝繘涓嶅幓鍓湰":true, + "璁剧疆姣忔棩鍙氦鏄撻噾甯佷笂闄愬":[false, 50000000], + "寮哄寲13浠ヤ笂鍏嶅埛鏂":true, + "寮鍚14鏍兼妧鑳芥爮":false, + "淇鎷嶅崠琛屾秷鑰楀搧涓婃灦":true, + "鍓湰鍐呭彲涓㈠純鐗╁搧鍝佺骇(寮鍚悗鍙涪寮冪矇瑁,3涓鸿澶囧搧绾)":[false, 3], + "鍙戦侀偖浠舵椂楠岃瘉鍏抽棴":true + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/姝﹀櫒閿婚犲埜/Proj.ifo b/绀轰緥椤圭洰/姝﹀櫒閿婚犲埜/Proj.ifo new file mode 100644 index 0000000..a238f73 --- /dev/null +++ b/绀轰緥椤圭洰/姝﹀櫒閿婚犲埜/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "姝﹀櫒閿婚犲埜", + "ProjectDescribe": "鎻愬崌姝﹀櫒鐨勯敾閫犵瓑绾", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.0, + "ProjectConfig": "姝﹀櫒閿婚犲埜閰嶇疆_Nangua.json", + "ProjectFiles": [ + "姝﹀櫒閿婚犲埜.nut" + ], + "ProjectRunFunc": "_Dps_UpdateWeaponSeparate_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/姝﹀櫒閿婚犲埜/姝﹀櫒閿婚犲埜.nut b/绀轰緥椤圭洰/姝﹀櫒閿婚犲埜/姝﹀櫒閿婚犲埜.nut new file mode 100644 index 0000000..6489f09 --- /dev/null +++ b/绀轰緥椤圭洰/姝﹀櫒閿婚犲埜/姝﹀櫒閿婚犲埜.nut @@ -0,0 +1,99 @@ +function WeaponForgingBynangua(SUser, ItemId) { + local Config = GlobalConfig.Get("姝﹀櫒閿婚犲埜閰嶇疆_Nangua.json"); + local ItemIdStr = ItemId.tostring(); + + if (Config["姝﹀櫒閿婚犲埜閰嶇疆"].rawin(ItemIdStr)) { + local forgingConfig = Config["姝﹀櫒閿婚犲埜閰嶇疆"][ItemIdStr]; + local Level = forgingConfig["閿婚犵瓑绾"]; + local SuccessRate = forgingConfig["鎴愬姛鐜"]; + + // 鑾峰彇鐜╁鑳屽寘 + local InvenObj = SUser.GetInven(); + if (!InvenObj) return; + + // 鑾峰彇鐜╁鑳屽寘绫诲瀷1鐨勭9涓牸瀛 + local ItemObj = InvenObj.GetSlot(1, 9); + + // 鍒ゆ柇瑁呭鏄惁瀛樺湪 + if (ItemObj.IsEmpty) { + _UpdateWeaponNotify.NotifyUserAndReturn(SUser, ItemId, Config["鎻愮ず淇℃伅"]["瑁呭涓嶅瓨鍦"]); + return; + } + + // 鑾峰彇瑁呭绫诲瀷 + local ItemInfo = PvfItem.GetPvfItemById(ItemObj.GetIndex()); + local ItemType = NativePointer(ItemInfo.C_Object).add(141 * 4).readU32(); + if (ItemType != 10) { + _UpdateWeaponNotify.NotifyUserAndReturn(SUser, ItemId, Config["鎻愮ず淇℃伅"]["闈炴鍣ㄨ澶"]); + return; + } + + // 鑾峰彇鍘熻澶囩殑閿婚犵瓑绾 + local OldLevel = ItemObj.GetForging(); + if (OldLevel >= Level) { + _UpdateWeaponNotify.NotifyUserAndReturn(SUser, ItemId, Config["鎻愮ず淇℃伅"]["閿婚犵瓑绾у凡杈惧埌"]); + return; + } + + // 闅忔満鏁扮敓鎴 + local RandNum = MathClass.Rand(0, 101); + if (RandNum <= SuccessRate) { + // 璁剧疆瑁呭鐨勯敾閫犵瓑绾 + ItemObj.SetForging(Level); + ItemObj.Flush(); + SUser.SendUpdateItemList(1, 0, 9); + + // 鏍规嵁閰嶇疆閫夋嫨鍙戦佹秷鎭殑鏂瑰紡 + if (Config["鍚敤233鍙戝寘(true/false)"]) { + SUser.SendNotiBox(format(Config["鎻愮ず淇℃伅"]["閿婚犳垚鍔"], Level), 1); + } else { + SUser.SendNotiPacketMessage(format(Config["鎻愮ず淇℃伅"]["閿婚犳垚鍔"], Level), 8); + } + } else { + // 鏍规嵁閰嶇疆閫夋嫨鍙戦佹秷鎭殑鏂瑰紡 + if (Config["鍚敤233鍙戝寘(true/false)"]) { + SUser.SendNotiBox(Config["鎻愮ず淇℃伅"]["閿婚犲け璐"], 1); + } else { + SUser.SendNotiPacketMessage(Config["鎻愮ず淇℃伅"]["閿婚犲け璐"], 8); + } + } + } +} +class _UpdateWeaponNotify { + function NotifyUserAndReturn(SUser, ItemId, message) { + local Config = GlobalConfig.Get("姝﹀櫒閿婚犲埜閰嶇疆_Nangua.json"); + + // 鏍规嵁閰嶇疆閫夋嫨鍙戦佹秷鎭殑鏂瑰紡 + if (Config["鍚敤233鍙戝寘(true/false)"]) { + SUser.SendNotiBox(message, 1); + } else { + SUser.SendNotiPacketMessage(message, 8); + } + + SUser.GiveItem(ItemId, 1); + } +} + +//鍔犺浇鍏ュ彛 +function _Dps_UpdateWeaponSeparate_Main_() { + _Dps_WeaponForging_Logic_(); +} + +//閲嶈浇鍏ュ彛 +function _Dps_WeaponForging_Main_Reload_(OldConfig) { + local Config = GlobalConfig.Get("姝﹀櫒閿婚犲埜閰嶇疆_Nangua.json"); + // 鍒犻櫎鏃х殑娉ㄥ唽 + foreach(itemId, _ in OldConfig["姝﹀櫒閿婚犲埜閰嶇疆"]) { + Cb_Use_Item_Sp_Func.rawdelete(itemId.tointeger()); + } + //閲嶆柊娉ㄥ唽 + _Dps_WeaponForging_Logic_(); +} + +function _Dps_WeaponForging_Logic_() { + local Config = GlobalConfig.Get("姝﹀櫒閿婚犲埜閰嶇疆_Nangua.json"); + // 娉ㄥ唽鎵鏈夋鍣ㄩ敾閫犲埜 + foreach(itemId, _ in Config["姝﹀櫒閿婚犲埜閰嶇疆"]) { + Cb_Use_Item_Sp_Func[itemId.tointeger()] <- WeaponForgingBynangua; + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/姝﹀櫒閿婚犲埜/姝﹀櫒閿婚犲埜閰嶇疆_Nangua.json b/绀轰緥椤圭洰/姝﹀櫒閿婚犲埜/姝﹀櫒閿婚犲埜閰嶇疆_Nangua.json new file mode 100644 index 0000000..17edee7 --- /dev/null +++ b/绀轰緥椤圭洰/姝﹀櫒閿婚犲埜/姝﹀櫒閿婚犲埜閰嶇疆_Nangua.json @@ -0,0 +1,41 @@ +{ + "姝﹀櫒閿婚犲埜閰嶇疆": { + "123007": { + "閿婚犵瓑绾": 4, + "鎴愬姛鐜": 100 + }, + "123008": { + "閿婚犵瓑绾": 5, + "鎴愬姛鐜": 80 + }, + "123009": { + "閿婚犵瓑绾": 6, + "鎴愬姛鐜": 60 + }, + "123010": { + "閿婚犵瓑绾": 7, + "鎴愬姛鐜": 40 + }, + "123011": { + "閿婚犵瓑绾": 8, + "鎴愬姛鐜": 20 + }, + "123012": { + "閿婚犵瓑绾": 9, + "鎴愬姛鐜": 10 + }, + "123013": { + "閿婚犵瓑绾": 10, + "鎴愬姛鐜": 5 + } + }, + "鎻愮ず淇℃伅": { + "瑁呭涓嶅瓨鍦": "璇峰皢闇瑕侀敾閫犵殑姝﹀櫒鏀惧湪鑳屽寘绗竴鎺掔涓鏍", + "闈炴鍣ㄨ澶": "鍙兘瀵规鍣ㄨ繘琛岄敾閫", + "閿婚犵瓑绾у凡杈惧埌": "褰撳墠姝﹀櫒閿婚犵瓑绾у凡缁忚揪鍒版垨瓒呰繃鐩爣绛夌骇", + "閿婚犳垚鍔": "鎭枩锛佹鍣ㄩ敾閫犳垚鍔燂紝褰撳墠閿婚犵瓑绾э細%d", + "閿婚犲け璐": "寰堥仐鎲撅紝閿婚犲け璐ワ紝璇峰啀娆″皾璇" + }, + "鎻愮ず": "濡傛灉浣跨敤233鍙戝寘闇瑕佸鎴风鎻掍欢,鍦ㄧ兢鏂囦欢鎼滅储<瀹㈡埛绔彃浠舵秷鎭233>涓嬭浇浣跨敤,鍚﹀垯浼氬鑷存父鎴忓穿婧", + "鍚敤233鍙戝寘(true/false)": true +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/娣辨笂妯″紡绉板彿/Proj.ifo b/绀轰緥椤圭洰/娣辨笂妯″紡绉板彿/Proj.ifo new file mode 100644 index 0000000..4659d32 --- /dev/null +++ b/绀轰緥椤圭洰/娣辨笂妯″紡绉板彿/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "娣辨笂妯″紡绉板彿", + "ProjectDescribe": "鎸囧畾绉板彿ID骞朵笖浣╂埓鍙笉鐢ㄦ瘡娆¢兘鐐瑰紑鍚寫鎴樻繁娓婃淳瀵规寜閽紝杩涘叆榛樿娣辨笂妯″紡锛堥渶瑕佸畬鎴愭繁娓婁换鍔★紝鎷ユ湁娣辨笂绁級锛屽彟澶栬繕鏈変竴涓皬鍔熻兘锛屾繁娓婃娆¢潪甯稿洶闅俱", + "ProjectAuthor": "Pluto", + "ProjectVersion": 1.0, + "ProjectConfig": "娣辨笂妯″紡鍔熻兘_Pluto.json", + "ProjectFiles": [ + "娣辨笂妯″紡绉板彿.nut" + ], + "ProjectRunFunc": "_Dps_hellParty_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/娣辨笂妯″紡绉板彿/娣辨笂妯″紡鍔熻兘_Pluto.json b/绀轰緥椤圭洰/娣辨笂妯″紡绉板彿/娣辨笂妯″紡鍔熻兘_Pluto.json new file mode 100644 index 0000000..69c5b38 --- /dev/null +++ b/绀轰緥椤圭洰/娣辨笂妯″紡绉板彿/娣辨笂妯″紡鍔熻兘_Pluto.json @@ -0,0 +1,5 @@ +{ + "绉板彿ID":26697, + "闈炲父鍥伴毦":0, + "娆℃閮芥槸闈炲父鍥伴毦寮鍏":"寮=1锛屽叧=0" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/娣辨笂妯″紡绉板彿/娣辨笂妯″紡绉板彿.nut b/绀轰緥椤圭洰/娣辨笂妯″紡绉板彿/娣辨笂妯″紡绉板彿.nut new file mode 100644 index 0000000..3db745f --- /dev/null +++ b/绀轰緥椤圭洰/娣辨笂妯″紡绉板彿/娣辨笂妯″紡绉板彿.nut @@ -0,0 +1,47 @@ +//灏婅吹鐨勫浜猴細26700 +//绉板彿浣嶏細11 +function _Dps_hellParty_Main_() { + //娣辨笂妯″紡寮鍏 + local hellPartyTag = false; + //涓婚昏緫 + Cb_CParty_DungeonStart_Enter_Func.hellparty <- function(args) { + if (hellPartyTag == false) { + return; + } + args[3] = 1; + return args; + } + //鑾峰彇鐜╁绉板彿 + Cb_StartGame_check_error_Leave_Func.hellparty <- function(args) { + local Config = GlobalConfig.Get("娣辨笂妯″紡鍔熻兘_Pluto.json"); + local VipID = Config["绉板彿ID"]; + local SUser = User(args[1]); + local cid = SUser.GetCID(); + print("cid = " + cid + "绉板彿ID = " + VipID); + local InvenObj = SUser.GetInven(); + if (InvenObj) { + local ItemObj = InvenObj.GetSlot(0, 11); + local item_id = ItemObj.GetIndex(); // 鑾峰彇鐗╁搧ID + //print(item_id); + if(item_id == VipID) { + hellPartyTag = true; + }else{ + hellPartyTag = false; + } + print("hellPartyTag = " + hellPartyTag); + } + } + + //================================================== + // 鑾峰彇鍦扮嫳娲惧闅惧害鍔熻兘 + Cb_GetHellPartyDifficulty_Leave_Func.abc <- function (args) { + local Config = GlobalConfig.Get("娣辨笂妯″紡鍔熻兘_Pluto.json"); + local GetHellPartyDifficulty = Config["闈炲父鍥伴毦"]; + print("闅惧害寮鍏 " + GetHellPartyDifficulty); + if (GetHellPartyDifficulty == 1) { + local retval = args.pop(); + print("鑾峰彇鍦扮嫳娲惧闅惧害 " + retval); + return 1; + } + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/娣辨笂娲诲姩/Proj.ifo b/绀轰緥椤圭洰/娣辨笂娲诲姩/Proj.ifo new file mode 100644 index 0000000..f551671 --- /dev/null +++ b/绀轰緥椤圭洰/娣辨笂娲诲姩/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "娣辨笂娲诲姩", + "ProjectDescribe": "瀹氭椂寮鍚繁娓婃椿鍔,鑾峰緱鎸囧畾鐗╁搧鏃惰幏寰楀鍔", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.0, + "ProjectConfig": "娣辨笂娲诲姩閰嶇疆_nangua.json", + "ProjectFiles": [ + "娣辨笂娲诲姩.nut" + ], + "ProjectRunFunc": "_Dps_Start_Hellparty_Event_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/娣辨笂娲诲姩/娣辨笂娲诲姩.nut b/绀轰緥椤圭洰/娣辨笂娲诲姩/娣辨笂娲诲姩.nut new file mode 100644 index 0000000..c21d7e4 --- /dev/null +++ b/绀轰緥椤圭洰/娣辨笂娲诲姩/娣辨笂娲诲姩.nut @@ -0,0 +1,954 @@ +// 娣辨笂娲诲姩鐘舵佹灇涓 +local HELLPARTY_STATE_END = 0; // 娲诲姩缁撴潫鐘舵 +local HELLPARTY_STATE_RUNNING = 1; // 娲诲姩杩涜涓姸鎬 + +// 娣辨笂娲诲姩鏁版嵁 +local hellpartyEventInfo = { + "state": HELLPARTY_STATE_END, // 褰撳墠娲诲姩鐘舵 + "start_time": 0, // 娲诲姩寮濮嬫椂闂 + "reward_counts": {}, // 姣忎釜鎸囧畾閬撳叿鐨勫墿浣欏鍔辨鏁 + "last_reminder_minute": -1, // 涓婃鎻愰啋鐨勫垎閽熸暟锛屽垵濮嬪寲涓-1 + "last_reminder_second": -1, // 涓婃鎻愰啋鐨勭鏁帮紝鍒濆鍖栦负-1 + "current_time_slot": null, // 褰撳墠娲诲姩鏃堕棿娈甸厤缃 + "drop_prevention_enabled": false // 鏄惁鍚敤浜嗙姝涪寮冪墿鍝 +} + +// 鍒濆鍖栫姝涪寮冪墿鍝佸姛鑳 +function Init_Hellparty_Drop_Prevention() { + // 濡傛灉娌℃湁鍒涘缓杩囪繖涓ā鎷熷唴瀛樺氨鍒涘缓 + if(!getroottable().rawin("_HellpartyEmptyCharacInfo_")) { + getroottable()._HellpartyEmptyCharacInfo_ <- Memory.alloc(17); + Memory.reset(getroottable()._HellpartyEmptyCharacInfo_, 17); + } + // 濡傛灉娌℃湁鍒涘缓杩囪繖涓烦杞現lag灏卞垱寤哄苟鍒濆鍖 + if(!getroottable().rawin("_HellpartyDropPreventFlag_")) { + getroottable()._HellpartyDropPreventFlag_ <- false; + } +} + +// 娣辨笂娲诲姩鍏ュ彛鐐 +function _Dps_Start_Hellparty_Event_Main_() { + _Dps_Start_Hellparty_Event_Logic_(); +} + +// 娣辨笂娲诲姩閲嶈浇鍏ュ彛鐐 +function _Dps_Start_Hellparty_Event_Main_Reload_(OldConfig) { + + // 绉婚櫎妫鏌ヤ换鍔 + Timer.RemoveCronTask("HellpartyCheckTask"); + + // 绉婚櫎鏃х殑瀹氭椂浠诲姟 + if (OldConfig && "娣辨笂娲诲姩閰嶇疆" in OldConfig && "娲诲姩鏃堕棿娈" in OldConfig["娣辨笂娲诲姩閰嶇疆"]) { + foreach(timeSlot in OldConfig["娣辨笂娲诲姩閰嶇疆"]["娲诲姩鏃堕棿娈"]) { + local start_time = timeSlot["寮鍚椂闂"]; + local task_id = format("HellpartyEventTask_%d_%d", start_time[0], start_time[1]); + Timer.RemoveCronTask(task_id); + } + } + + // 璁剧疆娲诲姩鐘舵佷负缁撴潫锛堝鏋滃綋鍓嶆鍦ㄨ繘琛岋級 + if (hellpartyEventInfo.state == HELLPARTY_STATE_RUNNING) { + hellpartyEventInfo.state = HELLPARTY_STATE_END; + World.SendNotiPacketMessage("銆愭繁娓婃帰闄╂椿鍔ㄣ戝洜閰嶇疆鏇存柊宸茬粨鏉", 14); + } + + // 骞挎挱娲诲姩鏃堕棿鏇存敼閫氱煡 + broadcast_hellparty_time_changes(); + + // 閲嶆柊娉ㄥ唽 + _Dps_Start_Hellparty_Event_Logic_(); +} + +// 娣辨笂娲诲姩閫昏緫鍏ュ彛鐐 +function _Dps_Start_Hellparty_Event_Logic_() { + local Config = GlobalConfig.Get("娣辨笂娲诲姩閰嶇疆_nangua.json"); + + // 妫鏌ユ椿鍔ㄦ诲紑鍏 + if (!Config["娣辨笂娲诲姩閰嶇疆"]["娲诲姩鎬诲紑鍏(true寮鍚/false鍏抽棴)"]) { + return; + } + + // 娉ㄥ唽绂佹涓㈠純鐗╁搧鐨勫洖璋冨嚱鏁 + Cb_DropItem_check_error_Enter_Func.HellpartyDropPrevention <- function(args) { + local Config = GlobalConfig.Get("娣辨笂娲诲姩閰嶇疆_nangua.json"); + // 鍙湪娲诲姩杩涜涓佸惎鐢ㄤ簡绂佹涓㈠純鍔熻兘涓斿姛鑳藉紑鍏虫墦寮鏃舵墠鐢熸晥 + if (hellpartyEventInfo.state == HELLPARTY_STATE_RUNNING && + hellpartyEventInfo.drop_prevention_enabled && + Config["娣辨笂娲诲姩閰嶇疆"]["娲诲姩鏈熼棿寮鍚墿鍝佺姝涪寮冨姛鑳(true寮鍚/false鍏抽棴)"]) { + // 纭繚蹇呰鐨勫彉閲忓瓨鍦 + if(!getroottable().rawin("_HellpartyEmptyCharacInfo_")) { + getroottable()._HellpartyEmptyCharacInfo_ <- Memory.alloc(17); + Memory.reset(getroottable()._HellpartyEmptyCharacInfo_, 17); + } + if(!getroottable().rawin("_HellpartyDropPreventFlag_")) { + getroottable()._HellpartyDropPreventFlag_ <- false; + } + + getroottable()._HellpartyDropPreventFlag_ = true; + args[1] = getroottable()._HellpartyEmptyCharacInfo_.C_Object; + } + return args; + } + + Cb_DropItem_check_error_Leave_Func.HellpartyDropPrevention <- function(args) { + local Config = GlobalConfig.Get("娣辨笂娲诲姩閰嶇疆_nangua.json"); + // 鍙湪娲诲姩杩涜涓佸惎鐢ㄤ簡绂佹涓㈠純鍔熻兘涓斿姛鑳藉紑鍏虫墦寮鏃舵墠鐢熸晥 + if (hellpartyEventInfo.state == HELLPARTY_STATE_RUNNING && + hellpartyEventInfo.drop_prevention_enabled && + Config["娣辨笂娲诲姩閰嶇疆"]["娲诲姩鏈熼棿寮鍚墿鍝佺姝涪寮冨姛鑳(true寮鍚/false鍏抽棴)"]) { + if(!getroottable().rawin("_HellpartyDropPreventFlag_")) { + getroottable()._HellpartyDropPreventFlag_ <- false; + return; + } + + if(getroottable()._HellpartyDropPreventFlag_) { + getroottable()._HellpartyDropPreventFlag_ = false; + return 19; + } + } + } + + local open_days = Config["娣辨笂娲诲姩閰嶇疆"]["姣忓懆鍑犲紑鏀炬椿鍔"]; + local current_date = date(); + local current_weekday = current_date.wday; + if (current_weekday == 0) current_weekday = 7; // 杞崲涓1-7鏍煎紡 + + // 妫鏌ヤ粖澶╂槸鍚﹀紑鏀 + local is_open_today = false; + foreach(day in open_days) { + if (day == current_weekday) { + is_open_today = true; + break; + } + } + + if (!is_open_today) { + return; + } + + // 涓烘瘡涓椂闂存娉ㄥ唽瀹氭椂浠诲姟 + foreach(timeSlot in Config["娣辨笂娲诲姩閰嶇疆"]["娲诲姩鏃堕棿娈"]) { + local start_time = timeSlot["寮鍚椂闂"]; + local start_hour = start_time[0]; + local start_minute = start_time[1]; + + // 浣跨敤鏍煎紡鍖栫殑鍞竴浠诲姟ID + local task_id = format("HellpartyEventTask_%d_%d", start_hour, start_minute); + + // 鍒涘缓閰嶇疆鐨勬湰鍦板壇鏈 + local timeSlotCopy = { + "寮鍚椂闂": [start_time[0], start_time[1]], + "鎸佺画鏃堕棿(鍒嗛挓)": timeSlot["鎸佺画鏃堕棿(鍒嗛挓)"], + "鎸囧畾閬撳叿濂栧姳閰嶇疆": { + "鎸囧畾閬撳叿ID": [] + } + }; + + // 澶嶅埗鎸囧畾閬撳叿濂栧姳閰嶇疆 + foreach(item in timeSlot["鎸囧畾閬撳叿濂栧姳閰嶇疆"]["鎸囧畾閬撳叿ID"]) { + local itemCopy = { + "鎸囧畾閬撳叿": item["鎸囧畾閬撳叿"], + "濂栧姳娆℃暟": item["濂栧姳娆℃暟"], + "濂栧姳鍒楄〃": [] + }; + foreach(reward in item["濂栧姳鍒楄〃"]) { + itemCopy["濂栧姳鍒楄〃"].append([reward[0], reward[1]]); + } + timeSlotCopy["鎸囧畾閬撳叿濂栧姳閰嶇疆"]["鎸囧畾閬撳叿ID"].append(itemCopy); + } + + // cron 琛ㄨ揪寮 (绉 鍒 鏃 鏃 鏈 鍛) + local cronExpression = format("0 %d %d * * *", start_minute, start_hour); + + // 娉ㄥ唽瀹氭椂浠诲姟锛屼紶鍏ユ椂闂存閰嶇疆鐨勫壇鏈 + Timer.SetCronTask(function() { + On_Start_Hellparty_Event(timeSlotCopy); + }, { + Cron = cronExpression, + Name = task_id + }); + + } + + // 娉ㄥ唽鍥炶皟鍑芥暟 + Cb_UserHistoryLog_ItemAdd_Enter_Func.Hellparty_EventByNangua <- function(args) { + // 妫鏌ユ椿鍔ㄦ槸鍚﹀湪杩涜涓 + if (hellpartyEventInfo.state == HELLPARTY_STATE_END) return; + + // 妫鏌ユ椿鍔ㄦ槸鍚﹀凡瓒呮椂 + if (is_hellparty_event_timeout()) return; + + local Config = GlobalConfig.Get("娣辨笂娲诲姩閰嶇疆_nangua.json"); + local SUser = User(NativePointer(args[0]).readPointer()); + + // 浣跨敤褰撳墠娲诲姩鏃堕棿娈甸厤缃 + if (!hellpartyEventInfo.current_time_slot) return; + local specifiedItems = hellpartyEventInfo.current_time_slot["鎸囧畾閬撳叿濂栧姳閰嶇疆"]["鎸囧畾閬撳叿ID"]; + + local InvenObj = SUser.GetInven(); + local ItemObj = Item(args[4]); + // 鎷惧彇鍘熷洜 4浠h〃鍦ㄥ壇鏈嬀鍙 + local type = args[5]; + local PartyObj = SUser.GetParty(); + if (!PartyObj) return; + local Bfobj = PartyObj.GetBattleField(); + local DgnObj = Bfobj.GetDgn(); + if (!DgnObj) return; + local Dungeon_Name = DgnObj.GetName(); + if (!ItemObj) return; + local item_id = ItemObj.GetIndex(); + + // 妫鏌ユ槸鍚﹀湪鍓湰涓嬀鍙栦簡鐗╁搧 + if (type == 4) { + // 妫鏌ユ槸鍚︽槸鎸囧畾閬撳叿 + foreach(itemConfig in specifiedItems) { + if (itemConfig["鎸囧畾閬撳叿"] == item_id) { + // 妫鏌ヨ閬撳叿鐨勫鍔辨鏁版槸鍚﹀凡鐢ㄥ畬 + local item_id_str = item_id.tostring(); + if (!(item_id_str in hellpartyEventInfo.reward_counts) || hellpartyEventInfo.reward_counts[item_id_str] <= 0) { + // 濂栧姳娆℃暟宸茬敤瀹 + local MsgObj = AdMsg(); + MsgObj.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + MsgObj.PutString(" "); + } + MsgObj.PutColorString("寰堥仐鎲", [255, 130, 0]); + MsgObj.PutEquipment(item_id); + MsgObj.PutColorString("鐨勫鍔辨鏁板凡杈句笂闄", [255, 130, 0]); + MsgObj.Finalize(); + SUser.Send(MsgObj.MakePack()); + MsgObj.Delete(); + return; + } + + // 鍑忓皯濂栧姳娆℃暟 + hellpartyEventInfo.reward_counts[item_id_str]--; + local remaining_count = hellpartyEventInfo.reward_counts[item_id_str]; + + // 鍙戦佸鍔遍氱煡 + local MsgObj = AdMsg(); + MsgObj.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + MsgObj.PutString(" "); + } + MsgObj.PutColorString("鈼嗏攣鈹佲攣鈹佲攣鈹 娣辨笂鎺㈤櫓娲诲姩 鈹佲攣鈹佲攣鈹佲攣鈼", [255, 255, 0]); + MsgObj.Finalize(); + World.SendAll(MsgObj.MakePack()); + MsgObj.Delete(); + + local MsgObj2 = AdMsg(); + MsgObj2.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + MsgObj2.PutString(" "); + } + MsgObj2.PutColorString("鎭枩 ", [255, 255, 0]); + MsgObj2.PutColorString("[" + SUser.GetCharacName() + "]", [255, 20, 0]); + MsgObj2.PutColorString(" 鑾峰緱鎸囧畾鐗╁搧锛", [255, 255, 0]); + MsgObj2.Finalize(); + World.SendAll(MsgObj2.MakePack()); + MsgObj2.Delete(); + + local MsgObj3 = AdMsg(); + MsgObj3.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + MsgObj3.PutString(" "); + } + MsgObj3.PutColorString("鈽 ", [255, 20, 0]); + MsgObj3.PutEquipment(item_id); + MsgObj3.Finalize(); + World.SendAll(MsgObj3.MakePack()); + MsgObj3.Delete(); + + // 鍙戦佸鍔卞垪琛ㄥご閮 + local rewardHeader = AdMsg(); + rewardHeader.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + rewardHeader.PutString(" "); + } + rewardHeader.PutColorString("鈹 鑾峰緱濂栧姳锛", [255, 255, 0]); + rewardHeader.Finalize(); + World.SendAll(rewardHeader.MakePack()); + rewardHeader.Delete(); + + // 鏀堕泦鎵鏈夊鍔 + local allRewards = []; + foreach(reward in itemConfig["濂栧姳鍒楄〃"]) { + local rewardId = reward[0]; + local rewardCount = reward[1]; + + // 鏀堕泦闈炵偣鍒稿拰浠e竵鐨勯亾鍏峰鍔 + if (rewardId != 0 && rewardId != 1) { + allRewards.append([rewardId, rewardCount]); + } + + // 鍙戞斁鐐瑰埜鍜屼唬甯佸鍔 + if (rewardId == 0) { + SUser.RechargeCera(rewardCount); + } else if (rewardId == 1) { + SUser.RechargeCeraPoint(rewardCount); + } + + // 鏄剧ず濂栧姳淇℃伅 + local rewardMsg = AdMsg(); + rewardMsg.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + rewardMsg.PutString(" "); + } + rewardMsg.PutColorString("鈹", [255, 255, 0]); + rewardMsg.PutColorString(" 鈽 ", [0, 191, 255]); + + if (rewardId == 0) { + rewardMsg.PutColorString("[鐐瑰埜]", [0, 191, 255]); + } else if (rewardId == 1) { + rewardMsg.PutColorString("[浠e竵]", [0, 191, 255]); + } else { + rewardMsg.PutEquipment(rewardId); + } + + rewardMsg.PutColorString(" x ", [255, 255, 255]); + rewardMsg.PutColorString("<" + rewardCount + ">", [255, 20, 0]); + rewardMsg.Finalize(); + World.SendAll(rewardMsg.MakePack()); + rewardMsg.Delete(); + } + + // 涓娆℃у彂鏀炬墍鏈夐亾鍏峰鍔 + if (allRewards.len() > 0) { + Nangua_Hellparty.api_CUser_Add_Item_list(SUser, allRewards); + } + + // 鏄剧ず鍓╀綑娆℃暟 + local remainMsg = AdMsg(); + remainMsg.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + remainMsg.PutString(" "); + } + remainMsg.PutColorString("鈹 鍓╀綑娆℃暟锛", [255, 255, 0]); + remainMsg.PutColorString("<" + remaining_count + ">", [255, 20, 0]); + remainMsg.PutColorString("娆", [255, 255, 0]); + remainMsg.Finalize(); + World.SendAll(remainMsg.MakePack()); + remainMsg.Delete(); + + // 鍙戦佸簳閮ㄥ垎闅旂嚎 + local footerMsg = AdMsg(); + footerMsg.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + footerMsg.PutString(" "); + } + footerMsg.PutColorString("鈼嗏攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈼", [255, 255, 0]); + footerMsg.Finalize(); + World.SendAll(footerMsg.MakePack()); + footerMsg.Delete(); + + break; + } + } + } + } + + // 鐜╁鐧诲綍鏃舵挱鎶ユ娆℃繁娓婃椿鍔ㄨ繘搴﹀強鎸囧畾閬撳叿淇℃伅 + Cb_reach_game_world_Func.hellpartyByNangua <- function(SUser) { + local Config = GlobalConfig.Get("娣辨笂娲诲姩閰嶇疆_nangua.json"); + //娣辨笂娲诲姩鏇存柊杩涘害 + if (hellpartyEventInfo.state != HELLPARTY_STATE_END) { + //閫氱煡瀹㈡埛绔綋鍓嶆椿鍔ㄧ姸鎬 + local remain_time = event_hellparty_get_remain_time(); + local minutes_left = (remain_time / 60).tointeger(); + local seconds_left = remain_time % 60; + + // 鍙戦佹椿鍔ㄥ墿浣欐椂闂翠俊鎭 + local timeMsg = AdMsg(); + timeMsg.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + timeMsg.PutString(" "); + } + timeMsg.PutColorString("鈼嗏攣鈹佲攣鈹 娣辨笂鎺㈤櫓娲诲姩杩涜涓 鈹佲攣鈹佲攣鈼", [255, 255, 0]); + timeMsg.Finalize(); + SUser.Send(timeMsg.MakePack()); + timeMsg.Delete(); + + local timeMsg2 = AdMsg(); + timeMsg2.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + timeMsg2.PutString(" "); + } + timeMsg2.PutColorString(" 鍓╀綑鏃堕棿: ", [255, 255, 255]); + if (minutes_left > 0) { + timeMsg2.PutColorString("<" + minutes_left + ">", [255, 20, 0]); + timeMsg2.PutColorString("鍒", [255, 255, 255]); + } + if (seconds_left > 0 || minutes_left == 0) { + timeMsg2.PutColorString("<" + seconds_left + ">", [255, 20, 0]); + timeMsg2.PutColorString("绉", [255, 255, 255]); + } + timeMsg2.Finalize(); + SUser.Send(timeMsg2.MakePack()); + timeMsg2.Delete(); + + // 濡傛灉鍚敤浜嗙姝涪寮冨姛鑳斤紝鍙戦佹彁绀 + if (Config["娣辨笂娲诲姩閰嶇疆"]["娲诲姩鏈熼棿寮鍚墿鍝佺姝涪寮冨姛鑳(true寮鍚/false鍏抽棴)"]) { + local dropMsg1 = AdMsg(); + dropMsg1.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + dropMsg1.PutString(" "); + } + dropMsg1.PutColorString(" 鐗瑰埆鎻愮ず:娲诲姩鏈熼棿", [255, 255, 0]); + dropMsg1.PutColorString("鏃犳硶涓㈠純鐗╁搧", [255, 20, 0]); + dropMsg1.Finalize(); + SUser.Send(dropMsg1.MakePack()); + dropMsg1.Delete(); + } + + // 鍚戠帺瀹跺崟鐙彂閫佹寚瀹氶亾鍏蜂俊鎭 + if (!hellpartyEventInfo.current_time_slot) return; + local specifiedItems = hellpartyEventInfo.current_time_slot["鎸囧畾閬撳叿濂栧姳閰嶇疆"]["鎸囧畾閬撳叿ID"]; + + // 鍙戦佹椿鍔ㄩ亾鍏蜂俊鎭ご閮 + local headerMsg = AdMsg(); + headerMsg.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + headerMsg.PutString(" "); + } + headerMsg.PutColorString("鈼嗏攣鈹佲攣鈹佲攣 鏈娲诲姩鎸囧畾閬撳叿 鈹佲攣鈹佲攣鈹佲梿", [255, 255, 0]); + headerMsg.Finalize(); + SUser.Send(headerMsg.MakePack()); + headerMsg.Delete(); + + // 鍙戦佹瘡涓寚瀹氶亾鍏风殑淇℃伅 + foreach(itemConfig in specifiedItems) { + local itemId = itemConfig["鎸囧畾閬撳叿"]; + local itemIdStr = itemId.tostring(); + local remainingCount = itemIdStr in hellpartyEventInfo.reward_counts ? hellpartyEventInfo.reward_counts[itemIdStr] : 0; + + // 鏄剧ず閬撳叿鍚嶇О + local itemMsgLine1 = AdMsg(); + itemMsgLine1.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + itemMsgLine1.PutString(" "); + } + itemMsgLine1.PutColorString("鈽 ", [255, 20, 0]); + itemMsgLine1.PutEquipment(itemId); + itemMsgLine1.Finalize(); + SUser.Send(itemMsgLine1.MakePack()); + itemMsgLine1.Delete(); + + // 鏄剧ず鍙幏濂栧姳鎻愮ず + local rewardHeader = AdMsg(); + rewardHeader.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + rewardHeader.PutColorString("鈹 鍙幏濂栧姳锛", [255, 255, 0]); + rewardHeader.Finalize(); + SUser.Send(rewardHeader.MakePack()); + rewardHeader.Delete(); + + // 鏄剧ず姣忎釜濂栧姳 + foreach(reward in itemConfig["濂栧姳鍒楄〃"]) { + local rewardId = reward[0]; + local rewardCount = reward[1]; + + local itemMsgLine2 = AdMsg(); + itemMsgLine2.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + itemMsgLine2.PutString(" "); + } + itemMsgLine2.PutColorString("鈹", [255, 255, 0]); + itemMsgLine2.PutColorString(" 鈽 ", [0, 191, 255]); + + if (rewardId == 0) { + itemMsgLine2.PutColorString("[鐐瑰埜]", [0, 191, 255]); + } else if (rewardId == 1) { + itemMsgLine2.PutColorString("[浠e竵]", [0, 191, 255]); + } else { + itemMsgLine2.PutEquipment(rewardId); + } + + itemMsgLine2.PutColorString(" x ", [255, 255, 255]); + itemMsgLine2.PutColorString("<" + rewardCount + ">", [255, 20, 0]); + itemMsgLine2.Finalize(); + SUser.Send(itemMsgLine2.MakePack()); + itemMsgLine2.Delete(); + } + + // 鏄剧ず鍓╀綑娆℃暟 + local remainMsg = AdMsg(); + remainMsg.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + remainMsg.PutString(" "); + } + remainMsg.PutColorString("鈹 鍓╀綑娆℃暟锛", [255, 255, 0]); + remainMsg.PutColorString("<" + remainingCount + ">", [255, 20, 0]); + remainMsg.PutColorString("娆", [255, 255, 0]); + remainMsg.Finalize(); + SUser.Send(remainMsg.MakePack()); + remainMsg.Delete(); + } + + // 鍙戦佸簳閮ㄥ垎闅旂嚎 + local footerMsg = AdMsg(); + footerMsg.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + footerMsg.PutString(" "); + } + footerMsg.PutColorString("鈼嗏攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈼", [255, 255, 0]); + footerMsg.Finalize(); + SUser.Send(footerMsg.MakePack()); + footerMsg.Delete(); + } + } +} + +// 寮濮嬫繁娓婃椿鍔 +function On_Start_Hellparty_Event(timeSlot) { + // 鍏堢‘淇濈Щ闄や换浣曞凡瀛樺湪鐨勬鏌ヤ换鍔★紝閬垮厤閲嶅 + Timer.RemoveCronTask("HellpartyCheckTask"); + + // 鍒濆鍖栨椿鍔ㄧ姸鎬 + Reset_Hellparty_Info(); + hellpartyEventInfo.current_time_slot = timeSlot; + + local Config = GlobalConfig.Get("娣辨笂娲诲姩閰嶇疆_nangua.json"); + // 鍚敤绂佹涓㈠純鐗╁搧锛堟牴鎹厤缃喅瀹氾級 + if (Config["娣辨笂娲诲姩閰嶇疆"]["娲诲姩鏈熼棿寮鍚墿鍝佺姝涪寮冨姛鑳(true寮鍚/false鍏抽棴)"]) { + if (!hellpartyEventInfo.drop_prevention_enabled) { + Init_Hellparty_Drop_Prevention(); + hellpartyEventInfo.drop_prevention_enabled = true; + } + } + + // 娉ㄥ唽瀹氭椂妫鏌ヤ换鍔(姣5绉掓鏌ヤ竴娆) + Timer.SetCronTask(Event_Hellparty_Timer, { + Cron = "*/5 * * * * *", // 姣5绉掓墽琛屼竴娆 + Name = "HellpartyCheckTask" + }); + + // 鍙戦佹椿鍔ㄥ紑濮嬪叕鍛 + local start_time = timeSlot["寮鍚椂闂"]; + local event_start = AdMsg(); + event_start.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + event_start.PutString(" "); + } + event_start.PutColorString("鈼嗏攣鈹佲攣鈹佲攣 娣辨笂鎺㈤櫓娲诲姩寮鍚 鈹佲攣鈹佲攣鈹佲梿", [255, 255, 0]); + event_start.Finalize(); + World.SendAll(event_start.MakePack()); + event_start.Delete(); + + local event_start2 = AdMsg(); + event_start2.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + event_start2.PutString(" "); + } + event_start2.PutColorString(" 娲诲姩鎸佺画鏃堕棿锛", [255, 255, 0]); + event_start2.PutColorString("<" + timeSlot["鎸佺画鏃堕棿(鍒嗛挓)"] + ">", [255, 20, 0]); + event_start2.PutColorString("鍒嗛挓", [255, 255, 0]); + event_start2.PutColorString(" 绁濆悇浣嶅媷澹ソ杩愶紒", [255, 255, 0]); + event_start2.Finalize(); + World.SendAll(event_start2.MakePack()); + event_start2.Delete(); + + // 濡傛灉鍚敤浜嗙姝涪寮冨姛鑳斤紝鍙戦佹彁绀 + if (Config["娣辨笂娲诲姩閰嶇疆"]["娲诲姩鏈熼棿寮鍚墿鍝佺姝涪寮冨姛鑳(true寮鍚/false鍏抽棴)"]) { + local dropMsg2 = AdMsg(); + dropMsg2.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + dropMsg2.PutString(" "); + } + dropMsg2.PutColorString(" 鐗瑰埆鎻愮ず:娲诲姩鏈熼棿", [255, 255, 0]); + dropMsg2.PutColorString("鏃犳硶涓㈠純鐗╁搧", [255, 20, 0]); + dropMsg2.Finalize(); + World.SendAll(dropMsg2.MakePack()); + dropMsg2.Delete(); + } + + // 鎾姤鏈鎸囧畾閬撳叿淇℃伅 + SendSpecifiedItemsInfo(); +} + +// 鎾姤鏈娣辨笂娲诲姩鎸囧畾閬撳叿淇℃伅 +function SendSpecifiedItemsInfo() { + if (!hellpartyEventInfo.current_time_slot) return; + + local specifiedItems = hellpartyEventInfo.current_time_slot["鎸囧畾閬撳叿濂栧姳閰嶇疆"]["鎸囧畾閬撳叿ID"]; + local Config = GlobalConfig.Get("娣辨笂娲诲姩閰嶇疆_nangua.json"); + + // 鍙戦佹椿鍔ㄩ亾鍏蜂俊鎭ご閮 + local headerMsg = AdMsg(); + headerMsg.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + headerMsg.PutString(" "); + } + headerMsg.PutColorString("鈼嗏攣鈹佲攣鈹佲攣 鏈娲诲姩鎸囧畾閬撳叿 鈹佲攣鈹佲攣鈹佲梿", [255, 255, 0]); + headerMsg.Finalize(); + World.SendAll(headerMsg.MakePack()); + headerMsg.Delete(); + + // 鍙戦佹瘡涓寚瀹氶亾鍏风殑淇℃伅 + foreach(itemConfig in specifiedItems) { + local itemId = itemConfig["鎸囧畾閬撳叿"]; + local rewardTimes = itemConfig["濂栧姳娆℃暟"]; + + // 鍒濆鍖栬閬撳叿鐨勫鍔辨鏁 + hellpartyEventInfo.reward_counts[itemId.tostring()] <- rewardTimes; + + // 鏄剧ず閬撳叿鍚嶇О + local itemMsgLine1 = AdMsg(); + itemMsgLine1.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + itemMsgLine1.PutString(" "); + } + itemMsgLine1.PutColorString("鈽 ", [255, 20, 0]); + itemMsgLine1.PutEquipment(itemId); + itemMsgLine1.Finalize(); + World.SendAll(itemMsgLine1.MakePack()); + itemMsgLine1.Delete(); + + // 鏄剧ず鍙幏濂栧姳鎻愮ず + local rewardHeader = AdMsg(); + rewardHeader.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + rewardHeader.PutString(" "); + } + rewardHeader.PutColorString("鈹 鍙幏濂栧姳锛", [255, 255, 0]); + rewardHeader.Finalize(); + World.SendAll(rewardHeader.MakePack()); + rewardHeader.Delete(); + + // 鏄剧ず姣忎釜濂栧姳 + foreach(reward in itemConfig["濂栧姳鍒楄〃"]) { + local rewardId = reward[0]; + local rewardCount = reward[1]; + + local itemMsgLine2 = AdMsg(); + itemMsgLine2.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + itemMsgLine2.PutString(" "); + } + itemMsgLine2.PutColorString("鈹", [255, 255, 0]); + itemMsgLine2.PutColorString(" 鈽 ", [0, 191, 255]); + + if (rewardId == 0) { + // 鐐瑰埜濂栧姳 + itemMsgLine2.PutColorString("[鐐瑰埜]", [0, 191, 255]); + } else if (rewardId == 1) { + // 浠e竵濂栧姳 + itemMsgLine2.PutColorString("[浠e竵]", [0, 191, 255]); + } else { + // 鏅氶亾鍏峰鍔 + itemMsgLine2.PutEquipment(rewardId); + } + + itemMsgLine2.PutColorString(" x ", [255, 255, 255]); + itemMsgLine2.PutColorString("<" + rewardCount + ">", [255, 20, 0]); + itemMsgLine2.Finalize(); + World.SendAll(itemMsgLine2.MakePack()); + itemMsgLine2.Delete(); + } + + // 鏄剧ず鍓╀綑娆℃暟 + local remainMsg = AdMsg(); + remainMsg.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + remainMsg.PutString(" "); + } + remainMsg.PutColorString("鈹 鍓╀綑娆℃暟锛", [255, 255, 0]); + remainMsg.PutColorString("<" + rewardTimes + ">", [255, 20, 0]); + remainMsg.PutColorString("娆", [255, 255, 0]); + remainMsg.Finalize(); + World.SendAll(remainMsg.MakePack()); + remainMsg.Delete(); + } + + // 鍙戦佸簳閮ㄥ垎闅旂嚎 + local footerMsg = AdMsg(); + footerMsg.PutType(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"]); + if(Config["娣辨笂娲诲姩閰嶇疆"]["淇℃伅鍙戦佷綅缃"] != 14) { + footerMsg.PutString(" "); + } + footerMsg.PutColorString("鈼嗏攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈼", [255, 255, 0]); + footerMsg.Finalize(); + World.SendAll(footerMsg.MakePack()); + footerMsg.Delete(); +} + +// 閲嶇疆娣辨笂娲诲姩淇℃伅 +function Reset_Hellparty_Info() { + hellpartyEventInfo.state = HELLPARTY_STATE_RUNNING; + hellpartyEventInfo.start_time = time(); + hellpartyEventInfo.reward_counts = {}; // 娓呯┖濂栧姳娆℃暟璁板綍 + hellpartyEventInfo.last_reminder_minute = -1; // 閲嶇疆涓婃鎻愰啋鐨勫垎閽熸暟 + hellpartyEventInfo.last_reminder_second = -1; // 閲嶇疆涓婃鎻愰啋鐨勭鏁 + print(">>>>>>>>>>>>>>娣辨笂娲诲姩鏁版嵁宸插垵濮嬪寲<<<<<<<<<<<<<<"); +} + +// 娣辨笂娲诲姩瀹氭椂鍣ㄦ鏌 +function Event_Hellparty_Timer() { + if (hellpartyEventInfo.state == HELLPARTY_STATE_END) + return; + + // 妫鏌ユ椿鍔ㄦ槸鍚︾粨鏉 + if (is_hellparty_event_timeout()) { + // 娲诲姩缁撴潫 + on_end_event_hellparty(); + return; + } + + // 鍙戦佹椿鍔ㄥ墿浣欐椂闂存彁閱 + local remain_time = event_hellparty_get_remain_time(); + local minutes_left = (remain_time / 60).tointeger(); + local seconds_left = remain_time % 60; + + // 浣跨敤绉掓暟鑼冨洿鏉ュ垽鏂彁閱掓椂鏈猴紝纭繚鏇寸簿纭 + if (remain_time <= 65 && remain_time > 60 && hellpartyEventInfo.last_reminder_minute != 1) { + // 鍗冲皢杩涘叆鏈鍚庝竴鍒嗛挓 + World.SendNotiPacketMessage("銆愭繁娓婃帰闄╂椿鍔ㄣ戣繕鍓╂渶鍚<1>鍒嗛挓缁撴潫锛", 14); + hellpartyEventInfo.last_reminder_minute = 1; + } else if (remain_time <= 305 && remain_time > 300 && hellpartyEventInfo.last_reminder_minute != 5) { + // 鍗冲皢杩涘叆鏈鍚庝簲鍒嗛挓 + World.SendNotiPacketMessage("銆愭繁娓婃帰闄╂椿鍔ㄣ戣繕鍓<5>鍒嗛挓缁撴潫锛", 14); + hellpartyEventInfo.last_reminder_minute = 5; + } else if (remain_time <= 245 && remain_time > 240 && hellpartyEventInfo.last_reminder_minute != 4) { + // 鍗冲皢杩涘叆鏈鍚庡洓鍒嗛挓 + World.SendNotiPacketMessage("銆愭繁娓婃帰闄╂椿鍔ㄣ戣繕鍓<4>鍒嗛挓缁撴潫锛", 14); + hellpartyEventInfo.last_reminder_minute = 4; + } else if (remain_time <= 185 && remain_time > 180 && hellpartyEventInfo.last_reminder_minute != 3) { + // 鍗冲皢杩涘叆鏈鍚庝笁鍒嗛挓 + World.SendNotiPacketMessage("銆愭繁娓婃帰闄╂椿鍔ㄣ戣繕鍓<3>鍒嗛挓缁撴潫锛", 14); + hellpartyEventInfo.last_reminder_minute = 3; + } else if (remain_time <= 125 && remain_time > 120 && hellpartyEventInfo.last_reminder_minute != 2) { + // 鍗冲皢杩涘叆鏈鍚庝袱鍒嗛挓 + World.SendNotiPacketMessage("銆愭繁娓婃帰闄╂椿鍔ㄣ戣繕鍓<2>鍒嗛挓缁撴潫锛", 14); + hellpartyEventInfo.last_reminder_minute = 2; + } + + // 鏈鍚30绉掑掕鏃讹紝姣10绉掓彁閱掍竴娆 + if (minutes_left == 0 && seconds_left <= 30 && seconds_left > 0) { + if (seconds_left % 10 == 0 && hellpartyEventInfo.last_reminder_second != seconds_left) { + World.SendNotiPacketMessage("銆愭繁娓婃帰闄╂椿鍔ㄣ戣繕鍓<" + seconds_left + ">绉掔粨鏉燂紒", 14); + hellpartyEventInfo.last_reminder_second = seconds_left; + } + } +} + +// 妫鏌ユ椿鍔ㄦ槸鍚﹀凡瓒呮椂 +function is_hellparty_event_timeout() { + if (!hellpartyEventInfo.current_time_slot) return true; + return event_hellparty_get_remain_time() <= 0; +} + +// 璁$畻娲诲姩鍓╀綑鏃堕棿(绉) +function event_hellparty_get_remain_time() { + if (!hellpartyEventInfo.current_time_slot) return 0; + local cur_time = time(); + local duration_seconds = hellpartyEventInfo.current_time_slot["鎸佺画鏃堕棿(鍒嗛挓)"] * 60; + local event_end_time = hellpartyEventInfo.start_time + duration_seconds; + local remain_time = event_end_time - cur_time; + return remain_time; +} + +// 缁撴潫娣辨笂娲诲姩 +function on_end_event_hellparty() { + if (hellpartyEventInfo.state == HELLPARTY_STATE_END) + return; + + // 璁剧疆娲诲姩鐘舵佷负缁撴潫 + hellpartyEventInfo.state = HELLPARTY_STATE_END; + + // 鍏抽棴绂佹涓㈠純鐗╁搧 + if (hellpartyEventInfo.drop_prevention_enabled) { + // 閲嶇疆涓㈠純鐗╁搧鐨凥ook鏍囧織 + if (getroottable().rawin("_HellpartyDropPreventFlag_")) { + getroottable()._HellpartyDropPreventFlag_ = false; + } + hellpartyEventInfo.drop_prevention_enabled = false; + } + + // 绉婚櫎瀹氭椂妫鏌ヤ换鍔 + Timer.RemoveCronTask("HellpartyCheckTask"); + + // 鍙戦佹椿鍔ㄧ粨鏉熷叕鍛 + World.SendNotiPacketMessage("銆愭繁娓婃帰闄╂椿鍔ㄣ戝凡缁撴潫锛 鎰熻阿鍚勪綅鍕囧+鐨勫弬涓庯紒", 14); + + // 鑾峰彇涓嬩竴涓椿鍔ㄦ椂闂 + local Config = GlobalConfig.Get("娣辨笂娲诲姩閰嶇疆_nangua.json"); + + local current_time = date(); + local current_hour = current_time.hour; + local current_minute = current_time.min; + + // 鑾峰彇褰撳墠鏄懆鍑 + local current_date = date(); + local current_weekday = current_date.wday; + if (current_weekday == 0) current_weekday = 7; // 杞崲涓1-7鏍煎紡 + + // 鑾峰彇寮鏀炬棩鏈熼厤缃 + local open_days = Config["娣辨笂娲诲姩閰嶇疆"]["姣忓懆鍑犲紑鏀炬椿鍔"]; + local time_slots = Config["娣辨笂娲诲姩閰嶇疆"]["娲诲姩鏃堕棿娈"]; + + // 灏嗘椂闂存鎸夋椂闂存帓搴 + local sorted_time_slots = []; + foreach(slot in time_slots) { + sorted_time_slots.append(slot); + } + // 鎸夋椂闂存帓搴忥紙鍐掓场鎺掑簭锛 + for(local i = 0; i < sorted_time_slots.len() - 1; i++) { + for(local j = 0; j < sorted_time_slots.len() - 1 - i; j++) { + local time1 = sorted_time_slots[j]["寮鍚椂闂"]; + local time2 = sorted_time_slots[j + 1]["寮鍚椂闂"]; + if(time1[0] > time2[0] || (time1[0] == time2[0] && time1[1] > time2[1])) { + local temp = sorted_time_slots[j]; + sorted_time_slots[j] = sorted_time_slots[j + 1]; + sorted_time_slots[j + 1] = temp; + } + } + } + + // 鏌ユ壘涓嬩竴涓椿鍔ㄦ椂闂 + local next_time_slot = null; + local next_day = null; + + // 鍏堝皾璇曟壘浠婂ぉ鍓╀綑鐨勬椂闂存 + foreach(timeSlot in sorted_time_slots) { + local start_time = timeSlot["寮鍚椂闂"]; + local start_hour = start_time[0]; + local start_minute = start_time[1]; + + // 濡傛灉鎵惧埌鏈潵鐨勬椂闂寸偣锛屽氨浣跨敤瀹 + if ((start_hour > current_hour) || (start_hour == current_hour && start_minute > current_minute)) { + next_time_slot = timeSlot; + next_day = current_weekday; + break; + } + } + + // 濡傛灉娌℃壘鍒颁粖澶╁墿浣欑殑鏃堕棿娈碉紝鏌ユ壘涓嬩竴涓紑鏀炬棩 + if (!next_time_slot) { + // 鏌ユ壘涓嬩竴涓紑鏀炬棩 + for (local i = 1; i <= 7; i++) { + local check_day = (current_weekday + i) % 7; + if (check_day == 0) check_day = 7; + + foreach(open_day in open_days) { + if (open_day == check_day) { + next_day = check_day; + next_time_slot = sorted_time_slots[0]; // 浣跨敤鎺掑簭鍚庣殑绗竴涓椂闂存 + break; + } + } + if (next_time_slot) break; + } + } + + // 濡傛灉鎵惧埌涓嬩竴涓椿鍔ㄦ椂闂达紝鍙戦侀氱煡 + if (next_time_slot) { + local start_time = next_time_slot["寮鍚椂闂"]; + local day_names = ["鍛ㄤ竴", "鍛ㄤ簩", "鍛ㄤ笁", "鍛ㄥ洓", "鍛ㄤ簲", "鍛ㄥ叚", "鍛ㄦ棩"]; + local day_text = ""; + + if (next_day == current_weekday) { + day_text = "浠婂ぉ"; + } else if (next_day > current_weekday) { + day_text = "鏈懆" + day_names[next_day - 1]; + } else { + day_text = "涓" + day_names[next_day - 1]; + } + + World.SendNotiPacketMessage(format("銆愭繁娓婃帰闄╂椿鍔ㄣ戜笅娆℃椿鍔ㄦ椂闂翠负%s [%d:%02d]锛屾暚璇锋湡寰咃紒", day_text, start_time[0], start_time[1]), 14); + } + + print(">>>>>>>>>>>>>>娣辨笂娲诲姩宸茬粨鏉<<<<<<<<<<<<<<"); +} + +// 骞挎挱娲诲姩鏃堕棿鏇存敼閫氱煡 +function broadcast_hellparty_time_changes() { + local Config = GlobalConfig.Get("娣辨笂娲诲姩閰嶇疆_nangua.json"); + local time_slots = Config["娣辨笂娲诲姩閰嶇疆"]["娲诲姩鏃堕棿娈"]; + + // 灏嗘椂闂存鎸夋椂闂存帓搴 + local sorted_time_slots = []; + foreach(slot in time_slots) { + sorted_time_slots.append(slot); + } + // 鎸夋椂闂存帓搴 + for(local i = 0; i < sorted_time_slots.len() - 1; i++) { + for(local j = 0; j < sorted_time_slots.len() - 1 - i; j++) { + local time1 = sorted_time_slots[j]["寮鍚椂闂"]; + local time2 = sorted_time_slots[j + 1]["寮鍚椂闂"]; + if(time1[0] > time2[0] || (time1[0] == time2[0] && time1[1] > time2[1])) { + local temp = sorted_time_slots[j]; + sorted_time_slots[j] = sorted_time_slots[j + 1]; + sorted_time_slots[j + 1] = temp; + } + } + } + + // 鑾峰彇寮鏀炬棩鏈 + local open_days = Config["娣辨笂娲诲姩閰嶇疆"]["姣忓懆鍑犲紑鏀炬椿鍔"]; + local day_names = ["鍛ㄤ竴", "鍛ㄤ簩", "鍛ㄤ笁", "鍛ㄥ洓", "鍛ㄤ簲", "鍛ㄥ叚", "鍛ㄦ棩"]; + local open_days_text = ""; + + foreach(idx, day in open_days) { + open_days_text += day_names[day - 1]; + if (idx < open_days.len() - 1) { + open_days_text += "銆"; + } + } + + // 鍙戦佸紑鏀炬棩鏈熼氱煡 + World.SendNotiPacketMessage("銆愭繁娓婃帰闄╂椿鍔ㄣ戝紑鏀炬棩鏈熶负: " + open_days_text, 14); + + // 鍙戦佹椂闂存閫氱煡 + local time_text = ""; + foreach(idx, slot in sorted_time_slots) { + local start_time = slot["寮鍚椂闂"]; + time_text += format("%02d:%02d", start_time[0], start_time[1]); + if (idx < sorted_time_slots.len() - 1) { + time_text += "銆"; + } + } + + World.SendNotiPacketMessage("銆愭繁娓婃帰闄╂椿鍔ㄣ戝紑鏀炬椂闂翠负: " + time_text + "锛屾暚璇锋湡寰咃紒", 14); +} + +class Nangua_Hellparty { + function checkInventorySlot(SUser, itemid) { + local InvenObj = SUser.GetInven(); + local type = Sq_CallFunc(S_Ptr("0x085018D2"), "int", ["pointer", "int"], InvenObj.C_Object, itemid); + local cnt = Sq_CallFunc(S_Ptr("0x08504F64"), "int", ["pointer", "int", "int"], InvenObj.C_Object, type, 1); + + return cnt; + } + function api_CUser_Add_Item_list(SUser, item_list) { + for (local i = 0; i < item_list.len(); i++) { + local item_id = item_list[i][0]; // 閬撳叿浠g爜 + local quantity = item_list[i][1]; // 閬撳叿鏁伴噺 + local cnt = Nangua_Hellparty.checkInventorySlot(SUser, item_id); + if (cnt == 1) { + SUser.GiveItem(item_id, quantity); //浣跨敤绐楀彛鍙戦佸鍔 + } else { + local RewardItems = []; + RewardItems.append([item_id, quantity]); + local title = "GM" + local Text = "鐢变簬鑳屽寘绌洪棿涓嶈冻锛屽凡閫氳繃閭欢鍙戦侊紝璇锋煡鏀讹紒" + //瑙掕壊绫 鍙戦侀偖浠跺嚱鏁 (鏍囬, 姝f枃, 閲戝竵, 閬撳叿鍒楄〃[[3037,100],[3038,100]]) + SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems) + } + } + Nangua_Hellparty.SendItemWindowNotification(SUser, item_list); + } + function SendItemWindowNotification(SUser, item_list) { + local Pack = Packet(); + Pack.Put_Header(1, 163); //鍗忚 + Pack.Put_Byte(1); //榛樿1 + Pack.Put_Short(0); //妲戒綅id 濉叆0鍗冲彲 + Pack.Put_Int(0); //鏈煡 0浠ヤ笂鍗冲彲 + Pack.Put_Short(item_list.len()); //閬撳叿缁勬暟 + //鍐欏叆閬撳叿浠g爜鍜岄亾鍏锋暟閲 + for (local i = 0; i < item_list.len(); i++) { + Pack.Put_Int(item_list[i][0]); //閬撳叿浠g爜 + Pack.Put_Int(item_list[i][1]); //閬撳叿鏁伴噺 瑁呭/鏃惰鏃 浠绘剰鍧囧彲 + } + Pack.Finalize(true); //纭畾鍙戝寘鍐呭 + SUser.Send(Pack); //鍙戝寘 + Pack.Delete(); //娓呯┖buff鍖 + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/娣辨笂娲诲姩/娣辨笂娲诲姩閰嶇疆_nangua.json b/绀轰緥椤圭洰/娣辨笂娲诲姩/娣辨笂娲诲姩閰嶇疆_nangua.json new file mode 100644 index 0000000..b7d0c94 --- /dev/null +++ b/绀轰緥椤圭洰/娣辨笂娲诲姩/娣辨笂娲诲姩閰嶇疆_nangua.json @@ -0,0 +1,59 @@ +{ + "娣辨笂娲诲姩閰嶇疆":{ + "娲诲姩鎬诲紑鍏(true寮鍚/false鍏抽棴)":true, + "娲诲姩鏈熼棿寮鍚墿鍝佺姝涪寮冨姛鑳(true寮鍚/false鍏抽棴)":true, + "姣忓懆鍑犲紑鏀炬椿鍔":[1, 2], + "淇℃伅鍙戦佷綅缃":14, + "1.璇存槑_姣忓懆寮鏀炬棩鏈": "1浠h〃鍛ㄤ竴,2浠h〃鍛ㄤ簩,3浠h〃鍛ㄤ笁,4浠h〃鍛ㄥ洓,5浠h〃鍛ㄤ簲,6浠h〃鍛ㄥ叚,7浠h〃鍛ㄦ棩", + "2.璇存槑_娲诲姩鏃堕棿娈": "12,0浠h〃12鐐0鍒,19,30浠h〃19鐐30鍒", + "3.璇存槑_濂栧姳鍒楄〃": "0浠h〃鐐瑰埜,1浠h〃浠e竵,鍚﹀垯涓洪亾鍏稩D", + "4.璇存槑_渚嬪瓙":"濡傛瘡鍛ㄥ紑鏀炬棩鏈熶负1鍜2,娲诲姩鏃堕棿娈典负12,0鍜19,30,浠h〃姣忓懆涓鍜屽懆浜12鐐0鍒嗕互鍙19鐐30鍒嗗紑鍚椿鍔", + "娲诲姩鏃堕棿娈":[ + { + "寮鍚椂闂":[12, 0], + "鎸佺画鏃堕棿(鍒嗛挓)":30, + "鎸囧畾閬撳叿濂栧姳閰嶇疆": { + "鎸囧畾閬撳叿ID": [ + { + "鎸囧畾閬撳叿": 27098, + "濂栧姳娆℃暟": 3, + "濂栧姳鍒楄〃": [ + [3037, 1], + [3171, 2] + ] + }, + { + "鎸囧畾閬撳叿": 27099, + "濂栧姳娆℃暟": 5, + "濂栧姳鍒楄〃": [ + [0, 1] + ] + } + ] + } + }, + { + "寮鍚椂闂":[19, 30], + "鎸佺画鏃堕棿(鍒嗛挓)":30, + "鎸囧畾閬撳叿濂栧姳閰嶇疆": { + "鎸囧畾閬撳叿ID": [ + { + "鎸囧畾閬撳叿": 27099, + "濂栧姳娆℃暟": 2, + "濂栧姳鍒楄〃": [ + [3038, 1] + ] + }, + { + "鎸囧畾閬撳叿": 27098, + "濂栧姳娆℃暟": 2, + "濂栧姳鍒楄〃": [ + [1, 1] + ] + } + ] + } + } + ] + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/娣辨笂鐖嗙巼瀹炴椂鎺у埗/Proj.ifo b/绀轰緥椤圭洰/娣辨笂鐖嗙巼瀹炴椂鎺у埗/Proj.ifo new file mode 100644 index 0000000..fdaa19c --- /dev/null +++ b/绀轰緥椤圭洰/娣辨笂鐖嗙巼瀹炴椂鎺у埗/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "娣辨笂鐖嗙巼瀹炴椂鎺у埗", + "ProjectDescribe": "鍚孭VF閲宔tc/itemdropinfo_monster_hell.etc鐨勭垎鐜囦竴鑷寸敤娉曪紝寤鸿浣跨敤宸ュ叿璋冩暣鍚庡搴斿~鍏ユ暟鍊", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.1, + "ProjectConfig": "娣辨笂鐖嗙巼瀹炴椂鎺у埗_Nangua.json", + "ProjectFiles": [ + "娣辨笂鐖嗙巼瀹炴椂鎺у埗.nut" + ], + "ProjectRunFunc": "_Dps_HellPartyDrop_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/娣辨笂鐖嗙巼瀹炴椂鎺у埗/娣辨笂鐖嗙巼瀹炴椂鎺у埗.nut b/绀轰緥椤圭洰/娣辨笂鐖嗙巼瀹炴椂鎺у埗/娣辨笂鐖嗙巼瀹炴椂鎺у埗.nut new file mode 100644 index 0000000..9612507 --- /dev/null +++ b/绀轰緥椤圭洰/娣辨笂鐖嗙巼瀹炴椂鎺у埗/娣辨笂鐖嗙巼瀹炴椂鎺у埗.nut @@ -0,0 +1,25 @@ +function _Dps_HellPartyDrop_Main_() { + Cb_WongWork_CMonsterDrop_Hell_Enter_Func.CMonsterDrop_Hell <- function(args) { + local config = GlobalConfig.Get("娣辨笂鐖嗙巼瀹炴椂鎺у埗_Nangua.json"); + local CMonsterDrop_Hell_ptr = args[0]; + local rand = NativePointer(CMonsterDrop_Hell_ptr).add(72); + local fir = config["闈炲父鍥伴毦(澶х墰)"]; + local sec = config["鍥伴毦(灏忕墰)"]; + + local Buf = blob(0); + for (local i = 0; i < 5; i++) { + Buf.writen(fir[i], 'i'); + } + for (local i = 0; i < 5; i++) { + Buf.writen(sec[i], 'i'); + } + + local arr = []; + local len = Buf.len(); + for (local i = 0; i < len; i++) { + Buf.seek(i, 'b'); + arr.append(Buf.readn('b')); + } + rand.writeByteArray(arr); + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/娣辨笂鐖嗙巼瀹炴椂鎺у埗/娣辨笂鐖嗙巼瀹炴椂鎺у埗_Nangua.json b/绀轰緥椤圭洰/娣辨笂鐖嗙巼瀹炴椂鎺у埗/娣辨笂鐖嗙巼瀹炴椂鎺у埗_Nangua.json new file mode 100644 index 0000000..04de499 --- /dev/null +++ b/绀轰緥椤圭洰/娣辨笂鐖嗙巼瀹炴椂鎺у埗/娣辨笂鐖嗙巼瀹炴椂鎺у埗_Nangua.json @@ -0,0 +1,6 @@ +{ + "闈炲父鍥伴毦(澶х墰)":[550000, 950000, 983000, 985000, 1000000, 1000001], + "鍥伴毦(灏忕墰)":[600001, 960001, 989001, 990001, 1000001, 1000002], + "鎻愮ず": "鍙傛暟鏈鍚庣殑涓浣嶆槸鍖哄垎澶х墰鍜屽皬鐗,鏄浐瀹氬间笉瑕佷慨鏀", + "鎻愮ず2": "鏈濂戒娇鐢ㄥ伐鍏疯皟鏁村悗鍐嶆妱PVF閲岀殑鏁板糴tc/itemdropinfo_monster_hell.etc" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/娓呯悊鐐瑰埜浠樿垂閿欒/Proj.ifo b/绀轰緥椤圭洰/娓呯悊鐐瑰埜浠樿垂閿欒/Proj.ifo new file mode 100644 index 0000000..823ef66 --- /dev/null +++ b/绀轰緥椤圭洰/娓呯悊鐐瑰埜浠樿垂閿欒/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "娓呯悊鐐瑰埜浠樿垂閿欒", + "ProjectDescribe": "瀹氭椂娓呯悊浠樿垂閿欒銆", + "ProjectAuthor": "zz", + "ProjectVersion": 1.2, + "ProjectConfig": "娓呯悊浠樿垂閿欒.json", + "ProjectFiles": [ + "娓呯悊鐐瑰埜浠樿垂閿欒.nut" + ], + "ProjectRunFunc": "_Dps_CleanUpBillingErrors_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/娓呯悊鐐瑰埜浠樿垂閿欒/娓呯悊浠樿垂閿欒.json b/绀轰緥椤圭洰/娓呯悊鐐瑰埜浠樿垂閿欒/娓呯悊浠樿垂閿欒.json new file mode 100644 index 0000000..cfd377d --- /dev/null +++ b/绀轰緥椤圭洰/娓呯悊鐐瑰埜浠樿垂閿欒/娓呯悊浠樿垂閿欒.json @@ -0,0 +1,11 @@ +{ + ">>>>>>>>姣忓ぉ00锛00瀹氭椂娓呯悊,杩欒鏄娉<<<<<<<<":6666666666, + "娓呯悊浠樿垂閿欒閰嶇疆":{ + "寮鍚皬鏃(24灏忔椂鍒)":0, + "寮鍚垎閽":0 + }, + "鏁版嵁搴揑P 涓嶆槸澶栫疆鏁版嵁搴撲笉瑕佹洿鏀": "127.0.0.1", + "鏁版嵁搴撶鍙 涓嶆噦涓嶈鏇存敼": 3306, + "鏁版嵁搴撶敤鎴峰悕 鏈湴鐢ㄦ埛鍚嶄笉鎳備笉瑕佹洿鏀": "game", + "鏁版嵁搴撳瘑鐮 鏈湴瀵嗙爜涓嶆噦涓嶈鏇存敼": "uu5!^%jg" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/娓呯悊鐐瑰埜浠樿垂閿欒/娓呯悊鐐瑰埜浠樿垂閿欒.nut b/绀轰緥椤圭洰/娓呯悊鐐瑰埜浠樿垂閿欒/娓呯悊鐐瑰埜浠樿垂閿欒.nut new file mode 100644 index 0000000..a09aa43 --- /dev/null +++ b/绀轰緥椤圭洰/娓呯悊鐐瑰埜浠樿垂閿欒/娓呯悊鐐瑰埜浠樿垂閿欒.nut @@ -0,0 +1,43 @@ +//娓呯悊浠樿垂閿欒 +function CleanUpBillingErrors() { + local Config = GlobalConfig.Get("娓呯悊浠樿垂閿欒.json"); + local PoolObj = MysqlPool.GetInstance(); + local Ip = Config["鏁版嵁搴揑P 涓嶆槸澶栫疆鏁版嵁搴撲笉瑕佹洿鏀"]; + local Port = Config["鏁版嵁搴撶鍙 涓嶆噦涓嶈鏇存敼"]; + local DbName = Config["鏁版嵁搴撶敤鎴峰悕 鏈湴鐢ㄦ埛鍚嶄笉鎳備笉瑕佹洿鏀"]; + local Password = Config["鏁版嵁搴撳瘑鐮 鏈湴瀵嗙爜涓嶆噦涓嶈鏇存敼"]; + //璁剧疆鏁版嵁搴撹繛鎺ヤ俊鎭 + PoolObj.SetBaseConfiguration(Ip, Port, DbName, Password); + //杩炴帴姹犲ぇ灏 + PoolObj.PoolSize = 10; + local CheckSql = "UPDATE taiwan_billing.cash_cera SET cera_cold = 0"; + //浠庢睜瀛愭嬁杩炴帴 + local SqlObj = MysqlPool.GetInstance().GetConnect(); + local Ret = SqlObj.Select(CheckSql, ["int"]); + //鎶婅繛鎺ヨ繕姹犲瓙 + MysqlPool.GetInstance().PutConnect(SqlObj); + World.SendNotiPacketMessage("鐜╁浠樿垂閿欒宸茶В鍐筹紒", 16); +}; + +// 鍏ュ彛鐐 +function _Dps_CleanUpBillingErrors_Main_() { + _Dps_CleanUpBillingErrors_Logic_(); +} + + +// 閫昏緫鍏ュ彛鐐 +function _Dps_CleanUpBillingErrors_Logic_() { + // 浠庨厤缃腑璇诲彇寮鍚椂闂 + local Config = GlobalConfig.Get("娓呯悊浠樿垂閿欒.json"); + local hour = Config["娓呯悊浠樿垂閿欒閰嶇疆"]["寮鍚皬鏃(24灏忔椂鍒)"]; + local minute = Config["娓呯悊浠樿垂閿欒閰嶇疆"]["寮鍚垎閽"]; + + // cron 琛ㄨ揪寮 (绉 鍒 鏃 鏃 鏈 鍛) + local cronExpression = format("0 %d %d * * *", minute, hour); + + // 娉ㄥ唽瀹氭椂浠诲姟 + Timer.SetCronTask(CleanUpBillingErrors, { + Cron = cronExpression, + Name = "CleanUpBillingErrors" + }); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鐐瑰埜鍏呭煎崱/Proj.ifo b/绀轰緥椤圭洰/鐐瑰埜鍏呭煎崱/Proj.ifo new file mode 100644 index 0000000..b59e7ae --- /dev/null +++ b/绀轰緥椤圭洰/鐐瑰埜鍏呭煎崱/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鐐瑰埜鍏呭煎崱", + "ProjectDescribe": "鏍规嵁閬撳叿ID鍏呭煎搴旂殑鐐瑰埜鏁伴噺", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.0, + "ProjectConfig": "鐐瑰埜鍏呭煎崱閰嶇疆_Nangua.json", + "ProjectFiles": [ + "鐐瑰埜鍏呭煎崱.nut" + ], + "ProjectRunFunc": "_Dps_handleCeraCard_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鐐瑰埜鍏呭煎崱/鐐瑰埜鍏呭煎崱.nut b/绀轰緥椤圭洰/鐐瑰埜鍏呭煎崱/鐐瑰埜鍏呭煎崱.nut new file mode 100644 index 0000000..ffd18a0 --- /dev/null +++ b/绀轰緥椤圭洰/鐐瑰埜鍏呭煎崱/鐐瑰埜鍏呭煎崱.nut @@ -0,0 +1,38 @@ +function handleCeraCardBynangua(SUser, ItemId) { + local Config = GlobalConfig.Get("鐐瑰埜鍏呭煎崱閰嶇疆_Nangua.json"); + local ItemIdStr = ItemId.tostring(); + + if (Config["鍏呭煎崱閰嶇疆"].rawin(ItemIdStr)) { + local CeraAmount = Config["鍏呭煎崱閰嶇疆"][ItemIdStr]; + SUser.RechargeCera(CeraAmount); + if (Config["鍚敤233鍙戝寘(true/false)"]) { + SUser.SendNotiBox(format(Config["鍏呭兼垚鍔熸彁绀"], CeraAmount), 1); + }else{ + SUser.SendNotiPacketMessage(format(Config["鍏呭兼垚鍔熸彁绀"], CeraAmount), 8); + } + } +} + +//鍔犺浇鍏ュ彛 +function _Dps_handleCeraCard_Main_() { + _Dps_handleCeraCard_Logic_(); +} + +//閲嶈浇鍏ュ彛 +function _Dps_handleCeraCard_Main_Reload_(OldConfig) { + local Config = GlobalConfig.Get("鐐瑰埜鍏呭煎崱閰嶇疆_Nangua.json"); + // 鍒犻櫎鏃х殑娉ㄥ唽 + foreach(itemId, _ in OldConfig["鍏呭煎崱閰嶇疆"]) { + Cb_Use_Item_Sp_Func.rawdelete(itemId.tointeger()); + } + //閲嶆柊娉ㄥ唽 + _Dps_handleCeraCard_Logic_(); +} + +function _Dps_handleCeraCard_Logic_() { + local Config = GlobalConfig.Get("鐐瑰埜鍏呭煎崱閰嶇疆_Nangua.json"); + // 娉ㄥ唽鎵鏈夊厖鍊煎崱 + foreach(itemId, _ in Config["鍏呭煎崱閰嶇疆"]) { + Cb_Use_Item_Sp_Func[itemId.tointeger()] <- handleCeraCardBynangua; + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鐐瑰埜鍏呭煎崱/鐐瑰埜鍏呭煎崱閰嶇疆_Nangua.json b/绀轰緥椤圭洰/鐐瑰埜鍏呭煎崱/鐐瑰埜鍏呭煎崱閰嶇疆_Nangua.json new file mode 100644 index 0000000..46dc515 --- /dev/null +++ b/绀轰緥椤圭洰/鐐瑰埜鍏呭煎崱/鐐瑰埜鍏呭煎崱閰嶇疆_Nangua.json @@ -0,0 +1,12 @@ +{ + "鍏呭煎崱閰嶇疆": { + "2024120601": 1000, + "2024120602": 5000, + "2024120603": 10000, + "2024120604": 30000, + "2024120605": 50000 + }, + "鎻愮ず": "濡傛灉浣跨敤233鍙戝寘闇瑕佸鎴风鎻掍欢,鍦ㄧ兢鏂囦欢鎼滅储<瀹㈡埛绔彃浠舵秷鎭233>涓嬭浇浣跨敤,鍚﹀垯浼氬鑷存父鎴忓穿婧", + "鍚敤233鍙戝寘(true/false)": false, + "鍏呭兼垚鍔熸彁绀": "鎴愬姛鍏呭 %d 鐐瑰埜" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鐗╁搧鍥炴敹UI/Proj.ifo b/绀轰緥椤圭洰/鐗╁搧鍥炴敹UI/Proj.ifo new file mode 100644 index 0000000..8785395 --- /dev/null +++ b/绀轰緥椤圭洰/鐗╁搧鍥炴敹UI/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鐗╁搧鍥炴敹UI", + "ProjectDescribe": "闇鍚姩鍣ㄦ敮鎸佹垨鑰卍ll鏀寔,鍚﹀垯鐗╁搧鏃犳硶鏀惧叆鍥炴敹绠,鏍规嵁鏀惧叆鐨勭墿鍝佽幏鍙栧搴旂殑濂栧姳,", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.0, + "ProjectConfig": "鐗╁搧鍥炴敹UI閰嶇疆_Nangua.json", + "ProjectFiles": [ + "鐗╁搧鍥炴敹UI.nut" + ], + "ProjectRunFunc": "_Dps_RecycleItemUI_Main_" +} diff --git a/绀轰緥椤圭洰/鐗╁搧鍥炴敹UI/鐗╁搧鍥炴敹UI.nut b/绀轰緥椤圭洰/鐗╁搧鍥炴敹UI/鐗╁搧鍥炴敹UI.nut new file mode 100644 index 0000000..d826fcb --- /dev/null +++ b/绀轰緥椤圭洰/鐗╁搧鍥炴敹UI/鐗╁搧鍥炴敹UI.nut @@ -0,0 +1,330 @@ +function _Dps_RecycleItemUI_Main_() { + // 璺宠繃鎸囧畾閬撳叿ID鍘熼昏緫1 + Cb_UseLimitCube_Check_Error_Leave_Func.crossoverByNangua <- function(args) { + local Config = GlobalConfig.Get("鐗╁搧鍥炴敹UI閰嶇疆_Nangua.json"); + local ItemObj = Item(args[5]); + local ItemId = ItemObj.GetIndex(); + if (ItemId == Config["鍥炴敹绠遍亾鍏稩D"]) { + return 17; + } + } + + // 鍥炴敹閫昏緫 + Cb_UseLimitCube_Process_Leave_Func.crossoverByNangua <- function(args) { + local Config = GlobalConfig.Get("鐗╁搧鍥炴敹UI閰嶇疆_Nangua.json"); + local SUser = User(args[1]); + local msg_base = args[2]; + if (msg_base) { + local slot = NativePointer(msg_base).add(13).readShort(); + local boxslot = NativePointer(msg_base).add(19).readShort(); + local InvenObj = SUser.GetInven(); + local boxobj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, boxslot); + local box_index = boxobj.GetIndex(); + local ItemObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, slot); + local Item_Id = ItemObj.GetIndex(); + if (!ItemObj) return; + if (box_index == Config["鍥炴敹绠遍亾鍏稩D"]) { + local Recycleitem_name = PvfItem.GetNameById(Item_Id); + local CheckItemLock = Sq_CallFunc(S_Ptr("0x8646942"), "int", ["pointer", "int", "int"], SUser.C_Object, 1, slot); + if (CheckItemLock) { + return; + } + // 妫鏌ヨ澶囨槸鍚﹀湪鎺掗櫎鍒楄〃涓 + if ("鎸囧畾瑁呭ID涓嶅弬涓庡洖鏀" in Config["鍥炴敹閰嶇疆"] && Config["鍥炴敹閰嶇疆"]["鎸囧畾瑁呭ID涓嶅弬涓庡洖鏀"].len() > 0) { + local isExcluded = false; + foreach (excludeId in Config["鍥炴敹閰嶇疆"]["鎸囧畾瑁呭ID涓嶅弬涓庡洖鏀"]) { + if (excludeId == Item_Id) { + isExcluded = true; + break; + } + } + if (isExcluded) { + _RecycleItemUI_nangua.RecycleError(SUser, format(Config["鍥炴敹澶辫触淇℃伅"], Recycleitem_name)); + return; + } + } + + local PvfItemObj = PvfItem.GetPvfItemById(Item_Id); + local Item_type = PvfItemObj.IsStackable(); + local Item_Count = ItemObj.GetAdd_Info(); + local rarity = PvfItemObj.GetRarity(); + local level = PvfItemObj.GetUsableLevel(); + local allRewards = []; + local foundValidItem = false; + + // 妫鏌ユ寚瀹氳澶囧洖鏀堕厤缃 + foreach(item in Config["鍥炴敹閰嶇疆"]["鎸囧畾瑁呭鍥炴敹"]) { + if(item[0] == Item_Id) { + local Rewarditem = item[1]; + local minCount = item[2]; + local maxCount = item[3]; + local Rewarditem_name = PvfItem.GetNameById(Rewarditem); + local RewardItemObj = PvfItem.GetPvfItemById(Rewarditem); + local item_upgrade = ItemObj.GetUpgrade(); + if (item_upgrade > 0) { + Recycleitem_name = "+" + item_upgrade + Recycleitem_name; + } + local count = 0; + if (Item_type == 1 && Item_Count > 1) { + for (local i = 0; i < Item_Count; i++) { + count += MathClass.Rand(minCount, maxCount + 1); + } + Recycleitem_name = Recycleitem_name + "x" + Item_Count; + } else { + count = MathClass.Rand(minCount, maxCount + 1); + } + + if (Rewarditem == 0) { + SUser.RechargeCera(count); + _RecycleItemUI_nangua.sendRewardMessageForCera(SUser, Recycleitem_name, ItemObj, count, Item_Id); + } else { + local equ_type = NativePointer(RewardItemObj.C_Object).add(141 * 4).readU32(); + if (equ_type > 0) { + count = 1; + } + allRewards.append([Rewarditem, count]); + _RecycleItemUI_nangua.sendRewardMessageForItem(SUser, Recycleitem_name, ItemObj, Rewarditem_name, count, equ_type, Item_Id, Rewarditem); + } + + _RecycleItemUI_nangua.DeleteAndUpdate(SUser, ItemObj, slot); + + foundValidItem = true; + break; + } + } + + // 濡傛灉娌℃湁鎵惧埌鎸囧畾瑁呭閰嶇疆锛屽皾璇曞搧绾у洖鏀 + if (!foundValidItem && Config["鍝佺骇鍥炴敹閰嶇疆"]["寮鍚搧绾т互鍙婅澶囩瓑绾х殑鍥炴敹(true寮鍚/false鍏抽棴)"]) { + foreach(cfg in Config["鍝佺骇鍥炴敹閰嶇疆"]["閰嶇疆鍒楄〃"]) { + if (cfg["瑁呭鍝佺骇"] == rarity && cfg["瑁呭绛夌骇"] == level) { + local reward = cfg["濂栧姳"][0]; + local count = MathClass.Rand(reward[1], reward[2] + 1); + if (reward[0] == 0) { + SUser.RechargeCera(count); + _RecycleItemUI_nangua.sendRewardMessageForCera(SUser, Recycleitem_name, ItemObj, count, Item_Id); + } else { + local Rewarditem_name = PvfItem.GetNameById(reward[0]); + local RewardItemObj = PvfItem.GetPvfItemById(reward[0]); + local equ_type = NativePointer(RewardItemObj.C_Object).add(141 * 4).readU32(); + if (equ_type > 0) { + count = 1; + } + allRewards.append([reward[0], count]); + _RecycleItemUI_nangua.sendRewardMessageForItem(SUser, Recycleitem_name, ItemObj, Rewarditem_name, count, equ_type, Item_Id, reward[0]); + } + _RecycleItemUI_nangua.DeleteAndUpdate(SUser, ItemObj, slot); + foundValidItem = true; + break; + } + } + } + + // 澶勭悊鍥炴敹缁撴灉 + if (foundValidItem) { + if (allRewards.len() > 0) { + _RecycleItemUI_nangua.api_CUser_Add_Item_list(SUser, allRewards); + _RecycleItemUI_nangua.SendItemWindowNotification(SUser, allRewards); + if(Config["鍥炴敹鎴愬姛鏄惁鎵i櫎鍥炴敹鍒搁亾鍏(true鎵i櫎/false涓嶆墸闄)"]){ + InvenObj.DeleteItemCount(box_index, 1); + } + } + } else { + // 濡傛灉娌℃湁鍖归厤鍒颁换浣曞洖鏀堕厤缃 + _RecycleItemUI_nangua.RecycleError(SUser, format(Config["鍥炴敹澶辫触淇℃伅"], Recycleitem_name)); + } + return; + } + } + } +} + +class _RecycleItemUI_nangua { + // 鍒犻櫎閬撳叿骞舵洿鏂板鎴风 + function DeleteAndUpdate(SUser, ItemObj, slot) { + ItemObj.Delete(); + SUser.SendUpdateItemList(1, 0, slot); + } + + // 鍥炴敹澶辫触 + function RecycleError(SUser, msg) { + local Config = GlobalConfig.Get("鐗╁搧鍥炴敹UI閰嶇疆_Nangua.json"); + if(Config["淇℃伅鎻愮ず绐楀彛鎻愮ず(true寮鍚/false鍏抽棴)"]) { + SUser.SendNotiBox(msg, 1); + } else { + SUser.SendNotiPacketMessage(msg, Config["淇℃伅鎾姤鍙戦佷綅缃"]); + } + } + + // 鍙戦佺偣鍒稿鍔辨秷鎭 + function sendRewardMessageForCera(SUser, Recycleitem_name, ItemObj, count, Item_Id) { + local Config = GlobalConfig.Get("鐗╁搧鍥炴敹UI閰嶇疆_Nangua.json"); + local AdMsgObj = AdMsg(); + AdMsgObj.PutType(Config["淇℃伅鎾姤鍙戦佷綅缃"]); + if (Config["淇℃伅鎾姤鍙戦佷綅缃"] != 14){ + AdMsgObj.PutString(" "); + } + AdMsgObj.PutImoticon(Config["琛ㄦ儏ID"]); + AdMsgObj.PutString(Config["鎴愬姛鍥炴敹"]["鏍囬"]); + AdMsgObj.PutEquipment("[" + Recycleitem_name + "]", ItemObj, _RecycleItemUI_nangua.RarityColor(Item_Id)); + AdMsgObj.PutString(Config["鎴愬姛鍥炴敹"]["濂栧姳鎻愮ず"]); + AdMsgObj.PutColorString("[" + count + "]", [255, 20, 0]); + AdMsgObj.PutString("鐐瑰埜"); + AdMsgObj.Finalize(); + SUser.Send(AdMsgObj.MakePack()); + AdMsgObj.Delete(); + } + + // 鍙戦侀亾鍏峰鍔辨秷鎭 + function sendRewardMessageForItem(SUser, Recycleitem_name, ItemObj, Rewarditem_name, count, equ_type, Item_Id, Rewarditem) { + local Config = GlobalConfig.Get("鐗╁搧鍥炴敹UI閰嶇疆_Nangua.json"); + local AdMsgObj = AdMsg(); + AdMsgObj.PutType(Config["淇℃伅鎾姤鍙戦佷綅缃"]); + if (Config["淇℃伅鎾姤鍙戦佷綅缃"] != 14){ + AdMsgObj.PutString(" "); + } + AdMsgObj.PutImoticon(Config["琛ㄦ儏ID"]); + AdMsgObj.PutString(Config["鎴愬姛鍥炴敹"]["鏍囬"]); + AdMsgObj.PutEquipment("[" + Recycleitem_name + "]", ItemObj, _RecycleItemUI_nangua.RarityColor(Item_Id)); + AdMsgObj.PutString(Config["鎴愬姛鍥炴敹"]["濂栧姳鎻愮ず"]); + if (equ_type > 0) { + AdMsgObj.PutEquipment(Rewarditem); + } else { + AdMsgObj.PutColorString("[" + count + "]", [255, 20, 0]); + AdMsgObj.PutString(Config["鎴愬姛鍥炴敹"]["鍗曚綅"]); + AdMsgObj.PutEquipment(Rewarditem); + } + AdMsgObj.Finalize(); + SUser.Send(AdMsgObj.MakePack()); + AdMsgObj.Delete(); + } + function RarityColor(item_id) { + local PvfItemObj = PvfItem.GetPvfItemById(item_id); + if (PvfItemObj == null) { + return; + } + local CItem_get_rarity = PvfItemObj.GetRarity(); // 瑁呭鍝佺骇 + return _RecycleItemUI_nangua.rarityColorMap[(CItem_get_rarity).tostring()]; + } + //鍝佺骇瀵瑰簲鐨凴GB + rarityColorMap = { + "0": [255, 255, 255], // 鏅 + "1": [104, 213, 237], // 楂樼骇 + "2": [179, 107, 255], // 绋鏈 + "3": [255, 0, 255], // 绁炲櫒 + "4": [255, 180, 0], // 鍙茶瘲 + "5": [255, 102, 102], // 鍕囪 + "6": [255, 20, 147], // 娣辩矇绾㈣壊 + "7": [255, 215, 0] // 閲戣壊 + }; + function api_CUser_Add_Item_list(SUser, item_list) { + for (local i = 0; i < item_list.len(); i++) { + local item_id = item_list[i][0]; // 閬撳叿浠g爜 + local quantity = item_list[i][1]; // 閬撳叿鏁伴噺 + local InvenObj = SUser.GetInven(); + // 鑾峰彇閬撳叿瀵硅薄 + local PvfItemObj = PvfItem.GetPvfItemById(item_id); + // 鑾峰彇閬撳叿绫诲瀷 + local equ_type = NativePointer(PvfItemObj.C_Object).add(141 * 4).readU32(); + // 鑾峰彇鏈澶у爢鍙犳暟閲 + local maxStack = Sq_CallFunc(S_Ptr("0x0822C9FC"), "int", ["pointer"], PvfItemObj.C_Object); + + // 濡傛灉鏄澶囷紝鐩存帴妫鏌ョ┖鏍煎苟澶勭悊 + if (equ_type > 0) { + local cnt = _RecycleItemUI_nangua.checkInventorySlot(SUser, item_id); + if (cnt == 1) { + SUser.GiveItem(item_id, quantity); + } else { + local RewardItems = []; + RewardItems.append([item_id, quantity]); + local title = "GM"; + local Text = "鐢变簬鑳屽寘绌洪棿涓嶈冻锛屽凡閫氳繃閭欢鍙戦侊紝璇锋煡鏀讹紒"; + SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems); + } + continue; + } + + // 鑾峰彇閬撳叿鍦ㄨ儗鍖呬腑鐨勬Ы浣 + local slot = InvenObj.GetSlotById(item_id); + if (slot != -1) { + // 鑾峰彇妲戒綅涓殑閬撳叿瀵硅薄 + local ItemObj = InvenObj.GetSlot(1, slot); + // 鑾峰彇褰撳墠鍫嗗彔鏁伴噺 + local currentCount = Sq_CallFunc(S_Ptr("0x80F783A"), "int", ["pointer"], ItemObj.C_Object); + + // 濡傛灉褰撳墠鍫嗗彔鏈弧锛岃绠楀彲浠ユ坊鍔犵殑鏁伴噺 + if (currentCount < maxStack) { + local canAdd = maxStack - currentCount; + if (quantity <= canAdd) { + // 濡傛灉濂栧姳鏁伴噺灏忎簬绛変簬鍙坊鍔犳暟閲忥紝鐩存帴娣诲姞 + Sq_CallFunc(S_Ptr("0x80CB884"), "int", ["pointer", "int"], ItemObj.C_Object, currentCount + quantity); + // 鍒锋柊鑳屽寘鏄剧ず + SUser.SendUpdateItemList(1, 0, slot); + } else { + // 濡傛灉濂栧姳鏁伴噺澶т簬鍙坊鍔犳暟閲 + // 鍏堝皢褰撳墠鍫嗗彔璁剧疆涓烘渶澶 + Sq_CallFunc(S_Ptr("0x80CB884"), "int", ["pointer", "int"], ItemObj.C_Object, maxStack); + SUser.SendUpdateItemList(1, 0, slot); + // 灏嗗墿浣欐暟閲忛氳繃閭欢鍙戦 + local remaining = quantity - canAdd; + local RewardItems = []; + RewardItems.append([item_id, remaining]); + local title = "GM"; + local Text = "鐢变簬鑳屽寘鍫嗗彔宸叉弧锛岄儴鍒嗛亾鍏峰凡閫氳繃閭欢鍙戦侊紝璇锋煡鏀讹紒"; + SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems); + } + continue; + } else { + local RewardItems = []; + RewardItems.append([item_id, quantity]); + local title = "GM"; + local Text = "鐢变簬鑳屽寘鍫嗗彔宸叉弧锛屽凡閫氳繃閭欢鍙戦侊紝璇锋煡鏀讹紒"; + SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems); + continue; + } + } + + // 濡傛灉閬撳叿涓嶅湪鑳屽寘涓紝妫鏌ョ┖鏍 + local cnt = _RecycleItemUI_nangua.checkInventorySlot(SUser, item_id); + if (cnt == 1) { + // 濡傛灉閬撳叿鏈夌┖鏍硷紝鐩存帴娣诲姞鍒拌儗鍖 + SUser.GiveItem(item_id, quantity); + } else { + // 濡傛灉鑳屽寘绌洪棿涓嶈冻锛岄氳繃閭欢鍙戦 + local RewardItems = []; + RewardItems.append([item_id, quantity]); + local title = "GM"; + local Text = "鐢变簬鑳屽寘绌洪棿涓嶈冻锛屽凡閫氳繃閭欢鍙戦侊紝璇锋煡鏀讹紒"; + SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems); + } + } + } + function SendItemWindowNotification(SUser, item_list) { + local Pack = Packet(); + Pack.Put_Header(1, 163); //鍗忚 + Pack.Put_Byte(1); //榛樿1 + Pack.Put_Short(0); //妲戒綅id 濉叆0鍗冲彲 + Pack.Put_Int(0); //鏈煡 0浠ヤ笂鍗冲彲 + Pack.Put_Short(item_list.len()); //閬撳叿缁勬暟 + //鍐欏叆閬撳叿浠g爜鍜岄亾鍏锋暟閲 + for (local i = 0; i < item_list.len(); i++) { + Pack.Put_Int(item_list[i][0]); //閬撳叿浠g爜 + Pack.Put_Int(item_list[i][1]); //閬撳叿鏁伴噺 瑁呭/鏃惰鏃 浠绘剰鍧囧彲 + } + Pack.Finalize(true); //纭畾鍙戝寘鍐呭 + SUser.Send(Pack); //鍙戝寘 + Pack.Delete(); //娓呯┖buff鍖 + } + /** + * 鏍规嵁閬撳叿绫诲瀷鑳屽寘绌烘牸鏁伴噺 + * @param {pointer} SUser - 鐢ㄦ埛 + * @param {int} item_id - 闇瑕佹煡鎵剧殑閬撳叿ID + * @returns {int} - 绌烘牸鏁伴噺1 + */ + function checkInventorySlot(SUser, itemid) { + local InvenObj = SUser.GetInven(); + local type = Sq_CallFunc(S_Ptr("0x085018D2"), "int", ["pointer", "int"], InvenObj.C_Object, itemid); + local cnt = Sq_CallFunc(S_Ptr("0x08504F64"), "int", ["pointer", "int", "int"], InvenObj.C_Object, type, 1); + + return cnt; + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鐗╁搧鍥炴敹UI/鐗╁搧鍥炴敹UI閰嶇疆_Nangua.json b/绀轰緥椤圭洰/鐗╁搧鍥炴敹UI/鐗╁搧鍥炴敹UI閰嶇疆_Nangua.json new file mode 100644 index 0000000..7380f96 --- /dev/null +++ b/绀轰緥椤圭洰/鐗╁搧鍥炴敹UI/鐗╁搧鍥炴敹UI閰嶇疆_Nangua.json @@ -0,0 +1,84 @@ +{ + "鍥炴敹绠遍亾鍏稩D":7942, + "鍥炴敹绠卞浐瀹氫笁涓亾鍏稩D<7953,7942,690000274>鏇存敼鍏朵粬閬撳叿ID鏃犳晥":"", + "涓旀鍔熻兘闇瑕佺櫥褰曞櫒鏀寔鎴栬卍ll鏀寔鐩墠宸茬煡鍏ユⅵ鍚姩鍣ㄤ互鍙婇暱铏瑰惎鍔ㄥ櫒鏀寔":"", + "濡傛灉闈炶浣跨敤,閭d箞鍒癙VF閲屾妸闇瑕佸洖鏀剁殑鐗╁搧鍏ㄩ儴鍐欏叆PVF璇ラ亾鍏烽噷,鍚﹀垯鐗╁搧鏃犳硶鎷栧叆鍥炴敹绠":"", + "鍥炴敹閰嶇疆": { + "鎸囧畾瑁呭鍥炴敹": [ + [27098, 3340, 1, 10], + [27102, 0, 1, 10], + [2711001, 3038, 1, 10], + [3340, 3038, 1, 2] + ], + "鎸囧畾瑁呭ID涓嶅弬涓庡洖鏀": [27100, 27101], + "鎻愮ず1":"[鍥炴敹瑁呭鐨処D,濂栧姳閬撳叿鐨処D(0浠h〃鐐瑰埜),鏁伴噺鏈灏忓,鏁伴噺鏈澶у糫", + "鎻愮ず2":"濡傛灉鎸囧畾瑁呭鍥炴敹鍜屽搧绾у洖鏀堕兘鍛戒腑鐨勬儏鍐典笅,浼樺厛浠ユ寚瀹氳澶囧洖鏀朵负鍑", + "鎻愮ず3":"鎺掗櫎瑁呭ID涓殑瑁呭涓嶄細鍙備笌鍥炴敹,鍗充娇瀹冧滑绗﹀悎鍏朵粬鍥炴敹鏉′欢" + }, + "鍝佺骇鍥炴敹閰嶇疆": { + "寮鍚搧绾т互鍙婅澶囩瓑绾х殑鍥炴敹(true寮鍚/false鍏抽棴)": true, + "濂栧姳璇存槑": "濂栧姳[閬撳叿ID(0浠h〃鐐瑰埜),鏁伴噺鏈灏忓,鏁伴噺鏈澶у糫", + "鍝佺骇璇存槑":"0浠h〃鐧借,1钃濊,2绱,3绮夎,4鍙茶瘲,5鍕囪", + "閰嶇疆鍒楄〃": [{ + "瑁呭鍝佺骇": 2, + "瑁呭绛夌骇": 55, + "濂栧姳": [ + [3037, 10, 20] + ] + }, + { + "瑁呭鍝佺骇": 3, + "瑁呭绛夌骇": 55, + "濂栧姳": [ + [7421, 10, 20] + ] + }, + { + "瑁呭鍝佺骇": 4, + "瑁呭绛夌骇": 50, + "濂栧姳": [ + [3037, 10, 20] + ] + }, + { + "瑁呭鍝佺骇": 4, + "瑁呭绛夌骇": 55, + "濂栧姳": [ + [3037, 10, 20] + ] + }, + { + "瑁呭鍝佺骇": 4, + "瑁呭绛夌骇": 60, + "濂栧姳": [ + [3037, 10, 20] + ] + }, + { + "瑁呭鍝佺骇": 4, + "瑁呭绛夌骇": 65, + "濂栧姳": [ + [3037, 10, 20] + ] + }, + { + "瑁呭鍝佺骇": 4, + "瑁呭绛夌骇": 70, + "濂栧姳": [ + [3037, 10, 20] + ] + } + ] + }, + "鍥炴敹澶辫触淇℃伅": " 瑁呭鍥炴敹澶辫触\n[%s]鏃犳硶鍥炴敹", + "淇℃伅鎾姤鍙戦佷綅缃": 37, + "淇℃伅鎻愮ず绐楀彛鎻愮ず(true寮鍚/false鍏抽棴)": false, + "鎻愮ず":"寮鍚脊绐楁彁绀洪渶鍦ㄧ兢鏂囦欢涓嬭浇 <瀹㈡埛绔秷鎭233.dll> 鎻掍欢,鍚﹀垯浼氬鑷存父鎴忓穿婧", + "鍥炴敹鎴愬姛鏄惁鎵i櫎鍥炴敹鍒搁亾鍏(true鎵i櫎/false涓嶆墸闄)":true, + "琛ㄦ儏ID": 59, + "鎴愬姛鍥炴敹": { + "鏍囬": " 鎴愬姛鍥炴敹", + "濂栧姳鎻愮ず":"濂栧姳", + "鍗曚綅": "涓" + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鐙珛鎺夎惤/Proj.ifo b/绀轰緥椤圭洰/鐙珛鎺夎惤/Proj.ifo new file mode 100644 index 0000000..c2eda21 --- /dev/null +++ b/绀轰緥椤圭洰/鐙珛鎺夎惤/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鐙珛鎺夎惤", + "ProjectDescribe": "灏嗘帀钀芥ā寮忔洿鏀逛负鐙珛鎺夎惤,(闃熶紞涓悇鐜╁鎺夎惤浜掍笉骞叉壈!)", + "ProjectAuthor": "鎸鸿糠鐨 & 鍊炬唱瀵", + "ProjectVersion": 1.1, + "ProjectConfig": "", + "ProjectFiles": [ + "鐙珛鎺夎惤.nut" + ], + "ProjectRunFunc": "_Dps_IndependentDrop_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鐙珛鎺夎惤/鐙珛鎺夎惤.nut b/绀轰緥椤圭洰/鐙珛鎺夎惤/鐙珛鎺夎惤.nut new file mode 100644 index 0000000..a6b61ea --- /dev/null +++ b/绀轰緥椤圭洰/鐙珛鎺夎惤/鐙珛鎺夎惤.nut @@ -0,0 +1,170 @@ +function api_copy_mapinfo_items_between_lists(list_dest, list_src) { + local it = Memory.alloc(4); + local end = Memory.alloc(4); + local next = Memory.alloc(4); + Sq_CallFunc(S_Ptr("0x08152B88"), "int", ["pointer", "pointer"], it.C_Object, list_src.C_Object); + Sq_CallFunc(S_Ptr("0x08152BBE"), "int", ["pointer", "pointer"], end.C_Object, list_src.C_Object); + + while (Sq_CallFunc(S_Ptr("0x08311E70"), "bool", ["pointer", "pointer"], it.C_Object, end.C_Object)) { + local map_item = Sq_CallFunc(S_Ptr("0x08311EBC"), "pointer", ["pointer"], it.C_Object); + Sq_CallFunc(S_Ptr("0x08152B52"), "pointer", ["pointer", "pointer"], list_dest.C_Object, map_item); + Sq_CallFunc(S_Ptr("0x08311E84"), "pointer", ["pointer", "pointer"], next.C_Object, it.C_Object); + } +} + + +function validate_pickup_permission(user, drop_id) { + if (!user || !drop_id) { + return 1; + } + + local SUser = User(user); + local SParty = SUser.GetParty(); + local SBattleField = SParty.GetBattleField(); + local fit = Memory.alloc(4); + + local currentMapInfo = Sq_CallFunc(S_Ptr("0x0822CBCC"), "pointer", ["pointer"], SBattleField.C_Object); + local drop_id_ptr = Memory.alloc(4); + drop_id_ptr.writeInt(drop_id); + + Sq_CallFunc(S_Ptr("0x08152532"), "pointer", ["pointer", "pointer", "pointer"], fit.C_Object, NativePointer(currentMapInfo).add(36).C_Object, drop_id_ptr.C_Object); + + local find_map_item = NativePointer(Sq_CallFunc(S_Ptr("0x081529B4"), "pointer", ["pointer"], fit.C_Object)).add(4); + if (!find_map_item.C_Object) { + return 1; + } + + local find_map_item_index = find_map_item.readU8(); + if (!find_map_item_index) + return 0; + + local find_map_item_partyIndex = find_map_item.add(8).readU32(); + + if (find_map_item_partyIndex< 1 || find_map_item_partyIndex > 4) + return 0; + + local cur_partyIndex = -1; + SParty.ForeachMember(function(PSUser, Index) { + if (PSUser.GetCID() == SUser.GetCID()) { + cur_partyIndex = Index + 1; + } + }); + + if (cur_partyIndex == find_map_item_partyIndex) + return 0; + return 1; +} + + +function _Dps_IndependentDrop_Main_() { + Cb_Battle_Field_MakeDropItems_Enter_Func._DPS_IndepentDrop <- function(args) { + local SParty = Party(NativePointer(args[0]).readPointer()); + local map_monster_param = NativePointer(Haker.CpuContext.ebp).add(0x10).readPointer(); + local monster_uid = NativePointer(NativePointer(Haker.CpuContext.ebp).add(0x18).readPointer()).readU16(); + + SParty.ForeachMember(function(SUser, Index) { + local user_item_list = Memory.alloc(8); + Sq_CallFunc(S_Ptr("0x08152A2C"), "pointer", ["pointer"], user_item_list.C_Object); + + Sq_CallFunc(S_Ptr("0x0830ADF6"), "void", ["pointer", "pointer", "pointer", "pointer", "int", "int", "int", "int", "int", "pointer", "float", "int"], args[0], user_item_list.C_Object, args[2], args[3], Index + 1, 1, args[6], args[7], args[8], args[9], args[10], args[11]); + + api_copy_mapinfo_items_between_lists(NativePointer(args[1]), user_item_list); + + local Pack = Packet(); + Sq_CallFunc(S_Ptr("0x0830B8CC"), "pointer", ["pointer", "pointer", "pointer", "int", "int", "pointer", "pointer"], args[0], Pack.C_Object, user_item_list.C_Object, monster_uid, Index + 1, args[3], map_monster_param); + SUser.Send(Pack); + Pack.Delete(); + + Sq_CallFunc(S_Ptr("0x08151F6E"), "pointer", ["pointer"], user_item_list.C_Object); + }); + + //璺宠繃鍘熼昏緫 + Sq_WriteByteArr(S_Ptr("0x830ADFC"), Haker.AsmGenerateMcd( + "pop ebx", + "pop esi", + "pop edi", + "pop ebp", + "ret")); + return null; + }; + Cb_Battle_Field_MakeDropItems_Leave_Func._DPS_IndepentDrop <- function(args) { + //杩樺師 + Sq_WriteByteArr(S_Ptr("0x830ADFC"), [0x81, 0xec, 0x7c, 0x01, 0x00, 0x00, 0x8B, 0x55, 0x18]); + return null; + } + + + //璺宠繃鍘熸湰鐨勬墿姝讳骸鎺夎惤鍖呮瀯閫 + CBattle_Field_MakeNotiPacketDieMonster_DPS_IndepentDrop_JmpFlag <- false; + Cb_CBattle_Field_MakeNotiPacketDieMonster_Enter_Func._DPS_IndepentDrop <- function(args) { + if (Haker.NextReturnAddress == "0x830ce08") { + local v109 = NativePointer(NativePointer(Haker.CpuContext.ebp).sub(0x90).readPointer()); + local v106 = NativePointer(Haker.CpuContext.ebp).sub(0x96) + if (v109.add(44).readU32() == 100 && v106.readU8() != 1 && NativePointer(args[0]).add(109 * 4).readU32() != 1) { + //璺宠繃鍘熼昏緫 + Sq_WriteByteArr(S_Ptr("0x830B8D3"), Haker.AsmGenerateMcd( + "add esp , 64", + "pop ebx", + "pop ebp", + "ret")); + CBattle_Field_MakeNotiPacketDieMonster_DPS_IndepentDrop_JmpFlag = true; + } + } + return null; + }; + Cb_CBattle_Field_MakeNotiPacketDieMonster_Leave_Func._DPS_IndepentDrop <- function(args) { + if (CBattle_Field_MakeNotiPacketDieMonster_DPS_IndepentDrop_JmpFlag) { + CBattle_Field_MakeNotiPacketDieMonster_DPS_IndepentDrop_JmpFlag = false; + Sq_WriteByteArr(S_Ptr("0x830B8D3"), [0x8B, 0x45, 0x18, 0x66, 0x89, 0x45, 0xB4, 0x8B, 0x45, 0x0C]); + return 1; + } + return null; + }; + + //璺宠繃鍘熸湰鐨勬墿姝讳骸鎺夎惤鍖呴槦浼嶅彂鍖 + CParty_send_to_party_DPS_IndepentDrop_JmpFlag <- false; + Cb_CParty_send_to_party_Enter_Func._DPS_IndepentDrop <- function(args) { + if (Haker.NextReturnAddress == "0x85a39db" && Sq_CallFunc(S_Ptr("0x0848F438"), "int", ["pointer"], args[1]) == 0) { + //璺宠繃鍘熼昏緫 + Sq_WriteByteArr(S_Ptr("0x859D154"), Haker.AsmGenerateMcd( + "add esp , 28", + "pop ebp", + "ret")); + CParty_send_to_party_DPS_IndepentDrop_JmpFlag = true; + } + return null; + }; + Cb_CParty_send_to_party_Leave_Func._DPS_IndepentDrop <- function(args) { + if (CParty_send_to_party_DPS_IndepentDrop_JmpFlag) { + Sq_WriteByteArr(S_Ptr("0x859D154"), [0xC7, 0x45, 0xF4, 0x00, 0x00, 0x00, 0x00]); + return 0; + } + return null; + }; + + //DisPatcher_GetItem::check_error 鏍¢獙鐢ㄦ埛鏄惁闈炴硶鎹″彇鐗╁搧 + Cb_GetItem_Check_Error_Leave_Func._DPS_IndepentDrop <- function(args) { + local user = NativePointer(Haker.CpuContext.ebp).add(0xc).readPointer(); + local msg_base = NativePointer(Haker.CpuContext.ebp).add(0x10).readPointer(); + local drop_id = NativePointer(msg_base).add(13).readU16(); + local res = validate_pickup_permission(user, drop_id); + return res; + }; + + //璺宠繃鐗╁搧鎺风偣 + Cb_CItem_check_item_routing_Leave_Func._DPS_IndepentDrop <- function(args) { + return false; + }; + + //鍙栨秷闃熷弸鍒嗛噾甯 + Cb_CParty_get_live_count_enter_map_Leave_Func._DPS_IndepentDrop <- function(args) { + return 1; + }; + + //SS鍏嶇‘璁 + Cb_CItem_IsRoutingItem_Leave_Func._DPS_IndepentDrop <- function(args) { + return 0; + } + Sq_WriteByteArr(S_Ptr("0x085A56D0"), [9]); + Sq_WriteByteArr(S_Ptr("0x085A41D1"), [0xB8, 0x00, 0x00, 0x00, 0x00, 0x90]); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛/Proj.ifo b/绀轰緥椤圭洰/绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛/Proj.ifo new file mode 100644 index 0000000..282b783 --- /dev/null +++ b/绀轰緥椤圭洰/绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛", + "ProjectDescribe": "绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.2, + "ProjectConfig": "绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛.json", + "ProjectFiles": [ + "绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛.nut" + ], + "ProjectRunFunc": "_Dps_HZZDQXHDJZDDSQSHZ_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛/绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛.json b/绀轰緥椤圭洰/绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛/绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛.json new file mode 100644 index 0000000..617b738 --- /dev/null +++ b/绀轰緥椤圭洰/绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛/绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛.json @@ -0,0 +1,9 @@ +{ + "鍏ㄨ韩绾㈠瓧閬撳叿": [ + 75771, + 7588, + 7589, + 7590 + ], + "鎻愮ず": "閬撳叿璇风敤7577澶嶅埗鍑烘潵鐨勯亾鍏 绗竴涓綋鍔 绗簩涓簿绁 绗笁涓姏閲 绗洓涓 鏅哄姏" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛/绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛.nut b/绀轰緥椤圭洰/绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛/绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛.nut new file mode 100644 index 0000000..04f9b78 --- /dev/null +++ b/绀轰緥椤圭洰/绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛/绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛.nut @@ -0,0 +1,85 @@ +function _Dps_HZZDQXHDJZDDSQSHZ_Main_() { + local Config = GlobalConfig.Get("绾㈠瓧鑷姩鍙栨秷鍜岄亾鍏疯嚜鍔ㄦ墦涓婂叏韬孩瀛.json"); + Cb_Use_Item_Sp_Func[Config["鍏ㄨ韩绾㈠瓧閬撳叿"][0]] <- function(SUser, ItemId) { + qsdshz(SUser, 1281); + } + + Cb_Use_Item_Sp_Func[Config["鍏ㄨ韩绾㈠瓧閬撳叿"][1]] <- function(SUser, ItemId) { + qsdshz(SUser, 1282); + } + + Cb_Use_Item_Sp_Func[Config["鍏ㄨ韩绾㈠瓧閬撳叿"][2]] <- function(SUser, ItemId) { + qsdshz(SUser, 1283); + } + + Cb_Use_Item_Sp_Func[Config["鍏ㄨ韩绾㈠瓧閬撳叿"][3]] <- function(SUser, ItemId) { + qsdshz(SUser, 1284); + } + + + + + //鑷姩鍙栨秷绾㈠瓧 + Cb_User_Insert_Item_Leave_Func.hzzdqc <- function(args) { + local SUser = User(NativePointer(args[0]).readPointer()); + local InvenObj = SUser.GetInven(); + local idx = args.pop(); + if (idx > 0) { + local inven_item = InvenObj.GetSlot(1, idx); + local item_id = inven_item.GetIndex(); + local pvfitem = PvfItem.GetPvfItemById(item_id); + if (Sq_CallFunc(S_Ptr("0x08150812"), "int", ["pointer"], inven_item.C_Object)) { + if(inven_item.GetAmplification() >=1281 &&inven_item.GetAmplification()<= 1284){ + + inven_item.SetAmplification(0); + inven_item.Flush(); + SUser.SendUpdateItemList(1, 0, idx); + } + } + + } + + } +} + + + + +function qsdshz(SUser, type) { + + local InvenObj = SUser.GetInven(); + //閬嶅巻韬笂鐨勬瘡涓浠惰澶 + /* + for (local u = 10; u <= 21; u++) { + if (u != 11) { + + local EquObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_BODY, u); + if (EquObj && !EquObj.IsEmpty) { + local ItemId1 = EquObj.GetIndex(); + + EquObj.SetAmplification(type); + EquObj.Flush(); + SUser.SendUpdateItemList(1, 3, u); + } + } + } + */ + + for (local u = 9; u <= 56; u++) { + + + local EquObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, u); + if (EquObj && !EquObj.IsEmpty) { + local ItemId1 = EquObj.GetIndex(); + + EquObj.SetAmplification(type); + EquObj.Flush(); + SUser.SendUpdateItemList(1, 0, u); + } + + } + + +} + + diff --git a/绀轰緥椤圭洰/鑷姩鍒锋柊GM宸ュ叿鐨勯偖浠/Proj.ifo b/绀轰緥椤圭洰/鑷姩鍒锋柊GM宸ュ叿鐨勯偖浠/Proj.ifo new file mode 100644 index 0000000..3fe0e0c --- /dev/null +++ b/绀轰緥椤圭洰/鑷姩鍒锋柊GM宸ュ叿鐨勯偖浠/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "鑷姩鍒锋柊GM宸ュ叿鐨勯偖浠", + "ProjectDescribe": "鑷姩鍒锋柊GM宸ュ叿鐨勯偖浠", + "ProjectAuthor": "鍊炬唱瀵 & Pluto.", + "ProjectVersion": 1.2, + "ProjectConfig": "", + "ProjectFiles": [ + "鑷姩鍒锋柊GM宸ュ叿鐨勯偖浠.nut" + ], + "ProjectRunFunc": "_Dps_AutomaticallyRefreshGmToolEmails_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/鑷姩鍒锋柊GM宸ュ叿鐨勯偖浠/鑷姩鍒锋柊GM宸ュ叿鐨勯偖浠.nut b/绀轰緥椤圭洰/鑷姩鍒锋柊GM宸ュ叿鐨勯偖浠/鑷姩鍒锋柊GM宸ュ叿鐨勯偖浠.nut new file mode 100644 index 0000000..6136a1b --- /dev/null +++ b/绀轰緥椤圭洰/鑷姩鍒锋柊GM宸ュ叿鐨勯偖浠/鑷姩鍒锋柊GM宸ュ叿鐨勯偖浠.nut @@ -0,0 +1,88 @@ +/* +鏂囦欢鍚:鑷姩鍒锋柊GM宸ュ叿鐨勯偖浠.nut +璺緞:OfficialProject/鑷姩鍒锋柊GM宸ュ叿鐨勯偖浠/鑷姩鍒锋柊GM宸ュ叿鐨勯偖浠.nut +鍒涘缓鏃ユ湡:2025-12-16 20:49 +鏂囦欢鐢ㄩ: +*/ + + +//鏁版嵁搴撹繛鎺 +_DetectingDatabaseEmailMysql_ <- null; +//涓婃鏌ヨ鐨勬渶鏂癐D +_DetectingDatabaseEmailLastId_ <- -1; + +function _DetectingDatabaseEmailRefresh_() { + //绗竴娆″垵濮嬪寲鏁版嵁搴撹繛鎺 + if (_DetectingDatabaseEmailMysql_ == null) { + _DetectingDatabaseEmailMysql_ = Mysql(Str_Ptr("127.0.0.1"), 3306, Str_Ptr("taiwan_cain"), Str_Ptr("game"), Str_Ptr("uu5!^%jg")); + if (_DetectingDatabaseEmailMysql_ == null) { + print("鏁版嵁搴撹繛鎺ュけ璐ワ紒"); + return; + } + _DetectingDatabaseEmailMysql_.Exec_Sql(format("SET NAMES %s", "latin1")); + } + + //鏌ヨ鏈鏂颁富閿 + local Ret = _DetectingDatabaseEmailMysql_.Select("SELECT letter_id FROM taiwan_cain_2nd.letter ORDER BY letter_id DESC LIMIT 1", ["int"]); + if (!Ret || Ret.len() == 0) { + // print("鏌ヨ鏈鏂發etter_id澶辫触鎴栨棤鏁版嵁"); + return; + } + + local LatestId = Ret[0][0]; + //绗竴娆″垵濮嬪寲锛岃褰曟渶鏂癐D锛屼笉澶勭悊鏁版嵁 + if (_DetectingDatabaseEmailLastId_ == -1) { + _DetectingDatabaseEmailLastId_ = LatestId; + print("棣栨鍒濆鍖栵紝鏈鏂發etter_id锛" + LatestId); + return; + } + + //鏈夋柊鐨勯偖浠舵暟鎹紙鏈鏂癐D澶т簬涓婃璁板綍鐨処D锛 + if (LatestId > _DetectingDatabaseEmailLastId_) { + //鏌ヨ鏂板鏁版嵁鐨勬潯鏁板拰charac_no瀛楁 + local sql = format("SELECT charac_no FROM taiwan_cain_2nd.letter WHERE letter_id > %d AND letter_id <= %d", _DetectingDatabaseEmailLastId_, LatestId); + local NewDataRet = _DetectingDatabaseEmailMysql_.Select(sql, ["int"]); + + if (NewDataRet && NewDataRet.len() > 0) { + local NewCount = NewDataRet.len(); + print("鏂板閭欢鏁版嵁鏉℃暟锛" + NewCount); + + local CharacMap = {}; + //閬嶅巻鑾峰彇鎵鏈夋柊澧炵殑charac_no + for (local i = 0; i< NewDataRet.len(); i++) { + local charac_no = NewDataRet[i][0]; + CharacMap.rawset(charac_no, true); + } + + foreach(cid,_ in CharacMap) { + local SUser = World.GetUserByCid(cid); + if (SUser) { + local MailBox = Sq_CallFunc(S_Ptr("0x0823020C"), "pointer", ["pointer"], SUser.C_Object); + local NotLoaded_Count = Sq_CallFunc(S_Ptr("0x084ED330"), "int", ["pointer"], MailBox); + local Not_Count = Sq_CallFunc(S_Ptr("0x0823455A"), "int", ["pointer"], MailBox); + + local Pack = Packet(); + Pack.Put_Header(0, 99); + Pack.Put_Short(Not_Count); + Pack.Finalize(true); + SUser.Send(Pack); + Pack.Delete(); + } + } + } else { + print("鏌ヨ鏂板鏁版嵁澶辫触"); + } + + //鏇存柊涓婃璁板綍鐨勬渶鏂癐D涓哄綋鍓嶆渶鏂癐D + _DetectingDatabaseEmailLastId_ = LatestId; + } else { + //鏃犳柊澧炴暟鎹 + //print("鏃犳柊澧為偖浠舵暟鎹"); + } +} + +function _Dps_AutomaticallyRefreshGmToolEmails_Main_() { + Timer.SetCronTask(function() { + _DetectingDatabaseEmailRefresh_(); + }, "*/1 * * * * ?"); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/瑁呭鍥炴敹/Proj.ifo b/绀轰緥椤圭洰/瑁呭鍥炴敹/Proj.ifo new file mode 100644 index 0000000..9e35402 --- /dev/null +++ b/绀轰緥椤圭洰/瑁呭鍥炴敹/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "瑁呭鍥炴敹", + "ProjectDescribe": "瑁呭鍥炴敹,鏍规嵁鎸囧畾鍥炴敹鐨処D濂栧姳闅忔満鏁伴噺鐨勫鍔憋紝浠ュ強鏍规嵁鍝佺骇浠ュ強瑁呭绛夌骇杩涜鍥炴敹缁欎笌濂栧姳", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.4, + "ProjectConfig": "瑁呭鍥炴敹閰嶇疆_Nangua.json", + "ProjectFiles": [ + "瑁呭鍥炴敹.nut" + ], + "ProjectRunFunc": "_Dps_RecycleItem_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/瑁呭鍥炴敹/瑁呭鍥炴敹.nut b/绀轰緥椤圭洰/瑁呭鍥炴敹/瑁呭鍥炴敹.nut new file mode 100644 index 0000000..8c120b7 --- /dev/null +++ b/绀轰緥椤圭洰/瑁呭鍥炴敹/瑁呭鍥炴敹.nut @@ -0,0 +1,340 @@ +// 鍥炴敹瑁呭鐨勪富鍑芥暟 +function RecycleItemFuncBynangua(SUser, ItemId) { + local Config = GlobalConfig.Get("瑁呭鍥炴敹閰嶇疆_Nangua.json"); + + // 鑾峰彇鐢ㄦ埛鐨勮儗鍖呭璞★紝濡傛灉涓嶅瓨鍦ㄥ垯鐩存帴杩斿洖 + local InvenObj = SUser.GetInven(); + if (!InvenObj) { + return; + } + + local foundValidSlot = false; + local index = 0; + local allRewards = []; + + // 閬嶅巻瑁呭鏍忔寚瀹氳寖鍥寸殑鏍煎瓙 + for (local i = Config["鍥炴敹閰嶇疆"]["鍥炴敹浣嶇疆"][0]; i <= Config["鍥炴敹閰嶇疆"]["鍥炴敹浣嶇疆"][1]; i++) { + local ItemObj = InvenObj.GetSlot(1, i); + + // 濡傛灉璇ユЫ涓虹┖锛岃烦杩 + if (ItemObj.IsEmpty) { + continue; + } + + // 妫鏌ヨ澶囨槸鍚︿笂閿侊紝鑻ヤ笂閿佸垯璺宠繃璇ヨ澶 + local CheckItemLock = Sq_CallFunc(S_Ptr("0x8646942"), "int", ["pointer", "int", "int"], SUser.C_Object, 1, i); + if (CheckItemLock) { + continue; + } + + local Item_Id = ItemObj.GetIndex(); + + // 妫鏌ヨ澶囨槸鍚﹀湪鎺掗櫎鍒楄〃涓紝濡傛灉鍦ㄥ垯璺宠繃 + if ("鎸囧畾瑁呭ID涓嶅弬涓庡洖鏀" in Config["鍥炴敹閰嶇疆"] && Config["鍥炴敹閰嶇疆"]["鎸囧畾瑁呭ID涓嶅弬涓庡洖鏀"].len() > 0) { + local isExcluded = false; + foreach (excludeId in Config["鍥炴敹閰嶇疆"]["鎸囧畾瑁呭ID涓嶅弬涓庡洖鏀"]) { + if (excludeId == Item_Id) { + isExcluded = true; + break; + } + } + if (isExcluded) { + continue; + } + } + + local PvfItemObj = PvfItem.GetPvfItemById(Item_Id); + local rarity = PvfItemObj.GetRarity(); + local level = PvfItemObj.GetUsableLevel(); + local Recycleitem_name = PvfItem.GetNameById(Item_Id); + + // 妫鏌ユ寚瀹氳澶囧洖鏀堕厤缃 + local found = false; + foreach(item in Config["鍥炴敹閰嶇疆"]["鎸囧畾瑁呭鍥炴敹"]) { + if(item[0] == Item_Id) { + local Rewarditem = item[1]; + local minCount = item[2]; + local maxCount = item[3]; + local Rewarditem_name = PvfItem.GetNameById(Rewarditem); + local RewardItemObj = PvfItem.GetPvfItemById(Rewarditem); + local item_upgrade = ItemObj.GetUpgrade(); + local totalRewards = []; + if (item_upgrade > 0) { + Recycleitem_name = "+" + item_upgrade + Recycleitem_name; + } + + local count = MathClass.Rand(minCount, maxCount + 1); + if (Rewarditem == 0) { + SUser.RechargeCera(count); + _RecycleItem_nangua.sendRewardMessageForCera(SUser, Recycleitem_name, ItemObj, count, Item_Id); + } else { + local equ_type = NativePointer(RewardItemObj.C_Object).add(141 * 4).readU32(); + if (equ_type > 0) { + count = 1; + } + totalRewards.append([Rewarditem, count]); + allRewards.append([Rewarditem, count]); // 娣诲姞鍒版诲鍔卞垪琛 + _RecycleItem_nangua.api_CUser_Add_Item_list(SUser, totalRewards); + _RecycleItem_nangua.sendRewardMessageForItem(SUser, Recycleitem_name, ItemObj, Rewarditem_name, count, equ_type, Item_Id, Rewarditem); + } + foundValidSlot = true; + ItemObj.Delete(); + SUser.SendUpdateItemList(1, 0, i); + index++; + found = true; + break; + } + } + + if(found) continue; + + // 妫鏌ュ搧绾у洖鏀堕厤缃 + if (Config["鍝佺骇鍥炴敹閰嶇疆"]["寮鍚搧绾т互鍙婅澶囩瓑绾х殑鍥炴敹(true寮鍚/false鍏抽棴)"]) { + foreach(cfg in Config["鍝佺骇鍥炴敹閰嶇疆"]["閰嶇疆鍒楄〃"]) { + if (cfg["瑁呭鍝佺骇"] == rarity && cfg["瑁呭绛夌骇"] == level) { + foundValidSlot = true; + local reward = cfg["濂栧姳"][0]; + local count = MathClass.Rand(reward[1], reward[2] + 1); + local totalReward = []; + if (reward[0] == 0) { + SUser.RechargeCera(count); + _RecycleItem_nangua.sendRewardMessageForCera(SUser, Recycleitem_name, ItemObj, count, Item_Id); + } else { + local Rewarditem_name = PvfItem.GetNameById(reward[0]); + // 鑾峰彇瑁呭绫诲瀷澶т簬0涓鸿澶 + local RewardItemObj = PvfItem.GetPvfItemById(reward[0]); + local equ_type = NativePointer(RewardItemObj.C_Object).add(141 * 4).readU32(); + if (equ_type > 0) { + count = 1; + } + totalReward.append([reward[0], count]); + allRewards.append([reward[0], count]); + _RecycleItem_nangua.api_CUser_Add_Item_list(SUser, totalReward); + _RecycleItem_nangua.sendRewardMessageForItem(SUser, Recycleitem_name, ItemObj, Rewarditem_name, count, equ_type, Item_Id, reward[0]); + } + ItemObj.Delete(); + SUser.SendUpdateItemList(1, 0, i); + index++; + } + } + } + } + + // 鍙戦佺粨鏋滄秷鎭 + if (foundValidSlot) { + if (index > 0) { + SUser.SendNotiPacketMessage("鎭枩: " + index + " 浠惰澶囧洖鏀舵垚鍔熴", Config["淇℃伅鎾姤鍙戦佷綅缃"]); + if (allRewards.len() > 0) { + _RecycleItem_nangua.SendItemWindowNotification(SUser, allRewards); + } + } + if(Config["鍥炴敹鎴愬姛鏄惁杩旇繕鍥炴敹鍒搁亾鍏(true杩旇繕/false涓嶈繑杩)"]){ + SUser.GiveItem(ItemId, 1); + } + } else { + _RecycleItem_nangua.RecycleError(SUser, Config["鍥炴敹澶辫触淇℃伅"], ItemId); + } +} +class _RecycleItem_nangua { + // 鍙戦侀氱煡鍜岃繑杩橀亾鍏 + function RecycleError(SUser, msg, ItemId) { + local Config = GlobalConfig.Get("瑁呭鍥炴敹閰嶇疆_Nangua.json"); + if(Config["淇℃伅鎻愮ず绐楀彛鎻愮ず(true寮鍚/false鍏抽棴)"]) { + SUser.SendNotiBox(msg, 1); + } else { + SUser.SendNotiPacketMessage(msg, Config["淇℃伅鎾姤鍙戦佷綅缃"]); + } + SUser.GiveItem(ItemId, 1); + } + + // 鍙戦佺偣鍒稿鍔辨秷鎭 + function sendRewardMessageForCera(SUser, Recycleitem_name, ItemObj, count, Item_Id) { + local Config = GlobalConfig.Get("瑁呭鍥炴敹閰嶇疆_Nangua.json"); + local AdMsgObj = AdMsg(); + AdMsgObj.PutType(Config["淇℃伅鎾姤鍙戦佷綅缃"]); + AdMsgObj.PutString(" "); + AdMsgObj.PutImoticon(Config["琛ㄦ儏ID"]); + AdMsgObj.PutString(Config["鎴愬姛鍥炴敹"]["鏍囬"]); + AdMsgObj.PutEquipment("[" + Recycleitem_name + "]", ItemObj, _RecycleItem_nangua.RarityColor(Item_Id)); + AdMsgObj.PutString(Config["鎴愬姛鍥炴敹"]["濂栧姳鎻愮ず"]); + AdMsgObj.PutColorString("[" + count + "]", [255, 20, 0]); + AdMsgObj.PutString("鐐瑰埜"); + AdMsgObj.Finalize(); + SUser.Send(AdMsgObj.MakePack()); + AdMsgObj.Delete(); + } + + // 鍙戦侀亾鍏峰鍔辨秷鎭 + function sendRewardMessageForItem(SUser, Recycleitem_name, ItemObj, Rewarditem_name, count, equ_type, Item_Id, Rewarditem) { + local Config = GlobalConfig.Get("瑁呭鍥炴敹閰嶇疆_Nangua.json"); + local AdMsgObj = AdMsg(); + AdMsgObj.PutType(Config["淇℃伅鎾姤鍙戦佷綅缃"]); + AdMsgObj.PutString(" "); + AdMsgObj.PutImoticon(Config["琛ㄦ儏ID"]); + AdMsgObj.PutString(Config["鎴愬姛鍥炴敹"]["鏍囬"]); + AdMsgObj.PutEquipment("[" + Recycleitem_name + "]", ItemObj, _RecycleItem_nangua.RarityColor(Item_Id)); + AdMsgObj.PutString(Config["鎴愬姛鍥炴敹"]["濂栧姳鎻愮ず"]); + if (equ_type > 0) { + AdMsgObj.PutColorString("[" + Rewarditem_name + "]", _RecycleItem_nangua.RarityColor(Rewarditem)); + } else { + AdMsgObj.PutColorString("[" + count + "]", [255, 20, 0]); + AdMsgObj.PutString(Config["鎴愬姛鍥炴敹"]["鍗曚綅"]); + AdMsgObj.PutColorString("[" + Rewarditem_name + "]", _RecycleItem_nangua.RarityColor(Rewarditem)); + } + AdMsgObj.Finalize(); + SUser.Send(AdMsgObj.MakePack()); + AdMsgObj.Delete(); + } + function RarityColor(item_id) { + local PvfItemObj = PvfItem.GetPvfItemById(item_id); + if (PvfItemObj == null) { + return; + } + local CItem_get_rarity = PvfItemObj.GetRarity(); // 瑁呭鍝佺骇 + return _RecycleItem_nangua.rarityColorMap[(CItem_get_rarity).tostring()]; + } + //鍝佺骇瀵瑰簲鐨凴GB + rarityColorMap = { + "0": [255, 255, 255], // 鏅 + "1": [104, 213, 237], // 楂樼骇 + "2": [179, 107, 255], // 绋鏈 + "3": [255, 0, 255], // 绁炲櫒 + "4": [255, 180, 0], // 鍙茶瘲 + "5": [255, 102, 102], // 鍕囪 + "6": [255, 20, 147], // 娣辩矇绾㈣壊 + "7": [255, 215, 0] // 閲戣壊 + }; + function api_CUser_Add_Item_list(SUser, item_list) { + for (local i = 0; i < item_list.len(); i++) { + local item_id = item_list[i][0]; // 閬撳叿浠g爜 + local quantity = item_list[i][1]; // 閬撳叿鏁伴噺 + local InvenObj = SUser.GetInven(); + + // 鑾峰彇閬撳叿瀵硅薄 + local PvfItemObj = PvfItem.GetPvfItemById(item_id); + // 鑾峰彇閬撳叿绫诲瀷 + local equ_type = NativePointer(PvfItemObj.C_Object).add(141 * 4).readU32(); + // 鑾峰彇鏈澶у爢鍙犳暟閲 + local maxStack = Sq_CallFunc(S_Ptr("0x0822C9FC"), "int", ["pointer"], PvfItemObj.C_Object); + + // 濡傛灉鏄澶囷紝鐩存帴妫鏌ョ┖鏍煎苟澶勭悊 + if (equ_type > 0) { + local cnt = _RecycleItem_nangua.checkInventorySlot(SUser, item_id); + if (cnt == 1) { + SUser.GiveItem(item_id, quantity); + } else { + local RewardItems = []; + RewardItems.append([item_id, quantity]); + local title = "GM"; + local Text = "鐢变簬鑳屽寘绌洪棿涓嶈冻锛屽凡閫氳繃閭欢鍙戦侊紝璇锋煡鏀讹紒"; + SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems); + } + continue; + } + + // 鑾峰彇閬撳叿鍦ㄨ儗鍖呬腑鐨勬Ы浣 + local slot = InvenObj.GetSlotById(item_id); + if (slot != -1) { + // 鑾峰彇妲戒綅涓殑閬撳叿瀵硅薄 + local ItemObj = InvenObj.GetSlot(1, slot); + // 鑾峰彇褰撳墠鍫嗗彔鏁伴噺 + local currentCount = Sq_CallFunc(S_Ptr("0x80F783A"), "int", ["pointer"], ItemObj.C_Object); + + // 濡傛灉褰撳墠鍫嗗彔鏈弧锛岃绠楀彲浠ユ坊鍔犵殑鏁伴噺 + if (currentCount < maxStack) { + local canAdd = maxStack - currentCount; + if (quantity <= canAdd) { + // 濡傛灉濂栧姳鏁伴噺灏忎簬绛変簬鍙坊鍔犳暟閲忥紝鐩存帴娣诲姞 + Sq_CallFunc(S_Ptr("0x80CB884"), "int", ["pointer", "int"], ItemObj.C_Object, currentCount + quantity); + // 鍒锋柊鑳屽寘鏄剧ず + SUser.SendUpdateItemList(1, 0, slot); + } else { + // 濡傛灉濂栧姳鏁伴噺澶т簬鍙坊鍔犳暟閲 + // 鍏堝皢褰撳墠鍫嗗彔璁剧疆涓烘渶澶 + Sq_CallFunc(S_Ptr("0x80CB884"), "int", ["pointer", "int"], ItemObj.C_Object, maxStack); + SUser.SendUpdateItemList(1, 0, slot); + // 灏嗗墿浣欐暟閲忛氳繃閭欢鍙戦 + local remaining = quantity - canAdd; + local RewardItems = []; + RewardItems.append([item_id, remaining]); + local title = "GM"; + local Text = "鐢变簬鑳屽寘鍫嗗彔宸叉弧锛岄儴鍒嗛亾鍏峰凡閫氳繃閭欢鍙戦侊紝璇锋煡鏀讹紒"; + SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems); + } + continue; + } else { + local RewardItems = []; + RewardItems.append([item_id, quantity]); + local title = "GM"; + local Text = "鐢变簬鑳屽寘鍫嗗彔宸叉弧锛屽凡閫氳繃閭欢鍙戦侊紝璇锋煡鏀讹紒"; + SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems); + continue; + } + } + + // 濡傛灉閬撳叿涓嶅湪鑳屽寘涓紝妫鏌ョ┖鏍 + local cnt = _RecycleItem_nangua.checkInventorySlot(SUser, item_id); + if (cnt == 1) { + // 濡傛灉閬撳叿鏈夌┖鏍硷紝鐩存帴娣诲姞鍒拌儗鍖 + SUser.GiveItem(item_id, quantity); + } else { + // 濡傛灉鑳屽寘绌洪棿涓嶈冻锛岄氳繃閭欢鍙戦 + local RewardItems = []; + RewardItems.append([item_id, quantity]); + local title = "GM"; + local Text = "鐢变簬鑳屽寘绌洪棿涓嶈冻锛屽凡閫氳繃閭欢鍙戦侊紝璇锋煡鏀讹紒"; + SUser.ReqDBSendMultiMail(title, Text, 0, RewardItems); + } + } + } + function SendItemWindowNotification(SUser, item_list) { + local Pack = Packet(); + Pack.Put_Header(1, 163); //鍗忚 + Pack.Put_Byte(1); //榛樿1 + Pack.Put_Short(0); //妲戒綅id 濉叆0鍗冲彲 + Pack.Put_Int(0); //鏈煡 0浠ヤ笂鍗冲彲 + Pack.Put_Short(item_list.len()); //閬撳叿缁勬暟 + //鍐欏叆閬撳叿浠g爜鍜岄亾鍏锋暟閲 + for (local i = 0; i < item_list.len(); i++) { + Pack.Put_Int(item_list[i][0]); //閬撳叿浠g爜 + Pack.Put_Int(item_list[i][1]); //閬撳叿鏁伴噺 瑁呭/鏃惰鏃 浠绘剰鍧囧彲 + } + Pack.Finalize(true); //纭畾鍙戝寘鍐呭 + SUser.Send(Pack); //鍙戝寘 + Pack.Delete(); //娓呯┖buff鍖 + } + /** + * 鏍规嵁閬撳叿绫诲瀷鑳屽寘绌烘牸鏁伴噺 + * @param {pointer} SUser - 鐢ㄦ埛 + * @param {int} item_id - 闇瑕佹煡鎵剧殑閬撳叿ID + * @returns {int} - 绌烘牸鏁伴噺 + */ + function checkInventorySlot(SUser, itemid) { + local InvenObj = SUser.GetInven(); + local type = Sq_CallFunc(S_Ptr("0x085018D2"), "int", ["pointer", "int"], InvenObj.C_Object, itemid); + local cnt = Sq_CallFunc(S_Ptr("0x08504F64"), "int", ["pointer", "int", "int"], InvenObj.C_Object, type, 1); + + return cnt; + } +} + +//鍔犺浇鍏ュ彛 +function _Dps_RecycleItem_Main_() { + _Dps_RecycleItem_Logic_(); +} + +//閲嶈浇鍏ュ彛 +function _Dps_RecycleItem_Main_Reload_(OldConfig) { + local Cofig = GlobalConfig.Get("瑁呭鍥炴敹閰嶇疆_Nangua.json"); + Cb_Use_Item_Sp_Func.rawdelete(OldConfig["鍥炴敹閰嶇疆"]["鍥炴敹绠遍亾鍏稩D"].tointeger()); + + //閲嶆柊娉ㄥ唽 + _Dps_RecycleItem_Logic_(); +} + +function _Dps_RecycleItem_Logic_() { + local Cofig = GlobalConfig.Get("瑁呭鍥炴敹閰嶇疆_Nangua.json"); + // 瑁呭鍥炴敹 + Cb_Use_Item_Sp_Func[Cofig["鍥炴敹閰嶇疆"]["鍥炴敹绠遍亾鍏稩D"]] <- RecycleItemFuncBynangua; +} + diff --git a/绀轰緥椤圭洰/瑁呭鍥炴敹/瑁呭鍥炴敹閰嶇疆_Nangua.json b/绀轰緥椤圭洰/瑁呭鍥炴敹/瑁呭鍥炴敹閰嶇疆_Nangua.json new file mode 100644 index 0000000..e484901 --- /dev/null +++ b/绀轰緥椤圭洰/瑁呭鍥炴敹/瑁呭鍥炴敹閰嶇疆_Nangua.json @@ -0,0 +1,81 @@ +{ + "鍥炴敹閰嶇疆": { + "鍥炴敹绠遍亾鍏稩D": 2021458811, + "鍥炴敹浣嶇疆": [9, 16], + "鎸囧畾瑁呭鍥炴敹": [ + [27098, 3340, 1, 10], + [27102, 0, 1, 10], + [2711001, 3038, 1, 10] + ], + "鎸囧畾瑁呭ID涓嶅弬涓庡洖鏀": [27099, 27100, 27101], + "鎻愮ず1":"[鍥炴敹瑁呭鐨処D,濂栧姳閬撳叿鐨処D(0浠h〃鐐瑰埜),鏁伴噺鏈灏忓,鏁伴噺鏈澶у糫", + "鎻愮ず2":"鍥炴敹浣嶇疆蹇嵎鏍(蹇嵎鏍3-8),瑁呭鏍(蹇嵎鏍9-56,濡傜涓鎺掍负9-16,绗簩鎺掍负17-24,绗笁鎺掍负25-32,绗洓鎺掍负33-40,绗簲鎺掍负41-48,绗叚鎺掍负49-56)", + "鎻愮ず3":"濡傛灉鎸囧畾瑁呭鍥炴敹鍜屽搧绾у洖鏀堕兘鍛戒腑鐨勬儏鍐典笅,浼樺厛浠ユ寚瀹氳澶囧洖鏀朵负鍑", + "鎻愮ず4":"鎺掗櫎瑁呭ID涓殑瑁呭涓嶄細鍙備笌鍥炴敹,鍗充娇瀹冧滑绗﹀悎鍏朵粬鍥炴敹鏉′欢" + }, + "鍝佺骇鍥炴敹閰嶇疆": { + "寮鍚搧绾т互鍙婅澶囩瓑绾х殑鍥炴敹(true寮鍚/false鍏抽棴)": false, + "鎻愮ず": "濂栧姳[閬撳叿ID(0浠h〃鐐瑰埜),鏁伴噺鏈灏忓,鏁伴噺鏈澶у糫", + "閰嶇疆鍒楄〃": [{ + "瑁呭鍝佺骇": 2, + "瑁呭绛夌骇": 55, + "濂栧姳": [ + [3037, 10, 20] + ] + }, + { + "瑁呭鍝佺骇": 3, + "瑁呭绛夌骇": 10, + "濂栧姳": [ + [7421, 10, 20] + ] + }, + { + "瑁呭鍝佺骇": 4, + "瑁呭绛夌骇": 50, + "濂栧姳": [ + [3037, 10, 20] + ] + }, + { + "瑁呭鍝佺骇": 4, + "瑁呭绛夌骇": 55, + "濂栧姳": [ + [3037, 10, 20] + ] + }, + { + "瑁呭鍝佺骇": 4, + "瑁呭绛夌骇": 60, + "濂栧姳": [ + [3037, 10, 20] + ] + }, + { + "瑁呭鍝佺骇": 4, + "瑁呭绛夌骇": 65, + "濂栧姳": [ + [3037, 10, 20] + ] + }, + { + "瑁呭鍝佺骇": 4, + "瑁呭绛夌骇": 70, + "濂栧姳": [ + [3037, 10, 20] + ] + } + ] + }, + "鍥炴敹澶辫触淇℃伅": " 瑁呭鍥炴敹澶辫触\n 娌℃湁鍚堥傜殑瑁呭鎴栧凡涓婇攣", + "淇℃伅鎾姤鍙戦佷綅缃": 37, + "淇℃伅鎻愮ず绐楀彛鎻愮ず(true寮鍚/false鍏抽棴)": false, + "鎻愮ず":"寮鍚脊绐楁彁绀洪渶鍦ㄧ兢鏂囦欢涓嬭浇 <瀹㈡埛绔秷鎭233.dll> 鎻掍欢,鍚﹀垯浼氬鑷存父鎴忓穿婧", + "鍥炴敹鎴愬姛鏄惁杩旇繕鍥炴敹鍒搁亾鍏(true杩旇繕/false涓嶈繑杩)":false, + "琛ㄦ儏ID": 59, + "鎴愬姛鍥炴敹": { + "鏍囬": " 鎴愬姛鍥炴敹", + "濂栧姳鎻愮ず":"濂栧姳", + "鍗曚綅": "涓" + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/瑁呭缁ф壙鍒/Proj.ifo b/绀轰緥椤圭洰/瑁呭缁ф壙鍒/Proj.ifo new file mode 100644 index 0000000..74245e1 --- /dev/null +++ b/绀轰緥椤圭洰/瑁呭缁ф壙鍒/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "瑁呭缁ф壙鍒", + "ProjectDescribe": "鍙互灏嗚澶囩殑寮哄寲闄勯瓟澧炲箙绛夊睘鎬ф洿鏀瑰埌鍙﹀涓涓澶", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.3, + "ProjectConfig": "瑁呭缁ф壙鍒搁厤缃甠Nangua.json", + "ProjectFiles": [ + "瑁呭缁ф壙鍒.nut" + ], + "ProjectRunFunc": "_Dps_InheritItem_Main_" +} diff --git a/绀轰緥椤圭洰/瑁呭缁ф壙鍒/瑁呭缁ф壙鍒.nut b/绀轰緥椤圭洰/瑁呭缁ф壙鍒/瑁呭缁ф壙鍒.nut new file mode 100644 index 0000000..ec6883a --- /dev/null +++ b/绀轰緥椤圭洰/瑁呭缁ф壙鍒/瑁呭缁ф壙鍒.nut @@ -0,0 +1,166 @@ + +function InheritFuncBynangua(SUser, ItemId) { + local Config = GlobalConfig.Get("瑁呭缁ф壙鍒搁厤缃甠Nangua.json"); + //鑾峰彇鐜╁鑳屽寘 + local InvenObj = SUser.GetInven(); + if(!InvenObj) { + return; + } + //鑾峰彇瑁呭鏍忕涓鏍忚澶 + local firstItemObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, Config["缁ф壙閰嶇疆"]["瑁呭1鎽嗘斁浣嶇疆"]); + //鑾峰彇瑁呭鏍忕浜屾爮瑁呭 + local secondItemObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, Config["缁ф壙閰嶇疆"]["瑁呭2鎽嗘斁浣嶇疆"]); + //瑁呭涓嶅瓨鍦 + if (firstItemObj.IsEmpty || secondItemObj.IsEmpty) { + _InheritBynangua.NotifyUserAndReturn(SUser, ItemId, Config["缁ф壙閰嶇疆"]["缁ф壙澶辫触鎻愮ず1"]); + return; + } + //鑾峰彇ID + local firstItemIndex = firstItemObj.GetIndex(); + local secondItemIndex = secondItemObj.GetIndex(); + //鑾峰彇绫诲瀷 + local firstItemInfo = PvfItem.GetPvfItemById(firstItemIndex); + local firstItemType = NativePointer(firstItemInfo.C_Object).add(141 * 4).readU32(); + local secondItemInfo = PvfItem.GetPvfItemById(secondItemIndex); + local secondItemType = NativePointer(secondItemInfo.C_Object).add(141 * 4).readU32(); + //鍒ゆ柇鏄惁鍦ㄧ姝㈢户鎵胯澶囦腑 + foreach(exceptItemIndex in Config["缁ф壙閰嶇疆"]["绂佹缁ф壙瑁呭ID"]) { + if(firstItemIndex == exceptItemIndex || secondItemIndex == exceptItemIndex) { + //鑾峰彇瑁呭鍚嶅瓧 + local ItemName = PvfItem.GetNameById(exceptItemIndex); + _InheritBynangua.NotifyUserAndReturn(SUser, ItemId, format(Config["缁ф壙閰嶇疆"]["缁ф壙澶辫触鎻愮ず5"], ItemName)); + return; + } + } + // 绂佹缁ф壙鐨勮澶囩被鍨(10姝﹀櫒锛11绉板彿锛12涓婅。锛13澶磋偐锛14涓嬭锛15闉嬪瓙锛16鑵板甫锛17椤归摼锛18鎵嬮暞锛19鎴掓寚锛20宸︽Ы锛21鍙虫Ы) + if (Config["缁ф壙閰嶇疆"]["绂佹缁ф壙瑁呭绫诲瀷"].find(firstItemType || secondItemType) != null) { + _InheritBynangua.NotifyUserAndReturn(SUser, ItemId, Config["缁ф壙閰嶇疆"]["缁ф壙澶辫触鎻愮ず2"]); + return; + } + // 1銆2鏍忚澶囩被鍨嬩笉鍚屾棤娉曠户鎵 + if (firstItemType != secondItemType) { + _InheritBynangua.NotifyUserAndReturn(SUser, ItemId, Config["缁ф壙閰嶇疆"]["缁ф壙澶辫触鎻愮ず2"]); + return; + } + //瑁呭绛夌骇澶т簬绛変簬50绾ф墠鍙互缁ф壙锛1銆2鏍忚澶囩瓑绾у樊璺濊秴杩5绾ф棤娉曠户鎵 + if (firstItemInfo.GetUsableLevel() < Config["缁ф壙閰嶇疆"]["瑁呭绛夌骇澶т簬绛変簬澶氬皯鍏佽缁ф壙"] || secondItemInfo.GetUsableLevel() < Config["缁ф壙閰嶇疆"]["瑁呭绛夌骇澶т簬绛変簬澶氬皯鍏佽缁ф壙"] || _InheritBynangua.CheckUsableLevelBynangua(firstItemInfo.GetUsableLevel() - secondItemInfo.GetUsableLevel()) > Config["缁ф壙閰嶇疆"]["瑁呭绛夌骇璺ㄥ害瓒呰繃澶氬皯涓嶅厑璁哥户鎵"]) { + _InheritBynangua.NotifyUserAndReturn(SUser, ItemId, Config["缁ф壙閰嶇疆"]["缁ф壙澶辫触鎻愮ず3"]); + return; + } + //瑁呭鍝佺骇浣庝簬3鏃犳硶缁ф壙 + if (firstItemInfo.GetRarity() < Config["缁ф壙閰嶇疆"]["瑁呭鍝佺骇浣庝簬澶氬皯涓嶅厑璁哥户鎵"] || secondItemInfo.GetRarity() < Config["缁ф壙閰嶇疆"]["瑁呭鍝佺骇浣庝簬澶氬皯涓嶅厑璁哥户鎵"]) { + _InheritBynangua.NotifyUserAndReturn(SUser, ItemId, Config["缁ф壙閰嶇疆"]["缁ф壙澶辫触鎻愮ず4"]); + return; + } + if (!Config["缁ф壙閰嶇疆"]["鏄惁鍏佽涓嶅悓鍝佺骇鐨勮澶囩户鎵(true鍙互,false涓嶅彲浠)"]) { + if (firstItemInfo.GetRarity() != secondItemInfo.GetRarity()) { + _InheritBynangua.NotifyUserAndReturn(SUser, ItemId, Config["缁ф壙閰嶇疆"]["缁ф壙澶辫触鎻愮ず4"]); + return; + } + } + //婊¤冻浠ヤ笂鏉′欢鍚庡紑濮嬫墽琛岀户鎵块昏緫 + //灏嗙涓涓澶囩殑灞炴х户鎵垮埌绗簩涓澶 + Sq_CallFunc(S_Ptr("0x8671EB2"), "int", ["pointer", "pointer", "pointer"], SUser.C_Object, secondItemObj.C_Object, firstItemObj.C_Object); + // 灏嗙涓涓澶囩殑闀跺祵鏁版嵁搴揑D璁剧疆涓0 + NativePointer(firstItemObj.C_Object).add(25).writeU32(0); + //鑾峰彇寮傜晫姘旀伅灞炴 + local firstBreath = NativePointer(firstItemObj.C_Object).add(31).readU8(); + local secondBreath = NativePointer(firstItemObj.C_Object).add(32).readU8(); + if(firstBreath > 0 && Config["缁ф壙閰嶇疆"]["鏄惁鍏佽缁ф壙寮傜晫姘旀伅(true鍙互,false涓嶅彲浠)"]) { + //鍐欏叆寮傜晫姘旀伅灞炴 + NativePointer(secondItemObj.C_Object).add(31).writeU8(firstBreath); + NativePointer(secondItemObj.C_Object).add(32).writeU8(secondBreath); + //娓呴櫎绗竴浠惰澶囧紓鐣屾皵鎭睘鎬 + NativePointer(firstItemObj.C_Object).add(31).writeU8(0); + NativePointer(firstItemObj.C_Object).add(32).writeU8(0); + } + //绉婚櫎琚户鎵胯澶囧睘鎬 + local removeAttributes = [6, 17, 51, 13]; + foreach (attributes in removeAttributes) { + NativePointer(firstItemObj.C_Object).add(attributes).writeU8(0); + } + //鍒锋柊鑳屽寘淇℃伅 + SUser.SendUpdateItemList(1, 0, Config["缁ф壙閰嶇疆"]["瑁呭1鎽嗘斁浣嶇疆"]); + SUser.SendUpdateItemList(1, 0, Config["缁ф壙閰嶇疆"]["瑁呭2鎽嗘斁浣嶇疆"]); + firstItemObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, Config["缁ф壙閰嶇疆"]["瑁呭1鎽嗘斁浣嶇疆"]); + secondItemObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, Config["缁ф壙閰嶇疆"]["瑁呭2鎽嗘斁浣嶇疆"]); + //鑾峰彇瑁呭鍚嶅瓧 + local firstItemName = PvfItem.GetNameById(firstItemObj.GetIndex()); + local secondItemName = PvfItem.GetNameById(secondItemObj.GetIndex()); + //鑾峰彇寮哄寲淇℃伅 + local upgrade = secondItemObj.GetUpgrade();//寮哄寲 + //瀛楃涓插悎鎴 + if (upgrade > 0) { + secondItemName = "+" + upgrade + " " + secondItemName; + } + //缁勫悎娑堟伅 + local AdMsgObj = AdMsg() + AdMsgObj.PutType(Config["缁ф壙鎴愬姛鎻愮ず"]["淇℃伅鍙戦佷綅缃"]); + if (Config["缁ф壙鎴愬姛鎻愮ず"]["淇℃伅鍙戦佷綅缃"] != 14){ + AdMsgObj.PutString(" "); + } + AdMsgObj.PutImoticon(Config["缁ф壙鎴愬姛鎻愮ず"]["琛ㄦ儏"]); + AdMsgObj.PutString(Config["缁ф壙鎴愬姛鎻愮ず"]["淇℃伅1"]); + AdMsgObj.PutEquipment("[" + firstItemName + "]", firstItemObj, _InheritBynangua.RarityColor(firstItemIndex)); + AdMsgObj.PutString(Config["缁ф壙鎴愬姛鎻愮ず"]["淇℃伅2"]); + AdMsgObj.PutEquipment("[" + secondItemName + "]", secondItemObj, _InheritBynangua.RarityColor(secondItemIndex)); + AdMsgObj.Finalize(); + SUser.Send(AdMsgObj.MakePack()); + AdMsgObj.Delete(); +} + +class _InheritBynangua { + function CheckUsableLevelBynangua(value) { + return value >= 0 ? value : -value; + } + function NotifyUserAndReturn(SUser, ItemId, message) { + local Config = GlobalConfig.Get("瑁呭缁ф壙鍒搁厤缃甠Nangua.json"); + //鍙戦侀氱煡 + if(Config["寮圭獥鎻愮ず(true涓哄紑鍚,false涓哄叧闂)"]) { + SUser.SendNotiBox(message, 1); + }else{ + SUser.SendNotiPacketMessage(message, 8); + } + //杩旇繕娑堣楃殑閬撳叿 + SUser.GiveItem(ItemId, 1); + } + function RarityColor(item_id) { + local PvfItemObj = PvfItem.GetPvfItemById(item_id); + if (PvfItemObj == null) { + return; + } + local CItem_get_rarity = PvfItemObj.GetRarity(); // 瑁呭鍝佺骇 + return _InheritBynangua.rarityColorMap[(CItem_get_rarity).tostring()]; + } + //鍝佺骇瀵瑰簲鐨凴GB + rarityColorMap = { + "0": [255, 255, 255], // 鏅 + "1": [104, 213, 237], // 楂樼骇 + "2": [179, 107, 255], // 绋鏈 + "3": [255, 0, 255], // 绁炲櫒 + "4": [255, 180, 0], // 鍙茶瘲 + "5": [255, 102, 102], // 鍕囪 + "6": [255, 20, 147], // 娣辩矇绾㈣壊 + "7": [255, 215, 0] // 閲戣壊 + }; +} + +//鍔犺浇鍏ュ彛 +function _Dps_InheritItem_Main_() { + _Dps_InheritItem_Logic_(); +} + +//閲嶈浇鍏ュ彛 +function _Dps_InheritItem_Main_Reload_(OldConfig) { + local Cofig = GlobalConfig.Get("瑁呭缁ф壙鍒搁厤缃甠Nangua.json"); + Cb_Use_Item_Sp_Func.rawdelete(OldConfig["缁ф壙閰嶇疆"]["缁ф壙鍒搁亾鍏稩D"].tointeger()); + + //閲嶆柊娉ㄥ唽 + _Dps_InheritItem_Logic_(); +} + +function _Dps_InheritItem_Logic_() { + local Cofig = GlobalConfig.Get("瑁呭缁ф壙鍒搁厤缃甠Nangua.json"); + // 瑁呭缁ф壙 + Cb_Use_Item_Sp_Func[Cofig["缁ф壙閰嶇疆"]["缁ф壙鍒搁亾鍏稩D"]] <- InheritFuncBynangua; +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/瑁呭缁ф壙鍒/瑁呭缁ф壙鍒竉Lenheart.json b/绀轰緥椤圭洰/瑁呭缁ф壙鍒/瑁呭缁ф壙鍒竉Lenheart.json new file mode 100644 index 0000000..8f4df3f --- /dev/null +++ b/绀轰緥椤圭洰/瑁呭缁ф壙鍒/瑁呭缁ф壙鍒竉Lenheart.json @@ -0,0 +1,13 @@ +{ + "缁ф壙鍒竔d_涓嶅彲鐑噸杞": 17577, + "鍏憡鎻愮ず1":"璇峰皢宸插己鍖/澧炲箙/閿婚犵殑瑁呭鏀惧埌\n[瑁呭鏍廬 鐨勭涓鏍硷紝瑕佺户鎵跨殑瑁呭鏀惧埌绗簩鏍笺", + "鍏憡鎻愮ず2":"缁ф壙鎴栬缁ф壙鐨勮澶囦笉鑳芥槸绉板彿锛", + "鍏憡鎻愮ず3":"缁ф壙澶辫触锛乗n[姝﹀櫒]\n鍙兘缁ф壙鑷筹細\n[姝﹀櫒]锛", + "鍏憡鎻愮ず4":"缁ф壙澶辫触锛乗n[棣栭グ]\n鍙兘缁ф壙鑷筹細\n[棣栭グ]", + "鍏憡鎻愮ず5":"缁ф壙澶辫触锛乗n[榄旀硶鐭炽佽緟鍔╄澶嘳鍙兘缁ф壙鑷:\n[榄旀硶鐭虫垨杈呭姪瑁呭]", + "鍏憡鎻愮ず6":"缁ф壙澶辫触锛乗n[鎶よ偐銆佷笂琛c佷笅瑁呫佽叞甯︺侀瀷]\n鍙兘缁ф壙鑷筹細\n[鎶よ偐銆佷笂琛c佷笅瑁呫佽叞甯︺侀瀷]", + "鍏憡鎻愮ず7":"鍙湁澶т簬鎴栬呯瓑浜 銆60绾с 鐨勮澶囨墠鍙互缁ф壙銆", + "鍏憡鎻愮ず8":"鍙湁 銆愮鍣ㄣ 浠ヤ笂鐨勫搧绾ф墠鑳界户鎵裤", + "鏈浣庡彲杞Щ绛夌骇":60, + "鏈浣庡彲杞Щ鍝佺骇":3 +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/瑁呭缁ф壙鍒/瑁呭缁ф壙鍒搁厤缃甠Nangua.json b/绀轰緥椤圭洰/瑁呭缁ф壙鍒/瑁呭缁ф壙鍒搁厤缃甠Nangua.json new file mode 100644 index 0000000..fdf23de --- /dev/null +++ b/绀轰緥椤圭洰/瑁呭缁ф壙鍒/瑁呭缁ф壙鍒搁厤缃甠Nangua.json @@ -0,0 +1,30 @@ +{ + "缁ф壙閰嶇疆":{ + "缁ф壙鍒搁亾鍏稩D":123014, + "瑁呭1鎽嗘斁浣嶇疆":9, + "瑁呭2鎽嗘斁浣嶇疆":10, + "瑁呭绛夌骇澶т簬绛変簬澶氬皯鍏佽缁ф壙":50, + "瑁呭绛夌骇璺ㄥ害瓒呰繃澶氬皯涓嶅厑璁哥户鎵":10, + "瑁呭鍝佺骇浣庝簬澶氬皯涓嶅厑璁哥户鎵":3, + "绂佹缁ф壙瑁呭ID":[1222, 1111], + "绂佹缁ф壙瑁呭绫诲瀷":[11], + "鏄惁鍏佽涓嶅悓鍝佺骇鐨勮澶囩户鎵(true鍙互,false涓嶅彲浠)":true, + "鏄惁鍏佽缁ф壙寮傜晫姘旀伅(true鍙互,false涓嶅彲浠)":false, + "缁ф壙澶辫触鎻愮ず1":" 缁ф壙澶辫触\n璇锋鏌ヨ澶囨爮绗竴/浜屾牸鏄惁瀛樺湪瑁呭!", + "缁ф壙澶辫触鎻愮ず2":" 缁ф壙澶辫触\n璇锋鏌ヨ澶囩被鍨嬫槸鍚︽纭!", + "缁ф壙澶辫触鎻愮ず3":" 缁ф壙澶辫触\n璇锋鏌ヨ澶囩瓑绾ф槸鍚︽纭!", + "缁ф壙澶辫触鎻愮ず4":" 缁ф壙澶辫触\n璇锋鏌ヨ澶囧搧绾ф槸鍚︽纭!", + "缁ф壙澶辫触鎻愮ず5":" 缁ф壙澶辫触\n鐗规畩/鎸囧畾瑁呭 [%s] 绂佹缁ф壙!" + }, + "缁ф壙鎴愬姛鎻愮ず":{ + "淇℃伅鍙戦佷綅缃": 37, + "琛ㄦ儏": 59, + "淇℃伅1": " 宸叉垚鍔熷皢", + "淇℃伅2": "灞炴х户鎵胯嚦" + }, + "寮圭獥鎻愮ず(true涓哄紑鍚,false涓哄叧闂)":false, + "鎻愮ず1":"寮鍚脊绐楁彁绀洪渶鍦ㄧ兢鏂囦欢涓嬭浇 <瀹㈡埛绔秷鎭233.dll> 鎻掍欢,鍚﹀垯浼氬鑷存父鎴忓穿婧", + "鎻愮ず2":"(瑁呭鏍9-56,绗竴鎺掔涓鏍间负9,绗簩鏍间负10浠ユ绫绘帹)蹇嵎鏍(绗竴鏍间负3,绗簩鏍间负4浠ユ绫绘帹)", + "鎻愮ず3":"瑁呭绫诲瀷缁ф壙鎸囨鍣ㄧ户鎵挎鍣(涓嶅悓鑱屼笟涔熷彲浠ョ户鎵),闃插叿(鑵板甫缁ф壙鑵板甫,闉嬪瓙缁ф壙闉嬪瓙浠ユ绫绘帹,涓嶅悓鐢茬被涔熷彲缁ф壙),棣栭グ鍚岀悊", + "鎻愮ず4":"琛ㄦ儏鍙湪缇ゆ枃浠舵悳绱<琛ㄦ儏>涓嬭浇瀵煎叆pvf" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/瑁呭闀跺祵涓庢椂瑁呴暥宓/Proj.ifo b/绀轰緥椤圭洰/瑁呭闀跺祵涓庢椂瑁呴暥宓/Proj.ifo new file mode 100644 index 0000000..504397d --- /dev/null +++ b/绀轰緥椤圭洰/瑁呭闀跺祵涓庢椂瑁呴暥宓/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "瑁呭闀跺祵涓庢椂瑁呴暥宓", + "ProjectDescribe": "浣跨敤涔嬪墠,璇峰姟蹇呬繚璇佸畨瑁呬簡缇ゅ唴鐨 \"瀹㈡埛绔秷鎭233.dll\" 鎻掍欢,杩欎釜鎻掍欢鏀惧叆浣犲鎴风鐨勬彃浠跺姞杞界洰褰曞嵆鍙痋n濡傛灉浣犳槸0627鐨勫鎴风鐗堟湰杩橀渶瑕佸畨瑁呯兢鍐呯殑 \"0627瑁呭闀跺祵.dll\" 鎻掍欢", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.2, + "ProjectConfig": "瑁呭闀跺祵涓庢椂瑁呴暥宓宊Lenheart.json", + "ProjectFiles": [ + "瑁呭闀跺祵涓庢椂瑁呴暥宓.nut" + ], + "ProjectRunFunc": "_Dps_Equ2AvaJewel_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/瑁呭闀跺祵涓庢椂瑁呴暥宓/瑁呭闀跺祵涓庢椂瑁呴暥宓.nut b/绀轰緥椤圭洰/瑁呭闀跺祵涓庢椂瑁呴暥宓/瑁呭闀跺祵涓庢椂瑁呴暥宓.nut new file mode 100644 index 0000000..a67715e --- /dev/null +++ b/绀轰緥椤圭洰/瑁呭闀跺祵涓庢椂瑁呴暥宓/瑁呭闀跺祵涓庢椂瑁呴暥宓.nut @@ -0,0 +1,590 @@ +class EquimentUseJewel { + + ExecUser = null; + + //寤哄簱寤鸿〃 + function CreateMysqlTable() { + local CreateSql1 = "create database if not exists l_equ_jewel default charset utf8;" + local CreateSql2 = "CREATE TABLE l_equ_jewel.equipment ( equ_id int(11) AUTO_INCREMENT, jewel_data blob NOT NULL,andonglishanbai_flag int(11),date VARCHAR(255), PRIMARY KEY (equ_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8,AUTO_INCREMENT = 150;" + local SqlObj = MysqlPool.GetInstance().GetConnect(); + SqlObj.Exec_Sql(CreateSql1); + SqlObj.Exec_Sql(CreateSql2); + MysqlPool.GetInstance().PutConnect(SqlObj); + } + + function api_get_jewel_socket_data(id) { //鑾峰彇寰界珷鏁版嵁,瀛樺湪杩斿洖寰界珷鏁版嵁,涓嶅瓨鍦ㄨ繑鍥炵┖瀛楄妭鏁版嵁 + local CheckSql = "SELECT jewel_data FROM l_equ_jewel.equipment where equ_id = " + id + ";"; + //浠庢睜瀛愭嬁杩炴帴 + local SqlObj = MysqlPool.GetInstance().GetConnect(); + local Ret = SqlObj.Select(CheckSql, ["binary"]); + //鎶婅繛鎺ヨ繕姹犲瓙 + MysqlPool.GetInstance().PutConnect(SqlObj); + //娌$粨濠氳杩斿洖false + if (Ret.len()< 1 || Ret[0][0] == null) { + return 0; + } else { + return Ret[0][0]; + } + } + + function api_exitjeweldata(id) { //0浠h〃涓嶅瓨鍦,瀛樺湪杩斿洖1 + local CheckSql = "SELECT andonglishanbai_flag FROM l_equ_jewel.equipment where equ_id = " + id + ";"; + //浠庢睜瀛愭嬁杩炴帴 + local SqlObj = MysqlPool.GetInstance().GetConnect(); + local Ret = SqlObj.Select(CheckSql, ["int"]); + //鎶婅繛鎺ヨ繕姹犲瓙 + MysqlPool.GetInstance().PutConnect(SqlObj); + //娌$粨濠氳杩斿洖false + if (Ret.len()< 1 || Ret[0][0] == null) { + return 0; + } else { + return Ret[0][0]; + } + } + + function save_equiment_socket(socket_data, id) { //0浠h〃涓嶅瓨鍦,瀛樺湪杩斿洖1 + local CheckSql = "UPDATE l_equ_jewel.equipment SET jewel_data = 0x" + socket_data + " WHERE equ_id = " + id + ";"; + //浠庢睜瀛愭嬁杩炴帴 + local SqlObj = MysqlPool.GetInstance().GetConnect(); + local Ret = SqlObj.Select(CheckSql, ["int"]); + //鎶婅繛鎺ヨ繕姹犲瓙 + MysqlPool.GetInstance().PutConnect(SqlObj); + //娌$粨濠氳杩斿洖false + if (Ret.len()< 1 || Ret[0][0] == null) { + return false; + } else { + return true; + } + } + + function CUser_SendCmdErrorPacket(SUser, id, id2) { + local Pack = Packet(); + Pack.Put_Header(1, id); + Pack.Put_Byte(0); + Pack.Put_Byte(id2); + Pack.Finalize(true); + SUser.Send(Pack); + Pack.Delete(); + } + + function api_PacketBuf_get_buf(packet_buf) { + return NativePointer(NativePointer(packet_buf).add(20).readPointer()).add(13); + } + + function add_equiment_socket(equipment_type) { //0浠h〃寮瀛斿け璐 鎴愬姛杩斿洖鏍囪瘑 + /* + 姝﹀櫒10 + 绉板彿11 + 涓婅。12 + 澶磋偐13 + 涓嬭。14 + 闉嬪瓙15 + 鑵板甫16 + 椤归摼17 + 鎵嬮暞18 + 鎴掓寚19 + 杈呭姪瑁呭20 + 榄旀硶鐭21 + */ + + /* + 绾㈣壊:'010000000000010000000000000000000000000000000000000000000000' A + 榛勮壊:'020000000000020000000000000000000000000000000000000000000000' B + 缁胯壊:'040000000000040000000000000000000000000000000000000000000000' C + 钃濊壊:'080000000000080000000000000000000000000000000000000000000000' D + 鐧介噾:'100000000000100000000000000000000000000000000000000000000000' + */ + local DB_JewelsocketData = ""; + switch (equipment_type) { + case 10: //姝﹀櫒10 SS + DB_JewelsocketData = "100000000000000000000000000000000000000000000000000000000000" + break; + case 11: //绉板彿11 SS + DB_JewelsocketData = "100000000000000000000000000000000000000000000000000000000000" + break; + case 12: //涓婅。12 C + DB_JewelsocketData = "040000000000040000000000000000000000000000000000000000000000" + break; + case 13: //澶磋偐13 B + DB_JewelsocketData = "020000000000020000000000000000000000000000000000000000000000" + break; + case 14: //涓嬭。14 C + DB_JewelsocketData = "040000000000040000000000000000000000000000000000000000000000" + break; + case 15: //闉嬪瓙15 D + DB_JewelsocketData = "080000000000080000000000000000000000000000000000000000000000" + break; + case 16: //鑵板甫16 A + DB_JewelsocketData = "010000000000010000000000000000000000000000000000000000000000" + break; + case 17: //椤归摼17 B + DB_JewelsocketData = "020000000000020000000000000000000000000000000000000000000000" + break; + case 18: //鎵嬮暞18 D + DB_JewelsocketData = "080000000000080000000000000000000000000000000000000000000000" + break; + case 19: //鎴掓寚19 A + DB_JewelsocketData = "010000000000010000000000000000000000000000000000000000000000" + break; + case 20: //杈呭姪瑁呭20 S + DB_JewelsocketData = "100000000000000000000000000000000000000000000000000000000000" + break; + case 21: //榄旀硶鐭21 S + DB_JewelsocketData = "100000000000000000000000000000000000000000000000000000000000" + break; + default: + DB_JewelsocketData = "000000000000000000000000000000000000000000000000000000000000" + break; + } + local date = time(); + local Ct = Sq_GetTimestampString(); + date = date.tostring() + Ct; + + local CheckSql = "INSERT INTO l_equ_jewel.equipment (andonglishanbai_flag,jewel_data,date) VALUES(1,0x" + DB_JewelsocketData + ",\'" + date + "\');"; + local CheckSql1 = "SELECT equ_id FROM l_equ_jewel.equipment where date = \'" + date + "\';"; + //浠庢睜瀛愭嬁杩炴帴 + local SqlObj = MysqlPool.GetInstance().GetConnect(); + SqlObj.Select(CheckSql, ["int"]); + local Ret = SqlObj.Select(CheckSql1, ["int"]); + //鎶婅繛鎺ヨ繕姹犲瓙 + MysqlPool.GetInstance().PutConnect(SqlObj); + if (Ret.len()< 1 || Ret[0][0] == null) { + return 0; + } else { + return Ret[0][0]; + } + return 0; + } + + function CStackableItem_getJewelTargetSocket(C_Object) { + return Sq_CallFunc(S_Ptr("0x0822CA28"), "int", ["pointer"], C_Object); + } + + function CUser_SendUpdateItemList_DB(SUser, Slot, DB_JewelSocketData) { + local Pack = Packet(); + Pack.Put_Header(0, 14); + Pack.Put_Byte(0); + Pack.Put_Short(1); + local InvenObj = SUser.GetInven(); + Sq_CallFunc(S_Ptr("0x084FC6BC"), "int", ["pointer", "int", "int", "pointer"], InvenObj.C_Object, 1, Slot, Pack.C_Object); + Pack.Put_BinaryEx(DB_JewelSocketData.C_Object, 30); + Pack.Finalize(true); + SUser.Send(Pack); + Pack.Delete(); + } + + function GetByte(value) { + local Blob = blob(); + Blob.writen(value, 'w'); + return Blob; + } + + function intToHex(num) { + if (num == 0) { + return "0"; + } + local hexDigits = "0123456789abcdef"; + local hexString = ""; + while (num > 0) { + local remainder = num % 16; + hexString = hexDigits[remainder] + hexString; + num = (num / 16).tointeger(); + } + return hexString; + } + + function lengthCutting(str, ystr, num, maxLength) { + // 濡傛灉瀛楃涓查暱搴﹀皬浜庢渶澶ч暱搴︼紝鍦ㄥ墠闈㈣ˉ0 + local lengthDiff = maxLength - str.len(); + if (lengthDiff > 0) { + local zeroPadding = ""; + for (local i = 0; i< lengthDiff; i++) { + zeroPadding += "0"; + } + str = zeroPadding + str; + } + local strArr = ""; + for (local i = 0; i< str.len(); i += num) { + local endIndex = i + num; + if (endIndex > str.len()) { + endIndex = str.len(); + } + strArr += str.slice(i, endIndex); + } + return ystr + strArr; + } + + + + + + function HackAddSocketToAvatarLogic(Flag) { + if (Flag) { + Sq_WriteByteArr(S_Ptr("821A449"), [0x90, 0x90]); + Sq_WriteByteArr(S_Ptr("0x821A44B"), array(36, 0x90)); + } else { + Sq_WriteByteArr(S_Ptr("821A449"), [0x74, 0x2B]); + } + } + + + + function FixFunction() { + //绉板彿鍥炲寘 + Cb_CTitleBook_putItemData_Leave_Func.EquimentUseJewel <- function(args) { + local JewelSocketData = api_get_jewel_socket_data(NativePointer(args[3]).add(25).readU32()); + local ret = args.pop(); + if (JewelSocketData && NativePointer(JewelSocketData).add(0).readU8() != 0) { + local Pack = Packet(args[1]); + Pack.Put_BinaryEx(JewelSocketData.C_Object, 30); + } + return null; + }.bindenv(this); + + //璁捐鍥剧户鎵 + Cb_CUsercopyItemOption_Enter_Func.EquimentUseJewel <- function(args) { + local jewelSocketID = NativePointer(args[2]).add(25).readU32(); + NativePointer(args[1]).add(25).writeU32(jewelSocketID); + return null; + }.bindenv(this); + + //瑁呭寮瀛 + Cb_AddSocketToAvatar_Enter_Func.EquimentUseJewel <- function(args) { + local SUser = User(args[1]); + local PackCopyBuffer = Memory.alloc(10001); + Memory.copy(PackCopyBuffer, NativePointer(args[2]), 1000); + local Pack = Packet(PackCopyBuffer.C_Object); + local equ_slot = Pack.GetShort(); + local equitem_id = Pack.GetInt(); + local sta_slot = Pack.GetShort(); + local CurCharacInvenW = SUser.GetInven(); + local inven_item = CurCharacInvenW.GetSlot(1, equ_slot); + + if (equ_slot > 56) { //淇敼鍚庯細澶т簬56鍒欐槸鏃惰瑁呭 鍘燂細濡傛灉涓嶆槸瑁呭鏂囦欢灏辫皟鐢ㄥ師閫昏緫 + equ_slot = equ_slot - 57; + local C_PacketBuf = api_PacketBuf_get_buf(args[2]) //鑾峰彇鍘熷灏佸寘鏁版嵁 + C_PacketBuf.add(0).writeShort(equ_slot) //淇敼鎺夎澶囦綅缃俊鎭 鏃惰绫婚暥宓屼粠57寮濮嬨 + + //鎵ц鍘熼昏緫 + return null; + } + //濡傛灉宸插紑鍚暥宓屾Ы鍒欎笉鎵ц + local equ_id = NativePointer(inven_item.C_Object).add(25).readU32(); + if (api_exitjeweldata(equ_id)) { + CUser_SendCmdErrorPacket(SUser, 209, 19); + HackAddSocketToAvatarLogic(true); + return null; + } + + local item = PvfItem.GetPvfItemById(equitem_id); + local ItemType = Sq_CallFunc(S_Ptr("0x08514D26"), "int", ["pointer"], item.C_Object); + + if (ItemType == 10) { + SUser.SendNotiBox("瑁呭涓烘鍣ㄧ被鍨,涓嶆敮鎸佹墦瀛!", 1) + CUser_SendCmdErrorPacket(SUser, 209, 0); + HackAddSocketToAvatarLogic(true); + return null; + } else if (ItemType == 11) { + SUser.SendNotiBox("瑁呭涓虹О鍙风被鍨,涓嶆敮鎸佹墦瀛!", 1) + CUser_SendCmdErrorPacket(SUser, 209, 0); + HackAddSocketToAvatarLogic(true); + return null; + } + + local id = add_equiment_socket(ItemType); + + Sq_Inven_RemoveItemFormCount(CurCharacInvenW.C_Object, 1, sta_slot, 1, 8, 1); //鍒犻櫎鎵撳瓟閬撳叿 + NativePointer(inven_item.C_Object).add(25).writeU32(id) //鍐欏叆妲戒綅鏍囪瘑 + SUser.SendUpdateItemList(1, 0, equ_slot); + + local JewelSocketData = api_get_jewel_socket_data(id); + CUser_SendUpdateItemList_DB(SUser, equ_slot, JewelSocketData); //鐢ㄤ簬鏇存柊闀跺祵鍚庣殑瑁呭鏄剧ず,杩欓噷鐢ㄧ殑鏄甫闀跺祵鏁版嵁鐨勬洿鏂拌儗鍖呭嚱鏁,骞堕潪CUser_SendUpdateItemList + + local Pack = Packet(); + Pack.Put_Header(1, 209); + Pack.Put_Byte(1); + Pack.Put_Short(equ_slot + 104); + Pack.Put_Short(sta_slot); + Pack.Finalize(true); + SUser.Send(Pack); + Pack.Delete(); + HackAddSocketToAvatarLogic(true); + return null; + }.bindenv(this); + + Cb_AddSocketToAvatar_Leave_Func.EquimentUseJewel <- function(args) { + HackAddSocketToAvatarLogic(false); + return null; + }.bindenv(this); + + //瑁呭闀跺祵鍜屾椂瑁呴暥宓 + Cb_Dispatcher_UseJewel_Enter_Func.EquimentUseJewel <- function(args) { + local SUser = User(args[1]); + local Pack = Packet(args[2]); + local PackIndex = NativePointer(args[2]).add(4).readInt(); + local State = SUser.GetState(); + if (State != 3) return null; + + local avartar_inven_slot = Pack.GetShort(); + local avartar_item_id = Pack.GetInt(); + local emblem_cnt = Pack.GetByte(); + + //涓嬮潰鏄弬鐓у師鏃惰闀跺祵鐨勬濊矾鍐欑殑銆備釜鍒偣鏍囪鍑烘潵銆 + if (avartar_inven_slot > 104) { + local equipment_inven_slot = avartar_inven_slot - 104; //鍙栧嚭鐪熷疄瑁呭鎵鍦ㄨ儗鍖呬綅缃 + local Inven = SUser.GetInven(); + local equipment = Inven.GetSlot(1, equipment_inven_slot); + //鏍¢獙鏄惁鍚堟硶 + if (!equipment || equipment.IsEmpty || (equipment.GetIndex() != avartar_item_id) || SUser.CheckItemLock(1, equipment_inven_slot)) return; + + local id = NativePointer(equipment.C_Object).add(25).readU32(); + local JewelSocketData = api_get_jewel_socket_data(id); + if (!JewelSocketData) return; + + local emblems = {}; + if (emblem_cnt <= 3) { + for (local i = 0; i< emblem_cnt; i++) { + local emblem_inven_slot = Pack.GetShort(); + local emblem_item_id = Pack.GetInt(); + local equipment_socket_slot = Pack.GetByte(); + local emblem = Inven.GetSlot(1, emblem_inven_slot); + //鏍¢獙寰界珷鍙婃彃妲芥暟鎹槸鍚﹀悎娉 + if (!emblem || emblem.IsEmpty || (emblem.GetIndex() != emblem_item_id) || (equipment_socket_slot >= 3)) return; + + //鏍¢獙寰界珷鏄惁婊¤冻鏃惰鎻掓Ы棰滆壊瑕佹眰 + //鑾峰彇寰界珷pvf鏁版嵁 + local citem = PvfItem.GetPvfItemById(emblem_item_id); + if (!citem) return; + + //鏍¢獙寰界珷绫诲瀷 + if (!citem.IsStackable() || citem.GetItemType() != 20) return; + + //鑾峰彇寰界珷鏀寔鐨勬彃妲 + local emblem_socket_type = CStackableItem_getJewelTargetSocket(citem.C_Object); + //鑾峰彇瑕侀暥宓岀殑鏃惰鎻掓Ы绫诲瀷 + local avartar_socket_type = JewelSocketData.add(equipment_socket_slot * 6).readShort(); + + if (!(emblem_socket_type & avartar_socket_type)) { + + return; + } + + emblems[equipment_socket_slot] <- [emblem_inven_slot, emblem_item_id]; + } + } + + + foreach(equipment_socket_slot, emblemObject in emblems) { + //鍒犻櫎寰界珷 + local emblem_inven_slot = emblemObject[0]; + Sq_Inven_RemoveItemFormCount(Inven.C_Object, 1, emblem_inven_slot, 1, 8, 1); //鍒犻櫎鎵撳瓟閬撳叿 + //璁剧疆鏃惰鎻掓Ы鏁版嵁 + local emblem_item_id = emblemObject[1]; + JewelSocketData.add(2 + 6 * equipment_socket_slot).writeU32(emblem_item_id); + } + + local Buf = Sq_Point2Blob(JewelSocketData.C_Object, 30); + local Str = ""; + foreach(Value in Buf) { + Str += format("%02X", Value); + } + + save_equiment_socket(Str, id); + // if (!save_equiment_socket(DB_JewelSocketData, id)) { + // print("鍐欏叆澶辫触浜"); + // return null; + // } + + CUser_SendUpdateItemList_DB(SUser, equipment_inven_slot, JewelSocketData); //鐢ㄤ簬鏇存柊闀跺祵鍚庣殑瑁呭鏄剧ず,杩欓噷鐢ㄧ殑鏄甫闀跺祵鏁版嵁鐨勬洿鏂拌儗鍖呭嚱鏁,骞堕潪CUser_SendUpdateItemList + local Pack = Packet(); + Pack.Put_Header(1, 209); + Pack.Put_Byte(1); + Pack.Put_Short(equipment_inven_slot + 104); + Pack.Finalize(true); + SUser.Send(Pack); + Pack.Delete(); + + return; + } + + AvatarLogic(args, PackIndex); + + return null; + }.bindenv(this); + + Cb_Dispatcher_UseJewel_Leave_Func.EquimentUseJewel <- function(args) { + return -1; + }.bindenv(this); + + //棰濆鏁版嵁鍖,鍙戦佽澶囬暥宓屾暟鎹粰鏈湴澶勭悊 + Cb_InterfacePacketBuf_put_packet_Leave_Func.EquimentUseJewel <- function(args) { + local ret = args.pop(); + local Inven_Item = NativePointer(args[1]); + if (Inven_Item.add(1).readU8() == 1) { + local ItemObj = Item(args[1]); + local JewelSocketData = api_get_jewel_socket_data(NativePointer(ItemObj.C_Object).add(25).readU32()); + if (JewelSocketData && JewelSocketData.add(0).readU8() != 0) { + local Pack = Packet(args[0]); + Pack.Put_BinaryEx(JewelSocketData.C_Object, 30); + } + } + return null; + }.bindenv(this); + + L_HookEquimentUseJewel(); + } + + + + + function WongWork_CAvatarItemMgr_getJewelSocketData(a, b) { + return Sq_CallFunc(S_Ptr("0x82F98F8"), "pointer", ["pointer", "int"], a, b); + } + + function CStackableItem_getJewelTargetSocket(C_Object) { + return Sq_CallFunc(S_Ptr("0x0822CA28"), "int", ["pointer"], C_Object); + } + + function CInventory_delete_item(C_Object, Type, Slot, Count, Ps, Log) { + return Sq_CallFunc(S_Ptr("0x850400C"), "int", ["pointer", "int", "int", "int", "int", "int"], C_Object, Type, Slot, Count, Ps, Log); + } + + function api_set_JewelSocketData(jewelSocketData, slot, emblem_item_id) { + if (jewelSocketData) { + NativePointer(jewelSocketData).add(slot * 6 + 2).writeInt(emblem_item_id); + } + } + + function DB_UpdateAvatarJewelSlot_makeRequest(a, b, c) { + return Sq_CallFunc(S_Ptr("0x843081C"), "pointer", ["int", "int", "pointer"], a, b, c); + } + + //鑾峰彇鏃惰鍦ㄦ暟鎹簱涓殑uid + function api_get_avartar_ui_id(avartar) { + return NativePointer(avartar).add(7).readInt(); + } + + + function AvatarLogic(args, PackIndex) { + //瑙掕壊 + local SUser = User(args[1]); + //鍖呮暟鎹 + local Pack = Packet(args[2]); + //杩樺師鍖呰鍙栨暟鎹彿浣 + NativePointer(args[2]).add(4).writeInt(PackIndex); + + //鏍¢獙瑙掕壊鐘舵佹槸鍚﹀厑璁搁暥宓 + if (!SUser || SUser.GetState() != 3) { + return; + } + //鏃惰鎵鍦ㄧ殑鑳屽寘妲 + local Inven_Slot = Pack.GetShort(); + //鏃惰item_id + local Item_Id = Pack.GetInt(); + //鏈闀跺祵寰界珷鏁伴噺 + local Emblem_Count = Pack.GetByte(); + + //鑾峰彇鏃惰閬撳叿 + local InvemObj = SUser.GetInven(); + local AvatarObj = InvemObj.GetSlot(2, Inven_Slot); + + + //鏍¢獙鏃惰 鏁版嵁鏄惁鍚堟硶 + if (!AvatarObj || AvatarObj.IsEmpty || (AvatarObj.GetIndex() != Item_Id) || SUser.CheckItemLock(2, Inven_Slot)) return; + + local Avartar_AddInfo = AvatarObj.GetAdd_Info(); + //鑾峰彇鏃惰绠$悊鍣 + local Inven_AvartarMgr = InvemObj.GetAvatarItemMgr(); + + //鑾峰彇鏃惰鎻掓Ы鏁版嵁 + local Jewel_Socket_Data = WongWork_CAvatarItemMgr_getJewelSocketData(Inven_AvartarMgr, Avartar_AddInfo); + if (!Jewel_Socket_Data) return; + + //鏈澶氬彧鏀寔3涓彃妲 + if (Emblem_Count <= 3) { + local emblems = {}; + + for (local i = 0; i< Emblem_Count; i++) { + //寰界珷鎵鍦ㄧ殑鑳屽寘妲 + local emblem_inven_slot = Pack.GetShort(); + //寰界珷item_id + local emblem_item_id = Pack.GetInt(); + //璇ュ窘绔犻暥宓岀殑鏃惰鎻掓Ыid + local avartar_socket_slot = Pack.GetByte(); + + //鑾峰彇寰界珷閬撳叿 + local EmblemObje = InvemObj.GetSlot(1, emblem_inven_slot); + + //鏍¢獙寰界珷鍙婃彃妲芥暟鎹槸鍚﹀悎娉 + if (!EmblemObje || EmblemObje.IsEmpty || (EmblemObje.GetIndex() != emblem_item_id) || (avartar_socket_slot >= 3)) return; + + //鏍¢獙寰界珷鏄惁婊¤冻鏃惰鎻掓Ы棰滆壊瑕佹眰 + //鑾峰彇寰界珷pvf鏁版嵁 + local citem = PvfItem.GetPvfItemById(emblem_item_id); + if (!citem) return; + + //鏍¢獙寰界珷绫诲瀷 + if (!citem.IsStackable() || citem.GetItemType() != 20) return; + + //鑾峰彇寰界珷鏀寔鐨勬彃妲 + local emblem_socket_type = CStackableItem_getJewelTargetSocket(citem.C_Object); + + //鑾峰彇瑕侀暥宓岀殑鏃惰鎻掓Ы绫诲瀷 + local avartar_socket_type = NativePointer(Jewel_Socket_Data).add(avartar_socket_slot * 6).readShort(); + + if (!(emblem_socket_type & avartar_socket_type)) return; + + emblems[avartar_socket_slot] <- [emblem_inven_slot, emblem_item_id]; + } + + //寮濮嬮暥宓 + foreach(avartar_socket_slot, emblemObject in emblems) { + //鍒犻櫎寰界珷 + local emblem_inven_slot = emblemObject[0]; + CInventory_delete_item(InvemObj.C_Object, 1, emblem_inven_slot, 1, 8, 1); + //璁剧疆鏃惰鎻掓Ы鏁版嵁 + local emblem_item_id = emblemObject[1]; + api_set_JewelSocketData(Jewel_Socket_Data, avartar_socket_slot, emblem_item_id); + } + + //鏃惰鎻掓Ы鏁版嵁瀛樻。 + DB_UpdateAvatarJewelSlot_makeRequest(SUser.GetCID(), api_get_avartar_ui_id(AvatarObj.C_Object), Jewel_Socket_Data); + + //閫氱煡瀹㈡埛绔椂瑁呮暟鎹凡鏇存柊 + SUser.SendUpdateItemList(1, 1, Inven_Slot); + + //鍥炲寘缁欏鎴风 + local Pack = Packet(); + Pack.Put_Header(1, 204); + Pack.Put_Int(1); + Pack.Finalize(true); + SUser.Send(Pack); + Pack.Delete(); + } + + return null; + } + + constructor() { + CreateMysqlTable(); + + FixFunction(); + } +} + +function _Dps_Equ2AvaJewel_Main_() { + local Config = GlobalConfig.Get("瑁呭闀跺祵涓庢椂瑁呴暥宓宊Lenheart.json"); + local PoolObj = MysqlPool.GetInstance(); + local Ip = Config["鏁版嵁搴揑P 涓嶆槸澶栫疆鏁版嵁搴撲笉瑕佹洿鏀"]; + local Port = Config["鏁版嵁搴撶鍙 涓嶆噦涓嶈鏇存敼"]; + local DbName = Config["鏁版嵁搴撶敤鎴峰悕 鏈湴鐢ㄦ埛鍚嶄笉鎳備笉瑕佹洿鏀"]; + local Password = Config["鏁版嵁搴撳瘑鐮 鏈湴瀵嗙爜涓嶆噦涓嶈鏇存敼"]; + //璁剧疆鏁版嵁搴撹繛鎺ヤ俊鎭 + PoolObj.SetBaseConfiguration(Ip, Port, DbName, Password); + //杩炴帴姹犲ぇ灏 + PoolObj.PoolSize = 10; + //鍒濆鍖 + PoolObj.Init(); + //瑁呭闀跺祵淇 + getroottable()._EquimentUseJewel_Object <- EquimentUseJewel(); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/瑁呭闀跺祵涓庢椂瑁呴暥宓/瑁呭闀跺祵涓庢椂瑁呴暥宓宊Lenheart.json b/绀轰緥椤圭洰/瑁呭闀跺祵涓庢椂瑁呴暥宓/瑁呭闀跺祵涓庢椂瑁呴暥宓宊Lenheart.json new file mode 100644 index 0000000..9cf2342 --- /dev/null +++ b/绀轰緥椤圭洰/瑁呭闀跺祵涓庢椂瑁呴暥宓/瑁呭闀跺祵涓庢椂瑁呴暥宓宊Lenheart.json @@ -0,0 +1,6 @@ +{ + "鏁版嵁搴揑P 涓嶆槸澶栫疆鏁版嵁搴撲笉瑕佹洿鏀": "127.0.0.1", + "鏁版嵁搴撶鍙 涓嶆噦涓嶈鏇存敼": 3306, + "鏁版嵁搴撶敤鎴峰悕 鏈湴鐢ㄦ埛鍚嶄笉鎳備笉瑕佹洿鏀": "game", + "鏁版嵁搴撳瘑鐮 鏈湴瀵嗙爜涓嶆噦涓嶈鏇存敼": "uu5!^%jg" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/瑙夐啋鍒/Proj.ifo b/绀轰緥椤圭洰/瑙夐啋鍒/Proj.ifo new file mode 100644 index 0000000..f4e0f1d --- /dev/null +++ b/绀轰緥椤圭洰/瑙夐啋鍒/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "瑙夐啋鍒", + "ProjectDescribe": "鎸夊畼鏂圭殑瑙夐啋鍒告潵鍐欙紝瑙夐啋鍒搁亾鍏峰彲浠ュ鍒 涓荤嚎瀹屾垚鍒 涓绫汇", + "ProjectAuthor": "zz", + "ProjectVersion": 1.1, + "ProjectConfig": "瑙夐啋鍒.json", + "ProjectFiles": [ + "瑙夐啋鍒.nut" + ], + "ProjectRunFunc": "_Dps_AWAKENING_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/瑙夐啋鍒/瑙夐啋鍒.json b/绀轰緥椤圭洰/瑙夐啋鍒/瑙夐啋鍒.json new file mode 100644 index 0000000..fab9aaf --- /dev/null +++ b/绀轰緥椤圭洰/瑙夐啋鍒/瑙夐啋鍒.json @@ -0,0 +1,55 @@ +{ + "config_meta": { + "comment": "瑙夐啋閬撳叿鍔熻兘閰嶇疆琛 v1.0", + "author": "zz", + "create_date": "2025-05-08" + }, + "awaken_items": { + "8020": { + "job": 7, + "grow": 1, + "comment": "鐢锋皵鍔熻閱" + }, + "8021": { + "job": 7, + "grow": 3, + "comment": "鐢疯闇歌閱" + }, + "8022": { + "job": 7, + "grow": 2, + "comment": "鐢锋暎鎵撹閱" + }, + "8024": { + "job": 7, + "grow": 4, + "comment": "鐢锋煍閬撹閱" + }, + "2024051421": { + "job": 9, + "grow": 1, + "comment": "椹墤澹閱" + }, + "2024051422": { + "job": 9, + "grow": 3, + "comment": "濂戦瓟鑰呰閱" + }, + "2024051423": { + "job": 8, + "grow": 2, + "comment": "鍐扮粨甯堣閱" + }, + "2024051424": { + "job": 8, + "grow": 1, + "comment": "鍏冪礌鐖嗙牬瑙夐啋" + }, + "2024051418": { + "job": 4, + "grow": 4, + "comment": "澶嶄粐鑰呰閱" + } + } + } + \ No newline at end of file diff --git a/绀轰緥椤圭洰/瑙夐啋鍒/瑙夐啋鍒.nut b/绀轰緥椤圭洰/瑙夐啋鍒/瑙夐啋鍒.nut new file mode 100644 index 0000000..14b48f7 --- /dev/null +++ b/绀轰緥椤圭洰/瑙夐啋鍒/瑙夐啋鍒.nut @@ -0,0 +1,57 @@ +// =================== 鍔犺浇瑙夐啋閰嶇疆 =================== +local awakenConfig = GlobalConfig.Get("瑙夐啋鍒.json"); +local AWAKEN_ITEMS = {}; + +// 杞崲瀛楃涓查敭鍒版暣鍨嬮敭 +foreach(keyStr, config in awakenConfig.awaken_items) { + try { + AWAKEN_ITEMS[keyStr.tointeger()] <- config; + } catch(e) { + ::print("[瑙夐啋閰嶇疆閿欒] 鏃犳晥鐨処D鏍煎紡: " + keyStr + "\n"); + } +} + +// =================== 瑙夐啋澶勭悊鍑芥暟 =================== +function HandleAwakening(SUser, ItemId) { + // 瀹夊叏鏍¢獙 + if (!(ItemId in AWAKEN_ITEMS)) { + return SendClassChangeError(SUser, "鏃犳晥鐨勮閱掗亾鍏", ItemId); + } + + local config = AWAKEN_ITEMS[ItemId]; + local curJob = SUser.GetCharacJob(); + local curGrow = SUser.GetCharacGrowType(); + local curAwaken = SUser.GetCharacSecondGrowType(); + // 鑾峰彇杞亴閰嶇疆 + local config = AWAKEN_ITEMS[ItemId]; + // 鏉′欢妫鏌 + if (SUser.GetCharacLevel() < 50) + return SendClassChangeError(SUser, "瑙掕壊绛夌骇涓嶈冻50绾э紒", ItemId); + + if (curJob != config.job) + return SendClassChangeError(SUser, "鑱屼笟涓嶇鏃犳硶瑙夐啋锛", ItemId); + + if (curGrow == 0) + return SendClassChangeError(SUser, "璇峰厛瀹屾垚杞亴锛", ItemId); + + if (curGrow == config.grow + 16) + return SendClassChangeError(SUser, "宸茬粡澶勪簬璇ヨ閱掔姸鎬侊紒", ItemId); + + // 鎵ц瑙夐啋 + SUser.ChangeGrowType(config.grow, 1); // 鍋囪绗簩涓弬鏁颁负瑙夐啋鏍囧織 + SUser.InitSkillW(1, 1); + SUser.SendNotiPacket(0, 2, 0); + SUser.SendNotiPacketMessage("瑙夐啋鎴愬姛锛", 0); +} + +// =================== 鍒濆鍖栨敞鍐 =================== +function _Dps_AWAKENING_Main_() { + if ("awaken_items" in awakenConfig) { + foreach(itemId, _ in AWAKEN_ITEMS) { + Cb_Use_Item_Sp_Func[itemId] <- HandleAwakening; + } + ::print("[瑙夐啋绯荤粺] 杞藉叆瑙夐啋鍒告暟閲: " + AWAKEN_ITEMS.len() + "\n"); + } else { + ::print("[瑙夐啋绯荤粺閿欒] 閰嶇疆缂哄け awaken_items 鑺傜偣\n"); + } +} diff --git a/绀轰緥椤圭洰/瑙掕壊鍒濆姝﹀櫒淇敼/Proj.ifo b/绀轰緥椤圭洰/瑙掕壊鍒濆姝﹀櫒淇敼/Proj.ifo new file mode 100644 index 0000000..bb45fa2 --- /dev/null +++ b/绀轰緥椤圭洰/瑙掕壊鍒濆姝﹀櫒淇敼/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "瑙掕壊鍒濆姝﹀櫒淇敼", + "ProjectDescribe": "淇敼榛戞殫姝﹀+鍜岀紨閫犵殑鍒濆姝﹀櫒", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.1, + "ProjectConfig": "瑙掕壊鍒濆姝﹀櫒淇敼_Lenheart.json", + "ProjectFiles": [ + "瑙掕壊鍒濆姝﹀櫒淇敼.nut" + ], + "ProjectRunFunc": "_Dps_SetInitiaweapon_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/瑙掕壊鍒濆姝﹀櫒淇敼/瑙掕壊鍒濆姝﹀櫒淇敼.nut b/绀轰緥椤圭洰/瑙掕壊鍒濆姝﹀櫒淇敼/瑙掕壊鍒濆姝﹀櫒淇敼.nut new file mode 100644 index 0000000..74d29c3 --- /dev/null +++ b/绀轰緥椤圭洰/瑙掕壊鍒濆姝﹀櫒淇敼/瑙掕壊鍒濆姝﹀櫒淇敼.nut @@ -0,0 +1,13 @@ +function _Dps_SetInitiaweapon_Logic_() { + local Config = GlobalConfig.Get("瑙掕壊鍒濆姝﹀櫒淇敼_Lenheart.json"); + NativePointer("0x081C0CB2").writeInt(Config["榛戞殫姝﹀+姝﹀櫒"].tointeger()); + NativePointer("0x081C0CBB").writeInt(Config["缂旈犳鍣"].tointeger()); +} + +function _Dps_SetInitiaweapon_Main_() { + _Dps_SetInitiaweapon_Logic_(); +} + +function _Dps_SetInitiaweapon_Main_Reload_(OldConfig) { + _Dps_SetInitiaweapon_Logic_(); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/瑙掕壊鍒濆姝﹀櫒淇敼/瑙掕壊鍒濆姝﹀櫒淇敼_Lenheart.json b/绀轰緥椤圭洰/瑙掕壊鍒濆姝﹀櫒淇敼/瑙掕壊鍒濆姝﹀櫒淇敼_Lenheart.json new file mode 100644 index 0000000..fdb14bc --- /dev/null +++ b/绀轰緥椤圭洰/瑙掕壊鍒濆姝﹀櫒淇敼/瑙掕壊鍒濆姝﹀櫒淇敼_Lenheart.json @@ -0,0 +1,4 @@ +{ + "缂旈犳鍣": 27600, + "榛戞殫姝﹀+姝﹀櫒":35001 +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄/Proj.ifo b/绀轰緥椤圭洰/璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄/Proj.ifo new file mode 100644 index 0000000..2f8f0cc --- /dev/null +++ b/绀轰緥椤圭洰/璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄", + "ProjectDescribe": "璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.0, + "ProjectConfig": "璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄恄Lenheart.json", + "ProjectFiles": [ + "璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄.nut" + ], + "ProjectRunFunc": "_Dps_SetGameMaxLevel_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄/璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄.nut b/绀轰緥椤圭洰/璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄/璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄.nut new file mode 100644 index 0000000..f2044fd --- /dev/null +++ b/绀轰緥椤圭洰/璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄/璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄.nut @@ -0,0 +1,12 @@ +function _Dps_SetGameMaxLevel_Logic_() { + local Config = GlobalConfig.Get("璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄恄Lenheart.json"); + GameManager.SetGameMaxLevel(Config["绛夌骇涓婇檺"]); +} + +function _Dps_SetGameMaxLevel_Main_() { + _Dps_SetGameMaxLevel_Logic_(); +} + +function _Dps_SetGameMaxLevel_Main_Reload(OldConfig) { + _Dps_SetGameMaxLevel_Logic_(); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄/璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄恄Lenheart.json b/绀轰緥椤圭洰/璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄/璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄恄Lenheart.json new file mode 100644 index 0000000..d00d3c8 --- /dev/null +++ b/绀轰緥椤圭洰/璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄/璁剧疆鏈嶅姟鍣ㄧ瓑绾т笂闄恄Lenheart.json @@ -0,0 +1,3 @@ +{ + "绛夌骇涓婇檺": 86 +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/璁剧疆瑁呭瑙i攣鏃堕棿/Proj.ifo b/绀轰緥椤圭洰/璁剧疆瑁呭瑙i攣鏃堕棿/Proj.ifo new file mode 100644 index 0000000..fb8e94c --- /dev/null +++ b/绀轰緥椤圭洰/璁剧疆瑁呭瑙i攣鏃堕棿/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "璁剧疆瑁呭瑙i攣鏃堕棿", + "ProjectDescribe": "璁剧疆瑁呭鐨勮В閿佹椂闂", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.1, + "ProjectConfig": "璁剧疆瑁呭瑙i攣鏃堕棿_Lenheart.json", + "ProjectFiles": [ + "璁剧疆瑁呭瑙i攣鏃堕棿.nut" + ], + "ProjectRunFunc": "_Dps_SetEquipmentUnlockTime_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/璁剧疆瑁呭瑙i攣鏃堕棿/璁剧疆瑁呭瑙i攣鏃堕棿.nut b/绀轰緥椤圭洰/璁剧疆瑁呭瑙i攣鏃堕棿/璁剧疆瑁呭瑙i攣鏃堕棿.nut new file mode 100644 index 0000000..fcfa277 --- /dev/null +++ b/绀轰緥椤圭洰/璁剧疆瑁呭瑙i攣鏃堕棿/璁剧疆瑁呭瑙i攣鏃堕棿.nut @@ -0,0 +1,12 @@ +function _Dps_SetEquipmentUnlockTime_Logic_() { + local Config = GlobalConfig.Get("璁剧疆瑁呭瑙i攣鏃堕棿_Lenheart.json"); + GameManager.SetItemLockTime(Config["璁剧疆瑁呭瑙i攣闇瑕佺殑鍐峰嵈鏃堕棿_鍗曚綅绉"]); +} + +function _Dps_SetEquipmentUnlockTime_Main_() { + _Dps_SetEquipmentUnlockTime_Logic_(); +} + +function _Dps_SetEquipmentUnlockTime_Main_Reload(OldConfig) { + _Dps_SetEquipmentUnlockTime_Logic_(); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/璁剧疆瑁呭瑙i攣鏃堕棿/璁剧疆瑁呭瑙i攣鏃堕棿_Lenheart.json b/绀轰緥椤圭洰/璁剧疆瑁呭瑙i攣鏃堕棿/璁剧疆瑁呭瑙i攣鏃堕棿_Lenheart.json new file mode 100644 index 0000000..aa1fd60 --- /dev/null +++ b/绀轰緥椤圭洰/璁剧疆瑁呭瑙i攣鏃堕棿/璁剧疆瑁呭瑙i攣鏃堕棿_Lenheart.json @@ -0,0 +1,3 @@ +{ + "璁剧疆瑁呭瑙i攣闇瑕佺殑鍐峰嵈鏃堕棿_鍗曚綅绉": 10 +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/璺ㄧ晫鐭/Proj.ifo b/绀轰緥椤圭洰/璺ㄧ晫鐭/Proj.ifo new file mode 100644 index 0000000..3b31c24 --- /dev/null +++ b/绀轰緥椤圭洰/璺ㄧ晫鐭/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "璺ㄧ晫鐭", + "ProjectDescribe": "閫氳繃鎸囧畾ID鐨勯亾鍏凤紝灏嗚澶囪儗鍖呯涓鏍肩殑瑁呭璺ㄧ晫銆俓n閰嶇疆涓慨鏀笴rossoverId鍙慨鏀硅法鐣岀煶鐨処D 淇敼NoCrossIdArr鍙鍔犱笉鍙法鐣岀殑ID銆", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.4, + "ProjectConfig": "璺ㄧ晫鐭砡Lenheart.json", + "ProjectFiles": [ + "璺ㄧ晫鐭.nut" + ], + "ProjectRunFunc": "_Dps_CrossBorderStones_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/璺ㄧ晫鐭/璺ㄧ晫鐭.nut b/绀轰緥椤圭洰/璺ㄧ晫鐭/璺ㄧ晫鐭.nut new file mode 100644 index 0000000..a8566b0 --- /dev/null +++ b/绀轰緥椤圭洰/璺ㄧ晫鐭/璺ㄧ晫鐭.nut @@ -0,0 +1,92 @@ + + + +function _Dps_CrossBorderStones_Logic_() +{ + local Cofig = GlobalConfig.Get("璺ㄧ晫鐭砡Lenheart.json"); + + Cb_Use_Item_Sp_Func[Cofig.CrossoverId.tointeger()] <- function(SUser, ItemId) { + local Cofig = GlobalConfig.Get("璺ㄧ晫鐭砡Lenheart.json"); + + //鑾峰彇璐﹀彿閲戝簱瀵硅薄 + local CargoObj = SUser.GetAccountCargo(); + //鑾峰彇璐﹀彿閲戝簱涓殑涓涓┖鏍煎瓙 + local EmptySlot = CargoObj.GetEmptySlot(); + + //濡傛灉娌℃湁绌烘牸瀛 + if (EmptySlot == -1) { + SUser.SendNotiPacketMessage(Cofig.CrossoverStr2, 8); + //涓嶆墸闄ら亾鍏 + Timer.SetTimeOut(function() + { + SUser.GiveItem(ItemId, 1); + },1); + return; + } + + //鑾峰彇瑙掕壊鑳屽寘 + local InvenObj = SUser.GetInven(); + //鑾峰彇闇瑕佽浆绉荤殑瑁呭 杩欓噷榛樿鍐欑殑瑁呭鏍忕涓涓牸瀛 + local ItemObj = InvenObj.GetSlot(Inven.INVENTORY_TYPE_ITEM, 9); + //鑾峰彇瑁呭ID + local EquipId = ItemObj.GetIndex(); + //鑾峰彇瑁呭鍚嶅瓧 + local ItemName = PvfItem.GetNameById(EquipId); + //鑾峰彇閰嶇疆涓笉鍙法鐣岀殑ID鏁扮粍 + local NoCrossId = Cofig.NoCrossIdArr; + //濡傛灉杩欎釜瑁呭涓嶅彲璺ㄧ晫 + if (NoCrossId.find(EquipId) != null) { + SUser.SendNotiPacketMessage(format(Cofig.CrossoverStr5, ItemName), 7); + //涓嶆墸闄ら亾鍏 + Timer.SetTimeOut(function() + { + SUser.GiveItem(ItemId, 1); + },1); + return; + } + //濡傛灉娌℃壘鍒拌繖涓牸瀛愮殑瑁呭 + if (!ItemName) { + SUser.SendNotiPacketMessage(Cofig.CrossoverStr1, 8); + //涓嶆墸闄ら亾鍏 + Timer.SetTimeOut(function() + { + SUser.GiveItem(ItemId, 1); + },1); + return; + } + //璺ㄧ晫 + local Flag = CargoObj.InsertItem(ItemObj, EmptySlot); + if (Flag == -1) { + SUser.SendNotiPacketMessage(Cofig.CrossoverStr3, 8); + //涓嶆墸闄ら亾鍏 + Timer.SetTimeOut(function() + { + SUser.GiveItem(ItemId, 1); + },1); + } else { + //閿姣佽儗鍖呬腑鐨勯亾鍏 + ItemObj.Delete(); + //鍒锋柊鐜╁鑳屽寘鍒楄〃 + SUser.SendUpdateItemList(1, 0, 9); + //鍒锋柊璐﹀彿閲戝簱鍒楄〃 + CargoObj.SendItemList(); + SUser.SendNotiPacketMessage(format(Cofig.CrossoverStr4, ItemName), 7); + } + } +} + + + +//鍔犺浇鍏ュ彛 +function _Dps_CrossBorderStones_Main_() { + _Dps_CrossBorderStones_Logic_(); +} + +//閲嶈浇鍏ュ彛 +function _Dps_CrossBorderStones_Main_Reload_(OldConfig) { + //鍏堥攢姣佸師鏉ユ敞鍐岀殑 + Cb_Use_Item_Sp_Func.rawdelete(OldConfig.CrossoverId.tointeger()); + + //閲嶆柊娉ㄥ唽 + _Dps_CrossBorderStones_Logic_(); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/璺ㄧ晫鐭/璺ㄧ晫鐭砡Lenheart.json b/绀轰緥椤圭洰/璺ㄧ晫鐭/璺ㄧ晫鐭砡Lenheart.json new file mode 100644 index 0000000..ca1bf9c --- /dev/null +++ b/绀轰緥椤圭洰/璺ㄧ晫鐭/璺ㄧ晫鐭砡Lenheart.json @@ -0,0 +1,9 @@ +{ + "CrossoverStr1": "瑁呭鏍1鍙蜂綅娌℃湁瑁呭..", + "CrossoverStr2": "璺ㄧ晫澶辫触锛岃妫鏌ヤ竴涓嬭处鍙烽噾搴撴槸鍚︽病鏈夊紑鍚垨鑰呮病鏈夌┖浣", + "CrossoverStr3": "璺ㄧ晫澶辫触", + "CrossoverStr4": "璺ㄧ晫鎴愬姛,宸茬粡瑁呭鏍忕涓鏍肩殑 [%s] 杞Щ鑷宠处鍙烽噾搴", + "CrossoverStr5": "璺ㄧ晫澶辫触, [%s] 涓嶅彲浠ヨ法鐣", + "CrossoverId": 17577, + "NoCrossIdArr" : [26058] +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/杞亴鍒/Proj.ifo b/绀轰緥椤圭洰/杞亴鍒/Proj.ifo new file mode 100644 index 0000000..1fc83d3 --- /dev/null +++ b/绀轰緥椤圭洰/杞亴鍒/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "杞亴鍒", + "ProjectDescribe": "鎸夊畼鏂圭殑杞亴鍒告潵鍐欙紝杞亴鍒搁亾鍏峰彲浠ュ鍒 涓荤嚎瀹屾垚鍒 涓绫汇", + "ProjectAuthor": "zz", + "ProjectVersion": 1.1, + "ProjectConfig": "杞亴鍒.json", + "ProjectFiles": [ + "杞亴鍒.nut" + ], + "ProjectRunFunc": "_Dps_CLASS_CHANGE_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/杞亴鍒/杞亴鍒.json b/绀轰緥椤圭洰/杞亴鍒/杞亴鍒.json new file mode 100644 index 0000000..39daf5f --- /dev/null +++ b/绀轰緥椤圭洰/杞亴鍒/杞亴鍒.json @@ -0,0 +1,53 @@ + + +{ + "config_meta": { + "comment": "杞亴閬撳叿鍔熻兘閰嶇疆琛 v1.2", + "author": "System", + "create_date": "2024-05-14" + }, + + "class_change_items": { + "8016": { + "job": 7, + "grow": 1, + "comment": "鐢锋皵鍔" + }, + "8017": { + "job": 7, + "grow": 3, + "comment": "鐢疯闇" + }, + "8018": { + "job": 7, + "grow": 2, + "comment": "鐢锋暎鎵" + }, + "8019": { + "job": 7, + "grow": 4, + "comment": "鐢锋煍閬" + }, + "2024051416": { + "job": 9, + "grow": 1, + "comment": "椹墤澹" + }, + "2024051417": { + "job": 9, + "grow": 3, + "comment": "濂戦瓟鑰" + }, + "2024051419": { + "job": 8, + "grow": 1, + "comment": "鍏冪礌鐖嗙牬甯" + }, + "2024051420": { + "job": 8, + "grow": 2, + "comment": "鍐扮粨甯" + } + } + } + \ No newline at end of file diff --git a/绀轰緥椤圭洰/杞亴鍒/杞亴鍒.nut b/绀轰緥椤圭洰/杞亴鍒/杞亴鍒.nut new file mode 100644 index 0000000..e2e3c2d --- /dev/null +++ b/绀轰緥椤圭洰/杞亴鍒/杞亴鍒.nut @@ -0,0 +1,59 @@ + +// =================== 鍔犺浇 JSON 閰嶇疆 =================== +local rawConfig = GlobalConfig.Get("杞亴鍒.json"); +local CLASS_CHANGE_ITEMS = {}; + +// 杞崲瀛楃涓查敭鍒版暣鍨嬮敭 +foreach(keyStr, config in rawConfig.class_change_items) { + try { + CLASS_CHANGE_ITEMS[keyStr.tointeger()] <- config; + } catch(e) { + ::print("[ERROR] 杞崲閬撳叿ID澶辫触: " + keyStr + "\n"); + } +} + +// =================== 閫氱敤杞亴鍑芥暟 =================== +function ChangeGrowTypeHandler(SUser, ItemId) { + // 璇诲彇瑙掕壊淇℃伅 + local curJob = SUser.GetCharacJob(); + local curGrow = SUser.GetCharacGrowType(); + local curLevel = SUser.GetCharacLevel(); + local curAwaken = SUser.GetCharacSecondGrowType(); + + // 鑾峰彇杞亴閰嶇疆 + local config = CLASS_CHANGE_ITEMS[ItemId]; + + // 鏉′欢楠岃瘉 + if (curLevel < 20) return SendClassChangeError(SUser, "瑙掕壊绛夌骇涓嶈冻20绾э紒", ItemId); + + if (curJob != config.job) return SendClassChangeError(SUser, "鑱屼笟涓嶇鏃犳硶浣跨敤锛", ItemId); + + if (curAwaken > 0) return SendClassChangeError(SUser, "瑙夐啋鍚庢棤娉曡浆鑱岋紒", ItemId); + + if (curGrow == config.grow) return SendClassChangeError(SUser, "宸插浜庣洰鏍囪亴涓氬垎鏀紒", ItemId); + + // 鎵ц杞亴鎿嶄綔 + SUser.ChangeGrowType(config.grow, 0); + SUser.InitSkillW(1, 0); + SUser.SendNotiPacket(0, 2, 0); + SUser.SendNotiPacketMessage("瑙掕壊杞亴鎴愬姛锛", 0); +} + +// =================== 閿欒澶勭悊鍑芥暟 =================== +function SendClassChangeError(SUser, msg, itemId) { + SUser.SendNotiPacketMessage(msg, 0); + SUser.SendNotiBox(msg, 1); + SUser.GiveItem(itemId, 1); // 閫杩橀亾鍏 +} + +//鍔犺浇鍏ュ彛 +function _Dps_CLASS_CHANGE_Main_() { + if ("class_change_items" in rawConfig) { + foreach (itemId, _ in CLASS_CHANGE_ITEMS) { + Cb_Use_Item_Sp_Func[itemId] <- ChangeGrowTypeHandler; + } + ::print("[SUCCESS] 娉ㄥ唽杞亴閬撳叿鏁伴噺: " + CLASS_CHANGE_ITEMS.len() + "\n"); + } else { + ::print("[ERROR] 杞亴閰嶇疆缂哄け class_change_items 鑺傜偣\n"); + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/杩涘叆鍓湰鑷姩淇悊瑁呭/Proj.ifo b/绀轰緥椤圭洰/杩涘叆鍓湰鑷姩淇悊瑁呭/Proj.ifo new file mode 100644 index 0000000..9611276 --- /dev/null +++ b/绀轰緥椤圭洰/杩涘叆鍓湰鑷姩淇悊瑁呭/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "杩涘叆鍓湰鑷姩淇悊瑁呭", + "ProjectDescribe": "杩涘叆鍓湰鏃惰嚜鍔ㄤ慨鐞嗙┛鎴存爮鐨勮澶囪愪箙搴,鍙缃寔鏈夋寚瀹氬绾︽墠淇悊", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.1, + "ProjectConfig": "鑷姩淇悊瑁呭閰嶇疆_nangua.json", + "ProjectFiles": [ + "杩涘叆鍓湰鑷姩淇悊瑁呭.nut" + ], + "ProjectRunFunc": "_Dps_RepairEquipment_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/杩涘叆鍓湰鑷姩淇悊瑁呭/鑷姩淇悊瑁呭閰嶇疆_nangua.json b/绀轰緥椤圭洰/杩涘叆鍓湰鑷姩淇悊瑁呭/鑷姩淇悊瑁呭閰嶇疆_nangua.json new file mode 100644 index 0000000..073cb0e --- /dev/null +++ b/绀轰緥椤圭洰/杩涘叆鍓湰鑷姩淇悊瑁呭/鑷姩淇悊瑁呭閰嶇疆_nangua.json @@ -0,0 +1,12 @@ +{ + "鑷姩淇悊瑁呭寮鍏(true寮鍚/false鍏抽棴)":true, + "鎸囧畾濂戠害鎵嶅彲淇悊(true寮鍚/false鍏抽棴)":true, + "濂戠害ID":12, + "鏄惁寮鍚慨鐞嗗悗鍙戦佹彁绀(true寮鍚/false鍏抽棴)":true, + "鏄惁杩旇繕淇悊璐圭敤(true杩旇繕/false涓嶈繑杩)":true, + "淇悊鎴愬姛鎻愮ず":"[鑷姩缁翠慨]鎮ㄧ殑瑁呭宸茶嚜鍔ㄤ慨鐞嗗畬姣", + "淇悊澶辫触鎻愮ず":"[鑷姩缁翠慨]閲戝竵涓嶈冻, 鑷姩淇悊澶辫触", + "淇悊閮ㄥ垎瑁呭鎻愮ず":"[鑷姩缁翠慨]鍥犻噾甯佷綑棰濅笉瓒冲凡缁翠慨閮ㄥ垎瑁呭", + "鍙戦佷俊鎭挱鎶ヤ綅缃":1, + "鎻愮ず":"濡傛灉鎸囧畾濂戠害鍏抽棴,鍒欐棤鏉′欢淇悊,宸茬煡榛戦捇濂戠害ID涓12" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/杩涘叆鍓湰鑷姩淇悊瑁呭/杩涘叆鍓湰鑷姩淇悊瑁呭.nut b/绀轰緥椤圭洰/杩涘叆鍓湰鑷姩淇悊瑁呭/杩涘叆鍓湰鑷姩淇悊瑁呭.nut new file mode 100644 index 0000000..6ba49c8 --- /dev/null +++ b/绀轰緥椤圭洰/杩涘叆鍓湰鑷姩淇悊瑁呭/杩涘叆鍓湰鑷姩淇悊瑁呭.nut @@ -0,0 +1,156 @@ +function _Dps_RepairEquipment_Main_() { + Cb_StartGame_check_error_Enter_Func.info <- function (args) { + local config = GlobalConfig.Get("鑷姩淇悊瑁呭閰嶇疆_nangua.json"); + local SUser = User(args[1]); + if(!config["鑷姩淇悊瑁呭寮鍏(true寮鍚/false鍏抽棴)"]) { + return; + } + + local PartyObj = SUser.GetParty(); + local needCheckContract = config["鎸囧畾濂戠害鎵嶅彲淇悊(true寮鍚/false鍏抽棴)"]; + + if(PartyObj) { + for (local i = 0; i < 4; ++i) { + local TUser = PartyObj.GetUser(i); + if(TUser) { + if(needCheckContract) { + if(_Dps_RepairEquipment.CheckUserPremium(TUser, config["濂戠害ID"])) { + _Dps_RepairEquipment.RepairEquipmentBynangua(TUser); + } + } else { + _Dps_RepairEquipment.RepairEquipmentBynangua(TUser); + } + } + } + } else { + if(needCheckContract) { + if(_Dps_RepairEquipment.CheckUserPremium(SUser, config["濂戠害ID"])) { + _Dps_RepairEquipment.RepairEquipmentBynangua(SUser); + } + } else { + _Dps_RepairEquipment.RepairEquipmentBynangua(SUser); + } + } + } +} + +class _Dps_RepairEquipment { + // 妫鏌ョ敤鎴锋槸鍚︽嫢鏈夋寚瀹氬绾 + function CheckUserPremium(SUser, contract_id) { + local premium_ptr = Sq_CallFunc(S_Ptr("0x0812CE28"), "pointer", ["pointer"], SUser.C_Object); + local contract_data_ptr = Sq_CallFunc(S_Ptr("0x086ADF52"), "pointer", ["pointer", "int"], premium_ptr, contract_id); + local VIP = NativePointer(contract_data_ptr).readU32() != 0; + return VIP; + } + function RepairEquipmentBynangua(SUser) { + local config = GlobalConfig.Get("鑷姩淇悊瑁呭閰嶇疆_nangua.json"); + local InvenObj = SUser.GetInven(); + local anyItemRepaired = false; + local current_money = InvenObj.GetMoney(); + local need_repair_count = 0; + local repaired_count = 0; + local total_repair_cost = 0; + + // 绗竴娆¢亶鍘嗭細璁$畻鎬讳慨鐞嗚垂鐢ㄥ拰闇瑕佷慨鐞嗙殑瑁呭鏁伴噺 + for (local i = 10; i <= 16; ++i) { + if (i == 11) continue; + local ItemObj = InvenObj.GetSlot(0, i); + if (ItemObj.GetIndex() == 0) continue; + + local durability = ItemObj.GetDurable(); + local G_CDataManager = Sq_CallFunc(S_Ptr("0x80CC19B"), "pointer", []); + local PVFItemObj = Sq_CallFunc(S_Ptr("0x835FA32"), "pointer", ["pointer", "int"], G_CDataManager, ItemObj.GetIndex()); + local durability_max = Sq_CallFunc(S_Ptr("0x811ED98"), "int", ["pointer"], PVFItemObj); + + if (durability < durability_max) { + need_repair_count++; + local charac_level = SUser.GetCharacLevel(); + local growth_grade = Sq_CallFunc(S_Ptr("0x085137B8"), "int", ["pointer", "int"], PVFItemObj, charac_level); + local growth_repair_cost = Sq_CallFunc(S_Ptr("0x0851381C"), "int", ["pointer", "int"], PVFItemObj, charac_level); + local cost_rate = 1.0; + local repair_cost = Sq_CallFunc(S_Ptr("0x0898C8FC"), "int", ["int", "int", "int", "int", "bool", "float"], growth_repair_cost, durability, durability_max, growth_grade, false, cost_rate); + total_repair_cost += repair_cost; + } + } + + if (need_repair_count == 0) return; + + // 濡傛灉寮鍚簡杩旇繕鍔熻兘锛屽厛缁欑帺瀹跺彂鏀鹃噾甯 + if(config["鏄惁杩旇繕淇悊璐圭敤(true杩旇繕/false涓嶈繑杩)"]) { + SUser.RechargeMoney(total_repair_cost); + SUser.SendUpdateItemList(1, 0, 0); + current_money = InvenObj.GetMoney(); // 鏇存柊褰撳墠閲戝竵鏁 + } + + local msg_base = Memory.alloc(32); + local param_base = Memory.alloc(32); + local dispatcher = Memory.alloc(4); + + for (local i = 10; i <= 16; ++i) { + if (i == 11) continue; + + local ItemObj = InvenObj.GetSlot(0, i); + if (ItemObj.GetIndex() == 0) continue; + + local durability = ItemObj.GetDurable(); + local G_CDataManager = Sq_CallFunc(S_Ptr("0x80CC19B"), "pointer", []); + local PVFItemObj = Sq_CallFunc(S_Ptr("0x835FA32"), "pointer", ["pointer", "int"], G_CDataManager, ItemObj.GetIndex()); + local durability_max = Sq_CallFunc(S_Ptr("0x811ED98"), "int", ["pointer"], PVFItemObj); + + if (durability < durability_max) { + local charac_level = SUser.GetCharacLevel(); + local growth_grade = Sq_CallFunc(S_Ptr("0x085137B8"), "int", ["pointer", "int"], PVFItemObj, charac_level); + local growth_repair_cost = Sq_CallFunc(S_Ptr("0x0851381C"), "int", ["pointer", "int"], PVFItemObj, charac_level); + local cost_rate = 1.0; + local repair_cost = Sq_CallFunc(S_Ptr("0x0898C8FC"), "int", ["int", "int", "int", "int", "bool", "float"], growth_repair_cost, durability, durability_max, growth_grade, false, cost_rate); + + if (current_money < repair_cost) { + continue; + } + + local temp_ptr = msg_base; + temp_ptr = temp_ptr.add(13); + temp_ptr.writeU8(3); + temp_ptr = msg_base.add(14); + temp_ptr.writeU16(i); + temp_ptr = msg_base.add(16); + temp_ptr.writeU16(65535); + temp_ptr = param_base.add(12); + temp_ptr.writeU16(0); + + local result = Sq_CallFunc(S_Ptr("0x081C6082"), "int", ["pointer", "pointer", "pointer", "pointer"], dispatcher.C_Object, SUser.C_Object, msg_base.C_Object, param_base.C_Object); + + if(result == 0) { + anyItemRepaired = true; + repaired_count++; + SendRepairPacket(SUser, i, durability_max); + current_money -= repair_cost; + } + } + } + + if (config["鏄惁寮鍚慨鐞嗗悗鍙戦佹彁绀(true寮鍚/false鍏抽棴)"]) { + if (repaired_count == 0) { + SUser.SendNotiPacketMessage(config["淇悊澶辫触鎻愮ず"], config["鍙戦佷俊鎭挱鎶ヤ綅缃"]); + } else if (repaired_count < need_repair_count) { + SUser.SendNotiPacketMessage(config["淇悊閮ㄥ垎瑁呭鎻愮ず"], config["鍙戦佷俊鎭挱鎶ヤ綅缃"]); + } else { + SUser.SendNotiPacketMessage(config["淇悊鎴愬姛鎻愮ず"], config["鍙戦佷俊鎭挱鎶ヤ綅缃"]); + } + } + } +} +function SendRepairPacket(SUser, slot, durability) { + local Pack = Packet(); + Pack.Put_Header(1, 25); + Pack.Put_Byte(1); + local InvenObj = SUser.GetInven(); + local Money = InvenObj.GetMoney(); + Pack.Put_Int(Money); + Pack.Put_Byte(0); + Pack.Put_Short(slot); + Pack.Put_Short(durability); + Pack.Finalize(true); + SUser.Send(Pack); + Pack.Delete(); +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/閬撳叿鎺ュ彇浠诲姟/Proj.ifo b/绀轰緥椤圭洰/閬撳叿鎺ュ彇浠诲姟/Proj.ifo new file mode 100644 index 0000000..d0408b8 --- /dev/null +++ b/绀轰緥椤圭洰/閬撳叿鎺ュ彇浠诲姟/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "閬撳叿鎺ュ彇浠诲姟", + "ProjectDescribe": "浣跨敤閬撳叿鐩存帴鎺ュ彇鐗瑰畾浠诲姟", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.0, + "ProjectConfig": "閬撳叿鎺ュ彇浠诲姟.json", + "ProjectFiles": [ + "閬撳叿鎺ュ彇浠诲姟.nut" + ], + "ProjectRunFunc": "_Dps_DJJQRW_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/閬撳叿鎺ュ彇浠诲姟/閬撳叿鎺ュ彇浠诲姟.json b/绀轰緥椤圭洰/閬撳叿鎺ュ彇浠诲姟/閬撳叿鎺ュ彇浠诲姟.json new file mode 100644 index 0000000..ab443eb --- /dev/null +++ b/绀轰緥椤圭洰/閬撳叿鎺ュ彇浠诲姟/閬撳叿鎺ュ彇浠诲姟.json @@ -0,0 +1,9 @@ +{ + "閬撳叿瀵瑰簲鎺ュ彇浠诲姟": [ + [7577,1207], + [7578,1208], + [7579,1209], + [7580,1210] + ], + "鎻愮ず": "閬撳叿璇风敤7577澶嶅埗鍑烘潵鐨勯亾鍏" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/閬撳叿鎺ュ彇浠诲姟/閬撳叿鎺ュ彇浠诲姟.nut b/绀轰緥椤圭洰/閬撳叿鎺ュ彇浠诲姟/閬撳叿鎺ュ彇浠诲姟.nut new file mode 100644 index 0000000..a712e03 --- /dev/null +++ b/绀轰緥椤圭洰/閬撳叿鎺ュ彇浠诲姟/閬撳叿鎺ュ彇浠诲姟.nut @@ -0,0 +1,16 @@ + +function _Dps_DJJQRW_Main_() { + + local Config = GlobalConfig.Get("閬撳叿鎺ュ彇浠诲姟.json"); + foreach( item in Config["閬撳叿瀵瑰簲鎺ュ彇浠诲姟"]){ + + local a = item[0]; + local b = item[1]; + Cb_Use_Item_Sp_Func[a] <- function(SUser, ItemId) { + print(b); + Sq_CUser_QuestAction(SUser.C_Object, 33, b, 0, 0); + } + + } + +} diff --git a/绀轰緥椤圭洰/閭欢閲戝竵鍘婚櫎楠岃瘉/Proj.ifo b/绀轰緥椤圭洰/閭欢閲戝竵鍘婚櫎楠岃瘉/Proj.ifo new file mode 100644 index 0000000..cd021ea --- /dev/null +++ b/绀轰緥椤圭洰/閭欢閲戝竵鍘婚櫎楠岃瘉/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "閭欢閲戝竵鍘婚櫎楠岃瘉", + "ProjectDescribe": "鍘婚櫎浜嗗彂閫侀偖浠朵腑鏈夐噾甯佷細瑙﹀彂楠岃瘉鐮佺殑楠岃瘉銆", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.0, + "ProjectConfig": "", + "ProjectFiles": [ + "閭欢閲戝竵鍘婚櫎楠岃瘉.nut" + ], + "ProjectRunFunc": "_Dps_EmailCoinRemovalVerification_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/閭欢閲戝竵鍘婚櫎楠岃瘉/閭欢閲戝竵鍘婚櫎楠岃瘉.nut b/绀轰緥椤圭洰/閭欢閲戝竵鍘婚櫎楠岃瘉/閭欢閲戝竵鍘婚櫎楠岃瘉.nut new file mode 100644 index 0000000..914994e --- /dev/null +++ b/绀轰緥椤圭洰/閭欢閲戝竵鍘婚櫎楠岃瘉/閭欢閲戝竵鍘婚櫎楠岃瘉.nut @@ -0,0 +1,7 @@ + + + +function _Dps_EmailCoinRemovalVerification_Main_() +{ + GameManager.FixEmailRemovalVerification(); +} diff --git a/绀轰緥椤圭洰/閲嶉摳鍒/Proj.ifo b/绀轰緥椤圭洰/閲嶉摳鍒/Proj.ifo new file mode 100644 index 0000000..c198621 --- /dev/null +++ b/绀轰緥椤圭洰/閲嶉摳鍒/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "閲嶉摳鍒", + "ProjectDescribe": "浣跨敤杩囧悗鍒犻櫎瑁呭鏍忕涓鏍肩殑鐗╁搧骞堕噸鏂板彂閫佷竴浠", + "ProjectAuthor": "鍊炬唱瀵", + "ProjectVersion": 1.0, + "ProjectConfig": "閲嶉摳鍒.json", + "ProjectFiles": [ + "閲嶉摳鍒.nut" + ], + "ProjectRunFunc": "_Dps_ReforgeEquipment_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/閲嶉摳鍒/閲嶉摳鍒.json b/绀轰緥椤圭洰/閲嶉摳鍒/閲嶉摳鍒.json new file mode 100644 index 0000000..00f04f2 --- /dev/null +++ b/绀轰緥椤圭洰/閲嶉摳鍒/閲嶉摳鍒.json @@ -0,0 +1,4 @@ +{ + "閲嶉摳鍗风殑閬撳叿ID": 7577, + "鏄惁杩旇繕閲嶉摳鍒搁亾鍏(true浠h〃杩旇繕,false浠h〃涓嶈繑杩)": true +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/閲嶉摳鍒/閲嶉摳鍒.nut b/绀轰緥椤圭洰/閲嶉摳鍒/閲嶉摳鍒.nut new file mode 100644 index 0000000..c8c33b4 --- /dev/null +++ b/绀轰緥椤圭洰/閲嶉摳鍒/閲嶉摳鍒.nut @@ -0,0 +1,30 @@ +function _Dps_ReforgeEquipment_Main_() { + local Config = GlobalConfig.Get("閲嶉摳鍒.json"); + //鍒嗚В鍒 + Cb_Use_Item_Sp_Func[Config["閲嶉摳鍗风殑閬撳叿ID"]] <- function(SUser, ItemId) { + local index = 0; + local InvenObj = SUser.GetInven(); + if (InvenObj) { + local ItemObj = InvenObj.GetSlot(1, 9); + //绌鸿澶 + if (ItemObj.IsEmpty) { + //鍙戦侀氱煡 + SUser.SendNotiPacketMessage("瑁呭涓嶅瓨鍦 璇峰皢瑁呭鏀剧疆鍦ㄨ澶囨爮绗竴鏍", 8); + //杩旇繕娑堣楃殑閬撳叿 + local test = SUser.GiveItem(ItemId, 1); + return; + } + local ItemId1 = ItemObj.GetIndex(); + ItemObj.Delete(); + + local item = SUser.GiveItem(ItemId1, 1); + + + SUser.SendItemSpace(0); + SUser.SendNotiPacketMessage("瑁呭閲嶉摳", 8); + if (Config["鏄惁杩旇繕鍒嗚В鍒搁亾鍏(true浠h〃杩旇繕,false浠h〃涓嶈繑杩)"]) { + SUser.GiveItem(ItemId, 1); + } + } + }; +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/闂ㄧエ杩涘叆鍓湰/Proj.ifo b/绀轰緥椤圭洰/闂ㄧエ杩涘叆鍓湰/Proj.ifo new file mode 100644 index 0000000..813e116 --- /dev/null +++ b/绀轰緥椤圭洰/闂ㄧエ杩涘叆鍓湰/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "闂ㄧエ杩涘叆鍓湰", + "ProjectDescribe": "娣诲姞鍓湰浣跨敤鎸囧畾閬撳叿杩涘叆瑙勫垯", + "ProjectAuthor": "鐚挭", + "ProjectVersion": 1.2, + "ProjectConfig": "闂ㄧエ杩涘叆鍓湰閰嶇疆_Maomi.json", + "ProjectFiles": [ + "闂ㄧエ杩涘叆鍓湰.nut" + ], + "ProjectRunFunc": "_Dps_TicketAccessToDungeon_Maomi_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/闂ㄧエ杩涘叆鍓湰/闂ㄧエ杩涘叆鍓湰.nut b/绀轰緥椤圭洰/闂ㄧエ杩涘叆鍓湰/闂ㄧエ杩涘叆鍓湰.nut new file mode 100644 index 0000000..2cfe94c --- /dev/null +++ b/绀轰緥椤圭洰/闂ㄧエ杩涘叆鍓湰/闂ㄧエ杩涘叆鍓湰.nut @@ -0,0 +1,50 @@ +function get_required_gradeByMaomi(dgn_id, dgn_diff) { + local Config = GlobalConfig.Get("闂ㄧエ杩涘叆鍓湰閰嶇疆_Maomi.json"); + if (Config["闂ㄧエ杩涘叆鍓湰"]["鍓湰閰嶇疆"].rawin(dgn_id.tostring())) { + local requirements = Config["闂ㄧエ杩涘叆鍓湰"]["鍓湰閰嶇疆"][dgn_id.tostring()]; + for (local i = 0; i< requirements.len(); i += 2) { + if (requirements[i] == dgn_diff) { + return requirements[i + 1]; + } + } + } + return null; +} + +function _Dps_TicketAccessToDungeon_Maomi_Main_() { + + Cb_SelectDungeon_Check_Error_Leave_Func.Check_TicketByMaomi <- function(args) { + + local Config = sq_ReadJsonFile("/dp_s/OfficialConfig" + "/" + "闂ㄧエ杩涘叆鍓湰閰嶇疆_Maomi.json"); + // local Config = GlobalConfig.Get("闂ㄧエ杩涘叆鍓湰閰嶇疆_Maomi.json"); + + local SUser = User(args[1]); + local msg_base = args[2]; + local dgn_id = NativePointer(msg_base).add(13).readU16(); // 鑾峰彇鍓湰ID + local dgn_diff = NativePointer(msg_base).add(15).readU8(); // 鑾峰彇鍓湰闅惧害 + local PartyObj = SUser.GetParty(); + + local required_Item = get_required_gradeByMaomi(dgn_id, dgn_diff); + local diff_name = Config["鍓湰闅惧害鍛藉悕"][(dgn_diff).tostring()]; + + if (!required_Item) return null; + + if (PartyObj && Config["闂ㄧエ杩涘叆鍓湰"]["闂ㄧエ杩涘叆鍓湰寮鍏(true涓哄紑鍚,false涓哄叧闂)"]) { + for (local i = 0; i< 4; ++i) { + local Tuser = PartyObj.GetUser(i); + if (Tuser) { + local InvenObj = Tuser.GetInven(); + if (InvenObj) { + if (InvenObj.CheckItemCount(required_Item, 1)){ + InvenObj.DeleteItemCount(required_Item, 1); + return null; + } + } + } + } + + SUser.SendNotiBox("闃熶紞涓墍鏈夌帺瀹跺潎鏃犲壇鏈墍闇闂ㄧエ锛屾棤娉曡繘鍏!", 2) + return 1; + } + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/闂ㄧエ杩涘叆鍓湰/闂ㄧエ杩涘叆鍓湰閰嶇疆_Maomi.json b/绀轰緥椤圭洰/闂ㄧエ杩涘叆鍓湰/闂ㄧエ杩涘叆鍓湰閰嶇疆_Maomi.json new file mode 100644 index 0000000..1201349 --- /dev/null +++ b/绀轰緥椤圭洰/闂ㄧエ杩涘叆鍓湰/闂ㄧエ杩涘叆鍓湰閰嶇疆_Maomi.json @@ -0,0 +1,29 @@ +{ + "闂ㄧエ杩涘叆鍓湰": { + "鎻愮ず": "闂ㄧエ杩涘叆鍓湰閰嶇疆(鍓湰ID[鏅氱骇,闂ㄧエ,鍐掗櫓绾,闂ㄧエ,鍕囧+绾,闂ㄧエ,鐜嬭呯骇,闂ㄧエ,鍦扮嫳绾,闂ㄧエ])", + "闂ㄧエ杩涘叆鍓湰寮鍏(true涓哄紑鍚,false涓哄叧闂)": true, + "鍓湰閰嶇疆": { + "1": [ + 0, + 3037, + 1, + 3037, + 2, + 3037, + 3, + 3037, + 4, + 3037, + 5, + 3037 + ] + } + }, + "鍓湰闅惧害鍛藉悕": { + "0": "鏅氱骇", + "1": "鍐掗櫓绾", + "2": "鍕囧+绾", + "3": "鐜嬭呯骇", + "4": "鍦扮嫳绾" + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/闃茶劚鏈哄埗瑁/Proj.ifo b/绀轰緥椤圭洰/闃茶劚鏈哄埗瑁/Proj.ifo new file mode 100644 index 0000000..073a28d --- /dev/null +++ b/绀轰緥椤圭洰/闃茶劚鏈哄埗瑁/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "闃茶劚鏈哄埗瑁", + "ProjectDescribe": "鏈」鐩彧鑳藉闃叉鑴辨満澶栨寕,閰嶇疆鍙互鏇存敼", + "ProjectAuthor": "鍗楃摐", + "ProjectVersion": 1.7, + "ProjectConfig": "闃茶劚鏈哄埗瑁乢Nangua.json", + "ProjectFiles": [ + "闃茶劚鏈哄埗瑁.sut" + ], + "ProjectRunFunc": "_Dps_AntiOfflineSanctions_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/闃茶劚鏈哄埗瑁/闃茶劚鏈哄埗瑁.sut b/绀轰緥椤圭洰/闃茶劚鏈哄埗瑁/闃茶劚鏈哄埗瑁.sut new file mode 100644 index 0000000..61350e7 Binary files /dev/null and b/绀轰緥椤圭洰/闃茶劚鏈哄埗瑁/闃茶劚鏈哄埗瑁.sut differ diff --git a/绀轰緥椤圭洰/闃茶劚鏈哄埗瑁/闃茶劚鏈哄埗瑁乢Nangua.json b/绀轰緥椤圭洰/闃茶劚鏈哄埗瑁/闃茶劚鏈哄埗瑁乢Nangua.json new file mode 100644 index 0000000..a1337b3 --- /dev/null +++ b/绀轰緥椤圭洰/闃茶劚鏈哄埗瑁/闃茶劚鏈哄埗瑁乢Nangua.json @@ -0,0 +1,12 @@ +{ + "鍒惰寮鍏(true寮鍚痜alse鍏抽棴)": true, + "鍒惰閰嶇疆 杈惧埌娆℃暟 鍒惰鏃堕暱(绉)": [2, 300], + "瑙掕壊CID鐧藉悕鍗": [1, 2], + "鍓湰ID鐧藉悕鍗(闈炴甯稿壇鏈帴鍙h繘鍏ョ殑鍓湰)": [11111,222222], + "娓╅Θ鎻愮ず1":"鍓湰ID鐧藉悕鍗曞苟涓嶆槸鍔犱簡灏卞叧闂娴,鍙槸鍏抽棴鍏朵腑涓椤规娴", + "娓╅Θ鎻愮ず2": "瑙掕壊ID鍙互鏌ョ湅鏁版嵁搴撲腑 taiwan_cain 鈫 charac_info 鈫 charac_no浠h〃瑙掕壊ID", + + "msgtype1": "浣犲凡缁忚闄愬埗鑾峰彇閬撳叿鍜岄噾甯侊紝鍓╀綑锛歔%d]绉...", + "msgtype2": "浣犲凡缁忚闄愬埗鑾峰彇缁忛獙锛屽墿浣欙細[%d]绉...", + "msgtype3": "鐜╁[%s]鍥犱娇鐢ㄧ涓夋柟杞欢宸茶闄愬埗杩涘叆鍓湰锛屽墿浣欙細[%d]绉..." +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/榛勯噾鍝佺骇璋冩暣绠/Proj.ifo b/绀轰緥椤圭洰/榛勯噾鍝佺骇璋冩暣绠/Proj.ifo new file mode 100644 index 0000000..b661fe9 --- /dev/null +++ b/绀轰緥椤圭洰/榛勯噾鍝佺骇璋冩暣绠/Proj.ifo @@ -0,0 +1,11 @@ +{ + "ProjectName": "榛勯噾鍝佺骇璋冩暣绠", + "ProjectDescribe": "灏嗕竴涓搧绾ц皟鏁寸鏇挎崲涓洪粍閲戝搧绾ц皟鏁寸", + "ProjectAuthor": "鍑屼紬", + "ProjectVersion": 1.1, + "ProjectConfig": "榛勯噾鍝佺骇璋冩暣绠盻Lenheart.json", + "ProjectFiles": [ + "榛勯噾鍝佺骇璋冩暣绠.nut" + ], + "ProjectRunFunc": "_Dps_SetEquinherit_Main_" +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/榛勯噾鍝佺骇璋冩暣绠/榛勯噾鍝佺骇璋冩暣绠.nut b/绀轰緥椤圭洰/榛勯噾鍝佺骇璋冩暣绠/榛勯噾鍝佺骇璋冩暣绠.nut new file mode 100644 index 0000000..95bbb0c --- /dev/null +++ b/绀轰緥椤圭洰/榛勯噾鍝佺骇璋冩暣绠/榛勯噾鍝佺骇璋冩暣绠.nut @@ -0,0 +1,29 @@ + +function _Dps_SetEquinherit_Main_() { + Cb_ModItemattr_Enter_Func.addinfoMax <- function(args) { + //print("瑙﹀彂鍥炶皟"); + local Config = GlobalConfig.Get("榛勯噾鍝佺骇璋冩暣绠盻Lenheart.json"); + local SUser = User(args[1]); + local pack = NativePointer(args[2]); + local a = NativePointer(pack.add(20).readPointer()); + local itemSold = a.add(13).add(6).readShort(); + local equSold = a.add(13).add(0).readShort(); + local InvenObj = SUser.GetInven(); + print("InvenObj = " + InvenObj); + if (InvenObj) { + local ItemObj = InvenObj.GetSlot(1, itemSold); + local equObj = InvenObj.GetSlot(1, equSold); + //print("ItemObj = " + ItemObj); + //print("equObj = " + equObj); + //print("ItemObj.GetIndex() = " + ItemObj.GetIndex()); + if (ItemObj.GetIndex() == Config["榛勯噾鍝佺骇璋冩暣绠眎d"]) { + Timer.SetTimeOut(function() { + equObj.SetAdd_Info(999999998); + equObj.Flush(); + SUser.SendUpdateItemList(1, 0, equSold); + //print("璋冩暣鎴愬姛"); + }, 1); + } + } + } +} \ No newline at end of file diff --git a/绀轰緥椤圭洰/榛勯噾鍝佺骇璋冩暣绠/榛勯噾鍝佺骇璋冩暣绠盻Lenheart.json b/绀轰緥椤圭洰/榛勯噾鍝佺骇璋冩暣绠/榛勯噾鍝佺骇璋冩暣绠盻Lenheart.json new file mode 100644 index 0000000..3c955e2 --- /dev/null +++ b/绀轰緥椤圭洰/榛勯噾鍝佺骇璋冩暣绠/榛勯噾鍝佺骇璋冩暣绠盻Lenheart.json @@ -0,0 +1,4 @@ +{ + "榛勯噾鍝佺骇璋冩暣绠眎d": 897 + +} \ No newline at end of file