diff --git a/.VSCodeCounter/2025-09-16_17-49-59/details.md b/.VSCodeCounter/2025-09-16_17-49-59/details.md new file mode 100644 index 0000000..d7685ad --- /dev/null +++ b/.VSCodeCounter/2025-09-16_17-49-59/details.md @@ -0,0 +1,76 @@ +# Details + +Date : 2025-09-16 17:49:59 + +Directory f:\\Project\\levilamina\\1.4.x\\CFSP + +Total : 61 files, 6495 codes, 91 comments, 664 blanks, all 7250 lines + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | +| [.github/ISSUE\_TEMPLATE/bug\_report.yml](/.github/ISSUE_TEMPLATE/bug_report.yml) | YAML | 47 | 0 | 9 | 56 | +| [.github/ISSUE\_TEMPLATE/feature\_request.yml](/.github/ISSUE_TEMPLATE/feature_request.yml) | YAML | 25 | 0 | 4 | 29 | +| [.github/PULL\_REQUEST\_TEMPLATE.md](/.github/PULL_REQUEST_TEMPLATE.md) | Markdown | 10 | 0 | 9 | 19 | +| [.github/workflows/build.yml](/.github/workflows/build.yml) | YAML | 34 | 10 | 12 | 56 | +| [.github/workflows/release.yml](/.github/workflows/release.yml) | YAML | 68 | 0 | 17 | 85 | +| [CHANGELOG.md](/CHANGELOG.md) | Markdown | 87 | 0 | 58 | 145 | +| [CHANGELOG\_ZH.md](/CHANGELOG_ZH.md) | Markdown | 90 | 0 | 61 | 151 | +| [README.md](/README.md) | Markdown | 14 | 0 | 12 | 26 | +| [manifest.json](/manifest.json) | JSON | 7 | 0 | 0 | 7 | +| [scripts/after\_build.lua](/scripts/after_build.lua) | Lua | 105 | 1 | 19 | 125 | +| [src/cfsp/CFSP.cpp](/src/cfsp/CFSP.cpp) | C++ | 21 | 1 | 8 | 30 | +| [src/cfsp/CFSP.h](/src/cfsp/CFSP.h) | C++ | 15 | 6 | 14 | 35 | +| [src/cfsp/Config.h](/src/cfsp/Config.h) | C++ | 28 | 0 | 6 | 34 | +| [src/cfsp/MemoryOperators.cpp](/src/cfsp/MemoryOperators.cpp) | C++ | 2 | 2 | 3 | 7 | +| [src/cfsp/PermissionConfig.h](/src/cfsp/PermissionConfig.h) | C++ | 66 | 0 | 3 | 69 | +| [src/cfsp/base/Macros.h](/src/cfsp/base/Macros.h) | C++ | 6 | 0 | 2 | 8 | +| [src/cfsp/base/OperateResult.h](/src/cfsp/base/OperateResult.h) | C++ | 44 | 0 | 9 | 53 | +| [src/cfsp/base/Schedule.h](/src/cfsp/base/Schedule.h) | C++ | 17 | 0 | 5 | 22 | +| [src/cfsp/base/Utils.cpp](/src/cfsp/base/Utils.cpp) | C++ | 45 | 0 | 6 | 51 | +| [src/cfsp/base/Utils.h](/src/cfsp/base/Utils.h) | C++ | 9 | 0 | 6 | 15 | +| [src/cfsp/core/fix/CFSPFixManager.cpp](/src/cfsp/core/fix/CFSPFixManager.cpp) | C++ | 122 | 10 | 11 | 143 | +| [src/cfsp/core/fix/CFSPFixManager.h](/src/cfsp/core/fix/CFSPFixManager.h) | C++ | 11 | 0 | 1 | 12 | +| [src/cfsp/core/group/CFSPGroup.cpp](/src/cfsp/core/group/CFSPGroup.cpp) | C++ | 30 | 0 | 4 | 34 | +| [src/cfsp/core/group/CFSPGroup.h](/src/cfsp/core/group/CFSPGroup.h) | C++ | 15 | 0 | 4 | 19 | +| [src/cfsp/core/group/GroupData.h](/src/cfsp/core/group/GroupData.h) | C++ | 14 | 0 | 2 | 16 | +| [src/cfsp/core/group/GroupPermission.h](/src/cfsp/core/group/GroupPermission.h) | C++ | 32 | 0 | 0 | 32 | +| [src/cfsp/core/helper/CFSPAutoFuncHelper.cpp](/src/cfsp/core/helper/CFSPAutoFuncHelper.cpp) | C++ | 73 | 0 | 3 | 76 | +| [src/cfsp/core/helper/CFSPHelperManager.cpp](/src/cfsp/core/helper/CFSPHelperManager.cpp) | C++ | 13 | 0 | 2 | 15 | +| [src/cfsp/core/helper/CFSPHelperManager.h](/src/cfsp/core/helper/CFSPHelperManager.h) | C++ | 18 | 0 | 5 | 23 | +| [src/cfsp/core/helper/CFSPOperateHelper.cpp](/src/cfsp/core/helper/CFSPOperateHelper.cpp) | C++ | 46 | 0 | 3 | 49 | +| [src/cfsp/core/helper/CFSPSaveHelper.cpp](/src/cfsp/core/helper/CFSPSaveHelper.cpp) | C++ | 153 | 0 | 7 | 160 | +| [src/cfsp/core/helper/CFSPSchduleHelper.cpp](/src/cfsp/core/helper/CFSPSchduleHelper.cpp) | C++ | 11 | 0 | 3 | 14 | +| [src/cfsp/core/helper/CacheUUidName.cpp](/src/cfsp/core/helper/CacheUUidName.cpp) | C++ | 0 | 0 | 1 | 1 | +| [src/cfsp/core/manager/CFSPManager.cpp](/src/cfsp/core/manager/CFSPManager.cpp) | C++ | 293 | 5 | 31 | 329 | +| [src/cfsp/core/manager/CFSPManager.h](/src/cfsp/core/manager/CFSPManager.h) | C++ | 195 | 0 | 23 | 218 | +| [src/cfsp/core/manager/CFSPManagerGroup.cpp](/src/cfsp/core/manager/CFSPManagerGroup.cpp) | C++ | 276 | 1 | 15 | 292 | +| [src/cfsp/core/manager/CFSPManagerSp.cpp](/src/cfsp/core/manager/CFSPManagerSp.cpp) | C++ | 419 | 12 | 31 | 462 | +| [src/cfsp/core/simPlayer/SimPlayer.cpp](/src/cfsp/core/simPlayer/SimPlayer.cpp) | C++ | 160 | 4 | 21 | 185 | +| [src/cfsp/core/simPlayer/SimPlayer.h](/src/cfsp/core/simPlayer/SimPlayer.h) | C++ | 72 | 0 | 11 | 83 | +| [src/cfsp/core/simPlayer/SimPlayerBase.cpp](/src/cfsp/core/simPlayer/SimPlayerBase.cpp) | C++ | 31 | 0 | 7 | 38 | +| [src/cfsp/core/simPlayer/SimPlayerInv.cpp](/src/cfsp/core/simPlayer/SimPlayerInv.cpp) | C++ | 115 | 0 | 6 | 121 | +| [src/cfsp/core/simPlayer/SimPlayerMessage.cpp](/src/cfsp/core/simPlayer/SimPlayerMessage.cpp) | C++ | 35 | 0 | 2 | 37 | +| [src/cfsp/core/simPlayer/SimPlayerMove.cpp](/src/cfsp/core/simPlayer/SimPlayerMove.cpp) | C++ | 37 | 0 | 3 | 40 | +| [src/cfsp/core/simPlayer/SimPlayerOperate.cpp](/src/cfsp/core/simPlayer/SimPlayerOperate.cpp) | C++ | 154 | 1 | 7 | 162 | +| [src/cfsp/core/simPlayer/SimPlayerPermission.h](/src/cfsp/core/simPlayer/SimPlayerPermission.h) | C++ | 32 | 0 | 1 | 33 | +| [src/cfsp/core/simPlayer/SimPlayerSave.cpp](/src/cfsp/core/simPlayer/SimPlayerSave.cpp) | C++ | 63 | 0 | 3 | 66 | +| [src/cfsp/core/simPlayer/SimPlayerSaveData.h](/src/cfsp/core/simPlayer/SimPlayerSaveData.h) | C++ | 21 | 0 | 2 | 23 | +| [src/cfsp/core/simPlayer/SimPlayerStatus.cpp](/src/cfsp/core/simPlayer/SimPlayerStatus.cpp) | C++ | 56 | 0 | 4 | 60 | +| [src/cfsp/entrance/command/ComandManager.cpp](/src/cfsp/entrance/command/ComandManager.cpp) | C++ | 69 | 3 | 8 | 80 | +| [src/cfsp/entrance/command/ComandManager.h](/src/cfsp/entrance/command/ComandManager.h) | C++ | 19 | 1 | 5 | 25 | +| [src/cfsp/entrance/command/GroupCommand.cpp](/src/cfsp/entrance/command/GroupCommand.cpp) | C++ | 514 | 13 | 17 | 544 | +| [src/cfsp/entrance/command/GuiCommand.cpp](/src/cfsp/entrance/command/GuiCommand.cpp) | C++ | 40 | 3 | 4 | 47 | +| [src/cfsp/entrance/command/SpCommand.cpp](/src/cfsp/entrance/command/SpCommand.cpp) | C++ | 544 | 15 | 23 | 582 | +| [src/cfsp/entrance/gui/GuiManager.cpp](/src/cfsp/entrance/gui/GuiManager.cpp) | C++ | 189 | 0 | 12 | 201 | +| [src/cfsp/entrance/gui/GuiManager.h](/src/cfsp/entrance/gui/GuiManager.h) | C++ | 113 | 0 | 7 | 120 | +| [src/cfsp/entrance/gui/OperateGroupGui.cpp](/src/cfsp/entrance/gui/OperateGroupGui.cpp) | C++ | 688 | 0 | 52 | 740 | +| [src/cfsp/entrance/gui/OperateSpGui.cpp](/src/cfsp/entrance/gui/OperateSpGui.cpp) | C++ | 726 | 0 | 52 | 778 | +| [src/lang/en\_US.json](/src/lang/en_US.json) | JSON | 7 | 0 | 0 | 7 | +| [src/lang/zh\_CN.json](/src/lang/zh_CN.json) | JSON | 264 | 0 | 0 | 264 | +| [tooth.json](/tooth.json) | JSON | 26 | 0 | 0 | 26 | +| [xmake.lua](/xmake.lua) | XMake | 59 | 3 | 8 | 70 | + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-16_17-49-59/diff-details.md b/.VSCodeCounter/2025-09-16_17-49-59/diff-details.md new file mode 100644 index 0000000..09bd246 --- /dev/null +++ b/.VSCodeCounter/2025-09-16_17-49-59/diff-details.md @@ -0,0 +1,34 @@ +# Diff Details + +Date : 2025-09-16 17:49:59 + +Directory f:\\Project\\levilamina\\1.4.x\\CFSP + +Total : 19 files, 712 codes, -3 comments, 50 blanks, all 759 lines + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | +| [src/cfsp/base/OperateResult.h](/src/cfsp/base/OperateResult.h) | C++ | 0 | -2 | 0 | -2 | +| [src/cfsp/core/group/CFSPGroup.cpp](/src/cfsp/core/group/CFSPGroup.cpp) | C++ | 7 | 0 | 1 | 8 | +| [src/cfsp/core/group/CFSPGroup.h](/src/cfsp/core/group/CFSPGroup.h) | C++ | 1 | 0 | 0 | 1 | +| [src/cfsp/core/manager/CFSPManager.cpp](/src/cfsp/core/manager/CFSPManager.cpp) | C++ | 12 | 0 | 1 | 13 | +| [src/cfsp/core/manager/CFSPManager.h](/src/cfsp/core/manager/CFSPManager.h) | C++ | 4 | 0 | 0 | 4 | +| [src/cfsp/core/manager/CFSPManagerGroup.cpp](/src/cfsp/core/manager/CFSPManagerGroup.cpp) | C++ | 95 | 0 | 3 | 98 | +| [src/cfsp/core/manager/CFSPManagerSp.cpp](/src/cfsp/core/manager/CFSPManagerSp.cpp) | C++ | 26 | -2 | 7 | 31 | +| [src/cfsp/core/manager/CFSPManagerSpInv.cpp](/src/cfsp/core/manager/CFSPManagerSpInv.cpp) | C++ | -59 | 0 | -4 | -63 | +| [src/cfsp/core/manager/CFSPManagerSpMessage.cpp](/src/cfsp/core/manager/CFSPManagerSpMessage.cpp) | C++ | -26 | 0 | -2 | -28 | +| [src/cfsp/core/manager/CFSPManagerSpMove.cpp](/src/cfsp/core/manager/CFSPManagerSpMove.cpp) | C++ | -44 | 0 | -3 | -47 | +| [src/cfsp/core/manager/CFSPManagerSpOperate.cpp](/src/cfsp/core/manager/CFSPManagerSpOperate.cpp) | C++ | -55 | 0 | -3 | -58 | +| [src/cfsp/core/manager/CFSPManagerSpStatus.cpp](/src/cfsp/core/manager/CFSPManagerSpStatus.cpp) | C++ | -29 | 0 | -2 | -31 | +| [src/cfsp/core/simPlayer/SimPlayerBase.cpp](/src/cfsp/core/simPlayer/SimPlayerBase.cpp) | C++ | -2 | 0 | 0 | -2 | +| [src/cfsp/core/simPlayer/SimPlayerPermission.h](/src/cfsp/core/simPlayer/SimPlayerPermission.h) | C++ | 1 | 0 | 0 | 1 | +| [src/cfsp/entrance/command/GroupCommand.cpp](/src/cfsp/entrance/command/GroupCommand.cpp) | C++ | 15 | 1 | 1 | 17 | +| [src/cfsp/entrance/gui/GuiManager.h](/src/cfsp/entrance/gui/GuiManager.h) | C++ | 40 | 0 | 1 | 41 | +| [src/cfsp/entrance/gui/OperateGroupGui.cpp](/src/cfsp/entrance/gui/OperateGroupGui.cpp) | C++ | 683 | 0 | 50 | 733 | +| [src/cfsp/entrance/gui/OperateSpGui.cpp](/src/cfsp/entrance/gui/OperateSpGui.cpp) | C++ | 2 | 0 | 0 | 2 | +| [src/lang/zh\_CN.json](/src/lang/zh_CN.json) | JSON | 41 | 0 | 0 | 41 | + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-16_17-49-59/diff.csv b/.VSCodeCounter/2025-09-16_17-49-59/diff.csv new file mode 100644 index 0000000..bbd1306 --- /dev/null +++ b/.VSCodeCounter/2025-09-16_17-49-59/diff.csv @@ -0,0 +1,21 @@ +"filename", "language", "JSON", "C++", "comment", "blank", "total" +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\OperateResult.h", "C++", 0, 0, -2, 0, -2 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp", "C++", 0, 7, 0, 1, 8 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.h", "C++", 0, 1, 0, 0, 1 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp", "C++", 0, 12, 0, 1, 13 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.h", "C++", 0, 4, 0, 0, 4 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerGroup.cpp", "C++", 0, 95, 0, 3, 98 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerSp.cpp", "C++", 0, 26, -2, 7, 31 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerSpInv.cpp", "C++", 0, -59, 0, -4, -63 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerSpMessage.cpp", "C++", 0, -26, 0, -2, -28 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerSpMove.cpp", "C++", 0, -44, 0, -3, -47 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerSpOperate.cpp", "C++", 0, -55, 0, -3, -58 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerSpStatus.cpp", "C++", 0, -29, 0, -2, -31 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp", "C++", 0, -2, 0, 0, -2 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h", "C++", 0, 1, 0, 0, 1 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp", "C++", 0, 15, 1, 1, 17 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.h", "C++", 0, 40, 0, 1, 41 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp", "C++", 0, 683, 0, 50, 733 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp", "C++", 0, 2, 0, 0, 2 +"f:\Project\levilamina\1.4.x\CFSP\src\lang\zh_CN.json", "JSON", 41, 0, 0, 0, 41 +"Total", "-", 41, 671, -3, 50, 759 \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-16_17-49-59/diff.md b/.VSCodeCounter/2025-09-16_17-49-59/diff.md new file mode 100644 index 0000000..5d8b4b4 --- /dev/null +++ b/.VSCodeCounter/2025-09-16_17-49-59/diff.md @@ -0,0 +1,33 @@ +# Diff Summary + +Date : 2025-09-16 17:49:59 + +Directory f:\\Project\\levilamina\\1.4.x\\CFSP + +Total : 19 files, 712 codes, -3 comments, 50 blanks, all 759 lines + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| C++ | 18 | 671 | -3 | 50 | 718 | +| JSON | 1 | 41 | 0 | 0 | 41 | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| . | 19 | 712 | -3 | 50 | 759 | +| src | 19 | 712 | -3 | 50 | 759 | +| src\\cfsp | 18 | 671 | -3 | 50 | 718 | +| src\\cfsp\\base | 1 | 0 | -2 | 0 | -2 | +| src\\cfsp\\core | 13 | -69 | -2 | -2 | -73 | +| src\\cfsp\\core\\group | 2 | 8 | 0 | 1 | 9 | +| src\\cfsp\\core\\manager | 9 | -76 | -2 | -3 | -81 | +| src\\cfsp\\core\\simPlayer | 2 | -1 | 0 | 0 | -1 | +| src\\cfsp\\entrance | 4 | 740 | 1 | 52 | 793 | +| src\\cfsp\\entrance\\command | 1 | 15 | 1 | 1 | 17 | +| src\\cfsp\\entrance\\gui | 3 | 725 | 0 | 51 | 776 | +| src\\lang | 1 | 41 | 0 | 0 | 41 | + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-16_17-49-59/diff.txt b/.VSCodeCounter/2025-09-16_17-49-59/diff.txt new file mode 100644 index 0000000..914c632 --- /dev/null +++ b/.VSCodeCounter/2025-09-16_17-49-59/diff.txt @@ -0,0 +1,55 @@ +Date : 2025-09-16 17:49:59 +Directory : f:\Project\levilamina\1.4.x\CFSP +Total : 19 files, 712 codes, -3 comments, 50 blanks, all 759 lines + +Languages ++----------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++----------+------------+------------+------------+------------+------------+ +| C++ | 18 | 671 | -3 | 50 | 718 | +| JSON | 1 | 41 | 0 | 0 | 41 | ++----------+------------+------------+------------+------------+------------+ + +Directories ++---------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++---------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| . | 19 | 712 | -3 | 50 | 759 | +| src | 19 | 712 | -3 | 50 | 759 | +| src\cfsp | 18 | 671 | -3 | 50 | 718 | +| src\cfsp\base | 1 | 0 | -2 | 0 | -2 | +| src\cfsp\core | 13 | -69 | -2 | -2 | -73 | +| src\cfsp\core\group | 2 | 8 | 0 | 1 | 9 | +| src\cfsp\core\manager | 9 | -76 | -2 | -3 | -81 | +| src\cfsp\core\simPlayer | 2 | -1 | 0 | 0 | -1 | +| src\cfsp\entrance | 4 | 740 | 1 | 52 | 793 | +| src\cfsp\entrance\command | 1 | 15 | 1 | 1 | 17 | +| src\cfsp\entrance\gui | 3 | 725 | 0 | 51 | 776 | +| src\lang | 1 | 41 | 0 | 0 | 41 | ++---------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ + +Files ++---------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++---------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\OperateResult.h | C++ | 0 | -2 | 0 | -2 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp | C++ | 7 | 0 | 1 | 8 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.h | C++ | 1 | 0 | 0 | 1 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp | C++ | 12 | 0 | 1 | 13 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.h | C++ | 4 | 0 | 0 | 4 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerGroup.cpp | C++ | 95 | 0 | 3 | 98 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerSp.cpp | C++ | 26 | -2 | 7 | 31 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerSpInv.cpp | C++ | -59 | 0 | -4 | -63 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerSpMessage.cpp | C++ | -26 | 0 | -2 | -28 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerSpMove.cpp | C++ | -44 | 0 | -3 | -47 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerSpOperate.cpp | C++ | -55 | 0 | -3 | -58 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerSpStatus.cpp | C++ | -29 | 0 | -2 | -31 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp | C++ | -2 | 0 | 0 | -2 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h | C++ | 1 | 0 | 0 | 1 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp | C++ | 15 | 1 | 1 | 17 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.h | C++ | 40 | 0 | 1 | 41 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp | C++ | 683 | 0 | 50 | 733 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp | C++ | 2 | 0 | 0 | 2 | +| f:\Project\levilamina\1.4.x\CFSP\src\lang\zh_CN.json | JSON | 41 | 0 | 0 | 41 | +| Total | | 712 | -3 | 50 | 759 | ++---------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-16_17-49-59/results.csv b/.VSCodeCounter/2025-09-16_17-49-59/results.csv new file mode 100644 index 0000000..74cb384 --- /dev/null +++ b/.VSCodeCounter/2025-09-16_17-49-59/results.csv @@ -0,0 +1,63 @@ +"filename", "language", "XMake", "Lua", "JSON", "Markdown", "C++", "YAML", "comment", "blank", "total" +"f:\Project\levilamina\1.4.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml", "YAML", 0, 0, 0, 0, 0, 47, 0, 9, 56 +"f:\Project\levilamina\1.4.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml", "YAML", 0, 0, 0, 0, 0, 25, 0, 4, 29 +"f:\Project\levilamina\1.4.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md", "Markdown", 0, 0, 0, 10, 0, 0, 0, 9, 19 +"f:\Project\levilamina\1.4.x\CFSP\.github\workflows\build.yml", "YAML", 0, 0, 0, 0, 0, 34, 10, 12, 56 +"f:\Project\levilamina\1.4.x\CFSP\.github\workflows\release.yml", "YAML", 0, 0, 0, 0, 0, 68, 0, 17, 85 +"f:\Project\levilamina\1.4.x\CFSP\CHANGELOG.md", "Markdown", 0, 0, 0, 87, 0, 0, 0, 58, 145 +"f:\Project\levilamina\1.4.x\CFSP\CHANGELOG_ZH.md", "Markdown", 0, 0, 0, 90, 0, 0, 0, 61, 151 +"f:\Project\levilamina\1.4.x\CFSP\README.md", "Markdown", 0, 0, 0, 14, 0, 0, 0, 12, 26 +"f:\Project\levilamina\1.4.x\CFSP\manifest.json", "JSON", 0, 0, 7, 0, 0, 0, 0, 0, 7 +"f:\Project\levilamina\1.4.x\CFSP\scripts\after_build.lua", "Lua", 0, 105, 0, 0, 0, 0, 1, 19, 125 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.cpp", "C++", 0, 0, 0, 0, 21, 0, 1, 8, 30 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.h", "C++", 0, 0, 0, 0, 15, 0, 6, 14, 35 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\Config.h", "C++", 0, 0, 0, 0, 28, 0, 0, 6, 34 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\MemoryOperators.cpp", "C++", 0, 0, 0, 0, 2, 0, 2, 3, 7 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\PermissionConfig.h", "C++", 0, 0, 0, 0, 66, 0, 0, 3, 69 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Macros.h", "C++", 0, 0, 0, 0, 6, 0, 0, 2, 8 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\OperateResult.h", "C++", 0, 0, 0, 0, 44, 0, 0, 9, 53 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Schedule.h", "C++", 0, 0, 0, 0, 17, 0, 0, 5, 22 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Utils.cpp", "C++", 0, 0, 0, 0, 45, 0, 0, 6, 51 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Utils.h", "C++", 0, 0, 0, 0, 9, 0, 0, 6, 15 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp", "C++", 0, 0, 0, 0, 122, 0, 10, 11, 143 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h", "C++", 0, 0, 0, 0, 11, 0, 0, 1, 12 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp", "C++", 0, 0, 0, 0, 30, 0, 0, 4, 34 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.h", "C++", 0, 0, 0, 0, 15, 0, 0, 4, 19 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\GroupData.h", "C++", 0, 0, 0, 0, 14, 0, 0, 2, 16 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\GroupPermission.h", "C++", 0, 0, 0, 0, 32, 0, 0, 0, 32 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp", "C++", 0, 0, 0, 0, 73, 0, 0, 3, 76 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp", "C++", 0, 0, 0, 0, 13, 0, 0, 2, 15 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h", "C++", 0, 0, 0, 0, 18, 0, 0, 5, 23 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp", "C++", 0, 0, 0, 0, 46, 0, 0, 3, 49 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp", "C++", 0, 0, 0, 0, 153, 0, 0, 7, 160 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp", "C++", 0, 0, 0, 0, 11, 0, 0, 3, 14 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CacheUUidName.cpp", "C++", 0, 0, 0, 0, 0, 0, 0, 1, 1 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp", "C++", 0, 0, 0, 0, 293, 0, 5, 31, 329 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.h", "C++", 0, 0, 0, 0, 195, 0, 0, 23, 218 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerGroup.cpp", "C++", 0, 0, 0, 0, 276, 0, 1, 15, 292 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerSp.cpp", "C++", 0, 0, 0, 0, 419, 0, 12, 31, 462 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp", "C++", 0, 0, 0, 0, 160, 0, 4, 21, 185 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h", "C++", 0, 0, 0, 0, 72, 0, 0, 11, 83 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp", "C++", 0, 0, 0, 0, 31, 0, 0, 7, 38 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp", "C++", 0, 0, 0, 0, 115, 0, 0, 6, 121 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp", "C++", 0, 0, 0, 0, 35, 0, 0, 2, 37 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp", "C++", 0, 0, 0, 0, 37, 0, 0, 3, 40 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerOperate.cpp", "C++", 0, 0, 0, 0, 154, 0, 1, 7, 162 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h", "C++", 0, 0, 0, 0, 32, 0, 0, 1, 33 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp", "C++", 0, 0, 0, 0, 63, 0, 0, 3, 66 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h", "C++", 0, 0, 0, 0, 21, 0, 0, 2, 23 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp", "C++", 0, 0, 0, 0, 56, 0, 0, 4, 60 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp", "C++", 0, 0, 0, 0, 69, 0, 3, 8, 80 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\ComandManager.h", "C++", 0, 0, 0, 0, 19, 0, 1, 5, 25 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp", "C++", 0, 0, 0, 0, 514, 0, 13, 17, 544 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp", "C++", 0, 0, 0, 0, 40, 0, 3, 4, 47 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp", "C++", 0, 0, 0, 0, 544, 0, 15, 23, 582 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp", "C++", 0, 0, 0, 0, 189, 0, 0, 12, 201 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.h", "C++", 0, 0, 0, 0, 113, 0, 0, 7, 120 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp", "C++", 0, 0, 0, 0, 688, 0, 0, 52, 740 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp", "C++", 0, 0, 0, 0, 726, 0, 0, 52, 778 +"f:\Project\levilamina\1.4.x\CFSP\src\lang\en_US.json", "JSON", 0, 0, 7, 0, 0, 0, 0, 0, 7 +"f:\Project\levilamina\1.4.x\CFSP\src\lang\zh_CN.json", "JSON", 0, 0, 264, 0, 0, 0, 0, 0, 264 +"f:\Project\levilamina\1.4.x\CFSP\tooth.json", "JSON", 0, 0, 26, 0, 0, 0, 0, 0, 26 +"f:\Project\levilamina\1.4.x\CFSP\xmake.lua", "XMake", 59, 0, 0, 0, 0, 0, 3, 8, 70 +"Total", "-", 59, 105, 304, 201, 5652, 174, 91, 664, 7250 \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-16_17-49-59/results.json b/.VSCodeCounter/2025-09-16_17-49-59/results.json new file mode 100644 index 0000000..8740a56 --- /dev/null +++ b/.VSCodeCounter/2025-09-16_17-49-59/results.json @@ -0,0 +1 @@ +{"file:///f%3A/Project/levilamina/1.4.x/CFSP/xmake.lua":{"language":"XMake","code":59,"comment":3,"blank":8},"file:///f%3A/Project/levilamina/1.4.x/CFSP/scripts/after_build.lua":{"language":"Lua","code":105,"comment":1,"blank":19},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/lang/zh_CN.json":{"language":"JSON","code":264,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.4.x/CFSP/manifest.json":{"language":"JSON","code":7,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.4.x/CFSP/CHANGELOG_ZH.md":{"language":"Markdown","code":90,"comment":0,"blank":61},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/lang/en_US.json":{"language":"JSON","code":7,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/PermissionConfig.h":{"language":"C++","code":66,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/Config.h":{"language":"C++","code":28,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/CFSP.h":{"language":"C++","code":15,"comment":6,"blank":14},"file:///f%3A/Project/levilamina/1.4.x/CFSP/tooth.json":{"language":"JSON","code":26,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.4.x/CFSP/README.md":{"language":"Markdown","code":14,"comment":0,"blank":12},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/base/Utils.h":{"language":"C++","code":9,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/CFSP.cpp":{"language":"C++","code":21,"comment":1,"blank":8},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/base/OperateResult.h":{"language":"C++","code":44,"comment":0,"blank":9},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/base/Utils.cpp":{"language":"C++","code":45,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.4.x/CFSP/CHANGELOG.md":{"language":"Markdown","code":87,"comment":0,"blank":58},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/gui/GuiManager.h":{"language":"C++","code":113,"comment":0,"blank":7},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/base/Schedule.h":{"language":"C++","code":17,"comment":0,"blank":5},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/gui/OperateGroupGui.cpp":{"language":"C++","code":688,"comment":0,"blank":52},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/command/ComandManager.h":{"language":"C++","code":19,"comment":1,"blank":5},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/base/Macros.h":{"language":"C++","code":6,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/gui/GuiManager.cpp":{"language":"C++","code":189,"comment":0,"blank":12},"file:///f%3A/Project/levilamina/1.4.x/CFSP/.github/PULL_REQUEST_TEMPLATE.md":{"language":"Markdown","code":10,"comment":0,"blank":9},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/gui/OperateSpGui.cpp":{"language":"C++","code":726,"comment":0,"blank":52},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/command/ComandManager.cpp":{"language":"C++","code":69,"comment":3,"blank":8},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/command/GuiCommand.cpp":{"language":"C++","code":40,"comment":3,"blank":4},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/command/SpCommand.cpp":{"language":"C++","code":544,"comment":15,"blank":23},"file:///f%3A/Project/levilamina/1.4.x/CFSP/.github/workflows/release.yml":{"language":"YAML","code":68,"comment":0,"blank":17},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/command/GroupCommand.cpp":{"language":"C++","code":514,"comment":13,"blank":17},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayer.h":{"language":"C++","code":72,"comment":0,"blank":11},"file:///f%3A/Project/levilamina/1.4.x/CFSP/.github/ISSUE_TEMPLATE/feature_request.yml":{"language":"YAML","code":25,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerInv.cpp":{"language":"C++","code":115,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.4.x/CFSP/.github/workflows/build.yml":{"language":"YAML","code":34,"comment":10,"blank":12},"file:///f%3A/Project/levilamina/1.4.x/CFSP/.github/ISSUE_TEMPLATE/bug_report.yml":{"language":"YAML","code":47,"comment":0,"blank":9},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerSaveData.h":{"language":"C++","code":21,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerBase.cpp":{"language":"C++","code":31,"comment":0,"blank":7},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerPermission.h":{"language":"C++","code":32,"comment":0,"blank":1},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayer.cpp":{"language":"C++","code":160,"comment":4,"blank":21},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerStatus.cpp":{"language":"C++","code":56,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerSave.cpp":{"language":"C++","code":63,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerOperate.cpp":{"language":"C++","code":154,"comment":1,"blank":7},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/manager/CFSPManager.h":{"language":"C++","code":195,"comment":0,"blank":23},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/manager/CFSPManagerGroup.cpp":{"language":"C++","code":276,"comment":1,"blank":15},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerMessage.cpp":{"language":"C++","code":35,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/manager/CFSPManager.cpp":{"language":"C++","code":293,"comment":5,"blank":31},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/group/GroupData.h":{"language":"C++","code":14,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/group/GroupPermission.h":{"language":"C++","code":32,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/group/CFSPGroup.h":{"language":"C++","code":15,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/MemoryOperators.cpp":{"language":"C++","code":2,"comment":2,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerMove.cpp":{"language":"C++","code":37,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/group/CFSPGroup.cpp":{"language":"C++","code":30,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPHelperManager.h":{"language":"C++","code":18,"comment":0,"blank":5},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/manager/CFSPManagerSp.cpp":{"language":"C++","code":419,"comment":12,"blank":31},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPSaveHelper.cpp":{"language":"C++","code":153,"comment":0,"blank":7},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/fix/CFSPFixManager.h":{"language":"C++","code":11,"comment":0,"blank":1},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CacheUUidName.cpp":{"language":"C++","code":0,"comment":0,"blank":1},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPSchduleHelper.cpp":{"language":"C++","code":11,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPHelperManager.cpp":{"language":"C++","code":13,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPOperateHelper.cpp":{"language":"C++","code":46,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPAutoFuncHelper.cpp":{"language":"C++","code":73,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/fix/CFSPFixManager.cpp":{"language":"C++","code":122,"comment":10,"blank":11}} \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-16_17-49-59/results.md b/.VSCodeCounter/2025-09-16_17-49-59/results.md new file mode 100644 index 0000000..edfef50 --- /dev/null +++ b/.VSCodeCounter/2025-09-16_17-49-59/results.md @@ -0,0 +1,46 @@ +# Summary + +Date : 2025-09-16 17:49:59 + +Directory f:\\Project\\levilamina\\1.4.x\\CFSP + +Total : 61 files, 6495 codes, 91 comments, 664 blanks, all 7250 lines + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| C++ | 47 | 5,652 | 77 | 455 | 6,184 | +| JSON | 4 | 304 | 0 | 0 | 304 | +| Markdown | 4 | 201 | 0 | 140 | 341 | +| YAML | 4 | 174 | 10 | 42 | 226 | +| Lua | 1 | 105 | 1 | 19 | 125 | +| XMake | 1 | 59 | 3 | 8 | 70 | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| . | 61 | 6,495 | 91 | 664 | 7,250 | +| . (Files) | 6 | 283 | 3 | 139 | 425 | +| .github | 5 | 184 | 10 | 51 | 245 | +| .github (Files) | 1 | 10 | 0 | 9 | 19 | +| .github\\ISSUE_TEMPLATE | 2 | 72 | 0 | 13 | 85 | +| .github\\workflows | 2 | 102 | 10 | 29 | 141 | +| scripts | 1 | 105 | 1 | 19 | 125 | +| src | 49 | 5,923 | 77 | 455 | 6,455 | +| src\\cfsp | 47 | 5,652 | 77 | 455 | 6,184 | +| src\\cfsp (Files) | 5 | 132 | 9 | 34 | 175 | +| src\\cfsp\\base | 5 | 121 | 0 | 28 | 149 | +| src\\cfsp\\core | 28 | 2,497 | 33 | 213 | 2,743 | +| src\\cfsp\\core\\fix | 2 | 133 | 10 | 12 | 155 | +| src\\cfsp\\core\\group | 4 | 91 | 0 | 10 | 101 | +| src\\cfsp\\core\\helper | 7 | 314 | 0 | 24 | 338 | +| src\\cfsp\\core\\manager | 4 | 1,183 | 18 | 100 | 1,301 | +| src\\cfsp\\core\\simPlayer | 11 | 776 | 5 | 67 | 848 | +| src\\cfsp\\entrance | 9 | 2,902 | 35 | 180 | 3,117 | +| src\\cfsp\\entrance\\command | 5 | 1,186 | 35 | 57 | 1,278 | +| src\\cfsp\\entrance\\gui | 4 | 1,716 | 0 | 123 | 1,839 | +| src\\lang | 2 | 271 | 0 | 0 | 271 | + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-16_17-49-59/results.txt b/.VSCodeCounter/2025-09-16_17-49-59/results.txt new file mode 100644 index 0000000..d026e60 --- /dev/null +++ b/.VSCodeCounter/2025-09-16_17-49-59/results.txt @@ -0,0 +1,110 @@ +Date : 2025-09-16 17:49:59 +Directory : f:\Project\levilamina\1.4.x\CFSP +Total : 61 files, 6495 codes, 91 comments, 664 blanks, all 7250 lines + +Languages ++----------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++----------+------------+------------+------------+------------+------------+ +| C++ | 47 | 5,652 | 77 | 455 | 6,184 | +| JSON | 4 | 304 | 0 | 0 | 304 | +| Markdown | 4 | 201 | 0 | 140 | 341 | +| YAML | 4 | 174 | 10 | 42 | 226 | +| Lua | 1 | 105 | 1 | 19 | 125 | +| XMake | 1 | 59 | 3 | 8 | 70 | ++----------+------------+------------+------------+------------+------------+ + +Directories ++--------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++--------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| . | 61 | 6,495 | 91 | 664 | 7,250 | +| . (Files) | 6 | 283 | 3 | 139 | 425 | +| .github | 5 | 184 | 10 | 51 | 245 | +| .github (Files) | 1 | 10 | 0 | 9 | 19 | +| .github\ISSUE_TEMPLATE | 2 | 72 | 0 | 13 | 85 | +| .github\workflows | 2 | 102 | 10 | 29 | 141 | +| scripts | 1 | 105 | 1 | 19 | 125 | +| src | 49 | 5,923 | 77 | 455 | 6,455 | +| src\cfsp | 47 | 5,652 | 77 | 455 | 6,184 | +| src\cfsp (Files) | 5 | 132 | 9 | 34 | 175 | +| src\cfsp\base | 5 | 121 | 0 | 28 | 149 | +| src\cfsp\core | 28 | 2,497 | 33 | 213 | 2,743 | +| src\cfsp\core\fix | 2 | 133 | 10 | 12 | 155 | +| src\cfsp\core\group | 4 | 91 | 0 | 10 | 101 | +| src\cfsp\core\helper | 7 | 314 | 0 | 24 | 338 | +| src\cfsp\core\manager | 4 | 1,183 | 18 | 100 | 1,301 | +| src\cfsp\core\simPlayer | 11 | 776 | 5 | 67 | 848 | +| src\cfsp\entrance | 9 | 2,902 | 35 | 180 | 3,117 | +| src\cfsp\entrance\command | 5 | 1,186 | 35 | 57 | 1,278 | +| src\cfsp\entrance\gui | 4 | 1,716 | 0 | 123 | 1,839 | +| src\lang | 2 | 271 | 0 | 0 | 271 | ++--------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ + +Files ++--------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++--------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| f:\Project\levilamina\1.4.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml | YAML | 47 | 0 | 9 | 56 | +| f:\Project\levilamina\1.4.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml | YAML | 25 | 0 | 4 | 29 | +| f:\Project\levilamina\1.4.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md | Markdown | 10 | 0 | 9 | 19 | +| f:\Project\levilamina\1.4.x\CFSP\.github\workflows\build.yml | YAML | 34 | 10 | 12 | 56 | +| f:\Project\levilamina\1.4.x\CFSP\.github\workflows\release.yml | YAML | 68 | 0 | 17 | 85 | +| f:\Project\levilamina\1.4.x\CFSP\CHANGELOG.md | Markdown | 87 | 0 | 58 | 145 | +| f:\Project\levilamina\1.4.x\CFSP\CHANGELOG_ZH.md | Markdown | 90 | 0 | 61 | 151 | +| f:\Project\levilamina\1.4.x\CFSP\README.md | Markdown | 14 | 0 | 12 | 26 | +| f:\Project\levilamina\1.4.x\CFSP\manifest.json | JSON | 7 | 0 | 0 | 7 | +| f:\Project\levilamina\1.4.x\CFSP\scripts\after_build.lua | Lua | 105 | 1 | 19 | 125 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.cpp | C++ | 21 | 1 | 8 | 30 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.h | C++ | 15 | 6 | 14 | 35 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\Config.h | C++ | 28 | 0 | 6 | 34 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\MemoryOperators.cpp | C++ | 2 | 2 | 3 | 7 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\PermissionConfig.h | C++ | 66 | 0 | 3 | 69 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Macros.h | C++ | 6 | 0 | 2 | 8 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\OperateResult.h | C++ | 44 | 0 | 9 | 53 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Schedule.h | C++ | 17 | 0 | 5 | 22 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Utils.cpp | C++ | 45 | 0 | 6 | 51 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Utils.h | C++ | 9 | 0 | 6 | 15 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp | C++ | 122 | 10 | 11 | 143 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h | C++ | 11 | 0 | 1 | 12 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp | C++ | 30 | 0 | 4 | 34 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.h | C++ | 15 | 0 | 4 | 19 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\GroupData.h | C++ | 14 | 0 | 2 | 16 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\GroupPermission.h | C++ | 32 | 0 | 0 | 32 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp | C++ | 73 | 0 | 3 | 76 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp | C++ | 13 | 0 | 2 | 15 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h | C++ | 18 | 0 | 5 | 23 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp | C++ | 46 | 0 | 3 | 49 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp | C++ | 153 | 0 | 7 | 160 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp | C++ | 11 | 0 | 3 | 14 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CacheUUidName.cpp | C++ | 0 | 0 | 1 | 1 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp | C++ | 293 | 5 | 31 | 329 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.h | C++ | 195 | 0 | 23 | 218 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerGroup.cpp | C++ | 276 | 1 | 15 | 292 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerSp.cpp | C++ | 419 | 12 | 31 | 462 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp | C++ | 160 | 4 | 21 | 185 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h | C++ | 72 | 0 | 11 | 83 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp | C++ | 31 | 0 | 7 | 38 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp | C++ | 115 | 0 | 6 | 121 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp | C++ | 35 | 0 | 2 | 37 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp | C++ | 37 | 0 | 3 | 40 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerOperate.cpp | C++ | 154 | 1 | 7 | 162 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h | C++ | 32 | 0 | 1 | 33 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp | C++ | 63 | 0 | 3 | 66 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h | C++ | 21 | 0 | 2 | 23 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp | C++ | 56 | 0 | 4 | 60 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp | C++ | 69 | 3 | 8 | 80 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\ComandManager.h | C++ | 19 | 1 | 5 | 25 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp | C++ | 514 | 13 | 17 | 544 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp | C++ | 40 | 3 | 4 | 47 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp | C++ | 544 | 15 | 23 | 582 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp | C++ | 189 | 0 | 12 | 201 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.h | C++ | 113 | 0 | 7 | 120 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp | C++ | 688 | 0 | 52 | 740 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp | C++ | 726 | 0 | 52 | 778 | +| f:\Project\levilamina\1.4.x\CFSP\src\lang\en_US.json | JSON | 7 | 0 | 0 | 7 | +| f:\Project\levilamina\1.4.x\CFSP\src\lang\zh_CN.json | JSON | 264 | 0 | 0 | 264 | +| f:\Project\levilamina\1.4.x\CFSP\tooth.json | JSON | 26 | 0 | 0 | 26 | +| f:\Project\levilamina\1.4.x\CFSP\xmake.lua | XMake | 59 | 3 | 8 | 70 | +| Total | | 6,495 | 91 | 664 | 7,250 | ++--------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-16_20-51-13/details.md b/.VSCodeCounter/2025-09-16_20-51-13/details.md new file mode 100644 index 0000000..21e618e --- /dev/null +++ b/.VSCodeCounter/2025-09-16_20-51-13/details.md @@ -0,0 +1,77 @@ +# Details + +Date : 2025-09-16 20:51:13 + +Directory f:\\Project\\levilamina\\1.4.x\\CFSP + +Total : 62 files, 6677 codes, 92 comments, 668 blanks, all 7437 lines + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | +| [.github/ISSUE\_TEMPLATE/bug\_report.yml](/.github/ISSUE_TEMPLATE/bug_report.yml) | YAML | 47 | 0 | 9 | 56 | +| [.github/ISSUE\_TEMPLATE/feature\_request.yml](/.github/ISSUE_TEMPLATE/feature_request.yml) | YAML | 25 | 0 | 4 | 29 | +| [.github/PULL\_REQUEST\_TEMPLATE.md](/.github/PULL_REQUEST_TEMPLATE.md) | Markdown | 10 | 0 | 9 | 19 | +| [.github/workflows/build.yml](/.github/workflows/build.yml) | YAML | 34 | 10 | 12 | 56 | +| [.github/workflows/release.yml](/.github/workflows/release.yml) | YAML | 68 | 0 | 17 | 85 | +| [CHANGELOG.md](/CHANGELOG.md) | Markdown | 87 | 0 | 58 | 145 | +| [CHANGELOG\_ZH.md](/CHANGELOG_ZH.md) | Markdown | 90 | 0 | 61 | 151 | +| [README.md](/README.md) | Markdown | 14 | 0 | 12 | 26 | +| [manifest.json](/manifest.json) | JSON | 7 | 0 | 0 | 7 | +| [scripts/after\_build.lua](/scripts/after_build.lua) | Lua | 105 | 1 | 19 | 125 | +| [src/cfsp/CFSP.cpp](/src/cfsp/CFSP.cpp) | C++ | 21 | 1 | 8 | 30 | +| [src/cfsp/CFSP.h](/src/cfsp/CFSP.h) | C++ | 15 | 6 | 14 | 35 | +| [src/cfsp/Config.h](/src/cfsp/Config.h) | C++ | 28 | 0 | 6 | 34 | +| [src/cfsp/MemoryOperators.cpp](/src/cfsp/MemoryOperators.cpp) | C++ | 2 | 2 | 3 | 7 | +| [src/cfsp/PermissionConfig.h](/src/cfsp/PermissionConfig.h) | C++ | 70 | 0 | 3 | 73 | +| [src/cfsp/base/Macros.h](/src/cfsp/base/Macros.h) | C++ | 6 | 0 | 2 | 8 | +| [src/cfsp/base/OperateResult.h](/src/cfsp/base/OperateResult.h) | C++ | 44 | 0 | 9 | 53 | +| [src/cfsp/base/Schedule.h](/src/cfsp/base/Schedule.h) | C++ | 17 | 0 | 5 | 22 | +| [src/cfsp/base/Utils.cpp](/src/cfsp/base/Utils.cpp) | C++ | 45 | 0 | 6 | 51 | +| [src/cfsp/base/Utils.h](/src/cfsp/base/Utils.h) | C++ | 9 | 0 | 6 | 15 | +| [src/cfsp/core/fix/CFSPFixManager.cpp](/src/cfsp/core/fix/CFSPFixManager.cpp) | C++ | 122 | 10 | 11 | 143 | +| [src/cfsp/core/fix/CFSPFixManager.h](/src/cfsp/core/fix/CFSPFixManager.h) | C++ | 11 | 0 | 1 | 12 | +| [src/cfsp/core/group/CFSPGroup.cpp](/src/cfsp/core/group/CFSPGroup.cpp) | C++ | 30 | 0 | 4 | 34 | +| [src/cfsp/core/group/CFSPGroup.h](/src/cfsp/core/group/CFSPGroup.h) | C++ | 15 | 0 | 4 | 19 | +| [src/cfsp/core/group/GroupData.h](/src/cfsp/core/group/GroupData.h) | C++ | 14 | 0 | 2 | 16 | +| [src/cfsp/core/group/GroupPermission.h](/src/cfsp/core/group/GroupPermission.h) | C++ | 32 | 0 | 0 | 32 | +| [src/cfsp/core/helper/CFSPAutoFuncHelper.cpp](/src/cfsp/core/helper/CFSPAutoFuncHelper.cpp) | C++ | 73 | 0 | 3 | 76 | +| [src/cfsp/core/helper/CFSPHelperManager.cpp](/src/cfsp/core/helper/CFSPHelperManager.cpp) | C++ | 13 | 0 | 2 | 15 | +| [src/cfsp/core/helper/CFSPHelperManager.h](/src/cfsp/core/helper/CFSPHelperManager.h) | C++ | 18 | 0 | 5 | 23 | +| [src/cfsp/core/helper/CFSPOperateHelper.cpp](/src/cfsp/core/helper/CFSPOperateHelper.cpp) | C++ | 46 | 0 | 3 | 49 | +| [src/cfsp/core/helper/CFSPSaveHelper.cpp](/src/cfsp/core/helper/CFSPSaveHelper.cpp) | C++ | 153 | 0 | 7 | 160 | +| [src/cfsp/core/helper/CFSPSchduleHelper.cpp](/src/cfsp/core/helper/CFSPSchduleHelper.cpp) | C++ | 11 | 0 | 3 | 14 | +| [src/cfsp/core/helper/CacheUUidName.cpp](/src/cfsp/core/helper/CacheUUidName.cpp) | C++ | 0 | 0 | 1 | 1 | +| [src/cfsp/core/manager/CFSPGroupManager.cpp](/src/cfsp/core/manager/CFSPGroupManager.cpp) | C++ | 189 | 1 | 12 | 202 | +| [src/cfsp/core/manager/CFSPManager.cpp](/src/cfsp/core/manager/CFSPManager.cpp) | C++ | 209 | 0 | 25 | 234 | +| [src/cfsp/core/manager/CFSPManager.h](/src/cfsp/core/manager/CFSPManager.h) | C++ | 206 | 0 | 24 | 230 | +| [src/cfsp/core/manager/CFSPPermissionManager.cpp](/src/cfsp/core/manager/CFSPPermissionManager.cpp) | C++ | 353 | 5 | 14 | 372 | +| [src/cfsp/core/manager/CFSPSpManager.cpp](/src/cfsp/core/manager/CFSPSpManager.cpp) | C++ | 321 | 12 | 28 | 361 | +| [src/cfsp/core/simPlayer/SimPlayer.cpp](/src/cfsp/core/simPlayer/SimPlayer.cpp) | C++ | 161 | 4 | 21 | 186 | +| [src/cfsp/core/simPlayer/SimPlayer.h](/src/cfsp/core/simPlayer/SimPlayer.h) | C++ | 72 | 0 | 11 | 83 | +| [src/cfsp/core/simPlayer/SimPlayerBase.cpp](/src/cfsp/core/simPlayer/SimPlayerBase.cpp) | C++ | 31 | 0 | 7 | 38 | +| [src/cfsp/core/simPlayer/SimPlayerInv.cpp](/src/cfsp/core/simPlayer/SimPlayerInv.cpp) | C++ | 115 | 0 | 6 | 121 | +| [src/cfsp/core/simPlayer/SimPlayerMessage.cpp](/src/cfsp/core/simPlayer/SimPlayerMessage.cpp) | C++ | 35 | 0 | 2 | 37 | +| [src/cfsp/core/simPlayer/SimPlayerMove.cpp](/src/cfsp/core/simPlayer/SimPlayerMove.cpp) | C++ | 37 | 0 | 3 | 40 | +| [src/cfsp/core/simPlayer/SimPlayerOperate.cpp](/src/cfsp/core/simPlayer/SimPlayerOperate.cpp) | C++ | 154 | 1 | 7 | 162 | +| [src/cfsp/core/simPlayer/SimPlayerPermission.h](/src/cfsp/core/simPlayer/SimPlayerPermission.h) | C++ | 32 | 0 | 1 | 33 | +| [src/cfsp/core/simPlayer/SimPlayerSave.cpp](/src/cfsp/core/simPlayer/SimPlayerSave.cpp) | C++ | 63 | 0 | 3 | 66 | +| [src/cfsp/core/simPlayer/SimPlayerSaveData.h](/src/cfsp/core/simPlayer/SimPlayerSaveData.h) | C++ | 21 | 0 | 2 | 23 | +| [src/cfsp/core/simPlayer/SimPlayerStatus.cpp](/src/cfsp/core/simPlayer/SimPlayerStatus.cpp) | C++ | 56 | 0 | 4 | 60 | +| [src/cfsp/entrance/command/ComandManager.cpp](/src/cfsp/entrance/command/ComandManager.cpp) | C++ | 69 | 3 | 8 | 80 | +| [src/cfsp/entrance/command/ComandManager.h](/src/cfsp/entrance/command/ComandManager.h) | C++ | 19 | 1 | 5 | 25 | +| [src/cfsp/entrance/command/GroupCommand.cpp](/src/cfsp/entrance/command/GroupCommand.cpp) | C++ | 514 | 13 | 17 | 544 | +| [src/cfsp/entrance/command/GuiCommand.cpp](/src/cfsp/entrance/command/GuiCommand.cpp) | C++ | 40 | 3 | 4 | 47 | +| [src/cfsp/entrance/command/SpCommand.cpp](/src/cfsp/entrance/command/SpCommand.cpp) | C++ | 621 | 16 | 24 | 661 | +| [src/cfsp/entrance/gui/GuiManager.cpp](/src/cfsp/entrance/gui/GuiManager.cpp) | C++ | 190 | 0 | 12 | 202 | +| [src/cfsp/entrance/gui/GuiManager.h](/src/cfsp/entrance/gui/GuiManager.h) | C++ | 113 | 0 | 7 | 120 | +| [src/cfsp/entrance/gui/OperateGroupGui.cpp](/src/cfsp/entrance/gui/OperateGroupGui.cpp) | C++ | 689 | 0 | 52 | 741 | +| [src/cfsp/entrance/gui/OperateSpGui.cpp](/src/cfsp/entrance/gui/OperateSpGui.cpp) | C++ | 726 | 0 | 52 | 778 | +| [src/lang/en\_US.json](/src/lang/en_US.json) | JSON | 7 | 0 | 0 | 7 | +| [src/lang/zh\_CN.json](/src/lang/zh_CN.json) | JSON | 267 | 0 | 0 | 267 | +| [tooth.json](/tooth.json) | JSON | 26 | 0 | 0 | 26 | +| [xmake.lua](/xmake.lua) | XMake | 59 | 3 | 8 | 70 | + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-16_20-51-13/diff-details.md b/.VSCodeCounter/2025-09-16_20-51-13/diff-details.md new file mode 100644 index 0000000..b15d260 --- /dev/null +++ b/.VSCodeCounter/2025-09-16_20-51-13/diff-details.md @@ -0,0 +1,28 @@ +# Diff Details + +Date : 2025-09-16 20:51:13 + +Directory f:\\Project\\levilamina\\1.4.x\\CFSP + +Total : 13 files, 182 codes, 1 comments, 4 blanks, all 187 lines + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | +| [src/cfsp/PermissionConfig.h](/src/cfsp/PermissionConfig.h) | C++ | 4 | 0 | 0 | 4 | +| [src/cfsp/core/manager/CFSPGroupManager.cpp](/src/cfsp/core/manager/CFSPGroupManager.cpp) | C++ | 189 | 1 | 12 | 202 | +| [src/cfsp/core/manager/CFSPManager.cpp](/src/cfsp/core/manager/CFSPManager.cpp) | C++ | -84 | -5 | -6 | -95 | +| [src/cfsp/core/manager/CFSPManager.h](/src/cfsp/core/manager/CFSPManager.h) | C++ | 11 | 0 | 1 | 12 | +| [src/cfsp/core/manager/CFSPManagerGroup.cpp](/src/cfsp/core/manager/CFSPManagerGroup.cpp) | C++ | -276 | -1 | -15 | -292 | +| [src/cfsp/core/manager/CFSPManagerSp.cpp](/src/cfsp/core/manager/CFSPManagerSp.cpp) | C++ | -419 | -12 | -31 | -462 | +| [src/cfsp/core/manager/CFSPPermissionManager.cpp](/src/cfsp/core/manager/CFSPPermissionManager.cpp) | C++ | 353 | 5 | 14 | 372 | +| [src/cfsp/core/manager/CFSPSpManager.cpp](/src/cfsp/core/manager/CFSPSpManager.cpp) | C++ | 321 | 12 | 28 | 361 | +| [src/cfsp/core/simPlayer/SimPlayer.cpp](/src/cfsp/core/simPlayer/SimPlayer.cpp) | C++ | 1 | 0 | 0 | 1 | +| [src/cfsp/entrance/command/SpCommand.cpp](/src/cfsp/entrance/command/SpCommand.cpp) | C++ | 77 | 1 | 1 | 79 | +| [src/cfsp/entrance/gui/GuiManager.cpp](/src/cfsp/entrance/gui/GuiManager.cpp) | C++ | 1 | 0 | 0 | 1 | +| [src/cfsp/entrance/gui/OperateGroupGui.cpp](/src/cfsp/entrance/gui/OperateGroupGui.cpp) | C++ | 1 | 0 | 0 | 1 | +| [src/lang/zh\_CN.json](/src/lang/zh_CN.json) | JSON | 3 | 0 | 0 | 3 | + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-16_20-51-13/diff.csv b/.VSCodeCounter/2025-09-16_20-51-13/diff.csv new file mode 100644 index 0000000..0bbfc02 --- /dev/null +++ b/.VSCodeCounter/2025-09-16_20-51-13/diff.csv @@ -0,0 +1,15 @@ +"filename", "language", "C++", "JSON", "comment", "blank", "total" +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\PermissionConfig.h", "C++", 4, 0, 0, 0, 4 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp", "C++", 189, 0, 1, 12, 202 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp", "C++", -84, 0, -5, -6, -95 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.h", "C++", 11, 0, 0, 1, 12 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerGroup.cpp", "C++", -276, 0, -1, -15, -292 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerSp.cpp", "C++", -419, 0, -12, -31, -462 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp", "C++", 353, 0, 5, 14, 372 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp", "C++", 321, 0, 12, 28, 361 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp", "C++", 1, 0, 0, 0, 1 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp", "C++", 77, 0, 1, 1, 79 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp", "C++", 1, 0, 0, 0, 1 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp", "C++", 1, 0, 0, 0, 1 +"f:\Project\levilamina\1.4.x\CFSP\src\lang\zh_CN.json", "JSON", 0, 3, 0, 0, 3 +"Total", "-", 179, 3, 1, 4, 187 \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-16_20-51-13/diff.md b/.VSCodeCounter/2025-09-16_20-51-13/diff.md new file mode 100644 index 0000000..a2e836a --- /dev/null +++ b/.VSCodeCounter/2025-09-16_20-51-13/diff.md @@ -0,0 +1,32 @@ +# Diff Summary + +Date : 2025-09-16 20:51:13 + +Directory f:\\Project\\levilamina\\1.4.x\\CFSP + +Total : 13 files, 182 codes, 1 comments, 4 blanks, all 187 lines + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| C++ | 12 | 179 | 1 | 4 | 184 | +| JSON | 1 | 3 | 0 | 0 | 3 | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| . | 13 | 182 | 1 | 4 | 187 | +| src | 13 | 182 | 1 | 4 | 187 | +| src\\cfsp | 12 | 179 | 1 | 4 | 184 | +| src\\cfsp (Files) | 1 | 4 | 0 | 0 | 4 | +| src\\cfsp\\core | 8 | 96 | 0 | 3 | 99 | +| src\\cfsp\\core\\manager | 7 | 95 | 0 | 3 | 98 | +| src\\cfsp\\core\\simPlayer | 1 | 1 | 0 | 0 | 1 | +| src\\cfsp\\entrance | 3 | 79 | 1 | 1 | 81 | +| src\\cfsp\\entrance\\command | 1 | 77 | 1 | 1 | 79 | +| src\\cfsp\\entrance\\gui | 2 | 2 | 0 | 0 | 2 | +| src\\lang | 1 | 3 | 0 | 0 | 3 | + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-16_20-51-13/diff.txt b/.VSCodeCounter/2025-09-16_20-51-13/diff.txt new file mode 100644 index 0000000..6c16ecb --- /dev/null +++ b/.VSCodeCounter/2025-09-16_20-51-13/diff.txt @@ -0,0 +1,48 @@ +Date : 2025-09-16 20:51:13 +Directory : f:\Project\levilamina\1.4.x\CFSP +Total : 13 files, 182 codes, 1 comments, 4 blanks, all 187 lines + +Languages ++----------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++----------+------------+------------+------------+------------+------------+ +| C++ | 12 | 179 | 1 | 4 | 184 | +| JSON | 1 | 3 | 0 | 0 | 3 | ++----------+------------+------------+------------+------------+------------+ + +Directories ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| . | 13 | 182 | 1 | 4 | 187 | +| src | 13 | 182 | 1 | 4 | 187 | +| src\cfsp | 12 | 179 | 1 | 4 | 184 | +| src\cfsp (Files) | 1 | 4 | 0 | 0 | 4 | +| src\cfsp\core | 8 | 96 | 0 | 3 | 99 | +| src\cfsp\core\manager | 7 | 95 | 0 | 3 | 98 | +| src\cfsp\core\simPlayer | 1 | 1 | 0 | 0 | 1 | +| src\cfsp\entrance | 3 | 79 | 1 | 1 | 81 | +| src\cfsp\entrance\command | 1 | 77 | 1 | 1 | 79 | +| src\cfsp\entrance\gui | 2 | 2 | 0 | 0 | 2 | +| src\lang | 1 | 3 | 0 | 0 | 3 | ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ + +Files ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\PermissionConfig.h | C++ | 4 | 0 | 0 | 4 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp | C++ | 189 | 1 | 12 | 202 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp | C++ | -84 | -5 | -6 | -95 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.h | C++ | 11 | 0 | 1 | 12 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerGroup.cpp | C++ | -276 | -1 | -15 | -292 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManagerSp.cpp | C++ | -419 | -12 | -31 | -462 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp | C++ | 353 | 5 | 14 | 372 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp | C++ | 321 | 12 | 28 | 361 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp | C++ | 1 | 0 | 0 | 1 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp | C++ | 77 | 1 | 1 | 79 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp | C++ | 1 | 0 | 0 | 1 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp | C++ | 1 | 0 | 0 | 1 | +| f:\Project\levilamina\1.4.x\CFSP\src\lang\zh_CN.json | JSON | 3 | 0 | 0 | 3 | +| Total | | 182 | 1 | 4 | 187 | ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-16_20-51-13/results.csv b/.VSCodeCounter/2025-09-16_20-51-13/results.csv new file mode 100644 index 0000000..a1dd0fb --- /dev/null +++ b/.VSCodeCounter/2025-09-16_20-51-13/results.csv @@ -0,0 +1,64 @@ +"filename", "language", "XMake", "JSON", "Markdown", "Lua", "YAML", "C++", "comment", "blank", "total" +"f:\Project\levilamina\1.4.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml", "YAML", 0, 0, 0, 0, 47, 0, 0, 9, 56 +"f:\Project\levilamina\1.4.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml", "YAML", 0, 0, 0, 0, 25, 0, 0, 4, 29 +"f:\Project\levilamina\1.4.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md", "Markdown", 0, 0, 10, 0, 0, 0, 0, 9, 19 +"f:\Project\levilamina\1.4.x\CFSP\.github\workflows\build.yml", "YAML", 0, 0, 0, 0, 34, 0, 10, 12, 56 +"f:\Project\levilamina\1.4.x\CFSP\.github\workflows\release.yml", "YAML", 0, 0, 0, 0, 68, 0, 0, 17, 85 +"f:\Project\levilamina\1.4.x\CFSP\CHANGELOG.md", "Markdown", 0, 0, 87, 0, 0, 0, 0, 58, 145 +"f:\Project\levilamina\1.4.x\CFSP\CHANGELOG_ZH.md", "Markdown", 0, 0, 90, 0, 0, 0, 0, 61, 151 +"f:\Project\levilamina\1.4.x\CFSP\README.md", "Markdown", 0, 0, 14, 0, 0, 0, 0, 12, 26 +"f:\Project\levilamina\1.4.x\CFSP\manifest.json", "JSON", 0, 7, 0, 0, 0, 0, 0, 0, 7 +"f:\Project\levilamina\1.4.x\CFSP\scripts\after_build.lua", "Lua", 0, 0, 0, 105, 0, 0, 1, 19, 125 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.cpp", "C++", 0, 0, 0, 0, 0, 21, 1, 8, 30 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.h", "C++", 0, 0, 0, 0, 0, 15, 6, 14, 35 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\Config.h", "C++", 0, 0, 0, 0, 0, 28, 0, 6, 34 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\MemoryOperators.cpp", "C++", 0, 0, 0, 0, 0, 2, 2, 3, 7 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\PermissionConfig.h", "C++", 0, 0, 0, 0, 0, 70, 0, 3, 73 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Macros.h", "C++", 0, 0, 0, 0, 0, 6, 0, 2, 8 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\OperateResult.h", "C++", 0, 0, 0, 0, 0, 44, 0, 9, 53 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Schedule.h", "C++", 0, 0, 0, 0, 0, 17, 0, 5, 22 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Utils.cpp", "C++", 0, 0, 0, 0, 0, 45, 0, 6, 51 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Utils.h", "C++", 0, 0, 0, 0, 0, 9, 0, 6, 15 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp", "C++", 0, 0, 0, 0, 0, 122, 10, 11, 143 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h", "C++", 0, 0, 0, 0, 0, 11, 0, 1, 12 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp", "C++", 0, 0, 0, 0, 0, 30, 0, 4, 34 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.h", "C++", 0, 0, 0, 0, 0, 15, 0, 4, 19 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\GroupData.h", "C++", 0, 0, 0, 0, 0, 14, 0, 2, 16 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\GroupPermission.h", "C++", 0, 0, 0, 0, 0, 32, 0, 0, 32 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp", "C++", 0, 0, 0, 0, 0, 73, 0, 3, 76 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp", "C++", 0, 0, 0, 0, 0, 13, 0, 2, 15 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h", "C++", 0, 0, 0, 0, 0, 18, 0, 5, 23 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp", "C++", 0, 0, 0, 0, 0, 46, 0, 3, 49 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp", "C++", 0, 0, 0, 0, 0, 153, 0, 7, 160 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp", "C++", 0, 0, 0, 0, 0, 11, 0, 3, 14 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CacheUUidName.cpp", "C++", 0, 0, 0, 0, 0, 0, 0, 1, 1 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp", "C++", 0, 0, 0, 0, 0, 189, 1, 12, 202 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp", "C++", 0, 0, 0, 0, 0, 209, 0, 25, 234 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.h", "C++", 0, 0, 0, 0, 0, 206, 0, 24, 230 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp", "C++", 0, 0, 0, 0, 0, 353, 5, 14, 372 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp", "C++", 0, 0, 0, 0, 0, 321, 12, 28, 361 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp", "C++", 0, 0, 0, 0, 0, 161, 4, 21, 186 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h", "C++", 0, 0, 0, 0, 0, 72, 0, 11, 83 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp", "C++", 0, 0, 0, 0, 0, 31, 0, 7, 38 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp", "C++", 0, 0, 0, 0, 0, 115, 0, 6, 121 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp", "C++", 0, 0, 0, 0, 0, 35, 0, 2, 37 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp", "C++", 0, 0, 0, 0, 0, 37, 0, 3, 40 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerOperate.cpp", "C++", 0, 0, 0, 0, 0, 154, 1, 7, 162 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h", "C++", 0, 0, 0, 0, 0, 32, 0, 1, 33 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp", "C++", 0, 0, 0, 0, 0, 63, 0, 3, 66 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h", "C++", 0, 0, 0, 0, 0, 21, 0, 2, 23 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp", "C++", 0, 0, 0, 0, 0, 56, 0, 4, 60 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp", "C++", 0, 0, 0, 0, 0, 69, 3, 8, 80 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\ComandManager.h", "C++", 0, 0, 0, 0, 0, 19, 1, 5, 25 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp", "C++", 0, 0, 0, 0, 0, 514, 13, 17, 544 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp", "C++", 0, 0, 0, 0, 0, 40, 3, 4, 47 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp", "C++", 0, 0, 0, 0, 0, 621, 16, 24, 661 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp", "C++", 0, 0, 0, 0, 0, 190, 0, 12, 202 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.h", "C++", 0, 0, 0, 0, 0, 113, 0, 7, 120 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp", "C++", 0, 0, 0, 0, 0, 689, 0, 52, 741 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp", "C++", 0, 0, 0, 0, 0, 726, 0, 52, 778 +"f:\Project\levilamina\1.4.x\CFSP\src\lang\en_US.json", "JSON", 0, 7, 0, 0, 0, 0, 0, 0, 7 +"f:\Project\levilamina\1.4.x\CFSP\src\lang\zh_CN.json", "JSON", 0, 267, 0, 0, 0, 0, 0, 0, 267 +"f:\Project\levilamina\1.4.x\CFSP\tooth.json", "JSON", 0, 26, 0, 0, 0, 0, 0, 0, 26 +"f:\Project\levilamina\1.4.x\CFSP\xmake.lua", "XMake", 59, 0, 0, 0, 0, 0, 3, 8, 70 +"Total", "-", 59, 307, 201, 105, 174, 5831, 92, 668, 7437 \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-16_20-51-13/results.json b/.VSCodeCounter/2025-09-16_20-51-13/results.json new file mode 100644 index 0000000..27c02d6 --- /dev/null +++ b/.VSCodeCounter/2025-09-16_20-51-13/results.json @@ -0,0 +1 @@ +{"file:///f%3A/Project/levilamina/1.4.x/CFSP/xmake.lua":{"language":"XMake","code":59,"comment":3,"blank":8},"file:///f%3A/Project/levilamina/1.4.x/CFSP/manifest.json":{"language":"JSON","code":7,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.4.x/CFSP/README.md":{"language":"Markdown","code":14,"comment":0,"blank":12},"file:///f%3A/Project/levilamina/1.4.x/CFSP/tooth.json":{"language":"JSON","code":26,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.4.x/CFSP/.github/PULL_REQUEST_TEMPLATE.md":{"language":"Markdown","code":10,"comment":0,"blank":9},"file:///f%3A/Project/levilamina/1.4.x/CFSP/scripts/after_build.lua":{"language":"Lua","code":105,"comment":1,"blank":19},"file:///f%3A/Project/levilamina/1.4.x/CFSP/CHANGELOG_ZH.md":{"language":"Markdown","code":90,"comment":0,"blank":61},"file:///f%3A/Project/levilamina/1.4.x/CFSP/CHANGELOG.md":{"language":"Markdown","code":87,"comment":0,"blank":58},"file:///f%3A/Project/levilamina/1.4.x/CFSP/.github/workflows/release.yml":{"language":"YAML","code":68,"comment":0,"blank":17},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/PermissionConfig.h":{"language":"C++","code":70,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/MemoryOperators.cpp":{"language":"C++","code":2,"comment":2,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/.github/workflows/build.yml":{"language":"YAML","code":34,"comment":10,"blank":12},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/lang/en_US.json":{"language":"JSON","code":7,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/command/GuiCommand.cpp":{"language":"C++","code":40,"comment":3,"blank":4},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/gui/GuiManager.h":{"language":"C++","code":113,"comment":0,"blank":7},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/gui/OperateSpGui.cpp":{"language":"C++","code":726,"comment":0,"blank":52},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/lang/zh_CN.json":{"language":"JSON","code":267,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/command/ComandManager.h":{"language":"C++","code":19,"comment":1,"blank":5},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/command/ComandManager.cpp":{"language":"C++","code":69,"comment":3,"blank":8},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/group/GroupData.h":{"language":"C++","code":14,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/command/GroupCommand.cpp":{"language":"C++","code":514,"comment":13,"blank":17},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/group/CFSPGroup.h":{"language":"C++","code":15,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/group/CFSPGroup.cpp":{"language":"C++","code":30,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/group/GroupPermission.h":{"language":"C++","code":32,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/CFSP.h":{"language":"C++","code":15,"comment":6,"blank":14},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/Config.h":{"language":"C++","code":28,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/CFSP.cpp":{"language":"C++","code":21,"comment":1,"blank":8},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/base/OperateResult.h":{"language":"C++","code":44,"comment":0,"blank":9},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/base/Schedule.h":{"language":"C++","code":17,"comment":0,"blank":5},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPSchduleHelper.cpp":{"language":"C++","code":11,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/base/Macros.h":{"language":"C++","code":6,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPSaveHelper.cpp":{"language":"C++","code":153,"comment":0,"blank":7},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPOperateHelper.cpp":{"language":"C++","code":46,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPHelperManager.h":{"language":"C++","code":18,"comment":0,"blank":5},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPHelperManager.cpp":{"language":"C++","code":13,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPAutoFuncHelper.cpp":{"language":"C++","code":73,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/base/Utils.cpp":{"language":"C++","code":45,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CacheUUidName.cpp":{"language":"C++","code":0,"comment":0,"blank":1},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/base/Utils.h":{"language":"C++","code":9,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/manager/CFSPSpManager.cpp":{"language":"C++","code":321,"comment":12,"blank":28},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/manager/CFSPManager.h":{"language":"C++","code":206,"comment":0,"blank":24},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/manager/CFSPManager.cpp":{"language":"C++","code":209,"comment":0,"blank":25},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/gui/GuiManager.cpp":{"language":"C++","code":190,"comment":0,"blank":12},"file:///f%3A/Project/levilamina/1.4.x/CFSP/.github/ISSUE_TEMPLATE/bug_report.yml":{"language":"YAML","code":47,"comment":0,"blank":9},"file:///f%3A/Project/levilamina/1.4.x/CFSP/.github/ISSUE_TEMPLATE/feature_request.yml":{"language":"YAML","code":25,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/gui/OperateGroupGui.cpp":{"language":"C++","code":689,"comment":0,"blank":52},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/fix/CFSPFixManager.h":{"language":"C++","code":11,"comment":0,"blank":1},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/fix/CFSPFixManager.cpp":{"language":"C++","code":122,"comment":10,"blank":11},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayer.h":{"language":"C++","code":72,"comment":0,"blank":11},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerMove.cpp":{"language":"C++","code":37,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/command/SpCommand.cpp":{"language":"C++","code":621,"comment":16,"blank":24},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/manager/CFSPPermissionManager.cpp":{"language":"C++","code":353,"comment":5,"blank":14},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerMessage.cpp":{"language":"C++","code":35,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerOperate.cpp":{"language":"C++","code":154,"comment":1,"blank":7},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerInv.cpp":{"language":"C++","code":115,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerBase.cpp":{"language":"C++","code":31,"comment":0,"blank":7},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerPermission.h":{"language":"C++","code":32,"comment":0,"blank":1},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerSaveData.h":{"language":"C++","code":21,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerStatus.cpp":{"language":"C++","code":56,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerSave.cpp":{"language":"C++","code":63,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayer.cpp":{"language":"C++","code":161,"comment":4,"blank":21},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/manager/CFSPGroupManager.cpp":{"language":"C++","code":189,"comment":1,"blank":12}} \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-16_20-51-13/results.md b/.VSCodeCounter/2025-09-16_20-51-13/results.md new file mode 100644 index 0000000..efcc75b --- /dev/null +++ b/.VSCodeCounter/2025-09-16_20-51-13/results.md @@ -0,0 +1,46 @@ +# Summary + +Date : 2025-09-16 20:51:13 + +Directory f:\\Project\\levilamina\\1.4.x\\CFSP + +Total : 62 files, 6677 codes, 92 comments, 668 blanks, all 7437 lines + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| C++ | 48 | 5,831 | 78 | 459 | 6,368 | +| JSON | 4 | 307 | 0 | 0 | 307 | +| Markdown | 4 | 201 | 0 | 140 | 341 | +| YAML | 4 | 174 | 10 | 42 | 226 | +| Lua | 1 | 105 | 1 | 19 | 125 | +| XMake | 1 | 59 | 3 | 8 | 70 | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| . | 62 | 6,677 | 92 | 668 | 7,437 | +| . (Files) | 6 | 283 | 3 | 139 | 425 | +| .github | 5 | 184 | 10 | 51 | 245 | +| .github (Files) | 1 | 10 | 0 | 9 | 19 | +| .github\\ISSUE_TEMPLATE | 2 | 72 | 0 | 13 | 85 | +| .github\\workflows | 2 | 102 | 10 | 29 | 141 | +| scripts | 1 | 105 | 1 | 19 | 125 | +| src | 50 | 6,105 | 78 | 459 | 6,642 | +| src\\cfsp | 48 | 5,831 | 78 | 459 | 6,368 | +| src\\cfsp (Files) | 5 | 136 | 9 | 34 | 179 | +| src\\cfsp\\base | 5 | 121 | 0 | 28 | 149 | +| src\\cfsp\\core | 29 | 2,593 | 33 | 216 | 2,842 | +| src\\cfsp\\core\\fix | 2 | 133 | 10 | 12 | 155 | +| src\\cfsp\\core\\group | 4 | 91 | 0 | 10 | 101 | +| src\\cfsp\\core\\helper | 7 | 314 | 0 | 24 | 338 | +| src\\cfsp\\core\\manager | 5 | 1,278 | 18 | 103 | 1,399 | +| src\\cfsp\\core\\simPlayer | 11 | 777 | 5 | 67 | 849 | +| src\\cfsp\\entrance | 9 | 2,981 | 36 | 181 | 3,198 | +| src\\cfsp\\entrance\\command | 5 | 1,263 | 36 | 58 | 1,357 | +| src\\cfsp\\entrance\\gui | 4 | 1,718 | 0 | 123 | 1,841 | +| src\\lang | 2 | 274 | 0 | 0 | 274 | + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-16_20-51-13/results.txt b/.VSCodeCounter/2025-09-16_20-51-13/results.txt new file mode 100644 index 0000000..78465c2 --- /dev/null +++ b/.VSCodeCounter/2025-09-16_20-51-13/results.txt @@ -0,0 +1,111 @@ +Date : 2025-09-16 20:51:13 +Directory : f:\Project\levilamina\1.4.x\CFSP +Total : 62 files, 6677 codes, 92 comments, 668 blanks, all 7437 lines + +Languages ++----------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++----------+------------+------------+------------+------------+------------+ +| C++ | 48 | 5,831 | 78 | 459 | 6,368 | +| JSON | 4 | 307 | 0 | 0 | 307 | +| Markdown | 4 | 201 | 0 | 140 | 341 | +| YAML | 4 | 174 | 10 | 42 | 226 | +| Lua | 1 | 105 | 1 | 19 | 125 | +| XMake | 1 | 59 | 3 | 8 | 70 | ++----------+------------+------------+------------+------------+------------+ + +Directories ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| . | 62 | 6,677 | 92 | 668 | 7,437 | +| . (Files) | 6 | 283 | 3 | 139 | 425 | +| .github | 5 | 184 | 10 | 51 | 245 | +| .github (Files) | 1 | 10 | 0 | 9 | 19 | +| .github\ISSUE_TEMPLATE | 2 | 72 | 0 | 13 | 85 | +| .github\workflows | 2 | 102 | 10 | 29 | 141 | +| scripts | 1 | 105 | 1 | 19 | 125 | +| src | 50 | 6,105 | 78 | 459 | 6,642 | +| src\cfsp | 48 | 5,831 | 78 | 459 | 6,368 | +| src\cfsp (Files) | 5 | 136 | 9 | 34 | 179 | +| src\cfsp\base | 5 | 121 | 0 | 28 | 149 | +| src\cfsp\core | 29 | 2,593 | 33 | 216 | 2,842 | +| src\cfsp\core\fix | 2 | 133 | 10 | 12 | 155 | +| src\cfsp\core\group | 4 | 91 | 0 | 10 | 101 | +| src\cfsp\core\helper | 7 | 314 | 0 | 24 | 338 | +| src\cfsp\core\manager | 5 | 1,278 | 18 | 103 | 1,399 | +| src\cfsp\core\simPlayer | 11 | 777 | 5 | 67 | 849 | +| src\cfsp\entrance | 9 | 2,981 | 36 | 181 | 3,198 | +| src\cfsp\entrance\command | 5 | 1,263 | 36 | 58 | 1,357 | +| src\cfsp\entrance\gui | 4 | 1,718 | 0 | 123 | 1,841 | +| src\lang | 2 | 274 | 0 | 0 | 274 | ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ + +Files ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| f:\Project\levilamina\1.4.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml | YAML | 47 | 0 | 9 | 56 | +| f:\Project\levilamina\1.4.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml | YAML | 25 | 0 | 4 | 29 | +| f:\Project\levilamina\1.4.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md | Markdown | 10 | 0 | 9 | 19 | +| f:\Project\levilamina\1.4.x\CFSP\.github\workflows\build.yml | YAML | 34 | 10 | 12 | 56 | +| f:\Project\levilamina\1.4.x\CFSP\.github\workflows\release.yml | YAML | 68 | 0 | 17 | 85 | +| f:\Project\levilamina\1.4.x\CFSP\CHANGELOG.md | Markdown | 87 | 0 | 58 | 145 | +| f:\Project\levilamina\1.4.x\CFSP\CHANGELOG_ZH.md | Markdown | 90 | 0 | 61 | 151 | +| f:\Project\levilamina\1.4.x\CFSP\README.md | Markdown | 14 | 0 | 12 | 26 | +| f:\Project\levilamina\1.4.x\CFSP\manifest.json | JSON | 7 | 0 | 0 | 7 | +| f:\Project\levilamina\1.4.x\CFSP\scripts\after_build.lua | Lua | 105 | 1 | 19 | 125 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.cpp | C++ | 21 | 1 | 8 | 30 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.h | C++ | 15 | 6 | 14 | 35 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\Config.h | C++ | 28 | 0 | 6 | 34 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\MemoryOperators.cpp | C++ | 2 | 2 | 3 | 7 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\PermissionConfig.h | C++ | 70 | 0 | 3 | 73 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Macros.h | C++ | 6 | 0 | 2 | 8 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\OperateResult.h | C++ | 44 | 0 | 9 | 53 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Schedule.h | C++ | 17 | 0 | 5 | 22 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Utils.cpp | C++ | 45 | 0 | 6 | 51 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Utils.h | C++ | 9 | 0 | 6 | 15 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp | C++ | 122 | 10 | 11 | 143 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h | C++ | 11 | 0 | 1 | 12 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp | C++ | 30 | 0 | 4 | 34 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.h | C++ | 15 | 0 | 4 | 19 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\GroupData.h | C++ | 14 | 0 | 2 | 16 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\GroupPermission.h | C++ | 32 | 0 | 0 | 32 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp | C++ | 73 | 0 | 3 | 76 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp | C++ | 13 | 0 | 2 | 15 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h | C++ | 18 | 0 | 5 | 23 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp | C++ | 46 | 0 | 3 | 49 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp | C++ | 153 | 0 | 7 | 160 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp | C++ | 11 | 0 | 3 | 14 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CacheUUidName.cpp | C++ | 0 | 0 | 1 | 1 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp | C++ | 189 | 1 | 12 | 202 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp | C++ | 209 | 0 | 25 | 234 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.h | C++ | 206 | 0 | 24 | 230 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp | C++ | 353 | 5 | 14 | 372 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp | C++ | 321 | 12 | 28 | 361 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp | C++ | 161 | 4 | 21 | 186 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h | C++ | 72 | 0 | 11 | 83 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp | C++ | 31 | 0 | 7 | 38 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp | C++ | 115 | 0 | 6 | 121 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp | C++ | 35 | 0 | 2 | 37 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp | C++ | 37 | 0 | 3 | 40 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerOperate.cpp | C++ | 154 | 1 | 7 | 162 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h | C++ | 32 | 0 | 1 | 33 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp | C++ | 63 | 0 | 3 | 66 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h | C++ | 21 | 0 | 2 | 23 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp | C++ | 56 | 0 | 4 | 60 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp | C++ | 69 | 3 | 8 | 80 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\ComandManager.h | C++ | 19 | 1 | 5 | 25 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp | C++ | 514 | 13 | 17 | 544 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp | C++ | 40 | 3 | 4 | 47 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp | C++ | 621 | 16 | 24 | 661 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp | C++ | 190 | 0 | 12 | 202 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.h | C++ | 113 | 0 | 7 | 120 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp | C++ | 689 | 0 | 52 | 741 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp | C++ | 726 | 0 | 52 | 778 | +| f:\Project\levilamina\1.4.x\CFSP\src\lang\en_US.json | JSON | 7 | 0 | 0 | 7 | +| f:\Project\levilamina\1.4.x\CFSP\src\lang\zh_CN.json | JSON | 267 | 0 | 0 | 267 | +| f:\Project\levilamina\1.4.x\CFSP\tooth.json | JSON | 26 | 0 | 0 | 26 | +| f:\Project\levilamina\1.4.x\CFSP\xmake.lua | XMake | 59 | 3 | 8 | 70 | +| Total | | 6,677 | 92 | 668 | 7,437 | ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-25_13-36-00/details.md b/.VSCodeCounter/2025-09-25_13-36-00/details.md new file mode 100644 index 0000000..350238e --- /dev/null +++ b/.VSCodeCounter/2025-09-25_13-36-00/details.md @@ -0,0 +1,76 @@ +# Details + +Date : 2025-09-25 13:36:00 + +Directory f:\\Project\\levilamina\\1.4.x\\CFSP + +Total : 61 files, 7212 codes, 94 comments, 739 blanks, all 8045 lines + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | +| [.github/ISSUE\_TEMPLATE/bug\_report.yml](/.github/ISSUE_TEMPLATE/bug_report.yml) | YAML | 47 | 0 | 9 | 56 | +| [.github/ISSUE\_TEMPLATE/feature\_request.yml](/.github/ISSUE_TEMPLATE/feature_request.yml) | YAML | 25 | 0 | 4 | 29 | +| [.github/PULL\_REQUEST\_TEMPLATE.md](/.github/PULL_REQUEST_TEMPLATE.md) | Markdown | 10 | 0 | 9 | 19 | +| [.github/workflows/build.yml](/.github/workflows/build.yml) | YAML | 34 | 10 | 12 | 56 | +| [.github/workflows/release.yml](/.github/workflows/release.yml) | YAML | 68 | 0 | 17 | 85 | +| [CHANGELOG.md](/CHANGELOG.md) | Markdown | 87 | 0 | 58 | 145 | +| [CHANGELOG\_ZH.md](/CHANGELOG_ZH.md) | Markdown | 90 | 0 | 61 | 151 | +| [README.md](/README.md) | Markdown | 14 | 0 | 12 | 26 | +| [manifest.json](/manifest.json) | JSON | 7 | 0 | 0 | 7 | +| [scripts/after\_build.lua](/scripts/after_build.lua) | Lua | 105 | 1 | 19 | 125 | +| [src/cfsp/CFSP.cpp](/src/cfsp/CFSP.cpp) | C++ | 22 | 1 | 9 | 32 | +| [src/cfsp/CFSP.h](/src/cfsp/CFSP.h) | C++ | 15 | 6 | 14 | 35 | +| [src/cfsp/Config.h](/src/cfsp/Config.h) | C++ | 28 | 0 | 6 | 34 | +| [src/cfsp/MemoryOperators.cpp](/src/cfsp/MemoryOperators.cpp) | C++ | 2 | 2 | 3 | 7 | +| [src/cfsp/PermissionConfig.h](/src/cfsp/PermissionConfig.h) | C++ | 70 | 0 | 3 | 73 | +| [src/cfsp/base/Macros.h](/src/cfsp/base/Macros.h) | C++ | 6 | 0 | 2 | 8 | +| [src/cfsp/base/OperateResult.h](/src/cfsp/base/OperateResult.h) | C++ | 44 | 0 | 9 | 53 | +| [src/cfsp/base/Schedule.h](/src/cfsp/base/Schedule.h) | C++ | 17 | 0 | 5 | 22 | +| [src/cfsp/base/Utils.cpp](/src/cfsp/base/Utils.cpp) | C++ | 45 | 0 | 6 | 51 | +| [src/cfsp/base/Utils.h](/src/cfsp/base/Utils.h) | C++ | 9 | 0 | 6 | 15 | +| [src/cfsp/core/fix/CFSPFixManager.cpp](/src/cfsp/core/fix/CFSPFixManager.cpp) | C++ | 122 | 10 | 11 | 143 | +| [src/cfsp/core/fix/CFSPFixManager.h](/src/cfsp/core/fix/CFSPFixManager.h) | C++ | 11 | 0 | 1 | 12 | +| [src/cfsp/core/group/CFSPGroup.cpp](/src/cfsp/core/group/CFSPGroup.cpp) | C++ | 30 | 0 | 4 | 34 | +| [src/cfsp/core/group/CFSPGroup.h](/src/cfsp/core/group/CFSPGroup.h) | C++ | 15 | 0 | 4 | 19 | +| [src/cfsp/core/group/GroupData.h](/src/cfsp/core/group/GroupData.h) | C++ | 14 | 0 | 2 | 16 | +| [src/cfsp/core/group/GroupPermission.h](/src/cfsp/core/group/GroupPermission.h) | C++ | 32 | 0 | 0 | 32 | +| [src/cfsp/core/helper/CFSPAutoFuncHelper.cpp](/src/cfsp/core/helper/CFSPAutoFuncHelper.cpp) | C++ | 73 | 0 | 3 | 76 | +| [src/cfsp/core/helper/CFSPHelperManager.cpp](/src/cfsp/core/helper/CFSPHelperManager.cpp) | C++ | 13 | 0 | 2 | 15 | +| [src/cfsp/core/helper/CFSPHelperManager.h](/src/cfsp/core/helper/CFSPHelperManager.h) | C++ | 22 | 0 | 5 | 27 | +| [src/cfsp/core/helper/CFSPOperateHelper.cpp](/src/cfsp/core/helper/CFSPOperateHelper.cpp) | C++ | 46 | 0 | 3 | 49 | +| [src/cfsp/core/helper/CFSPSaveHelper.cpp](/src/cfsp/core/helper/CFSPSaveHelper.cpp) | C++ | 153 | 0 | 7 | 160 | +| [src/cfsp/core/helper/CFSPSchduleHelper.cpp](/src/cfsp/core/helper/CFSPSchduleHelper.cpp) | C++ | 11 | 0 | 3 | 14 | +| [src/cfsp/core/manager/CFSPGroupManager.cpp](/src/cfsp/core/manager/CFSPGroupManager.cpp) | C++ | 193 | 1 | 12 | 206 | +| [src/cfsp/core/manager/CFSPManager.cpp](/src/cfsp/core/manager/CFSPManager.cpp) | C++ | 209 | 0 | 25 | 234 | +| [src/cfsp/core/manager/CFSPManager.h](/src/cfsp/core/manager/CFSPManager.h) | C++ | 206 | 0 | 24 | 230 | +| [src/cfsp/core/manager/CFSPPermissionManager.cpp](/src/cfsp/core/manager/CFSPPermissionManager.cpp) | C++ | 365 | 5 | 15 | 385 | +| [src/cfsp/core/manager/CFSPSpManager.cpp](/src/cfsp/core/manager/CFSPSpManager.cpp) | C++ | 330 | 12 | 28 | 370 | +| [src/cfsp/core/simPlayer/SimPlayer.cpp](/src/cfsp/core/simPlayer/SimPlayer.cpp) | C++ | 161 | 4 | 21 | 186 | +| [src/cfsp/core/simPlayer/SimPlayer.h](/src/cfsp/core/simPlayer/SimPlayer.h) | C++ | 72 | 0 | 11 | 83 | +| [src/cfsp/core/simPlayer/SimPlayerAction.cpp](/src/cfsp/core/simPlayer/SimPlayerAction.cpp) | C++ | 161 | 1 | 7 | 169 | +| [src/cfsp/core/simPlayer/SimPlayerBase.cpp](/src/cfsp/core/simPlayer/SimPlayerBase.cpp) | C++ | 31 | 0 | 7 | 38 | +| [src/cfsp/core/simPlayer/SimPlayerInv.cpp](/src/cfsp/core/simPlayer/SimPlayerInv.cpp) | C++ | 115 | 0 | 6 | 121 | +| [src/cfsp/core/simPlayer/SimPlayerMessage.cpp](/src/cfsp/core/simPlayer/SimPlayerMessage.cpp) | C++ | 35 | 0 | 2 | 37 | +| [src/cfsp/core/simPlayer/SimPlayerMove.cpp](/src/cfsp/core/simPlayer/SimPlayerMove.cpp) | C++ | 37 | 0 | 3 | 40 | +| [src/cfsp/core/simPlayer/SimPlayerPermission.h](/src/cfsp/core/simPlayer/SimPlayerPermission.h) | C++ | 32 | 0 | 1 | 33 | +| [src/cfsp/core/simPlayer/SimPlayerSave.cpp](/src/cfsp/core/simPlayer/SimPlayerSave.cpp) | C++ | 63 | 0 | 3 | 66 | +| [src/cfsp/core/simPlayer/SimPlayerSaveData.h](/src/cfsp/core/simPlayer/SimPlayerSaveData.h) | C++ | 21 | 0 | 2 | 23 | +| [src/cfsp/core/simPlayer/SimPlayerStatus.cpp](/src/cfsp/core/simPlayer/SimPlayerStatus.cpp) | C++ | 56 | 0 | 4 | 60 | +| [src/cfsp/entrance/command/ComandManager.cpp](/src/cfsp/entrance/command/ComandManager.cpp) | C++ | 69 | 3 | 8 | 80 | +| [src/cfsp/entrance/command/ComandManager.h](/src/cfsp/entrance/command/ComandManager.h) | C++ | 19 | 1 | 5 | 25 | +| [src/cfsp/entrance/command/GroupCommand.cpp](/src/cfsp/entrance/command/GroupCommand.cpp) | C++ | 587 | 15 | 19 | 621 | +| [src/cfsp/entrance/command/GuiCommand.cpp](/src/cfsp/entrance/command/GuiCommand.cpp) | C++ | 41 | 3 | 4 | 48 | +| [src/cfsp/entrance/command/SpCommand.cpp](/src/cfsp/entrance/command/SpCommand.cpp) | C++ | 622 | 16 | 24 | 662 | +| [src/cfsp/entrance/gui/GuiManager.cpp](/src/cfsp/entrance/gui/GuiManager.cpp) | C++ | 190 | 0 | 12 | 202 | +| [src/cfsp/entrance/gui/GuiManager.h](/src/cfsp/entrance/gui/GuiManager.h) | C++ | 128 | 0 | 7 | 135 | +| [src/cfsp/entrance/gui/OperateGroupGui.cpp](/src/cfsp/entrance/gui/OperateGroupGui.cpp) | C++ | 858 | 0 | 85 | 943 | +| [src/cfsp/entrance/gui/OperateSpGui.cpp](/src/cfsp/entrance/gui/OperateSpGui.cpp) | C++ | 922 | 0 | 87 | 1,009 | +| [src/lang/en\_US.json](/src/lang/en_US.json) | JSON | 7 | 0 | 0 | 7 | +| [src/lang/zh\_CN.json](/src/lang/zh_CN.json) | JSON | 310 | 0 | 0 | 310 | +| [tooth.json](/tooth.json) | JSON | 26 | 0 | 0 | 26 | +| [xmake.lua](/xmake.lua) | XMake | 59 | 3 | 8 | 70 | + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-25_13-36-00/diff-details.md b/.VSCodeCounter/2025-09-25_13-36-00/diff-details.md new file mode 100644 index 0000000..e96a714 --- /dev/null +++ b/.VSCodeCounter/2025-09-25_13-36-00/diff-details.md @@ -0,0 +1,30 @@ +# Diff Details + +Date : 2025-09-25 13:36:00 + +Directory f:\\Project\\levilamina\\1.4.x\\CFSP + +Total : 15 files, 535 codes, 2 comments, 71 blanks, all 608 lines + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | +| [src/cfsp/CFSP.cpp](/src/cfsp/CFSP.cpp) | C++ | 1 | 0 | 1 | 2 | +| [src/cfsp/core/helper/CFSPHelperManager.h](/src/cfsp/core/helper/CFSPHelperManager.h) | C++ | 4 | 0 | 0 | 4 | +| [src/cfsp/core/helper/CacheUUidName.cpp](/src/cfsp/core/helper/CacheUUidName.cpp) | C++ | 0 | 0 | -1 | -1 | +| [src/cfsp/core/manager/CFSPGroupManager.cpp](/src/cfsp/core/manager/CFSPGroupManager.cpp) | C++ | 4 | 0 | 0 | 4 | +| [src/cfsp/core/manager/CFSPPermissionManager.cpp](/src/cfsp/core/manager/CFSPPermissionManager.cpp) | C++ | 12 | 0 | 1 | 13 | +| [src/cfsp/core/manager/CFSPSpManager.cpp](/src/cfsp/core/manager/CFSPSpManager.cpp) | C++ | 9 | 0 | 0 | 9 | +| [src/cfsp/core/simPlayer/SimPlayerAction.cpp](/src/cfsp/core/simPlayer/SimPlayerAction.cpp) | C++ | 161 | 1 | 7 | 169 | +| [src/cfsp/core/simPlayer/SimPlayerOperate.cpp](/src/cfsp/core/simPlayer/SimPlayerOperate.cpp) | C++ | -154 | -1 | -7 | -162 | +| [src/cfsp/entrance/command/GroupCommand.cpp](/src/cfsp/entrance/command/GroupCommand.cpp) | C++ | 73 | 2 | 2 | 77 | +| [src/cfsp/entrance/command/GuiCommand.cpp](/src/cfsp/entrance/command/GuiCommand.cpp) | C++ | 1 | 0 | 0 | 1 | +| [src/cfsp/entrance/command/SpCommand.cpp](/src/cfsp/entrance/command/SpCommand.cpp) | C++ | 1 | 0 | 0 | 1 | +| [src/cfsp/entrance/gui/GuiManager.h](/src/cfsp/entrance/gui/GuiManager.h) | C++ | 15 | 0 | 0 | 15 | +| [src/cfsp/entrance/gui/OperateGroupGui.cpp](/src/cfsp/entrance/gui/OperateGroupGui.cpp) | C++ | 169 | 0 | 33 | 202 | +| [src/cfsp/entrance/gui/OperateSpGui.cpp](/src/cfsp/entrance/gui/OperateSpGui.cpp) | C++ | 196 | 0 | 35 | 231 | +| [src/lang/zh\_CN.json](/src/lang/zh_CN.json) | JSON | 43 | 0 | 0 | 43 | + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-25_13-36-00/diff.csv b/.VSCodeCounter/2025-09-25_13-36-00/diff.csv new file mode 100644 index 0000000..439beab --- /dev/null +++ b/.VSCodeCounter/2025-09-25_13-36-00/diff.csv @@ -0,0 +1,17 @@ +"filename", "language", "JSON", "C++", "comment", "blank", "total" +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.cpp", "C++", 0, 1, 0, 1, 2 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h", "C++", 0, 4, 0, 0, 4 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CacheUUidName.cpp", "C++", 0, 0, 0, -1, -1 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp", "C++", 0, 4, 0, 0, 4 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp", "C++", 0, 12, 0, 1, 13 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp", "C++", 0, 9, 0, 0, 9 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerAction.cpp", "C++", 0, 161, 1, 7, 169 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerOperate.cpp", "C++", 0, -154, -1, -7, -162 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp", "C++", 0, 73, 2, 2, 77 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp", "C++", 0, 1, 0, 0, 1 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp", "C++", 0, 1, 0, 0, 1 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.h", "C++", 0, 15, 0, 0, 15 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp", "C++", 0, 169, 0, 33, 202 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp", "C++", 0, 196, 0, 35, 231 +"f:\Project\levilamina\1.4.x\CFSP\src\lang\zh_CN.json", "JSON", 43, 0, 0, 0, 43 +"Total", "-", 43, 492, 2, 71, 608 \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-25_13-36-00/diff.md b/.VSCodeCounter/2025-09-25_13-36-00/diff.md new file mode 100644 index 0000000..7c8705d --- /dev/null +++ b/.VSCodeCounter/2025-09-25_13-36-00/diff.md @@ -0,0 +1,33 @@ +# Diff Summary + +Date : 2025-09-25 13:36:00 + +Directory f:\\Project\\levilamina\\1.4.x\\CFSP + +Total : 15 files, 535 codes, 2 comments, 71 blanks, all 608 lines + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| C++ | 14 | 492 | 2 | 71 | 565 | +| JSON | 1 | 43 | 0 | 0 | 43 | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| . | 15 | 535 | 2 | 71 | 608 | +| src | 15 | 535 | 2 | 71 | 608 | +| src\\cfsp | 14 | 492 | 2 | 71 | 565 | +| src\\cfsp (Files) | 1 | 1 | 0 | 1 | 2 | +| src\\cfsp\\core | 7 | 36 | 0 | 0 | 36 | +| src\\cfsp\\core\\helper | 2 | 4 | 0 | -1 | 3 | +| src\\cfsp\\core\\manager | 3 | 25 | 0 | 1 | 26 | +| src\\cfsp\\core\\simPlayer | 2 | 7 | 0 | 0 | 7 | +| src\\cfsp\\entrance | 6 | 455 | 2 | 70 | 527 | +| src\\cfsp\\entrance\\command | 3 | 75 | 2 | 2 | 79 | +| src\\cfsp\\entrance\\gui | 3 | 380 | 0 | 68 | 448 | +| src\\lang | 1 | 43 | 0 | 0 | 43 | + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-25_13-36-00/diff.txt b/.VSCodeCounter/2025-09-25_13-36-00/diff.txt new file mode 100644 index 0000000..5cd9f4b --- /dev/null +++ b/.VSCodeCounter/2025-09-25_13-36-00/diff.txt @@ -0,0 +1,51 @@ +Date : 2025-09-25 13:36:00 +Directory : f:\Project\levilamina\1.4.x\CFSP +Total : 15 files, 535 codes, 2 comments, 71 blanks, all 608 lines + +Languages ++----------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++----------+------------+------------+------------+------------+------------+ +| C++ | 14 | 492 | 2 | 71 | 565 | +| JSON | 1 | 43 | 0 | 0 | 43 | ++----------+------------+------------+------------+------------+------------+ + +Directories ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| . | 15 | 535 | 2 | 71 | 608 | +| src | 15 | 535 | 2 | 71 | 608 | +| src\cfsp | 14 | 492 | 2 | 71 | 565 | +| src\cfsp (Files) | 1 | 1 | 0 | 1 | 2 | +| src\cfsp\core | 7 | 36 | 0 | 0 | 36 | +| src\cfsp\core\helper | 2 | 4 | 0 | -1 | 3 | +| src\cfsp\core\manager | 3 | 25 | 0 | 1 | 26 | +| src\cfsp\core\simPlayer | 2 | 7 | 0 | 0 | 7 | +| src\cfsp\entrance | 6 | 455 | 2 | 70 | 527 | +| src\cfsp\entrance\command | 3 | 75 | 2 | 2 | 79 | +| src\cfsp\entrance\gui | 3 | 380 | 0 | 68 | 448 | +| src\lang | 1 | 43 | 0 | 0 | 43 | ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ + +Files ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.cpp | C++ | 1 | 0 | 1 | 2 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h | C++ | 4 | 0 | 0 | 4 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CacheUUidName.cpp | C++ | 0 | 0 | -1 | -1 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp | C++ | 4 | 0 | 0 | 4 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp | C++ | 12 | 0 | 1 | 13 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp | C++ | 9 | 0 | 0 | 9 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerAction.cpp | C++ | 161 | 1 | 7 | 169 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerOperate.cpp | C++ | -154 | -1 | -7 | -162 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp | C++ | 73 | 2 | 2 | 77 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp | C++ | 1 | 0 | 0 | 1 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp | C++ | 1 | 0 | 0 | 1 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.h | C++ | 15 | 0 | 0 | 15 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp | C++ | 169 | 0 | 33 | 202 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp | C++ | 196 | 0 | 35 | 231 | +| f:\Project\levilamina\1.4.x\CFSP\src\lang\zh_CN.json | JSON | 43 | 0 | 0 | 43 | +| Total | | 535 | 2 | 71 | 608 | ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-25_13-36-00/results.csv b/.VSCodeCounter/2025-09-25_13-36-00/results.csv new file mode 100644 index 0000000..af8a620 --- /dev/null +++ b/.VSCodeCounter/2025-09-25_13-36-00/results.csv @@ -0,0 +1,63 @@ +"filename", "language", "JSON", "Lua", "XMake", "Markdown", "C++", "YAML", "comment", "blank", "total" +"f:\Project\levilamina\1.4.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml", "YAML", 0, 0, 0, 0, 0, 47, 0, 9, 56 +"f:\Project\levilamina\1.4.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml", "YAML", 0, 0, 0, 0, 0, 25, 0, 4, 29 +"f:\Project\levilamina\1.4.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md", "Markdown", 0, 0, 0, 10, 0, 0, 0, 9, 19 +"f:\Project\levilamina\1.4.x\CFSP\.github\workflows\build.yml", "YAML", 0, 0, 0, 0, 0, 34, 10, 12, 56 +"f:\Project\levilamina\1.4.x\CFSP\.github\workflows\release.yml", "YAML", 0, 0, 0, 0, 0, 68, 0, 17, 85 +"f:\Project\levilamina\1.4.x\CFSP\CHANGELOG.md", "Markdown", 0, 0, 0, 87, 0, 0, 0, 58, 145 +"f:\Project\levilamina\1.4.x\CFSP\CHANGELOG_ZH.md", "Markdown", 0, 0, 0, 90, 0, 0, 0, 61, 151 +"f:\Project\levilamina\1.4.x\CFSP\README.md", "Markdown", 0, 0, 0, 14, 0, 0, 0, 12, 26 +"f:\Project\levilamina\1.4.x\CFSP\manifest.json", "JSON", 7, 0, 0, 0, 0, 0, 0, 0, 7 +"f:\Project\levilamina\1.4.x\CFSP\scripts\after_build.lua", "Lua", 0, 105, 0, 0, 0, 0, 1, 19, 125 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.cpp", "C++", 0, 0, 0, 0, 22, 0, 1, 9, 32 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.h", "C++", 0, 0, 0, 0, 15, 0, 6, 14, 35 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\Config.h", "C++", 0, 0, 0, 0, 28, 0, 0, 6, 34 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\MemoryOperators.cpp", "C++", 0, 0, 0, 0, 2, 0, 2, 3, 7 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\PermissionConfig.h", "C++", 0, 0, 0, 0, 70, 0, 0, 3, 73 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Macros.h", "C++", 0, 0, 0, 0, 6, 0, 0, 2, 8 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\OperateResult.h", "C++", 0, 0, 0, 0, 44, 0, 0, 9, 53 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Schedule.h", "C++", 0, 0, 0, 0, 17, 0, 0, 5, 22 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Utils.cpp", "C++", 0, 0, 0, 0, 45, 0, 0, 6, 51 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Utils.h", "C++", 0, 0, 0, 0, 9, 0, 0, 6, 15 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp", "C++", 0, 0, 0, 0, 122, 0, 10, 11, 143 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h", "C++", 0, 0, 0, 0, 11, 0, 0, 1, 12 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp", "C++", 0, 0, 0, 0, 30, 0, 0, 4, 34 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.h", "C++", 0, 0, 0, 0, 15, 0, 0, 4, 19 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\GroupData.h", "C++", 0, 0, 0, 0, 14, 0, 0, 2, 16 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\GroupPermission.h", "C++", 0, 0, 0, 0, 32, 0, 0, 0, 32 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp", "C++", 0, 0, 0, 0, 73, 0, 0, 3, 76 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp", "C++", 0, 0, 0, 0, 13, 0, 0, 2, 15 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h", "C++", 0, 0, 0, 0, 22, 0, 0, 5, 27 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp", "C++", 0, 0, 0, 0, 46, 0, 0, 3, 49 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp", "C++", 0, 0, 0, 0, 153, 0, 0, 7, 160 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp", "C++", 0, 0, 0, 0, 11, 0, 0, 3, 14 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp", "C++", 0, 0, 0, 0, 193, 0, 1, 12, 206 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp", "C++", 0, 0, 0, 0, 209, 0, 0, 25, 234 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.h", "C++", 0, 0, 0, 0, 206, 0, 0, 24, 230 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp", "C++", 0, 0, 0, 0, 365, 0, 5, 15, 385 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp", "C++", 0, 0, 0, 0, 330, 0, 12, 28, 370 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp", "C++", 0, 0, 0, 0, 161, 0, 4, 21, 186 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h", "C++", 0, 0, 0, 0, 72, 0, 0, 11, 83 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerAction.cpp", "C++", 0, 0, 0, 0, 161, 0, 1, 7, 169 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp", "C++", 0, 0, 0, 0, 31, 0, 0, 7, 38 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp", "C++", 0, 0, 0, 0, 115, 0, 0, 6, 121 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp", "C++", 0, 0, 0, 0, 35, 0, 0, 2, 37 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp", "C++", 0, 0, 0, 0, 37, 0, 0, 3, 40 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h", "C++", 0, 0, 0, 0, 32, 0, 0, 1, 33 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp", "C++", 0, 0, 0, 0, 63, 0, 0, 3, 66 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h", "C++", 0, 0, 0, 0, 21, 0, 0, 2, 23 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp", "C++", 0, 0, 0, 0, 56, 0, 0, 4, 60 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp", "C++", 0, 0, 0, 0, 69, 0, 3, 8, 80 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\ComandManager.h", "C++", 0, 0, 0, 0, 19, 0, 1, 5, 25 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp", "C++", 0, 0, 0, 0, 587, 0, 15, 19, 621 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp", "C++", 0, 0, 0, 0, 41, 0, 3, 4, 48 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp", "C++", 0, 0, 0, 0, 622, 0, 16, 24, 662 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp", "C++", 0, 0, 0, 0, 190, 0, 0, 12, 202 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.h", "C++", 0, 0, 0, 0, 128, 0, 0, 7, 135 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp", "C++", 0, 0, 0, 0, 858, 0, 0, 85, 943 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp", "C++", 0, 0, 0, 0, 922, 0, 0, 87, 1009 +"f:\Project\levilamina\1.4.x\CFSP\src\lang\en_US.json", "JSON", 7, 0, 0, 0, 0, 0, 0, 0, 7 +"f:\Project\levilamina\1.4.x\CFSP\src\lang\zh_CN.json", "JSON", 310, 0, 0, 0, 0, 0, 0, 0, 310 +"f:\Project\levilamina\1.4.x\CFSP\tooth.json", "JSON", 26, 0, 0, 0, 0, 0, 0, 0, 26 +"f:\Project\levilamina\1.4.x\CFSP\xmake.lua", "XMake", 0, 0, 59, 0, 0, 0, 3, 8, 70 +"Total", "-", 350, 105, 59, 201, 6323, 174, 94, 739, 8045 \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-25_13-36-00/results.json b/.VSCodeCounter/2025-09-25_13-36-00/results.json new file mode 100644 index 0000000..93dc10f --- /dev/null +++ b/.VSCodeCounter/2025-09-25_13-36-00/results.json @@ -0,0 +1 @@ +{"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/lang/zh_CN.json":{"language":"JSON","code":310,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.4.x/CFSP/scripts/after_build.lua":{"language":"Lua","code":105,"comment":1,"blank":19},"file:///f%3A/Project/levilamina/1.4.x/CFSP/xmake.lua":{"language":"XMake","code":59,"comment":3,"blank":8},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/lang/en_US.json":{"language":"JSON","code":7,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.4.x/CFSP/manifest.json":{"language":"JSON","code":7,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.4.x/CFSP/CHANGELOG_ZH.md":{"language":"Markdown","code":90,"comment":0,"blank":61},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/Config.h":{"language":"C++","code":28,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/CFSP.h":{"language":"C++","code":15,"comment":6,"blank":14},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/PermissionConfig.h":{"language":"C++","code":70,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/tooth.json":{"language":"JSON","code":26,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.4.x/CFSP/README.md":{"language":"Markdown","code":14,"comment":0,"blank":12},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/base/Utils.h":{"language":"C++","code":9,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/base/Utils.cpp":{"language":"C++","code":45,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/base/Schedule.h":{"language":"C++","code":17,"comment":0,"blank":5},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/base/OperateResult.h":{"language":"C++","code":44,"comment":0,"blank":9},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/base/Macros.h":{"language":"C++","code":6,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.4.x/CFSP/CHANGELOG.md":{"language":"Markdown","code":87,"comment":0,"blank":58},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/gui/GuiManager.h":{"language":"C++","code":128,"comment":0,"blank":7},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/gui/GuiManager.cpp":{"language":"C++","code":190,"comment":0,"blank":12},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/MemoryOperators.cpp":{"language":"C++","code":2,"comment":2,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/command/SpCommand.cpp":{"language":"C++","code":622,"comment":16,"blank":24},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/CFSP.cpp":{"language":"C++","code":22,"comment":1,"blank":9},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/gui/OperateSpGui.cpp":{"language":"C++","code":922,"comment":0,"blank":87},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerSaveData.h":{"language":"C++","code":21,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/gui/OperateGroupGui.cpp":{"language":"C++","code":858,"comment":0,"blank":85},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/command/ComandManager.h":{"language":"C++","code":19,"comment":1,"blank":5},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerStatus.cpp":{"language":"C++","code":56,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerSave.cpp":{"language":"C++","code":63,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerPermission.h":{"language":"C++","code":32,"comment":0,"blank":1},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerMove.cpp":{"language":"C++","code":37,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/command/GroupCommand.cpp":{"language":"C++","code":587,"comment":15,"blank":19},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/command/GuiCommand.cpp":{"language":"C++","code":41,"comment":3,"blank":4},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/entrance/command/ComandManager.cpp":{"language":"C++","code":69,"comment":3,"blank":8},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerAction.cpp":{"language":"C++","code":161,"comment":1,"blank":7},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayer.h":{"language":"C++","code":72,"comment":0,"blank":11},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerMessage.cpp":{"language":"C++","code":35,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/manager/CFSPSpManager.cpp":{"language":"C++","code":330,"comment":12,"blank":28},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPAutoFuncHelper.cpp":{"language":"C++","code":73,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPSchduleHelper.cpp":{"language":"C++","code":11,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPSaveHelper.cpp":{"language":"C++","code":153,"comment":0,"blank":7},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPOperateHelper.cpp":{"language":"C++","code":46,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPHelperManager.h":{"language":"C++","code":22,"comment":0,"blank":5},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/helper/CFSPHelperManager.cpp":{"language":"C++","code":13,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/manager/CFSPPermissionManager.cpp":{"language":"C++","code":365,"comment":5,"blank":15},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/manager/CFSPManager.h":{"language":"C++","code":206,"comment":0,"blank":24},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerInv.cpp":{"language":"C++","code":115,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayerBase.cpp":{"language":"C++","code":31,"comment":0,"blank":7},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/group/GroupPermission.h":{"language":"C++","code":32,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/group/GroupData.h":{"language":"C++","code":14,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/group/CFSPGroup.h":{"language":"C++","code":15,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/simPlayer/SimPlayer.cpp":{"language":"C++","code":161,"comment":4,"blank":21},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/fix/CFSPFixManager.h":{"language":"C++","code":11,"comment":0,"blank":1},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/group/CFSPGroup.cpp":{"language":"C++","code":30,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/manager/CFSPManager.cpp":{"language":"C++","code":209,"comment":0,"blank":25},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/manager/CFSPGroupManager.cpp":{"language":"C++","code":193,"comment":1,"blank":12},"file:///f%3A/Project/levilamina/1.4.x/CFSP/src/cfsp/core/fix/CFSPFixManager.cpp":{"language":"C++","code":122,"comment":10,"blank":11},"file:///f%3A/Project/levilamina/1.4.x/CFSP/.github/PULL_REQUEST_TEMPLATE.md":{"language":"Markdown","code":10,"comment":0,"blank":9},"file:///f%3A/Project/levilamina/1.4.x/CFSP/.github/workflows/release.yml":{"language":"YAML","code":68,"comment":0,"blank":17},"file:///f%3A/Project/levilamina/1.4.x/CFSP/.github/workflows/build.yml":{"language":"YAML","code":34,"comment":10,"blank":12},"file:///f%3A/Project/levilamina/1.4.x/CFSP/.github/ISSUE_TEMPLATE/bug_report.yml":{"language":"YAML","code":47,"comment":0,"blank":9},"file:///f%3A/Project/levilamina/1.4.x/CFSP/.github/ISSUE_TEMPLATE/feature_request.yml":{"language":"YAML","code":25,"comment":0,"blank":4}} \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-25_13-36-00/results.md b/.VSCodeCounter/2025-09-25_13-36-00/results.md new file mode 100644 index 0000000..db09d2e --- /dev/null +++ b/.VSCodeCounter/2025-09-25_13-36-00/results.md @@ -0,0 +1,46 @@ +# Summary + +Date : 2025-09-25 13:36:00 + +Directory f:\\Project\\levilamina\\1.4.x\\CFSP + +Total : 61 files, 7212 codes, 94 comments, 739 blanks, all 8045 lines + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| C++ | 47 | 6,323 | 80 | 530 | 6,933 | +| JSON | 4 | 350 | 0 | 0 | 350 | +| Markdown | 4 | 201 | 0 | 140 | 341 | +| YAML | 4 | 174 | 10 | 42 | 226 | +| Lua | 1 | 105 | 1 | 19 | 125 | +| XMake | 1 | 59 | 3 | 8 | 70 | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| . | 61 | 7,212 | 94 | 739 | 8,045 | +| . (Files) | 6 | 283 | 3 | 139 | 425 | +| .github | 5 | 184 | 10 | 51 | 245 | +| .github (Files) | 1 | 10 | 0 | 9 | 19 | +| .github\\ISSUE_TEMPLATE | 2 | 72 | 0 | 13 | 85 | +| .github\\workflows | 2 | 102 | 10 | 29 | 141 | +| scripts | 1 | 105 | 1 | 19 | 125 | +| src | 49 | 6,640 | 80 | 530 | 7,250 | +| src\\cfsp | 47 | 6,323 | 80 | 530 | 6,933 | +| src\\cfsp (Files) | 5 | 137 | 9 | 35 | 181 | +| src\\cfsp\\base | 5 | 121 | 0 | 28 | 149 | +| src\\cfsp\\core | 28 | 2,629 | 33 | 216 | 2,878 | +| src\\cfsp\\core\\fix | 2 | 133 | 10 | 12 | 155 | +| src\\cfsp\\core\\group | 4 | 91 | 0 | 10 | 101 | +| src\\cfsp\\core\\helper | 6 | 318 | 0 | 23 | 341 | +| src\\cfsp\\core\\manager | 5 | 1,303 | 18 | 104 | 1,425 | +| src\\cfsp\\core\\simPlayer | 11 | 784 | 5 | 67 | 856 | +| src\\cfsp\\entrance | 9 | 3,436 | 38 | 251 | 3,725 | +| src\\cfsp\\entrance\\command | 5 | 1,338 | 38 | 60 | 1,436 | +| src\\cfsp\\entrance\\gui | 4 | 2,098 | 0 | 191 | 2,289 | +| src\\lang | 2 | 317 | 0 | 0 | 317 | + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-25_13-36-00/results.txt b/.VSCodeCounter/2025-09-25_13-36-00/results.txt new file mode 100644 index 0000000..dbdf1dd --- /dev/null +++ b/.VSCodeCounter/2025-09-25_13-36-00/results.txt @@ -0,0 +1,110 @@ +Date : 2025-09-25 13:36:00 +Directory : f:\Project\levilamina\1.4.x\CFSP +Total : 61 files, 7212 codes, 94 comments, 739 blanks, all 8045 lines + +Languages ++----------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++----------+------------+------------+------------+------------+------------+ +| C++ | 47 | 6,323 | 80 | 530 | 6,933 | +| JSON | 4 | 350 | 0 | 0 | 350 | +| Markdown | 4 | 201 | 0 | 140 | 341 | +| YAML | 4 | 174 | 10 | 42 | 226 | +| Lua | 1 | 105 | 1 | 19 | 125 | +| XMake | 1 | 59 | 3 | 8 | 70 | ++----------+------------+------------+------------+------------+------------+ + +Directories ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| . | 61 | 7,212 | 94 | 739 | 8,045 | +| . (Files) | 6 | 283 | 3 | 139 | 425 | +| .github | 5 | 184 | 10 | 51 | 245 | +| .github (Files) | 1 | 10 | 0 | 9 | 19 | +| .github\ISSUE_TEMPLATE | 2 | 72 | 0 | 13 | 85 | +| .github\workflows | 2 | 102 | 10 | 29 | 141 | +| scripts | 1 | 105 | 1 | 19 | 125 | +| src | 49 | 6,640 | 80 | 530 | 7,250 | +| src\cfsp | 47 | 6,323 | 80 | 530 | 6,933 | +| src\cfsp (Files) | 5 | 137 | 9 | 35 | 181 | +| src\cfsp\base | 5 | 121 | 0 | 28 | 149 | +| src\cfsp\core | 28 | 2,629 | 33 | 216 | 2,878 | +| src\cfsp\core\fix | 2 | 133 | 10 | 12 | 155 | +| src\cfsp\core\group | 4 | 91 | 0 | 10 | 101 | +| src\cfsp\core\helper | 6 | 318 | 0 | 23 | 341 | +| src\cfsp\core\manager | 5 | 1,303 | 18 | 104 | 1,425 | +| src\cfsp\core\simPlayer | 11 | 784 | 5 | 67 | 856 | +| src\cfsp\entrance | 9 | 3,436 | 38 | 251 | 3,725 | +| src\cfsp\entrance\command | 5 | 1,338 | 38 | 60 | 1,436 | +| src\cfsp\entrance\gui | 4 | 2,098 | 0 | 191 | 2,289 | +| src\lang | 2 | 317 | 0 | 0 | 317 | ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ + +Files ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| f:\Project\levilamina\1.4.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml | YAML | 47 | 0 | 9 | 56 | +| f:\Project\levilamina\1.4.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml | YAML | 25 | 0 | 4 | 29 | +| f:\Project\levilamina\1.4.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md | Markdown | 10 | 0 | 9 | 19 | +| f:\Project\levilamina\1.4.x\CFSP\.github\workflows\build.yml | YAML | 34 | 10 | 12 | 56 | +| f:\Project\levilamina\1.4.x\CFSP\.github\workflows\release.yml | YAML | 68 | 0 | 17 | 85 | +| f:\Project\levilamina\1.4.x\CFSP\CHANGELOG.md | Markdown | 87 | 0 | 58 | 145 | +| f:\Project\levilamina\1.4.x\CFSP\CHANGELOG_ZH.md | Markdown | 90 | 0 | 61 | 151 | +| f:\Project\levilamina\1.4.x\CFSP\README.md | Markdown | 14 | 0 | 12 | 26 | +| f:\Project\levilamina\1.4.x\CFSP\manifest.json | JSON | 7 | 0 | 0 | 7 | +| f:\Project\levilamina\1.4.x\CFSP\scripts\after_build.lua | Lua | 105 | 1 | 19 | 125 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.cpp | C++ | 22 | 1 | 9 | 32 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.h | C++ | 15 | 6 | 14 | 35 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\Config.h | C++ | 28 | 0 | 6 | 34 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\MemoryOperators.cpp | C++ | 2 | 2 | 3 | 7 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\PermissionConfig.h | C++ | 70 | 0 | 3 | 73 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Macros.h | C++ | 6 | 0 | 2 | 8 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\OperateResult.h | C++ | 44 | 0 | 9 | 53 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Schedule.h | C++ | 17 | 0 | 5 | 22 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Utils.cpp | C++ | 45 | 0 | 6 | 51 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Utils.h | C++ | 9 | 0 | 6 | 15 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp | C++ | 122 | 10 | 11 | 143 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h | C++ | 11 | 0 | 1 | 12 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp | C++ | 30 | 0 | 4 | 34 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.h | C++ | 15 | 0 | 4 | 19 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\GroupData.h | C++ | 14 | 0 | 2 | 16 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\GroupPermission.h | C++ | 32 | 0 | 0 | 32 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp | C++ | 73 | 0 | 3 | 76 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp | C++ | 13 | 0 | 2 | 15 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h | C++ | 22 | 0 | 5 | 27 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp | C++ | 46 | 0 | 3 | 49 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp | C++ | 153 | 0 | 7 | 160 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp | C++ | 11 | 0 | 3 | 14 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp | C++ | 193 | 1 | 12 | 206 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp | C++ | 209 | 0 | 25 | 234 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.h | C++ | 206 | 0 | 24 | 230 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp | C++ | 365 | 5 | 15 | 385 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp | C++ | 330 | 12 | 28 | 370 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp | C++ | 161 | 4 | 21 | 186 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h | C++ | 72 | 0 | 11 | 83 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerAction.cpp | C++ | 161 | 1 | 7 | 169 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp | C++ | 31 | 0 | 7 | 38 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp | C++ | 115 | 0 | 6 | 121 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp | C++ | 35 | 0 | 2 | 37 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp | C++ | 37 | 0 | 3 | 40 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h | C++ | 32 | 0 | 1 | 33 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp | C++ | 63 | 0 | 3 | 66 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h | C++ | 21 | 0 | 2 | 23 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp | C++ | 56 | 0 | 4 | 60 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp | C++ | 69 | 3 | 8 | 80 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\ComandManager.h | C++ | 19 | 1 | 5 | 25 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp | C++ | 587 | 15 | 19 | 621 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp | C++ | 41 | 3 | 4 | 48 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp | C++ | 622 | 16 | 24 | 662 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp | C++ | 190 | 0 | 12 | 202 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.h | C++ | 128 | 0 | 7 | 135 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp | C++ | 858 | 0 | 85 | 943 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp | C++ | 922 | 0 | 87 | 1,009 | +| f:\Project\levilamina\1.4.x\CFSP\src\lang\en_US.json | JSON | 7 | 0 | 0 | 7 | +| f:\Project\levilamina\1.4.x\CFSP\src\lang\zh_CN.json | JSON | 310 | 0 | 0 | 310 | +| f:\Project\levilamina\1.4.x\CFSP\tooth.json | JSON | 26 | 0 | 0 | 26 | +| f:\Project\levilamina\1.4.x\CFSP\xmake.lua | XMake | 59 | 3 | 8 | 70 | +| Total | | 7,212 | 94 | 739 | 8,045 | ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-27_21-38-09/details.md b/.VSCodeCounter/2025-09-27_21-38-09/details.md new file mode 100644 index 0000000..5db01bc --- /dev/null +++ b/.VSCodeCounter/2025-09-27_21-38-09/details.md @@ -0,0 +1,76 @@ +# Details + +Date : 2025-09-27 21:38:09 + +Directory f:\\Project\\levilamina\\1.5.x\\CFSP + +Total : 61 files, 7323 codes, 95 comments, 767 blanks, all 8185 lines + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | +| [.github/ISSUE\_TEMPLATE/bug\_report.yml](/.github/ISSUE_TEMPLATE/bug_report.yml) | YAML | 47 | 0 | 9 | 56 | +| [.github/ISSUE\_TEMPLATE/feature\_request.yml](/.github/ISSUE_TEMPLATE/feature_request.yml) | YAML | 25 | 0 | 4 | 29 | +| [.github/PULL\_REQUEST\_TEMPLATE.md](/.github/PULL_REQUEST_TEMPLATE.md) | Markdown | 10 | 0 | 9 | 19 | +| [.github/workflows/build.yml](/.github/workflows/build.yml) | YAML | 34 | 10 | 12 | 56 | +| [.github/workflows/release.yml](/.github/workflows/release.yml) | YAML | 68 | 0 | 17 | 85 | +| [CHANGELOG.md](/CHANGELOG.md) | Markdown | 106 | 0 | 73 | 179 | +| [CHANGELOG\_ZH.md](/CHANGELOG_ZH.md) | Markdown | 106 | 0 | 73 | 179 | +| [README.md](/README.md) | Markdown | 14 | 0 | 12 | 26 | +| [manifest.json](/manifest.json) | JSON | 7 | 0 | 0 | 7 | +| [scripts/after\_build.lua](/scripts/after_build.lua) | Lua | 105 | 1 | 19 | 125 | +| [src/cfsp/CFSP.cpp](/src/cfsp/CFSP.cpp) | C++ | 22 | 1 | 9 | 32 | +| [src/cfsp/CFSP.h](/src/cfsp/CFSP.h) | C++ | 15 | 6 | 14 | 35 | +| [src/cfsp/Config.h](/src/cfsp/Config.h) | C++ | 28 | 0 | 6 | 34 | +| [src/cfsp/MemoryOperators.cpp](/src/cfsp/MemoryOperators.cpp) | C++ | 2 | 2 | 3 | 7 | +| [src/cfsp/PermissionConfig.h](/src/cfsp/PermissionConfig.h) | C++ | 70 | 0 | 3 | 73 | +| [src/cfsp/base/Macros.h](/src/cfsp/base/Macros.h) | C++ | 6 | 0 | 2 | 8 | +| [src/cfsp/base/OperateResult.h](/src/cfsp/base/OperateResult.h) | C++ | 44 | 0 | 9 | 53 | +| [src/cfsp/base/Schedule.h](/src/cfsp/base/Schedule.h) | C++ | 17 | 0 | 5 | 22 | +| [src/cfsp/base/Utils.cpp](/src/cfsp/base/Utils.cpp) | C++ | 45 | 0 | 6 | 51 | +| [src/cfsp/base/Utils.h](/src/cfsp/base/Utils.h) | C++ | 9 | 0 | 6 | 15 | +| [src/cfsp/core/fix/CFSPFixManager.cpp](/src/cfsp/core/fix/CFSPFixManager.cpp) | C++ | 122 | 10 | 11 | 143 | +| [src/cfsp/core/fix/CFSPFixManager.h](/src/cfsp/core/fix/CFSPFixManager.h) | C++ | 11 | 0 | 1 | 12 | +| [src/cfsp/core/group/CFSPGroup.cpp](/src/cfsp/core/group/CFSPGroup.cpp) | C++ | 30 | 0 | 4 | 34 | +| [src/cfsp/core/group/CFSPGroup.h](/src/cfsp/core/group/CFSPGroup.h) | C++ | 15 | 0 | 4 | 19 | +| [src/cfsp/core/group/GroupData.h](/src/cfsp/core/group/GroupData.h) | C++ | 14 | 0 | 2 | 16 | +| [src/cfsp/core/group/GroupPermission.h](/src/cfsp/core/group/GroupPermission.h) | C++ | 32 | 0 | 0 | 32 | +| [src/cfsp/core/helper/CFSPAutoFuncHelper.cpp](/src/cfsp/core/helper/CFSPAutoFuncHelper.cpp) | C++ | 73 | 0 | 3 | 76 | +| [src/cfsp/core/helper/CFSPHelperManager.cpp](/src/cfsp/core/helper/CFSPHelperManager.cpp) | C++ | 13 | 0 | 2 | 15 | +| [src/cfsp/core/helper/CFSPHelperManager.h](/src/cfsp/core/helper/CFSPHelperManager.h) | C++ | 22 | 0 | 5 | 27 | +| [src/cfsp/core/helper/CFSPOperateHelper.cpp](/src/cfsp/core/helper/CFSPOperateHelper.cpp) | C++ | 46 | 0 | 3 | 49 | +| [src/cfsp/core/helper/CFSPSaveHelper.cpp](/src/cfsp/core/helper/CFSPSaveHelper.cpp) | C++ | 153 | 0 | 7 | 160 | +| [src/cfsp/core/helper/CFSPSchduleHelper.cpp](/src/cfsp/core/helper/CFSPSchduleHelper.cpp) | C++ | 11 | 0 | 3 | 14 | +| [src/cfsp/core/manager/CFSPGroupManager.cpp](/src/cfsp/core/manager/CFSPGroupManager.cpp) | C++ | 193 | 1 | 12 | 206 | +| [src/cfsp/core/manager/CFSPManager.cpp](/src/cfsp/core/manager/CFSPManager.cpp) | C++ | 236 | 0 | 25 | 261 | +| [src/cfsp/core/manager/CFSPManager.h](/src/cfsp/core/manager/CFSPManager.h) | C++ | 206 | 0 | 24 | 230 | +| [src/cfsp/core/manager/CFSPPermissionManager.cpp](/src/cfsp/core/manager/CFSPPermissionManager.cpp) | C++ | 365 | 5 | 15 | 385 | +| [src/cfsp/core/manager/CFSPSpManager.cpp](/src/cfsp/core/manager/CFSPSpManager.cpp) | C++ | 330 | 12 | 28 | 370 | +| [src/cfsp/core/simPlayer/SimPlayer.cpp](/src/cfsp/core/simPlayer/SimPlayer.cpp) | C++ | 161 | 4 | 21 | 186 | +| [src/cfsp/core/simPlayer/SimPlayer.h](/src/cfsp/core/simPlayer/SimPlayer.h) | C++ | 72 | 0 | 11 | 83 | +| [src/cfsp/core/simPlayer/SimPlayerAction.cpp](/src/cfsp/core/simPlayer/SimPlayerAction.cpp) | C++ | 161 | 1 | 7 | 169 | +| [src/cfsp/core/simPlayer/SimPlayerBase.cpp](/src/cfsp/core/simPlayer/SimPlayerBase.cpp) | C++ | 31 | 0 | 7 | 38 | +| [src/cfsp/core/simPlayer/SimPlayerInv.cpp](/src/cfsp/core/simPlayer/SimPlayerInv.cpp) | C++ | 115 | 0 | 6 | 121 | +| [src/cfsp/core/simPlayer/SimPlayerMessage.cpp](/src/cfsp/core/simPlayer/SimPlayerMessage.cpp) | C++ | 35 | 0 | 2 | 37 | +| [src/cfsp/core/simPlayer/SimPlayerMove.cpp](/src/cfsp/core/simPlayer/SimPlayerMove.cpp) | C++ | 37 | 0 | 3 | 40 | +| [src/cfsp/core/simPlayer/SimPlayerPermission.h](/src/cfsp/core/simPlayer/SimPlayerPermission.h) | C++ | 32 | 0 | 1 | 33 | +| [src/cfsp/core/simPlayer/SimPlayerSave.cpp](/src/cfsp/core/simPlayer/SimPlayerSave.cpp) | C++ | 63 | 0 | 3 | 66 | +| [src/cfsp/core/simPlayer/SimPlayerSaveData.h](/src/cfsp/core/simPlayer/SimPlayerSaveData.h) | C++ | 21 | 0 | 2 | 23 | +| [src/cfsp/core/simPlayer/SimPlayerStatus.cpp](/src/cfsp/core/simPlayer/SimPlayerStatus.cpp) | C++ | 56 | 0 | 4 | 60 | +| [src/cfsp/entrance/command/ComandManager.cpp](/src/cfsp/entrance/command/ComandManager.cpp) | C++ | 113 | 4 | 9 | 126 | +| [src/cfsp/entrance/command/ComandManager.h](/src/cfsp/entrance/command/ComandManager.h) | C++ | 19 | 1 | 5 | 25 | +| [src/cfsp/entrance/command/GroupCommand.cpp](/src/cfsp/entrance/command/GroupCommand.cpp) | C++ | 587 | 15 | 19 | 621 | +| [src/cfsp/entrance/command/GuiCommand.cpp](/src/cfsp/entrance/command/GuiCommand.cpp) | C++ | 41 | 3 | 4 | 48 | +| [src/cfsp/entrance/command/SpCommand.cpp](/src/cfsp/entrance/command/SpCommand.cpp) | C++ | 622 | 16 | 24 | 662 | +| [src/cfsp/entrance/gui/GuiManager.cpp](/src/cfsp/entrance/gui/GuiManager.cpp) | C++ | 193 | 0 | 12 | 205 | +| [src/cfsp/entrance/gui/GuiManager.h](/src/cfsp/entrance/gui/GuiManager.h) | C++ | 128 | 0 | 7 | 135 | +| [src/cfsp/entrance/gui/OperateGroupGui.cpp](/src/cfsp/entrance/gui/OperateGroupGui.cpp) | C++ | 858 | 0 | 85 | 943 | +| [src/cfsp/entrance/gui/OperateSpGui.cpp](/src/cfsp/entrance/gui/OperateSpGui.cpp) | C++ | 922 | 0 | 87 | 1,009 | +| [src/lang/en\_US.json](/src/lang/en_US.json) | JSON | 7 | 0 | 0 | 7 | +| [src/lang/zh\_CN.json](/src/lang/zh_CN.json) | JSON | 313 | 0 | 0 | 313 | +| [tooth.json](/tooth.json) | JSON | 26 | 0 | 0 | 26 | +| [xmake.lua](/xmake.lua) | XMake | 58 | 3 | 8 | 69 | + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-27_21-38-09/diff-details.md b/.VSCodeCounter/2025-09-27_21-38-09/diff-details.md new file mode 100644 index 0000000..fd98faa --- /dev/null +++ b/.VSCodeCounter/2025-09-27_21-38-09/diff-details.md @@ -0,0 +1,137 @@ +# Diff Details + +Date : 2025-09-27 21:38:09 + +Directory f:\\Project\\levilamina\\1.5.x\\CFSP + +Total : 122 files, 111 codes, 1 comments, 28 blanks, all 140 lines + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\.github\\ISSUE\_TEMPLATE\\bug\_report.yml](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5C.github%5CISSUE_TEMPLATE%5Cbug_report.yml) | YAML | -47 | 0 | -9 | -56 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\.github\\ISSUE\_TEMPLATE\\feature\_request.yml](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5C.github%5CISSUE_TEMPLATE%5Cfeature_request.yml) | YAML | -25 | 0 | -4 | -29 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\.github\\PULL\_REQUEST\_TEMPLATE.md](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5C.github%5CPULL_REQUEST_TEMPLATE.md) | Markdown | -10 | 0 | -9 | -19 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\.github\\workflows\\build.yml](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5C.github%5Cworkflows%5Cbuild.yml) | YAML | -34 | -10 | -12 | -56 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\.github\\workflows\\release.yml](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5C.github%5Cworkflows%5Crelease.yml) | YAML | -68 | 0 | -17 | -85 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\CHANGELOG.md](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5CCHANGELOG.md) | Markdown | -87 | 0 | -58 | -145 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\CHANGELOG\_ZH.md](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5CCHANGELOG_ZH.md) | Markdown | -90 | 0 | -61 | -151 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\README.md](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5CREADME.md) | Markdown | -14 | 0 | -12 | -26 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\manifest.json](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Cmanifest.json) | JSON | -7 | 0 | 0 | -7 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\scripts\\after\_build.lua](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Cscripts%5Cafter_build.lua) | Lua | -105 | -1 | -19 | -125 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\CFSP.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5CCFSP.cpp) | C++ | -22 | -1 | -9 | -32 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\CFSP.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5CCFSP.h) | C++ | -15 | -6 | -14 | -35 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\Config.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5CConfig.h) | C++ | -28 | 0 | -6 | -34 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\MemoryOperators.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5CMemoryOperators.cpp) | C++ | -2 | -2 | -3 | -7 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\PermissionConfig.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5CPermissionConfig.h) | C++ | -70 | 0 | -3 | -73 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\base\\Macros.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Cbase%5CMacros.h) | C++ | -6 | 0 | -2 | -8 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\base\\OperateResult.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Cbase%5COperateResult.h) | C++ | -44 | 0 | -9 | -53 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\base\\Schedule.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Cbase%5CSchedule.h) | C++ | -17 | 0 | -5 | -22 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\base\\Utils.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Cbase%5CUtils.cpp) | C++ | -45 | 0 | -6 | -51 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\base\\Utils.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Cbase%5CUtils.h) | C++ | -9 | 0 | -6 | -15 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\fix\\CFSPFixManager.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cfix%5CCFSPFixManager.cpp) | C++ | -122 | -10 | -11 | -143 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\fix\\CFSPFixManager.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cfix%5CCFSPFixManager.h) | C++ | -11 | 0 | -1 | -12 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\group\\CFSPGroup.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cgroup%5CCFSPGroup.cpp) | C++ | -30 | 0 | -4 | -34 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\group\\CFSPGroup.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cgroup%5CCFSPGroup.h) | C++ | -15 | 0 | -4 | -19 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\group\\GroupData.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cgroup%5CGroupData.h) | C++ | -14 | 0 | -2 | -16 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\group\\GroupPermission.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cgroup%5CGroupPermission.h) | C++ | -32 | 0 | 0 | -32 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\helper\\CFSPAutoFuncHelper.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Chelper%5CCFSPAutoFuncHelper.cpp) | C++ | -73 | 0 | -3 | -76 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\helper\\CFSPHelperManager.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Chelper%5CCFSPHelperManager.cpp) | C++ | -13 | 0 | -2 | -15 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\helper\\CFSPHelperManager.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Chelper%5CCFSPHelperManager.h) | C++ | -22 | 0 | -5 | -27 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\helper\\CFSPOperateHelper.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Chelper%5CCFSPOperateHelper.cpp) | C++ | -46 | 0 | -3 | -49 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\helper\\CFSPSaveHelper.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Chelper%5CCFSPSaveHelper.cpp) | C++ | -153 | 0 | -7 | -160 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\helper\\CFSPSchduleHelper.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Chelper%5CCFSPSchduleHelper.cpp) | C++ | -11 | 0 | -3 | -14 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\manager\\CFSPGroupManager.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cmanager%5CCFSPGroupManager.cpp) | C++ | -193 | -1 | -12 | -206 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\manager\\CFSPManager.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cmanager%5CCFSPManager.cpp) | C++ | -209 | 0 | -25 | -234 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\manager\\CFSPManager.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cmanager%5CCFSPManager.h) | C++ | -206 | 0 | -24 | -230 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\manager\\CFSPPermissionManager.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cmanager%5CCFSPPermissionManager.cpp) | C++ | -365 | -5 | -15 | -385 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\manager\\CFSPSpManager.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cmanager%5CCFSPSpManager.cpp) | C++ | -330 | -12 | -28 | -370 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayer.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayer.cpp) | C++ | -161 | -4 | -21 | -186 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayer.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayer.h) | C++ | -72 | 0 | -11 | -83 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerAction.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerAction.cpp) | C++ | -161 | -1 | -7 | -169 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerBase.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerBase.cpp) | C++ | -31 | 0 | -7 | -38 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerInv.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerInv.cpp) | C++ | -115 | 0 | -6 | -121 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerMessage.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerMessage.cpp) | C++ | -35 | 0 | -2 | -37 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerMove.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerMove.cpp) | C++ | -37 | 0 | -3 | -40 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerPermission.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerPermission.h) | C++ | -32 | 0 | -1 | -33 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerSave.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerSave.cpp) | C++ | -63 | 0 | -3 | -66 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerSaveData.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerSaveData.h) | C++ | -21 | 0 | -2 | -23 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerStatus.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerStatus.cpp) | C++ | -56 | 0 | -4 | -60 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\entrance\\command\\ComandManager.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Ccommand%5CComandManager.cpp) | C++ | -69 | -3 | -8 | -80 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\entrance\\command\\ComandManager.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Ccommand%5CComandManager.h) | C++ | -19 | -1 | -5 | -25 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\entrance\\command\\GroupCommand.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Ccommand%5CGroupCommand.cpp) | C++ | -587 | -15 | -19 | -621 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\entrance\\command\\GuiCommand.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Ccommand%5CGuiCommand.cpp) | C++ | -41 | -3 | -4 | -48 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\entrance\\command\\SpCommand.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Ccommand%5CSpCommand.cpp) | C++ | -622 | -16 | -24 | -662 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\entrance\\gui\\GuiManager.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Cgui%5CGuiManager.cpp) | C++ | -190 | 0 | -12 | -202 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\entrance\\gui\\GuiManager.h](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Cgui%5CGuiManager.h) | C++ | -128 | 0 | -7 | -135 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\entrance\\gui\\OperateGroupGui.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Cgui%5COperateGroupGui.cpp) | C++ | -858 | 0 | -85 | -943 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\cfsp\\entrance\\gui\\OperateSpGui.cpp](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Cgui%5COperateSpGui.cpp) | C++ | -922 | 0 | -87 | -1,009 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\lang\\en\_US.json](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Clang%5Cen_US.json) | JSON | -7 | 0 | 0 | -7 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\src\\lang\\zh\_CN.json](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Csrc%5Clang%5Czh_CN.json) | JSON | -310 | 0 | 0 | -310 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\tooth.json](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Ctooth.json) | JSON | -26 | 0 | 0 | -26 | +| [f:\\Project\\levilamina\\1.4.x\\CFSP\\xmake.lua](/f:%5CProject%5Clevilamina%5C1.4.x%5CCFSP%5Cxmake.lua) | XMake | -59 | -3 | -8 | -70 | +| [.github/ISSUE\_TEMPLATE/bug\_report.yml](/.github/ISSUE_TEMPLATE/bug_report.yml) | YAML | 47 | 0 | 9 | 56 | +| [.github/ISSUE\_TEMPLATE/feature\_request.yml](/.github/ISSUE_TEMPLATE/feature_request.yml) | YAML | 25 | 0 | 4 | 29 | +| [.github/PULL\_REQUEST\_TEMPLATE.md](/.github/PULL_REQUEST_TEMPLATE.md) | Markdown | 10 | 0 | 9 | 19 | +| [.github/workflows/build.yml](/.github/workflows/build.yml) | YAML | 34 | 10 | 12 | 56 | +| [.github/workflows/release.yml](/.github/workflows/release.yml) | YAML | 68 | 0 | 17 | 85 | +| [CHANGELOG.md](/CHANGELOG.md) | Markdown | 106 | 0 | 73 | 179 | +| [CHANGELOG\_ZH.md](/CHANGELOG_ZH.md) | Markdown | 106 | 0 | 73 | 179 | +| [README.md](/README.md) | Markdown | 14 | 0 | 12 | 26 | +| [manifest.json](/manifest.json) | JSON | 7 | 0 | 0 | 7 | +| [scripts/after\_build.lua](/scripts/after_build.lua) | Lua | 105 | 1 | 19 | 125 | +| [src/cfsp/CFSP.cpp](/src/cfsp/CFSP.cpp) | C++ | 22 | 1 | 9 | 32 | +| [src/cfsp/CFSP.h](/src/cfsp/CFSP.h) | C++ | 15 | 6 | 14 | 35 | +| [src/cfsp/Config.h](/src/cfsp/Config.h) | C++ | 28 | 0 | 6 | 34 | +| [src/cfsp/MemoryOperators.cpp](/src/cfsp/MemoryOperators.cpp) | C++ | 2 | 2 | 3 | 7 | +| [src/cfsp/PermissionConfig.h](/src/cfsp/PermissionConfig.h) | C++ | 70 | 0 | 3 | 73 | +| [src/cfsp/base/Macros.h](/src/cfsp/base/Macros.h) | C++ | 6 | 0 | 2 | 8 | +| [src/cfsp/base/OperateResult.h](/src/cfsp/base/OperateResult.h) | C++ | 44 | 0 | 9 | 53 | +| [src/cfsp/base/Schedule.h](/src/cfsp/base/Schedule.h) | C++ | 17 | 0 | 5 | 22 | +| [src/cfsp/base/Utils.cpp](/src/cfsp/base/Utils.cpp) | C++ | 45 | 0 | 6 | 51 | +| [src/cfsp/base/Utils.h](/src/cfsp/base/Utils.h) | C++ | 9 | 0 | 6 | 15 | +| [src/cfsp/core/fix/CFSPFixManager.cpp](/src/cfsp/core/fix/CFSPFixManager.cpp) | C++ | 122 | 10 | 11 | 143 | +| [src/cfsp/core/fix/CFSPFixManager.h](/src/cfsp/core/fix/CFSPFixManager.h) | C++ | 11 | 0 | 1 | 12 | +| [src/cfsp/core/group/CFSPGroup.cpp](/src/cfsp/core/group/CFSPGroup.cpp) | C++ | 30 | 0 | 4 | 34 | +| [src/cfsp/core/group/CFSPGroup.h](/src/cfsp/core/group/CFSPGroup.h) | C++ | 15 | 0 | 4 | 19 | +| [src/cfsp/core/group/GroupData.h](/src/cfsp/core/group/GroupData.h) | C++ | 14 | 0 | 2 | 16 | +| [src/cfsp/core/group/GroupPermission.h](/src/cfsp/core/group/GroupPermission.h) | C++ | 32 | 0 | 0 | 32 | +| [src/cfsp/core/helper/CFSPAutoFuncHelper.cpp](/src/cfsp/core/helper/CFSPAutoFuncHelper.cpp) | C++ | 73 | 0 | 3 | 76 | +| [src/cfsp/core/helper/CFSPHelperManager.cpp](/src/cfsp/core/helper/CFSPHelperManager.cpp) | C++ | 13 | 0 | 2 | 15 | +| [src/cfsp/core/helper/CFSPHelperManager.h](/src/cfsp/core/helper/CFSPHelperManager.h) | C++ | 22 | 0 | 5 | 27 | +| [src/cfsp/core/helper/CFSPOperateHelper.cpp](/src/cfsp/core/helper/CFSPOperateHelper.cpp) | C++ | 46 | 0 | 3 | 49 | +| [src/cfsp/core/helper/CFSPSaveHelper.cpp](/src/cfsp/core/helper/CFSPSaveHelper.cpp) | C++ | 153 | 0 | 7 | 160 | +| [src/cfsp/core/helper/CFSPSchduleHelper.cpp](/src/cfsp/core/helper/CFSPSchduleHelper.cpp) | C++ | 11 | 0 | 3 | 14 | +| [src/cfsp/core/manager/CFSPGroupManager.cpp](/src/cfsp/core/manager/CFSPGroupManager.cpp) | C++ | 193 | 1 | 12 | 206 | +| [src/cfsp/core/manager/CFSPManager.cpp](/src/cfsp/core/manager/CFSPManager.cpp) | C++ | 236 | 0 | 25 | 261 | +| [src/cfsp/core/manager/CFSPManager.h](/src/cfsp/core/manager/CFSPManager.h) | C++ | 206 | 0 | 24 | 230 | +| [src/cfsp/core/manager/CFSPPermissionManager.cpp](/src/cfsp/core/manager/CFSPPermissionManager.cpp) | C++ | 365 | 5 | 15 | 385 | +| [src/cfsp/core/manager/CFSPSpManager.cpp](/src/cfsp/core/manager/CFSPSpManager.cpp) | C++ | 330 | 12 | 28 | 370 | +| [src/cfsp/core/simPlayer/SimPlayer.cpp](/src/cfsp/core/simPlayer/SimPlayer.cpp) | C++ | 161 | 4 | 21 | 186 | +| [src/cfsp/core/simPlayer/SimPlayer.h](/src/cfsp/core/simPlayer/SimPlayer.h) | C++ | 72 | 0 | 11 | 83 | +| [src/cfsp/core/simPlayer/SimPlayerAction.cpp](/src/cfsp/core/simPlayer/SimPlayerAction.cpp) | C++ | 161 | 1 | 7 | 169 | +| [src/cfsp/core/simPlayer/SimPlayerBase.cpp](/src/cfsp/core/simPlayer/SimPlayerBase.cpp) | C++ | 31 | 0 | 7 | 38 | +| [src/cfsp/core/simPlayer/SimPlayerInv.cpp](/src/cfsp/core/simPlayer/SimPlayerInv.cpp) | C++ | 115 | 0 | 6 | 121 | +| [src/cfsp/core/simPlayer/SimPlayerMessage.cpp](/src/cfsp/core/simPlayer/SimPlayerMessage.cpp) | C++ | 35 | 0 | 2 | 37 | +| [src/cfsp/core/simPlayer/SimPlayerMove.cpp](/src/cfsp/core/simPlayer/SimPlayerMove.cpp) | C++ | 37 | 0 | 3 | 40 | +| [src/cfsp/core/simPlayer/SimPlayerPermission.h](/src/cfsp/core/simPlayer/SimPlayerPermission.h) | C++ | 32 | 0 | 1 | 33 | +| [src/cfsp/core/simPlayer/SimPlayerSave.cpp](/src/cfsp/core/simPlayer/SimPlayerSave.cpp) | C++ | 63 | 0 | 3 | 66 | +| [src/cfsp/core/simPlayer/SimPlayerSaveData.h](/src/cfsp/core/simPlayer/SimPlayerSaveData.h) | C++ | 21 | 0 | 2 | 23 | +| [src/cfsp/core/simPlayer/SimPlayerStatus.cpp](/src/cfsp/core/simPlayer/SimPlayerStatus.cpp) | C++ | 56 | 0 | 4 | 60 | +| [src/cfsp/entrance/command/ComandManager.cpp](/src/cfsp/entrance/command/ComandManager.cpp) | C++ | 113 | 4 | 9 | 126 | +| [src/cfsp/entrance/command/ComandManager.h](/src/cfsp/entrance/command/ComandManager.h) | C++ | 19 | 1 | 5 | 25 | +| [src/cfsp/entrance/command/GroupCommand.cpp](/src/cfsp/entrance/command/GroupCommand.cpp) | C++ | 587 | 15 | 19 | 621 | +| [src/cfsp/entrance/command/GuiCommand.cpp](/src/cfsp/entrance/command/GuiCommand.cpp) | C++ | 41 | 3 | 4 | 48 | +| [src/cfsp/entrance/command/SpCommand.cpp](/src/cfsp/entrance/command/SpCommand.cpp) | C++ | 622 | 16 | 24 | 662 | +| [src/cfsp/entrance/gui/GuiManager.cpp](/src/cfsp/entrance/gui/GuiManager.cpp) | C++ | 193 | 0 | 12 | 205 | +| [src/cfsp/entrance/gui/GuiManager.h](/src/cfsp/entrance/gui/GuiManager.h) | C++ | 128 | 0 | 7 | 135 | +| [src/cfsp/entrance/gui/OperateGroupGui.cpp](/src/cfsp/entrance/gui/OperateGroupGui.cpp) | C++ | 858 | 0 | 85 | 943 | +| [src/cfsp/entrance/gui/OperateSpGui.cpp](/src/cfsp/entrance/gui/OperateSpGui.cpp) | C++ | 922 | 0 | 87 | 1,009 | +| [src/lang/en\_US.json](/src/lang/en_US.json) | JSON | 7 | 0 | 0 | 7 | +| [src/lang/zh\_CN.json](/src/lang/zh_CN.json) | JSON | 313 | 0 | 0 | 313 | +| [tooth.json](/tooth.json) | JSON | 26 | 0 | 0 | 26 | +| [xmake.lua](/xmake.lua) | XMake | 58 | 3 | 8 | 69 | + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-27_21-38-09/diff.csv b/.VSCodeCounter/2025-09-27_21-38-09/diff.csv new file mode 100644 index 0000000..6811707 --- /dev/null +++ b/.VSCodeCounter/2025-09-27_21-38-09/diff.csv @@ -0,0 +1,124 @@ +"filename", "language", "XMake", "JSON", "Markdown", "C++", "Lua", "YAML", "comment", "blank", "total" +"f:\Project\levilamina\1.4.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml", "YAML", 0, 0, 0, 0, 0, -47, 0, -9, -56 +"f:\Project\levilamina\1.4.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml", "YAML", 0, 0, 0, 0, 0, -25, 0, -4, -29 +"f:\Project\levilamina\1.4.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md", "Markdown", 0, 0, -10, 0, 0, 0, 0, -9, -19 +"f:\Project\levilamina\1.4.x\CFSP\.github\workflows\build.yml", "YAML", 0, 0, 0, 0, 0, -34, -10, -12, -56 +"f:\Project\levilamina\1.4.x\CFSP\.github\workflows\release.yml", "YAML", 0, 0, 0, 0, 0, -68, 0, -17, -85 +"f:\Project\levilamina\1.4.x\CFSP\CHANGELOG.md", "Markdown", 0, 0, -87, 0, 0, 0, 0, -58, -145 +"f:\Project\levilamina\1.4.x\CFSP\CHANGELOG_ZH.md", "Markdown", 0, 0, -90, 0, 0, 0, 0, -61, -151 +"f:\Project\levilamina\1.4.x\CFSP\README.md", "Markdown", 0, 0, -14, 0, 0, 0, 0, -12, -26 +"f:\Project\levilamina\1.4.x\CFSP\manifest.json", "JSON", 0, -7, 0, 0, 0, 0, 0, 0, -7 +"f:\Project\levilamina\1.4.x\CFSP\scripts\after_build.lua", "Lua", 0, 0, 0, 0, -105, 0, -1, -19, -125 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.cpp", "C++", 0, 0, 0, -22, 0, 0, -1, -9, -32 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.h", "C++", 0, 0, 0, -15, 0, 0, -6, -14, -35 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\Config.h", "C++", 0, 0, 0, -28, 0, 0, 0, -6, -34 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\MemoryOperators.cpp", "C++", 0, 0, 0, -2, 0, 0, -2, -3, -7 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\PermissionConfig.h", "C++", 0, 0, 0, -70, 0, 0, 0, -3, -73 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Macros.h", "C++", 0, 0, 0, -6, 0, 0, 0, -2, -8 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\OperateResult.h", "C++", 0, 0, 0, -44, 0, 0, 0, -9, -53 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Schedule.h", "C++", 0, 0, 0, -17, 0, 0, 0, -5, -22 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Utils.cpp", "C++", 0, 0, 0, -45, 0, 0, 0, -6, -51 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Utils.h", "C++", 0, 0, 0, -9, 0, 0, 0, -6, -15 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp", "C++", 0, 0, 0, -122, 0, 0, -10, -11, -143 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h", "C++", 0, 0, 0, -11, 0, 0, 0, -1, -12 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp", "C++", 0, 0, 0, -30, 0, 0, 0, -4, -34 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.h", "C++", 0, 0, 0, -15, 0, 0, 0, -4, -19 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\GroupData.h", "C++", 0, 0, 0, -14, 0, 0, 0, -2, -16 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\GroupPermission.h", "C++", 0, 0, 0, -32, 0, 0, 0, 0, -32 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp", "C++", 0, 0, 0, -73, 0, 0, 0, -3, -76 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp", "C++", 0, 0, 0, -13, 0, 0, 0, -2, -15 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h", "C++", 0, 0, 0, -22, 0, 0, 0, -5, -27 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp", "C++", 0, 0, 0, -46, 0, 0, 0, -3, -49 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp", "C++", 0, 0, 0, -153, 0, 0, 0, -7, -160 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp", "C++", 0, 0, 0, -11, 0, 0, 0, -3, -14 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp", "C++", 0, 0, 0, -193, 0, 0, -1, -12, -206 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp", "C++", 0, 0, 0, -209, 0, 0, 0, -25, -234 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.h", "C++", 0, 0, 0, -206, 0, 0, 0, -24, -230 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp", "C++", 0, 0, 0, -365, 0, 0, -5, -15, -385 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp", "C++", 0, 0, 0, -330, 0, 0, -12, -28, -370 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp", "C++", 0, 0, 0, -161, 0, 0, -4, -21, -186 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h", "C++", 0, 0, 0, -72, 0, 0, 0, -11, -83 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerAction.cpp", "C++", 0, 0, 0, -161, 0, 0, -1, -7, -169 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp", "C++", 0, 0, 0, -31, 0, 0, 0, -7, -38 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp", "C++", 0, 0, 0, -115, 0, 0, 0, -6, -121 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp", "C++", 0, 0, 0, -35, 0, 0, 0, -2, -37 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp", "C++", 0, 0, 0, -37, 0, 0, 0, -3, -40 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h", "C++", 0, 0, 0, -32, 0, 0, 0, -1, -33 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp", "C++", 0, 0, 0, -63, 0, 0, 0, -3, -66 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h", "C++", 0, 0, 0, -21, 0, 0, 0, -2, -23 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp", "C++", 0, 0, 0, -56, 0, 0, 0, -4, -60 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp", "C++", 0, 0, 0, -69, 0, 0, -3, -8, -80 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\ComandManager.h", "C++", 0, 0, 0, -19, 0, 0, -1, -5, -25 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp", "C++", 0, 0, 0, -587, 0, 0, -15, -19, -621 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp", "C++", 0, 0, 0, -41, 0, 0, -3, -4, -48 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp", "C++", 0, 0, 0, -622, 0, 0, -16, -24, -662 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp", "C++", 0, 0, 0, -190, 0, 0, 0, -12, -202 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.h", "C++", 0, 0, 0, -128, 0, 0, 0, -7, -135 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp", "C++", 0, 0, 0, -858, 0, 0, 0, -85, -943 +"f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp", "C++", 0, 0, 0, -922, 0, 0, 0, -87, -1009 +"f:\Project\levilamina\1.4.x\CFSP\src\lang\en_US.json", "JSON", 0, -7, 0, 0, 0, 0, 0, 0, -7 +"f:\Project\levilamina\1.4.x\CFSP\src\lang\zh_CN.json", "JSON", 0, -310, 0, 0, 0, 0, 0, 0, -310 +"f:\Project\levilamina\1.4.x\CFSP\tooth.json", "JSON", 0, -26, 0, 0, 0, 0, 0, 0, -26 +"f:\Project\levilamina\1.4.x\CFSP\xmake.lua", "XMake", -59, 0, 0, 0, 0, 0, -3, -8, -70 +"f:\Project\levilamina\1.5.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml", "YAML", 0, 0, 0, 0, 0, 47, 0, 9, 56 +"f:\Project\levilamina\1.5.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml", "YAML", 0, 0, 0, 0, 0, 25, 0, 4, 29 +"f:\Project\levilamina\1.5.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md", "Markdown", 0, 0, 10, 0, 0, 0, 0, 9, 19 +"f:\Project\levilamina\1.5.x\CFSP\.github\workflows\build.yml", "YAML", 0, 0, 0, 0, 0, 34, 10, 12, 56 +"f:\Project\levilamina\1.5.x\CFSP\.github\workflows\release.yml", "YAML", 0, 0, 0, 0, 0, 68, 0, 17, 85 +"f:\Project\levilamina\1.5.x\CFSP\CHANGELOG.md", "Markdown", 0, 0, 106, 0, 0, 0, 0, 73, 179 +"f:\Project\levilamina\1.5.x\CFSP\CHANGELOG_ZH.md", "Markdown", 0, 0, 106, 0, 0, 0, 0, 73, 179 +"f:\Project\levilamina\1.5.x\CFSP\README.md", "Markdown", 0, 0, 14, 0, 0, 0, 0, 12, 26 +"f:\Project\levilamina\1.5.x\CFSP\manifest.json", "JSON", 0, 7, 0, 0, 0, 0, 0, 0, 7 +"f:\Project\levilamina\1.5.x\CFSP\scripts\after_build.lua", "Lua", 0, 0, 0, 0, 105, 0, 1, 19, 125 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\CFSP.cpp", "C++", 0, 0, 0, 22, 0, 0, 1, 9, 32 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\CFSP.h", "C++", 0, 0, 0, 15, 0, 0, 6, 14, 35 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\Config.h", "C++", 0, 0, 0, 28, 0, 0, 0, 6, 34 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\MemoryOperators.cpp", "C++", 0, 0, 0, 2, 0, 0, 2, 3, 7 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\PermissionConfig.h", "C++", 0, 0, 0, 70, 0, 0, 0, 3, 73 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Macros.h", "C++", 0, 0, 0, 6, 0, 0, 0, 2, 8 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\OperateResult.h", "C++", 0, 0, 0, 44, 0, 0, 0, 9, 53 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Schedule.h", "C++", 0, 0, 0, 17, 0, 0, 0, 5, 22 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Utils.cpp", "C++", 0, 0, 0, 45, 0, 0, 0, 6, 51 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Utils.h", "C++", 0, 0, 0, 9, 0, 0, 0, 6, 15 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp", "C++", 0, 0, 0, 122, 0, 0, 10, 11, 143 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h", "C++", 0, 0, 0, 11, 0, 0, 0, 1, 12 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp", "C++", 0, 0, 0, 30, 0, 0, 0, 4, 34 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\CFSPGroup.h", "C++", 0, 0, 0, 15, 0, 0, 0, 4, 19 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\GroupData.h", "C++", 0, 0, 0, 14, 0, 0, 0, 2, 16 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\GroupPermission.h", "C++", 0, 0, 0, 32, 0, 0, 0, 0, 32 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp", "C++", 0, 0, 0, 73, 0, 0, 0, 3, 76 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp", "C++", 0, 0, 0, 13, 0, 0, 0, 2, 15 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h", "C++", 0, 0, 0, 22, 0, 0, 0, 5, 27 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp", "C++", 0, 0, 0, 46, 0, 0, 0, 3, 49 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp", "C++", 0, 0, 0, 153, 0, 0, 0, 7, 160 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp", "C++", 0, 0, 0, 11, 0, 0, 0, 3, 14 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp", "C++", 0, 0, 0, 193, 0, 0, 1, 12, 206 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp", "C++", 0, 0, 0, 236, 0, 0, 0, 25, 261 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPManager.h", "C++", 0, 0, 0, 206, 0, 0, 0, 24, 230 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp", "C++", 0, 0, 0, 365, 0, 0, 5, 15, 385 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp", "C++", 0, 0, 0, 330, 0, 0, 12, 28, 370 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp", "C++", 0, 0, 0, 161, 0, 0, 4, 21, 186 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h", "C++", 0, 0, 0, 72, 0, 0, 0, 11, 83 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerAction.cpp", "C++", 0, 0, 0, 161, 0, 0, 1, 7, 169 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp", "C++", 0, 0, 0, 31, 0, 0, 0, 7, 38 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp", "C++", 0, 0, 0, 115, 0, 0, 0, 6, 121 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp", "C++", 0, 0, 0, 35, 0, 0, 0, 2, 37 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp", "C++", 0, 0, 0, 37, 0, 0, 0, 3, 40 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h", "C++", 0, 0, 0, 32, 0, 0, 0, 1, 33 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp", "C++", 0, 0, 0, 63, 0, 0, 0, 3, 66 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h", "C++", 0, 0, 0, 21, 0, 0, 0, 2, 23 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp", "C++", 0, 0, 0, 56, 0, 0, 0, 4, 60 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp", "C++", 0, 0, 0, 113, 0, 0, 4, 9, 126 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\ComandManager.h", "C++", 0, 0, 0, 19, 0, 0, 1, 5, 25 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp", "C++", 0, 0, 0, 587, 0, 0, 15, 19, 621 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp", "C++", 0, 0, 0, 41, 0, 0, 3, 4, 48 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp", "C++", 0, 0, 0, 622, 0, 0, 16, 24, 662 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp", "C++", 0, 0, 0, 193, 0, 0, 0, 12, 205 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\GuiManager.h", "C++", 0, 0, 0, 128, 0, 0, 0, 7, 135 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp", "C++", 0, 0, 0, 858, 0, 0, 0, 85, 943 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp", "C++", 0, 0, 0, 922, 0, 0, 0, 87, 1009 +"f:\Project\levilamina\1.5.x\CFSP\src\lang\en_US.json", "JSON", 0, 7, 0, 0, 0, 0, 0, 0, 7 +"f:\Project\levilamina\1.5.x\CFSP\src\lang\zh_CN.json", "JSON", 0, 313, 0, 0, 0, 0, 0, 0, 313 +"f:\Project\levilamina\1.5.x\CFSP\tooth.json", "JSON", 0, 26, 0, 0, 0, 0, 0, 0, 26 +"f:\Project\levilamina\1.5.x\CFSP\xmake.lua", "XMake", 58, 0, 0, 0, 0, 0, 3, 8, 69 +"Total", "-", -1, 3, 35, 74, 0, 0, 1, 28, 140 \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-27_21-38-09/diff.md b/.VSCodeCounter/2025-09-27_21-38-09/diff.md new file mode 100644 index 0000000..413a986 --- /dev/null +++ b/.VSCodeCounter/2025-09-27_21-38-09/diff.md @@ -0,0 +1,70 @@ +# Diff Summary + +Date : 2025-09-27 21:38:09 + +Directory f:\\Project\\levilamina\\1.5.x\\CFSP + +Total : 122 files, 111 codes, 1 comments, 28 blanks, all 140 lines + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| C++ | 94 | 74 | 1 | 1 | 76 | +| Markdown | 8 | 35 | 0 | 27 | 62 | +| JSON | 8 | 3 | 0 | 0 | 3 | +| Lua | 2 | 0 | 0 | 0 | 0 | +| YAML | 8 | 0 | 0 | 0 | 0 | +| XMake | 2 | -1 | 0 | 0 | -1 | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| . | 122 | 111 | 1 | 28 | 140 | +| . (Files) | 6 | 317 | 3 | 166 | 486 | +| .. | 61 | -7,212 | -94 | -739 | -8,045 | +| ..\\.. | 61 | -7,212 | -94 | -739 | -8,045 | +| ..\\..\\1.4.x | 61 | -7,212 | -94 | -739 | -8,045 | +| ..\\..\\1.4.x\\CFSP | 61 | -7,212 | -94 | -739 | -8,045 | +| ..\\..\\1.4.x\\CFSP (Files) | 6 | -283 | -3 | -139 | -425 | +| ..\\..\\1.4.x\\CFSP\\.github | 5 | -184 | -10 | -51 | -245 | +| ..\\..\\1.4.x\\CFSP\\.github (Files) | 1 | -10 | 0 | -9 | -19 | +| ..\\..\\1.4.x\\CFSP\\.github\\ISSUE_TEMPLATE | 2 | -72 | 0 | -13 | -85 | +| ..\\..\\1.4.x\\CFSP\\.github\\workflows | 2 | -102 | -10 | -29 | -141 | +| ..\\..\\1.4.x\\CFSP\\scripts | 1 | -105 | -1 | -19 | -125 | +| ..\\..\\1.4.x\\CFSP\\src | 49 | -6,640 | -80 | -530 | -7,250 | +| ..\\..\\1.4.x\\CFSP\\src\\cfsp | 47 | -6,323 | -80 | -530 | -6,933 | +| ..\\..\\1.4.x\\CFSP\\src\\cfsp (Files) | 5 | -137 | -9 | -35 | -181 | +| ..\\..\\1.4.x\\CFSP\\src\\cfsp\\base | 5 | -121 | 0 | -28 | -149 | +| ..\\..\\1.4.x\\CFSP\\src\\cfsp\\core | 28 | -2,629 | -33 | -216 | -2,878 | +| ..\\..\\1.4.x\\CFSP\\src\\cfsp\\core\\fix | 2 | -133 | -10 | -12 | -155 | +| ..\\..\\1.4.x\\CFSP\\src\\cfsp\\core\\group | 4 | -91 | 0 | -10 | -101 | +| ..\\..\\1.4.x\\CFSP\\src\\cfsp\\core\\helper | 6 | -318 | 0 | -23 | -341 | +| ..\\..\\1.4.x\\CFSP\\src\\cfsp\\core\\manager | 5 | -1,303 | -18 | -104 | -1,425 | +| ..\\..\\1.4.x\\CFSP\\src\\cfsp\\core\\simPlayer | 11 | -784 | -5 | -67 | -856 | +| ..\\..\\1.4.x\\CFSP\\src\\cfsp\\entrance | 9 | -3,436 | -38 | -251 | -3,725 | +| ..\\..\\1.4.x\\CFSP\\src\\cfsp\\entrance\\command | 5 | -1,338 | -38 | -60 | -1,436 | +| ..\\..\\1.4.x\\CFSP\\src\\cfsp\\entrance\\gui | 4 | -2,098 | 0 | -191 | -2,289 | +| ..\\..\\1.4.x\\CFSP\\src\\lang | 2 | -317 | 0 | 0 | -317 | +| .github | 5 | 184 | 10 | 51 | 245 | +| .github (Files) | 1 | 10 | 0 | 9 | 19 | +| .github\\ISSUE_TEMPLATE | 2 | 72 | 0 | 13 | 85 | +| .github\\workflows | 2 | 102 | 10 | 29 | 141 | +| scripts | 1 | 105 | 1 | 19 | 125 | +| src | 49 | 6,717 | 81 | 531 | 7,329 | +| src\\cfsp | 47 | 6,397 | 81 | 531 | 7,009 | +| src\\cfsp (Files) | 5 | 137 | 9 | 35 | 181 | +| src\\cfsp\\base | 5 | 121 | 0 | 28 | 149 | +| src\\cfsp\\core | 28 | 2,656 | 33 | 216 | 2,905 | +| src\\cfsp\\core\\fix | 2 | 133 | 10 | 12 | 155 | +| src\\cfsp\\core\\group | 4 | 91 | 0 | 10 | 101 | +| src\\cfsp\\core\\helper | 6 | 318 | 0 | 23 | 341 | +| src\\cfsp\\core\\manager | 5 | 1,330 | 18 | 104 | 1,452 | +| src\\cfsp\\core\\simPlayer | 11 | 784 | 5 | 67 | 856 | +| src\\cfsp\\entrance | 9 | 3,483 | 39 | 252 | 3,774 | +| src\\cfsp\\entrance\\command | 5 | 1,382 | 39 | 61 | 1,482 | +| src\\cfsp\\entrance\\gui | 4 | 2,101 | 0 | 191 | 2,292 | +| src\\lang | 2 | 320 | 0 | 0 | 320 | + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-27_21-38-09/diff.txt b/.VSCodeCounter/2025-09-27_21-38-09/diff.txt new file mode 100644 index 0000000..85f6a16 --- /dev/null +++ b/.VSCodeCounter/2025-09-27_21-38-09/diff.txt @@ -0,0 +1,195 @@ +Date : 2025-09-27 21:38:09 +Directory : f:\Project\levilamina\1.5.x\CFSP +Total : 122 files, 111 codes, 1 comments, 28 blanks, all 140 lines + +Languages ++----------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++----------+------------+------------+------------+------------+------------+ +| C++ | 94 | 74 | 1 | 1 | 76 | +| Markdown | 8 | 35 | 0 | 27 | 62 | +| JSON | 8 | 3 | 0 | 0 | 3 | +| Lua | 2 | 0 | 0 | 0 | 0 | +| YAML | 8 | 0 | 0 | 0 | 0 | +| XMake | 2 | -1 | 0 | 0 | -1 | ++----------+------------+------------+------------+------------+------------+ + +Directories ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| . | 122 | 111 | 1 | 28 | 140 | +| . (Files) | 6 | 317 | 3 | 166 | 486 | +| .. | 61 | -7,212 | -94 | -739 | -8,045 | +| ..\.. | 61 | -7,212 | -94 | -739 | -8,045 | +| ..\..\1.4.x | 61 | -7,212 | -94 | -739 | -8,045 | +| ..\..\1.4.x\CFSP | 61 | -7,212 | -94 | -739 | -8,045 | +| ..\..\1.4.x\CFSP (Files) | 6 | -283 | -3 | -139 | -425 | +| ..\..\1.4.x\CFSP\.github | 5 | -184 | -10 | -51 | -245 | +| ..\..\1.4.x\CFSP\.github (Files) | 1 | -10 | 0 | -9 | -19 | +| ..\..\1.4.x\CFSP\.github\ISSUE_TEMPLATE | 2 | -72 | 0 | -13 | -85 | +| ..\..\1.4.x\CFSP\.github\workflows | 2 | -102 | -10 | -29 | -141 | +| ..\..\1.4.x\CFSP\scripts | 1 | -105 | -1 | -19 | -125 | +| ..\..\1.4.x\CFSP\src | 49 | -6,640 | -80 | -530 | -7,250 | +| ..\..\1.4.x\CFSP\src\cfsp | 47 | -6,323 | -80 | -530 | -6,933 | +| ..\..\1.4.x\CFSP\src\cfsp (Files) | 5 | -137 | -9 | -35 | -181 | +| ..\..\1.4.x\CFSP\src\cfsp\base | 5 | -121 | 0 | -28 | -149 | +| ..\..\1.4.x\CFSP\src\cfsp\core | 28 | -2,629 | -33 | -216 | -2,878 | +| ..\..\1.4.x\CFSP\src\cfsp\core\fix | 2 | -133 | -10 | -12 | -155 | +| ..\..\1.4.x\CFSP\src\cfsp\core\group | 4 | -91 | 0 | -10 | -101 | +| ..\..\1.4.x\CFSP\src\cfsp\core\helper | 6 | -318 | 0 | -23 | -341 | +| ..\..\1.4.x\CFSP\src\cfsp\core\manager | 5 | -1,303 | -18 | -104 | -1,425 | +| ..\..\1.4.x\CFSP\src\cfsp\core\simPlayer | 11 | -784 | -5 | -67 | -856 | +| ..\..\1.4.x\CFSP\src\cfsp\entrance | 9 | -3,436 | -38 | -251 | -3,725 | +| ..\..\1.4.x\CFSP\src\cfsp\entrance\command | 5 | -1,338 | -38 | -60 | -1,436 | +| ..\..\1.4.x\CFSP\src\cfsp\entrance\gui | 4 | -2,098 | 0 | -191 | -2,289 | +| ..\..\1.4.x\CFSP\src\lang | 2 | -317 | 0 | 0 | -317 | +| .github | 5 | 184 | 10 | 51 | 245 | +| .github (Files) | 1 | 10 | 0 | 9 | 19 | +| .github\ISSUE_TEMPLATE | 2 | 72 | 0 | 13 | 85 | +| .github\workflows | 2 | 102 | 10 | 29 | 141 | +| scripts | 1 | 105 | 1 | 19 | 125 | +| src | 49 | 6,717 | 81 | 531 | 7,329 | +| src\cfsp | 47 | 6,397 | 81 | 531 | 7,009 | +| src\cfsp (Files) | 5 | 137 | 9 | 35 | 181 | +| src\cfsp\base | 5 | 121 | 0 | 28 | 149 | +| src\cfsp\core | 28 | 2,656 | 33 | 216 | 2,905 | +| src\cfsp\core\fix | 2 | 133 | 10 | 12 | 155 | +| src\cfsp\core\group | 4 | 91 | 0 | 10 | 101 | +| src\cfsp\core\helper | 6 | 318 | 0 | 23 | 341 | +| src\cfsp\core\manager | 5 | 1,330 | 18 | 104 | 1,452 | +| src\cfsp\core\simPlayer | 11 | 784 | 5 | 67 | 856 | +| src\cfsp\entrance | 9 | 3,483 | 39 | 252 | 3,774 | +| src\cfsp\entrance\command | 5 | 1,382 | 39 | 61 | 1,482 | +| src\cfsp\entrance\gui | 4 | 2,101 | 0 | 191 | 2,292 | +| src\lang | 2 | 320 | 0 | 0 | 320 | ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ + +Files ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| f:\Project\levilamina\1.4.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml | YAML | -47 | 0 | -9 | -56 | +| f:\Project\levilamina\1.4.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml | YAML | -25 | 0 | -4 | -29 | +| f:\Project\levilamina\1.4.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md | Markdown | -10 | 0 | -9 | -19 | +| f:\Project\levilamina\1.4.x\CFSP\.github\workflows\build.yml | YAML | -34 | -10 | -12 | -56 | +| f:\Project\levilamina\1.4.x\CFSP\.github\workflows\release.yml | YAML | -68 | 0 | -17 | -85 | +| f:\Project\levilamina\1.4.x\CFSP\CHANGELOG.md | Markdown | -87 | 0 | -58 | -145 | +| f:\Project\levilamina\1.4.x\CFSP\CHANGELOG_ZH.md | Markdown | -90 | 0 | -61 | -151 | +| f:\Project\levilamina\1.4.x\CFSP\README.md | Markdown | -14 | 0 | -12 | -26 | +| f:\Project\levilamina\1.4.x\CFSP\manifest.json | JSON | -7 | 0 | 0 | -7 | +| f:\Project\levilamina\1.4.x\CFSP\scripts\after_build.lua | Lua | -105 | -1 | -19 | -125 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.cpp | C++ | -22 | -1 | -9 | -32 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\CFSP.h | C++ | -15 | -6 | -14 | -35 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\Config.h | C++ | -28 | 0 | -6 | -34 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\MemoryOperators.cpp | C++ | -2 | -2 | -3 | -7 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\PermissionConfig.h | C++ | -70 | 0 | -3 | -73 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Macros.h | C++ | -6 | 0 | -2 | -8 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\OperateResult.h | C++ | -44 | 0 | -9 | -53 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Schedule.h | C++ | -17 | 0 | -5 | -22 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Utils.cpp | C++ | -45 | 0 | -6 | -51 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\base\Utils.h | C++ | -9 | 0 | -6 | -15 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp | C++ | -122 | -10 | -11 | -143 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h | C++ | -11 | 0 | -1 | -12 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp | C++ | -30 | 0 | -4 | -34 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\CFSPGroup.h | C++ | -15 | 0 | -4 | -19 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\GroupData.h | C++ | -14 | 0 | -2 | -16 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\group\GroupPermission.h | C++ | -32 | 0 | 0 | -32 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp | C++ | -73 | 0 | -3 | -76 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp | C++ | -13 | 0 | -2 | -15 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h | C++ | -22 | 0 | -5 | -27 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp | C++ | -46 | 0 | -3 | -49 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp | C++ | -153 | 0 | -7 | -160 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp | C++ | -11 | 0 | -3 | -14 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp | C++ | -193 | -1 | -12 | -206 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp | C++ | -209 | 0 | -25 | -234 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPManager.h | C++ | -206 | 0 | -24 | -230 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp | C++ | -365 | -5 | -15 | -385 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp | C++ | -330 | -12 | -28 | -370 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp | C++ | -161 | -4 | -21 | -186 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h | C++ | -72 | 0 | -11 | -83 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerAction.cpp | C++ | -161 | -1 | -7 | -169 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp | C++ | -31 | 0 | -7 | -38 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp | C++ | -115 | 0 | -6 | -121 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp | C++ | -35 | 0 | -2 | -37 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp | C++ | -37 | 0 | -3 | -40 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h | C++ | -32 | 0 | -1 | -33 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp | C++ | -63 | 0 | -3 | -66 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h | C++ | -21 | 0 | -2 | -23 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp | C++ | -56 | 0 | -4 | -60 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp | C++ | -69 | -3 | -8 | -80 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\ComandManager.h | C++ | -19 | -1 | -5 | -25 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp | C++ | -587 | -15 | -19 | -621 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp | C++ | -41 | -3 | -4 | -48 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp | C++ | -622 | -16 | -24 | -662 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp | C++ | -190 | 0 | -12 | -202 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\GuiManager.h | C++ | -128 | 0 | -7 | -135 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp | C++ | -858 | 0 | -85 | -943 | +| f:\Project\levilamina\1.4.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp | C++ | -922 | 0 | -87 | -1,009 | +| f:\Project\levilamina\1.4.x\CFSP\src\lang\en_US.json | JSON | -7 | 0 | 0 | -7 | +| f:\Project\levilamina\1.4.x\CFSP\src\lang\zh_CN.json | JSON | -310 | 0 | 0 | -310 | +| f:\Project\levilamina\1.4.x\CFSP\tooth.json | JSON | -26 | 0 | 0 | -26 | +| f:\Project\levilamina\1.4.x\CFSP\xmake.lua | XMake | -59 | -3 | -8 | -70 | +| f:\Project\levilamina\1.5.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml | YAML | 47 | 0 | 9 | 56 | +| f:\Project\levilamina\1.5.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml | YAML | 25 | 0 | 4 | 29 | +| f:\Project\levilamina\1.5.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md | Markdown | 10 | 0 | 9 | 19 | +| f:\Project\levilamina\1.5.x\CFSP\.github\workflows\build.yml | YAML | 34 | 10 | 12 | 56 | +| f:\Project\levilamina\1.5.x\CFSP\.github\workflows\release.yml | YAML | 68 | 0 | 17 | 85 | +| f:\Project\levilamina\1.5.x\CFSP\CHANGELOG.md | Markdown | 106 | 0 | 73 | 179 | +| f:\Project\levilamina\1.5.x\CFSP\CHANGELOG_ZH.md | Markdown | 106 | 0 | 73 | 179 | +| f:\Project\levilamina\1.5.x\CFSP\README.md | Markdown | 14 | 0 | 12 | 26 | +| f:\Project\levilamina\1.5.x\CFSP\manifest.json | JSON | 7 | 0 | 0 | 7 | +| f:\Project\levilamina\1.5.x\CFSP\scripts\after_build.lua | Lua | 105 | 1 | 19 | 125 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\CFSP.cpp | C++ | 22 | 1 | 9 | 32 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\CFSP.h | C++ | 15 | 6 | 14 | 35 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\Config.h | C++ | 28 | 0 | 6 | 34 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\MemoryOperators.cpp | C++ | 2 | 2 | 3 | 7 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\PermissionConfig.h | C++ | 70 | 0 | 3 | 73 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Macros.h | C++ | 6 | 0 | 2 | 8 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\OperateResult.h | C++ | 44 | 0 | 9 | 53 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Schedule.h | C++ | 17 | 0 | 5 | 22 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Utils.cpp | C++ | 45 | 0 | 6 | 51 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Utils.h | C++ | 9 | 0 | 6 | 15 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp | C++ | 122 | 10 | 11 | 143 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h | C++ | 11 | 0 | 1 | 12 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp | C++ | 30 | 0 | 4 | 34 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\CFSPGroup.h | C++ | 15 | 0 | 4 | 19 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\GroupData.h | C++ | 14 | 0 | 2 | 16 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\GroupPermission.h | C++ | 32 | 0 | 0 | 32 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp | C++ | 73 | 0 | 3 | 76 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp | C++ | 13 | 0 | 2 | 15 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h | C++ | 22 | 0 | 5 | 27 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp | C++ | 46 | 0 | 3 | 49 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp | C++ | 153 | 0 | 7 | 160 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp | C++ | 11 | 0 | 3 | 14 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp | C++ | 193 | 1 | 12 | 206 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp | C++ | 236 | 0 | 25 | 261 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPManager.h | C++ | 206 | 0 | 24 | 230 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp | C++ | 365 | 5 | 15 | 385 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp | C++ | 330 | 12 | 28 | 370 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp | C++ | 161 | 4 | 21 | 186 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h | C++ | 72 | 0 | 11 | 83 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerAction.cpp | C++ | 161 | 1 | 7 | 169 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp | C++ | 31 | 0 | 7 | 38 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp | C++ | 115 | 0 | 6 | 121 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp | C++ | 35 | 0 | 2 | 37 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp | C++ | 37 | 0 | 3 | 40 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h | C++ | 32 | 0 | 1 | 33 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp | C++ | 63 | 0 | 3 | 66 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h | C++ | 21 | 0 | 2 | 23 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp | C++ | 56 | 0 | 4 | 60 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp | C++ | 113 | 4 | 9 | 126 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\ComandManager.h | C++ | 19 | 1 | 5 | 25 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp | C++ | 587 | 15 | 19 | 621 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp | C++ | 41 | 3 | 4 | 48 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp | C++ | 622 | 16 | 24 | 662 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp | C++ | 193 | 0 | 12 | 205 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\GuiManager.h | C++ | 128 | 0 | 7 | 135 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp | C++ | 858 | 0 | 85 | 943 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp | C++ | 922 | 0 | 87 | 1,009 | +| f:\Project\levilamina\1.5.x\CFSP\src\lang\en_US.json | JSON | 7 | 0 | 0 | 7 | +| f:\Project\levilamina\1.5.x\CFSP\src\lang\zh_CN.json | JSON | 313 | 0 | 0 | 313 | +| f:\Project\levilamina\1.5.x\CFSP\tooth.json | JSON | 26 | 0 | 0 | 26 | +| f:\Project\levilamina\1.5.x\CFSP\xmake.lua | XMake | 58 | 3 | 8 | 69 | +| Total | | 111 | 1 | 28 | 140 | ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-27_21-38-09/results.csv b/.VSCodeCounter/2025-09-27_21-38-09/results.csv new file mode 100644 index 0000000..e0b1489 --- /dev/null +++ b/.VSCodeCounter/2025-09-27_21-38-09/results.csv @@ -0,0 +1,63 @@ +"filename", "language", "XMake", "JSON", "Markdown", "C++", "Lua", "YAML", "comment", "blank", "total" +"f:\Project\levilamina\1.5.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml", "YAML", 0, 0, 0, 0, 0, 47, 0, 9, 56 +"f:\Project\levilamina\1.5.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml", "YAML", 0, 0, 0, 0, 0, 25, 0, 4, 29 +"f:\Project\levilamina\1.5.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md", "Markdown", 0, 0, 10, 0, 0, 0, 0, 9, 19 +"f:\Project\levilamina\1.5.x\CFSP\.github\workflows\build.yml", "YAML", 0, 0, 0, 0, 0, 34, 10, 12, 56 +"f:\Project\levilamina\1.5.x\CFSP\.github\workflows\release.yml", "YAML", 0, 0, 0, 0, 0, 68, 0, 17, 85 +"f:\Project\levilamina\1.5.x\CFSP\CHANGELOG.md", "Markdown", 0, 0, 106, 0, 0, 0, 0, 73, 179 +"f:\Project\levilamina\1.5.x\CFSP\CHANGELOG_ZH.md", "Markdown", 0, 0, 106, 0, 0, 0, 0, 73, 179 +"f:\Project\levilamina\1.5.x\CFSP\README.md", "Markdown", 0, 0, 14, 0, 0, 0, 0, 12, 26 +"f:\Project\levilamina\1.5.x\CFSP\manifest.json", "JSON", 0, 7, 0, 0, 0, 0, 0, 0, 7 +"f:\Project\levilamina\1.5.x\CFSP\scripts\after_build.lua", "Lua", 0, 0, 0, 0, 105, 0, 1, 19, 125 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\CFSP.cpp", "C++", 0, 0, 0, 22, 0, 0, 1, 9, 32 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\CFSP.h", "C++", 0, 0, 0, 15, 0, 0, 6, 14, 35 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\Config.h", "C++", 0, 0, 0, 28, 0, 0, 0, 6, 34 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\MemoryOperators.cpp", "C++", 0, 0, 0, 2, 0, 0, 2, 3, 7 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\PermissionConfig.h", "C++", 0, 0, 0, 70, 0, 0, 0, 3, 73 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Macros.h", "C++", 0, 0, 0, 6, 0, 0, 0, 2, 8 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\OperateResult.h", "C++", 0, 0, 0, 44, 0, 0, 0, 9, 53 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Schedule.h", "C++", 0, 0, 0, 17, 0, 0, 0, 5, 22 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Utils.cpp", "C++", 0, 0, 0, 45, 0, 0, 0, 6, 51 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Utils.h", "C++", 0, 0, 0, 9, 0, 0, 0, 6, 15 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp", "C++", 0, 0, 0, 122, 0, 0, 10, 11, 143 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h", "C++", 0, 0, 0, 11, 0, 0, 0, 1, 12 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp", "C++", 0, 0, 0, 30, 0, 0, 0, 4, 34 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\CFSPGroup.h", "C++", 0, 0, 0, 15, 0, 0, 0, 4, 19 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\GroupData.h", "C++", 0, 0, 0, 14, 0, 0, 0, 2, 16 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\GroupPermission.h", "C++", 0, 0, 0, 32, 0, 0, 0, 0, 32 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp", "C++", 0, 0, 0, 73, 0, 0, 0, 3, 76 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp", "C++", 0, 0, 0, 13, 0, 0, 0, 2, 15 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h", "C++", 0, 0, 0, 22, 0, 0, 0, 5, 27 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp", "C++", 0, 0, 0, 46, 0, 0, 0, 3, 49 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp", "C++", 0, 0, 0, 153, 0, 0, 0, 7, 160 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp", "C++", 0, 0, 0, 11, 0, 0, 0, 3, 14 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp", "C++", 0, 0, 0, 193, 0, 0, 1, 12, 206 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp", "C++", 0, 0, 0, 236, 0, 0, 0, 25, 261 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPManager.h", "C++", 0, 0, 0, 206, 0, 0, 0, 24, 230 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp", "C++", 0, 0, 0, 365, 0, 0, 5, 15, 385 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp", "C++", 0, 0, 0, 330, 0, 0, 12, 28, 370 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp", "C++", 0, 0, 0, 161, 0, 0, 4, 21, 186 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h", "C++", 0, 0, 0, 72, 0, 0, 0, 11, 83 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerAction.cpp", "C++", 0, 0, 0, 161, 0, 0, 1, 7, 169 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp", "C++", 0, 0, 0, 31, 0, 0, 0, 7, 38 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp", "C++", 0, 0, 0, 115, 0, 0, 0, 6, 121 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp", "C++", 0, 0, 0, 35, 0, 0, 0, 2, 37 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp", "C++", 0, 0, 0, 37, 0, 0, 0, 3, 40 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h", "C++", 0, 0, 0, 32, 0, 0, 0, 1, 33 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp", "C++", 0, 0, 0, 63, 0, 0, 0, 3, 66 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h", "C++", 0, 0, 0, 21, 0, 0, 0, 2, 23 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp", "C++", 0, 0, 0, 56, 0, 0, 0, 4, 60 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp", "C++", 0, 0, 0, 113, 0, 0, 4, 9, 126 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\ComandManager.h", "C++", 0, 0, 0, 19, 0, 0, 1, 5, 25 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp", "C++", 0, 0, 0, 587, 0, 0, 15, 19, 621 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp", "C++", 0, 0, 0, 41, 0, 0, 3, 4, 48 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp", "C++", 0, 0, 0, 622, 0, 0, 16, 24, 662 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp", "C++", 0, 0, 0, 193, 0, 0, 0, 12, 205 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\GuiManager.h", "C++", 0, 0, 0, 128, 0, 0, 0, 7, 135 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp", "C++", 0, 0, 0, 858, 0, 0, 0, 85, 943 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp", "C++", 0, 0, 0, 922, 0, 0, 0, 87, 1009 +"f:\Project\levilamina\1.5.x\CFSP\src\lang\en_US.json", "JSON", 0, 7, 0, 0, 0, 0, 0, 0, 7 +"f:\Project\levilamina\1.5.x\CFSP\src\lang\zh_CN.json", "JSON", 0, 313, 0, 0, 0, 0, 0, 0, 313 +"f:\Project\levilamina\1.5.x\CFSP\tooth.json", "JSON", 0, 26, 0, 0, 0, 0, 0, 0, 26 +"f:\Project\levilamina\1.5.x\CFSP\xmake.lua", "XMake", 58, 0, 0, 0, 0, 0, 3, 8, 69 +"Total", "-", 58, 353, 236, 6397, 105, 174, 95, 767, 8185 \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-27_21-38-09/results.json b/.VSCodeCounter/2025-09-27_21-38-09/results.json new file mode 100644 index 0000000..4337769 --- /dev/null +++ b/.VSCodeCounter/2025-09-27_21-38-09/results.json @@ -0,0 +1 @@ +{"file:///f%3A/Project/levilamina/1.5.x/CFSP/xmake.lua":{"language":"XMake","code":58,"comment":3,"blank":8},"file:///f%3A/Project/levilamina/1.5.x/CFSP/manifest.json":{"language":"JSON","code":7,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.5.x/CFSP/CHANGELOG.md":{"language":"Markdown","code":106,"comment":0,"blank":73},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/lang/zh_CN.json":{"language":"JSON","code":313,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/lang/en_US.json":{"language":"JSON","code":7,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/PermissionConfig.h":{"language":"C++","code":70,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/MemoryOperators.cpp":{"language":"C++","code":2,"comment":2,"blank":3},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/entrance/gui/OperateSpGui.cpp":{"language":"C++","code":922,"comment":0,"blank":87},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/entrance/gui/OperateGroupGui.cpp":{"language":"C++","code":858,"comment":0,"blank":85},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/entrance/gui/GuiManager.h":{"language":"C++","code":128,"comment":0,"blank":7},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/entrance/gui/GuiManager.cpp":{"language":"C++","code":193,"comment":0,"blank":12},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/entrance/command/GuiCommand.cpp":{"language":"C++","code":41,"comment":3,"blank":4},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/entrance/command/SpCommand.cpp":{"language":"C++","code":622,"comment":16,"blank":24},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/entrance/command/ComandManager.h":{"language":"C++","code":19,"comment":1,"blank":5},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/entrance/command/ComandManager.cpp":{"language":"C++","code":113,"comment":4,"blank":9},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/entrance/command/GroupCommand.cpp":{"language":"C++","code":587,"comment":15,"blank":19},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/simPlayer/SimPlayerStatus.cpp":{"language":"C++","code":56,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/simPlayer/SimPlayerSaveData.h":{"language":"C++","code":21,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/simPlayer/SimPlayerSave.cpp":{"language":"C++","code":63,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/simPlayer/SimPlayerMove.cpp":{"language":"C++","code":37,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/simPlayer/SimPlayerPermission.h":{"language":"C++","code":32,"comment":0,"blank":1},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/simPlayer/SimPlayerMessage.cpp":{"language":"C++","code":35,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/simPlayer/SimPlayerInv.cpp":{"language":"C++","code":115,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/simPlayer/SimPlayerBase.cpp":{"language":"C++","code":31,"comment":0,"blank":7},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/simPlayer/SimPlayerAction.cpp":{"language":"C++","code":161,"comment":1,"blank":7},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/simPlayer/SimPlayer.h":{"language":"C++","code":72,"comment":0,"blank":11},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/simPlayer/SimPlayer.cpp":{"language":"C++","code":161,"comment":4,"blank":21},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/manager/CFSPSpManager.cpp":{"language":"C++","code":330,"comment":12,"blank":28},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/manager/CFSPPermissionManager.cpp":{"language":"C++","code":365,"comment":5,"blank":15},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/manager/CFSPManager.h":{"language":"C++","code":206,"comment":0,"blank":24},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/manager/CFSPGroupManager.cpp":{"language":"C++","code":193,"comment":1,"blank":12},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/helper/CFSPSchduleHelper.cpp":{"language":"C++","code":11,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/helper/CFSPSaveHelper.cpp":{"language":"C++","code":153,"comment":0,"blank":7},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/helper/CFSPOperateHelper.cpp":{"language":"C++","code":46,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/helper/CFSPHelperManager.h":{"language":"C++","code":22,"comment":0,"blank":5},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/manager/CFSPManager.cpp":{"language":"C++","code":236,"comment":0,"blank":25},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/helper/CFSPHelperManager.cpp":{"language":"C++","code":13,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.5.x/CFSP/CHANGELOG_ZH.md":{"language":"Markdown","code":106,"comment":0,"blank":73},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/helper/CFSPAutoFuncHelper.cpp":{"language":"C++","code":73,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.5.x/CFSP/README.md":{"language":"Markdown","code":14,"comment":0,"blank":12},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/group/CFSPGroup.cpp":{"language":"C++","code":30,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/group/GroupData.h":{"language":"C++","code":14,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/Config.h":{"language":"C++","code":28,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/CFSP.h":{"language":"C++","code":15,"comment":6,"blank":14},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/base/Schedule.h":{"language":"C++","code":17,"comment":0,"blank":5},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/CFSP.cpp":{"language":"C++","code":22,"comment":1,"blank":9},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/base/OperateResult.h":{"language":"C++","code":44,"comment":0,"blank":9},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/fix/CFSPFixManager.h":{"language":"C++","code":11,"comment":0,"blank":1},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/group/CFSPGroup.h":{"language":"C++","code":15,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/group/GroupPermission.h":{"language":"C++","code":32,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/base/Macros.h":{"language":"C++","code":6,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/core/fix/CFSPFixManager.cpp":{"language":"C++","code":122,"comment":10,"blank":11},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/base/Utils.h":{"language":"C++","code":9,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.5.x/CFSP/tooth.json":{"language":"JSON","code":26,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.5.x/CFSP/scripts/after_build.lua":{"language":"Lua","code":105,"comment":1,"blank":19},"file:///f%3A/Project/levilamina/1.5.x/CFSP/.github/PULL_REQUEST_TEMPLATE.md":{"language":"Markdown","code":10,"comment":0,"blank":9},"file:///f%3A/Project/levilamina/1.5.x/CFSP/.github/workflows/release.yml":{"language":"YAML","code":68,"comment":0,"blank":17},"file:///f%3A/Project/levilamina/1.5.x/CFSP/src/cfsp/base/Utils.cpp":{"language":"C++","code":45,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.5.x/CFSP/.github/ISSUE_TEMPLATE/feature_request.yml":{"language":"YAML","code":25,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.5.x/CFSP/.github/workflows/build.yml":{"language":"YAML","code":34,"comment":10,"blank":12},"file:///f%3A/Project/levilamina/1.5.x/CFSP/.github/ISSUE_TEMPLATE/bug_report.yml":{"language":"YAML","code":47,"comment":0,"blank":9}} \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-27_21-38-09/results.md b/.VSCodeCounter/2025-09-27_21-38-09/results.md new file mode 100644 index 0000000..66d87d7 --- /dev/null +++ b/.VSCodeCounter/2025-09-27_21-38-09/results.md @@ -0,0 +1,46 @@ +# Summary + +Date : 2025-09-27 21:38:09 + +Directory f:\\Project\\levilamina\\1.5.x\\CFSP + +Total : 61 files, 7323 codes, 95 comments, 767 blanks, all 8185 lines + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| C++ | 47 | 6,397 | 81 | 531 | 7,009 | +| JSON | 4 | 353 | 0 | 0 | 353 | +| Markdown | 4 | 236 | 0 | 167 | 403 | +| YAML | 4 | 174 | 10 | 42 | 226 | +| Lua | 1 | 105 | 1 | 19 | 125 | +| XMake | 1 | 58 | 3 | 8 | 69 | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| . | 61 | 7,323 | 95 | 767 | 8,185 | +| . (Files) | 6 | 317 | 3 | 166 | 486 | +| .github | 5 | 184 | 10 | 51 | 245 | +| .github (Files) | 1 | 10 | 0 | 9 | 19 | +| .github\\ISSUE_TEMPLATE | 2 | 72 | 0 | 13 | 85 | +| .github\\workflows | 2 | 102 | 10 | 29 | 141 | +| scripts | 1 | 105 | 1 | 19 | 125 | +| src | 49 | 6,717 | 81 | 531 | 7,329 | +| src\\cfsp | 47 | 6,397 | 81 | 531 | 7,009 | +| src\\cfsp (Files) | 5 | 137 | 9 | 35 | 181 | +| src\\cfsp\\base | 5 | 121 | 0 | 28 | 149 | +| src\\cfsp\\core | 28 | 2,656 | 33 | 216 | 2,905 | +| src\\cfsp\\core\\fix | 2 | 133 | 10 | 12 | 155 | +| src\\cfsp\\core\\group | 4 | 91 | 0 | 10 | 101 | +| src\\cfsp\\core\\helper | 6 | 318 | 0 | 23 | 341 | +| src\\cfsp\\core\\manager | 5 | 1,330 | 18 | 104 | 1,452 | +| src\\cfsp\\core\\simPlayer | 11 | 784 | 5 | 67 | 856 | +| src\\cfsp\\entrance | 9 | 3,483 | 39 | 252 | 3,774 | +| src\\cfsp\\entrance\\command | 5 | 1,382 | 39 | 61 | 1,482 | +| src\\cfsp\\entrance\\gui | 4 | 2,101 | 0 | 191 | 2,292 | +| src\\lang | 2 | 320 | 0 | 0 | 320 | + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2025-09-27_21-38-09/results.txt b/.VSCodeCounter/2025-09-27_21-38-09/results.txt new file mode 100644 index 0000000..c1292d9 --- /dev/null +++ b/.VSCodeCounter/2025-09-27_21-38-09/results.txt @@ -0,0 +1,110 @@ +Date : 2025-09-27 21:38:09 +Directory : f:\Project\levilamina\1.5.x\CFSP +Total : 61 files, 7323 codes, 95 comments, 767 blanks, all 8185 lines + +Languages ++----------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++----------+------------+------------+------------+------------+------------+ +| C++ | 47 | 6,397 | 81 | 531 | 7,009 | +| JSON | 4 | 353 | 0 | 0 | 353 | +| Markdown | 4 | 236 | 0 | 167 | 403 | +| YAML | 4 | 174 | 10 | 42 | 226 | +| Lua | 1 | 105 | 1 | 19 | 125 | +| XMake | 1 | 58 | 3 | 8 | 69 | ++----------+------------+------------+------------+------------+------------+ + +Directories ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| . | 61 | 7,323 | 95 | 767 | 8,185 | +| . (Files) | 6 | 317 | 3 | 166 | 486 | +| .github | 5 | 184 | 10 | 51 | 245 | +| .github (Files) | 1 | 10 | 0 | 9 | 19 | +| .github\ISSUE_TEMPLATE | 2 | 72 | 0 | 13 | 85 | +| .github\workflows | 2 | 102 | 10 | 29 | 141 | +| scripts | 1 | 105 | 1 | 19 | 125 | +| src | 49 | 6,717 | 81 | 531 | 7,329 | +| src\cfsp | 47 | 6,397 | 81 | 531 | 7,009 | +| src\cfsp (Files) | 5 | 137 | 9 | 35 | 181 | +| src\cfsp\base | 5 | 121 | 0 | 28 | 149 | +| src\cfsp\core | 28 | 2,656 | 33 | 216 | 2,905 | +| src\cfsp\core\fix | 2 | 133 | 10 | 12 | 155 | +| src\cfsp\core\group | 4 | 91 | 0 | 10 | 101 | +| src\cfsp\core\helper | 6 | 318 | 0 | 23 | 341 | +| src\cfsp\core\manager | 5 | 1,330 | 18 | 104 | 1,452 | +| src\cfsp\core\simPlayer | 11 | 784 | 5 | 67 | 856 | +| src\cfsp\entrance | 9 | 3,483 | 39 | 252 | 3,774 | +| src\cfsp\entrance\command | 5 | 1,382 | 39 | 61 | 1,482 | +| src\cfsp\entrance\gui | 4 | 2,101 | 0 | 191 | 2,292 | +| src\lang | 2 | 320 | 0 | 0 | 320 | ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ + +Files ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| f:\Project\levilamina\1.5.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml | YAML | 47 | 0 | 9 | 56 | +| f:\Project\levilamina\1.5.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml | YAML | 25 | 0 | 4 | 29 | +| f:\Project\levilamina\1.5.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md | Markdown | 10 | 0 | 9 | 19 | +| f:\Project\levilamina\1.5.x\CFSP\.github\workflows\build.yml | YAML | 34 | 10 | 12 | 56 | +| f:\Project\levilamina\1.5.x\CFSP\.github\workflows\release.yml | YAML | 68 | 0 | 17 | 85 | +| f:\Project\levilamina\1.5.x\CFSP\CHANGELOG.md | Markdown | 106 | 0 | 73 | 179 | +| f:\Project\levilamina\1.5.x\CFSP\CHANGELOG_ZH.md | Markdown | 106 | 0 | 73 | 179 | +| f:\Project\levilamina\1.5.x\CFSP\README.md | Markdown | 14 | 0 | 12 | 26 | +| f:\Project\levilamina\1.5.x\CFSP\manifest.json | JSON | 7 | 0 | 0 | 7 | +| f:\Project\levilamina\1.5.x\CFSP\scripts\after_build.lua | Lua | 105 | 1 | 19 | 125 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\CFSP.cpp | C++ | 22 | 1 | 9 | 32 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\CFSP.h | C++ | 15 | 6 | 14 | 35 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\Config.h | C++ | 28 | 0 | 6 | 34 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\MemoryOperators.cpp | C++ | 2 | 2 | 3 | 7 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\PermissionConfig.h | C++ | 70 | 0 | 3 | 73 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Macros.h | C++ | 6 | 0 | 2 | 8 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\OperateResult.h | C++ | 44 | 0 | 9 | 53 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Schedule.h | C++ | 17 | 0 | 5 | 22 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Utils.cpp | C++ | 45 | 0 | 6 | 51 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Utils.h | C++ | 9 | 0 | 6 | 15 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp | C++ | 122 | 10 | 11 | 143 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h | C++ | 11 | 0 | 1 | 12 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp | C++ | 30 | 0 | 4 | 34 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\CFSPGroup.h | C++ | 15 | 0 | 4 | 19 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\GroupData.h | C++ | 14 | 0 | 2 | 16 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\GroupPermission.h | C++ | 32 | 0 | 0 | 32 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp | C++ | 73 | 0 | 3 | 76 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp | C++ | 13 | 0 | 2 | 15 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h | C++ | 22 | 0 | 5 | 27 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp | C++ | 46 | 0 | 3 | 49 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp | C++ | 153 | 0 | 7 | 160 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp | C++ | 11 | 0 | 3 | 14 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp | C++ | 193 | 1 | 12 | 206 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp | C++ | 236 | 0 | 25 | 261 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPManager.h | C++ | 206 | 0 | 24 | 230 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp | C++ | 365 | 5 | 15 | 385 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp | C++ | 330 | 12 | 28 | 370 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp | C++ | 161 | 4 | 21 | 186 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h | C++ | 72 | 0 | 11 | 83 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerAction.cpp | C++ | 161 | 1 | 7 | 169 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp | C++ | 31 | 0 | 7 | 38 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp | C++ | 115 | 0 | 6 | 121 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp | C++ | 35 | 0 | 2 | 37 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp | C++ | 37 | 0 | 3 | 40 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h | C++ | 32 | 0 | 1 | 33 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp | C++ | 63 | 0 | 3 | 66 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h | C++ | 21 | 0 | 2 | 23 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp | C++ | 56 | 0 | 4 | 60 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp | C++ | 113 | 4 | 9 | 126 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\ComandManager.h | C++ | 19 | 1 | 5 | 25 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp | C++ | 587 | 15 | 19 | 621 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp | C++ | 41 | 3 | 4 | 48 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp | C++ | 622 | 16 | 24 | 662 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp | C++ | 193 | 0 | 12 | 205 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\GuiManager.h | C++ | 128 | 0 | 7 | 135 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp | C++ | 858 | 0 | 85 | 943 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp | C++ | 922 | 0 | 87 | 1,009 | +| f:\Project\levilamina\1.5.x\CFSP\src\lang\en_US.json | JSON | 7 | 0 | 0 | 7 | +| f:\Project\levilamina\1.5.x\CFSP\src\lang\zh_CN.json | JSON | 313 | 0 | 0 | 313 | +| f:\Project\levilamina\1.5.x\CFSP\tooth.json | JSON | 26 | 0 | 0 | 26 | +| f:\Project\levilamina\1.5.x\CFSP\xmake.lua | XMake | 58 | 3 | 8 | 69 | +| Total | | 7,323 | 95 | 767 | 8,185 | ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/.VSCodeCounter/2025-12-25_13-48-15/details.md b/.VSCodeCounter/2025-12-25_13-48-15/details.md new file mode 100644 index 0000000..3a2c137 --- /dev/null +++ b/.VSCodeCounter/2025-12-25_13-48-15/details.md @@ -0,0 +1,79 @@ +# Details + +Date : 2025-12-25 13:48:15 + +Directory f:\\Project\\levilamina\\1.7.x\\CFSP + +Total : 64 files, 7931 codes, 128 comments, 848 blanks, all 8907 lines + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | +| [.github/ISSUE\_TEMPLATE/bug\_report.yml](/.github/ISSUE_TEMPLATE/bug_report.yml) | YAML | 47 | 0 | 9 | 56 | +| [.github/ISSUE\_TEMPLATE/feature\_request.yml](/.github/ISSUE_TEMPLATE/feature_request.yml) | YAML | 25 | 0 | 4 | 29 | +| [.github/PULL\_REQUEST\_TEMPLATE.md](/.github/PULL_REQUEST_TEMPLATE.md) | Markdown | 10 | 0 | 9 | 19 | +| [.github/workflows/build.yml](/.github/workflows/build.yml) | YAML | 34 | 10 | 12 | 56 | +| [.github/workflows/release.yml](/.github/workflows/release.yml) | YAML | 68 | 0 | 17 | 85 | +| [CHANGELOG.md](/CHANGELOG.md) | Markdown | 128 | 0 | 95 | 223 | +| [CHANGELOG\_ZH.md](/CHANGELOG_ZH.md) | Markdown | 128 | 0 | 94 | 222 | +| [README.md](/README.md) | Markdown | 14 | 0 | 12 | 26 | +| [manifest.json](/manifest.json) | JSON | 7 | 0 | 0 | 7 | +| [scripts/after\_build.lua](/scripts/after_build.lua) | Lua | 105 | 1 | 19 | 125 | +| [src/cfsp/CFSP.cpp](/src/cfsp/CFSP.cpp) | C++ | 22 | 1 | 9 | 32 | +| [src/cfsp/CFSP.h](/src/cfsp/CFSP.h) | C++ | 15 | 6 | 14 | 35 | +| [src/cfsp/Config.h](/src/cfsp/Config.h) | C++ | 28 | 0 | 6 | 34 | +| [src/cfsp/MemoryOperators.cpp](/src/cfsp/MemoryOperators.cpp) | C++ | 2 | 2 | 3 | 7 | +| [src/cfsp/PermissionConfig.h](/src/cfsp/PermissionConfig.h) | C++ | 70 | 0 | 3 | 73 | +| [src/cfsp/base/Macros.h](/src/cfsp/base/Macros.h) | C++ | 6 | 0 | 2 | 8 | +| [src/cfsp/base/OperateResult.h](/src/cfsp/base/OperateResult.h) | C++ | 44 | 0 | 9 | 53 | +| [src/cfsp/base/Schedule.h](/src/cfsp/base/Schedule.h) | C++ | 17 | 0 | 5 | 22 | +| [src/cfsp/base/Utils.cpp](/src/cfsp/base/Utils.cpp) | C++ | 45 | 0 | 6 | 51 | +| [src/cfsp/base/Utils.h](/src/cfsp/base/Utils.h) | C++ | 9 | 0 | 6 | 15 | +| [src/cfsp/core/fix/CFSPFeatureFix.cpp](/src/cfsp/core/fix/CFSPFeatureFix.cpp) | C++ | 122 | 10 | 11 | 143 | +| [src/cfsp/core/fix/CFSPFixManager.cpp](/src/cfsp/core/fix/CFSPFixManager.cpp) | C++ | 8 | 0 | 2 | 10 | +| [src/cfsp/core/fix/CFSPFixManager.h](/src/cfsp/core/fix/CFSPFixManager.h) | C++ | 16 | 0 | 4 | 20 | +| [src/cfsp/core/fix/CFSPHandItemFix.cpp](/src/cfsp/core/fix/CFSPHandItemFix.cpp) | C++ | 53 | 0 | 4 | 57 | +| [src/cfsp/core/fix/SAPIFix.cpp](/src/cfsp/core/fix/SAPIFix.cpp) | C++ | 54 | 34 | 7 | 95 | +| [src/cfsp/core/group/CFSPGroup.cpp](/src/cfsp/core/group/CFSPGroup.cpp) | C++ | 30 | 0 | 4 | 34 | +| [src/cfsp/core/group/CFSPGroup.h](/src/cfsp/core/group/CFSPGroup.h) | C++ | 15 | 0 | 4 | 19 | +| [src/cfsp/core/group/GroupData.h](/src/cfsp/core/group/GroupData.h) | C++ | 14 | 0 | 2 | 16 | +| [src/cfsp/core/group/GroupPermission.h](/src/cfsp/core/group/GroupPermission.h) | C++ | 32 | 0 | 0 | 32 | +| [src/cfsp/core/helper/CFSPAutoFuncHelper.cpp](/src/cfsp/core/helper/CFSPAutoFuncHelper.cpp) | C++ | 73 | 0 | 3 | 76 | +| [src/cfsp/core/helper/CFSPHelperManager.cpp](/src/cfsp/core/helper/CFSPHelperManager.cpp) | C++ | 13 | 0 | 2 | 15 | +| [src/cfsp/core/helper/CFSPHelperManager.h](/src/cfsp/core/helper/CFSPHelperManager.h) | C++ | 22 | 0 | 5 | 27 | +| [src/cfsp/core/helper/CFSPOperateHelper.cpp](/src/cfsp/core/helper/CFSPOperateHelper.cpp) | C++ | 46 | 0 | 3 | 49 | +| [src/cfsp/core/helper/CFSPSaveHelper.cpp](/src/cfsp/core/helper/CFSPSaveHelper.cpp) | C++ | 35 | 0 | 3 | 38 | +| [src/cfsp/core/helper/CFSPSchduleHelper.cpp](/src/cfsp/core/helper/CFSPSchduleHelper.cpp) | C++ | 11 | 0 | 3 | 14 | +| [src/cfsp/core/manager/CFSPGroupManager.cpp](/src/cfsp/core/manager/CFSPGroupManager.cpp) | C++ | 193 | 1 | 12 | 206 | +| [src/cfsp/core/manager/CFSPManager.cpp](/src/cfsp/core/manager/CFSPManager.cpp) | C++ | 242 | 0 | 26 | 268 | +| [src/cfsp/core/manager/CFSPManager.h](/src/cfsp/core/manager/CFSPManager.h) | C++ | 211 | 0 | 24 | 235 | +| [src/cfsp/core/manager/CFSPPermissionManager.cpp](/src/cfsp/core/manager/CFSPPermissionManager.cpp) | C++ | 366 | 5 | 15 | 386 | +| [src/cfsp/core/manager/CFSPSpManager.cpp](/src/cfsp/core/manager/CFSPSpManager.cpp) | C++ | 329 | 12 | 28 | 369 | +| [src/cfsp/core/simPlayer/SimPlayer.cpp](/src/cfsp/core/simPlayer/SimPlayer.cpp) | C++ | 152 | 3 | 22 | 177 | +| [src/cfsp/core/simPlayer/SimPlayer.h](/src/cfsp/core/simPlayer/SimPlayer.h) | C++ | 71 | 0 | 13 | 84 | +| [src/cfsp/core/simPlayer/SimPlayerAction.cpp](/src/cfsp/core/simPlayer/SimPlayerAction.cpp) | C++ | 163 | 1 | 7 | 171 | +| [src/cfsp/core/simPlayer/SimPlayerBase.cpp](/src/cfsp/core/simPlayer/SimPlayerBase.cpp) | C++ | 31 | 0 | 7 | 38 | +| [src/cfsp/core/simPlayer/SimPlayerInv.cpp](/src/cfsp/core/simPlayer/SimPlayerInv.cpp) | C++ | 139 | 0 | 7 | 146 | +| [src/cfsp/core/simPlayer/SimPlayerMessage.cpp](/src/cfsp/core/simPlayer/SimPlayerMessage.cpp) | C++ | 35 | 0 | 2 | 37 | +| [src/cfsp/core/simPlayer/SimPlayerMove.cpp](/src/cfsp/core/simPlayer/SimPlayerMove.cpp) | C++ | 37 | 0 | 3 | 40 | +| [src/cfsp/core/simPlayer/SimPlayerPermission.h](/src/cfsp/core/simPlayer/SimPlayerPermission.h) | C++ | 32 | 0 | 1 | 33 | +| [src/cfsp/core/simPlayer/SimPlayerSave.cpp](/src/cfsp/core/simPlayer/SimPlayerSave.cpp) | C++ | 96 | 0 | 4 | 100 | +| [src/cfsp/core/simPlayer/SimPlayerSaveData.h](/src/cfsp/core/simPlayer/SimPlayerSaveData.h) | C++ | 20 | 0 | 2 | 22 | +| [src/cfsp/core/simPlayer/SimPlayerStatus.cpp](/src/cfsp/core/simPlayer/SimPlayerStatus.cpp) | C++ | 56 | 0 | 4 | 60 | +| [src/cfsp/entrance/command/ComandManager.cpp](/src/cfsp/entrance/command/ComandManager.cpp) | C++ | 113 | 4 | 9 | 126 | +| [src/cfsp/entrance/command/ComandManager.h](/src/cfsp/entrance/command/ComandManager.h) | C++ | 19 | 1 | 5 | 25 | +| [src/cfsp/entrance/command/GroupCommand.cpp](/src/cfsp/entrance/command/GroupCommand.cpp) | C++ | 588 | 15 | 19 | 622 | +| [src/cfsp/entrance/command/GuiCommand.cpp](/src/cfsp/entrance/command/GuiCommand.cpp) | C++ | 41 | 3 | 4 | 48 | +| [src/cfsp/entrance/command/SpCommand.cpp](/src/cfsp/entrance/command/SpCommand.cpp) | C++ | 625 | 16 | 24 | 665 | +| [src/cfsp/entrance/gui/GuiManager.cpp](/src/cfsp/entrance/gui/GuiManager.cpp) | C++ | 193 | 0 | 12 | 205 | +| [src/cfsp/entrance/gui/GuiManager.h](/src/cfsp/entrance/gui/GuiManager.h) | C++ | 156 | 0 | 7 | 163 | +| [src/cfsp/entrance/gui/OperateGroupGui.cpp](/src/cfsp/entrance/gui/OperateGroupGui.cpp) | C++ | 936 | 0 | 95 | 1,031 | +| [src/cfsp/entrance/gui/OperateSpGui.cpp](/src/cfsp/entrance/gui/OperateSpGui.cpp) | C++ | 1,007 | 0 | 97 | 1,104 | +| [src/lang/en\_US.json](/src/lang/en_US.json) | JSON | 314 | 0 | 0 | 314 | +| [src/lang/zh\_CN.json](/src/lang/zh_CN.json) | JSON | 314 | 0 | 0 | 314 | +| [tooth.json](/tooth.json) | JSON | 26 | 0 | 0 | 26 | +| [xmake.lua](/xmake.lua) | XMake | 58 | 3 | 8 | 69 | + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2025-12-25_13-48-15/diff-details.md b/.VSCodeCounter/2025-12-25_13-48-15/diff-details.md new file mode 100644 index 0000000..54cd3fb --- /dev/null +++ b/.VSCodeCounter/2025-12-25_13-48-15/diff-details.md @@ -0,0 +1,140 @@ +# Diff Details + +Date : 2025-12-25 13:48:15 + +Directory f:\\Project\\levilamina\\1.7.x\\CFSP + +Total : 125 files, 608 codes, 33 comments, 81 blanks, all 722 lines + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\.github\\ISSUE\_TEMPLATE\\bug\_report.yml](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5C.github%5CISSUE_TEMPLATE%5Cbug_report.yml) | YAML | -47 | 0 | -9 | -56 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\.github\\ISSUE\_TEMPLATE\\feature\_request.yml](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5C.github%5CISSUE_TEMPLATE%5Cfeature_request.yml) | YAML | -25 | 0 | -4 | -29 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\.github\\PULL\_REQUEST\_TEMPLATE.md](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5C.github%5CPULL_REQUEST_TEMPLATE.md) | Markdown | -10 | 0 | -9 | -19 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\.github\\workflows\\build.yml](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5C.github%5Cworkflows%5Cbuild.yml) | YAML | -34 | -10 | -12 | -56 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\.github\\workflows\\release.yml](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5C.github%5Cworkflows%5Crelease.yml) | YAML | -68 | 0 | -17 | -85 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\CHANGELOG.md](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5CCHANGELOG.md) | Markdown | -106 | 0 | -73 | -179 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\CHANGELOG\_ZH.md](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5CCHANGELOG_ZH.md) | Markdown | -106 | 0 | -73 | -179 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\README.md](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5CREADME.md) | Markdown | -14 | 0 | -12 | -26 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\manifest.json](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Cmanifest.json) | JSON | -7 | 0 | 0 | -7 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\scripts\\after\_build.lua](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Cscripts%5Cafter_build.lua) | Lua | -105 | -1 | -19 | -125 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\CFSP.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5CCFSP.cpp) | C++ | -22 | -1 | -9 | -32 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\CFSP.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5CCFSP.h) | C++ | -15 | -6 | -14 | -35 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\Config.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5CConfig.h) | C++ | -28 | 0 | -6 | -34 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\MemoryOperators.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5CMemoryOperators.cpp) | C++ | -2 | -2 | -3 | -7 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\PermissionConfig.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5CPermissionConfig.h) | C++ | -70 | 0 | -3 | -73 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\base\\Macros.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Cbase%5CMacros.h) | C++ | -6 | 0 | -2 | -8 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\base\\OperateResult.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Cbase%5COperateResult.h) | C++ | -44 | 0 | -9 | -53 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\base\\Schedule.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Cbase%5CSchedule.h) | C++ | -17 | 0 | -5 | -22 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\base\\Utils.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Cbase%5CUtils.cpp) | C++ | -45 | 0 | -6 | -51 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\base\\Utils.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Cbase%5CUtils.h) | C++ | -9 | 0 | -6 | -15 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\fix\\CFSPFixManager.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cfix%5CCFSPFixManager.cpp) | C++ | -122 | -10 | -11 | -143 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\fix\\CFSPFixManager.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cfix%5CCFSPFixManager.h) | C++ | -11 | 0 | -1 | -12 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\group\\CFSPGroup.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cgroup%5CCFSPGroup.cpp) | C++ | -30 | 0 | -4 | -34 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\group\\CFSPGroup.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cgroup%5CCFSPGroup.h) | C++ | -15 | 0 | -4 | -19 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\group\\GroupData.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cgroup%5CGroupData.h) | C++ | -14 | 0 | -2 | -16 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\group\\GroupPermission.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cgroup%5CGroupPermission.h) | C++ | -32 | 0 | 0 | -32 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\helper\\CFSPAutoFuncHelper.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Chelper%5CCFSPAutoFuncHelper.cpp) | C++ | -73 | 0 | -3 | -76 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\helper\\CFSPHelperManager.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Chelper%5CCFSPHelperManager.cpp) | C++ | -13 | 0 | -2 | -15 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\helper\\CFSPHelperManager.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Chelper%5CCFSPHelperManager.h) | C++ | -22 | 0 | -5 | -27 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\helper\\CFSPOperateHelper.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Chelper%5CCFSPOperateHelper.cpp) | C++ | -46 | 0 | -3 | -49 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\helper\\CFSPSaveHelper.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Chelper%5CCFSPSaveHelper.cpp) | C++ | -153 | 0 | -7 | -160 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\helper\\CFSPSchduleHelper.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Chelper%5CCFSPSchduleHelper.cpp) | C++ | -11 | 0 | -3 | -14 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\manager\\CFSPGroupManager.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cmanager%5CCFSPGroupManager.cpp) | C++ | -193 | -1 | -12 | -206 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\manager\\CFSPManager.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cmanager%5CCFSPManager.cpp) | C++ | -236 | 0 | -25 | -261 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\manager\\CFSPManager.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cmanager%5CCFSPManager.h) | C++ | -206 | 0 | -24 | -230 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\manager\\CFSPPermissionManager.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cmanager%5CCFSPPermissionManager.cpp) | C++ | -365 | -5 | -15 | -385 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\manager\\CFSPSpManager.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5Cmanager%5CCFSPSpManager.cpp) | C++ | -330 | -12 | -28 | -370 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayer.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayer.cpp) | C++ | -161 | -4 | -21 | -186 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayer.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayer.h) | C++ | -72 | 0 | -11 | -83 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerAction.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerAction.cpp) | C++ | -161 | -1 | -7 | -169 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerBase.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerBase.cpp) | C++ | -31 | 0 | -7 | -38 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerInv.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerInv.cpp) | C++ | -115 | 0 | -6 | -121 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerMessage.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerMessage.cpp) | C++ | -35 | 0 | -2 | -37 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerMove.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerMove.cpp) | C++ | -37 | 0 | -3 | -40 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerPermission.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerPermission.h) | C++ | -32 | 0 | -1 | -33 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerSave.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerSave.cpp) | C++ | -63 | 0 | -3 | -66 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerSaveData.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerSaveData.h) | C++ | -21 | 0 | -2 | -23 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\core\\simPlayer\\SimPlayerStatus.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Ccore%5CsimPlayer%5CSimPlayerStatus.cpp) | C++ | -56 | 0 | -4 | -60 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\entrance\\command\\ComandManager.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Ccommand%5CComandManager.cpp) | C++ | -113 | -4 | -9 | -126 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\entrance\\command\\ComandManager.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Ccommand%5CComandManager.h) | C++ | -19 | -1 | -5 | -25 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\entrance\\command\\GroupCommand.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Ccommand%5CGroupCommand.cpp) | C++ | -587 | -15 | -19 | -621 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\entrance\\command\\GuiCommand.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Ccommand%5CGuiCommand.cpp) | C++ | -41 | -3 | -4 | -48 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\entrance\\command\\SpCommand.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Ccommand%5CSpCommand.cpp) | C++ | -622 | -16 | -24 | -662 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\entrance\\gui\\GuiManager.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Cgui%5CGuiManager.cpp) | C++ | -193 | 0 | -12 | -205 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\entrance\\gui\\GuiManager.h](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Cgui%5CGuiManager.h) | C++ | -128 | 0 | -7 | -135 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\entrance\\gui\\OperateGroupGui.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Cgui%5COperateGroupGui.cpp) | C++ | -858 | 0 | -85 | -943 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\cfsp\\entrance\\gui\\OperateSpGui.cpp](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Ccfsp%5Centrance%5Cgui%5COperateSpGui.cpp) | C++ | -922 | 0 | -87 | -1,009 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\lang\\en\_US.json](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Clang%5Cen_US.json) | JSON | -7 | 0 | 0 | -7 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\src\\lang\\zh\_CN.json](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Csrc%5Clang%5Czh_CN.json) | JSON | -313 | 0 | 0 | -313 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\tooth.json](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Ctooth.json) | JSON | -26 | 0 | 0 | -26 | +| [f:\\Project\\levilamina\\1.5.x\\CFSP\\xmake.lua](/f:%5CProject%5Clevilamina%5C1.5.x%5CCFSP%5Cxmake.lua) | XMake | -58 | -3 | -8 | -69 | +| [.github/ISSUE\_TEMPLATE/bug\_report.yml](/.github/ISSUE_TEMPLATE/bug_report.yml) | YAML | 47 | 0 | 9 | 56 | +| [.github/ISSUE\_TEMPLATE/feature\_request.yml](/.github/ISSUE_TEMPLATE/feature_request.yml) | YAML | 25 | 0 | 4 | 29 | +| [.github/PULL\_REQUEST\_TEMPLATE.md](/.github/PULL_REQUEST_TEMPLATE.md) | Markdown | 10 | 0 | 9 | 19 | +| [.github/workflows/build.yml](/.github/workflows/build.yml) | YAML | 34 | 10 | 12 | 56 | +| [.github/workflows/release.yml](/.github/workflows/release.yml) | YAML | 68 | 0 | 17 | 85 | +| [CHANGELOG.md](/CHANGELOG.md) | Markdown | 128 | 0 | 95 | 223 | +| [CHANGELOG\_ZH.md](/CHANGELOG_ZH.md) | Markdown | 128 | 0 | 94 | 222 | +| [README.md](/README.md) | Markdown | 14 | 0 | 12 | 26 | +| [manifest.json](/manifest.json) | JSON | 7 | 0 | 0 | 7 | +| [scripts/after\_build.lua](/scripts/after_build.lua) | Lua | 105 | 1 | 19 | 125 | +| [src/cfsp/CFSP.cpp](/src/cfsp/CFSP.cpp) | C++ | 22 | 1 | 9 | 32 | +| [src/cfsp/CFSP.h](/src/cfsp/CFSP.h) | C++ | 15 | 6 | 14 | 35 | +| [src/cfsp/Config.h](/src/cfsp/Config.h) | C++ | 28 | 0 | 6 | 34 | +| [src/cfsp/MemoryOperators.cpp](/src/cfsp/MemoryOperators.cpp) | C++ | 2 | 2 | 3 | 7 | +| [src/cfsp/PermissionConfig.h](/src/cfsp/PermissionConfig.h) | C++ | 70 | 0 | 3 | 73 | +| [src/cfsp/base/Macros.h](/src/cfsp/base/Macros.h) | C++ | 6 | 0 | 2 | 8 | +| [src/cfsp/base/OperateResult.h](/src/cfsp/base/OperateResult.h) | C++ | 44 | 0 | 9 | 53 | +| [src/cfsp/base/Schedule.h](/src/cfsp/base/Schedule.h) | C++ | 17 | 0 | 5 | 22 | +| [src/cfsp/base/Utils.cpp](/src/cfsp/base/Utils.cpp) | C++ | 45 | 0 | 6 | 51 | +| [src/cfsp/base/Utils.h](/src/cfsp/base/Utils.h) | C++ | 9 | 0 | 6 | 15 | +| [src/cfsp/core/fix/CFSPFeatureFix.cpp](/src/cfsp/core/fix/CFSPFeatureFix.cpp) | C++ | 122 | 10 | 11 | 143 | +| [src/cfsp/core/fix/CFSPFixManager.cpp](/src/cfsp/core/fix/CFSPFixManager.cpp) | C++ | 8 | 0 | 2 | 10 | +| [src/cfsp/core/fix/CFSPFixManager.h](/src/cfsp/core/fix/CFSPFixManager.h) | C++ | 16 | 0 | 4 | 20 | +| [src/cfsp/core/fix/CFSPHandItemFix.cpp](/src/cfsp/core/fix/CFSPHandItemFix.cpp) | C++ | 53 | 0 | 4 | 57 | +| [src/cfsp/core/fix/SAPIFix.cpp](/src/cfsp/core/fix/SAPIFix.cpp) | C++ | 54 | 34 | 7 | 95 | +| [src/cfsp/core/group/CFSPGroup.cpp](/src/cfsp/core/group/CFSPGroup.cpp) | C++ | 30 | 0 | 4 | 34 | +| [src/cfsp/core/group/CFSPGroup.h](/src/cfsp/core/group/CFSPGroup.h) | C++ | 15 | 0 | 4 | 19 | +| [src/cfsp/core/group/GroupData.h](/src/cfsp/core/group/GroupData.h) | C++ | 14 | 0 | 2 | 16 | +| [src/cfsp/core/group/GroupPermission.h](/src/cfsp/core/group/GroupPermission.h) | C++ | 32 | 0 | 0 | 32 | +| [src/cfsp/core/helper/CFSPAutoFuncHelper.cpp](/src/cfsp/core/helper/CFSPAutoFuncHelper.cpp) | C++ | 73 | 0 | 3 | 76 | +| [src/cfsp/core/helper/CFSPHelperManager.cpp](/src/cfsp/core/helper/CFSPHelperManager.cpp) | C++ | 13 | 0 | 2 | 15 | +| [src/cfsp/core/helper/CFSPHelperManager.h](/src/cfsp/core/helper/CFSPHelperManager.h) | C++ | 22 | 0 | 5 | 27 | +| [src/cfsp/core/helper/CFSPOperateHelper.cpp](/src/cfsp/core/helper/CFSPOperateHelper.cpp) | C++ | 46 | 0 | 3 | 49 | +| [src/cfsp/core/helper/CFSPSaveHelper.cpp](/src/cfsp/core/helper/CFSPSaveHelper.cpp) | C++ | 35 | 0 | 3 | 38 | +| [src/cfsp/core/helper/CFSPSchduleHelper.cpp](/src/cfsp/core/helper/CFSPSchduleHelper.cpp) | C++ | 11 | 0 | 3 | 14 | +| [src/cfsp/core/manager/CFSPGroupManager.cpp](/src/cfsp/core/manager/CFSPGroupManager.cpp) | C++ | 193 | 1 | 12 | 206 | +| [src/cfsp/core/manager/CFSPManager.cpp](/src/cfsp/core/manager/CFSPManager.cpp) | C++ | 242 | 0 | 26 | 268 | +| [src/cfsp/core/manager/CFSPManager.h](/src/cfsp/core/manager/CFSPManager.h) | C++ | 211 | 0 | 24 | 235 | +| [src/cfsp/core/manager/CFSPPermissionManager.cpp](/src/cfsp/core/manager/CFSPPermissionManager.cpp) | C++ | 366 | 5 | 15 | 386 | +| [src/cfsp/core/manager/CFSPSpManager.cpp](/src/cfsp/core/manager/CFSPSpManager.cpp) | C++ | 329 | 12 | 28 | 369 | +| [src/cfsp/core/simPlayer/SimPlayer.cpp](/src/cfsp/core/simPlayer/SimPlayer.cpp) | C++ | 152 | 3 | 22 | 177 | +| [src/cfsp/core/simPlayer/SimPlayer.h](/src/cfsp/core/simPlayer/SimPlayer.h) | C++ | 71 | 0 | 13 | 84 | +| [src/cfsp/core/simPlayer/SimPlayerAction.cpp](/src/cfsp/core/simPlayer/SimPlayerAction.cpp) | C++ | 163 | 1 | 7 | 171 | +| [src/cfsp/core/simPlayer/SimPlayerBase.cpp](/src/cfsp/core/simPlayer/SimPlayerBase.cpp) | C++ | 31 | 0 | 7 | 38 | +| [src/cfsp/core/simPlayer/SimPlayerInv.cpp](/src/cfsp/core/simPlayer/SimPlayerInv.cpp) | C++ | 139 | 0 | 7 | 146 | +| [src/cfsp/core/simPlayer/SimPlayerMessage.cpp](/src/cfsp/core/simPlayer/SimPlayerMessage.cpp) | C++ | 35 | 0 | 2 | 37 | +| [src/cfsp/core/simPlayer/SimPlayerMove.cpp](/src/cfsp/core/simPlayer/SimPlayerMove.cpp) | C++ | 37 | 0 | 3 | 40 | +| [src/cfsp/core/simPlayer/SimPlayerPermission.h](/src/cfsp/core/simPlayer/SimPlayerPermission.h) | C++ | 32 | 0 | 1 | 33 | +| [src/cfsp/core/simPlayer/SimPlayerSave.cpp](/src/cfsp/core/simPlayer/SimPlayerSave.cpp) | C++ | 96 | 0 | 4 | 100 | +| [src/cfsp/core/simPlayer/SimPlayerSaveData.h](/src/cfsp/core/simPlayer/SimPlayerSaveData.h) | C++ | 20 | 0 | 2 | 22 | +| [src/cfsp/core/simPlayer/SimPlayerStatus.cpp](/src/cfsp/core/simPlayer/SimPlayerStatus.cpp) | C++ | 56 | 0 | 4 | 60 | +| [src/cfsp/entrance/command/ComandManager.cpp](/src/cfsp/entrance/command/ComandManager.cpp) | C++ | 113 | 4 | 9 | 126 | +| [src/cfsp/entrance/command/ComandManager.h](/src/cfsp/entrance/command/ComandManager.h) | C++ | 19 | 1 | 5 | 25 | +| [src/cfsp/entrance/command/GroupCommand.cpp](/src/cfsp/entrance/command/GroupCommand.cpp) | C++ | 588 | 15 | 19 | 622 | +| [src/cfsp/entrance/command/GuiCommand.cpp](/src/cfsp/entrance/command/GuiCommand.cpp) | C++ | 41 | 3 | 4 | 48 | +| [src/cfsp/entrance/command/SpCommand.cpp](/src/cfsp/entrance/command/SpCommand.cpp) | C++ | 625 | 16 | 24 | 665 | +| [src/cfsp/entrance/gui/GuiManager.cpp](/src/cfsp/entrance/gui/GuiManager.cpp) | C++ | 193 | 0 | 12 | 205 | +| [src/cfsp/entrance/gui/GuiManager.h](/src/cfsp/entrance/gui/GuiManager.h) | C++ | 156 | 0 | 7 | 163 | +| [src/cfsp/entrance/gui/OperateGroupGui.cpp](/src/cfsp/entrance/gui/OperateGroupGui.cpp) | C++ | 936 | 0 | 95 | 1,031 | +| [src/cfsp/entrance/gui/OperateSpGui.cpp](/src/cfsp/entrance/gui/OperateSpGui.cpp) | C++ | 1,007 | 0 | 97 | 1,104 | +| [src/lang/en\_US.json](/src/lang/en_US.json) | JSON | 314 | 0 | 0 | 314 | +| [src/lang/zh\_CN.json](/src/lang/zh_CN.json) | JSON | 314 | 0 | 0 | 314 | +| [tooth.json](/tooth.json) | JSON | 26 | 0 | 0 | 26 | +| [xmake.lua](/xmake.lua) | XMake | 58 | 3 | 8 | 69 | + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details \ No newline at end of file diff --git a/.VSCodeCounter/2025-12-25_13-48-15/diff.csv b/.VSCodeCounter/2025-12-25_13-48-15/diff.csv new file mode 100644 index 0000000..49db16b --- /dev/null +++ b/.VSCodeCounter/2025-12-25_13-48-15/diff.csv @@ -0,0 +1,127 @@ +"filename", "language", "XMake", "Lua", "Markdown", "JSON", "C++", "YAML", "comment", "blank", "total" +"f:\Project\levilamina\1.5.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml", "YAML", 0, 0, 0, 0, 0, -47, 0, -9, -56 +"f:\Project\levilamina\1.5.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml", "YAML", 0, 0, 0, 0, 0, -25, 0, -4, -29 +"f:\Project\levilamina\1.5.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md", "Markdown", 0, 0, -10, 0, 0, 0, 0, -9, -19 +"f:\Project\levilamina\1.5.x\CFSP\.github\workflows\build.yml", "YAML", 0, 0, 0, 0, 0, -34, -10, -12, -56 +"f:\Project\levilamina\1.5.x\CFSP\.github\workflows\release.yml", "YAML", 0, 0, 0, 0, 0, -68, 0, -17, -85 +"f:\Project\levilamina\1.5.x\CFSP\CHANGELOG.md", "Markdown", 0, 0, -106, 0, 0, 0, 0, -73, -179 +"f:\Project\levilamina\1.5.x\CFSP\CHANGELOG_ZH.md", "Markdown", 0, 0, -106, 0, 0, 0, 0, -73, -179 +"f:\Project\levilamina\1.5.x\CFSP\README.md", "Markdown", 0, 0, -14, 0, 0, 0, 0, -12, -26 +"f:\Project\levilamina\1.5.x\CFSP\manifest.json", "JSON", 0, 0, 0, -7, 0, 0, 0, 0, -7 +"f:\Project\levilamina\1.5.x\CFSP\scripts\after_build.lua", "Lua", 0, -105, 0, 0, 0, 0, -1, -19, -125 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\CFSP.cpp", "C++", 0, 0, 0, 0, -22, 0, -1, -9, -32 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\CFSP.h", "C++", 0, 0, 0, 0, -15, 0, -6, -14, -35 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\Config.h", "C++", 0, 0, 0, 0, -28, 0, 0, -6, -34 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\MemoryOperators.cpp", "C++", 0, 0, 0, 0, -2, 0, -2, -3, -7 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\PermissionConfig.h", "C++", 0, 0, 0, 0, -70, 0, 0, -3, -73 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Macros.h", "C++", 0, 0, 0, 0, -6, 0, 0, -2, -8 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\OperateResult.h", "C++", 0, 0, 0, 0, -44, 0, 0, -9, -53 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Schedule.h", "C++", 0, 0, 0, 0, -17, 0, 0, -5, -22 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Utils.cpp", "C++", 0, 0, 0, 0, -45, 0, 0, -6, -51 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Utils.h", "C++", 0, 0, 0, 0, -9, 0, 0, -6, -15 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp", "C++", 0, 0, 0, 0, -122, 0, -10, -11, -143 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h", "C++", 0, 0, 0, 0, -11, 0, 0, -1, -12 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp", "C++", 0, 0, 0, 0, -30, 0, 0, -4, -34 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\CFSPGroup.h", "C++", 0, 0, 0, 0, -15, 0, 0, -4, -19 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\GroupData.h", "C++", 0, 0, 0, 0, -14, 0, 0, -2, -16 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\GroupPermission.h", "C++", 0, 0, 0, 0, -32, 0, 0, 0, -32 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp", "C++", 0, 0, 0, 0, -73, 0, 0, -3, -76 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp", "C++", 0, 0, 0, 0, -13, 0, 0, -2, -15 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h", "C++", 0, 0, 0, 0, -22, 0, 0, -5, -27 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp", "C++", 0, 0, 0, 0, -46, 0, 0, -3, -49 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp", "C++", 0, 0, 0, 0, -153, 0, 0, -7, -160 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp", "C++", 0, 0, 0, 0, -11, 0, 0, -3, -14 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp", "C++", 0, 0, 0, 0, -193, 0, -1, -12, -206 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp", "C++", 0, 0, 0, 0, -236, 0, 0, -25, -261 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPManager.h", "C++", 0, 0, 0, 0, -206, 0, 0, -24, -230 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp", "C++", 0, 0, 0, 0, -365, 0, -5, -15, -385 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp", "C++", 0, 0, 0, 0, -330, 0, -12, -28, -370 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp", "C++", 0, 0, 0, 0, -161, 0, -4, -21, -186 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h", "C++", 0, 0, 0, 0, -72, 0, 0, -11, -83 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerAction.cpp", "C++", 0, 0, 0, 0, -161, 0, -1, -7, -169 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp", "C++", 0, 0, 0, 0, -31, 0, 0, -7, -38 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp", "C++", 0, 0, 0, 0, -115, 0, 0, -6, -121 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp", "C++", 0, 0, 0, 0, -35, 0, 0, -2, -37 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp", "C++", 0, 0, 0, 0, -37, 0, 0, -3, -40 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h", "C++", 0, 0, 0, 0, -32, 0, 0, -1, -33 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp", "C++", 0, 0, 0, 0, -63, 0, 0, -3, -66 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h", "C++", 0, 0, 0, 0, -21, 0, 0, -2, -23 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp", "C++", 0, 0, 0, 0, -56, 0, 0, -4, -60 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp", "C++", 0, 0, 0, 0, -113, 0, -4, -9, -126 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\ComandManager.h", "C++", 0, 0, 0, 0, -19, 0, -1, -5, -25 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp", "C++", 0, 0, 0, 0, -587, 0, -15, -19, -621 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp", "C++", 0, 0, 0, 0, -41, 0, -3, -4, -48 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp", "C++", 0, 0, 0, 0, -622, 0, -16, -24, -662 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp", "C++", 0, 0, 0, 0, -193, 0, 0, -12, -205 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\GuiManager.h", "C++", 0, 0, 0, 0, -128, 0, 0, -7, -135 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp", "C++", 0, 0, 0, 0, -858, 0, 0, -85, -943 +"f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp", "C++", 0, 0, 0, 0, -922, 0, 0, -87, -1009 +"f:\Project\levilamina\1.5.x\CFSP\src\lang\en_US.json", "JSON", 0, 0, 0, -7, 0, 0, 0, 0, -7 +"f:\Project\levilamina\1.5.x\CFSP\src\lang\zh_CN.json", "JSON", 0, 0, 0, -313, 0, 0, 0, 0, -313 +"f:\Project\levilamina\1.5.x\CFSP\tooth.json", "JSON", 0, 0, 0, -26, 0, 0, 0, 0, -26 +"f:\Project\levilamina\1.5.x\CFSP\xmake.lua", "XMake", -58, 0, 0, 0, 0, 0, -3, -8, -69 +"f:\Project\levilamina\1.7.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml", "YAML", 0, 0, 0, 0, 0, 47, 0, 9, 56 +"f:\Project\levilamina\1.7.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml", "YAML", 0, 0, 0, 0, 0, 25, 0, 4, 29 +"f:\Project\levilamina\1.7.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md", "Markdown", 0, 0, 10, 0, 0, 0, 0, 9, 19 +"f:\Project\levilamina\1.7.x\CFSP\.github\workflows\build.yml", "YAML", 0, 0, 0, 0, 0, 34, 10, 12, 56 +"f:\Project\levilamina\1.7.x\CFSP\.github\workflows\release.yml", "YAML", 0, 0, 0, 0, 0, 68, 0, 17, 85 +"f:\Project\levilamina\1.7.x\CFSP\CHANGELOG.md", "Markdown", 0, 0, 128, 0, 0, 0, 0, 95, 223 +"f:\Project\levilamina\1.7.x\CFSP\CHANGELOG_ZH.md", "Markdown", 0, 0, 128, 0, 0, 0, 0, 94, 222 +"f:\Project\levilamina\1.7.x\CFSP\README.md", "Markdown", 0, 0, 14, 0, 0, 0, 0, 12, 26 +"f:\Project\levilamina\1.7.x\CFSP\manifest.json", "JSON", 0, 0, 0, 7, 0, 0, 0, 0, 7 +"f:\Project\levilamina\1.7.x\CFSP\scripts\after_build.lua", "Lua", 0, 105, 0, 0, 0, 0, 1, 19, 125 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\CFSP.cpp", "C++", 0, 0, 0, 0, 22, 0, 1, 9, 32 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\CFSP.h", "C++", 0, 0, 0, 0, 15, 0, 6, 14, 35 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\Config.h", "C++", 0, 0, 0, 0, 28, 0, 0, 6, 34 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\MemoryOperators.cpp", "C++", 0, 0, 0, 0, 2, 0, 2, 3, 7 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\PermissionConfig.h", "C++", 0, 0, 0, 0, 70, 0, 0, 3, 73 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\Macros.h", "C++", 0, 0, 0, 0, 6, 0, 0, 2, 8 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\OperateResult.h", "C++", 0, 0, 0, 0, 44, 0, 0, 9, 53 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\Schedule.h", "C++", 0, 0, 0, 0, 17, 0, 0, 5, 22 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\Utils.cpp", "C++", 0, 0, 0, 0, 45, 0, 0, 6, 51 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\Utils.h", "C++", 0, 0, 0, 0, 9, 0, 0, 6, 15 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\CFSPFeatureFix.cpp", "C++", 0, 0, 0, 0, 122, 0, 10, 11, 143 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp", "C++", 0, 0, 0, 0, 8, 0, 0, 2, 10 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h", "C++", 0, 0, 0, 0, 16, 0, 0, 4, 20 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\CFSPHandItemFix.cpp", "C++", 0, 0, 0, 0, 53, 0, 0, 4, 57 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\SAPIFix.cpp", "C++", 0, 0, 0, 0, 54, 0, 34, 7, 95 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp", "C++", 0, 0, 0, 0, 30, 0, 0, 4, 34 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\group\CFSPGroup.h", "C++", 0, 0, 0, 0, 15, 0, 0, 4, 19 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\group\GroupData.h", "C++", 0, 0, 0, 0, 14, 0, 0, 2, 16 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\group\GroupPermission.h", "C++", 0, 0, 0, 0, 32, 0, 0, 0, 32 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp", "C++", 0, 0, 0, 0, 73, 0, 0, 3, 76 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp", "C++", 0, 0, 0, 0, 13, 0, 0, 2, 15 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h", "C++", 0, 0, 0, 0, 22, 0, 0, 5, 27 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp", "C++", 0, 0, 0, 0, 46, 0, 0, 3, 49 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp", "C++", 0, 0, 0, 0, 35, 0, 0, 3, 38 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp", "C++", 0, 0, 0, 0, 11, 0, 0, 3, 14 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp", "C++", 0, 0, 0, 0, 193, 0, 1, 12, 206 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp", "C++", 0, 0, 0, 0, 242, 0, 0, 26, 268 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPManager.h", "C++", 0, 0, 0, 0, 211, 0, 0, 24, 235 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp", "C++", 0, 0, 0, 0, 366, 0, 5, 15, 386 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp", "C++", 0, 0, 0, 0, 329, 0, 12, 28, 369 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp", "C++", 0, 0, 0, 0, 152, 0, 3, 22, 177 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h", "C++", 0, 0, 0, 0, 71, 0, 0, 13, 84 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerAction.cpp", "C++", 0, 0, 0, 0, 163, 0, 1, 7, 171 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp", "C++", 0, 0, 0, 0, 31, 0, 0, 7, 38 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp", "C++", 0, 0, 0, 0, 139, 0, 0, 7, 146 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp", "C++", 0, 0, 0, 0, 35, 0, 0, 2, 37 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp", "C++", 0, 0, 0, 0, 37, 0, 0, 3, 40 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h", "C++", 0, 0, 0, 0, 32, 0, 0, 1, 33 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp", "C++", 0, 0, 0, 0, 96, 0, 0, 4, 100 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h", "C++", 0, 0, 0, 0, 20, 0, 0, 2, 22 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp", "C++", 0, 0, 0, 0, 56, 0, 0, 4, 60 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp", "C++", 0, 0, 0, 0, 113, 0, 4, 9, 126 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\ComandManager.h", "C++", 0, 0, 0, 0, 19, 0, 1, 5, 25 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp", "C++", 0, 0, 0, 0, 588, 0, 15, 19, 622 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp", "C++", 0, 0, 0, 0, 41, 0, 3, 4, 48 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp", "C++", 0, 0, 0, 0, 625, 0, 16, 24, 665 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp", "C++", 0, 0, 0, 0, 193, 0, 0, 12, 205 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\gui\GuiManager.h", "C++", 0, 0, 0, 0, 156, 0, 0, 7, 163 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp", "C++", 0, 0, 0, 0, 936, 0, 0, 95, 1031 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp", "C++", 0, 0, 0, 0, 1007, 0, 0, 97, 1104 +"f:\Project\levilamina\1.7.x\CFSP\src\lang\en_US.json", "JSON", 0, 0, 0, 314, 0, 0, 0, 0, 314 +"f:\Project\levilamina\1.7.x\CFSP\src\lang\zh_CN.json", "JSON", 0, 0, 0, 314, 0, 0, 0, 0, 314 +"f:\Project\levilamina\1.7.x\CFSP\tooth.json", "JSON", 0, 0, 0, 26, 0, 0, 0, 0, 26 +"f:\Project\levilamina\1.7.x\CFSP\xmake.lua", "XMake", 58, 0, 0, 0, 0, 0, 3, 8, 69 +"Total", "-", 0, 0, 44, 308, 256, 0, 33, 81, 722 \ No newline at end of file diff --git a/.VSCodeCounter/2025-12-25_13-48-15/diff.md b/.VSCodeCounter/2025-12-25_13-48-15/diff.md new file mode 100644 index 0000000..f1d369d --- /dev/null +++ b/.VSCodeCounter/2025-12-25_13-48-15/diff.md @@ -0,0 +1,70 @@ +# Diff Summary + +Date : 2025-12-25 13:48:15 + +Directory f:\\Project\\levilamina\\1.7.x\\CFSP + +Total : 125 files, 608 codes, 33 comments, 81 blanks, all 722 lines + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| JSON | 8 | 308 | 0 | 0 | 308 | +| C++ | 97 | 256 | 33 | 38 | 327 | +| Markdown | 8 | 44 | 0 | 43 | 87 | +| XMake | 2 | 0 | 0 | 0 | 0 | +| Lua | 2 | 0 | 0 | 0 | 0 | +| YAML | 8 | 0 | 0 | 0 | 0 | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| . | 125 | 608 | 33 | 81 | 722 | +| . (Files) | 6 | 361 | 3 | 209 | 573 | +| .. | 61 | -7,323 | -95 | -767 | -8,185 | +| ..\\.. | 61 | -7,323 | -95 | -767 | -8,185 | +| ..\\..\\1.5.x | 61 | -7,323 | -95 | -767 | -8,185 | +| ..\\..\\1.5.x\\CFSP | 61 | -7,323 | -95 | -767 | -8,185 | +| ..\\..\\1.5.x\\CFSP (Files) | 6 | -317 | -3 | -166 | -486 | +| ..\\..\\1.5.x\\CFSP\\.github | 5 | -184 | -10 | -51 | -245 | +| ..\\..\\1.5.x\\CFSP\\.github (Files) | 1 | -10 | 0 | -9 | -19 | +| ..\\..\\1.5.x\\CFSP\\.github\\ISSUE_TEMPLATE | 2 | -72 | 0 | -13 | -85 | +| ..\\..\\1.5.x\\CFSP\\.github\\workflows | 2 | -102 | -10 | -29 | -141 | +| ..\\..\\1.5.x\\CFSP\\scripts | 1 | -105 | -1 | -19 | -125 | +| ..\\..\\1.5.x\\CFSP\\src | 49 | -6,717 | -81 | -531 | -7,329 | +| ..\\..\\1.5.x\\CFSP\\src\\cfsp | 47 | -6,397 | -81 | -531 | -7,009 | +| ..\\..\\1.5.x\\CFSP\\src\\cfsp (Files) | 5 | -137 | -9 | -35 | -181 | +| ..\\..\\1.5.x\\CFSP\\src\\cfsp\\base | 5 | -121 | 0 | -28 | -149 | +| ..\\..\\1.5.x\\CFSP\\src\\cfsp\\core | 28 | -2,656 | -33 | -216 | -2,905 | +| ..\\..\\1.5.x\\CFSP\\src\\cfsp\\core\\fix | 2 | -133 | -10 | -12 | -155 | +| ..\\..\\1.5.x\\CFSP\\src\\cfsp\\core\\group | 4 | -91 | 0 | -10 | -101 | +| ..\\..\\1.5.x\\CFSP\\src\\cfsp\\core\\helper | 6 | -318 | 0 | -23 | -341 | +| ..\\..\\1.5.x\\CFSP\\src\\cfsp\\core\\manager | 5 | -1,330 | -18 | -104 | -1,452 | +| ..\\..\\1.5.x\\CFSP\\src\\cfsp\\core\\simPlayer | 11 | -784 | -5 | -67 | -856 | +| ..\\..\\1.5.x\\CFSP\\src\\cfsp\\entrance | 9 | -3,483 | -39 | -252 | -3,774 | +| ..\\..\\1.5.x\\CFSP\\src\\cfsp\\entrance\\command | 5 | -1,382 | -39 | -61 | -1,482 | +| ..\\..\\1.5.x\\CFSP\\src\\cfsp\\entrance\\gui | 4 | -2,101 | 0 | -191 | -2,292 | +| ..\\..\\1.5.x\\CFSP\\src\\lang | 2 | -320 | 0 | 0 | -320 | +| .github | 5 | 184 | 10 | 51 | 245 | +| .github (Files) | 1 | 10 | 0 | 9 | 19 | +| .github\\ISSUE_TEMPLATE | 2 | 72 | 0 | 13 | 85 | +| .github\\workflows | 2 | 102 | 10 | 29 | 141 | +| scripts | 1 | 105 | 1 | 19 | 125 | +| src | 52 | 7,281 | 114 | 569 | 7,964 | +| src\\cfsp | 50 | 6,653 | 114 | 569 | 7,336 | +| src\\cfsp (Files) | 5 | 137 | 9 | 35 | 181 | +| src\\cfsp\\base | 5 | 121 | 0 | 28 | 149 | +| src\\cfsp\\core | 31 | 2,717 | 66 | 234 | 3,017 | +| src\\cfsp\\core\\fix | 5 | 253 | 44 | 28 | 325 | +| src\\cfsp\\core\\group | 4 | 91 | 0 | 10 | 101 | +| src\\cfsp\\core\\helper | 6 | 200 | 0 | 19 | 219 | +| src\\cfsp\\core\\manager | 5 | 1,341 | 18 | 105 | 1,464 | +| src\\cfsp\\core\\simPlayer | 11 | 832 | 4 | 72 | 908 | +| src\\cfsp\\entrance | 9 | 3,678 | 39 | 272 | 3,989 | +| src\\cfsp\\entrance\\command | 5 | 1,386 | 39 | 61 | 1,486 | +| src\\cfsp\\entrance\\gui | 4 | 2,292 | 0 | 211 | 2,503 | +| src\\lang | 2 | 628 | 0 | 0 | 628 | + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2025-12-25_13-48-15/diff.txt b/.VSCodeCounter/2025-12-25_13-48-15/diff.txt new file mode 100644 index 0000000..2e3d0b4 --- /dev/null +++ b/.VSCodeCounter/2025-12-25_13-48-15/diff.txt @@ -0,0 +1,198 @@ +Date : 2025-12-25 13:48:15 +Directory : f:\Project\levilamina\1.7.x\CFSP +Total : 125 files, 608 codes, 33 comments, 81 blanks, all 722 lines + +Languages ++----------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++----------+------------+------------+------------+------------+------------+ +| JSON | 8 | 308 | 0 | 0 | 308 | +| C++ | 97 | 256 | 33 | 38 | 327 | +| Markdown | 8 | 44 | 0 | 43 | 87 | +| XMake | 2 | 0 | 0 | 0 | 0 | +| Lua | 2 | 0 | 0 | 0 | 0 | +| YAML | 8 | 0 | 0 | 0 | 0 | ++----------+------------+------------+------------+------------+------------+ + +Directories ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| . | 125 | 608 | 33 | 81 | 722 | +| . (Files) | 6 | 361 | 3 | 209 | 573 | +| .. | 61 | -7,323 | -95 | -767 | -8,185 | +| ..\.. | 61 | -7,323 | -95 | -767 | -8,185 | +| ..\..\1.5.x | 61 | -7,323 | -95 | -767 | -8,185 | +| ..\..\1.5.x\CFSP | 61 | -7,323 | -95 | -767 | -8,185 | +| ..\..\1.5.x\CFSP (Files) | 6 | -317 | -3 | -166 | -486 | +| ..\..\1.5.x\CFSP\.github | 5 | -184 | -10 | -51 | -245 | +| ..\..\1.5.x\CFSP\.github (Files) | 1 | -10 | 0 | -9 | -19 | +| ..\..\1.5.x\CFSP\.github\ISSUE_TEMPLATE | 2 | -72 | 0 | -13 | -85 | +| ..\..\1.5.x\CFSP\.github\workflows | 2 | -102 | -10 | -29 | -141 | +| ..\..\1.5.x\CFSP\scripts | 1 | -105 | -1 | -19 | -125 | +| ..\..\1.5.x\CFSP\src | 49 | -6,717 | -81 | -531 | -7,329 | +| ..\..\1.5.x\CFSP\src\cfsp | 47 | -6,397 | -81 | -531 | -7,009 | +| ..\..\1.5.x\CFSP\src\cfsp (Files) | 5 | -137 | -9 | -35 | -181 | +| ..\..\1.5.x\CFSP\src\cfsp\base | 5 | -121 | 0 | -28 | -149 | +| ..\..\1.5.x\CFSP\src\cfsp\core | 28 | -2,656 | -33 | -216 | -2,905 | +| ..\..\1.5.x\CFSP\src\cfsp\core\fix | 2 | -133 | -10 | -12 | -155 | +| ..\..\1.5.x\CFSP\src\cfsp\core\group | 4 | -91 | 0 | -10 | -101 | +| ..\..\1.5.x\CFSP\src\cfsp\core\helper | 6 | -318 | 0 | -23 | -341 | +| ..\..\1.5.x\CFSP\src\cfsp\core\manager | 5 | -1,330 | -18 | -104 | -1,452 | +| ..\..\1.5.x\CFSP\src\cfsp\core\simPlayer | 11 | -784 | -5 | -67 | -856 | +| ..\..\1.5.x\CFSP\src\cfsp\entrance | 9 | -3,483 | -39 | -252 | -3,774 | +| ..\..\1.5.x\CFSP\src\cfsp\entrance\command | 5 | -1,382 | -39 | -61 | -1,482 | +| ..\..\1.5.x\CFSP\src\cfsp\entrance\gui | 4 | -2,101 | 0 | -191 | -2,292 | +| ..\..\1.5.x\CFSP\src\lang | 2 | -320 | 0 | 0 | -320 | +| .github | 5 | 184 | 10 | 51 | 245 | +| .github (Files) | 1 | 10 | 0 | 9 | 19 | +| .github\ISSUE_TEMPLATE | 2 | 72 | 0 | 13 | 85 | +| .github\workflows | 2 | 102 | 10 | 29 | 141 | +| scripts | 1 | 105 | 1 | 19 | 125 | +| src | 52 | 7,281 | 114 | 569 | 7,964 | +| src\cfsp | 50 | 6,653 | 114 | 569 | 7,336 | +| src\cfsp (Files) | 5 | 137 | 9 | 35 | 181 | +| src\cfsp\base | 5 | 121 | 0 | 28 | 149 | +| src\cfsp\core | 31 | 2,717 | 66 | 234 | 3,017 | +| src\cfsp\core\fix | 5 | 253 | 44 | 28 | 325 | +| src\cfsp\core\group | 4 | 91 | 0 | 10 | 101 | +| src\cfsp\core\helper | 6 | 200 | 0 | 19 | 219 | +| src\cfsp\core\manager | 5 | 1,341 | 18 | 105 | 1,464 | +| src\cfsp\core\simPlayer | 11 | 832 | 4 | 72 | 908 | +| src\cfsp\entrance | 9 | 3,678 | 39 | 272 | 3,989 | +| src\cfsp\entrance\command | 5 | 1,386 | 39 | 61 | 1,486 | +| src\cfsp\entrance\gui | 4 | 2,292 | 0 | 211 | 2,503 | +| src\lang | 2 | 628 | 0 | 0 | 628 | ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ + +Files ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| f:\Project\levilamina\1.5.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml | YAML | -47 | 0 | -9 | -56 | +| f:\Project\levilamina\1.5.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml | YAML | -25 | 0 | -4 | -29 | +| f:\Project\levilamina\1.5.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md | Markdown | -10 | 0 | -9 | -19 | +| f:\Project\levilamina\1.5.x\CFSP\.github\workflows\build.yml | YAML | -34 | -10 | -12 | -56 | +| f:\Project\levilamina\1.5.x\CFSP\.github\workflows\release.yml | YAML | -68 | 0 | -17 | -85 | +| f:\Project\levilamina\1.5.x\CFSP\CHANGELOG.md | Markdown | -106 | 0 | -73 | -179 | +| f:\Project\levilamina\1.5.x\CFSP\CHANGELOG_ZH.md | Markdown | -106 | 0 | -73 | -179 | +| f:\Project\levilamina\1.5.x\CFSP\README.md | Markdown | -14 | 0 | -12 | -26 | +| f:\Project\levilamina\1.5.x\CFSP\manifest.json | JSON | -7 | 0 | 0 | -7 | +| f:\Project\levilamina\1.5.x\CFSP\scripts\after_build.lua | Lua | -105 | -1 | -19 | -125 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\CFSP.cpp | C++ | -22 | -1 | -9 | -32 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\CFSP.h | C++ | -15 | -6 | -14 | -35 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\Config.h | C++ | -28 | 0 | -6 | -34 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\MemoryOperators.cpp | C++ | -2 | -2 | -3 | -7 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\PermissionConfig.h | C++ | -70 | 0 | -3 | -73 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Macros.h | C++ | -6 | 0 | -2 | -8 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\OperateResult.h | C++ | -44 | 0 | -9 | -53 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Schedule.h | C++ | -17 | 0 | -5 | -22 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Utils.cpp | C++ | -45 | 0 | -6 | -51 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\base\Utils.h | C++ | -9 | 0 | -6 | -15 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp | C++ | -122 | -10 | -11 | -143 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h | C++ | -11 | 0 | -1 | -12 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp | C++ | -30 | 0 | -4 | -34 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\CFSPGroup.h | C++ | -15 | 0 | -4 | -19 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\GroupData.h | C++ | -14 | 0 | -2 | -16 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\group\GroupPermission.h | C++ | -32 | 0 | 0 | -32 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp | C++ | -73 | 0 | -3 | -76 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp | C++ | -13 | 0 | -2 | -15 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h | C++ | -22 | 0 | -5 | -27 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp | C++ | -46 | 0 | -3 | -49 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp | C++ | -153 | 0 | -7 | -160 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp | C++ | -11 | 0 | -3 | -14 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp | C++ | -193 | -1 | -12 | -206 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp | C++ | -236 | 0 | -25 | -261 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPManager.h | C++ | -206 | 0 | -24 | -230 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp | C++ | -365 | -5 | -15 | -385 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp | C++ | -330 | -12 | -28 | -370 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp | C++ | -161 | -4 | -21 | -186 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h | C++ | -72 | 0 | -11 | -83 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerAction.cpp | C++ | -161 | -1 | -7 | -169 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp | C++ | -31 | 0 | -7 | -38 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp | C++ | -115 | 0 | -6 | -121 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp | C++ | -35 | 0 | -2 | -37 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp | C++ | -37 | 0 | -3 | -40 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h | C++ | -32 | 0 | -1 | -33 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp | C++ | -63 | 0 | -3 | -66 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h | C++ | -21 | 0 | -2 | -23 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp | C++ | -56 | 0 | -4 | -60 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp | C++ | -113 | -4 | -9 | -126 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\ComandManager.h | C++ | -19 | -1 | -5 | -25 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp | C++ | -587 | -15 | -19 | -621 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp | C++ | -41 | -3 | -4 | -48 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp | C++ | -622 | -16 | -24 | -662 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp | C++ | -193 | 0 | -12 | -205 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\GuiManager.h | C++ | -128 | 0 | -7 | -135 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp | C++ | -858 | 0 | -85 | -943 | +| f:\Project\levilamina\1.5.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp | C++ | -922 | 0 | -87 | -1,009 | +| f:\Project\levilamina\1.5.x\CFSP\src\lang\en_US.json | JSON | -7 | 0 | 0 | -7 | +| f:\Project\levilamina\1.5.x\CFSP\src\lang\zh_CN.json | JSON | -313 | 0 | 0 | -313 | +| f:\Project\levilamina\1.5.x\CFSP\tooth.json | JSON | -26 | 0 | 0 | -26 | +| f:\Project\levilamina\1.5.x\CFSP\xmake.lua | XMake | -58 | -3 | -8 | -69 | +| f:\Project\levilamina\1.7.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml | YAML | 47 | 0 | 9 | 56 | +| f:\Project\levilamina\1.7.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml | YAML | 25 | 0 | 4 | 29 | +| f:\Project\levilamina\1.7.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md | Markdown | 10 | 0 | 9 | 19 | +| f:\Project\levilamina\1.7.x\CFSP\.github\workflows\build.yml | YAML | 34 | 10 | 12 | 56 | +| f:\Project\levilamina\1.7.x\CFSP\.github\workflows\release.yml | YAML | 68 | 0 | 17 | 85 | +| f:\Project\levilamina\1.7.x\CFSP\CHANGELOG.md | Markdown | 128 | 0 | 95 | 223 | +| f:\Project\levilamina\1.7.x\CFSP\CHANGELOG_ZH.md | Markdown | 128 | 0 | 94 | 222 | +| f:\Project\levilamina\1.7.x\CFSP\README.md | Markdown | 14 | 0 | 12 | 26 | +| f:\Project\levilamina\1.7.x\CFSP\manifest.json | JSON | 7 | 0 | 0 | 7 | +| f:\Project\levilamina\1.7.x\CFSP\scripts\after_build.lua | Lua | 105 | 1 | 19 | 125 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\CFSP.cpp | C++ | 22 | 1 | 9 | 32 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\CFSP.h | C++ | 15 | 6 | 14 | 35 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\Config.h | C++ | 28 | 0 | 6 | 34 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\MemoryOperators.cpp | C++ | 2 | 2 | 3 | 7 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\PermissionConfig.h | C++ | 70 | 0 | 3 | 73 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\Macros.h | C++ | 6 | 0 | 2 | 8 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\OperateResult.h | C++ | 44 | 0 | 9 | 53 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\Schedule.h | C++ | 17 | 0 | 5 | 22 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\Utils.cpp | C++ | 45 | 0 | 6 | 51 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\Utils.h | C++ | 9 | 0 | 6 | 15 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\CFSPFeatureFix.cpp | C++ | 122 | 10 | 11 | 143 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp | C++ | 8 | 0 | 2 | 10 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h | C++ | 16 | 0 | 4 | 20 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\CFSPHandItemFix.cpp | C++ | 53 | 0 | 4 | 57 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\SAPIFix.cpp | C++ | 54 | 34 | 7 | 95 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp | C++ | 30 | 0 | 4 | 34 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\group\CFSPGroup.h | C++ | 15 | 0 | 4 | 19 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\group\GroupData.h | C++ | 14 | 0 | 2 | 16 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\group\GroupPermission.h | C++ | 32 | 0 | 0 | 32 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp | C++ | 73 | 0 | 3 | 76 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp | C++ | 13 | 0 | 2 | 15 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h | C++ | 22 | 0 | 5 | 27 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp | C++ | 46 | 0 | 3 | 49 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp | C++ | 35 | 0 | 3 | 38 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp | C++ | 11 | 0 | 3 | 14 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp | C++ | 193 | 1 | 12 | 206 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp | C++ | 242 | 0 | 26 | 268 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPManager.h | C++ | 211 | 0 | 24 | 235 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp | C++ | 366 | 5 | 15 | 386 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp | C++ | 329 | 12 | 28 | 369 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp | C++ | 152 | 3 | 22 | 177 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h | C++ | 71 | 0 | 13 | 84 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerAction.cpp | C++ | 163 | 1 | 7 | 171 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp | C++ | 31 | 0 | 7 | 38 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp | C++ | 139 | 0 | 7 | 146 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp | C++ | 35 | 0 | 2 | 37 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp | C++ | 37 | 0 | 3 | 40 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h | C++ | 32 | 0 | 1 | 33 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp | C++ | 96 | 0 | 4 | 100 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h | C++ | 20 | 0 | 2 | 22 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp | C++ | 56 | 0 | 4 | 60 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp | C++ | 113 | 4 | 9 | 126 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\ComandManager.h | C++ | 19 | 1 | 5 | 25 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp | C++ | 588 | 15 | 19 | 622 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp | C++ | 41 | 3 | 4 | 48 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp | C++ | 625 | 16 | 24 | 665 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp | C++ | 193 | 0 | 12 | 205 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\gui\GuiManager.h | C++ | 156 | 0 | 7 | 163 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp | C++ | 936 | 0 | 95 | 1,031 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp | C++ | 1,007 | 0 | 97 | 1,104 | +| f:\Project\levilamina\1.7.x\CFSP\src\lang\en_US.json | JSON | 314 | 0 | 0 | 314 | +| f:\Project\levilamina\1.7.x\CFSP\src\lang\zh_CN.json | JSON | 314 | 0 | 0 | 314 | +| f:\Project\levilamina\1.7.x\CFSP\tooth.json | JSON | 26 | 0 | 0 | 26 | +| f:\Project\levilamina\1.7.x\CFSP\xmake.lua | XMake | 58 | 3 | 8 | 69 | +| Total | | 608 | 33 | 81 | 722 | ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/.VSCodeCounter/2025-12-25_13-48-15/results.csv b/.VSCodeCounter/2025-12-25_13-48-15/results.csv new file mode 100644 index 0000000..43a684f --- /dev/null +++ b/.VSCodeCounter/2025-12-25_13-48-15/results.csv @@ -0,0 +1,66 @@ +"filename", "language", "XMake", "Lua", "Markdown", "JSON", "C++", "YAML", "comment", "blank", "total" +"f:\Project\levilamina\1.7.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml", "YAML", 0, 0, 0, 0, 0, 47, 0, 9, 56 +"f:\Project\levilamina\1.7.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml", "YAML", 0, 0, 0, 0, 0, 25, 0, 4, 29 +"f:\Project\levilamina\1.7.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md", "Markdown", 0, 0, 10, 0, 0, 0, 0, 9, 19 +"f:\Project\levilamina\1.7.x\CFSP\.github\workflows\build.yml", "YAML", 0, 0, 0, 0, 0, 34, 10, 12, 56 +"f:\Project\levilamina\1.7.x\CFSP\.github\workflows\release.yml", "YAML", 0, 0, 0, 0, 0, 68, 0, 17, 85 +"f:\Project\levilamina\1.7.x\CFSP\CHANGELOG.md", "Markdown", 0, 0, 128, 0, 0, 0, 0, 95, 223 +"f:\Project\levilamina\1.7.x\CFSP\CHANGELOG_ZH.md", "Markdown", 0, 0, 128, 0, 0, 0, 0, 94, 222 +"f:\Project\levilamina\1.7.x\CFSP\README.md", "Markdown", 0, 0, 14, 0, 0, 0, 0, 12, 26 +"f:\Project\levilamina\1.7.x\CFSP\manifest.json", "JSON", 0, 0, 0, 7, 0, 0, 0, 0, 7 +"f:\Project\levilamina\1.7.x\CFSP\scripts\after_build.lua", "Lua", 0, 105, 0, 0, 0, 0, 1, 19, 125 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\CFSP.cpp", "C++", 0, 0, 0, 0, 22, 0, 1, 9, 32 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\CFSP.h", "C++", 0, 0, 0, 0, 15, 0, 6, 14, 35 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\Config.h", "C++", 0, 0, 0, 0, 28, 0, 0, 6, 34 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\MemoryOperators.cpp", "C++", 0, 0, 0, 0, 2, 0, 2, 3, 7 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\PermissionConfig.h", "C++", 0, 0, 0, 0, 70, 0, 0, 3, 73 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\Macros.h", "C++", 0, 0, 0, 0, 6, 0, 0, 2, 8 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\OperateResult.h", "C++", 0, 0, 0, 0, 44, 0, 0, 9, 53 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\Schedule.h", "C++", 0, 0, 0, 0, 17, 0, 0, 5, 22 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\Utils.cpp", "C++", 0, 0, 0, 0, 45, 0, 0, 6, 51 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\Utils.h", "C++", 0, 0, 0, 0, 9, 0, 0, 6, 15 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\CFSPFeatureFix.cpp", "C++", 0, 0, 0, 0, 122, 0, 10, 11, 143 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp", "C++", 0, 0, 0, 0, 8, 0, 0, 2, 10 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h", "C++", 0, 0, 0, 0, 16, 0, 0, 4, 20 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\CFSPHandItemFix.cpp", "C++", 0, 0, 0, 0, 53, 0, 0, 4, 57 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\SAPIFix.cpp", "C++", 0, 0, 0, 0, 54, 0, 34, 7, 95 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp", "C++", 0, 0, 0, 0, 30, 0, 0, 4, 34 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\group\CFSPGroup.h", "C++", 0, 0, 0, 0, 15, 0, 0, 4, 19 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\group\GroupData.h", "C++", 0, 0, 0, 0, 14, 0, 0, 2, 16 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\group\GroupPermission.h", "C++", 0, 0, 0, 0, 32, 0, 0, 0, 32 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp", "C++", 0, 0, 0, 0, 73, 0, 0, 3, 76 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp", "C++", 0, 0, 0, 0, 13, 0, 0, 2, 15 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h", "C++", 0, 0, 0, 0, 22, 0, 0, 5, 27 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp", "C++", 0, 0, 0, 0, 46, 0, 0, 3, 49 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp", "C++", 0, 0, 0, 0, 35, 0, 0, 3, 38 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp", "C++", 0, 0, 0, 0, 11, 0, 0, 3, 14 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp", "C++", 0, 0, 0, 0, 193, 0, 1, 12, 206 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp", "C++", 0, 0, 0, 0, 242, 0, 0, 26, 268 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPManager.h", "C++", 0, 0, 0, 0, 211, 0, 0, 24, 235 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp", "C++", 0, 0, 0, 0, 366, 0, 5, 15, 386 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp", "C++", 0, 0, 0, 0, 329, 0, 12, 28, 369 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp", "C++", 0, 0, 0, 0, 152, 0, 3, 22, 177 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h", "C++", 0, 0, 0, 0, 71, 0, 0, 13, 84 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerAction.cpp", "C++", 0, 0, 0, 0, 163, 0, 1, 7, 171 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp", "C++", 0, 0, 0, 0, 31, 0, 0, 7, 38 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp", "C++", 0, 0, 0, 0, 139, 0, 0, 7, 146 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp", "C++", 0, 0, 0, 0, 35, 0, 0, 2, 37 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp", "C++", 0, 0, 0, 0, 37, 0, 0, 3, 40 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h", "C++", 0, 0, 0, 0, 32, 0, 0, 1, 33 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp", "C++", 0, 0, 0, 0, 96, 0, 0, 4, 100 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h", "C++", 0, 0, 0, 0, 20, 0, 0, 2, 22 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp", "C++", 0, 0, 0, 0, 56, 0, 0, 4, 60 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp", "C++", 0, 0, 0, 0, 113, 0, 4, 9, 126 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\ComandManager.h", "C++", 0, 0, 0, 0, 19, 0, 1, 5, 25 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp", "C++", 0, 0, 0, 0, 588, 0, 15, 19, 622 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp", "C++", 0, 0, 0, 0, 41, 0, 3, 4, 48 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp", "C++", 0, 0, 0, 0, 625, 0, 16, 24, 665 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp", "C++", 0, 0, 0, 0, 193, 0, 0, 12, 205 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\gui\GuiManager.h", "C++", 0, 0, 0, 0, 156, 0, 0, 7, 163 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp", "C++", 0, 0, 0, 0, 936, 0, 0, 95, 1031 +"f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp", "C++", 0, 0, 0, 0, 1007, 0, 0, 97, 1104 +"f:\Project\levilamina\1.7.x\CFSP\src\lang\en_US.json", "JSON", 0, 0, 0, 314, 0, 0, 0, 0, 314 +"f:\Project\levilamina\1.7.x\CFSP\src\lang\zh_CN.json", "JSON", 0, 0, 0, 314, 0, 0, 0, 0, 314 +"f:\Project\levilamina\1.7.x\CFSP\tooth.json", "JSON", 0, 0, 0, 26, 0, 0, 0, 0, 26 +"f:\Project\levilamina\1.7.x\CFSP\xmake.lua", "XMake", 58, 0, 0, 0, 0, 0, 3, 8, 69 +"Total", "-", 58, 105, 280, 661, 6653, 174, 128, 848, 8907 \ No newline at end of file diff --git a/.VSCodeCounter/2025-12-25_13-48-15/results.json b/.VSCodeCounter/2025-12-25_13-48-15/results.json new file mode 100644 index 0000000..43602cd --- /dev/null +++ b/.VSCodeCounter/2025-12-25_13-48-15/results.json @@ -0,0 +1 @@ +{"file:///f%3A/Project/levilamina/1.7.x/CFSP/xmake.lua":{"language":"XMake","code":58,"comment":3,"blank":8},"file:///f%3A/Project/levilamina/1.7.x/CFSP/scripts/after_build.lua":{"language":"Lua","code":105,"comment":1,"blank":19},"file:///f%3A/Project/levilamina/1.7.x/CFSP/README.md":{"language":"Markdown","code":14,"comment":0,"blank":12},"file:///f%3A/Project/levilamina/1.7.x/CFSP/manifest.json":{"language":"JSON","code":7,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.7.x/CFSP/tooth.json":{"language":"JSON","code":26,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/lang/zh_CN.json":{"language":"JSON","code":314,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/CFSP.h":{"language":"C++","code":15,"comment":6,"blank":14},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/CFSP.cpp":{"language":"C++","code":22,"comment":1,"blank":9},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/PermissionConfig.h":{"language":"C++","code":70,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/lang/en_US.json":{"language":"JSON","code":314,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/base/Utils.h":{"language":"C++","code":9,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/MemoryOperators.cpp":{"language":"C++","code":2,"comment":2,"blank":3},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/base/Schedule.h":{"language":"C++","code":17,"comment":0,"blank":5},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/base/OperateResult.h":{"language":"C++","code":44,"comment":0,"blank":9},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/base/Macros.h":{"language":"C++","code":6,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/Config.h":{"language":"C++","code":28,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.7.x/CFSP/CHANGELOG_ZH.md":{"language":"Markdown","code":128,"comment":0,"blank":94},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/simPlayer/SimPlayerSaveData.h":{"language":"C++","code":20,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/base/Utils.cpp":{"language":"C++","code":45,"comment":0,"blank":6},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/simPlayer/SimPlayerPermission.h":{"language":"C++","code":32,"comment":0,"blank":1},"file:///f%3A/Project/levilamina/1.7.x/CFSP/CHANGELOG.md":{"language":"Markdown","code":128,"comment":0,"blank":95},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/simPlayer/SimPlayerStatus.cpp":{"language":"C++","code":56,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/simPlayer/SimPlayerSave.cpp":{"language":"C++","code":96,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/simPlayer/SimPlayerMove.cpp":{"language":"C++","code":37,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/simPlayer/SimPlayerAction.cpp":{"language":"C++","code":163,"comment":1,"blank":7},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/simPlayer/SimPlayer.h":{"language":"C++","code":71,"comment":0,"blank":13},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/simPlayer/SimPlayerMessage.cpp":{"language":"C++","code":35,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/manager/CFSPSpManager.cpp":{"language":"C++","code":329,"comment":12,"blank":28},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/manager/CFSPPermissionManager.cpp":{"language":"C++","code":366,"comment":5,"blank":15},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/manager/CFSPManager.h":{"language":"C++","code":211,"comment":0,"blank":24},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/simPlayer/SimPlayerInv.cpp":{"language":"C++","code":139,"comment":0,"blank":7},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/manager/CFSPGroupManager.cpp":{"language":"C++","code":193,"comment":1,"blank":12},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/simPlayer/SimPlayerBase.cpp":{"language":"C++","code":31,"comment":0,"blank":7},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/simPlayer/SimPlayer.cpp":{"language":"C++","code":152,"comment":3,"blank":22},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/helper/CFSPOperateHelper.cpp":{"language":"C++","code":46,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/helper/CFSPHelperManager.h":{"language":"C++","code":22,"comment":0,"blank":5},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/helper/CFSPHelperManager.cpp":{"language":"C++","code":13,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/helper/CFSPAutoFuncHelper.cpp":{"language":"C++","code":73,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/group/GroupPermission.h":{"language":"C++","code":32,"comment":0,"blank":0},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/group/GroupData.h":{"language":"C++","code":14,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/manager/CFSPManager.cpp":{"language":"C++","code":242,"comment":0,"blank":26},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/group/CFSPGroup.h":{"language":"C++","code":15,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/group/CFSPGroup.cpp":{"language":"C++","code":30,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/fix/CFSPHandItemFix.cpp":{"language":"C++","code":53,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/fix/CFSPFixManager.h":{"language":"C++","code":16,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/helper/CFSPSchduleHelper.cpp":{"language":"C++","code":11,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/helper/CFSPSaveHelper.cpp":{"language":"C++","code":35,"comment":0,"blank":3},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/fix/CFSPFixManager.cpp":{"language":"C++","code":8,"comment":0,"blank":2},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/fix/SAPIFix.cpp":{"language":"C++","code":54,"comment":34,"blank":7},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/core/fix/CFSPFeatureFix.cpp":{"language":"C++","code":122,"comment":10,"blank":11},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/entrance/command/ComandManager.h":{"language":"C++","code":19,"comment":1,"blank":5},"file:///f%3A/Project/levilamina/1.7.x/CFSP/.github/PULL_REQUEST_TEMPLATE.md":{"language":"Markdown","code":10,"comment":0,"blank":9},"file:///f%3A/Project/levilamina/1.7.x/CFSP/.github/workflows/release.yml":{"language":"YAML","code":68,"comment":0,"blank":17},"file:///f%3A/Project/levilamina/1.7.x/CFSP/.github/ISSUE_TEMPLATE/feature_request.yml":{"language":"YAML","code":25,"comment":0,"blank":4},"file:///f%3A/Project/levilamina/1.7.x/CFSP/.github/workflows/build.yml":{"language":"YAML","code":34,"comment":10,"blank":12},"file:///f%3A/Project/levilamina/1.7.x/CFSP/.github/ISSUE_TEMPLATE/bug_report.yml":{"language":"YAML","code":47,"comment":0,"blank":9},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/entrance/command/ComandManager.cpp":{"language":"C++","code":113,"comment":4,"blank":9},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/entrance/command/SpCommand.cpp":{"language":"C++","code":625,"comment":16,"blank":24},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/entrance/gui/OperateSpGui.cpp":{"language":"C++","code":1007,"comment":0,"blank":97},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/entrance/gui/OperateGroupGui.cpp":{"language":"C++","code":936,"comment":0,"blank":95},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/entrance/gui/GuiManager.h":{"language":"C++","code":156,"comment":0,"blank":7},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/entrance/command/GuiCommand.cpp":{"language":"C++","code":41,"comment":3,"blank":4},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/entrance/gui/GuiManager.cpp":{"language":"C++","code":193,"comment":0,"blank":12},"file:///f%3A/Project/levilamina/1.7.x/CFSP/src/cfsp/entrance/command/GroupCommand.cpp":{"language":"C++","code":588,"comment":15,"blank":19}} \ No newline at end of file diff --git a/.VSCodeCounter/2025-12-25_13-48-15/results.md b/.VSCodeCounter/2025-12-25_13-48-15/results.md new file mode 100644 index 0000000..9387107 --- /dev/null +++ b/.VSCodeCounter/2025-12-25_13-48-15/results.md @@ -0,0 +1,46 @@ +# Summary + +Date : 2025-12-25 13:48:15 + +Directory f:\\Project\\levilamina\\1.7.x\\CFSP + +Total : 64 files, 7931 codes, 128 comments, 848 blanks, all 8907 lines + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| C++ | 50 | 6,653 | 114 | 569 | 7,336 | +| JSON | 4 | 661 | 0 | 0 | 661 | +| Markdown | 4 | 280 | 0 | 210 | 490 | +| YAML | 4 | 174 | 10 | 42 | 226 | +| Lua | 1 | 105 | 1 | 19 | 125 | +| XMake | 1 | 58 | 3 | 8 | 69 | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| . | 64 | 7,931 | 128 | 848 | 8,907 | +| . (Files) | 6 | 361 | 3 | 209 | 573 | +| .github | 5 | 184 | 10 | 51 | 245 | +| .github (Files) | 1 | 10 | 0 | 9 | 19 | +| .github\\ISSUE_TEMPLATE | 2 | 72 | 0 | 13 | 85 | +| .github\\workflows | 2 | 102 | 10 | 29 | 141 | +| scripts | 1 | 105 | 1 | 19 | 125 | +| src | 52 | 7,281 | 114 | 569 | 7,964 | +| src\\cfsp | 50 | 6,653 | 114 | 569 | 7,336 | +| src\\cfsp (Files) | 5 | 137 | 9 | 35 | 181 | +| src\\cfsp\\base | 5 | 121 | 0 | 28 | 149 | +| src\\cfsp\\core | 31 | 2,717 | 66 | 234 | 3,017 | +| src\\cfsp\\core\\fix | 5 | 253 | 44 | 28 | 325 | +| src\\cfsp\\core\\group | 4 | 91 | 0 | 10 | 101 | +| src\\cfsp\\core\\helper | 6 | 200 | 0 | 19 | 219 | +| src\\cfsp\\core\\manager | 5 | 1,341 | 18 | 105 | 1,464 | +| src\\cfsp\\core\\simPlayer | 11 | 832 | 4 | 72 | 908 | +| src\\cfsp\\entrance | 9 | 3,678 | 39 | 272 | 3,989 | +| src\\cfsp\\entrance\\command | 5 | 1,386 | 39 | 61 | 1,486 | +| src\\cfsp\\entrance\\gui | 4 | 2,292 | 0 | 211 | 2,503 | +| src\\lang | 2 | 628 | 0 | 0 | 628 | + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2025-12-25_13-48-15/results.txt b/.VSCodeCounter/2025-12-25_13-48-15/results.txt new file mode 100644 index 0000000..6c5a5d8 --- /dev/null +++ b/.VSCodeCounter/2025-12-25_13-48-15/results.txt @@ -0,0 +1,113 @@ +Date : 2025-12-25 13:48:15 +Directory : f:\Project\levilamina\1.7.x\CFSP +Total : 64 files, 7931 codes, 128 comments, 848 blanks, all 8907 lines + +Languages ++----------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++----------+------------+------------+------------+------------+------------+ +| C++ | 50 | 6,653 | 114 | 569 | 7,336 | +| JSON | 4 | 661 | 0 | 0 | 661 | +| Markdown | 4 | 280 | 0 | 210 | 490 | +| YAML | 4 | 174 | 10 | 42 | 226 | +| Lua | 1 | 105 | 1 | 19 | 125 | +| XMake | 1 | 58 | 3 | 8 | 69 | ++----------+------------+------------+------------+------------+------------+ + +Directories ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| . | 64 | 7,931 | 128 | 848 | 8,907 | +| . (Files) | 6 | 361 | 3 | 209 | 573 | +| .github | 5 | 184 | 10 | 51 | 245 | +| .github (Files) | 1 | 10 | 0 | 9 | 19 | +| .github\ISSUE_TEMPLATE | 2 | 72 | 0 | 13 | 85 | +| .github\workflows | 2 | 102 | 10 | 29 | 141 | +| scripts | 1 | 105 | 1 | 19 | 125 | +| src | 52 | 7,281 | 114 | 569 | 7,964 | +| src\cfsp | 50 | 6,653 | 114 | 569 | 7,336 | +| src\cfsp (Files) | 5 | 137 | 9 | 35 | 181 | +| src\cfsp\base | 5 | 121 | 0 | 28 | 149 | +| src\cfsp\core | 31 | 2,717 | 66 | 234 | 3,017 | +| src\cfsp\core\fix | 5 | 253 | 44 | 28 | 325 | +| src\cfsp\core\group | 4 | 91 | 0 | 10 | 101 | +| src\cfsp\core\helper | 6 | 200 | 0 | 19 | 219 | +| src\cfsp\core\manager | 5 | 1,341 | 18 | 105 | 1,464 | +| src\cfsp\core\simPlayer | 11 | 832 | 4 | 72 | 908 | +| src\cfsp\entrance | 9 | 3,678 | 39 | 272 | 3,989 | +| src\cfsp\entrance\command | 5 | 1,386 | 39 | 61 | 1,486 | +| src\cfsp\entrance\gui | 4 | 2,292 | 0 | 211 | 2,503 | +| src\lang | 2 | 628 | 0 | 0 | 628 | ++----------------------------------------------------------------------------------+------------+------------+------------+------------+------------+ + +Files ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ +| f:\Project\levilamina\1.7.x\CFSP\.github\ISSUE_TEMPLATE\bug_report.yml | YAML | 47 | 0 | 9 | 56 | +| f:\Project\levilamina\1.7.x\CFSP\.github\ISSUE_TEMPLATE\feature_request.yml | YAML | 25 | 0 | 4 | 29 | +| f:\Project\levilamina\1.7.x\CFSP\.github\PULL_REQUEST_TEMPLATE.md | Markdown | 10 | 0 | 9 | 19 | +| f:\Project\levilamina\1.7.x\CFSP\.github\workflows\build.yml | YAML | 34 | 10 | 12 | 56 | +| f:\Project\levilamina\1.7.x\CFSP\.github\workflows\release.yml | YAML | 68 | 0 | 17 | 85 | +| f:\Project\levilamina\1.7.x\CFSP\CHANGELOG.md | Markdown | 128 | 0 | 95 | 223 | +| f:\Project\levilamina\1.7.x\CFSP\CHANGELOG_ZH.md | Markdown | 128 | 0 | 94 | 222 | +| f:\Project\levilamina\1.7.x\CFSP\README.md | Markdown | 14 | 0 | 12 | 26 | +| f:\Project\levilamina\1.7.x\CFSP\manifest.json | JSON | 7 | 0 | 0 | 7 | +| f:\Project\levilamina\1.7.x\CFSP\scripts\after_build.lua | Lua | 105 | 1 | 19 | 125 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\CFSP.cpp | C++ | 22 | 1 | 9 | 32 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\CFSP.h | C++ | 15 | 6 | 14 | 35 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\Config.h | C++ | 28 | 0 | 6 | 34 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\MemoryOperators.cpp | C++ | 2 | 2 | 3 | 7 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\PermissionConfig.h | C++ | 70 | 0 | 3 | 73 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\Macros.h | C++ | 6 | 0 | 2 | 8 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\OperateResult.h | C++ | 44 | 0 | 9 | 53 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\Schedule.h | C++ | 17 | 0 | 5 | 22 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\Utils.cpp | C++ | 45 | 0 | 6 | 51 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\base\Utils.h | C++ | 9 | 0 | 6 | 15 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\CFSPFeatureFix.cpp | C++ | 122 | 10 | 11 | 143 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\CFSPFixManager.cpp | C++ | 8 | 0 | 2 | 10 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\CFSPFixManager.h | C++ | 16 | 0 | 4 | 20 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\CFSPHandItemFix.cpp | C++ | 53 | 0 | 4 | 57 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\fix\SAPIFix.cpp | C++ | 54 | 34 | 7 | 95 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\group\CFSPGroup.cpp | C++ | 30 | 0 | 4 | 34 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\group\CFSPGroup.h | C++ | 15 | 0 | 4 | 19 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\group\GroupData.h | C++ | 14 | 0 | 2 | 16 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\group\GroupPermission.h | C++ | 32 | 0 | 0 | 32 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPAutoFuncHelper.cpp | C++ | 73 | 0 | 3 | 76 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.cpp | C++ | 13 | 0 | 2 | 15 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPHelperManager.h | C++ | 22 | 0 | 5 | 27 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPOperateHelper.cpp | C++ | 46 | 0 | 3 | 49 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPSaveHelper.cpp | C++ | 35 | 0 | 3 | 38 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\helper\CFSPSchduleHelper.cpp | C++ | 11 | 0 | 3 | 14 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPGroupManager.cpp | C++ | 193 | 1 | 12 | 206 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPManager.cpp | C++ | 242 | 0 | 26 | 268 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPManager.h | C++ | 211 | 0 | 24 | 235 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPPermissionManager.cpp | C++ | 366 | 5 | 15 | 386 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\manager\CFSPSpManager.cpp | C++ | 329 | 12 | 28 | 369 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.cpp | C++ | 152 | 3 | 22 | 177 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayer.h | C++ | 71 | 0 | 13 | 84 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerAction.cpp | C++ | 163 | 1 | 7 | 171 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerBase.cpp | C++ | 31 | 0 | 7 | 38 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerInv.cpp | C++ | 139 | 0 | 7 | 146 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMessage.cpp | C++ | 35 | 0 | 2 | 37 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerMove.cpp | C++ | 37 | 0 | 3 | 40 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerPermission.h | C++ | 32 | 0 | 1 | 33 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSave.cpp | C++ | 96 | 0 | 4 | 100 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerSaveData.h | C++ | 20 | 0 | 2 | 22 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\core\simPlayer\SimPlayerStatus.cpp | C++ | 56 | 0 | 4 | 60 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\ComandManager.cpp | C++ | 113 | 4 | 9 | 126 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\ComandManager.h | C++ | 19 | 1 | 5 | 25 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\GroupCommand.cpp | C++ | 588 | 15 | 19 | 622 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\GuiCommand.cpp | C++ | 41 | 3 | 4 | 48 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\command\SpCommand.cpp | C++ | 625 | 16 | 24 | 665 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\gui\GuiManager.cpp | C++ | 193 | 0 | 12 | 205 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\gui\GuiManager.h | C++ | 156 | 0 | 7 | 163 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\gui\OperateGroupGui.cpp | C++ | 936 | 0 | 95 | 1,031 | +| f:\Project\levilamina\1.7.x\CFSP\src\cfsp\entrance\gui\OperateSpGui.cpp | C++ | 1,007 | 0 | 97 | 1,104 | +| f:\Project\levilamina\1.7.x\CFSP\src\lang\en_US.json | JSON | 314 | 0 | 0 | 314 | +| f:\Project\levilamina\1.7.x\CFSP\src\lang\zh_CN.json | JSON | 314 | 0 | 0 | 314 | +| f:\Project\levilamina\1.7.x\CFSP\tooth.json | JSON | 26 | 0 | 0 | 26 | +| f:\Project\levilamina\1.7.x\CFSP\xmake.lua | XMake | 58 | 3 | 8 | 69 | +| Total | | 7,931 | 128 | 848 | 8,907 | ++----------------------------------------------------------------------------------+----------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index bad0076..58ad2d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,90 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.3.1] - 2025-12.25 + +### Fixed + ++ Resolved known compatibility issues with the SAPI + +## [3.3.0] - 2025-11.14 + +### Added + ++ Adapt to 1.21.120 + +## [3.2.3] - 2025-11-1 + +### Added + ++ added times&interval params for drop/dropinv operate + +### Fixed + ++ fixed a issue where system incorrectly warned about non-empty inventory when deleting simulatedPlayer, even when their inventory was actually empty + + +## [3.2.2] -2025-10-19 + +### Added + ++ Added "all" parameter for all authorization operations to grant all permissions + +### Fixed + ++ Fixed bug with group authorization operations ++ Fixed bug where authorization results were not saved when using authorization operations on offline simulatedPlayer + +## [3.2.1] - 2025-10.5 + +### Added + ++ add en-US lang file + +### Fixed + ++ fix the bug that simulatedPlayer can't change it's body rotation when use lookat + +## [3.2.0] - 2025-10.4 + +### Added + ++ Adapt to 1.21.111 + +## [3.1.0] - 2025-9-26 + +### Added + ++ Adapt to 1.21.102 + +## [3.0.0] - 2025-9-26 + +### Added + ++ Project refactoring ++ Updated the permission system for simulatedPlayer/simulatedPlayer groups. All simulatedPlayer functions now have independent permissions, and public permissions can be configured. + +### Changed + ++ SimulatedPlayer no longer lock the camera view when moving (but navigate still does) ++ Added a speed parameter to simulatedPlayer move/navigate to adjust bot movement speed ++ SimulatedPlayer actions can now be performed continuously by setting the times or long parameter to 0 ++ SimulatedPlayer data is now saved using JSON and NBT, allowing direct viewing of simulatedPlayer data in the data folder under the plugin directory + +### Removed + ++ Temporarily removed the simulatedPlayer script system + +### Fixed + ++ Fixed an issue where simulatedPlayer data could be lost randomly + +## [2.7.0] - 2025-8-26 + +### Added + ++ Adapt to 1.21.93 + ## [2.6.0] - 2025-7-26 ### Added diff --git a/CHANGELOG_ZH.md b/CHANGELOG_ZH.md index c6beb80..10b89e3 100644 --- a/CHANGELOG_ZH.md +++ b/CHANGELOG_ZH.md @@ -5,7 +5,84 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [2.7.0] - 2025-7-26 +## [3.3.1] - 2025-12.25 + +### Fixed + ++ Resolved known compatibility issues with the SAPI. + +## [3.3.0] - 2025-11.14 + +### Added + ++ 适配1.21.120 + +## [3.2.3] - 2025-11-1 + +### Added + ++ 为假人drop/dropinv操作添加times与interval参数 + +### Fixed + ++ 修复了删除假人时即便假人背包为空依旧提示假人背包不为空的问题 + +## [3.2.2] - 2025-10-19 + +### Added + ++ 为所有授权操作添加"all"参数,用于授权全部权限 + +### Fixed + ++ 修复假人组授权操作的bug ++ 修复了对不在线的假人使用授权操作时授权的结果没有保存的bug + +## [3.2.1] - 2025-10.5 + +### Added + ++ 添加en-US语言文件 + +### Fixed + ++ 修复了假人在lookat时无法转身的bug + +## [3.2.0] - 2025-10.4 + +### Added + ++ 适配1.21.111 + +## [3.1.0] - 2025-9-26 + +### Added + ++ 适配1.21.102 + +## [3.0.0] - 2025-9-26 + +### Added + ++ 项目重构 ++ 更新假人/假人组权限系统,现在假人所有的功能都有独立的权限,且可以设置公共权限 + +### Changed + ++ 假人移动时不再锁定视角(但是寻路仍会) ++ 假人移动/寻路新增参数speed,可以调节假人的移动速度 ++ 假人执行操作现在可以进行持续操作,需将需要的参数times或long设置为0 ++ 现在假人数据使用json与nbt进行保存,可以直接在插件目录的data文件夹下直接查看假人数据 + +### Removed + ++ 暂时移除假人脚本系统 + +### Fixed + ++ 修复了假人数据概率丢失的问题 + +## [2.7.0] - 2025-8-26 ### Added diff --git a/src/cfsp/CFSP.cpp b/src/cfsp/CFSP.cpp index 37b5229..791c863 100644 --- a/src/cfsp/CFSP.cpp +++ b/src/cfsp/CFSP.cpp @@ -1,10 +1,6 @@ #include "cfsp/CFSP.h" -#include "cfsp/base/Mod.h" -#include "cfsp/commands/Command.h" -#include "cfsp/fix/FeatureFix.h" -#include "cfsp/simplayer/CFSP.h" -#include "cfsp/simplayer/Hooks.h" -#include "ll/api/Config.h" +#include "cfsp/core/helper/CFSPHelperManager.h" +#include "cfsp/core/manager/CFSPManager.h" #include "ll/api/i18n/I18n.h" #include "ll/api/mod/RegisterHelper.h" @@ -17,50 +13,18 @@ CFSP& CFSP::getInstance() { } bool CFSP::load() { - const auto& logger = getSelf().getLogger(); - auto& mod = coral_fans::cfsp::mod(); - - // load config - try { - const auto& configFilePath = getSelf().getConfigDir() / "config.json"; - if (!ll::config::loadConfig(mod.getConfig(), configFilePath)) { - logger.warn("Cannot load configurations from {}", configFilePath); - logger.info("Saving default configurations"); - if (!ll::config::saveConfig(mod.getConfig(), configFilePath)) { - logger.error("Cannot save default configurations to {}", configFilePath); - return false; - } - } - } catch (...) { - logger.error("Failed to load config.json. Please check the file!"); - return false; - } - + if (!manager::CFSPManager::getInstance().init()) return false; // load i18n - logger.debug("Loading I18n"); - if (!ll::i18n::getInstance().load(getSelf().getLangDir())) logger.error("Failed to load I18n"); + if (!ll::i18n::getInstance().load(getSelf().getLangDir())) getSelf().getLogger().error("Failed to load I18n"); return true; } bool CFSP::enable() { - auto& mod = coral_fans::cfsp::mod(); - - hookSimPlayer(true); - fix::featureFix(true); - - if (mod.getConfig().command.sp.enabled) commands::registerSpCommand(mod.getConfig().command.sp.permission); - - // load simplayer data - SimPlayerManager::getInstance().load(); - + manager::CFSPManager::getInstance().load(); return true; } -bool CFSP::disable() { - hookSimPlayer(false); - fix::featureFix(false); - return true; -} +bool CFSP::disable() { return true; } } // namespace coral_fans::cfsp diff --git a/src/cfsp/CFSP.h b/src/cfsp/CFSP.h index eb3911d..6469989 100644 --- a/src/cfsp/CFSP.h +++ b/src/cfsp/CFSP.h @@ -2,6 +2,7 @@ #include "ll/api/mod/NativeMod.h" + namespace coral_fans::cfsp { class CFSP { diff --git a/src/cfsp/Config.h b/src/cfsp/Config.h index e8cbb0c..4c0469e 100644 --- a/src/cfsp/Config.h +++ b/src/cfsp/Config.h @@ -6,26 +6,22 @@ namespace coral_fans::cfsp::config { -struct CommandConfigStruct { - bool enabled; - CommandPermissionLevel permission; -}; - -struct CommandStruct { - CommandConfigStruct sp = {true, CommandPermissionLevel::Any}; -}; enum class ListType : int { disabled, blacklist, whitelist }; -struct SimPlayerStruct { +struct Config { + int version = 3; + bool enabled = true; + CommandPermissionLevel permission = CommandPermissionLevel::Any; std::string namePrefix = "SIM-"; std::string namePostfix = ""; - bool allowTp = false; + bool autoRespawn = true; + bool autoJoin = true; + bool autoDespawn = true; unsigned long long maxOnline = 16; unsigned long long maxOwn = 10; unsigned long long maxOnlinePerPlayer = 3; unsigned long long maxGroup = 5; - unsigned long long maxSpawnCount = 128; unsigned long long autoDespawnCount = 3; unsigned long long autoDespawninterval = 600; CommandPermissionLevel adminPermission = CommandPermissionLevel::GameDirectors; @@ -35,13 +31,4 @@ struct SimPlayerStruct { std::string luaPreload = ""; }; -struct Config { - int version = 2; - std::string locateName = "zh_CN"; - - SimPlayerStruct simPlayer; - - CommandStruct command; -}; - } // namespace coral_fans::cfsp::config \ No newline at end of file diff --git a/src/cfsp/PermissionConfig.h b/src/cfsp/PermissionConfig.h new file mode 100644 index 0000000..4a600f5 --- /dev/null +++ b/src/cfsp/PermissionConfig.h @@ -0,0 +1,73 @@ +#pragma once + +#include "mc/server/commands/CommandPermissionLevel.h" + +namespace coral_fans::cfsp::config { +struct FuncStruct { + bool enabled; + CommandPermissionLevel permission; +}; + +struct PermissionConfig { + int version = 1; + FuncStruct gui = {true, CommandPermissionLevel::Any}; + FuncStruct spCreate = {true, CommandPermissionLevel::Any}; + FuncStruct spSpawn = {true, CommandPermissionLevel::Any}; + FuncStruct spDespawn = {true, CommandPermissionLevel::Any}; + FuncStruct spRespawn = {true, CommandPermissionLevel::Any}; + FuncStruct spDelete = {true, CommandPermissionLevel::Any}; + FuncStruct spStop = {true, CommandPermissionLevel::Any}; + FuncStruct spDrop = {true, CommandPermissionLevel::Any}; + FuncStruct spDropInv = {true, CommandPermissionLevel::Any}; + FuncStruct spSwap = {true, CommandPermissionLevel::Any}; + FuncStruct spSneaking = {true, CommandPermissionLevel::Any}; + FuncStruct spSwimming = {true, CommandPermissionLevel::Any}; + FuncStruct spFlying = {true, CommandPermissionLevel::Any}; + FuncStruct spSprinting = {true, CommandPermissionLevel::Any}; + FuncStruct spAttack = {true, CommandPermissionLevel::Any}; + FuncStruct spBuild = {true, CommandPermissionLevel::Any}; + FuncStruct spInteract = {true, CommandPermissionLevel::Any}; + FuncStruct spJump = {true, CommandPermissionLevel::Any}; + FuncStruct spUse = {true, CommandPermissionLevel::Any}; + FuncStruct spDestroy = {true, CommandPermissionLevel::Any}; + FuncStruct spChat = {true, CommandPermissionLevel::Any}; + FuncStruct spRunCmd = {true, CommandPermissionLevel::Any}; + FuncStruct spSelect = {true, CommandPermissionLevel::Any}; + FuncStruct spLookAt = {true, CommandPermissionLevel::Any}; + FuncStruct spMoveTo = {true, CommandPermissionLevel::Any}; + FuncStruct spNavTo = {true, CommandPermissionLevel::Any}; + FuncStruct spTp = {true, CommandPermissionLevel::Any}; + FuncStruct spPerm = {true, CommandPermissionLevel::Any}; + FuncStruct spPublicPerm = {true, CommandPermissionLevel::Any}; + FuncStruct groupCreate = {true, CommandPermissionLevel::Any}; + FuncStruct groupDelete = {true, CommandPermissionLevel::Any}; + FuncStruct groupAddSp = {true, CommandPermissionLevel::Any}; + FuncStruct groupRmSp = {true, CommandPermissionLevel::Any}; + FuncStruct groupSpawn = {true, CommandPermissionLevel::Any}; + FuncStruct groupDespawn = {true, CommandPermissionLevel::Any}; + FuncStruct groupRespawn = {true, CommandPermissionLevel::Any}; + FuncStruct groupDeleteSp = {true, CommandPermissionLevel::Any}; + FuncStruct groupStop = {true, CommandPermissionLevel::Any}; + FuncStruct groupDrop = {true, CommandPermissionLevel::Any}; + FuncStruct groupDropInv = {true, CommandPermissionLevel::Any}; + FuncStruct groupSneaking = {true, CommandPermissionLevel::Any}; + FuncStruct groupSwimming = {true, CommandPermissionLevel::Any}; + FuncStruct groupFlying = {true, CommandPermissionLevel::Any}; + FuncStruct groupSprinting = {true, CommandPermissionLevel::Any}; + FuncStruct groupAttack = {true, CommandPermissionLevel::Any}; + FuncStruct groupBuild = {true, CommandPermissionLevel::Any}; + FuncStruct groupInteract = {true, CommandPermissionLevel::Any}; + FuncStruct groupJump = {true, CommandPermissionLevel::Any}; + FuncStruct groupUse = {true, CommandPermissionLevel::Any}; + FuncStruct groupDestroy = {true, CommandPermissionLevel::Any}; + FuncStruct groupChat = {true, CommandPermissionLevel::Any}; + FuncStruct groupRunCmd = {true, CommandPermissionLevel::Any}; + FuncStruct groupLookAt = {true, CommandPermissionLevel::Any}; + FuncStruct groupMoveTo = {true, CommandPermissionLevel::Any}; + FuncStruct groupNavTo = {true, CommandPermissionLevel::Any}; + FuncStruct groupTp = {true, CommandPermissionLevel::Any}; + FuncStruct groupSelect = {true, CommandPermissionLevel::Any}; + FuncStruct groupPerm = {true, CommandPermissionLevel::Any}; + FuncStruct groupPublicPerm = {true, CommandPermissionLevel::Any}; +}; +} // namespace coral_fans::cfsp::config \ No newline at end of file diff --git a/src/cfsp/base/Macros.h b/src/cfsp/base/Macros.h index 08870e6..694ed15 100644 --- a/src/cfsp/base/Macros.h +++ b/src/cfsp/base/Macros.h @@ -1,261 +1,7 @@ #pragma once -#define COMMAND_CHECK_PLAYER \ - auto* entity = origin.getEntity(); \ - if (entity == nullptr || !entity->isType(ActorType::Player)) { \ - output.error("command.sp.error.onlyplayer"_tr()); \ - return; \ - } \ - auto* player = static_cast(entity); - -#define COMMAND_SIMPLAYER_CHECKPERMLIST \ - if (player) { \ - auto& mod = coral_fans::cfsp::mod(); \ - auto uuid = player->getUuid().asString(); \ - switch (mod.getConfig().simPlayer.listType) { \ - case coral_fans::cfsp::config::ListType::disabled: \ - break; \ - case coral_fans::cfsp::config::ListType::blacklist: \ - if (mod.getConfig().simPlayer.list.find(uuid) != mod.getConfig().simPlayer.list.end()) \ - return output.error("command.sp.error.permissiondenied"_tr()); \ - break; \ - case coral_fans::cfsp::config::ListType::whitelist: \ - if (mod.getConfig().simPlayer.list.find(uuid) == mod.getConfig().simPlayer.list.end()) \ - return output.error("command.sp.error.permissiondenied"_tr()); \ - break; \ - } \ - } - #ifdef CFSPEXP #define CFSP_API __declspec(dllexport) #else #define CFSP_API __declspec(dllimport) #endif - -// SimPlayer reg def -#define SP_REG_DEF(NAME, ...) \ - CFSP_API std::pair simPlayer##NAME(Player*, std::string const&, bool, __VA_ARGS__); \ - CFSP_API std::pair group##NAME(Player*, std::string const&, __VA_ARGS__); - -// SimPlayer def with arg -#define SP_DEF_WA(NAME, ACTION, ARG_TYPE) \ - std::pair \ - SimPlayerManager::simPlayer##NAME(Player* player, std::string const& spname, bool noCheck, ARG_TYPE arg) { \ - using ll::i18n_literals::operator""_tr; \ - auto uuid = player->getUuid().asString(); \ - auto it = this->mNameSimPlayerMap.find(spname); \ - if (it == this->mNameSimPlayerMap.end()) return {"translate.simplayer.error.notfound"_tr(), false}; \ - if (noCheck \ - || player->getCommandPermissionLevel() >= coral_fans::cfsp::mod().getConfig().simPlayer.adminPermission \ - || mod().getConfig().simPlayer.superManagerList.contains(*player->mName) \ - || uuid == it->second->ownerUuid) { \ - if (it->second->status != SimPlayerStatus::Alive) \ - return {"translate.simplayer.error.statuserror"_tr(), false}; \ - if (it->second->simPlayer) it->second->ACTION(arg); \ - return {"translate.simplayer.success"_tr(), true}; \ - } \ - return {"translate.simplayer.error.permissiondenied"_tr(), false}; \ - } \ - std::pair SimPlayerManager::group##NAME( \ - Player* player, \ - std::string const& gname, \ - ARG_TYPE arg \ - ) { \ - using ll::i18n_literals::operator""_tr; \ - auto it = this->mGroupMap.find(gname); \ - if (it == this->mGroupMap.end()) return {"translate.simplayer.error.notfound"_tr(), false}; \ - auto const& UUID = player->getUuid().asString(); \ - if (player->getCommandPermissionLevel() < mod().getConfig().simPlayer.adminPermission \ - && !mod().getConfig().simPlayer.superManagerList.contains(*player->mName) && it->second->owner != UUID \ - && it->second->admin.find(UUID) == it->second->admin.end()) \ - return {"translate.simplayer.error.permissiondenied"_tr(), false}; \ - for (auto const& v : it->second->splist) this->simPlayer##NAME(player, v, true, arg); \ - return {"translate.simplayer.success"_tr(), true}; \ - } - -// SimPlayer def with two arg -#define SP_DEF_WA2(NAME, ACTION, ARG_TYPE1, ARG_TYPE2) \ - std::pair SimPlayerManager::simPlayer##NAME( \ - Player* player, \ - std::string const& spname, \ - bool noCheck, \ - ARG_TYPE1 arg1, \ - ARG_TYPE2 arg2 \ - ) { \ - using ll::i18n_literals::operator""_tr; \ - auto uuid = player->getUuid().asString(); \ - auto it = this->mNameSimPlayerMap.find(spname); \ - if (it == this->mNameSimPlayerMap.end()) return {"translate.simplayer.error.notfound"_tr(), false}; \ - if (noCheck \ - || player->getCommandPermissionLevel() >= coral_fans::cfsp::mod().getConfig().simPlayer.adminPermission \ - || mod().getConfig().simPlayer.superManagerList.contains(*player->mName) \ - || uuid == it->second->ownerUuid) { \ - if (it->second->status != SimPlayerStatus::Alive) \ - return {"translate.simplayer.error.statuserror"_tr(), false}; \ - if (it->second->simPlayer) it->second->ACTION(arg1, arg2); \ - return {"translate.simplayer.success"_tr(), true}; \ - } \ - return {"translate.simplayer.error.permissiondenied"_tr(), false}; \ - } \ - std::pair \ - SimPlayerManager::group##NAME(Player* player, std::string const& gname, ARG_TYPE1 arg1, ARG_TYPE2 arg2) { \ - using ll::i18n_literals::operator""_tr; \ - auto it = this->mGroupMap.find(gname); \ - if (it == this->mGroupMap.end()) return {"translate.simplayer.error.notfound"_tr(), false}; \ - auto const& UUID = player->getUuid().asString(); \ - if (player->getCommandPermissionLevel() < mod().getConfig().simPlayer.adminPermission \ - && !mod().getConfig().simPlayer.superManagerList.contains(*player->mName) && it->second->owner != UUID \ - && it->second->admin.find(UUID) == it->second->admin.end()) \ - return {"translate.simplayer.error.permissiondenied"_tr(), false}; \ - for (auto const& v : it->second->splist) this->simPlayer##NAME(player, v, true, arg1, arg2); \ - return {"translate.simplayer.success"_tr(), true}; \ - } - -// SimPlayer def -#define SP_DEF(NAME, ACTION) \ - std::pair SimPlayerManager::simPlayer##NAME( \ - Player* player, \ - std::string const& spname, \ - bool noCheck \ - ) { \ - using ll::i18n_literals::operator""_tr; \ - auto uuid = player->getUuid().asString(); \ - auto it = this->mNameSimPlayerMap.find(spname); \ - if (it == this->mNameSimPlayerMap.end()) return {"translate.simplayer.error.notfound"_tr(), false}; \ - if (noCheck \ - || player->getCommandPermissionLevel() >= coral_fans::cfsp::mod().getConfig().simPlayer.adminPermission \ - || mod().getConfig().simPlayer.superManagerList.contains(*player->mName) \ - || uuid == it->second->ownerUuid) { \ - if (it->second->status != SimPlayerStatus::Alive) \ - return {"translate.simplayer.error.statuserror"_tr(), false}; \ - if (it->second->simPlayer) it->second->ACTION(); \ - return {"translate.simplayer.success"_tr(), true}; \ - } \ - return {"translate.simplayer.error.permissiondenied"_tr(), false}; \ - } \ - std::pair SimPlayerManager::group##NAME(Player* player, std::string const& gname) { \ - using ll::i18n_literals::operator""_tr; \ - auto it = this->mGroupMap.find(gname); \ - if (it == this->mGroupMap.end()) return {"translate.simplayer.error.notfound"_tr(), false}; \ - auto const& UUID = player->getUuid().asString(); \ - if (player->getCommandPermissionLevel() < mod().getConfig().simPlayer.adminPermission \ - && !mod().getConfig().simPlayer.superManagerList.contains(*player->mName) && it->second->owner != UUID \ - && it->second->admin.find(UUID) == it->second->admin.end()) \ - return {"translate.simplayer.error.permissiondenied"_tr(), false}; \ - for (auto const& v : it->second->splist) this->simPlayer##NAME(player, v, true); \ - return {"translate.simplayer.success"_tr(), true}; \ - } - -// SimPlayer def task with arg -#define SP_DEF_TASK_WA(NAME, ACTION, ARG_TYPE) \ - std::pair SimPlayerManager::simPlayer##NAME( \ - Player* player, \ - std::string const& spname, \ - bool noCheck, \ - ARG_TYPE arg, \ - int interval, \ - int times \ - ) { \ - using ll::i18n_literals::operator""_tr; \ - auto uuid = player->getUuid().asString(); \ - auto it = this->mNameSimPlayerMap.find(spname); \ - if (it == this->mNameSimPlayerMap.end()) return {"translate.simplayer.error.notfound"_tr(), false}; \ - if (noCheck \ - || player->getCommandPermissionLevel() >= coral_fans::cfsp::mod().getConfig().simPlayer.adminPermission \ - || mod().getConfig().simPlayer.superManagerList.contains(*player->mName) \ - || uuid == it->second->ownerUuid) { \ - if (it->second->status != SimPlayerStatus::Alive) \ - return {"translate.simplayer.error.statuserror"_tr(), false}; \ - if (!it->second->isFree()) return {"translate.simplayer.error.nonfree"_tr(), false}; \ - if (it->second->simPlayer) it->second->ACTION(arg); \ - if (interval >= 1) { \ - it->second->taskid = \ - this->mScheduler->add(interval, [times, sp = it->second, arg](unsigned long long t) mutable { \ - if (times > 0 && t > (unsigned long long)times - 1) return false; \ - if (sp->simPlayer) [[likely]] { \ - sp->ACTION(arg); \ - return true; \ - } \ - return false; \ - }); \ - } else return {"translate.simplayer.error.nonpositive"_tr(), false}; \ - return {"translate.simplayer.success"_tr(), true}; \ - } \ - return {"translate.simplayer.error.permissiondenied"_tr(), false}; \ - } \ - std::pair SimPlayerManager::group##NAME( \ - Player* player, \ - std::string const& gname, \ - ARG_TYPE arg, \ - int interval, \ - int times \ - ) { \ - using ll::i18n_literals::operator""_tr; \ - auto it = this->mGroupMap.find(gname); \ - if (it == this->mGroupMap.end()) return {"translate.simplayer.error.notfound"_tr(), false}; \ - auto const& UUID = player->getUuid().asString(); \ - if (player->getCommandPermissionLevel() < mod().getConfig().simPlayer.adminPermission \ - && !mod().getConfig().simPlayer.superManagerList.contains(*player->mName) && it->second->owner != UUID \ - && it->second->admin.find(UUID) == it->second->admin.end()) \ - return {"translate.simplayer.error.permissiondenied"_tr(), false}; \ - for (auto const& v : it->second->splist) this->simPlayer##NAME(player, v, true, arg, interval, times); \ - return {"translate.simplayer.success"_tr(), true}; \ - } - -// SimPlayer def task -#define SP_DEF_TASK(NAME, ACTION) \ - std::pair SimPlayerManager::simPlayer##NAME( \ - Player* player, \ - std::string const& spname, \ - bool noCheck, \ - int interval, \ - int times \ - ) { \ - using ll::i18n_literals::operator""_tr; \ - auto uuid = player->getUuid().asString(); \ - auto it = this->mNameSimPlayerMap.find(spname); \ - if (it == this->mNameSimPlayerMap.end()) return {"translate.simplayer.error.notfound"_tr(), false}; \ - if (noCheck \ - || player->getCommandPermissionLevel() >= coral_fans::cfsp::mod().getConfig().simPlayer.adminPermission \ - || mod().getConfig().simPlayer.superManagerList.contains(*player->mName) \ - || uuid == it->second->ownerUuid) { \ - if (it->second->status != SimPlayerStatus::Alive) \ - return {"translate.simplayer.error.statuserror"_tr(), false}; \ - if (!it->second->isFree()) return {"translate.simplayer.error.nonfree"_tr(), false}; \ - if (it->second->simPlayer) it->second->ACTION(); \ - if (interval >= 1) { \ - it->second->taskid = \ - this->mScheduler->add(interval, [times, sp = it->second](unsigned long long t) mutable { \ - if (times > 0 && t > (unsigned long long)times - 1) return false; \ - if (sp->simPlayer) [[likely]] { \ - sp->ACTION(); \ - return true; \ - } \ - return false; \ - }); \ - } else return {"translate.simplayer.error.nonpositive"_tr(), false}; \ - return {"translate.simplayer.success"_tr(), true}; \ - } \ - return {"translate.simplayer.error.permissiondenied"_tr(), false}; \ - } \ - std::pair \ - SimPlayerManager::group##NAME(Player* player, std::string const& gname, int interval, int times) { \ - using ll::i18n_literals::operator""_tr; \ - auto it = this->mGroupMap.find(gname); \ - if (it == this->mGroupMap.end()) return {"translate.simplayer.error.notfound"_tr(), false}; \ - auto const& UUID = player->getUuid().asString(); \ - if (player->getCommandPermissionLevel() < mod().getConfig().simPlayer.adminPermission \ - && !mod().getConfig().simPlayer.superManagerList.contains(*player->mName) && it->second->owner != UUID \ - && it->second->admin.find(UUID) == it->second->admin.end()) \ - return {"translate.simplayer.error.permissiondenied"_tr(), false}; \ - for (auto const& v : it->second->splist) this->simPlayer##NAME(player, v, true, interval, times); \ - return {"translate.simplayer.success"_tr(), true}; \ - } - -#define LUAAPI(name) int lua_api_##name(lua_State* L) - -#define LUA_ARG_COUNT_CHECK_C(i) \ - if (lua_gettop(L) != (i)) return luaL_error(L, "%d args expected", (i)); - -#define LUA_ARG_COUNT_CHECK_M(i) \ - if (lua_gettop(L) != (i) + 1) return luaL_error(L, "%d args expected (without \"self\")", (i)); diff --git a/src/cfsp/base/Mod.cpp b/src/cfsp/base/Mod.cpp deleted file mode 100644 index 2e558ae..0000000 --- a/src/cfsp/base/Mod.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "cfsp/base/Mod.h" - -namespace coral_fans::cfsp { - -CFSPMod& mod() { - static CFSPMod mod; - return mod; -} - -} // namespace coral_fans::cfsp \ No newline at end of file diff --git a/src/cfsp/base/Mod.h b/src/cfsp/base/Mod.h deleted file mode 100644 index 6b4596b..0000000 --- a/src/cfsp/base/Mod.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include "cfsp/Config.h" - -namespace coral_fans::cfsp { - -class CFSPMod { -private: - config::Config mConfig; - -public: - inline config::Config& getConfig() { return this->mConfig; } - -private: - CFSPMod() {} - ~CFSPMod() {} - CFSPMod(const CFSPMod&); - CFSPMod& operator=(const CFSPMod&); - -public: - friend CFSPMod& mod(); - friend class CFSP; -}; - -CFSPMod& mod(); - -} // namespace coral_fans::cfsp \ No newline at end of file diff --git a/src/cfsp/base/OperateResult.h b/src/cfsp/base/OperateResult.h new file mode 100644 index 0000000..b75f519 --- /dev/null +++ b/src/cfsp/base/OperateResult.h @@ -0,0 +1,53 @@ +#pragma once + +#include "mc/network/packet/TextPacket.h" +#include "mc/server/commands/CommandOutput.h" +#include "mc/world/actor/player/Player.h" +#include + + +namespace coral_fans::cfsp::base { +class OperateResult { +public: + enum class Type : int { + Swing = 0, + Success = 1, + Error = 2, + }; + +public: + Type mType = Type::Swing; + std::string mInfo = ""; + +private: + OperateResult(Type type, std::string info) : mType(type), mInfo(info) {} + + +public: + OperateResult() {} + static OperateResult success(std::string info = "") { return OperateResult(Type::Success, info); } + static OperateResult error(std::string info = "") { return OperateResult(Type::Error, info); } + static OperateResult swing(std::string info = "") { return OperateResult(Type::Swing, info); } + operator bool() const { return mType != Type::Error; } + OperateResult(const OperateResult& other) : mType(other.mType), mInfo(other.mInfo) {} + OperateResult(OperateResult&& other) : mType(std::move(other.mType)), mInfo(std::move(other.mInfo)) {} + OperateResult& operator=(OperateResult&& other) noexcept { + if (this != &other) { + mType = std::move(other.mType); + mInfo = std::move(other.mInfo); + } + return *this; + } + +public: + void sendTo(Player& player) { + if (mType == Type::Success) return TextPacket::createRawMessage(mInfo).sendTo(player); + return TextPacket::createRawMessage("§c" + mInfo).sendTo(player); + } + + void output(CommandOutput& output) { + if (mType == Type::Success) return output.success(mInfo); + output.error(mInfo); + } +}; +} // namespace coral_fans::cfsp::base \ No newline at end of file diff --git a/src/cfsp/base/Schedule.h b/src/cfsp/base/Schedule.h new file mode 100644 index 0000000..56308ab --- /dev/null +++ b/src/cfsp/base/Schedule.h @@ -0,0 +1,22 @@ +#include "TimeWheel.h" +#include + +namespace coral_fans::cfsp::base { + +class Schedule { +private: + std::shared_ptr mScheduler; + +private: + Schedule() { mScheduler = std::make_shared(1200); }; + +public: + static Schedule& getInstance() { + static Schedule instance; + return instance; + } + +public: + inline std::shared_ptr getSchedule() { return this->mScheduler; } +}; +} // namespace coral_fans::cfsp::base \ No newline at end of file diff --git a/src/cfsp/base/Utils.cpp b/src/cfsp/base/Utils.cpp index 1f3a9e9..e535ed3 100644 --- a/src/cfsp/base/Utils.cpp +++ b/src/cfsp/base/Utils.cpp @@ -3,86 +3,10 @@ #include "Utils.h" #include "ll/api/i18n/I18n.h" #include "ll/api/service/Bedrock.h" -#include "ll/api/utils/StringUtils.h" -#include "mc/nbt/CompoundTag.h" -#include "mc/nbt/CompoundTagVariant.h" -#include "mc/nbt/ListTag.h" -#include "mc/world/Container.h" -#include "mc/world/actor/player/Inventory.h" #include "mc/world/actor/player/Player.h" -#include "mc/world/actor/player/PlayerInventory.h" #include "mc/world/level/Level.h" -#include - -namespace coral_fans::cfsp::utils { - -namespace { - -struct PathNode { - std::string id; - int index; - bool useIndex; -}; - -bool parsePath(std::string const& path, std::vector& vec) { - for (auto key : ll::string_utils::splitByPattern(path, ".")) { - if (key.ends_with(']')) try { - vec.emplace_back(PathNode{ - std::string{key.substr(0, key.find('['))}, - std::stoi(std::string{key.substr(key.find('[') + 1, key.length() - key.find('[') - 2)}), - true - }); - } catch (...) { - return false; - } - else vec.emplace_back(PathNode{std::string{key}, 0, false}); - } - return true; -} - -} // namespace - -std::pair getNbtFromTag(CompoundTag const tag, std::string const& path) { - using ll::i18n_literals::operator""_tr; - std::vector nodes; - std::vector tags; - if (!parsePath(path, nodes)) return {"translate.data.error.cannotparse"_tr(), false}; - try { - tags.emplace_back(tag[nodes[0].id]); - if (nodes[0].useIndex) { - if (tags.back().is_array() && tags.back().get().getCompound(nodes[0].index)) - tags.emplace_back(*(tags.back().get().getCompound(nodes[0].index))); - else return {"translate.data.error.notanarray"_tr(), false}; - } - for (unsigned long long i = 1; i < nodes.size(); ++i) { - tags.emplace_back(tags.back()[nodes[i].id]); - if (nodes[i].useIndex) { - if (tags.back().is_array() && tags.back().get().getCompound(nodes[i].index)) - tags.emplace_back(*(tags.back().get().getCompound(nodes[i].index))); - else return {"translate.data.error.notanarray"_tr(), false}; - } - } - return {tags.back().toSnbt(SnbtFormat::PrettyChatPrint), true}; - } catch (...) { - return {"translate.data.error.geterror"_tr(), false}; - } -} - -std::string removeMinecraftPrefix(std::string const& s) { return s.find("minecraft:") == 0 ? s.substr(10) : s; } - -void swapItemInContainer(Player* player, int slot1, int slot2) { - if (player) { - auto& container = *player->mInventory->mInventory; - ItemStack i1, i2; - i1 = (slot1 == -1) ? player->getOffhandSlot() : container.getItem(slot1); - i2 = (slot2 == -1) ? player->getOffhandSlot() : container.getItem(slot2); - if (slot1 == -1) player->setOffhandSlot(i2); - else container.setItem(slot1, i2); - if (slot2 == -1) player->setOffhandSlot(i1); - else container.setItem(slot2, i1); - } -} +namespace coral_fans::cfsp::base::utils { std::string tryGetPlayerName(std::string UUID) { auto player = ll::service::getLevel()->getPlayer(mce::UUID(UUID)); @@ -95,4 +19,33 @@ BlockPos neighbor(BlockPos pos, int face) { return pos; } -} // namespace coral_fans::cfsp::utils \ No newline at end of file +std::string getDimName(int dimId) { + using ll::i18n_literals::operator""_tr; + switch (dimId) { + case 0: + return "base.dimension.overworld"_tr(); + case 1: + return "base.dimension.nether"_tr(); + case 2: + return "base.dimension.theend"_tr(); + default: + return "base.dimension.undefined"_tr(); + } +} + +std::string getGameModeStr(int gameType) { + using ll::i18n_literals::operator""_tr; + switch (gameType) { + case 0: + return "base.gamemode.survival"_tr(); + case 1: + return "base.gamemode.creative"_tr(); + case 2: + return "base.gamemode.adventure"_tr(); + case 6: + return "base.gamemode.spectator"_tr(); + default: + return "base.gamemode.undefined"_tr(); + } +} +} // namespace coral_fans::cfsp::base::utils \ No newline at end of file diff --git a/src/cfsp/base/Utils.h b/src/cfsp/base/Utils.h index f81f939..198d505 100644 --- a/src/cfsp/base/Utils.h +++ b/src/cfsp/base/Utils.h @@ -1,18 +1,15 @@ #pragma once -#include "mc/world/actor/player/Player.h" +#include "mc/world/level/BlockPos.h" #include -namespace coral_fans::cfsp::utils { - -std::pair getNbtFromTag(CompoundTag const, std::string const&); - -std::string removeMinecraftPrefix(std::string const& s); - -void swapItemInContainer(Player* player, int slot1, int slot2); +namespace coral_fans::cfsp::base::utils { std::string tryGetPlayerName(std::string UUID); BlockPos neighbor(BlockPos pos, int face); -} // namespace coral_fans::cfsp::utils \ No newline at end of file +std::string getDimName(int dimId); + +std::string getGameModeStr(int gameType); +} // namespace coral_fans::cfsp::base::utils \ No newline at end of file diff --git a/src/cfsp/commands/Command.h b/src/cfsp/commands/Command.h deleted file mode 100644 index fad500d..0000000 --- a/src/cfsp/commands/Command.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#include "mc/server/commands/CommandPermissionLevel.h" - -namespace coral_fans::cfsp::commands { - -void registerSpCommand(CommandPermissionLevel); - -} \ No newline at end of file diff --git a/src/cfsp/commands/Sp.cpp b/src/cfsp/commands/Sp.cpp deleted file mode 100644 index 16abe00..0000000 --- a/src/cfsp/commands/Sp.cpp +++ /dev/null @@ -1,1257 +0,0 @@ -#include "cfsp/Config.h" -#include "cfsp/base/Macros.h" -#include "cfsp/base/Mod.h" -#include "cfsp/gui/GuiForm.h" -#include "cfsp/simplayer/CFSP.h" -#include "ll/api/command/CommandHandle.h" -#include "ll/api/command/CommandRegistrar.h" -#include "ll/api/command/runtime/ParamKind.h" -#include "ll/api/command/runtime/RuntimeCommand.h" -#include "ll/api/command/runtime/RuntimeOverload.h" -#include "ll/api/i18n/I18n.h" -#include "mc/server/commands/CommandOrigin.h" -#include "mc/server/commands/CommandOutput.h" -#include "mc/server/commands/CommandVersion.h" -#include "mc/world/level/dimension/Dimension.h" -#include "mc/world/phys/HitResultType.h" -#include -#include -#include -#include -#include - - -namespace { - -inline void regSubCmd( - ll::command::CommandHandle& cmd, - std::string const& tag, - std::span> const& rArgs, - std::span> const& oArgs, - std::function(Player*, ll::command::RuntimeCommand const&)> spFn, - std::function(Player*, ll::command::RuntimeCommand const&)> gFn -) { - using ll::i18n_literals::operator""_tr; - auto ro1 = std::make_unique(std::move( - cmd.runtimeOverload().text("p").required("name", ll::command::ParamKind::SoftEnum, "spname").text(tag) - )); - auto ro2 = std::make_unique( - std::move(cmd.runtimeOverload().text("g").required("name", ll::command::ParamKind::SoftEnum, "gname").text(tag)) - ); - for (const auto& i : rArgs) { - ro1 = std::make_unique(std::move(ro1->required(i.first, i.second))); - ro2 = std::make_unique(std::move(ro2->required(i.first, i.second))); - } - for (const auto& i : oArgs) { - ro1 = std::make_unique(std::move(ro1->optional(i.first, i.second))); - ro2 = std::make_unique(std::move(ro2->optional(i.first, i.second))); - } - ro1->execute([spFn](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - COMMAND_SIMPLAYER_CHECKPERMLIST - auto rst = spFn(player, self); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); - ro2->execute([gFn](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - COMMAND_SIMPLAYER_CHECKPERMLIST - auto rst = gFn(player, self); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); -} - -inline void regSubCmd( - ll::command::CommandHandle& cmd, - std::string const& tag, - std::span> const& rArgs, - std::span> const& oArgs, - std::function(CommandOrigin const&, ll::command::RuntimeCommand const&)> spFn, - std::function(CommandOrigin const&, ll::command::RuntimeCommand const&)> gFn -) { - using ll::i18n_literals::operator""_tr; - auto ro1 = std::make_unique(std::move( - cmd.runtimeOverload().text("p").required("name", ll::command::ParamKind::SoftEnum, "spname").text(tag) - )); - auto ro2 = std::make_unique( - std::move(cmd.runtimeOverload().text("g").required("name", ll::command::ParamKind::SoftEnum, "gname").text(tag)) - ); - for (const auto& i : rArgs) { - ro1 = std::make_unique(std::move(ro1->required(i.first, i.second))); - ro2 = std::make_unique(std::move(ro2->required(i.first, i.second))); - } - for (const auto& i : oArgs) { - ro1 = std::make_unique(std::move(ro1->optional(i.first, i.second))); - ro2 = std::make_unique(std::move(ro2->optional(i.first, i.second))); - } - ro1->execute([spFn](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - COMMAND_SIMPLAYER_CHECKPERMLIST - auto rst = spFn(origin, self); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); - ro2->execute([gFn](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - COMMAND_SIMPLAYER_CHECKPERMLIST - auto rst = gFn(origin, self); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); -} - -inline void regSubCmd2( - ll::command::CommandHandle& cmd, - std::string const& tag, - std::span> const& rArgs, - std::span> const& oArgs, - std::function(Player*, ll::command::RuntimeCommand const&)> spFn, - std::function(Player*, ll::command::RuntimeCommand const&)> gFn -) { - using ll::i18n_literals::operator""_tr; - auto ro1 = std::make_unique(std::move( - cmd.runtimeOverload().text("p").required("name", ll::command::ParamKind::SoftEnum, "spname").text(tag) - )); - auto ro2 = std::make_unique( - std::move(cmd.runtimeOverload().text("g").required("name", ll::command::ParamKind::SoftEnum, "gname").text(tag)) - ); - for (const auto& i : rArgs) { - ro1 = std::make_unique(std::move(ro1->required(i.first, i.second))); - ro2 = std::make_unique(std::move(ro2->required(i.first, i.second))); - } - for (const auto& i : oArgs) { - ro1 = std::make_unique(std::move(ro1->optional(i.first, i.second))); - ro2 = std::make_unique(std::move(ro2->optional(i.first, i.second))); - } - ro1->execute([spFn](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - auto* entity = origin.getEntity(); - Player* player; - if (entity == nullptr) player = nullptr; - else if (!entity->isType(ActorType ::Player)) { - output.error("command.sp.error.onlyplayer"_tr()); - return; - } else player = static_cast(entity); - COMMAND_SIMPLAYER_CHECKPERMLIST - auto rst = spFn(player, self); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); - ro2->execute([gFn](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - auto* entity = origin.getEntity(); - Player* player; - if (entity == nullptr) player = nullptr; - else if (!entity->isType(ActorType ::Player)) { - output.error("command.sp.error.onlyplayer"_tr()); - return; - } else player = static_cast(entity); - COMMAND_SIMPLAYER_CHECKPERMLIST - auto rst = gFn(player, self); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); -} -} // namespace - -namespace coral_fans::cfsp::commands { - -void registerSpCommand(CommandPermissionLevel permission) { - using ll::i18n_literals::operator""_tr; - - // reg cmd - auto& spCommand = ll::command::CommandRegistrar::getInstance() - .getOrCreateCommand("sp", "command.sp.description"_tr(), permission); - - // reg softenum - ll::command::CommandRegistrar::getInstance().tryRegisterSoftEnum("spname", {}); - ll::command::CommandRegistrar::getInstance().tryRegisterSoftEnum("gname", {}); - - // sp version - spCommand.overload().text("version").execute([](CommandOrigin const&, CommandOutput& output) { -#ifdef VERSION - output.success(VERSION); -#endif -#ifdef COMMITID - output.success("Commit ID: {}", COMMITID); -#endif - output.success("SimPlayerManager Version: {}\n - SimPlayerInfo Version: {}", MANAGER_VERSION, INFO_VERSION); - }); - - // sp - spCommand.overload().execute([](CommandOrigin const& origin, CommandOutput& output) { - COMMAND_CHECK_PLAYER - if (player->getCommandPermissionLevel() >= mod().getConfig().simPlayer.adminPermission - || mod().getConfig().simPlayer.superManagerList.contains(*player->mName)) - coral_fans::cfsp::gui::sendManagerMainMenu(player); - else { - auto grouplist = SimPlayerManager::getInstance().fetchGroupList(player); - if (grouplist.size()) coral_fans::cfsp::gui::sendMainMenu(player); - else coral_fans::cfsp::gui::sendSplist(player); - } - }); - - // sp p - spCommand.runtimeOverload() - .text("p") - .optional("name", ll::command::ParamKind::SoftEnum, "spname") - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - if (self["name"].has_value()) { - auto tem = - SimPlayerManager::getInstance().fetchSimPlayer(self["name"].get() - ); - if (tem.has_value()) { - std::string UUID = player->getUuid().asString(); - if (player->getCommandPermissionLevel() >= mod().getConfig().simPlayer.adminPermission - || mod().getConfig().simPlayer.superManagerList.contains(*player->mName) - || tem.value()->ownerUuid == UUID) - coral_fans::cfsp::gui::sendSpOperatorList(player, tem.value()); - else return output.error("sommand.sp.error.permissiondenied"_tr()); - } else return output.error("sommand.sp.error.spnofind"_tr()); - } else coral_fans::cfsp::gui::sendSplist(player); - return output.success("command.sp.success"_tr()); - }); - - // sp g - spCommand.runtimeOverload() - .text("g") - .optional("name", ll::command::ParamKind::SoftEnum, "gname") - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - if (self["name"].has_value()) { - auto tem = - SimPlayerManager::getInstance().fetchGroup(self["name"].get()); - if (tem.has_value()) { - std::string UUID = player->getUuid().asString(); - if (player->getCommandPermissionLevel() >= mod().getConfig().simPlayer.adminPermission - || mod().getConfig().simPlayer.superManagerList.contains(*player->mName) - || tem.value()->owner == UUID || tem.value()->admin.contains(UUID)) - coral_fans::cfsp::gui::sendGroupOperatorList(player, tem.value()); - else return output.error("sommand.sp.error.permissiondenied"_tr()); - } else return output.error("sommand.sp.error.groupnofind"_tr()); - } else coral_fans::cfsp::gui::sendGroupList(player); - return output.success("command.sp.success"_tr()); - }); - - // sp c autorespawn - spCommand.runtimeOverload() - .text("c") - .text("autorespawn") - .required("isopen", ll::command::ParamKind::Bool) - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - auto& mod = coral_fans::cfsp::mod(); - if (origin.getPermissionsLevel() >= mod.getConfig().simPlayer.adminPermission) { - SimPlayerManager::getInstance().setAutoRespawn(self["isopen"].get()); - return output.success("command.sp.success"_tr()); - } else { - auto* entity = origin.getEntity(); - if (entity != nullptr || entity->isType(ActorType::Player)) { - auto* player = static_cast(entity); - if (mod.getConfig().simPlayer.superManagerList.contains(*player->mName)) { - SimPlayerManager::getInstance().setAutoRespawn(self["isopen"].get( - )); - return output.success("command.sp.success"_tr()); - } - } - } - output.error("command.sp.error.permissiondenied"_tr()); - }); - - // sp c autojoin - spCommand.runtimeOverload() - .text("c") - .text("autojoin") - .required("isopen", ll::command::ParamKind::Bool) - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - auto& mod = coral_fans::cfsp::mod(); - if (origin.getPermissionsLevel() >= mod.getConfig().simPlayer.adminPermission) { - SimPlayerManager::getInstance().setAutoJoin(self["isopen"].get()); - return output.success("command.sp.success"_tr()); - } else { - auto* entity = origin.getEntity(); - if (entity != nullptr || entity->isType(ActorType::Player)) { - auto* player = static_cast(entity); - if (mod.getConfig().simPlayer.superManagerList.contains(*player->mName)) { - SimPlayerManager::getInstance().setAutoJoin(self["isopen"].get()); - return output.success("command.sp.success"_tr()); - } - } - } - output.error("command.sp.error.permissiondenied"_tr()); - }); - - // sp c autodespawn - spCommand.runtimeOverload() - .text("c") - .text("autodespawn") - .required("isopen", ll::command::ParamKind::Bool) - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - auto& mod = coral_fans::cfsp::mod(); - if (origin.getPermissionsLevel() >= mod.getConfig().simPlayer.adminPermission) { - SimPlayerManager::getInstance().setAutoDespawn(self["isopen"].get()); - return output.success("command.sp.success"_tr()); - } else { - auto* entity = origin.getEntity(); - if (entity != nullptr || entity->isType(ActorType::Player)) { - auto* player = static_cast(entity); - if (mod.getConfig().simPlayer.superManagerList.contains(*player->mName)) { - SimPlayerManager::getInstance().setAutoDespawn(self["isopen"].get( - )); - return output.success("command.sp.success"_tr()); - } - } - } - output.error("command.sp.error.permissiondenied"_tr()); - }); - - // sp list g - spCommand.runtimeOverload().text("list").text("g").execute( - [](CommandOrigin const&, CommandOutput& output, ll::command::RuntimeCommand const&) { - output.success(coral_fans::cfsp::SimPlayerManager::getInstance().listGroup()); - } - ); - - // sp list p - spCommand.runtimeOverload().text("list").text("p").execute( - [](CommandOrigin const&, CommandOutput& output, ll::command::RuntimeCommand const&) { - output.success(coral_fans::cfsp::SimPlayerManager::getInstance().listSimPlayer()); - } - ); - - // sp g create - spCommand.runtimeOverload() - .text("g") - .required("name", ll::command::ParamKind::SoftEnum, "gname") - .text("create") - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - COMMAND_SIMPLAYER_CHECKPERMLIST - if (!player->isSimulatedPlayer()) { - auto rst = SimPlayerManager::getInstance().createGroup( - player, - self["name"].get() - ); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - } - }); - - // sp g delete - spCommand.runtimeOverload() - .text("g") - .required("name", ll::command::ParamKind::SoftEnum, "gname") - .text("delete") - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - COMMAND_SIMPLAYER_CHECKPERMLIST - auto rst = coral_fans::cfsp::SimPlayerManager::getInstance().deleteGroup( - player, - self["name"].get() - ); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); - - // sp g addsp - spCommand.runtimeOverload() - .text("g") - .required("name", ll::command::ParamKind::SoftEnum, "gname") - .text("addsp") - .required("simplayer", ll::command::ParamKind::SoftEnum, "spname") - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - COMMAND_SIMPLAYER_CHECKPERMLIST - auto rst = coral_fans::cfsp::SimPlayerManager::getInstance().addSpToGroup( - player, - self["name"].get(), - self["simplayer"].get() - ); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); - - // sp g rmsp - spCommand.runtimeOverload() - .text("g") - .required("name", ll::command::ParamKind::SoftEnum, "gname") - .text("rmsp") - .required("simplayer", ll::command::ParamKind::SoftEnum, "spname") - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - COMMAND_SIMPLAYER_CHECKPERMLIST - auto rst = coral_fans::cfsp::SimPlayerManager::getInstance().rmSpFromGroup( - player, - self["name"].get(), - self["simplayer"].get() - ); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); - - // sp g addadmin - spCommand.runtimeOverload() - .text("g") - .required("name", ll::command::ParamKind::SoftEnum, "gname") - .text("addadmin") - .required("player", ll::command::ParamKind::Player) - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - COMMAND_SIMPLAYER_CHECKPERMLIST - - auto targetPlayer = self["player"].get().results(origin).data; - if (targetPlayer->size() > 1) return output.error("command.sp.error.toomanyobj"_tr()); - if (targetPlayer->front()->isSimulatedPlayer()) return output.error("command.sp.error.nosp"_tr()); - auto rst = coral_fans::cfsp::SimPlayerManager::getInstance().addAdminToGroup( - player, - self["name"].get(), - self["player"].get().results(origin).data->front() - ); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); - - // sp g rmadmin - spCommand.runtimeOverload() - .text("g") - .required("name", ll::command::ParamKind::SoftEnum, "gname") - .text("rmadmin") - .required("player", ll::command::ParamKind::Player) - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - COMMAND_SIMPLAYER_CHECKPERMLIST - auto targetPlayer = self["player"].get().results(origin).data; - if (targetPlayer->size() != 1) return output.error("command.sp.error.toomanyobj"_tr()); - auto rst = coral_fans::cfsp::SimPlayerManager::getInstance().rmAdminFromGroup( - player, - self["name"].get(), - targetPlayer->front()->getUuid().asString() - ); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); - - // sp p spawn - spCommand.runtimeOverload() - .text("p") - .required("name", ll::command::ParamKind::SoftEnum, "spname") - .text("spawn") - .optional("pos", ll::command::ParamKind::Vec3) - .optional("dim", ll::command::ParamKind::Dimension) - .optional("rotx", ll::command::ParamKind::Float) - .optional("roty", ll::command::ParamKind::Float) - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - auto* entity = origin.getEntity(); - if (entity == nullptr) { - if (!self["pos"].has_value()) { - auto& name = self["name"].get(); - if (SimPlayerManager::getInstance().fetchSimPlayer(name).has_value()) { - SimPlayerManager::getInstance().spawnSimPlayer(nullptr, name, {}, 0, {}); - return; - } - } else if (self["dim"].has_value()) { - Vec2 rot; - auto& tem3 = self["rotx"]; - if (tem3.has_value()) { - rot.x = tem3.get(); - auto& tem4 = self["roty"]; - if (tem4.has_value()) rot.y = tem4.get(); - else rot.y = 0; - } else rot = Vec2(0, 0); - auto rst = SimPlayerManager::getInstance().spawnSimPlayer( - nullptr, - self["name"].get(), - self["pos"] - .get() - .getPosition(CommandVersion::CurrentVersion(), origin, {0, 0, 0}), - self["dim"].get().id, - rot - ); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - return; - } - output.error("command.sp.error.paraerror"_tr()); - return; - } else if (!entity->isType(ActorType ::Player)) { - output.error("command.sp.error.onlyplayer"_tr()); - return; - } - auto* player = static_cast(entity); - COMMAND_SIMPLAYER_CHECKPERMLIST - Vec3 pos; - int dim; - Vec2 rot; - auto& tem1 = self["pos"]; - if (tem1.has_value()) { - pos = tem1.get() - .getPosition(CommandVersion::CurrentVersion(), origin, {0, 0, 0}); - auto& tem2 = self["dim"]; - if (tem2.has_value()) { - dim = tem2.get().id; - auto& tem3 = self["rotx"]; - if (tem3.has_value()) { - rot.x = tem3.get(); - auto& tem4 = self["roty"]; - if (tem4.has_value()) rot.y = tem4.get(); - else rot.y = 0; - } else rot = *player->mBuiltInComponents->mActorRotationComponent->mRotationDegree; - } else { - dim = player->getDimensionId(); - rot = *player->mBuiltInComponents->mActorRotationComponent->mRotationDegree; - } - } else { - const auto& hit = player->traceRay(5.25f); - if (hit.mType == HitResultType::Entity) pos = hit.getEntity()->getFeetPos(); - else if (hit.mType == HitResultType::Tile) pos = hit.mPos; - else pos = player->getFeetPos(); - dim = player->getDimensionId(); - rot = *player->mBuiltInComponents->mActorRotationComponent->mRotationDegree; - } - - auto rst = coral_fans::cfsp::SimPlayerManager::getInstance() - .spawnSimPlayer(player, self["name"].get(), pos, dim, rot); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); - - // sp g spawn - spCommand.runtimeOverload() - .text("g") - .required("name", ll::command::ParamKind::SoftEnum, "gname") - .text("spawn") - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - COMMAND_SIMPLAYER_CHECKPERMLIST - auto rst = coral_fans::cfsp::SimPlayerManager::getInstance().spawnGroup( - player, - self["name"].get() - ); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); - - - // sp p sneaking - spCommand.runtimeOverload() - .text("p") - .required("name", ll::command::ParamKind::SoftEnum, "spname") - .text("sneaking") - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - COMMAND_SIMPLAYER_CHECKPERMLIST - auto rst = coral_fans::cfsp::SimPlayerManager::getInstance() - .simPlayerSneaking(player, self["name"].get(), false); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); - - // sp p swimming - spCommand.runtimeOverload() - .text("p") - .required("name", ll::command::ParamKind::SoftEnum, "spname") - .text("swimming") - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - COMMAND_SIMPLAYER_CHECKPERMLIST - auto rst = coral_fans::cfsp::SimPlayerManager::getInstance() - .simPlayerSwimming(player, self["name"].get(), false); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); - - // sp p flying - spCommand.runtimeOverload() - .text("p") - .required("name", ll::command::ParamKind::SoftEnum, "spname") - .text("flying") - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - COMMAND_SIMPLAYER_CHECKPERMLIST - auto rst = coral_fans::cfsp::SimPlayerManager::getInstance() - .simPlayerFlying(player, self["name"].get(), false); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); - - // sp p sprinting - spCommand.runtimeOverload() - .text("p") - .required("name", ll::command::ParamKind::SoftEnum, "spname") - .text("sprinting") - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - COMMAND_SIMPLAYER_CHECKPERMLIST - auto rst = coral_fans::cfsp::SimPlayerManager::getInstance() - .simPlayerSprinting(player, self["name"].get(), false); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); - - ::regSubCmd2( - spCommand, - "despawn", - {}, - {}, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance() - .despawnSimPlayer(player, self["name"].get(), false); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().despawnGroup( - player, - self["name"].get() - ); - } - ); - - ::regSubCmd( - spCommand, - "rm", - {}, - {}, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance() - .rmSimPlayer(player, self["name"].get(), false); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().rmGroup( - player, - self["name"].get() - ); - } - ); - - ::regSubCmd2( - spCommand, - "respawn", - {}, - {}, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance() - .respawnSimPlayer(player, self["name"].get(), false); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().respawnGroup( - player, - self["name"].get() - ); - } - ); - - ::regSubCmd( - spCommand, - "stop", - {}, - {}, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance() - .simPlayerStop(player, self["name"].get(), false); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().groupStop( - player, - self["name"].get() - ); - } - ); - - std::array, 1> enableArg{ - std::make_pair("enable", ll::command::ParamKind::Bool) - }; - - ::regSubCmd( - spCommand, - "sneaking", - enableArg, - {}, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().simPlayerSneaking( - player, - self["name"].get(), - false, - self["enable"].get() - ); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().groupSneaking( - player, - self["name"].get(), - self["enable"].get() - ); - } - ); - - ::regSubCmd( - spCommand, - "swimming", - enableArg, - {}, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().simPlayerSwimming( - player, - self["name"].get(), - false, - self["enable"].get() - ); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().groupSwimming( - player, - self["name"].get(), - self["enable"].get() - ); - } - ); - - ::regSubCmd( - spCommand, - "flying", - enableArg, - {}, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().simPlayerFlying( - player, - self["name"].get(), - false, - self["enable"].get() - ); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().groupFlying( - player, - self["name"].get(), - self["enable"].get() - ); - } - ); - - ::regSubCmd( - spCommand, - "sprinting", - enableArg, - {}, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().simPlayerSprinting( - player, - self["name"].get(), - false, - self["enable"].get() - ); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().groupSprinting( - player, - self["name"].get(), - self["enable"].get() - ); - } - ); - - std::array, 2> taskArg{ - std::make_pair("interval", ll::command::ParamKind::Int), - std::make_pair("times", ll::command::ParamKind::Int) - }; - - ::regSubCmd( - spCommand, - "attack", - {}, - taskArg, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().simPlayerAttack( - player, - self["name"].get(), - false, - self["interval"].has_value() ? self["interval"].get() : 20, - self["times"].has_value() ? self["times"].get() : 1 - ); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().groupAttack( - player, - self["name"].get(), - self["interval"].has_value() ? self["interval"].get() : 20, - self["times"].has_value() ? self["times"].get() : 1 - ); - } - ); - - std::array, 1> strArg{ - std::make_pair("str", ll::command::ParamKind::String) - }; - - ::regSubCmd( - spCommand, - "chat", - strArg, - {}, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().simPlayerChat( - player, - self["name"].get(), - false, - self["str"].get() - ); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().groupChat( - player, - self["name"].get(), - self["str"].get() - ); - } - ); - - ::regSubCmd( - spCommand, - "destroy", - {}, - taskArg, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().simPlayerDestroy( - player, - self["name"].get(), - false, - self["interval"].has_value() ? self["interval"].get() : 20, - self["times"].has_value() ? self["times"].get() : 1 - ); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().groupDestroy( - player, - self["name"].get(), - self["interval"].has_value() ? self["interval"].get() : 20, - self["times"].has_value() ? self["times"].get() : 1 - ); - } - ); - - ::regSubCmd( - spCommand, - "drop", - {}, - {}, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance() - .simPlayerDropSelectedItem(player, self["name"].get(), false); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().groupDropSelectedItem( - player, - self["name"].get() - ); - } - ); - - ::regSubCmd( - spCommand, - "dropinv", - {}, - {}, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance() - .simPlayerDropInv(player, self["name"].get(), false); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().groupDropInv( - player, - self["name"].get() - ); - } - ); - - spCommand.runtimeOverload() - .text("p") - .required("name", ll::command::ParamKind::SoftEnum, "spname") - .text("swap") - .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { - COMMAND_CHECK_PLAYER - COMMAND_SIMPLAYER_CHECKPERMLIST - auto rst = coral_fans::cfsp::SimPlayerManager::getInstance().simPlayerSwap( - player, - self["name"].get() - ); - if (rst.second) output.success(rst.first); - else output.error(rst.first); - }); - - ::regSubCmd( - spCommand, - "runcmd", - strArg, - {}, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().simPlayerRunCmd( - player, - self["name"].get(), - false, - self["str"].get() - ); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().groupRunCmd( - player, - self["name"].get(), - self["str"].get() - ); - } - ); - - std::array, 1> itemArg{ - std::make_pair("item", ll::command::ParamKind::Item) - }; - - ::regSubCmd( - spCommand, - "select", - itemArg, - {}, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().simPlayerSelect( - player, - self["name"].get(), - false, - self["item"].get().mId - ); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().groupSelect( - player, - self["name"].get(), - self["item"].get().mId - ); - } - ); - - ::regSubCmd( - spCommand, - "interact", - {}, - taskArg, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().simPlayerInteract( - player, - self["name"].get(), - false, - self["interval"].has_value() ? self["interval"].get() : 20, - self["times"].has_value() ? self["times"].get() : 1 - ); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().groupInteract( - player, - self["name"].get(), - self["interval"].has_value() ? self["interval"].get() : 20, - self["times"].has_value() ? self["times"].get() : 1 - ); - } - ); - - ::regSubCmd( - spCommand, - "jump", - {}, - taskArg, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().simPlayerJump( - player, - self["name"].get(), - false, - self["interval"].has_value() ? self["interval"].get() : 20, - self["times"].has_value() ? self["times"].get() : 1 - ); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().groupJump( - player, - self["name"].get(), - self["interval"].has_value() ? self["interval"].get() : 20, - self["times"].has_value() ? self["times"].get() : 1 - ); - } - ); - - std::array, 3> useTaskArg{ - std::make_pair("tick", ll::command::ParamKind::Int), - std::make_pair("interval", ll::command::ParamKind::Int), - std::make_pair("times", ll::command::ParamKind::Int) - }; - - ::regSubCmd( - spCommand, - "use", - {}, - useTaskArg, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().simPlayerUse( - player, - self["name"].get(), - false, - self["tick"].has_value() ? self["tick"].get() : 10, - self["interval"].has_value() ? self["interval"].get() : 20, - self["times"].has_value() ? self["times"].get() : 1 - ); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().groupUse( - player, - self["name"].get(), - self["tick"].has_value() ? self["tick"].get() : 10, - self["interval"].has_value() ? self["interval"].get() : 20, - self["times"].has_value() ? self["times"].get() : 1 - ); - } - ); - - ::regSubCmd( - spCommand, - "build", - {}, - taskArg, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().simPlayerBuild( - player, - self["name"].get(), - false, - self["interval"].has_value() ? self["interval"].get() : 20, - self["times"].has_value() ? self["times"].get() : 1 - ); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().groupBuild( - player, - self["name"].get(), - self["interval"].has_value() ? self["interval"].get() : 20, - self["times"].has_value() ? self["times"].get() : 1 - ); - } - ); - - std::array, 1> posArg{ - std::make_pair("pos", ll::command::ParamKind::Vec3) - }; - - ::regSubCmd( - spCommand, - "lookat", - {}, - posArg, - [](CommandOrigin const& origin, ll::command::RuntimeCommand const& self) { - auto* entity = origin.getEntity(); - auto* player = static_cast(entity); - Vec3 pos; - if (self["pos"].has_value()) - pos = self["pos"].get().getPosition( - CommandVersion::CurrentVersion(), - origin, - {0, 0, 0} - ); - else { - const auto& hit = player->traceRay(5.25f); - if (hit.mType == HitResultType::Entity) pos = hit.getEntity()->getPosition(); - else if (hit.mType == HitResultType::Tile) pos = hit.mPos; - else pos = player->getFeetPos(); - } - return coral_fans::cfsp::SimPlayerManager::getInstance() - .simPlayerLookAt(player, self["name"].get(), false, pos); - }, - [](CommandOrigin const& origin, ll::command::RuntimeCommand const& self) { - auto* entity = origin.getEntity(); - auto* player = static_cast(entity); - Vec3 pos; - if (self["pos"].has_value()) - pos = self["pos"].get().getPosition( - CommandVersion::CurrentVersion(), - origin, - {0, 0, 0} - ); - else { - const auto& hit = player->traceRay(5.25f); - if (hit.mType == HitResultType::Entity) pos = hit.getEntity()->getPosition(); - else if (hit.mType == HitResultType::Tile) pos = hit.mPos; - else pos = player->getPosition(); - } - return coral_fans::cfsp::SimPlayerManager::getInstance() - .groupLookAt(player, self["name"].get(), pos); - } - ); - - std::array, 2> posArgWithDim{ - std::make_pair("pos", ll::command::ParamKind::Vec3), - std::make_pair("dim", ll::command::ParamKind::Dimension) - }; - - if (mod().getConfig().simPlayer.allowTp) - ::regSubCmd( - spCommand, - "tp", - {}, - posArgWithDim, - [](CommandOrigin const& origin, ll::command::RuntimeCommand const& self) { - auto* entity = origin.getEntity(); - auto* player = static_cast(entity); - Vec3 pos; - int dimId; - if (self["pos"].has_value()) - pos = self["pos"].get().getPosition( - CommandVersion::CurrentVersion(), - origin, - {0, 0, 0} - ); - else { - const auto& hit = player->traceRay(5.25f); - if (hit.mType == HitResultType::Entity) pos = hit.getEntity()->getFeetPos(); - else if (hit.mType == HitResultType::Tile) pos = hit.mPos; - else pos = player->getFeetPos(); - } - if (self["dim"].has_value()) dimId = self["dim"].get().id; - else dimId = player->getDimensionId(); - return coral_fans::cfsp::SimPlayerManager::getInstance() - .simPlayerTp(player, self["name"].get(), false, pos, dimId); - }, - [](CommandOrigin const& origin, ll::command::RuntimeCommand const& self) { - auto* entity = origin.getEntity(); - auto* player = static_cast(entity); - Vec3 pos; - int dimId; - if (self["pos"].has_value()) - pos = self["pos"].get().getPosition( - CommandVersion::CurrentVersion(), - origin, - {0, 0, 0} - ); - else { - const auto& hit = player->traceRay(5.25f); - if (hit.mType == HitResultType::Entity) pos = hit.getEntity()->getFeetPos(); - else if (hit.mType == HitResultType::Tile) pos = hit.mPos; - else pos = player->getFeetPos(); - } - if (self["dim"].has_value()) dimId = self["dim"].get().id; - else dimId = player->getDimensionId(); - return coral_fans::cfsp::SimPlayerManager::getInstance() - .groupTp(player, self["name"].get(), pos, dimId); - } - ); - - ::regSubCmd( - spCommand, - "moveto", - {}, - posArg, - [](CommandOrigin const& origin, ll::command::RuntimeCommand const& self) { - auto* entity = origin.getEntity(); - auto* player = static_cast(entity); - Vec3 pos; - if (self["pos"].has_value()) - pos = self["pos"].get().getPosition( - CommandVersion::CurrentVersion(), - origin, - {0, 0, 0} - ); - else { - const auto& hit = player->traceRay(5.25f, false, true); - if (hit) pos = hit.mPos; - else pos = player->getFeetPos(); - } - return coral_fans::cfsp::SimPlayerManager::getInstance() - .simPlayerMoveTo(player, self["name"].get(), false, pos); - }, - [](CommandOrigin const& origin, ll::command::RuntimeCommand const& self) { - auto* entity = origin.getEntity(); - auto* player = static_cast(entity); - Vec3 pos; - if (self["pos"].has_value()) - pos = self["pos"].get().getPosition( - CommandVersion::CurrentVersion(), - origin, - {0, 0, 0} - ); - else { - const auto& hit = player->traceRay(5.25f, false, true); - if (hit) pos = hit.mPos; - else pos = player->getFeetPos(); - } - return coral_fans::cfsp::SimPlayerManager::getInstance() - .groupMoveTo(player, self["name"].get(), pos); - } - ); - - ::regSubCmd( - spCommand, - "navto", - {}, - posArg, - [](CommandOrigin const& origin, ll::command::RuntimeCommand const& self) { - auto* entity = origin.getEntity(); - auto* player = static_cast(entity); - Vec3 pos; - if (self["pos"].has_value()) - pos = self["pos"].get().getPosition( - CommandVersion::CurrentVersion(), - origin, - {0, 0, 0} - ); - else { - const auto& hit = player->traceRay(5.25f, false, true); - if (hit) pos = hit.mPos; - else pos = player->getFeetPos(); - } - return coral_fans::cfsp::SimPlayerManager::getInstance() - .simPlayerNavTo(player, self["name"].get(), false, pos); - }, - [](CommandOrigin const& origin, ll::command::RuntimeCommand const& self) { - auto* entity = origin.getEntity(); - auto* player = static_cast(entity); - Vec3 pos; - if (self["pos"].has_value()) - pos = self["pos"].get().getPosition( - CommandVersion::CurrentVersion(), - origin, - {0, 0, 0} - ); - else { - const auto& hit = player->traceRay(5.25f, false, true); - if (hit) pos = hit.mPos; - else pos = player->getFeetPos(); - } - return coral_fans::cfsp::SimPlayerManager::getInstance() - .groupNavTo(player, self["name"].get(), pos); - } - ); - - std::array, 1> pathArg{ - std::make_pair("path", ll::command::ParamKind::FilePath) - }; - std::array, 2> intervalArgArg{ - std::make_pair("interval", ll::command::ParamKind::Int), - std::make_pair("arg", ll::command::ParamKind::RawText) - }; - - ::regSubCmd( - spCommand, - "script", - pathArg, - intervalArgArg, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().simPlayerScript( - player, - self["name"].get(), - false, - self["path"].get().mText, - self["interval"].has_value() ? self["interval"].get() : 20, - self["arg"].has_value() ? self["arg"].get().mText : "" - ); - }, - [](Player* player, ll::command::RuntimeCommand const& self) { - return coral_fans::cfsp::SimPlayerManager::getInstance().groupScript( - player, - self["name"].get(), - self["path"].get().mText, - self["interval"].has_value() ? self["interval"].get() : 20, - self["arg"].has_value() ? self["arg"].get().mText : "" - ); - } - ); -} - -} // namespace coral_fans::cfsp::commands \ No newline at end of file diff --git a/src/cfsp/fix/FeatureFix.cpp b/src/cfsp/core/fix/CFSPFeatureFix.cpp similarity index 61% rename from src/cfsp/fix/FeatureFix.cpp rename to src/cfsp/core/fix/CFSPFeatureFix.cpp index 5a47813..215b978 100644 --- a/src/cfsp/fix/FeatureFix.cpp +++ b/src/cfsp/core/fix/CFSPFeatureFix.cpp @@ -1,31 +1,14 @@ -#include -#include - -#include "cfsp/CFSP.h" -#include "mc/deps/core/math/Vec3.h" +#include "CFSPFixManager.h" +#include "ll/api/chrono/GameChrono.h" +#include "ll/api/memory/Hook.h" +#include "ll/api/service/Bedrock.h" +#include "ll/api/thread/ServerThreadExecutor.h" #include "mc/network/LoopbackPacketSender.h" -#include "mc/network/MinecraftPacketIds.h" #include "mc/network/ServerNetworkHandler.h" #include "mc/network/packet/PlayStatusPacket.h" -#include "mc/network/packet/PlayerActionPacket.h" -#include "mc/network/packet/PlayerAuthInputPacket.h" #include "mc/network/packet/RequestChunkRadiusPacket.h" -#include "mc/network/packet/RespawnPacket.h" #include "mc/network/packet/ShowCreditsPacket.h" #include "mc/server/SimulatedPlayer.h" -#include "mc/world/actor/ActorInitializationMethod.h" -#include "mc/world/actor/player/Player.h" -#include "mc/world/level/BlockPos.h" -#include "mc/world/level/BlockSource.h" -#include "mc/world/level/chunk/ChunkViewSource.h" -#include "mc/world/level/dimension/Dimension.h" -#include "mc/world/level/storage/DBStorage.h" - -#include "ll/api/base/StdInt.h" -#include "ll/api/chrono/GameChrono.h" -#include "ll/api/memory/Hook.h" -#include "ll/api/service/Bedrock.h" -#include "ll/api/thread/ServerThreadExecutor.h" namespace coral_fans::cfsp::fix { template @@ -57,14 +40,7 @@ LL_TYPE_INSTANCE_HOOK( ::std::shared_ptr<::ChunkViewSource>, ::ChunkSource& mainChunkSource ) { - // if (FixManager::shouldFix(this)) { - // auto cs = origin( mainChunkSource); - // // ChunkSource::LoadMode : None(0) -> Deferred(1) - // cs->mParentLoadMode = ::ChunkSource::LoadMode::Deferred; - // return cs; return this->ServerPlayer::$_createChunkSource(mainChunkSource); - // } - // return origin(mainChunkSource); } // ================= Fix tick ================= @@ -78,12 +54,7 @@ LL_TYPE_INSTANCE_HOOK( ::Tick const& tick ) { origin(tick); - // _updateChunkPublisherView will be called after Player::tick in ServerPlayer::tick - // if (FixManager::shouldFix(this)) { - // Force to call the implementation of ServerPlayer - // seem this only for tell client which chunk ready in server this->ServerPlayer::$_updateChunkPublisherView(getPosition(), 16.0f); - // } } // ================== Fix Travel ================== @@ -97,18 +68,14 @@ LL_TYPE_INSTANCE_HOOK( ::DimensionType dimension ) { origin(dimension); - // if (FixManager::shouldFix(this)) { - // mHasSeenCredits = true; ShowCreditsPacket packet{}; packet.mPlayerID = getRuntimeID(); packet.mCreditsState = ShowCreditsPacket::CreditsState::Finished; SimulateSendPacketToServerAfter(*this, packet); - // } } [[maybe_unused]] void SimulateHandlePacketFromServer(SimulatedPlayer& sp, [[maybe_unused]] ShowCreditsPacket const& packet) { - // DEBUGW("({})::handle - {}", sp.getNameTag(), packetToDebugString(packet)); ShowCreditsPacket res; res.mPlayerID = sp.getRuntimeID(); res.mCreditsState = ShowCreditsPacket::CreditsState::Finished; @@ -119,25 +86,17 @@ SimulateHandlePacketFromServer(SimulatedPlayer& sp, [[maybe_unused]] ShowCredits // ================== Fix Initialized Spawn ================== void SimulateHandlePacketFromServer(SimulatedPlayer& sp, [[maybe_unused]] PlayStatusPacket const& packet) { - // SpawnFix chunk radius - // DEBUGW("({})::handle - {}", sp.getNameTag(), packetToDebugString(packet)); - static int ChunkRadius = 5; - RequestChunkRadiusPacket res; - res.mChunkRadius = ChunkRadius; - res.mMaxChunkRadius = static_cast(ChunkRadius); + res.mChunkRadius = sp.mChunkRadius; + res.mMaxChunkRadius = static_cast(sp.mChunkRadius); SimulateSendPacketToServerAfter(sp, res, 5); } bool SimulateHandlePacketFromServer(NetworkIdentifier const& nid, Packet const& packet, SubClientId subId) { - auto sp = ll::service::getServerNetworkHandler()->_getServerPlayer(nid, subId); - // if (!FixManager::shouldFix(sp)) return false; + auto sp = ll::service::getServerNetworkHandler()->_getServerPlayer(nid, subId); const auto packetId = packet.getId(); switch (packetId) { - // case MinecraftPacketIds::Respawn: - // SimulateHandlePacketFromServer(*static_cast(sp), static_cast(packet)); break; case MinecraftPacketIds::ShowCredits: SimulateHandlePacketFromServer( *static_cast(sp), @@ -166,40 +125,19 @@ LL_TYPE_INSTANCE_HOOK( ::UserEntityIdentifierComponent const* userIdentifier, ::Packet const& packet ) { - // TODO if (userIdentifier->mNetworkId == NetworkIdentifier::INVALID_ID()) { try { [[maybe_unused]] auto handled = SimulateHandlePacketFromServer(userIdentifier->mNetworkId, packet, userIdentifier->mClientSubId); - // if (handled) return; - } catch (...) { - // lfp::LeviFakePlayer::getLogger().error( - // "Error in handle packet for SubClient<{}>", - // (int)userIdentifier->mClientSubId - // ); - } + } catch (...) {} } origin(std::forward<::UserEntityIdentifierComponent const*>(userIdentifier), std::forward<::Packet const&>(packet)); }; - -void featureFix(bool bl) { - if (bl) { - LoadChunkFix__updateChunkPublisherView::hook(); - LoadChunkFix_ChunkSource_LoadMode::hook(); - // RespawnFix_onPlayerDie::hook(); - TravelFix_ShowCredits::hook(); - // SpawnFix_Temp_initSpawnPos::hook(); - // SpawnFix_respawnPos::hook(); - FixByPacketHook::hook(); - } else { - LoadChunkFix__updateChunkPublisherView::unhook(); - LoadChunkFix_ChunkSource_LoadMode::unhook(); - // RespawnFix_onPlayerDie::unhook(); - TravelFix_ShowCredits::unhook(); - // SpawnFix_Temp_initSpawnPos::hook(); - // SpawnFix_respawnPos::hook(); - FixByPacketHook::unhook(); - } +void CFSPFixManager::featureFix() { + LoadChunkFix__updateChunkPublisherView::hook(); + LoadChunkFix_ChunkSource_LoadMode::hook(); + TravelFix_ShowCredits::hook(); + FixByPacketHook::hook(); } } // namespace coral_fans::cfsp::fix \ No newline at end of file diff --git a/src/cfsp/core/fix/CFSPFixManager.cpp b/src/cfsp/core/fix/CFSPFixManager.cpp new file mode 100644 index 0000000..6104706 --- /dev/null +++ b/src/cfsp/core/fix/CFSPFixManager.cpp @@ -0,0 +1,10 @@ +#include "CFSPFixManager.h" + + +namespace coral_fans::cfsp::fix { +void CFSPFixManager::cfspBugFixHook() { + this->featureFix(); + this->handItemFix(); + this->sapiFix(); +} +} // namespace coral_fans::cfsp::fix \ No newline at end of file diff --git a/src/cfsp/core/fix/CFSPFixManager.h b/src/cfsp/core/fix/CFSPFixManager.h new file mode 100644 index 0000000..178768d --- /dev/null +++ b/src/cfsp/core/fix/CFSPFixManager.h @@ -0,0 +1,23 @@ +#pragma once + + +namespace coral_fans::cfsp::fix { +class CFSPFixManager { +public: + bool createSpMutex = false; + +public: + static CFSPFixManager& getInstance() { + static CFSPFixManager instance; + return instance; + } + +private: + void featureFix(); + void handItemFix(); + void sapiFix(); + +public: + void cfspBugFixHook(); +}; +} // namespace coral_fans::cfsp::fix \ No newline at end of file diff --git a/src/cfsp/core/fix/CFSPHandItemFix.cpp b/src/cfsp/core/fix/CFSPHandItemFix.cpp new file mode 100644 index 0000000..8569e20 --- /dev/null +++ b/src/cfsp/core/fix/CFSPHandItemFix.cpp @@ -0,0 +1,57 @@ +#include "CFSPFixManager.h" +#include "ll/api/memory/Hook.h" +#include "mc/network/packet/MobEquipmentPacket.h" +#include "mc/server/SimulatedPlayer.h" +#include "mc/world/actor/player/Inventory.h" +#include "mc/world/actor/player/PlayerInventory.h" + + +namespace coral_fans::cfsp::fix { +LL_TYPE_INSTANCE_HOOK( + CFSPHandItemFixHook1, + ll::memory::HookPriority::Normal, + SimulatedPlayer, + &SimulatedPlayer::inventoryChanged, + void, + Container& container, + int slot, + ItemStack const& oldItem, + ItemStack const& newItem, + bool forceBalanced +) { + origin(container, slot, oldItem, newItem, forceBalanced); + if (this->isSimulatedPlayer()) { + if (slot == 0 && oldItem.getTypeName() != newItem.getTypeName()) { + MobEquipmentPacket( + this->getRuntimeID(), + newItem, + 0, + 0, + mInventory->mSelectedContainerId + ) + .sendToClients(); // fix::更新主手 + } + } +} + +LL_TYPE_INSTANCE_HOOK( + CFSPHandItemFixHook2, + ll::memory::HookPriority::Normal, + SimulatedPlayer, + &SimulatedPlayer::$setOffhandSlot, + void, + ItemStack const& item +) { + if (this->isSimulatedPlayer()) { + if (this->getOffhandSlot().getTypeName() != item.getTypeName()) + MobEquipmentPacket(this->getRuntimeID(), item, 1, 0, + ContainerID::Offhand).sendToClients(); // fix::更新副手 + } + origin(item); +} + +void CFSPFixManager::handItemFix() { + CFSPHandItemFixHook1::hook(); + CFSPHandItemFixHook2::hook(); +} +} // namespace coral_fans::cfsp::fix \ No newline at end of file diff --git a/src/cfsp/core/fix/SapiFix.cpp b/src/cfsp/core/fix/SapiFix.cpp new file mode 100644 index 0000000..551b5b4 --- /dev/null +++ b/src/cfsp/core/fix/SapiFix.cpp @@ -0,0 +1,146 @@ +#include "CFSPFixManager.h" +#include "cfsp/core/manager/CFSPManager.h" +#include "ll/api/memory/Hook.h" +#include "mc/deps/ecs./WeakEntityRef.h" +#include "mc/scripting/modules/minecraft/actor/ScriptActor.h" +#include "mc/scripting/modules/minecraft/events/ScriptActorEventListener.h" +#include "mc/scripting/modules/minecraft/events/ScriptLevelEventListener.h" +#include "mc/world/actor/Actor.h" +#include "mc/world/events/ActorAttackEvent.h" +#include "mc/world/events/ActorDiedEvent.h" +#include "mc/world/events/ActorHealthChangedEvent.h" +#include "mc/world/events/ActorHurtEvent.h" +#include "mc/world/events/ActorRemovedEvent.h" +#include "mc/world/events/EventResult.h" +#include "mc/world/events/ProjectileHitEvent.h" +#include + +namespace coral_fans::cfsp::fix { +std::unordered_multiset mRemovingSpSet; + +LL_TYPE_INSTANCE_HOOK( + CFSPSapiFixHook1, + ll::memory::HookPriority::Normal, + ScriptModuleMinecraft::ScriptActorEventListener, + &ScriptModuleMinecraft::ScriptActorEventListener::$onEvent, + EventResult, + ::ActorRemovedEvent const& actorRemovedEvent +) { + if (auto entityContext = actorRemovedEvent.mEntity->lock()) { + auto actor = Actor::tryGetFromEntity(*entityContext, false); + if (actor && manager::CFSPManager::getInstance().tryGetCFSP(actor).has_value()) { + mRemovingSpSet.insert(static_cast(actor)->mName); + return EventResult::KeepGoing; + } + } + return origin(actorRemovedEvent); +} + +LL_TYPE_INSTANCE_HOOK( + CFSPSapiFixHook2, + ll::memory::HookPriority::Normal, + ScriptModuleMinecraft::ScriptActorEventListener, + &ScriptModuleMinecraft::ScriptActorEventListener::$onEvent, + EventResult, + ::ActorAttackEvent const& actorAttackEvent +) { + if (auto entityContext = actorAttackEvent.mEntity->lock()) { + auto actor = Actor::tryGetFromEntity(*entityContext, false); + if (actor && manager::CFSPManager::getInstance().tryGetCFSP(actor).has_value()) { + return EventResult::KeepGoing; + } + } + return origin(actorAttackEvent); +} + +LL_TYPE_INSTANCE_HOOK( + CFSPSapiFixHook3, + ll::memory::HookPriority::Normal, + ScriptModuleMinecraft::ScriptActorEventListener, + &ScriptModuleMinecraft::ScriptActorEventListener::$onEvent, + EventResult, + ::ActorHurtEvent const& actorHurtEvent +) { + if (auto entityContext = actorHurtEvent.mEntity->lock()) { + auto actor = Actor::tryGetFromEntity(*entityContext, false); + if (actor && manager::CFSPManager::getInstance().tryGetCFSP(actor).has_value()) { + return EventResult::KeepGoing; + } + } + return origin(actorHurtEvent); +} + +LL_TYPE_INSTANCE_HOOK( + CFSPSapiFixHook4, + ll::memory::HookPriority::Normal, + ScriptModuleMinecraft::ScriptActorEventListener, + &ScriptModuleMinecraft::ScriptActorEventListener::$onEvent, + EventResult, + ::ActorHealthChangedEvent const& actorHealthChangedEvent +) { + if (auto entityContext = actorHealthChangedEvent.mEntity->lock()) { + auto actor = Actor::tryGetFromEntity(*entityContext, false); + if (actor && manager::CFSPManager::getInstance().tryGetCFSP(actor).has_value()) { + return EventResult::KeepGoing; + } + } + return origin(actorHealthChangedEvent); +} + +LL_TYPE_INSTANCE_HOOK( + CFSPSapiFixHook5, + ll::memory::HookPriority::Normal, + ScriptModuleMinecraft::ScriptActorEventListener, + &ScriptModuleMinecraft::ScriptActorEventListener::$onEvent, + EventResult, + ::ActorDiedEvent const& actorDiedEvent +) { + if (auto entityContext = actorDiedEvent.mEntity->lock()) { + auto actor = Actor::tryGetFromEntity(*entityContext, false); + if (actor && manager::CFSPManager::getInstance().tryGetCFSP(actor).has_value()) { + return EventResult::KeepGoing; + } + } + return origin(actorDiedEvent); +} + +LL_TYPE_INSTANCE_HOOK( + CFSPSapiFixHook6, + ll::memory::HookPriority::Normal, + ScriptModuleMinecraft::ScriptActorEventListener, + &ScriptModuleMinecraft::ScriptActorEventListener::$onActorCreated, + EventResult, + ::Actor& actor, + ::ActorInitializationMethod initializationMethod +) { + if (fix::CFSPFixManager::getInstance().createSpMutex) { + return EventResult::KeepGoing; + } + return origin(actor, initializationMethod); +} + +LL_TYPE_INSTANCE_HOOK( + CFSPSapiFixHook7, + ll::memory::HookPriority::Normal, + ScriptModuleMinecraft::ScriptLevelEventListener, + &ScriptModuleMinecraft::ScriptLevelEventListener::$onLevelRemovedPlayer, + EventResult, + ::Player& player +) { + if (auto it = mRemovingSpSet.find(player.mName); it != mRemovingSpSet.end()) { + mRemovingSpSet.erase(it); + return EventResult::KeepGoing; + } + return origin(player); +} + +void CFSPFixManager::sapiFix() { + CFSPSapiFixHook1::hook(); + CFSPSapiFixHook2::hook(); + CFSPSapiFixHook3::hook(); + CFSPSapiFixHook4::hook(); + CFSPSapiFixHook5::hook(); + CFSPSapiFixHook6::hook(); + CFSPSapiFixHook7::hook(); +} +} // namespace coral_fans::cfsp::fix \ No newline at end of file diff --git a/src/cfsp/core/group/CFSPGroup.cpp b/src/cfsp/core/group/CFSPGroup.cpp new file mode 100644 index 0000000..e2223c3 --- /dev/null +++ b/src/cfsp/core/group/CFSPGroup.cpp @@ -0,0 +1,34 @@ +#include "CFSPGroup.h" +#include "cfsp/CFSP.h" +#include "cfsp/core/group/CFSPGroup.h" +#include "cfsp/core/manager/CFSPManager.h" +#include "ll/api/Config.h" + +namespace coral_fans::cfsp::group { +CFSPGroup::CFSPGroup(GroupData groupData) { this->mData = groupData; } + +void CFSPGroup::save() { + ll::config::saveConfig( + this->mData, + CFSP::getInstance().getSelf().getDataDir() / "group" + / reinterpret_cast(this->mData.name.c_str()) / "data.json" + ); +} + +bool CFSPGroup::hasPermission(Player* player, GroupPermission permission) { + if (manager::CFSPManager::getInstance().isManager(player)) return true; + auto uuid = player->getUuid().asString(); + if (this->mData.ownerUuid == uuid) return true; + auto it = this->mData.permission.find(uuid); + if (it != this->mData.permission.end() && (it->second & (uint)permission) == (uint)permission) return true; + return (this->mData.publicPermission & (uint)permission) == (uint)permission; +} + +uint CFSPGroup::getPermission(const Player* player) { + auto uuid = player->getUuid().asString(); + if (this->mData.ownerUuid == uuid) return (uint)-1; + if (auto it = this->mData.permission.find(uuid); it != this->mData.permission.end()) + return (it->second | this->mData.publicPermission); + return this->mData.publicPermission; +} +} // namespace coral_fans::cfsp::group \ No newline at end of file diff --git a/src/cfsp/core/group/CFSPGroup.h b/src/cfsp/core/group/CFSPGroup.h new file mode 100644 index 0000000..5b0237b --- /dev/null +++ b/src/cfsp/core/group/CFSPGroup.h @@ -0,0 +1,19 @@ +#pragma once + +#include "GroupData.h" +#include "mc/world/actor/player/Player.h" + +namespace coral_fans::cfsp::group { +class CFSPGroup { +public: + GroupData mData; + +public: + CFSPGroup(GroupData groupData); + +public: + void save(); + bool hasPermission(Player*, GroupPermission permission); + uint getPermission(const Player* player); +}; +} // namespace coral_fans::cfsp::group \ No newline at end of file diff --git a/src/cfsp/core/group/GroupData.h b/src/cfsp/core/group/GroupData.h new file mode 100644 index 0000000..cd46e2b --- /dev/null +++ b/src/cfsp/core/group/GroupData.h @@ -0,0 +1,15 @@ +#include "GroupPermission.h" +#include +#include +#include + +namespace coral_fans::cfsp::group { +struct GroupData { + int version = 1; + std::string name; + std::unordered_set splist; // 假人名称 + std::string ownerUuid; // 所有者uuid + unsigned int publicPermission; + std::unordered_map permission; // <玩家uuid, permission> +}; +} // namespace coral_fans::cfsp::group diff --git a/src/cfsp/core/group/GroupPermission.h b/src/cfsp/core/group/GroupPermission.h new file mode 100644 index 0000000..8d306ea --- /dev/null +++ b/src/cfsp/core/group/GroupPermission.h @@ -0,0 +1,32 @@ +namespace coral_fans::cfsp::group { +enum class GroupPermission : unsigned int { + None = 0, + AddSp = 1 << 0, + RmSp = 1 << 1, + Delete = 1 << 2, + Spawn = 1 << 3, + Despawn = 1 << 4, + Respawn = 1 << 5, + DeleteSp = 1 << 6, + Stop = 1 << 7, + Drop = 1 << 8, + DropInv = 1 << 9, + Sneaking = 1 << 10, + Swimming = 1 << 11, + Flying = 1 << 12, + Sprinting = 1 << 13, + Attack = 1 << 14, + Build = 1 << 15, + Interact = 1 << 16, + Jump = 1 << 17, + Use = 1 << 18, + Destroy = 1 << 19, + Chat = 1 << 20, + RunCmd = 1 << 21, + LookAt = 1 << 22, + MoveTo = 1 << 23, + NavTo = 1 << 24, + Tp = 1 << 25, + Select = 1 << 26, +}; +} \ No newline at end of file diff --git a/src/cfsp/core/helper/CFSPAutoFuncHelper.cpp b/src/cfsp/core/helper/CFSPAutoFuncHelper.cpp new file mode 100644 index 0000000..00bb43c --- /dev/null +++ b/src/cfsp/core/helper/CFSPAutoFuncHelper.cpp @@ -0,0 +1,76 @@ +#include "CFSPHelperManager.h" +#include "cfsp/base/Schedule.h" +#include "cfsp/core/manager/CFSPManager.h" +#include "ll/api/command/CommandRegistrar.h" +#include "ll/api/event/EventBus.h" +#include "ll/api/event/player/PlayerJoinEvent.h" +#include "ll/api/memory/Hook.h" +#include "ll/api/service/Bedrock.h" +#include "mc/world/level/Level.h" +#include +#include +#include + +namespace coral_fans::cfsp::helper { +bool shouldDespawn(const std::string& spname) { + if (!manager::CFSPManager::getInstance().getAutoDespawn()) return false; + static std::unordered_map> recordData; + auto& queue = recordData[spname]; + auto currentTime = ll::service::getLevel()->getCurrentTick().tickID; + auto autoDespawninterval = manager::CFSPManager::getInstance().getConfig().autoDespawninterval; + queue.push(currentTime); + std::erase_if(recordData, [currentTime, autoDespawninterval](auto& q) { + while (currentTime - q.second.front() > autoDespawninterval) { + q.second.pop(); + if (!q.second.size()) return true; + } + return false; + }); + if (auto it = recordData.find(spname); + it->second.size() >= manager::CFSPManager::getInstance().getConfig().autoDespawnCount) { + recordData.erase(it); + return true; + } + return false; +} + +LL_TYPE_INSTANCE_HOOK( + CFSPAutoFuncHelperHook, + ll::memory::HookPriority::Normal, + SimulatedPlayer, + &SimulatedPlayer::$die, + void, + ActorDamageSource const& source +) { + origin(source); + auto cfsp = manager::CFSPManager::getInstance().tryGetCFSP(this); + if (cfsp.has_value()) { + cfsp.value()->stop(); + ll::command::CommandRegistrar::getInstance().addSoftEnumValues("cfspDeadSp", {cfsp.value()->mSaveData.name}); + if (manager::CFSPManager::getInstance().getAutoRespawn()) { + cfsp.value()->mTaskid = + base::Schedule::getInstance().getSchedule()->add(20, [cfsp = cfsp.value()](unsigned long long) { + if (!cfsp->respawn()) return false; + ll::command::CommandRegistrar::getInstance().removeSoftEnumValues( + "cfspDeadSp", + {cfsp->mSaveData.name} + ); + if (shouldDespawn(cfsp->getName())) manager::CFSPManager::getInstance().autoDespawn(cfsp); + return false; + }); + } + } +} + +void CFSPHelperManager::autoFuncHelperRegister() { + if (manager::CFSPManager::getInstance().getAutoJoin()) + playerJoinEventListener = + ll::event::EventBus::getInstance().emplaceListener( + [this](ll::event::player::PlayerJoinEvent&) { + ll::event::EventBus::getInstance().removeListener(playerJoinEventListener); + manager::CFSPManager::getInstance().autoJoin(); + } + ); + CFSPAutoFuncHelperHook::hook(); +} +} // namespace coral_fans::cfsp::helper \ No newline at end of file diff --git a/src/cfsp/core/helper/CFSPHelperManager.cpp b/src/cfsp/core/helper/CFSPHelperManager.cpp new file mode 100644 index 0000000..41b1d24 --- /dev/null +++ b/src/cfsp/core/helper/CFSPHelperManager.cpp @@ -0,0 +1,15 @@ +#include "CFSPHelperManager.h" + +namespace coral_fans::cfsp::helper { +CFSPHelperManager& CFSPHelperManager::getInstance() { + static CFSPHelperManager instance; + return instance; +} + +void CFSPHelperManager::SimPlayerHelperHook() { + saveHelperHook(); + autoFuncHelperRegister(); + scheduleHelperHook(); + operateHelperHook(); +} +} // namespace coral_fans::cfsp::helper \ No newline at end of file diff --git a/src/cfsp/core/helper/CFSPHelperManager.h b/src/cfsp/core/helper/CFSPHelperManager.h new file mode 100644 index 0000000..68830cb --- /dev/null +++ b/src/cfsp/core/helper/CFSPHelperManager.h @@ -0,0 +1,27 @@ +#include "ll/api/event/ListenerBase.h" +#include "mc/world/level/storage/DBStorage.h" + +namespace coral_fans::cfsp::helper { +class CFSPHelperManager { +private: + ll::event::ListenerPtr playerJoinEventListener; + +public: + bool buildMutex = false; + DBStorage* dbStorage = nullptr; + +public: + static CFSPHelperManager& getInstance(); + +private: + void saveHelperHook(); + void autoFuncHelperRegister(); + void scheduleHelperHook(); + void operateHelperHook(); + void dbStorageHook(); + +public: + void SimPlayerHelperHook(); + void SimPlayerHelperHookWhenLoad(); +}; +} // namespace coral_fans::cfsp::helper \ No newline at end of file diff --git a/src/cfsp/core/helper/CFSPOperateHelper.cpp b/src/cfsp/core/helper/CFSPOperateHelper.cpp new file mode 100644 index 0000000..d64cc38 --- /dev/null +++ b/src/cfsp/core/helper/CFSPOperateHelper.cpp @@ -0,0 +1,49 @@ +#include "CFSPHelperManager.h" +#include "cfsp/core/manager/CFSPManager.h" +#include "glm/fwd.hpp" +#include "ll/api/memory/Hook.h" +#include "mc/server/SimulatedPlayer.h" +#include "mc/world/level/block/Block.h" + +namespace coral_fans::cfsp::helper { +LL_TYPE_INSTANCE_HOOK( + CFSPBuildHelperHook, + ll::memory::HookPriority::Normal, + Block, + &Block::use, + bool, + Player& player, + ::BlockPos const& pos, + uchar face, + ::std::optional<::Vec3> hit +) { + if (CFSPHelperManager::getInstance().buildMutex) return false; + return origin(player, pos, face, hit); +} + +LL_TYPE_INSTANCE_HOOK( + CFSPLookHelperHook, + ll::memory::HookPriority::Normal, + SimulatedPlayer, + &SimulatedPlayer::tick, + bool, + ::BlockSource& region +) { + bool ori = origin(region); + auto cfsp = manager::CFSPManager::getInstance().tryGetCFSP(this); + if (cfsp.has_value() && std::holds_alternative<::sim::VoidMoveIntent>(this->mSimulatedMovement->mType.get())) { + auto pos = cfsp.value()->mSaveData.lookAtOffSet + this->getEyePos(); + if (std::holds_alternative<::sim::ContinuousLookAtPositionIntent>(this->mLookAtIntent->mType.get())) + [[likely]] { + std::get<::sim::ContinuousLookAtPositionIntent>(this->mLookAtIntent->mType.get()).mPosition = + glm::vec3(pos.x, pos.y, pos.z); + } else cfsp.value()->lookAt(pos); + } + return ori; +} + +void CFSPHelperManager::operateHelperHook() { + CFSPBuildHelperHook ::hook(); + CFSPLookHelperHook ::hook(); +} +} // namespace coral_fans::cfsp::helper \ No newline at end of file diff --git a/src/cfsp/core/helper/CFSPSaveHelper.cpp b/src/cfsp/core/helper/CFSPSaveHelper.cpp new file mode 100644 index 0000000..6f8f3f0 --- /dev/null +++ b/src/cfsp/core/helper/CFSPSaveHelper.cpp @@ -0,0 +1,38 @@ +#include "CFSPHelperManager.h" +#include "cfsp/core/manager/CFSPManager.h" +#include "ll/api/memory/Hook.h" +#include "mc/server/commands/StopCommand.h" +#include "mc/world/actor/provider/ActorEquipment.h" +#include "mc/world/level/storage/LevelStorage.h" + +namespace coral_fans::cfsp::helper { +LL_TYPE_INSTANCE_HOOK( + CFSPSaveHelperHook, + ::ll::memory::HookPriority::Normal, + LevelStorage, + &LevelStorage::save, + void, + ::Player& player +) { + origin(player); + if (auto cfsp = manager::CFSPManager::getInstance().tryGetCFSP(&player); cfsp.has_value()) cfsp.value()->save(); +} + +LL_TYPE_INSTANCE_HOOK( + CFSPSaveHelperHook2, + ll::memory::HookPriority::Normal, + StopCommand, + &StopCommand::$execute, + void, + CommandOrigin const& arg1, + CommandOutput& arg2 +) { + manager::CFSPManager::getInstance().saveSps(); + origin(arg1, arg2); +} + +void CFSPHelperManager::saveHelperHook() { + CFSPSaveHelperHook ::hook(); + CFSPSaveHelperHook2::hook(); +} +} // namespace coral_fans::cfsp::helper \ No newline at end of file diff --git a/src/cfsp/core/helper/CFSPSchduleHelper.cpp b/src/cfsp/core/helper/CFSPSchduleHelper.cpp new file mode 100644 index 0000000..6d5a3bc --- /dev/null +++ b/src/cfsp/core/helper/CFSPSchduleHelper.cpp @@ -0,0 +1,14 @@ +#include "CFSPHelperManager.h" +#include "cfsp/base/Schedule.h" +#include "ll/api/memory/Hook.h" +#include "mc/world/level/Level.h" + + +namespace coral_fans::cfsp::helper { +LL_TYPE_INSTANCE_HOOK(CFSPScheduleHelperHook, ll::memory::HookPriority::Normal, Level, &Level::$tick, void) { + base::Schedule::getInstance().getSchedule()->tick(); + origin(); +} + +void CFSPHelperManager::scheduleHelperHook() { CFSPScheduleHelperHook ::hook(); } +} // namespace coral_fans::cfsp::helper \ No newline at end of file diff --git a/src/cfsp/core/manager/CFSPGroupManager.cpp b/src/cfsp/core/manager/CFSPGroupManager.cpp new file mode 100644 index 0000000..3876f6b --- /dev/null +++ b/src/cfsp/core/manager/CFSPGroupManager.cpp @@ -0,0 +1,206 @@ +#include "CFSPManager.h" +#include "cfsp/CFSP.h" +#include "cfsp/base/OperateResult.h" +#include "cfsp/base/Utils.h" +#include "cfsp/core/group/CFSPGroup.h" +#include "cfsp/core/simPlayer/SimPlayerPermission.h" +#include "ll/api/command/CommandRegistrar.h" +#include "ll/api/i18n/I18n.h" +#include +#include + +namespace coral_fans::cfsp::manager { +#define IF_HAS_ARGS(...) , ##__VA_ARGS__ + +#define GROUP_FUNC_FROM_SP(GFUNC, SPFUNC, ...) \ + std::vector CFSPManager::group##GFUNC( \ + Player* player, \ + std::string const& gname IF_HAS_ARGS(__VA_ARGS__) \ + ) { \ + using ll::i18n_literals::operator""_tr; \ + auto checkResult = this->baseCheck(player, this->mPermissionConfig.group##GFUNC); \ + if (!checkResult) return {std::move(checkResult)}; \ + auto it = this->mGroupMap.find(gname); \ + if (it == this->mGroupMap.end()) return {base::OperateResult::error("manager.fail.groupNotExisted"_tr())}; \ + if (checkResult.mType != base::OperateResult::Type::Success \ + && !it->second->hasPermission(player, group::GroupPermission::GFUNC)) \ + return {base::OperateResult::error("manager.fail.permissionDenied"_tr())}; \ + std::vector res; \ + res.reserve(it->second->mData.splist.size()); \ + for (auto& spname : it->second->mData.splist) res.emplace_back(sp##SPFUNC); \ + return res; \ + } + +base::OperateResult CFSPManager::groupCreate(Player* player, std::string const& gname) { + using ll::i18n_literals::operator""_tr; + if (auto checkResult = this->canCreateGroup(player); !checkResult) return checkResult; + if (this->mGroupMap.find(gname) != this->mGroupMap.end()) + return base::OperateResult::error("manager.fail.groupHasExisted"_tr()); + // check: name + if (!this->tryCreateDiretory(cfsp::CFSP::getInstance().getSelf().getDataDir() / "group", gname)) + return base::OperateResult::error("manager.fail.includeIllegalChar"_tr()); + group::GroupData groupData; + groupData.name = gname; + groupData.ownerUuid = player ? player->getUuid().asString() : ""; + auto group = std::make_shared(groupData); + group->save(); + this->mGroupMap.emplace(gname, group); + + ll::command::CommandRegistrar::getInstance().addSoftEnumValues("cfspGroup", {gname}); + return base::OperateResult::success("manager.success.create"_tr()); +} + +std::string CFSPManager::listGroup(const Player* player) { + using ll::i18n_literals::operator""_tr; + std::string res = ""; + if (this->isManager(player)) { + res += "manager.info.groupCount"_tr(this->mGroupMap.size()); + for (auto group : this->mGroupMap) { + res += "manager.info.group"_tr(group.first, base::utils::tryGetPlayerName(group.second->mData.ownerUuid)); + for (auto spname : group.second->mData.splist) res += " " + spname + '\n'; + } + } else { + auto uuid = player->getUuid().asString(); + int count = 0; + for (auto group : this->mGroupMap) { + if (group.second->mData.ownerUuid != uuid) continue; + count++; + res += "manager.info.group"_tr(group.first, base::utils::tryGetPlayerName(group.second->mData.ownerUuid)); + for (auto spname : group.second->mData.splist) res += " " + spname + '\n'; + } + res = "manager.info.groupCount"_tr(count) + res; + } + return res; +} + +base::OperateResult CFSPManager::groupDelete(Player* player, std::string const& gname) { + using ll::i18n_literals::operator""_tr; + auto checkResult = this->baseCheck(player, this->mPermissionConfig.groupDelete); + if (!checkResult) return checkResult; + auto it = this->mGroupMap.find(gname); + if (it == this->mGroupMap.end()) return base::OperateResult::error("manager.fail.groupNotExisted"_tr()); + if (checkResult.mType != base::OperateResult::Type::Success + && !it->second->hasPermission(player, group::GroupPermission::Delete)) + return base::OperateResult::error("manager.fail.permissionDenied"_tr()); + ll::command::CommandRegistrar::getInstance().removeSoftEnumValues("cfspGroup", {gname}); + this->mGroupMap.erase(it); + try { + std::filesystem::remove_all( + CFSP::getInstance().getSelf().getDataDir() / "group" + / reinterpret_cast(it->second->mData.name.c_str()) + ); + } catch (...) { + return base::OperateResult::error("manager.error.deleteFileFail"_tr()); + } + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult CFSPManager::groupAddSp(Player* player, std::string const& gname, std::string const& spname) { + using ll::i18n_literals::operator""_tr; + auto checkResult = this->baseCheck(player, this->mPermissionConfig.groupAddSp); + if (!checkResult) return checkResult; + auto it = this->mGroupMap.find(gname); + if (it == this->mGroupMap.end()) return base::OperateResult::error("manager.fail.groupNotExisted"_tr()); + auto spIt = this->mOnlineSpMap.find(spname); + if (spIt == this->mOnlineSpMap.end()) { + spIt = this->mOfflineSpMap.find(spname); + if (spIt == this->mOfflineSpMap.end()) return base::OperateResult::error("manager.fail.spNotExisted"_tr()); + } + if (checkResult.mType != base::OperateResult::Type::Success + && (!it->second->hasPermission(player, group::GroupPermission::AddSp) + || !spIt->second->hasPermission(player, simulated_player::SimPlayerPermission::BeAddedToGroup))) + return base::OperateResult::error("manager.fail.permissionDenied"_tr()); + it->second->mData.splist.emplace(spname); + it->second->save(); + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult CFSPManager::groupRmSp(Player* player, std::string const& gname, std::string const& spname) { + using ll::i18n_literals::operator""_tr; + auto checkResult = this->baseCheck(player, this->mPermissionConfig.groupRmSp); + if (!checkResult) return checkResult; + auto it = this->mGroupMap.find(gname); + if (it == this->mGroupMap.end()) return base::OperateResult::error("manager.fail.groupNotExisted"_tr()); + auto spIt = it->second->mData.splist.find(spname); + if (spIt == it->second->mData.splist.end()) + return base::OperateResult::error("manager.fail.spNotExistedInGroup"_tr()); + if (checkResult.mType != base::OperateResult::Type::Success + && !it->second->hasPermission(player, group::GroupPermission::AddSp)) + return base::OperateResult::error("manager.fail.permissionDenied"_tr()); + it->second->mData.splist.erase(spIt); + it->second->save(); + return base::OperateResult::success("manager.success.operate"_tr()); +} + +std ::vector CFSPManager ::groupDeleteSp(Player* player, std ::string const& gname, bool force) { + using ll ::i18n_literals ::operator""_tr; + auto checkResult = this->baseCheck(player, this->mPermissionConfig.groupDeleteSp); + if (!checkResult) return {std ::move(checkResult)}; + auto it = this->mGroupMap.find(gname); + if (it == this->mGroupMap.end()) return {base ::OperateResult ::error("manager.fail.groupNotExisted"_tr())}; + if (checkResult.mType != base ::OperateResult ::Type ::Success + && !it->second->hasPermission(player, group ::GroupPermission ::DeleteSp)) + return {base ::OperateResult ::error("manager.fail.permissionDenied"_tr())}; + std::unordered_set splist = {}, deleteFailList = {}; + std::swap(splist, it->second->mData.splist); + std ::vector res; + res.reserve(it->second->mData.splist.size()); + for (auto& spname : splist) { + res.emplace_back(spDelete(player, spname, force, true)); + if (res.back().mType == base::OperateResult::Type::Swing) deleteFailList.emplace(spname); + } + std::swap(deleteFailList, it->second->mData.splist); + it->second->save(); + return res; +} + +std ::vector CFSPManager::groupInfo(Player* player, std::string const& gname) { + using ll::i18n_literals::operator""_tr; + if (!isAllowed(player)) return {base::OperateResult::error("manager.fail.permissionDenied"_tr())}; + auto it = this->mGroupMap.find(gname); + if (it == this->mGroupMap.end()) return {base::OperateResult::error("manager.fail.groupNotExisted"_tr())}; + if (!isManager(player) && !it->second->hasPermission(player, group::GroupPermission::None)) + return {base::OperateResult::error("manager.fail.permissionDenied"_tr())}; + std::vector res; + res.reserve(it->second->mData.splist.size()); + for (auto& spname : it->second->mData.splist) res.emplace_back(this->spInfo(player, spname, true)); + return res; +} + +std ::vector CFSPManager::groupInvInfo(Player* player, std::string const& gname) { + using ll::i18n_literals::operator""_tr; + if (!isAllowed(player)) return {base::OperateResult::error("manager.fail.permissionDenied"_tr())}; + auto it = this->mGroupMap.find(gname); + if (it == this->mGroupMap.end()) return {base::OperateResult::error("manager.fail.groupNotExisted"_tr())}; + if (!isManager(player) && !it->second->hasPermission(player, group::GroupPermission::None)) + return {base::OperateResult::error("manager.fail.permissionDenied"_tr())}; + std::vector res; + res.reserve(it->second->mData.splist.size()); + for (auto& spname : it->second->mData.splist) res.emplace_back(spInvInfo(player, spname, true)); + return res; +} + +GROUP_FUNC_FROM_SP(Spawn, Spawn(player, spname, true)) +GROUP_FUNC_FROM_SP(Despawn, Despawn(player, spname, true)) +GROUP_FUNC_FROM_SP(Respawn, Respawn(player, spname, true)) +GROUP_FUNC_FROM_SP(Stop, Stop(player, spname, true)) +GROUP_FUNC_FROM_SP(Drop, Drop(player, spname, times, interval, true), int times, int interval) +GROUP_FUNC_FROM_SP(DropInv, DropInv(player, spname, times, interval, true), int times, int interval) +GROUP_FUNC_FROM_SP(Sneaking, Sneaking(player, spname, enable, true), std::optional enable) +GROUP_FUNC_FROM_SP(Swimming, Swimming(player, spname, enable, true), std::optional enable) +GROUP_FUNC_FROM_SP(Flying, Flying(player, spname, enable, true), std::optional enable) +GROUP_FUNC_FROM_SP(Sprinting, Sprinting(player, spname, enable, true), std::optional enable) +GROUP_FUNC_FROM_SP(Attack, Attack(player, spname, times, interval, true), int times, int interval) +GROUP_FUNC_FROM_SP(Build, Build(player, spname, times, interval, true), int times, int interval) +GROUP_FUNC_FROM_SP(Interact, Interact(player, spname, times, interval, true), int times, int interval) +GROUP_FUNC_FROM_SP(Jump, Jump(player, spname, times, interval, true), int times, int interval) +GROUP_FUNC_FROM_SP(Use, Use(player, spname, _long, times, interval, true), int _long, int times, int interval) +GROUP_FUNC_FROM_SP(Destroy, Destroy(player, spname, _long, times, interval, true), int _long, int times, int interval) +GROUP_FUNC_FROM_SP(Chat, Chat(player, spname, message, true), std::string const& message) +GROUP_FUNC_FROM_SP(RunCmd, RunCmd(player, spname, message, true), std::string const& message) +GROUP_FUNC_FROM_SP(LookAt, LookAt(player, spname, pos, true), Vec3 const& pos) +GROUP_FUNC_FROM_SP(MoveTo, MoveTo(player, spname, pos, speed, true), Vec3 const& pos, float speed) +GROUP_FUNC_FROM_SP(NavTo, NavTo(player, spname, pos, speed, true), Vec3 const& pos, float speed) +GROUP_FUNC_FROM_SP(Tp, Tp(player, spname, pos, dimId, true), Vec3 pos, std::optional dimId) +GROUP_FUNC_FROM_SP(Select, Select(player, spname, id, true), int id) +} // namespace coral_fans::cfsp::manager \ No newline at end of file diff --git a/src/cfsp/core/manager/CFSPManager.cpp b/src/cfsp/core/manager/CFSPManager.cpp new file mode 100644 index 0000000..9529141 --- /dev/null +++ b/src/cfsp/core/manager/CFSPManager.cpp @@ -0,0 +1,268 @@ +#include "CFSPManager.h" +#include "cfsp/CFSP.h" +#include "cfsp/ConFig.h" +#include "cfsp/core/fix/CFSPFixManager.h" +#include "cfsp/core/group/CFSPGroup.h" +#include "cfsp/core/helper/CFSPHelperManager.h" +#include "cfsp/core/simPlayer/SimPlayerPermission.h" +#include "cfsp/core/simPlayer/SimPlayerSaveData.h" +#include "cfsp/entrance/command/ComandManager.h" +#include "ll/api/Config.h" +#include "ll/api/command/CommandRegistrar.h" +#include "mc/world/actor/player/Player.h" +#include +#include +#include +#include + + +namespace coral_fans::cfsp::manager { +CFSPManager& CFSPManager::getInstance() { + static CFSPManager instance; + return instance; +} + +config::Config& CFSPManager::getConfig() { return this->mConfig; } + +config::PermissionConfig& CFSPManager::getPermissionConfig() { return this->mPermissionConfig; } + +bool CFSPManager::getAutoJoin() { return this->mConfig.autoJoin; } + +bool CFSPManager::getAutoRespawn() { return this->mConfig.autoRespawn; } + +bool CFSPManager::getAutoDespawn() { return this->mConfig.autoDespawn; } + +void CFSPManager::setAutoJoin(bool isOpen) { + this->mConfig.autoJoin = isOpen; + ll::config::saveConfig( + manager::CFSPManager::getInstance().getConfig(), + cfsp::CFSP::getInstance().getSelf().getConfigDir() / "config.json" + ); +} + +void CFSPManager::setAutoRespawn(bool isOpen) { + this->mConfig.autoRespawn = isOpen; + ll::config::saveConfig( + manager::CFSPManager::getInstance().getConfig(), + cfsp::CFSP::getInstance().getSelf().getConfigDir() / "config.json" + ); +} + +void CFSPManager::setAutoDespawn(bool isOpen) { + this->mConfig.autoDespawn = isOpen; + ll::config::saveConfig( + manager::CFSPManager::getInstance().getConfig(), + cfsp::CFSP::getInstance().getSelf().getConfigDir() / "config.json" + ); +} + +bool CFSPManager::tryCreateDiretory(const std::filesystem::path& basePath, const std::string& dir) { + if (dir.empty()) return false; + if (dir[0] == ' ' || dir.ends_with(' ')) return false; + auto path = basePath / reinterpret_cast(dir.c_str()); + try { + if (!std::filesystem::exists(basePath)) { + std::filesystem::create_directories(basePath); + } + return std::filesystem::exists(path) || std::filesystem::create_directory(path); + } catch (...) { + return false; + } +} + +void CFSPManager::save() { + ll::config::saveConfig(this->mConfig, CFSP::getInstance().getSelf().getConfigDir() / "config.json"); +} + +void CFSPManager::loadSpSaveData() { + auto dir = CFSP::getInstance().getSelf().getDataDir() / "simplayer"; + if (!std::filesystem::exists(dir)) std::filesystem::create_directories(dir); + std::vector splist; + for (auto const& path : std::filesystem::directory_iterator(dir)) { + if (path.is_directory()) { + simulated_player::SimPlayerSaveData playerData; + if (ll::config::loadConfig(playerData, path.path() / "data.json") + && playerData.name + == std::string(reinterpret_cast(path.path().filename().u8string().c_str()))) { + if (playerData.isOnline && !this->mConfig.autoJoin) { + playerData.isOnline = false; + ll::config::saveConfig(playerData, path.path() / "data.json"); + } + this->mOfflineSpMap[playerData.name] = std::make_shared(playerData); + splist.emplace_back(playerData.name); + } + } + } + ll::command::CommandRegistrar::getInstance().tryRegisterSoftEnum("cfspOfflineSp", splist); + ll::command::CommandRegistrar::getInstance().tryRegisterSoftEnum("cfspSplist", splist); + ll::command::CommandRegistrar::getInstance().tryRegisterSoftEnum("cfspOnlineSp", {}); + ll::command::CommandRegistrar::getInstance().tryRegisterSoftEnum("cfspDeadSp", {}); +} + +void CFSPManager::loadGroupData() { + auto dir = CFSP::getInstance().getSelf().getDataDir() / "group"; + if (!std::filesystem::exists(dir)) std::filesystem::create_directories(dir); + std::vector cfspGrouplist; + for (auto const& path : std::filesystem::directory_iterator(dir)) { + if (path.is_directory()) { + group::GroupData groupData; + if (ll::config::loadConfig(groupData, path.path() / "data.json") + && groupData.name + == std::string(reinterpret_cast(path.path().filename().u8string().c_str()))) { + bool isChange = false; + std::erase_if(groupData.splist, [this, &isChange](const auto& spName) { + if (this->mOfflineSpMap.find(spName) == this->mOfflineSpMap.end()) { + isChange = true; + return true; + } + return false; + }); + if (isChange) ll::config::saveConfig(groupData, path.path() / "data.json"); + this->mGroupMap[groupData.name] = std::make_shared(groupData); + cfspGrouplist.emplace_back(groupData.name); + } + } + } + ll::command::CommandRegistrar::getInstance().tryRegisterSoftEnum("cfspGroup", cfspGrouplist); +} + +bool CFSPManager::init() { + const auto& logger = cfsp::CFSP::getInstance().getSelf().getLogger(); + try { + const auto& configFilePath = cfsp::CFSP::getInstance().getSelf().getConfigDir() / "config.json"; + if (!ll::config::loadConfig(manager::CFSPManager::getInstance().getConfig(), configFilePath)) { + logger.warn("Cannot load configurations from {}", configFilePath); + logger.info("Saving default configurations"); + if (!ll::config::saveConfig(manager::CFSPManager::getInstance().getConfig(), configFilePath)) { + logger.error("Cannot save default configurations to {}", configFilePath); + return false; + } + } + } catch (...) { + logger.error("Failed to load config.json. Please check the file!"); + return false; + } + try { + const auto& configFilePath = cfsp::CFSP::getInstance().getSelf().getConfigDir() / "commandPermission.json"; + if (!ll::config::loadConfig(this->mPermissionConfig, configFilePath)) { + logger.warn("Cannot load command permission from {}", configFilePath); + logger.info("Saving default command permission"); + if (!ll::config::saveConfig(this->mPermissionConfig, configFilePath)) { + logger.error("Cannot save default command permission to {}", configFilePath); + return false; + } + } + return true; + } catch (...) { + logger.error("Failed to load commandPermission.json. Please check the file!"); + return false; + } +} + +void CFSPManager::load() { + loadSpSaveData(); + loadGroupData(); + if (this->mConfig.enabled) command::ComandManager::getInstance().registerCommand(this->mConfig.permission); + helper::CFSPHelperManager::getInstance().SimPlayerHelperHook(); + fix::CFSPFixManager::getInstance().cfspBugFixHook(); +} + +std::optional> CFSPManager::tryGetCFSP(Player* sp) { + if (!sp->isSimulatedPlayer()) return std::nullopt; + auto it = mOnlineSpMap.find(*sp->mName); + if (it != mOnlineSpMap.end() && it->second->mSaveData.uniqueId == sp->getOrCreateUniqueID().rawID) + return it->second; + else return std::nullopt; +} + +std::optional> CFSPManager::tryGetCFSP(Actor* sp) { + if (sp->isPlayer()) { + return this->tryGetCFSP(static_cast(sp)); + } + return std::nullopt; +} + +std::optional> CFSPManager::tryGetCFSP(std::string const& name) { + if (auto it = this->mOnlineSpMap.find(name); it != this->mOnlineSpMap.end()) return it->second; + if (auto it = this->mOfflineSpMap.find(name); it != this->mOfflineSpMap.end()) return it->second; + return std::nullopt; +} + +std::optional> CFSPManager::tryGetCFSPGroup(std::string const& name) { + if (auto it = this->mGroupMap.find(name); it != this->mGroupMap.end()) return it->second; + return std::nullopt; +} + +std::vector CFSPManager::getSpNamesSorted(const Player* player) { + std::vector res; + std::string uuid = player->getUuid().asString(); + for (auto i : mOnlineSpMap) { + if (i.second->mSaveData.ownerUuid == uuid || i.second->mSaveData.permission.contains(uuid)) + res.emplace_back(i.first); + } + for (auto i : mOfflineSpMap) { + if (i.second->mSaveData.ownerUuid == uuid || i.second->mSaveData.permission.contains(uuid)) + res.emplace_back(i.first); + } + std::sort(res.begin(), res.end()); + return res; +} + +std::vector CFSPManager::getGroupNamesSorted(const Player* player) { + std::vector res; + std::string uuid = player->getUuid().asString(); + for (auto i : mGroupMap) { + if (i.second->mData.ownerUuid == uuid || i.second->mData.permission.contains(uuid)) res.emplace_back(i.first); + } + std::sort(res.begin(), res.end()); + return res; +} + +std::vector CFSPManager::getPublicSpNamesSorted() { + std::vector res; + for (auto i : mOnlineSpMap) { + if (i.second->mSaveData.publicPermission) res.emplace_back(i.first); + } + for (auto i : mOfflineSpMap) { + if (i.second->mSaveData.publicPermission) res.emplace_back(i.first); + } + std::sort(res.begin(), res.end()); + return res; +} + +std::vector CFSPManager::getAllSpNamesSorted() { + std::vector res; + for (auto i : mOnlineSpMap) res.emplace_back(i.first); + for (auto i : mOfflineSpMap) res.emplace_back(i.first); + std::sort(res.begin(), res.end()); + return res; +} + +std::vector CFSPManager::getAllGroupNamesSorted() { + std::vector res; + for (auto i : mGroupMap) res.emplace_back(i.first); + std::sort(res.begin(), res.end()); + return res; +} + +std::vector CFSPManager::getCanBeAddedSpList(const Player* player) { + std::vector res; + auto uuid = player->getUuid().asString(); + for (auto i : mOnlineSpMap) + if (i.second->mSaveData.ownerUuid == uuid) res.emplace_back(i.first); + else if (auto it = i.second->mSaveData.permission.find(uuid); + it != i.second->mSaveData.permission.end() + && it->second & (uint)simulated_player::SimPlayerPermission::BeAddedToGroup) { + res.emplace_back(i.first); + } + for (auto i : mOfflineSpMap) + if (i.second->mSaveData.ownerUuid == uuid) res.emplace_back(i.first); + else if (auto it = i.second->mSaveData.permission.find(uuid); + it != i.second->mSaveData.permission.end() + && it->second & (uint)simulated_player::SimPlayerPermission::BeAddedToGroup) { + res.emplace_back(i.first); + } + std::sort(res.begin(), res.end()); + return res; +} +} // namespace coral_fans::cfsp::manager \ No newline at end of file diff --git a/src/cfsp/core/manager/CFSPManager.h b/src/cfsp/core/manager/CFSPManager.h new file mode 100644 index 0000000..5311a86 --- /dev/null +++ b/src/cfsp/core/manager/CFSPManager.h @@ -0,0 +1,235 @@ +#pragma once + +#include "cfsp/ConFig.h" +#include "cfsp/PermissionConfig.h" +#include "cfsp/base/OperateResult.h" +#include "cfsp/core/group/CFSPGroup.h" +#include "cfsp/core/simPlayer/SimPlayer.h" +#include "ll/api/base/StdInt.h" +#include "mc/deps/core/math/Vec3.h" +#include +#include +#include +#include + + +namespace coral_fans::cfsp::manager { + +class CFSPManager { +private: + std::unordered_map> + mOfflineSpMap; // <假人名, 不在线的CF假人对象> + std::unordered_map> + mOnlineSpMap; // <假人名, 在线的CF假人对象> + std::unordered_map> mGroupMap; //<假人组名, 假人组对象> + config::Config mConfig; + config::PermissionConfig mPermissionConfig; + +public: + static CFSPManager& getInstance(); + void save(); + void autoJoin(); + void autoDespawn(std::shared_ptr cfsp); + config::Config& getConfig(); + config::PermissionConfig& getPermissionConfig(); + bool getAutoJoin(); + bool getAutoRespawn(); + bool getAutoDespawn(); + void setAutoJoin(bool); + void setAutoRespawn(bool); + void setAutoDespawn(bool); + bool init(); + void load(); + +public: + bool isAllowed(const Player*); + bool isManager(const Player*); + base::OperateResult baseCheck(const Player*, config::FuncStruct); + base::OperateResult canCreatePlayer(const Player*); + base::OperateResult canSpawnPlayer(const Player*); + base::OperateResult canCreateGroup(const Player*); + uint getSpPermissionMask(std::optional level = std::nullopt); + uint getGroupPermissionMask(std::optional level = std::nullopt); + base::OperateResult spPerm( + const Player* player, + std::string spname, + uint perm, + bool enable, + std::optional targetUUid = std::nullopt + ); + base::OperateResult groupPerm( + const Player* player, + std::string gname, + uint perm, + bool enable, + std::optional targetUUid = std::nullopt + ); + +private: + bool tryCreateDiretory(const std::filesystem::path& basePath, const std::string& dir); + void loadSpSaveData(); + void loadGroupData(); + uint getSpBasePermissionMask(); + uint getSpPermissionMask(CommandPermissionLevel); + uint getGroupBasePermissionMask(); + uint getGroupPermissionMask(CommandPermissionLevel); + +public: + std::optional> tryGetCFSP(Actor* sp); + std::optional> tryGetCFSP(Player* sp); + std::optional> tryGetCFSP(std::string const& name); + std::optional> tryGetCFSPGroup(std::string const& name); + std::vector getSpNamesSorted(const Player*); + std::vector getGroupNamesSorted(const Player*); + std::vector getPublicSpNamesSorted(); + std::vector getAllSpNamesSorted(); + std::vector getAllGroupNamesSorted(); + std::vector getCanBeAddedSpList(const Player*); + std::string listOnlineSp(const Player*); + std::string listOfflineSp(const Player*); + std::string listGroup(const Player*); + +public: + void saveSps(); + base::OperateResult + spCreate(Player* player, std::string const& name, Vec3 const& pos, DimensionType dim, bool lockUniqueId = true); + base::OperateResult spSpawn(Player* player, std::string const& spname, bool nocheck = false); + base::OperateResult spDespawn(Player* player, std::string const& spname, bool nocheck = false); + base::OperateResult spRespawn(Player* player, std::string const& spname, bool nocheck = false); + base::OperateResult spDelete(Player* player, std::string const& spname, bool force = false, bool nocheck = false); + base::OperateResult spStop(Player* player, std::string const& spname, bool nocheck = false); + base::OperateResult spInfo(Player* player, std::string const& spname, bool nocheck = false); + base::OperateResult spLookAt(Player* player, std::string const& spname, Vec3 const& pos, bool nocheck = false); + + base::OperateResult spInvInfo(Player* player, std::string const& spname, bool nocheck = false); + base::OperateResult + spDrop(Player* player, std::string const& spname, int times = 1, int interval = 1, bool nocheck = false); + base::OperateResult + spDropInv(Player* player, std::string const& spname, int times = 1, int interval = 1, bool nocheck = false); + base::OperateResult spSwap(Player* player, std::string const& spname, bool nocheck = false); + base::OperateResult spSelect(Player* player, std::string const& spname, int id, bool nocheck = false); + + base::OperateResult spSneaking( + Player* player, + std::string const& spname, + std::optional enabled = std::nullopt, + bool nocheck = false + ); + base::OperateResult spSwimming( + Player* player, + std::string const& spname, + std::optional enabled = std::nullopt, + bool nocheck = false + ); + base::OperateResult spFlying( + Player* player, + std::string const& spname, + std::optional enabled = std::nullopt, + bool nocheck = false + ); + base::OperateResult spSprinting( + Player* player, + std::string const& spname, + std::optional enabled = std::nullopt, + bool nocheck = false + ); + + base::OperateResult + spAttack(Player* player, std::string const& spname, int times = 1, int interval = 1, bool nocheck = false); + base::OperateResult + spBuild(Player* player, std::string const& spname, int times = 1, int interval = 1, bool nocheck = false); + base::OperateResult + spInteract(Player* player, std::string const& spname, int times = 1, int interval = 1, bool nocheck = false); + base::OperateResult + spJump(Player* player, std::string const& spname, int times = 1, int interval = 1, bool nocheck = false); + base::OperateResult spUse( + Player* player, + std::string const& spname, + int _long = 10, + int times = 1, + int interval = 1, + bool nocheck = false + ); + base::OperateResult spDestroy( + Player* player, + std::string const& spname, + int _long = 1, + int times = 1, + int interval = 1, + bool nocheck = false + ); + + base::OperateResult + spChat(Player* player, std::string const& spname, std::string const& message, bool nocheck = false); + base::OperateResult + spRunCmd(Player* player, std::string const& spname, std::string const& cmd, bool nocheck = false); + + base::OperateResult + spMoveTo(Player* player, std::string const& spname, Vec3 const& pos, float speed = 4.3f, bool nocheck = false); + base::OperateResult + spNavTo(Player* player, std::string const& spname, Vec3 const& pos, float speed = 4.3f, bool nocheck = false); + base::OperateResult spTp( + Player* player, + std::string const& spname, + Vec3 pos, + std::optional dimId = std::nullopt, + bool nocheck = false + ); + +public: + base::OperateResult groupCreate(Player* player, std::string const& gname); + base::OperateResult groupDelete(Player* player, std::string const& gname); + base::OperateResult groupAddSp(Player* player, std::string const& gname, std::string const& spname); + base::OperateResult groupRmSp(Player* player, std::string const& gname, std::string const& spname); + std::vector groupInfo(Player* player, std::string const& gname); + std::vector groupInvInfo(Player* player, std::string const& gname); + + std::vector groupSpawn(Player* player, std::string const& gname); + std::vector groupDespawn(Player* player, std::string const& gname); + std::vector groupRespawn(Player* player, std::string const& gname); + std::vector groupDeleteSp(Player* player, std::string const& gname, bool force = false); + + std::vector groupStop(Player* player, std::string const& gname); + + std::vector + groupDrop(Player* player, std::string const& gname, int times = 1, int interval = 1); + std::vector + groupDropInv(Player* player, std::string const& gname, int times = 1, int interval = 1); + + std::vector + groupSneaking(Player* player, std::string const& gname, std::optional enabled = std::nullopt); + std::vector + groupSwimming(Player* player, std::string const& gname, std::optional enabled = std::nullopt); + std::vector + groupFlying(Player* player, std::string const& gname, std::optional enabled = std::nullopt); + std::vector + groupSprinting(Player* player, std::string const& gname, std::optional enabled = std::nullopt); + + std::vector + groupAttack(Player* player, std::string const& gname, int times = 1, int interval = 1); + std::vector + groupBuild(Player* player, std::string const& gname, int times = 1, int interval = 1); + std::vector + groupInteract(Player* player, std::string const& gname, int times = 1, int interval = 1); + std::vector + groupJump(Player* player, std::string const& gname, int times = 1, int interval = 1); + std::vector + groupUse(Player* player, std::string const& gname, int _long = 10, int times = 1, int interval = 1); + std::vector + groupDestroy(Player* player, std::string const& gname, int _long = 1, int times = 1, int interval = 1); + + std::vector groupChat(Player* player, std::string const& gname, std::string const& message); + std::vector groupRunCmd(Player* player, std::string const& gname, std::string const& message); + + std::vector groupLookAt(Player* player, std::string const& gname, Vec3 const& pos); + + std::vector + groupMoveTo(Player* player, std::string const& gname, Vec3 const& pos, float speed = 4.3f); + std::vector + groupNavTo(Player* player, std::string const& gname, Vec3 const& pos, float speed = 4.3f); + std::vector + groupTp(Player* player, std::string const& gname, Vec3 pos, std::optional dimId = std::nullopt); + + std::vector groupSelect(Player* player, std::string const& spname, int id); +}; +} // namespace coral_fans::cfsp::manager \ No newline at end of file diff --git a/src/cfsp/core/manager/CFSPPermissionManager.cpp b/src/cfsp/core/manager/CFSPPermissionManager.cpp new file mode 100644 index 0000000..25f69af --- /dev/null +++ b/src/cfsp/core/manager/CFSPPermissionManager.cpp @@ -0,0 +1,386 @@ +#include "CFSPManager.h" +#include "cfsp/base/OperateResult.h" +#include "cfsp/core/simPlayer/SimPlayer.h" +#include "cfsp/core/simPlayer/SimPlayerPermission.h" +#include "ll/api/i18n/I18n.h" +#include + +namespace coral_fans::cfsp::manager { +bool CFSPManager::isAllowed(const Player* player) { + if (!player) return true; + if (player->isSimulatedPlayer()) [[unlikely]] + return false; + switch (this->mConfig.listType) { + case coral_fans::cfsp::config::ListType::disabled: + return true; + case coral_fans::cfsp::config::ListType::blacklist: + if (this->mConfig.list.find(player->mName) != this->mConfig.list.end()) return false; + return true; + case coral_fans::cfsp::config::ListType::whitelist: + if (this->mConfig.list.find(player->mName) == this->mConfig.list.end()) return false; + return true; + } + return true; +} + +bool CFSPManager::isManager(const Player* player) { + return !player // 当player==null时,为控制台在执行命令 + || player->getCommandPermissionLevel() >= this->mConfig.adminPermission + || this->mConfig.superManagerList.contains(player->getUuid().asString()); +} + +base::OperateResult CFSPManager::baseCheck(const Player* player, config::FuncStruct func) { + using ll::i18n_literals::operator""_tr; + if (!func.enabled) [[unlikely]] + return base::OperateResult::error("manager.fail.funcUnabled"_tr()); + if (!isAllowed(player)) return base::OperateResult::error("manager.fail.permissionDenied"_tr()); + if (this->isManager(player)) return base::OperateResult::success(); + if (player->getCommandPermissionLevel() < func.permission) + return base::OperateResult::error("manager.fail.permissionDenied"_tr()); + return base::OperateResult(); +} + +base::OperateResult CFSPManager::canCreatePlayer(const Player* player) { + using ll::i18n_literals::operator""_tr; + if (auto checkResult = this->baseCheck(player, this->mPermissionConfig.spCreate); + checkResult.mType != base::OperateResult::Type::Swing) + return checkResult; + auto uuid = player->getUuid().asString(); + // check: maxOnline + if (this->mOnlineSpMap.size() >= this->mConfig.maxOnline) + return base::OperateResult::error("manager.fail.tooManyOnline"_tr(std::to_string(this->mConfig.maxOnline))); + // check: maxOnlinePerPlayer + unsigned long long spawnCount = 0, OwnCount = 0; + for (auto sp : this->mOnlineSpMap) { + if (sp.second->mSaveData.lastSpawnerUuid == uuid) spawnCount++; + if (sp.second->mSaveData.ownerUuid == uuid) OwnCount++; + } + if (spawnCount >= this->mConfig.maxOnlinePerPlayer) + return base::OperateResult::error( + "manager.fail.tooManyOnlinePerPlayer"_tr(std::to_string(this->mConfig.maxOnlinePerPlayer)) + ); + // check: maxOwn + for (auto sp : this->mOfflineSpMap) { + if (sp.second->mSaveData.ownerUuid == uuid) OwnCount++; + } + if (OwnCount >= this->mConfig.maxOwn) return base::OperateResult::error("manager.fail.tooManyOwnSp"_tr()); + return base::OperateResult::swing(); +} + +base::OperateResult CFSPManager::canSpawnPlayer(const Player* player) { + using ll::i18n_literals::operator""_tr; + if (auto checkResult = this->baseCheck(player, this->mPermissionConfig.spSpawn); + checkResult.mType != base::OperateResult::Type::Swing) + return checkResult; + // check: maxOnline + auto uuid = player ? player->getUuid().asString() : ""; + if (this->mOnlineSpMap.size() >= this->mConfig.maxOnline) + return base::OperateResult::error("manager.fail.tooManyOnline"_tr(std::to_string(this->mConfig.maxOnline))); + // check: maxOnlinePerPlayer + unsigned long long spawnCount = 0; + for (auto sp : this->mOnlineSpMap) + if (sp.second->mSaveData.lastSpawnerUuid == uuid) spawnCount++; + if (spawnCount >= this->mConfig.maxOnlinePerPlayer) + return base::OperateResult::error( + "manager.fail.tooManyOnlinePerPlayer"_tr(std::to_string(this->mConfig.maxOnlinePerPlayer)) + ); + return base::OperateResult::swing(); +} + +base::OperateResult CFSPManager::canCreateGroup(const Player* player) { + using ll::i18n_literals::operator""_tr; + if (auto checkResult = this->baseCheck(player, this->mPermissionConfig.groupCreate)) return checkResult; + auto uuid = player->getUuid().asString(); + unsigned long long count = 0; + for (auto group : this->mGroupMap) { + if (group.second->mData.ownerUuid == uuid) count++; + } + if (count >= this->mConfig.maxGroup) return base::OperateResult::error("manager.fail.tooManyOwnGroup"_tr()); + return base::OperateResult::swing(); +} + +uint CFSPManager::getSpBasePermissionMask() { + uint perm = 0; + if (this->mPermissionConfig.spSpawn.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Spawn; + if (this->mPermissionConfig.spDespawn.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Despawn; + if (this->mPermissionConfig.spRespawn.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Respawn; + if (this->mPermissionConfig.spDelete.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Delete; + if (this->mPermissionConfig.spStop.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Stop; + if (this->mPermissionConfig.spDrop.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Drop; + if (this->mPermissionConfig.spDropInv.enabled) perm |= (uint)simulated_player::SimPlayerPermission::DropInv; + if (this->mPermissionConfig.spSwap.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Swap; + if (this->mPermissionConfig.spSneaking.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Sneaking; + if (this->mPermissionConfig.spSwimming.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Swimming; + if (this->mPermissionConfig.spFlying.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Flying; + if (this->mPermissionConfig.spSprinting.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Sprinting; + if (this->mPermissionConfig.spAttack.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Attack; + if (this->mPermissionConfig.spBuild.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Build; + if (this->mPermissionConfig.spInteract.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Interact; + if (this->mPermissionConfig.spJump.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Jump; + if (this->mPermissionConfig.spUse.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Use; + if (this->mPermissionConfig.spDestroy.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Destroy; + if (this->mPermissionConfig.spChat.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Chat; + if (this->mPermissionConfig.spRunCmd.enabled) perm |= (uint)simulated_player::SimPlayerPermission::RunCmd; + if (this->mPermissionConfig.spSelect.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Select; + if (this->mPermissionConfig.spLookAt.enabled) perm |= (uint)simulated_player::SimPlayerPermission::LookAt; + if (this->mPermissionConfig.spMoveTo.enabled) perm |= (uint)simulated_player::SimPlayerPermission::MoveTo; + if (this->mPermissionConfig.spNavTo.enabled) perm |= (uint)simulated_player::SimPlayerPermission::NavTo; + if (this->mPermissionConfig.spTp.enabled) perm |= (uint)simulated_player::SimPlayerPermission::Tp; + return perm; +} + +uint CFSPManager::getSpPermissionMask(CommandPermissionLevel level) { + uint perm = 0; + if (level >= this->mPermissionConfig.spSpawn.permission) perm |= (uint)simulated_player::SimPlayerPermission::Spawn; + if (level >= this->mPermissionConfig.spDespawn.permission) + perm |= (uint)simulated_player::SimPlayerPermission::Despawn; + if (level >= this->mPermissionConfig.spRespawn.permission) + perm |= (uint)simulated_player::SimPlayerPermission::Respawn; + if (level >= this->mPermissionConfig.spDelete.permission) + perm |= (uint)simulated_player::SimPlayerPermission::Delete; + if (level >= this->mPermissionConfig.spStop.permission) perm |= (uint)simulated_player::SimPlayerPermission::Stop; + if (level >= this->mPermissionConfig.spDrop.permission) perm |= (uint)simulated_player::SimPlayerPermission::Drop; + if (level >= this->mPermissionConfig.spDropInv.permission) + perm |= (uint)simulated_player::SimPlayerPermission::DropInv; + if (level >= this->mPermissionConfig.spSwap.permission) perm |= (uint)simulated_player::SimPlayerPermission::Swap; + if (level >= this->mPermissionConfig.spSneaking.permission) + perm |= (uint)simulated_player::SimPlayerPermission::Sneaking; + if (level >= this->mPermissionConfig.spSwimming.permission) + perm |= (uint)simulated_player::SimPlayerPermission::Swimming; + if (level >= this->mPermissionConfig.spFlying.permission) + perm |= (uint)simulated_player::SimPlayerPermission::Flying; + if (level >= this->mPermissionConfig.spSprinting.permission) + perm |= (uint)simulated_player::SimPlayerPermission::Sprinting; + if (level >= this->mPermissionConfig.spAttack.permission) + perm |= (uint)simulated_player::SimPlayerPermission::Attack; + if (level >= this->mPermissionConfig.spBuild.permission) perm |= (uint)simulated_player::SimPlayerPermission::Build; + if (level >= this->mPermissionConfig.spInteract.permission) + perm |= (uint)simulated_player::SimPlayerPermission::Interact; + if (level >= this->mPermissionConfig.spJump.permission) perm |= (uint)simulated_player::SimPlayerPermission::Jump; + if (level >= this->mPermissionConfig.spUse.permission) perm |= (uint)simulated_player::SimPlayerPermission::Use; + if (level >= this->mPermissionConfig.spDestroy.permission) + perm |= (uint)simulated_player::SimPlayerPermission::Destroy; + if (level >= this->mPermissionConfig.spChat.permission) perm |= (uint)simulated_player::SimPlayerPermission::Chat; + if (level >= this->mPermissionConfig.spRunCmd.permission) + perm |= (uint)simulated_player::SimPlayerPermission::RunCmd; + if (level >= this->mPermissionConfig.spSelect.permission) + perm |= (uint)simulated_player::SimPlayerPermission::Select; + if (level >= this->mPermissionConfig.spLookAt.permission) + perm |= (uint)simulated_player::SimPlayerPermission::LookAt; + if (level >= this->mPermissionConfig.spMoveTo.permission) + perm |= (uint)simulated_player::SimPlayerPermission::MoveTo; + if (level >= this->mPermissionConfig.spNavTo.permission) perm |= (uint)simulated_player::SimPlayerPermission::NavTo; + if (level >= this->mPermissionConfig.spTp.permission) perm |= (uint)simulated_player::SimPlayerPermission::Tp; + return perm; +} + +uint CFSPManager::getSpPermissionMask(std::optional level) { + static uint baseMask = this->getSpBasePermissionMask(); + if (!level.has_value()) return baseMask; + switch (level.value()) { + case CommandPermissionLevel::Any: + static uint maskAny = baseMask & getSpPermissionMask(level.value()); + return maskAny; + case CommandPermissionLevel::GameDirectors: + static uint maskGameDirectors = baseMask & getSpPermissionMask(level.value()); + return maskGameDirectors; + case CommandPermissionLevel::Admin: + static uint maskAdmin = baseMask & getSpPermissionMask(level.value()); + return maskAdmin; + case CommandPermissionLevel::Host: + static uint maskHost = baseMask & getSpPermissionMask(level.value()); + return maskHost; + case CommandPermissionLevel::Owner: + static uint maskOwner = baseMask & getSpPermissionMask(level.value()); + return maskOwner; + case CommandPermissionLevel::Internal: + static uint maskInternal = baseMask & getSpPermissionMask(level.value()); + return maskInternal; + } + return 0; +} + +uint CFSPManager::getGroupBasePermissionMask() { + uint perm = 0; + if (this->mPermissionConfig.groupDelete.enabled) perm |= (uint)group::GroupPermission::Delete; + if (this->mPermissionConfig.groupAddSp.enabled) perm |= (uint)group::GroupPermission::AddSp; + if (this->mPermissionConfig.groupRmSp.enabled) perm |= (uint)group::GroupPermission::RmSp; + if (this->mPermissionConfig.groupSpawn.enabled) perm |= (uint)group::GroupPermission::Spawn; + if (this->mPermissionConfig.groupDespawn.enabled) perm |= (uint)group::GroupPermission::Despawn; + if (this->mPermissionConfig.groupRespawn.enabled) perm |= (uint)group::GroupPermission::Respawn; + if (this->mPermissionConfig.groupDeleteSp.enabled) perm |= (uint)group::GroupPermission::DeleteSp; + if (this->mPermissionConfig.groupStop.enabled) perm |= (uint)group::GroupPermission::Stop; + if (this->mPermissionConfig.groupDrop.enabled) perm |= (uint)group::GroupPermission::Drop; + if (this->mPermissionConfig.groupDropInv.enabled) perm |= (uint)group::GroupPermission::DropInv; + if (this->mPermissionConfig.groupSneaking.enabled) perm |= (uint)group::GroupPermission::Sneaking; + if (this->mPermissionConfig.groupSwimming.enabled) perm |= (uint)group::GroupPermission::Swimming; + if (this->mPermissionConfig.groupFlying.enabled) perm |= (uint)group::GroupPermission::Flying; + if (this->mPermissionConfig.groupSprinting.enabled) perm |= (uint)group::GroupPermission::Sprinting; + if (this->mPermissionConfig.groupAttack.enabled) perm |= (uint)group::GroupPermission::Attack; + if (this->mPermissionConfig.groupBuild.enabled) perm |= (uint)group::GroupPermission::Build; + if (this->mPermissionConfig.groupInteract.enabled) perm |= (uint)group::GroupPermission::Interact; + if (this->mPermissionConfig.groupJump.enabled) perm |= (uint)group::GroupPermission::Jump; + if (this->mPermissionConfig.groupUse.enabled) perm |= (uint)group::GroupPermission::Use; + if (this->mPermissionConfig.groupDestroy.enabled) perm |= (uint)group::GroupPermission::Destroy; + if (this->mPermissionConfig.groupChat.enabled) perm |= (uint)group::GroupPermission::Chat; + if (this->mPermissionConfig.groupRunCmd.enabled) perm |= (uint)group::GroupPermission::RunCmd; + if (this->mPermissionConfig.groupLookAt.enabled) perm |= (uint)group::GroupPermission::LookAt; + if (this->mPermissionConfig.groupMoveTo.enabled) perm |= (uint)group::GroupPermission::MoveTo; + if (this->mPermissionConfig.groupNavTo.enabled) perm |= (uint)group::GroupPermission::NavTo; + if (this->mPermissionConfig.groupTp.enabled) perm |= (uint)group::GroupPermission::Tp; + if (this->mPermissionConfig.groupSelect.enabled) perm |= (uint)group::GroupPermission::Select; + return perm; +} + +uint CFSPManager::getGroupPermissionMask(CommandPermissionLevel level) { + uint perm = 0; + if (level >= this->mPermissionConfig.groupDelete.permission) perm |= (uint)group::GroupPermission::Delete; + if (level >= this->mPermissionConfig.groupAddSp.permission) perm |= (uint)group::GroupPermission::AddSp; + if (level >= this->mPermissionConfig.groupRmSp.permission) perm |= (uint)group::GroupPermission::RmSp; + if (level >= this->mPermissionConfig.groupSpawn.permission) perm |= (uint)group::GroupPermission::Spawn; + if (level >= this->mPermissionConfig.groupDespawn.permission) perm |= (uint)group::GroupPermission::Despawn; + if (level >= this->mPermissionConfig.groupRespawn.permission) perm |= (uint)group::GroupPermission::Respawn; + if (level >= this->mPermissionConfig.groupDeleteSp.permission) perm |= (uint)group::GroupPermission::DeleteSp; + if (level >= this->mPermissionConfig.groupStop.permission) perm |= (uint)group::GroupPermission::Stop; + if (level >= this->mPermissionConfig.groupDrop.permission) perm |= (uint)group::GroupPermission::Drop; + if (level >= this->mPermissionConfig.groupDropInv.permission) perm |= (uint)group::GroupPermission::DropInv; + if (level >= this->mPermissionConfig.groupSneaking.permission) perm |= (uint)group::GroupPermission::Sneaking; + if (level >= this->mPermissionConfig.groupSwimming.permission) perm |= (uint)group::GroupPermission::Swimming; + if (level >= this->mPermissionConfig.groupFlying.permission) perm |= (uint)group::GroupPermission::Flying; + if (level >= this->mPermissionConfig.groupSprinting.permission) perm |= (uint)group::GroupPermission::Sprinting; + if (level >= this->mPermissionConfig.groupAttack.permission) perm |= (uint)group::GroupPermission::Attack; + if (level >= this->mPermissionConfig.groupBuild.permission) perm |= (uint)group::GroupPermission::Build; + if (level >= this->mPermissionConfig.groupInteract.permission) perm |= (uint)group::GroupPermission::Interact; + if (level >= this->mPermissionConfig.groupJump.permission) perm |= (uint)group::GroupPermission::Jump; + if (level >= this->mPermissionConfig.groupUse.permission) perm |= (uint)group::GroupPermission::Use; + if (level >= this->mPermissionConfig.groupDestroy.permission) perm |= (uint)group::GroupPermission::Destroy; + if (level >= this->mPermissionConfig.groupChat.permission) perm |= (uint)group::GroupPermission::Chat; + if (level >= this->mPermissionConfig.groupRunCmd.permission) perm |= (uint)group::GroupPermission::RunCmd; + if (level >= this->mPermissionConfig.groupLookAt.permission) perm |= (uint)group::GroupPermission::LookAt; + if (level >= this->mPermissionConfig.groupMoveTo.permission) perm |= (uint)group::GroupPermission::MoveTo; + if (level >= this->mPermissionConfig.groupNavTo.permission) perm |= (uint)group::GroupPermission::NavTo; + if (level >= this->mPermissionConfig.groupTp.permission) perm |= (uint)group::GroupPermission::Tp; + if (level >= this->mPermissionConfig.groupSelect.permission) perm |= (uint)group::GroupPermission::Select; + return perm; +} + +uint CFSPManager::getGroupPermissionMask(std::optional level) { + static uint baseMask = this->getGroupBasePermissionMask(); + if (!level.has_value()) return baseMask; + switch (level.value()) { + case CommandPermissionLevel::Any: + static uint maskAny = baseMask & getGroupPermissionMask(level.value()); + return maskAny; + case CommandPermissionLevel::GameDirectors: + static uint maskGameDirectors = baseMask & getGroupPermissionMask(level.value()); + return maskGameDirectors; + case CommandPermissionLevel::Admin: + static uint maskAdmin = baseMask & getGroupPermissionMask(level.value()); + return maskAdmin; + case CommandPermissionLevel::Host: + static uint maskHost = baseMask & getGroupPermissionMask(level.value()); + return maskHost; + case CommandPermissionLevel::Owner: + static uint maskOwner = baseMask & getGroupPermissionMask(level.value()); + return maskOwner; + case CommandPermissionLevel::Internal: + static uint maskInternal = baseMask & getGroupPermissionMask(level.value()); + return maskInternal; + } + return 0; +} + +base::OperateResult CFSPManager::spPerm( + const Player* player, + std::string spname, + uint perm, + bool enable, + std::optional targetUUid +) { + using ll::i18n_literals::operator""_tr; + auto checkResult = targetUUid.has_value() ? this->baseCheck(player, this->mPermissionConfig.spPerm) + : this->baseCheck(player, this->mPermissionConfig.spPublicPerm); + if (!checkResult) return checkResult; + auto it = this->mOnlineSpMap.find(spname); + if (it == this->mOnlineSpMap.end()) { + it = this->mOfflineSpMap.find(spname); + if (it == this->mOfflineSpMap.end()) return base::OperateResult::error("manager.fail.spNotExisted"_tr()); + } + if (checkResult.mType != base::OperateResult::Type::Success + && it->second->mSaveData.ownerUuid != player->getUuid().asString()) + return base::OperateResult::error("manager.fail.permissionDenied"_tr()); + if (targetUUid.has_value()) { + if (enable) { + auto permIt = it->second->mSaveData.permission.find(targetUUid.value()); + if (permIt == it->second->mSaveData.permission.end()) + it->second->mSaveData.permission[targetUUid.value()] = perm; + else if (permIt->second & perm) return base::OperateResult::error("manager.fail.targetHasHadPerm"_tr()); + else it->second->mSaveData.permission[targetUUid.value()] |= perm; + } else { + auto permIt = it->second->mSaveData.permission.find(targetUUid.value()); + if (permIt == it->second->mSaveData.permission.end() || !(permIt->second & perm)) + return base::OperateResult::error("manager.fail.targetNotHavePerm"_tr()); + permIt->second &= ~perm; + if (permIt->second == 0) it->second->mSaveData.permission.erase(permIt); + } + } else { + if (enable) { + if (it->second->mSaveData.publicPermission & perm) + return base::OperateResult::error("manager.fail.targetHasHadPerm"_tr()); + it->second->mSaveData.publicPermission |= perm; + } else { + if (!(it->second->mSaveData.publicPermission & perm)) + return base::OperateResult::error("manager.fail.targetNotHavePerm"_tr()); + it->second->mSaveData.publicPermission &= ~perm; + } + } + it->second->mShouldSave = true; + if (!it->second->mSimPlayer) it->second->save(); + return base::OperateResult::success("manager.success.set"_tr()); +} + +base::OperateResult CFSPManager::groupPerm( + const Player* player, + std::string spname, + uint perm, + bool enable, + std::optional targetUUid +) { + using ll::i18n_literals::operator""_tr; + auto checkResult = targetUUid.has_value() ? this->baseCheck(player, this->mPermissionConfig.groupPerm) + : this->baseCheck(player, this->mPermissionConfig.groupPublicPerm); + if (!checkResult) return checkResult; + auto it = this->mGroupMap.find(spname); + if (it == this->mGroupMap.end()) return base::OperateResult::error("manager.fail.spNotExisted"_tr()); + if (checkResult.mType != base::OperateResult::Type::Success + && it->second->mData.ownerUuid != player->getUuid().asString()) + return base::OperateResult::error("manager.fail.permissionDenied"_tr()); + if (targetUUid.has_value()) { + if (enable) { + auto permIt = it->second->mData.permission.find(targetUUid.value()); + if (permIt == it->second->mData.permission.end()) it->second->mData.permission[targetUUid.value()] = perm; + else if (permIt->second & perm) return base::OperateResult::error("manager.fail.targetHasHadPerm"_tr()); + else it->second->mData.permission[targetUUid.value()] |= perm; + } else { + auto permIt = it->second->mData.permission.find(targetUUid.value()); + if (permIt == it->second->mData.permission.end() || !(permIt->second & perm)) + return base::OperateResult::error("manager.fail.targetNotHavePerm"_tr()); + permIt->second &= ~perm; + if (permIt->second == 0) it->second->mData.permission.erase(permIt); + } + } else { + if (enable) { + + if (it->second->mData.publicPermission & perm) + return base::OperateResult::error("manager.fail.targetHasHadPerm"_tr()); + it->second->mData.publicPermission |= perm; + } else { + if (!(it->second->mData.publicPermission & perm)) + return base::OperateResult::error("manager.fail.targetNotHavePerm"_tr()); + it->second->mData.publicPermission &= ~perm; + } + } + it->second->save(); + return base::OperateResult::success("manager.success.set"_tr()); +} +} // namespace coral_fans::cfsp::manager \ No newline at end of file diff --git a/src/cfsp/core/manager/CFSPSpManager.cpp b/src/cfsp/core/manager/CFSPSpManager.cpp new file mode 100644 index 0000000..76f28fd --- /dev/null +++ b/src/cfsp/core/manager/CFSPSpManager.cpp @@ -0,0 +1,369 @@ +#include "CFSPManager.h" +#include "cfsp/CFSP.h" +#include "cfsp/base/OperateResult.h" +#include "cfsp/base/Utils.h" +#include "cfsp/core/simPlayer/SimPlayer.h" +#include "ll/api/command/CommandRegistrar.h" +#include "ll/api/i18n/I18n.h" +#include "mc/network/packet/TextPacket.h" +#include "mc/world/Minecraft.h" +#include +#include +#include + +namespace coral_fans::cfsp::manager { +#define IF_HAS_ARGS(...) , ##__VA_ARGS__ + +#define SP_ONLINE_FUNC_DEF(FUNC, ACTION, ...) \ + base::OperateResult CFSPManager::sp##FUNC( \ + Player* player, \ + std::string const& spname IF_HAS_ARGS(__VA_ARGS__), \ + bool nocheck \ + ) { \ + using ll::i18n_literals::operator""_tr; \ + if (!nocheck) { \ + if (auto checkResult = this->baseCheck(player, this->mPermissionConfig.sp##FUNC); !checkResult) \ + return checkResult; \ + else if (checkResult.mType == base::OperateResult::Type::Success) nocheck = true; \ + } \ + auto it = this->mOnlineSpMap.find(spname); \ + if (it == this->mOnlineSpMap.end()) { \ + if (this->mOfflineSpMap.find(spname) != this->mOfflineSpMap.end()) \ + return base::OperateResult::error("manager.fail.spHasOffline"_tr()); \ + return base::OperateResult::error("manager.fail.spNotExisted"_tr()); \ + } \ + if (!nocheck && !it->second->hasPermission(player, simulated_player::SimPlayerPermission::FUNC)) \ + return base::OperateResult::error("manager.fail.permissionDenied"_tr()); \ + return it->second->ACTION; \ + } + +void CFSPManager::saveSps() { + for (auto cfsp : this->mOnlineSpMap) cfsp.second->save(); +} + +std::string CFSPManager::listOnlineSp(const Player* player) { + using ll::i18n_literals::operator""_tr; + std::string res = ""; + if (!player) { + res = "manager.info.onlineCount"_tr(this->mOnlineSpMap.size()); + for (auto cfsp : this->mOnlineSpMap) + res += "manager.info.onlineSp"_tr( + cfsp.first, + base::utils::tryGetPlayerName(cfsp.second->mSaveData.ownerUuid), + cfsp.second->mSimPlayer->getFeetPos().toString() + ); + return res; + } + auto uuid = player->getUuid().asString(); + int count = 0; + for (auto cfsp : this->mOnlineSpMap) + if (cfsp.second->mSaveData.ownerUuid == uuid) { + res += "manager.info.onlineSp"_tr( + cfsp.first, + base::utils::tryGetPlayerName(cfsp.second->mSaveData.ownerUuid), + cfsp.second->mSimPlayer->getFeetPos().toString() + ); + count++; + } + res = "manager.info.onlineCountPerplayer"_tr(count) + res; + return res; +} + +std::string CFSPManager::listOfflineSp(const Player* player) { + using ll::i18n_literals::operator""_tr; + std::string res = ""; + if (!player) { + res = "manager.info.offlineCount"_tr(this->mOnlineSpMap.size()); + for (auto cfsp : this->mOfflineSpMap) + res += "manager.info.offlineSp"_tr( + cfsp.first, + base::utils::tryGetPlayerName(cfsp.second->mSaveData.ownerUuid), + cfsp.second->mSimPlayer->getFeetPos().toString() + ); + return res; + } + auto uuid = player->getUuid().asString(); + int count = 0; + for (auto cfsp : this->mOfflineSpMap) + if (cfsp.second->mSaveData.ownerUuid == uuid) { + res += "manager.info.oflineSp"_tr( + cfsp.first, + base::utils::tryGetPlayerName(cfsp.second->mSaveData.ownerUuid), + cfsp.second->mSimPlayer->getFeetPos().toString() + ); + count++; + } + res = "manager.info.offlineCountPerplayer"_tr(count) + res; + return res; +} + +base::OperateResult +CFSPManager::spCreate(Player* player, std::string const& name, Vec3 const& pos, DimensionType dim, bool lockUniqueId) { + using ll::i18n_literals::operator""_tr; + if (auto checkResult = this->canCreatePlayer(player); !checkResult) return checkResult; + std::string spname = this->mConfig.namePrefix + name + this->mConfig.namePostfix; + auto ownerUuid = player ? player->getUuid().asString() : ""; + // check: already exist + if (this->mOnlineSpMap.find(spname) != this->mOnlineSpMap.end() + || this->mOfflineSpMap.find(spname) != this->mOfflineSpMap.end()) { + return base::OperateResult::error("manager.fail.spHasExisted"_tr()); + } + // check: name + if (!this->tryCreateDiretory(cfsp::CFSP::getInstance().getSelf().getDataDir() / "simplayer", spname)) + return base::OperateResult::error("manager.fail.includeIllegalChar"_tr()); + // create + auto simplayer = simulated_player::SimPlayer::create(player, spname, pos, dim, lockUniqueId); + if (!simplayer) [[unlikely]] + return base::OperateResult::error("manager.error.failedtocreate"_tr()); + this->mOnlineSpMap[spname] = simplayer; + + ll::command::CommandRegistrar::getInstance().addSoftEnumValues("cfspOnlineSp", {spname}); + ll::command::CommandRegistrar::getInstance().addSoftEnumValues("cfspSplist", {spname}); + + return base::OperateResult::success("manager.success.create"_tr()); +} + +base::OperateResult CFSPManager::spSpawn(Player* player, std::string const& spname, bool nocheck) { + using ll::i18n_literals::operator""_tr; + if (!nocheck) { + if (auto checkResult = this->canSpawnPlayer(player); !checkResult) return checkResult; + else if (checkResult.mType == base::OperateResult::Type::Success) nocheck = true; + } + // check: exist + auto it = this->mOfflineSpMap.find(spname); + if (it == this->mOfflineSpMap.end()) { + if (this->mOnlineSpMap.find(spname) != this->mOnlineSpMap.end()) + return base::OperateResult::error("manager.fail.spHasOnline"_tr()); + return base::OperateResult::error("manager.fail.spNotExisted"_tr()); + } + // check:permission + if (!nocheck && !it->second->hasPermission(player, simulated_player::SimPlayerPermission::Spawn)) + return base::OperateResult::error("manager.fail.permissionDenied"_tr()); + // create + auto res = it->second->spawn(player); + if (!res) [[unlikely]] + return res; + + ll::command::CommandRegistrar::getInstance().addSoftEnumValues("cfspOnlineSp", {spname}); + ll::command::CommandRegistrar::getInstance().removeSoftEnumValues("cfspOfflineSp", {spname}); + if (it->second->mSimPlayer->isDead()) + ll::command::CommandRegistrar::getInstance().addSoftEnumValues("cfspDeadSp", {it->first}); + + if (auto node = mOfflineSpMap.extract(it)) { + mOnlineSpMap.insert(std::move(node)); + } + return res; +} + +void CFSPManager::autoJoin() { + std::vector spawnlist; + std::vector spawnDeadlist; + auto it = this->mOfflineSpMap.begin(); + while (it != this->mOfflineSpMap.end()) { + if (it->second->mSaveData.isOnline && it->second->spawn(std::nullopt)) { + spawnlist.emplace_back(it->first); + if (it->second->mSimPlayer->isDead()) spawnDeadlist.emplace_back(it->first); + auto current_it = it++; + auto node = this->mOfflineSpMap.extract(current_it); + mOnlineSpMap.insert(std::move(node)); + continue; + } + it++; + } + ll::command::CommandRegistrar::getInstance().addSoftEnumValues("cfspOnlineSp", spawnlist); + ll::command::CommandRegistrar::getInstance().removeSoftEnumValues("cfspOfflineSp", spawnlist); + ll::command::CommandRegistrar::getInstance().addSoftEnumValues("cfspDeadSp", spawnDeadlist); +} + +base::OperateResult CFSPManager::spDespawn(Player* player, std::string const& spname, bool nocheck) { + using ll::i18n_literals::operator""_tr; + if (!nocheck) { + if (auto checkResult = this->baseCheck(player, this->mPermissionConfig.spDespawn); !checkResult) + return checkResult; + else if (checkResult.mType == base::OperateResult::Type::Success) nocheck = true; + } + // check: exist + auto it = this->mOnlineSpMap.find(spname); + if (it == this->mOnlineSpMap.end()) { + if (this->mOfflineSpMap.find(spname) != this->mOfflineSpMap.end()) + return base::OperateResult::error("manager.fail.spHasOffline"_tr()); + return base::OperateResult::error("manager.fail.spNotExisted"_tr()); + } + // check:permission + if (!nocheck && !it->second->hasPermission(player, simulated_player::SimPlayerPermission::Despawn)) + return base::OperateResult::error("manager.fail.permissionDenied"_tr()); + auto isDead = it->second->mSimPlayer && it->second->mSimPlayer->isDead(); + auto res = it->second->despawn(); + if (!res) [[unlikely]] + return res; + + TextPacket::createRawMessage("manager.success.spOffline"_tr(spname)).sendToClients(); + + ll::command::CommandRegistrar::getInstance().addSoftEnumValues("cfspOfflineSp", {spname}); + ll::command::CommandRegistrar::getInstance().removeSoftEnumValues("cfspOnlineSp", {spname}); + if (isDead) + ll::command::CommandRegistrar::getInstance().removeSoftEnumValues("cfspDeadSp", {it->second->mSaveData.name}); + + if (auto node = mOnlineSpMap.extract(it)) mOfflineSpMap.insert(std::move(node)); + return res; +} + +void CFSPManager::autoDespawn(std::shared_ptr cfsp) { + using ll::i18n_literals::operator""_tr; + if (!cfsp->mSimPlayer) return; + cfsp->despawn(); + auto spname = cfsp->mSaveData.name; + TextPacket::createRawMessage("manager.success.autoDespawn"_tr(spname)).sendToClients(); + ll::command::CommandRegistrar::getInstance().addSoftEnumValues("cfspOfflineSp", {spname}); + ll::command::CommandRegistrar::getInstance().removeSoftEnumValues("cfspOnlineSp", {spname}); + + if (auto node = mOnlineSpMap.extract(spname)) mOfflineSpMap.insert(std::move(node)); +} + +base::OperateResult CFSPManager::spRespawn(Player* player, std::string const& spname, bool nocheck) { + using ll::i18n_literals::operator""_tr; + if (!nocheck) { + if (auto checkResult = this->baseCheck(player, this->mPermissionConfig.spRespawn); !checkResult) + return checkResult; + else if (checkResult.mType == base::OperateResult::Type::Success) nocheck = true; + } + // check: exist + auto it = this->mOnlineSpMap.find(spname); + if (it == this->mOnlineSpMap.end()) { + if (this->mOfflineSpMap.find(spname) != this->mOfflineSpMap.end()) + return base::OperateResult::error("manager.fail.spHasOffline"_tr()); + return base::OperateResult::error("manager.fail.spNotExisted"_tr()); + } + // check:permission + if (!nocheck && !it->second->hasPermission(player, simulated_player::SimPlayerPermission::Respawn)) + return base::OperateResult::error("manager.fail.permissionDenied"_tr()); + auto res = it->second->respawn(); + if (!res) [[unlikely]] + return res; + ll::command::CommandRegistrar::getInstance().removeSoftEnumValues("cfspDeadSp", {it->second->mSaveData.name}); + return res; +} + +base::OperateResult CFSPManager::spDelete(Player* player, std::string const& spname, bool force, bool nocheck) { + using ll::i18n_literals::operator""_tr; + if (!nocheck) { + if (auto checkResult = this->baseCheck(player, this->mPermissionConfig.spDelete); !checkResult) + return checkResult; + else if (checkResult.mType == base::OperateResult::Type::Success) nocheck = true; + } + bool deleteFail = false; + if (auto it = this->mOnlineSpMap.find(spname); it != this->mOnlineSpMap.end()) { + // check:permission + if (!nocheck && !it->second->hasPermission(player, simulated_player::SimPlayerPermission::Delete)) + return base::OperateResult::error("manager.fail.permissionDenied"_tr()); + if (!force && !it->second->isEmptyInv()) return base::OperateResult::swing("manager.fail.notEmpty"_tr(spname)); + ll::command::CommandRegistrar::getInstance().removeSoftEnumValues("cfspSplist", {spname}); + ll::command::CommandRegistrar::getInstance().removeSoftEnumValues("cfspOnlineSp", {spname}); + if (!it->second->mSimPlayer || it->second->mSimPlayer->isDead()) + ll::command::CommandRegistrar::getInstance().removeSoftEnumValues( + "cfspDeadSp", + {it->second->mSaveData.name} + ); + it->second->stop(); + if (it->second->mSimPlayer) { + it->second->mSimPlayer->disconnect(); + it->second->mSimPlayer->remove(); + it->second->mSimPlayer->setGameTestHelper(nullptr); + } + try { + std::filesystem::remove_all( + CFSP::getInstance().getSelf().getDataDir() / "simplayer" + / reinterpret_cast(it->second->mSaveData.name.c_str()) + ); + } catch (...) { + deleteFail = true; + } + this->mOnlineSpMap.erase(it); + } else if (it = this->mOfflineSpMap.find(spname); it != this->mOfflineSpMap.end()) { + // check:permission + if (!nocheck && !it->second->hasPermission(player, simulated_player::SimPlayerPermission::Delete)) + return base::OperateResult::error("manager.fail.permissionDenied"_tr()); + if (!force && !it->second->checkInvEmptyForOfflineCFSP()) + return base::OperateResult::swing("manager.fail.notEmpty"_tr(spname)); + ll::command::CommandRegistrar::getInstance().removeSoftEnumValues("cfspSplist", {spname}); + ll::command::CommandRegistrar::getInstance().removeSoftEnumValues("cfspOfflineSp", {spname}); + try { + std::filesystem::remove_all( + CFSP::getInstance().getSelf().getDataDir() / "simplayer" + / reinterpret_cast(it->second->mSaveData.name.c_str()) + ); + this->mOfflineSpMap.erase(it); + } catch (...) { + deleteFail = true; + } + } else return base::OperateResult::error("manager.fail.spNotExisted"_tr()); + for (auto group : this->mGroupMap) { + if (auto it = group.second->mData.splist.find(spname); it != group.second->mData.splist.end()) { + group.second->mData.splist.erase(it); + group.second->save(); + } + } + if (deleteFail) return base::OperateResult::error("manager.error.deleteFileFail"_tr()); + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult CFSPManager::spInfo(Player* player, std::string const& spname, bool nocheck) { + using ll::i18n_literals::operator""_tr; + if (!nocheck) { + if (!isAllowed(player)) return base::OperateResult::error("manager.fail.permissionDenied"_tr()); + if (isManager(player)) nocheck = true; + } + auto it = this->mOnlineSpMap.find(spname); + if (it == this->mOnlineSpMap.end()) { + it = this->mOfflineSpMap.find(spname); + if (it == this->mOfflineSpMap.end()) return base::OperateResult::error("manager.fail.spNotExisted"_tr()); + } + if (!nocheck && !it->second->hasPermission(player, simulated_player::SimPlayerPermission::None)) + return base::OperateResult::error("manager.fail.permissionDenied"_tr()); + return it->second->info(); +} + +base::OperateResult CFSPManager::spInvInfo(Player* player, std::string const& spname, bool nocheck) { + using ll::i18n_literals::operator""_tr; + if (!nocheck) { + if (!isAllowed(player)) return base::OperateResult::error("manager.fail.permissionDenied"_tr()); + if (isManager(player)) nocheck = true; + } + auto it = this->mOnlineSpMap.find(spname); + if (it == this->mOnlineSpMap.end()) { + if (this->mOfflineSpMap.find(spname) != this->mOfflineSpMap.end()) + return base::OperateResult::error("manager.fail.spHasOffline"_tr()); + return base::OperateResult::error("manager.fail.spNotExisted"_tr()); + } + if (!nocheck && !it->second->hasPermission(player, simulated_player::SimPlayerPermission::None)) + return base::OperateResult::error("manager.fail.permissionDenied"_tr()); + return it->second->invInfo(); +} + +SP_ONLINE_FUNC_DEF(Stop, stop()) +SP_ONLINE_FUNC_DEF(LookAt, lookAt(pos), Vec3 const& pos) + +SP_ONLINE_FUNC_DEF(Drop, drop(times, interval), int times, int interval) +SP_ONLINE_FUNC_DEF(DropInv, dropInv(times, interval), int times, int interval) +SP_ONLINE_FUNC_DEF(Swap, swap(player)) +SP_ONLINE_FUNC_DEF(Select, select(id), int id) + +SP_ONLINE_FUNC_DEF(Chat, chat(message), std::string const& message) +SP_ONLINE_FUNC_DEF(RunCmd, runcmd(message), std::string const& message) + +SP_ONLINE_FUNC_DEF(MoveTo, moveTo(pos, speed), Vec3 const& pos, float speed) +SP_ONLINE_FUNC_DEF(NavTo, navTo(pos, speed), Vec3 const& pos, float speed) +SP_ONLINE_FUNC_DEF(Tp, tp(pos, dimId), Vec3 pos, std::optional dimId) + +SP_ONLINE_FUNC_DEF(Attack, attack(times, interval), int times, int interval) +SP_ONLINE_FUNC_DEF(Build, build(times, interval), int times, int interval) +SP_ONLINE_FUNC_DEF(Interact, interact(times, interval), int times, int interval) +SP_ONLINE_FUNC_DEF(Jump, jump(times, interval), int times, int interval) +SP_ONLINE_FUNC_DEF(Use, use(_long, times, interval), int _long, int times, int interval) +SP_ONLINE_FUNC_DEF(Destroy, destroy(_long, times, interval), int _long, int times, int interval) + +SP_ONLINE_FUNC_DEF(Sneaking, sneaking(enabled), std::optional enabled) +SP_ONLINE_FUNC_DEF(Swimming, swimming(enabled), std::optional enabled) +SP_ONLINE_FUNC_DEF(Flying, flying(enabled), std::optional enabled) +SP_ONLINE_FUNC_DEF(Sprinting, sprinting(enabled), std::optional enabled) +} // namespace coral_fans::cfsp::manager \ No newline at end of file diff --git a/src/cfsp/core/simPlayer/SimPlayer.cpp b/src/cfsp/core/simPlayer/SimPlayer.cpp new file mode 100644 index 0000000..f177c8f --- /dev/null +++ b/src/cfsp/core/simPlayer/SimPlayer.cpp @@ -0,0 +1,185 @@ +#include "SimPlayer.h" +#include "cfsp/base/OperateResult.h" +#include "cfsp/base/Schedule.h" +#include "cfsp/base/Utils.h" +#include "cfsp/core/fix/CFSPFixManager.h" +#include "ll/api/i18n/I18n.h" +#include "ll/api/service/Bedrock.h" +#include "mc/server/SimulatedPlayer.h" +#include "mc/server/sim/ContinuousLookAtPositionIntent.h" +#include "mc/server/sim/sim.h" +#include "mc/world/Minecraft.h" +#include "mc/world/actor/provider/ActorAttribute.h" +#include + + +namespace coral_fans::cfsp::simulated_player { +void SimPlayer::cancelTask() { base::Schedule::getInstance().getSchedule()->cancel(this->mTaskid); } + +void SimPlayer::cancelScript() { base::Schedule::getInstance().getSchedule()->cancel(this->mScriptid); } + +base::OperateResult SimPlayer::stop() { + using ll::i18n_literals::operator""_tr; + if (base::Schedule::getInstance().getSchedule()->isRunning(this->mTaskid)) this->cancelTask(); + if (base::Schedule::getInstance().getSchedule()->isRunning(this->mScriptid)) this->cancelScript(); + + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + + this->mSimPlayer->simulateStopDestroyingBlock(); + + this->mSimPlayer->simulateStopInteracting(); + + this->mSimPlayer->simulateStopMoving(); + + this->mSimPlayer->simulateStopUsingItem(); + + return base::OperateResult::success("manager.success.operate"_tr()); +} + +std::shared_ptr SimPlayer::create( + const Player* player, + std::string const& spname, + Vec3 const& pos, + DimensionType dim, + bool lockUniqueId +) { + auto uuid = player ? player->getUuid().asString() : ""; + auto mc = ll::service::getMinecraft(); + if (!mc) return nullptr; + auto serverNetworkHandler = mc->getServerNetworkHandler(); + if (!serverNetworkHandler) return nullptr; + auto xuid = "-" + std::to_string(std::hash()(spname)); + // auto* simPlayer = SimulatedPlayer::create(spname, pos, dim, serverNetworkHandler, xuid, std::nullopt); + + fix::CFSPFixManager::getInstance().createSpMutex = true; + auto* simPlayer = + SimulatedPlayer::create(spname, pos, {0, 0, 0}, {0, 0}, false, dim, serverNetworkHandler, xuid, std::nullopt); + fix::CFSPFixManager::getInstance().createSpMutex = false; + + if (!simPlayer) [[unlikely]] + return nullptr; + + simPlayer->mPlayerRespawnPoint->mPlayerPosition = pos; + simPlayer->mPlayerRespawnPoint->mDimension = dim; + + SimPlayerSaveData saveData; + saveData.name = spname; + if (lockUniqueId) saveData.uniqueId = simPlayer->getOrCreateUniqueID().rawID; + saveData.xuid = xuid; + saveData.ownerUuid = uuid; + saveData.lastSpawnerUuid = uuid; + + auto cfsp = std::make_shared(saveData, simPlayer); + + cfsp->lookAt( + player ? simPlayer->getEyePos() + Vec3::directionFromRotation(player->getRotation()) : simPlayer->getEyePos() + ); + + return cfsp; +} + +base::OperateResult SimPlayer::spawn(std::optional player) { + using ll::i18n_literals::operator""_tr; + auto mc = ll::service::getMinecraft(); + if (!mc) return base::OperateResult::error("manager.error.failedtocreate"_tr()); + auto serverNetworkHandler = mc->getServerNetworkHandler(); + if (!serverNetworkHandler) return base::OperateResult::error("manager.error.failedtocreate"_tr()); + + fix::CFSPFixManager::getInstance().createSpMutex = true; + this->mSimPlayer = SimulatedPlayer::create( + this->mSaveData.name, + {0, 0, 0}, + {0, 0, 0}, + {0, 0}, + false, + 0, + serverNetworkHandler, + this->mSaveData.xuid, + this->mSaveData.uniqueId.has_value() + ? std::optional(ActorUniqueID(this->mSaveData.uniqueId.value())) + : std::nullopt + ); + fix::CFSPFixManager::getInstance().createSpMutex = false; + + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.failedtocreate"_tr()); + this->loadSpNbt(); + this->mSimPlayer->mPlayerRespawnPoint->mPlayerPosition = this->mSimPlayer->getFeetPos(); + this->mSimPlayer->mPlayerRespawnPoint->mDimension = this->mSimPlayer->getDimensionId(); + this->lookAt(this->mSimPlayer->getEyePos() + this->mSaveData.lookAtOffSet); + if (player.has_value()) + this->mSaveData.lastSpawnerUuid = player.value() ? player.value()->getUuid().asString() : ""; + this->mSaveData.isOnline = true; + this->mShouldSave = true; + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult SimPlayer::despawn() { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + this->stop(); + this->mSaveData.isOnline = false; + this->mShouldSave = true; + this->save(); + this->mSimPlayer->disconnect(); + // try { + this->mSimPlayer->remove(); + // } catch (...) {} + this->mSimPlayer->setGameTestHelper(nullptr); + this->mSimPlayer = nullptr; + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult SimPlayer::respawn() { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (this->mSimPlayer->isAlive()) return base::OperateResult::error("manager.fail.spIsAlive"_tr()); + auto& spawnPos = this->mSimPlayer->mPlayerRespawnPoint->mPlayerPosition; + this->mSimPlayer->mRespawnPositionCandidate = {spawnPos->x + 0.5f, spawnPos->y + 1.62001f, spawnPos->z + 0.5f}; + this->mSimPlayer->mRespawnReady = true; + this->mSimPlayer->mRespawningFromTheEnd = false; + this->mSimPlayer->respawn(); + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult SimPlayer::info() { + using ll::i18n_literals::operator""_tr; + std::string res = "\n " + "manager.info.spname"_tr() + this->mSaveData.name + "\n "; + res += "manager.info.spOwner"_tr() + base::utils::tryGetPlayerName(this->mSaveData.ownerUuid) + "\n "; + res += "manager.info.spStatus"_tr() + + (this->mSimPlayer ? this->mSimPlayer->isAlive() ? "base.spstatus.alive"_tr() : "base.spstatus.dead"_tr() + : "base.spstatus.offline"_tr()) + + "\n "; + if (this->mSimPlayer) { + res += "manager.info.spPos"_tr() + base::utils::getDimName(this->mSimPlayer->getDimensionId()) + " " + + this->mSimPlayer->getPosition().toString() + "\n "; + res += "manager.info.spRespawnpos"_tr() + + base::utils::getDimName(this->mSimPlayer->mPlayerRespawnPoint->mDimension->id) + " " + + this->mSimPlayer->mPlayerRespawnPoint->mPlayerPosition->toString() + "\n "; + res += "manager.info.spGamemode"_tr() + base::utils::getGameModeStr((int)this->mSimPlayer->getPlayerGameType()) + + "\n "; + res += "manager.info.spHealth"_tr() + + std::to_string(ActorAttribute::getHealth(this->mSimPlayer->getEntityContext())) + " / " + + std::to_string(this->mSimPlayer->getMaxHealth()) + "\n "; + res += "manager.info.spIsFree"_tr() + (this->isFree() ? "base.yesOrNo.yes"_tr() : "base.yesOrNo.no"_tr()); + } + return base::OperateResult::success(res); +} + +base::OperateResult SimPlayer::lookAt(Vec3 const& pos) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (this->mSimPlayer->isDead()) [[unlikely]] + return base::OperateResult::error("manager.fail.spIsDead"_tr()); + this->mSaveData.lookAtOffSet = pos - this->mSimPlayer->getEyePos(); + this->mSimPlayer->simulateSetBodyRotation( + (float)(atan2(this->mSaveData.lookAtOffSet.z, this->mSaveData.lookAtOffSet.x) * 57.295776) - 90.0f + ); + this->mSimPlayer->mLookAtIntent->mType = sim::ContinuousLookAtPositionIntent(glm::vec3(pos.x, pos.y, pos.z), false); + return base::OperateResult::success("manager.success.operate"_tr()); +} +} // namespace coral_fans::cfsp::simulated_player \ No newline at end of file diff --git a/src/cfsp/core/simPlayer/SimPlayer.h b/src/cfsp/core/simPlayer/SimPlayer.h new file mode 100644 index 0000000..ddf4240 --- /dev/null +++ b/src/cfsp/core/simPlayer/SimPlayer.h @@ -0,0 +1,84 @@ +#pragma once + +#include "SimPlayerSaveData.h" +#include "cfsp/base/Macros.h" +#include "cfsp/base/OperateResult.h" +#include "cfsp/core/simPlayer/SimPlayerPermission.h" +#include "mc/deps/core/math/Vec3.h" +#include "mc/server/SimulatedPlayer.h" +#include +#include + + +namespace coral_fans::cfsp::simulated_player { +class SimPlayer { +public: + SimPlayerSaveData mSaveData; + SimulatedPlayer* mSimPlayer = nullptr; + unsigned long long mTaskid = 0; + unsigned long long mScriptid = 0; + bool mShouldSave = true; + +public: + SimPlayer(SimPlayerSaveData saveData, SimulatedPlayer* sp = nullptr); + +public: + bool save(); + bool loadSpNbt(); + bool checkInvEmptyForOfflineCFSP(); + +public: + CFSP_API std::string getName(); + CFSP_API std::string getXuid(); + CFSP_API bool isOnline(); + CFSP_API bool isFree(); + +public: + bool hasPermission(const Player*, SimPlayerPermission); + uint getPermission(Player*); + base::OperateResult setPermission(Player*, SimPlayerPermission); + +public: + CFSP_API void cancelTask(); + CFSP_API void cancelScript(); + CFSP_API base::OperateResult stop(); + CFSP_API static std::shared_ptr + create(const Player* player, std::string const& name, Vec3 const& pos, DimensionType dim, bool lockUniqueId = true); + CFSP_API base::OperateResult spawn(std::optional player); // 当player为std::nullopt时,为autojoin + CFSP_API base::OperateResult despawn(); + CFSP_API base::OperateResult respawn(); + CFSP_API base::OperateResult lookAt(Vec3 const& pos); + CFSP_API base::OperateResult info(); + +public: + CFSP_API bool isEmptyInv(); + CFSP_API base::OperateResult invInfo(); + CFSP_API base::OperateResult drop(int times = 1, int interval = 1); + CFSP_API base::OperateResult dropInv(int times = 1, int interval = 1); + CFSP_API base::OperateResult swap(Player*); + CFSP_API base::OperateResult select(int id); + +public: + CFSP_API base::OperateResult sneaking(std::optional enable = std::nullopt); + CFSP_API base::OperateResult swimming(std::optional enable = std::nullopt); + CFSP_API base::OperateResult flying(std::optional enable = std::nullopt); + CFSP_API base::OperateResult sprinting(std::optional enable = std::nullopt); + +public: + CFSP_API base::OperateResult attack(int times = 1, int interval = 1); + CFSP_API base::OperateResult build(int times = 1, int interval = 1); + CFSP_API base::OperateResult interact(int times = 1, int interval = 1); + CFSP_API base::OperateResult jump(int times = 1, int interval = 1); + CFSP_API base::OperateResult use(int _long = 10, int times = 1, int interval = 1); + CFSP_API base::OperateResult destroy(int _long = 1, int times = 1, int interval = 1); + +public: + CFSP_API base::OperateResult chat(std::string const&); + CFSP_API base::OperateResult runcmd(std::string const&); + +public: + CFSP_API base::OperateResult moveTo(Vec3 const& pos, float speed = 4.3f); + CFSP_API base::OperateResult navTo(Vec3 const& pos, float speed = 4.3f); + CFSP_API base::OperateResult tp(Vec3 pos, std::optional dimId = std::nullopt); +}; +} // namespace coral_fans::cfsp::simulated_player \ No newline at end of file diff --git a/src/cfsp/core/simPlayer/SimPlayerAction.cpp b/src/cfsp/core/simPlayer/SimPlayerAction.cpp new file mode 100644 index 0000000..692c99e --- /dev/null +++ b/src/cfsp/core/simPlayer/SimPlayerAction.cpp @@ -0,0 +1,171 @@ +#include "SimPlayer.h" +#include "cfsp/base/Schedule.h" +#include "cfsp/core/helper/CFSPHelperManager.h" +#include "ll/api/i18n/I18n.h" +#include "mc/world/actor/player/Inventory.h" +#include "mc/world/actor/player/PlayerInventory.h" +#include "mc/world/gamemode/GameMode.h" +#include "mc/world/gamemode/InteractionResult.h" +#include "mc/world/level/BlockSource.h" +#include "mc/world/phys/HitResult.h" +#include + + +namespace coral_fans::cfsp::simulated_player { +base::OperateResult SimPlayer::attack(int times, int interval) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (this->mSimPlayer->isDead()) [[unlikely]] + return base::OperateResult::error("manager.fail.spIsDead"_tr()); + if (!this->isFree()) return base::OperateResult::error("manager.fail.spIsBusy"_tr()); + if (times < 0) times = 0; + if (interval < 1) interval = 1; + this->mTaskid = base::Schedule::getInstance().getSchedule()->add(interval, [times, this](unsigned long long t) { + if (!this->mSimPlayer) [[unlikely]] + return false; + this->mSimPlayer->simulateAttack(); + return !times || t < (unsigned long long)times - 1; + }); + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult SimPlayer::build(int times, int interval) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (this->mSimPlayer->isDead()) [[unlikely]] + return base::OperateResult::error("manager.fail.spIsDead"_tr()); + if (!this->isFree()) return base::OperateResult::error("manager.fail.spIsBusy"_tr()); + if (times < 0) times = 0; + if (interval < 1) interval = 1; + this->mTaskid = base::Schedule::getInstance().getSchedule()->add(interval, [times, this](unsigned long long t) { + if (!this->mSimPlayer) [[unlikely]] + return false; + const auto& hit = this->mSimPlayer->traceRay(5.25f); + if (hit.mType == HitResultType::Tile) { + helper::CFSPHelperManager::getInstance().buildMutex = true; + [[maybe_unused]] InteractionResult tem = this->mSimPlayer->mGameMode->useItemOn( + this->mSimPlayer->mInventory->mInventory->mItems.get()[0], + hit.mBlock, + hit.mFacing, + hit.mPos, + &this->mSimPlayer->getDimensionBlockSource().getBlock(hit.mBlock), + true + ); + helper::CFSPHelperManager::getInstance().buildMutex = false; + } + return !times || t < (unsigned long long)times - 1; + }); + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult SimPlayer::interact(int times, int interval) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (this->mSimPlayer->isDead()) [[unlikely]] + return base::OperateResult::error("manager.fail.spIsDead"_tr()); + if (!this->isFree()) return base::OperateResult::error("manager.fail.spIsBusy"_tr()); + if (times < 0) times = 0; + if (interval < 1) interval = 1; + this->mTaskid = base::Schedule::getInstance().getSchedule()->add(interval, [times, this](unsigned long long t) { + if (!this->mSimPlayer) [[unlikely]] + return false; + this->mSimPlayer->simulateInteract(); + return !times || t < (unsigned long long)times - 1; + }); + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult SimPlayer::jump(int times, int interval) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (this->mSimPlayer->isDead()) [[unlikely]] + return base::OperateResult::error("manager.fail.spIsDead"_tr()); + if (!this->isFree()) return base::OperateResult::error("manager.fail.spIsBusy"_tr()); + if (times < 0) times = 0; + if (interval < 1) interval = 1; + this->mTaskid = base::Schedule::getInstance().getSchedule()->add(interval, [times, this](unsigned long long t) { + if (!this->mSimPlayer) [[unlikely]] + return false; + this->mSimPlayer->simulateJump(); + return !times || t < (unsigned long long)times - 1; + }); + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult SimPlayer::use(int _long, int times, int interval) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (this->mSimPlayer->isDead()) [[unlikely]] + return base::OperateResult::error("manager.fail.spIsDead"_tr()); + if (!this->isFree()) return base::OperateResult::error("manager.fail.spIsBusy"_tr()); + if (_long < 1) _long = 0; + if (times < 0) times = 0; + if (interval < 1) interval = 1; + this->mTaskid = + base::Schedule::getInstance().getSchedule()->add(1, [_long, times, interval, this](unsigned long long t) { + if (!this->mSimPlayer) [[unlikely]] + return false; + if (!_long && t >= (unsigned long long)interval) { + this->mSimPlayer->simulateUseItem(); + return true; + } + auto index = t % (interval + _long); + if (t && !index) { + // simPlayer->simulateStopUsingItem(); + this->mSimPlayer->releaseUsingItem(); + return (t / (interval + _long)) != (unsigned long long)times; + } + if (index >= (unsigned long long)interval) this->mSimPlayer->simulateUseItem(); + return true; + }); + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult SimPlayer::destroy(int _long, int times, int interval) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (this->mSimPlayer->isDead()) [[unlikely]] + return base::OperateResult::error("manager.fail.spIsDead"_tr()); + if (!this->isFree()) return base::OperateResult::error("manager.fail.spIsBusy"_tr()); + if (_long < 1) _long = 0; + if (times < 0) times = 0; + if (interval < 1) interval = 1; + this->mTaskid = + base::Schedule::getInstance().getSchedule()->add(1, [_long, times, interval, this](unsigned long long t) { + if (!this->mSimPlayer) [[unlikely]] + return false; + if (!_long && t >= (unsigned long long)interval) { + auto hit = this->mSimPlayer->traceRay(5.25f); + if (hit.mType == HitResultType::Tile) + this->mSimPlayer->simulateDestroyBlock( + hit.mBlock, + static_cast(hit.mFacing) + ); + else if (this->mSimPlayer->mDestroyingBlock) this->mSimPlayer->simulateStopDestroyingBlock(); + return true; + } + auto index = t % (interval + _long); + if (t && !index) { + this->mSimPlayer->simulateStopDestroyingBlock(); + return t / (interval + _long) != (unsigned long long)times; + } + if (index >= (unsigned long long)interval) { + auto hit = this->mSimPlayer->traceRay(5.25f); + if (hit.mType == HitResultType::Tile) + this->mSimPlayer->simulateDestroyBlock( + hit.mBlock, + static_cast(hit.mFacing) + ); + else if (this->mSimPlayer->mDestroyingBlock) this->mSimPlayer->simulateStopDestroyingBlock(); + } + return true; + }); + return base::OperateResult::success("manager.success.operate"_tr()); +} +} // namespace coral_fans::cfsp::simulated_player \ No newline at end of file diff --git a/src/cfsp/core/simPlayer/SimPlayerBase.cpp b/src/cfsp/core/simPlayer/SimPlayerBase.cpp new file mode 100644 index 0000000..f0ff923 --- /dev/null +++ b/src/cfsp/core/simPlayer/SimPlayerBase.cpp @@ -0,0 +1,38 @@ +#include "SimPlayer.h" +#include "cfsp/base/Schedule.h" +#include "ll/api/i18n/I18n.h" + +namespace coral_fans::cfsp::simulated_player { +SimPlayer::SimPlayer(SimPlayerSaveData saveData, SimulatedPlayer* sp) { + this->mSaveData = saveData; + this->mSimPlayer = sp; +} + +std::string SimPlayer::getName() { return this->mSaveData.name; } + +std::string SimPlayer::getXuid() { return this->mSaveData.xuid; } + +bool SimPlayer::isOnline() { return this->mSimPlayer != nullptr; } + +bool SimPlayer::isFree() { + auto schedule = base::Schedule::getInstance().getSchedule(); + return !schedule->isRunning(this->mTaskid) && !schedule->isRunning(this->mScriptid); +} + +bool SimPlayer::hasPermission(const Player* player, SimPlayerPermission permission) { + using ll::i18n_literals::operator""_tr; + auto uuid = player->getUuid().asString(); + if (this->mSaveData.ownerUuid == uuid) return true; + if ((this->mSaveData.publicPermission & (uint)permission) == (uint)permission) return true; + auto it = this->mSaveData.permission.find(uuid); + return it != this->mSaveData.permission.end() && (it->second & (uint)permission) == (uint)permission; +} + +uint SimPlayer::getPermission(Player* player) { + auto uuid = player->getUuid().asString(); + if (this->mSaveData.ownerUuid == uuid) return (uint)-1; + if (auto it = this->mSaveData.permission.find(uuid); it != this->mSaveData.permission.end()) + return (it->second | this->mSaveData.publicPermission); + return this->mSaveData.publicPermission; +} +} // namespace coral_fans::cfsp::simulated_player \ No newline at end of file diff --git a/src/cfsp/core/simPlayer/SimPlayerInv.cpp b/src/cfsp/core/simPlayer/SimPlayerInv.cpp new file mode 100644 index 0000000..a3f2fa5 --- /dev/null +++ b/src/cfsp/core/simPlayer/SimPlayerInv.cpp @@ -0,0 +1,146 @@ +#include "SimPlayer.h" +#include "cfsp/base/OperateResult.h" +#include "cfsp/base/Schedule.h" +#include "ll/api/i18n/I18n.h" +#include "mc/dataloadhelper/DefaultDataLoadHelper.h " +#include "mc/nbt/CompoundTag.h" +#include "mc/network/packet/MobEquipmentPacket.h" +#include "mc/world/actor/player/Inventory.h" +#include "mc/world/actor/player/PlayerInventory.h" +#include "mc/world/actor/provider/ActorEquipment.h" +#include + + +namespace coral_fans::cfsp::simulated_player { +bool SimPlayer::isEmptyInv() { + if (!this->mSimPlayer) return false; + if (!this->mSimPlayer->mInventory->mInventory->isEmpty() + || this->mSimPlayer->getOffhandSlot() != ItemStack::EMPTY_ITEM() + || !ActorEquipment::getArmorContainer(this->mSimPlayer->getEntityContext()).isEmpty()) + return false; + if (auto ec = this->mSimPlayer->getEnderChestContainer(); ec.has_value()) return ec->isEmpty(); + return true; +} + +base::OperateResult SimPlayer ::invInfo() { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + std::string res = '\n' + "manager.info.spname"_tr() + this->mSaveData.name + "\n" + "manager.info.spOffhand"_tr(); + auto& _itemstack = this->mSimPlayer->getOffhandSlot(); + res += "§6" + _itemstack.getName() + "§2(" + std::to_string(_itemstack.mCount) + ")§r"; + res += " " + "manager.info.spEquip"_tr(); + for (auto& itemstack : ActorEquipment::getArmorContainer(this->mSimPlayer->getEntityContext())) + res += "§6" + itemstack.getName() + "§2(" + std::to_string(itemstack.mCount) + ")§r, "; + res += " " + "manager.info.spInv"_tr(); + for (auto& itemstack : *this->mSimPlayer->mInventory->mInventory->mItems) + res += "§6" + itemstack.getName() + "§2(" + std::to_string(itemstack.mCount) + ")§r, "; + return base::OperateResult::success(res); +} + +base::OperateResult SimPlayer::drop(int times, int interval) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (this->mSimPlayer->isDead()) [[unlikely]] + return base::OperateResult::error("manager.fail.spIsDead"_tr()); + if (!this->isFree()) return base::OperateResult::error("manager.fail.spIsBusy"_tr()); + if (times < 0) times = 0; + if (interval < 1) interval = 1; + this->mTaskid = base::Schedule::getInstance().getSchedule()->add(interval, [times, this](unsigned long long t) { + if (!this->mSimPlayer) [[unlikely]] + return false; + if (this->mSimPlayer->drop(this->mSimPlayer->getSelectedItem(), 0)) [[likely]] + this->mSimPlayer->setSelectedItem(ItemStack::EMPTY_ITEM()); + return !times || t < (unsigned long long)times - 1; + }); + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult SimPlayer::dropInv(int times, int interval) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (this->mSimPlayer->isDead()) [[unlikely]] + return base::OperateResult::error("manager.fail.spIsDead"_tr()); + if (!this->isFree()) return base::OperateResult::error("manager.fail.spIsBusy"_tr()); + if (times < 0) times = 0; + if (interval < 1) interval = 1; + this->mTaskid = base::Schedule::getInstance().getSchedule()->add(interval, [times, this](unsigned long long t) { + if (!this->mSimPlayer) [[unlikely]] + return false; + auto& inv = *this->mSimPlayer->mInventory->mInventory; + int sel = this->mSimPlayer->getSelectedItemSlot(); + int size = inv.getContainerSize(); + for (int i = 0; i < size; ++i) { + inv.swapSlots(i, sel); + if (this->mSimPlayer->drop(this->mSimPlayer->getSelectedItem(), 0)) [[likely]] + this->mSimPlayer->setSelectedItem(ItemStack::EMPTY_ITEM()); + } + return !times || t < (unsigned long long)times - 1; + }); + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult SimPlayer::swap(Player* player) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (!player) [[unlikely]] + return base::OperateResult::error("manager.fail.playerIsNull"_tr()); + static std::vector invKeys = {"Armor", "EnderChestInventory", "Inventory", "Mainhand", "Offhand"}; + auto spTag = std::make_unique(); + if (!this->mSimPlayer->save(*spTag)) [[unlikely]] + return base::OperateResult::error("manager.fail.failToSave"_tr()); + auto pTag = std::make_unique(); + if (!player->save(*pTag)) [[unlikely]] + return base::OperateResult::error("manager.fail.failToSave"_tr()); + for (auto& key : invKeys) { + auto spInvNode = spTag->mTags.extract(key); + auto pInvNode = pTag->mTags.extract(key); + spTag->mTags.insert(std::move(pInvNode)); + pTag->mTags.insert(std::move(spInvNode)); + } + try { + DefaultDataLoadHelper helper; + player->load(*pTag, helper); + player->sendInventory(true); + this->mSimPlayer->load(*spTag, helper); + } catch (std::exception ex) { + return base::OperateResult::error(std::string("Error: ") + ex.what()); + } + MobEquipmentPacket( + this->mSimPlayer->getRuntimeID(), + this->mSimPlayer->getOffhandSlot(), + 1, + 0, + ContainerID::Offhand + ) + .sendToClients(); // fix::更新副手,主手通过CFSPSaveHelperHook1更新,装备mojang代码自动更新 + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult SimPlayer::select(int id) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (this->mSimPlayer->isDead()) [[unlikely]] + return base::OperateResult::error("manager.fail.spIsDead"_tr()); + auto& inv = *this->mSimPlayer->mInventory->mInventory; + int size = inv.getContainerSize(); + for (int i = 0; i < size; i++) + if (inv.getItem(i).getId() == id) { + inv.swapSlots(i, this->mSimPlayer->getSelectedItemSlot()); + MobEquipmentPacket( + this->mSimPlayer->getRuntimeID(), + this->mSimPlayer->getSelectedItem(), + 0, + 0, + this->mSimPlayer->mInventory->mSelectedContainerId + ) + .sendToClients(); // fix::更新主手 + return base::OperateResult::success("manager.success.operate"_tr()); + } + return base::OperateResult::error("manager.fail.selectNoFound"_tr()); +} +} // namespace coral_fans::cfsp::simulated_player \ No newline at end of file diff --git a/src/cfsp/core/simPlayer/SimPlayerMessage.cpp b/src/cfsp/core/simPlayer/SimPlayerMessage.cpp new file mode 100644 index 0000000..35437dc --- /dev/null +++ b/src/cfsp/core/simPlayer/SimPlayerMessage.cpp @@ -0,0 +1,37 @@ +#include "SimPlayer.h" +#include "cfsp/base/OperateResult.h" +#include "ll/api/i18n/I18n.h" +#include "ll/api/service/Bedrock.h" +#include "mc/deps/core/utility/MCRESULT.h" +#include "mc/server/commands/CommandContext.h" +#include "mc/server/commands/CommandVersion.h" +#include "mc/server/commands/MinecraftCommands.h" +#include "mc/server/commands/PlayerCommandOrigin.h" +#include "mc/world/Minecraft.h" + +namespace coral_fans::cfsp::simulated_player { +base::OperateResult SimPlayer::chat(std::string const& messasge) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + this->mSimPlayer->simulateChat(messasge); + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult SimPlayer::runcmd(std::string const& cmd) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + CommandContext ctx( + cmd, + std::make_unique(PlayerCommandOrigin(*this->mSimPlayer)), + CommandVersion::CurrentVersion() + ); + auto mc = ll::service::getMinecraft(); + if (!mc) [[unlikely]] + return base::OperateResult::error("manager.error.runcmd"_tr()); + auto rst = mc->mCommands->executeCommand(ctx, false); + if (!rst.mSuccess) return base::OperateResult::error("manager.fail.runcmd"_tr()); + return base::OperateResult::success("manager.success.operate"_tr()); +} +} // namespace coral_fans::cfsp::simulated_player \ No newline at end of file diff --git a/src/cfsp/core/simPlayer/SimPlayerMove.cpp b/src/cfsp/core/simPlayer/SimPlayerMove.cpp new file mode 100644 index 0000000..8753b81 --- /dev/null +++ b/src/cfsp/core/simPlayer/SimPlayerMove.cpp @@ -0,0 +1,40 @@ +#include "SimPlayer.h" +#include "cfsp/base/OperateResult.h" +#include "ll/api/i18n/I18n.h" +#include "mc/scripting/modules/gametest/ScriptNavigationResult.h" + +namespace coral_fans::cfsp::simulated_player { +base::OperateResult SimPlayer::moveTo(Vec3 const& pos, float speed) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (this->mSimPlayer->isDead()) [[unlikely]] + return base::OperateResult::error("manager.fail.spIsDead"_tr()); + if (speed <= 0) return base::OperateResult::error("manager.fail.speedSmallerThan0"_tr()); + if (speed > 4.3f) speed = 4.3f; + this->mSimPlayer->simulateMoveToLocation(pos, speed, false); + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult SimPlayer::navTo(Vec3 const& pos, float speed) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (this->mSimPlayer->isDead()) [[unlikely]] + return base::OperateResult::error("manager.fail.spIsDead"_tr()); + if (speed <= 0) return base::OperateResult::error("manager.fail.speedSmallerThan0"_tr()); + if (speed > 4.3f) speed = 4.3f; + this->mSimPlayer->simulateNavigateToLocation(pos, speed); + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult SimPlayer::tp(Vec3 pos, std::optional dimId) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (!dimId.has_value()) dimId = this->mSimPlayer->getDimensionId(); + if (dimId.value() != this->mSimPlayer->getDimensionId()) pos.y -= 1.62f; + this->mSimPlayer->teleport(pos, dimId.value()); + return base::OperateResult::success("manager.success.operate"_tr()); +} +} // namespace coral_fans::cfsp::simulated_player \ No newline at end of file diff --git a/src/cfsp/core/simPlayer/SimPlayerPermission.h b/src/cfsp/core/simPlayer/SimPlayerPermission.h new file mode 100644 index 0000000..62ef239 --- /dev/null +++ b/src/cfsp/core/simPlayer/SimPlayerPermission.h @@ -0,0 +1,33 @@ +#pragma once + +namespace coral_fans::cfsp::simulated_player { +enum class SimPlayerPermission : unsigned int { + None = 0, + Spawn = 1 << 0, + Despawn = 1 << 1, + Respawn = 1 << 2, + Delete = 1 << 3, + Stop = 1 << 4, + Drop = 1 << 5, + DropInv = 1 << 6, + Swap = 1 << 7, + Sneaking = 1 << 8, + Swimming = 1 << 9, + Flying = 1 << 10, + Sprinting = 1 << 11, + Attack = 1 << 12, + Build = 1 << 13, + Interact = 1 << 14, + Jump = 1 << 15, + Use = 1 << 16, + Destroy = 1 << 17, + Chat = 1 << 18, + RunCmd = 1 << 19, + Select = 1 << 20, + LookAt = 1 << 21, + MoveTo = 1 << 22, + NavTo = 1 << 23, + Tp = 1 << 24, + BeAddedToGroup = 1 << 25, +}; +} \ No newline at end of file diff --git a/src/cfsp/core/simPlayer/SimPlayerSave.cpp b/src/cfsp/core/simPlayer/SimPlayerSave.cpp new file mode 100644 index 0000000..3f9a930 --- /dev/null +++ b/src/cfsp/core/simPlayer/SimPlayerSave.cpp @@ -0,0 +1,100 @@ +#include "SimPlayer.h" +#include "cfsp/CFSP.h" +#include "ll/api/Config.h" +#include "mc/dataloadhelper/DefaultDataLoadHelper.h" +#include "mc/nbt/CompoundTag.h" +#include +#include + +namespace coral_fans::cfsp::simulated_player { + +bool SimPlayer::save() { + if (this->mShouldSave) { + if (ll::config::saveConfig( + this->mSaveData, + CFSP::getInstance().getSelf().getDataDir() / "simplayer" + / reinterpret_cast(this->mSaveData.name.c_str()) / "data.json" + )) [[likely]] + this->mShouldSave = false; + } + if (!this->mSimPlayer) [[unlikely]] + return false; + auto tag = std::make_unique(); + if (!this->mSimPlayer->save(*tag)) [[unlikely]] + return false; + if (!tag) [[unlikely]] + return false; + std::ofstream f( + CFSP::getInstance().getSelf().getDataDir() / "simplayer" + / reinterpret_cast(this->mSaveData.name.c_str()) / "nbt", + std::ios_base::out | std::ios_base::trunc + ); + if (!f.is_open()) [[unlikely]] + return false; + f << tag->toSnbt(SnbtFormat::Minimize); + f.close(); + return true; +} + +bool SimPlayer::loadSpNbt() { + if (!this->mSimPlayer) [[unlikely]] + return false; + auto path = cfsp::CFSP::getInstance().getSelf().getDataDir() / "simplayer" + / reinterpret_cast(this->mSaveData.name.c_str()) / "nbt"; + if (!std::filesystem::exists(path)) [[unlikely]] + return false; + std::ifstream f(path, std::ios::binary | std::ios::ate); + if (!f.is_open()) [[unlikely]] + return false; + try { + boost::iostreams::mapped_file_source mmap; + mmap.open(path.string()); + std::string_view snbt{mmap.data(), mmap.size()}; + DefaultDataLoadHelper helper; + auto tag = CompoundTag::fromSnbt(snbt).value(); + this->mSimPlayer->load(tag, helper); + if (auto it = tag.mTags.find("DimensionId"); it != tag.mTags.end()) { + int dimId = it->second.get().data; + this->tp(this->mSimPlayer->getFeetPos(), dimId); + } + } catch (const std::exception& e) { + coral_fans::cfsp::CFSP::getInstance().getSelf().getLogger().error(e.what()); + return false; + } + return true; +} + +bool SimPlayer::checkInvEmptyForOfflineCFSP() { + auto path = cfsp::CFSP::getInstance().getSelf().getDataDir() / "simplayer" + / reinterpret_cast(this->mSaveData.name.c_str()) / "nbt"; + if (!std::filesystem::exists(path)) [[unlikely]] + return false; + std::ifstream f(path, std::ios::binary | std::ios::ate); + if (!f.is_open()) [[unlikely]] + return false; + try { + boost::iostreams::mapped_file_source mmap; + mmap.open(path.string()); + std::string_view snbt{mmap.data(), mmap.size()}; + DefaultDataLoadHelper helper; + auto tag = CompoundTag::fromSnbt(snbt).value(); + static std::vector invKeys = {"Armor", "EnderChestInventory", "Inventory", "Offhand"}; + for (auto& key : invKeys) { + if (auto it = tag.mTags.find(key); it != tag.mTags.end()) { + for (auto& invTag : it->second.get()) { + auto& _invTag = invTag.get(); + if (auto invIt = _invTag.mTags.find("Count"); invIt != _invTag.mTags.end()) { + if (invIt->second.get().data) { + return false; + } + } + } + } + } + } catch (const std::exception& e) { + coral_fans::cfsp::CFSP::getInstance().getSelf().getLogger().error(e.what()); + return false; + } + return true; +} +} // namespace coral_fans::cfsp::simulated_player \ No newline at end of file diff --git a/src/cfsp/core/simPlayer/SimPlayerSaveData.h b/src/cfsp/core/simPlayer/SimPlayerSaveData.h new file mode 100644 index 0000000..7dbbd28 --- /dev/null +++ b/src/cfsp/core/simPlayer/SimPlayerSaveData.h @@ -0,0 +1,22 @@ +#pragma once + +#include "ll/api/base/StdInt.h" +#include "mc/deps/core/math/Vec3.h" +#include +#include +#include + +namespace coral_fans::cfsp::simulated_player { +struct SimPlayerSaveData { + int version = 1; + std::string name; + std::string xuid; + std::optional uniqueId = std::nullopt; // 不锁定uniqueId时,为std::nullopt + std::string ownerUuid; // 当由后台上线时,为"" + std::string lastSpawnerUuid; // 当由后台上线时,为"" + uint publicPermission = 0; + std::unordered_map permission; // <玩家uuid, permission> + bool isOnline = true; + Vec3 lookAtOffSet = {0, 0, 0}; +}; +} // namespace coral_fans::cfsp::simulated_player \ No newline at end of file diff --git a/src/cfsp/core/simPlayer/SimPlayerStatus.cpp b/src/cfsp/core/simPlayer/SimPlayerStatus.cpp new file mode 100644 index 0000000..fc90ed7 --- /dev/null +++ b/src/cfsp/core/simPlayer/SimPlayerStatus.cpp @@ -0,0 +1,60 @@ +#include "SimPlayer.h" +#include "ll/api/i18n/I18n.h" +#include "mc/world/actor/player/LayeredAbilities.h" + +namespace coral_fans::cfsp::simulated_player { +base::OperateResult SimPlayer::sneaking(std::optional enable) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (this->mSimPlayer->isDead()) [[unlikely]] + return base::OperateResult::error("manager.fail.spIsDead"_tr()); + if (enable.has_value()) this->mSimPlayer->setSneaking(enable.value()); + else this->mSimPlayer->setSneaking(!this->mSimPlayer->getStatusFlag(ActorFlags::Sneaking)); + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult SimPlayer::swimming(std::optional enable) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (this->mSimPlayer->isDead()) [[unlikely]] + return base::OperateResult::error("manager.fail.spIsDead"_tr()); + if (enable.has_value()) enable.value() ? this->mSimPlayer->startSwimming() : this->mSimPlayer->stopSwimming(); + else + this->mSimPlayer->getStatusFlag(ActorFlags::Swimming) ? this->mSimPlayer->stopSwimming() + : this->mSimPlayer->startSwimming(); + return base::OperateResult::success("manager.success.operate"_tr()); +} + +base::OperateResult SimPlayer::flying(std::optional enable) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (this->mSimPlayer->isDead()) [[unlikely]] + return base::OperateResult::error("manager.fail.spIsDead"_tr()); + auto& spAbilities = this->mSimPlayer->getAbilities(); + if (spAbilities.getAbility(AbilitiesIndex::MayFly).mValue->mBoolVal) [[likely]] { + if (enable.has_value()) { + if (spAbilities.setAbility(AbilitiesIndex::Flying, enable.value())) [[likely]] + return base::OperateResult::success("manager.success.operate"_tr()); + } else if (spAbilities.setAbility( + AbilitiesIndex::Flying, + !spAbilities.getAbility(AbilitiesIndex::Flying).mValue->mBoolVal + )) + return base::OperateResult::success("manager.success.operate"_tr()); + } + return base::OperateResult::error("manager.error.faileToSetFlying"_tr()); +} + +base::OperateResult SimPlayer::sprinting(std::optional enable) { + using ll::i18n_literals::operator""_tr; + if (!this->mSimPlayer) [[unlikely]] + return base::OperateResult::error("manager.error.loseSimplayer"_tr()); + if (this->mSimPlayer->isDead()) [[unlikely]] + return base::OperateResult::error("manager.fail.spIsDead"_tr()); + if (enable.has_value()) this->mSimPlayer->setSprinting(enable.value()); + else this->mSimPlayer->setSprinting(!this->mSimPlayer->getStatusFlag(ActorFlags::Sprinting)); + return base::OperateResult::success("manager.success.operate"_tr()); +} +} // namespace coral_fans::cfsp::simulated_player \ No newline at end of file diff --git a/src/cfsp/entrance/command/ComandManager.cpp b/src/cfsp/entrance/command/ComandManager.cpp new file mode 100644 index 0000000..54876b0 --- /dev/null +++ b/src/cfsp/entrance/command/ComandManager.cpp @@ -0,0 +1,126 @@ +#include "ComandManager.h" +#include "cfsp/CFSP.h" +#include "cfsp/core/manager/CFSPManager.h" +#include "ll/api/Config.h" +#include "ll/api/command/CommandRegistrar.h" +#include "ll/api/command/runtime/RuntimeOverload.h" +#include "ll/api/i18n/I18n.h" +#include "mc/server/commands/CommandOriginType.h" +#include "mc/server/commands/CommandOutput.h" +#include "mc/world/actor/player/Player.h" +#include +#include + + +namespace coral_fans::cfsp::command { +ComandManager& ComandManager::getInstance() { + static ComandManager instance; + return instance; +} + +std::optional ComandManager::tryGetPlayer(CommandOrigin const& origin) { + auto oriType = origin.getOriginType(); + if (oriType == CommandOriginType::DedicatedServer) return nullptr; + if (oriType != CommandOriginType::Player) return std::nullopt; + auto* entity = origin.getEntity(); + if (entity == nullptr || !entity->isType(ActorType::Player)) return std::nullopt; + return static_cast(entity); +} + +void ComandManager::registerCommand(CommandPermissionLevel permission) { + using ll::i18n_literals::operator""_tr; + + // reg cmd + this->command = &ll::command::CommandRegistrar::getInstance() + .getOrCreateCommand("sp", "command.sp.description"_tr(), permission); + + // sp version + this->command->overload().text("version").execute([](CommandOrigin const&, CommandOutput& output) { +#ifdef VERSION + output.success(VERSION); +#endif +#ifdef COMMITID + output.success("Commit ID: {}", COMMITID); +#endif + }); + + // sp c + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspSettingType", + { + {"autojoin", 0}, + {"autorespawn", 1}, + {"autodespawn", 2} + } + ); + this->command->runtimeOverload() + .text("c") + .required("type", ll::command::ParamKind::Enum, "cfspSettingType") + .required("enable", ll::command::ParamKind::Bool) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value() || !manager::CFSPManager::getInstance().isManager(player.value())) + return output.error("command.fail.illegalOrigin"_tr()); + switch (self["type"].get().index) { + case 0: + manager::CFSPManager::getInstance().setAutoJoin(self["enable"].get()); + break; + case 1: + manager::CFSPManager::getInstance().setAutoRespawn(self["enable"].get()); + break; + case 2: + manager::CFSPManager::getInstance().setAutoDespawn(self["enable"].get()); + break; + } + output.success("manager.success.set"_tr()); + }); + + // sp + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspManagerSettingType", + { + {"addmanager", 0}, + {"rmmanager", 1} + } + ); + this->command->runtimeOverload() + .required("type", ll::command::ParamKind::Enum, "cfspManagerSettingType") + .required("targetPlayer", ll::command::ParamKind::Player) + .execute([](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + if (origin.getOriginType() != CommandOriginType::DedicatedServer) + return output.error("command.fail.onlyDedicateServer"_tr()); + auto targetPlayer = self["targetPlayer"].get().results(origin); + if (targetPlayer.size() > 1) return output.error("manager.fail.targetNotSingle"_tr()); + if (targetPlayer.data->data()[0]->isSimulatedPlayer()) return output.error("manager.fail.targetIsSp"_tr()); + switch (self["type"].get().index) { + case 0: + if (manager::CFSPManager::getInstance() + .getConfig() + .superManagerList.insert(targetPlayer.data->data()[0]->getUuid().asString()) + .second) { + ll::config::saveConfig( + manager::CFSPManager::getInstance().getConfig(), + cfsp::CFSP::getInstance().getSelf().getConfigDir() / "config.json" + ); + output.success("manager.success.set"_tr()); + } else output.error("manager.fail.targetIsManager"_tr()); + break; + case 1: + if (manager::CFSPManager::getInstance().getConfig().superManagerList.erase( + targetPlayer.data->data()[0]->getUuid().asString() + )) { + ll::config::saveConfig( + manager::CFSPManager::getInstance().getConfig(), + cfsp::CFSP::getInstance().getSelf().getConfigDir() / "config.json" + ); + output.success("manager.success.set"_tr()); + } else output.error("manager.fail.targetNotManager"_tr()); + break; + } + }); + + this->registerGuiCommand(); + this->registerSpComand(); + this->registerGroupComand(); +} +} // namespace coral_fans::cfsp::command \ No newline at end of file diff --git a/src/cfsp/entrance/command/ComandManager.h b/src/cfsp/entrance/command/ComandManager.h new file mode 100644 index 0000000..8807cae --- /dev/null +++ b/src/cfsp/entrance/command/ComandManager.h @@ -0,0 +1,25 @@ +#pragma once + +#include "ll/api/command/CommandHandle.h" +#include "mc/server/commands/CommandPermissionLevel.h" +#include + +namespace coral_fans::cfsp::command { +class ComandManager { +private: + ll::command::CommandHandle* command; + +public: + static ComandManager& getInstance(); + +private: + // 从指令源中获取玩家,如果指令来源是控制台则返回null + std::optional tryGetPlayer(CommandOrigin const& origin); + void registerGuiCommand(); + void registerSpComand(); + void registerGroupComand(); + +public: + void registerCommand(CommandPermissionLevel permission); +}; +} // namespace coral_fans::cfsp::command \ No newline at end of file diff --git a/src/cfsp/entrance/command/GroupCommand.cpp b/src/cfsp/entrance/command/GroupCommand.cpp new file mode 100644 index 0000000..636b3e8 --- /dev/null +++ b/src/cfsp/entrance/command/GroupCommand.cpp @@ -0,0 +1,622 @@ +#include "ComandManager.h" +#include "cfsp/base/OperateResult.h" +#include "cfsp/core/manager/CFSPManager.h" +#include "ll/api/command/runtime/ParamKind.h" +#include "ll/api/command/runtime/RuntimeCommand.h" +#include "ll/api/command/runtime/RuntimeOverload.h" +#include "ll/api/i18n/I18n.h" +#include "mc/world/phys/HitResult.h" +#include + +namespace coral_fans::cfsp::command { +#define GROUP_ONLINE_OPERATE1_CALL(FUNC) \ + if (self["enable"].has_value()) \ + res = manager::CFSPManager::getInstance().group##FUNC( \ + player.value(), \ + self["gname"].get(), \ + self["enable"].get() \ + ); \ + else \ + res = manager::CFSPManager::getInstance().group##FUNC( \ + player.value(), \ + self["gname"].get() \ + ); \ + break; + +#define GROUP_ONLINE_OPERATE2_CALL(FUNC) \ + if (!self["times"].has_value()) \ + res = manager::CFSPManager::getInstance().group##FUNC( \ + player.value(), \ + self["gname"].get() \ + ); \ + else if (!self["interval"].has_value()) \ + res = manager::CFSPManager::getInstance().group##FUNC( \ + player.value(), \ + self["gname"].get(), \ + self["times"].get() \ + ); \ + else \ + res = manager::CFSPManager::getInstance().group##FUNC( \ + player.value(), \ + self["gname"].get(), \ + self["times"].get(), \ + self["interval"].get() \ + ); \ + break; + +#define GROUP_ONLINE_OPERATE3_CALL(FUNC) \ + if (!self["long"].has_value()) \ + res = manager::CFSPManager::getInstance().group##FUNC( \ + player.value(), \ + self["gname"].get() \ + ); \ + else if (!self["times"].has_value()) \ + res = manager::CFSPManager::getInstance().group##FUNC( \ + player.value(), \ + self["gname"].get(), \ + self["long"].get() \ + ); \ + else if (!self["interval"].has_value()) \ + res = manager::CFSPManager::getInstance().group##FUNC( \ + player.value(), \ + self["gname"].get(), \ + self["long"].get(), \ + self["times"].get() \ + ); \ + else \ + res = manager::CFSPManager::getInstance().group##FUNC( \ + player.value(), \ + self["gname"].get(), \ + self["long"].get(), \ + self["times"].get(), \ + self["interval"].get() \ + ); \ + break; + +#define GROUP_ONLINE_OPERATE4_CALL(FUNC) \ + if (!self["pos"].has_value()) { \ + if (!player.value()) [[unlikely]] \ + return output.error("command.fail.lackPara"_tr()); \ + const auto& hit = player.value()->traceRay(5.25f, false, true); \ + if (hit) \ + res = manager::CFSPManager::getInstance() \ + .group##FUNC(player.value(), self["gname"].get(), hit.mPos); \ + else \ + res = manager::CFSPManager::getInstance().group##FUNC( \ + player.value(), \ + self["gname"].get(), \ + player.value()->getFeetPos() \ + ); \ + } else if (!self["speed"].has_value()) \ + res = manager::CFSPManager::getInstance().group##FUNC( \ + player.value(), \ + self["gname"].get(), \ + self["pos"] \ + .get() \ + .getPosition(CommandVersion::CurrentVersion(), origin, {0, 0, 0}) \ + ); \ + else \ + res = manager::CFSPManager::getInstance().group##FUNC( \ + player.value(), \ + self["gname"].get(), \ + self["pos"] \ + .get() \ + .getPosition(CommandVersion::CurrentVersion(), origin, {0, 0, 0}), \ + self["speed"].get() \ + ); \ + break; + +void ComandManager::registerGroupComand() { + using ll::i18n_literals::operator""_tr; + // sp list g + this->command->overload().text("list").text("g").execute( + [this](CommandOrigin const& origin, CommandOutput& output) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + output.success(manager::CFSPManager::getInstance().listGroup(player.value())); + } + ); + + // sp g create + this->command->runtimeOverload() + .text("g") + .text("create") + .required("gname", ll::command::ParamKind::String) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + manager::CFSPManager::getInstance() + .groupCreate(player.value(), self["gname"].get()) + .output(output); + }); + + // sp g + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspGroupOperate1", + { + {"addsp", 0}, + {"rmsp", 1} + } + ); + this->command->runtimeOverload() + .text("g") + .required("operate", ll::command::ParamKind::Enum, "cfspGroupOperate1") + .required("gname", ll::command::ParamKind::SoftEnum, "cfspGroup") + .required("spname", ll::command::ParamKind::SoftEnum, "cfspSplist") + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + switch (self["operate"].get().index) { + case 0: + return manager::CFSPManager::getInstance() + .groupAddSp( + player.value(), + self["gname"].get(), + self["spname"].get() + ) + .output(output); + case 1: + return manager::CFSPManager::getInstance() + .groupRmSp( + player.value(), + self["gname"].get(), + self["spname"].get() + ) + .output(output); + } + }); + + // sp g + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspGroupOperate2", + { + {"delete", 0}, + {"spawn", 1}, + {"despawn", 2}, + {"respawn", 3}, + {"stop", 4}, + {"info", 6}, + {"invinfo", 7} + } + ); + this->command->runtimeOverload() + .text("g") + .required("operate", ll::command::ParamKind::Enum, "cfspGroupOperate2") + .required("gname", ll::command::ParamKind::SoftEnum, "cfspGroup") + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + std::vector res; + switch (self["operate"].get().index) { + case 0: + res.emplace_back(manager::CFSPManager::getInstance().groupDelete( + player.value(), + self["gname"].get() + )); + break; + case 1: + res = manager::CFSPManager::getInstance().groupSpawn( + player.value(), + self["gname"].get() + ); + break; + case 2: + res = manager::CFSPManager::getInstance().groupDespawn( + player.value(), + self["gname"].get() + ); + break; + case 3: + res = manager::CFSPManager::getInstance().groupRespawn( + player.value(), + self["gname"].get() + ); + break; + case 4: + res = manager::CFSPManager::getInstance().groupStop( + player.value(), + self["gname"].get() + ); + break; + case 5: + res = manager::CFSPManager::getInstance().groupInfo( + player.value(), + self["gname"].get() + ); + break; + case 6: + res = manager::CFSPManager::getInstance().groupInvInfo( + player.value(), + self["gname"].get() + ); + break; + } + for (auto perRes : res) perRes.output(output); + }); + + // sp g deletesp [force: bool] + this->command->runtimeOverload() + .text("g") + .text("deletesp") + .required("gname", ll::command::ParamKind::SoftEnum, "cfspGroup") + .optional("force", ll::command::ParamKind::Bool) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + std::vector res; + if (!self["force"].has_value()) + res = manager::CFSPManager::getInstance().groupDeleteSp( + player.value(), + self["gname"].get() + ); + else + res = manager::CFSPManager::getInstance().groupDeleteSp( + player.value(), + self["gname"].get(), + self["force"].get() + ); + for (auto perRes : res) perRes.output(output); + }); + + // sp g [enabled: bool] + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspGroupOperate3", + { + {"sneaking", 0}, + {"swimming", 1}, + {"flying", 2}, + {"sprinting", 3} + } + ); + this->command->runtimeOverload() + .text("g") + .required("operate", ll::command::ParamKind::Enum, "cfspGroupOperate3") + .required("gname", ll::command::ParamKind::SoftEnum, "cfspGroup") + .optional("enable", ll::command::ParamKind::Bool) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + std::vector res; + switch (self["operate"].get().index) { + case 0: + GROUP_ONLINE_OPERATE1_CALL(Sneaking) + case 1: + GROUP_ONLINE_OPERATE1_CALL(Swimming) + case 2: + GROUP_ONLINE_OPERATE1_CALL(Flying) + case 3: + GROUP_ONLINE_OPERATE1_CALL(Sprinting) + } + for (auto perRes : res) perRes.output(output); + }); + + // sp g [times: int] [interval: int] + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspGroupOperate4", + { + {"attack", 0}, + {"build", 1}, + {"interact", 2}, + {"jump", 3}, + {"drop", 4}, + {"dropinv", 5} + } + ); + this->command->runtimeOverload() + .text("g") + .required("operate", ll::command::ParamKind::Enum, "cfspGroupOperate4") + .required("gname", ll::command::ParamKind::SoftEnum, "cfspGroup") + .optional("times", ll::command::ParamKind::Int) + .optional("interval", ll::command::ParamKind::Int) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + std::vector res; + switch (self["operate"].get().index) { + case 0: + GROUP_ONLINE_OPERATE2_CALL(Attack) + case 1: + GROUP_ONLINE_OPERATE2_CALL(Build) + case 2: + GROUP_ONLINE_OPERATE2_CALL(Interact) + case 3: + GROUP_ONLINE_OPERATE2_CALL(Jump) + case 4: + GROUP_ONLINE_OPERATE2_CALL(Drop) + case 5: + GROUP_ONLINE_OPERATE2_CALL(DropInv) + } + for (auto perRes : res) perRes.output(output); + }); + + // sp g [long: int] [times: int] [interval: int] + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspGroupOperate5", + { + {"use", 0}, + {"destroy", 1} + } + ); + this->command->runtimeOverload() + .text("g") + .required("operate", ll::command::ParamKind::Enum, "cfspGroupOperate5") + .required("gname", ll::command::ParamKind::SoftEnum, "cfspGroup") + .optional("long", ll::command::ParamKind::Int) + .optional("times", ll::command::ParamKind::Int) + .optional("interval", ll::command::ParamKind::Int) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + std::vector res; + switch (self["operate"].get().index) { + case 0: + GROUP_ONLINE_OPERATE3_CALL(Use) + case 1: + GROUP_ONLINE_OPERATE3_CALL(Destroy) + } + for (auto perRes : res) perRes.output(output); + }); + + // sp g + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspGroupOperate6", + { + {"chat", 0}, + {"runcmd", 1} + } + ); + this->command->runtimeOverload() + .text("g") + .required("operate", ll::command::ParamKind::Enum, "cfspGroupOperate6") + .required("gname", ll::command::ParamKind::SoftEnum, "cfspGroup") + .required("message", ll::command::ParamKind::String) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + std::vector res; + switch (self["operate"].get().index) { + case 0: + res = manager::CFSPManager::getInstance().groupChat( + player.value(), + self["gname"].get(), + self["message"].get() + ); + break; + case 1: + res = manager::CFSPManager::getInstance().groupRunCmd( + player.value(), + self["gname"].get(), + self["message"].get() + ); + break; + } + for (auto perRes : res) perRes.output(output); + }); + + // sp g lookat [pos: Vec3] + this->command->runtimeOverload() + .text("g") + .text("lookat") + .required("gname", ll::command::ParamKind::SoftEnum, "cfspGroup") + .optional("pos", ll::command::ParamKind::Vec3) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + std::vector res; + if (!self["pos"].has_value()) { + if (!player.value()) [[unlikely]] + return output.error("command.fail.lackPara"_tr()); + const auto& hit = player.value()->traceRay(5.25f, false, true); + if (hit) + res = manager ::CFSPManager ::getInstance().groupLookAt( + player.value(), + self["gname"].get(), + hit.mPos + ); + else + res = manager ::CFSPManager ::getInstance().groupLookAt( + player.value(), + self["gname"].get(), + player.value()->getFeetPos() + ); + } else + res = manager ::CFSPManager ::getInstance().groupLookAt( + player.value(), + self["gname"].get(), + self["pos"] + .get() + .getPosition(CommandVersion ::CurrentVersion(), origin, {0, 0, 0}) + ); + for (auto perRes : res) perRes.output(output); + }); + + // sp g [pos: Vec3] [speed: float] + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspGroupOperate7", + { + {"moveto", 0}, + {"navto", 1} + } + ); + this->command->runtimeOverload() + .text("g") + .required("operate", ll::command::ParamKind::Enum, "cfspGroupOperate7") + .required("gname", ll::command::ParamKind::SoftEnum, "cfspGroup") + .optional("pos", ll::command::ParamKind::Vec3) + .optional("speed", ll::command::ParamKind::Float) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + std::vector res; + switch (self["operate"].get().index) { + case 0: + GROUP_ONLINE_OPERATE4_CALL(MoveTo) + case 1: + GROUP_ONLINE_OPERATE4_CALL(NavTo) + } + for (auto perRes : res) perRes.output(output); + }); + + // sp g tp + this->command->runtimeOverload() + .text("g") + .text("tp") + .required("gname", ll::command::ParamKind::SoftEnum, "cfspGroup") + .optional("pos", ll::command::ParamKind::Vec3) + .optional("dim", ll::command::ParamKind::Dimension) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + std::vector res; + if (!self["pos"].has_value()) { + if (!player.value()) [[unlikely]] + return output.error("command.fail.lackPara"_tr()); + const auto& hit = player.value()->traceRay(5.25f, false, true); + if (hit) + res = manager::CFSPManager::getInstance().groupTp( + player.value(), + self["gname"].get(), + hit.mPos, + player.value()->getDimensionId() + ); + else + res = manager::CFSPManager::getInstance().groupTp( + player.value(), + self["gname"].get(), + player.value()->getFeetPos(), + player.value()->getDimensionId() + ); + } else if (!self["dim"].has_value()) { + if (!player.value()) + res = manager::CFSPManager::getInstance().groupTp( + player.value(), + self["gname"].get(), + self["pos"] + .get() + .getPosition(CommandVersion::CurrentVersion(), origin, {0, 0, 0}) + ); + else + res = manager::CFSPManager::getInstance().groupTp( + player.value(), + self["gname"].get(), + self["pos"] + .get() + .getPosition(CommandVersion::CurrentVersion(), origin, {0, 0, 0}), + player.value()->getDimensionId() + ); + } else + res = manager::CFSPManager::getInstance().groupTp( + player.value(), + self["gname"].get(), + self["pos"] + .get() + .getPosition(CommandVersion::CurrentVersion(), origin, {0, 0, 0}), + self["dim"].get().id + ); + for (auto perRes : res) perRes.output(output); + }); + + // sp g select + this->command->runtimeOverload() + .text("g") + .text("select") + .required("gname", ll::command::ParamKind::SoftEnum, "cfspGroup") + .required("item", ll::command::ParamKind::Item) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + auto res = manager::CFSPManager::getInstance().groupSelect( + player.value(), + self["gname"].get(), + self["item"].get().mId + ); + for (auto perRes : res) perRes.output(output); + }); + + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspGroupPermType", + { + {"all", -1}, + {"AddSp", 0 }, + {"RmSp", 1 }, + {"Delete", 2 }, + {"Spawn", 3 }, + {"Despawn", 4 }, + {"Respawn", 5 }, + {"DeleteSp", 6 }, + {"Stop", 7 }, + {"Drop", 8 }, + {"DropInv", 9 }, + {"Sneaking", 10}, + {"Swimming", 11}, + {"Flying", 12}, + {"Sprinting", 13}, + {"Attack", 14}, + {"Build", 15}, + {"Interact", 16}, + {"Jump", 17}, + {"Use", 18}, + {"Destroy", 19}, + {"Chat", 20}, + {"RunCmd", 21}, + {"LookAt", 22}, + {"MoveTo", 23}, + {"NavTo", 24}, + {"Tp", 25}, + {"Select", 26}, + } + ); + // sp g perm + this->command->runtimeOverload() + .text("g") + .text("perm") + .required("gname", ll::command::ParamKind::SoftEnum, "cfspGroup") + .required("permType", ll::command::ParamKind::Enum, "cfspGroupPermType") + .required("targetPlayer", ll::command::ParamKind::Player) + .required("enable", ll::command::ParamKind::Bool) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + auto targetPlayer = self["targetPlayer"].get().results(origin); + if (targetPlayer.size() > 1) output.error("manager.fail.targetNotSingle"_tr()); + if (targetPlayer.data->data()[0]->isSimulatedPlayer()) return output.error("manager.fail.targetIsSp"_tr()); + auto index = self["permType"].get().index; + uint perm; + if (index == (uint64)-1) perm = (uint)-1; + else perm = 1 << index; + manager::CFSPManager::getInstance() + .groupPerm( + player.value(), + self["gname"].get(), + perm, + self["enable"].get(), + targetPlayer.data->data()[0]->getUuid().asString() + ) + .output(output); + }); + + // sp g permpublic + this->command->runtimeOverload() + .text("g") + .text("permpublic") + .required("gname", ll::command::ParamKind::SoftEnum, "cfspGroup") + .required("permType", ll::command::ParamKind::Enum, "cfspGroupPermType") + .required("enable", ll::command::ParamKind::Bool) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + auto index = self["permType"].get().index; + uint perm; + if (index == (uint64)-1) perm = (uint)-1; + else perm = 1 << index; + manager::CFSPManager::getInstance() + .groupPerm( + player.value(), + self["gname"].get(), + perm, + self["enable"].get() + ) + .output(output); + }); +} +} // namespace coral_fans::cfsp::command \ No newline at end of file diff --git a/src/cfsp/entrance/command/GuiCommand.cpp b/src/cfsp/entrance/command/GuiCommand.cpp new file mode 100644 index 0000000..622b530 --- /dev/null +++ b/src/cfsp/entrance/command/GuiCommand.cpp @@ -0,0 +1,48 @@ +#include "ComandManager.h" +#include "cfsp/core/manager/CFSPManager.h" +#include "cfsp/entrance/gui/GuiManager.h" +#include "ll/api/i18n/I18n.h" +#include "mc/server/commands/CommandOutput.h" +#include "mc/world/level/Level.h" + +namespace coral_fans::cfsp::command { +void ComandManager::registerGuiCommand() { + using ll::i18n_literals::operator""_tr; + if (!manager::CFSPManager::getInstance().getPermissionConfig().gui.enabled) return; + + // sp + this->command->overload().execute([this](CommandOrigin const& origin, CommandOutput& output) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value() || !player.value()) return output.error("command.fail.onlyplayer"_tr()); + if (auto res = manager::CFSPManager::getInstance() + .baseCheck(player.value(), manager::CFSPManager::getInstance().getPermissionConfig().gui); + !res) + return res.output(output); + if (manager::CFSPManager::getInstance().isManager(player.value())) + gui::GuiManager::getInstance().sendManagerMainMenu(*player.value()); + else gui::GuiManager::getInstance().sendMainMenu(*player.value()); + }); + + // sp p + this->command->overload().text("p").execute([this](CommandOrigin const& origin, CommandOutput& output) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value() || !player.value()) return output.error("command.fail.onlyplayer"_tr()); + if (auto res = manager::CFSPManager::getInstance() + .baseCheck(player.value(), manager::CFSPManager::getInstance().getPermissionConfig().gui); + !res) + return res.output(output); + return gui::GuiManager::getInstance().sendSplist(*player.value()); + }); + + // sp g + this->command->overload().text("g").execute([this](CommandOrigin const& origin, CommandOutput& output) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value() || !player.value()) return output.error("command.fail.onlyplayer"_tr()); + if (auto res = manager::CFSPManager::getInstance() + .baseCheck(player.value(), manager::CFSPManager::getInstance().getPermissionConfig().gui); + !res) + return res.output(output); + return gui::GuiManager::getInstance().sendGroupList(*player.value()); + }); +} +} // namespace coral_fans::cfsp::command \ No newline at end of file diff --git a/src/cfsp/entrance/command/SpCommand.cpp b/src/cfsp/entrance/command/SpCommand.cpp new file mode 100644 index 0000000..196ecaf --- /dev/null +++ b/src/cfsp/entrance/command/SpCommand.cpp @@ -0,0 +1,665 @@ +#include "ComandManager.h" +#include "cfsp/core/manager/CFSPManager.h" +#include "ll/api/command/runtime/ParamKind.h" +#include "ll/api/command/runtime/RuntimeCommand.h" +#include "ll/api/command/runtime/RuntimeOverload.h" +#include "ll/api/i18n/I18n.h" +#include "mc/server/commands/CommandSelectorResults.h" +#include "mc/world/phys/HitResult.h" + +namespace coral_fans::cfsp::command { +#define SP_ONLINE_OPERATE1_CALL(FUNC) \ + return manager::CFSPManager::getInstance() \ + .sp##FUNC(player.value(), self["spname"].get()) \ + .output(output); + +#define SP_ONLINE_OPERATE2_CALL(FUNC) \ + if (self["enable"].has_value()) \ + return manager::CFSPManager::getInstance() \ + .sp##FUNC( \ + player.value(), \ + self["spname"].get(), \ + self["enable"].get() \ + ) \ + .output(output); \ + return manager::CFSPManager::getInstance() \ + .sp##FUNC(player.value(), self["spname"].get()) \ + .output(output); + +#define SP_ONLINE_OPERATE3_CALL(FUNC) \ + if (!self["times"].has_value()) \ + return manager::CFSPManager::getInstance() \ + .sp##FUNC(player.value(), self["spname"].get()) \ + .output(output); \ + if (!self["interval"].has_value()) \ + return manager::CFSPManager::getInstance() \ + .sp##FUNC( \ + player.value(), \ + self["spname"].get(), \ + self["times"].get() \ + ) \ + .output(output); \ + return manager::CFSPManager::getInstance() \ + .sp##FUNC( \ + player.value(), \ + self["spname"].get(), \ + self["times"].get(), \ + self["interval"].get() \ + ) \ + .output(output); + +#define SP_ONLINE_OPERATE4_CALL(FUNC) \ + if (!self["long"].has_value()) \ + return manager::CFSPManager::getInstance() \ + .sp##FUNC(player.value(), self["spname"].get()) \ + .output(output); \ + if (!self["times"].has_value()) \ + return manager::CFSPManager::getInstance() \ + .sp##FUNC( \ + player.value(), \ + self["spname"].get(), \ + self["long"].get() \ + ) \ + .output(output); \ + if (!self["interval"].has_value()) \ + return manager::CFSPManager::getInstance() \ + .sp##FUNC( \ + player.value(), \ + self["spname"].get(), \ + self["long"].get(), \ + self["times"].get() \ + ) \ + .output(output); \ + return manager::CFSPManager::getInstance() \ + .sp##FUNC( \ + player.value(), \ + self["spname"].get(), \ + self["long"].get(), \ + self["times"].get(), \ + self["interval"].get() \ + ) \ + .output(output); + +#define SP_ONLINE_OPERATE5_CALL(FUNC) \ + return manager::CFSPManager::getInstance() \ + .sp##FUNC( \ + player.value(), \ + self["spname"].get(), \ + self["message"].get() \ + ) \ + .output(output); + +#define SP_ONLINE_OPERATE6_CALL(FUNC) \ + if (!self["pos"].has_value()) { \ + if (!player.value()) [[unlikely]] \ + return output.error("command.fail.lackPara"_tr()); \ + const auto& hit = player.value()->traceRay(5.25f, false, true); \ + if (hit) \ + return manager::CFSPManager::getInstance() \ + .sp##FUNC(player.value(), self["spname"].get(), hit.mPos) \ + .output(output); \ + return manager::CFSPManager::getInstance() \ + .sp##FUNC( \ + player.value(), \ + self["spname"].get(), \ + player.value()->getFeetPos() \ + ) \ + .output(output); \ + } \ + if (!self["speed"].has_value()) \ + return manager::CFSPManager::getInstance() \ + .sp##FUNC( \ + player.value(), \ + self["spname"].get(), \ + self["pos"] \ + .get() \ + .getPosition(CommandVersion::CurrentVersion(), origin, {0, 0, 0}) \ + ) \ + .output(output); \ + return manager::CFSPManager::getInstance() \ + .sp##FUNC( \ + player.value(), \ + self["spname"].get(), \ + self["pos"] \ + .get() \ + .getPosition(CommandVersion::CurrentVersion(), origin, {0, 0, 0}), \ + self["speed"].get() \ + ) \ + .output(output); + +void ComandManager::registerSpComand() { + using ll::i18n_literals::operator""_tr; + + // sp list p [online|offline] + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspOnlineType", + { + {"online", 0}, + {"offline", 1} + } + ); + this->command->runtimeOverload() + .text("list") + .text("p") + .optional("type", ll::command::ParamKind::Enum, "cfspOnlineType") + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + if (!manager::CFSPManager::getInstance().isAllowed(player.value())) + return output.error("command.error.permissionDenied"_tr()); + if (!self["type"].has_value()) + return output.success( + manager::CFSPManager::getInstance().listOnlineSp(player.value()) + + manager::CFSPManager::getInstance().listOfflineSp(player.value()) + ); + switch (self["type"].get().index) { + case 0: + if (manager::CFSPManager::getInstance().isManager(player.value())) + return output.success(manager::CFSPManager::getInstance().listOnlineSp(nullptr)); + return output.success(manager::CFSPManager::getInstance().listOnlineSp(player.value())); + case 1: + if (manager::CFSPManager::getInstance().isManager(player.value())) + return output.success(manager::CFSPManager::getInstance().listOfflineSp(nullptr)); + return output.success(manager::CFSPManager::getInstance().listOfflineSp(player.value())); + } + }); + + // sp p create [pos: Vec3] [dim: Dimension] [lockUniqueId: bool] + this->command->runtimeOverload() + .text("p") + .text("create") + .required("name", ll::command::ParamKind::String) + .optional("pos", ll::command::ParamKind::Vec3) + .optional("dim", ll::command::ParamKind::Dimension) + .optional("lockUniqueId", ll::command::ParamKind::Bool) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + if (!self["pos"].has_value()) { + if (!player.value()) return output.error("command.fail.lackPara"_tr()); + const auto& hit = player.value()->traceRay(5.25f, false, true); + if (hit) + return manager::CFSPManager::getInstance() + .spCreate( + player.value(), + self["name"].get(), + hit.mPos, + player.value()->getDimensionId() + ) + .output(output); + return manager::CFSPManager::getInstance() + .spCreate( + player.value(), + self["name"].get(), + player.value()->getFeetPos(), + player.value()->getDimensionId() + ) + .output(output); + } + if (!self["dim"].has_value()) { + if (!player.value()) return output.error("command.fail.lackPara"_tr()); + return manager::CFSPManager::getInstance() + .spCreate( + player.value(), + self["name"].get(), + self["pos"] + .get() + .getPosition(CommandVersion::CurrentVersion(), origin, {0, 0, 0}), + player.value()->getDimensionId() + ) + .output(output); + } + if (!self["lockUniqueId"].has_value()) + return manager::CFSPManager::getInstance() + .spCreate( + player.value(), + self["name"].get(), + self["pos"] + .get() + .getPosition(CommandVersion::CurrentVersion(), origin, {0, 0, 0}), + self["dim"].get().id + ) + .output(output); + return manager::CFSPManager::getInstance() + .spCreate( + player.value(), + self["name"].get(), + self["pos"] + .get() + .getPosition(CommandVersion::CurrentVersion(), origin, {0, 0, 0}), + self["dim"].get().id, + self["lockUniqueId"].get() + ) + .output(output); + }); + + // sp p spawn + this->command->runtimeOverload() + .text("p") + .text("spawn") + .required("spname", ll::command::ParamKind::SoftEnum, "cfspOfflineSp") + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + manager::CFSPManager::getInstance() + .spSpawn(player.value(), self["spname"].get()) + .output(output); + }); + + // sp p + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspOnlineSpOperate1", + { + {"despawn", 0}, + {"stop", 1}, + {"swap", 2}, + {"info", 3}, + {"invinfo", 4} + } + ); + this->command->runtimeOverload() + .text("p") + .required("operate", ll::command::ParamKind::Enum, "cfspOnlineSpOperate1") + .required("spname", ll::command::ParamKind::SoftEnum, "cfspOnlineSp") + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + switch (self["operate"].get().index) { + case 0: + SP_ONLINE_OPERATE1_CALL(Despawn) + case 1: + SP_ONLINE_OPERATE1_CALL(Stop) + case 2: + if (!player.has_value()) return output.error("command.fail.onlyplayer"_tr()); + SP_ONLINE_OPERATE1_CALL(Swap) + case 3: + SP_ONLINE_OPERATE1_CALL(Info) + case 4: + SP_ONLINE_OPERATE1_CALL(InvInfo) + } + }); + + // sp p respawn + this->command->runtimeOverload() + .text("p") + .text("respawn") + .required("spname", ll::command::ParamKind::SoftEnum, "cfspDeadSp") + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + manager::CFSPManager::getInstance() + .spRespawn(player.value(), self["spname"].get()) + .output(output); + }); + + // sp p delete [force: bool] + this->command->runtimeOverload() + .text("p") + .text("delete") + .required("spname", ll::command::ParamKind::SoftEnum, "cfspSplist") + .optional("force", ll::command::ParamKind::Bool) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + if (!self["force"].has_value()) + return manager::CFSPManager::getInstance() + .spDelete(player.value(), self["spname"].get()) + .output(output); + manager::CFSPManager::getInstance() + .spDelete( + player.value(), + self["spname"].get(), + self["force"].get() + ) + .output(output); + }); + + // sp p [enabled: bool] + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspOnlineSpOperate2", + { + {"sneaking", 0}, + {"swimming", 1}, + {"flying", 2}, + {"sprinting", 3} + } + ); + this->command->runtimeOverload() + .text("p") + .required("operate", ll::command::ParamKind::Enum, "cfspOnlineSpOperate2") + .required("spname", ll::command::ParamKind::SoftEnum, "cfspOnlineSp") + .optional("enable", ll::command::ParamKind::Bool) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + + switch (self["operate"].get().index) { + case 0: + SP_ONLINE_OPERATE2_CALL(Sneaking) + case 1: + SP_ONLINE_OPERATE2_CALL(Swimming) + case 2: + SP_ONLINE_OPERATE2_CALL(Flying) + case 3: + SP_ONLINE_OPERATE2_CALL(Sprinting) + } + }); + + // sp p [times: int] [interval: int] + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspOnlineSpOperate3", + { + {"attack", 0}, + {"build", 1}, + {"interact", 2}, + {"jump", 3}, + {"drop", 4}, + {"dropinv", 5} + } + ); + this->command->runtimeOverload() + .text("p") + .required("operate", ll::command::ParamKind::Enum, "cfspOnlineSpOperate3") + .required("spname", ll::command::ParamKind::SoftEnum, "cfspOnlineSp") + .optional("times", ll::command::ParamKind::Int) + .optional("interval", ll::command::ParamKind::Int) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + switch (self["operate"].get().index) { + case 0: + SP_ONLINE_OPERATE3_CALL(Attack) + case 1: + SP_ONLINE_OPERATE3_CALL(Build) + case 2: + SP_ONLINE_OPERATE3_CALL(Interact) + case 3: + SP_ONLINE_OPERATE3_CALL(Jump) + case 4: + SP_ONLINE_OPERATE3_CALL(Drop) + case 5: + SP_ONLINE_OPERATE3_CALL(DropInv) + } + }); + + // sp p [long: int] [times: int] [interval: int] + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspOnlineSpOperate4", + { + {"use", 0}, + {"destroy", 1} + } + ); + this->command->runtimeOverload() + .text("p") + .required("operate", ll::command::ParamKind::Enum, "cfspOnlineSpOperate4") + .required("spname", ll::command::ParamKind::SoftEnum, "cfspOnlineSp") + .optional("long", ll::command::ParamKind::Int) + .optional("times", ll::command::ParamKind::Int) + .optional("interval", ll::command::ParamKind::Int) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + switch (self["operate"].get().index) { + case 0: + SP_ONLINE_OPERATE4_CALL(Use) + case 1: + SP_ONLINE_OPERATE4_CALL(Destroy) + } + }); + + // sp p + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspOnlineSpOperate5", + { + {"chat", 0}, + {"runcmd", 1} + } + ); + this->command->runtimeOverload() + .text("p") + .required("operate", ll::command::ParamKind::Enum, "cfspOnlineSpOperate5") + .required("spname", ll::command::ParamKind::SoftEnum, "cfspOnlineSp") + .required("message", ll::command::ParamKind::String) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + switch (self["operate"].get().index) { + case 0: + SP_ONLINE_OPERATE5_CALL(Chat) + case 1: + SP_ONLINE_OPERATE5_CALL(RunCmd) + } + }); + + // sp p lookat [pos: Vec3] + this->command->runtimeOverload() + .text("p") + .text("lookat") + .required("spname", ll::command::ParamKind::SoftEnum, "cfspOnlineSp") + .optional("pos", ll::command::ParamKind::Vec3) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + if (!self["pos"].has_value()) { + if (!player.value()) [[unlikely]] + return output.error("command.fail.lackPara"_tr()); + const auto& hit = player.value()->traceRay(5.25f, false, true); + if (hit) + return manager ::CFSPManager ::getInstance() + .spLookAt(player.value(), self["spname"].get(), hit.mPos) + .output(output); + return manager ::CFSPManager ::getInstance() + .spLookAt( + player.value(), + self["spname"].get(), + player.value()->getFeetPos() + ) + .output(output); + } + return manager ::CFSPManager ::getInstance() + .spLookAt( + player.value(), + self["spname"].get(), + self["pos"] + .get() + .getPosition(CommandVersion ::CurrentVersion(), origin, {0, 0, 0}) + ) + .output(output); + }); + + // sp p [pos: Vec3] [speed: float] + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspOnlineSpOperate6", + { + {"moveto", 0}, + {"navto", 1} + } + ); + this->command->runtimeOverload() + .text("p") + .required("operate", ll::command::ParamKind::Enum, "cfspOnlineSpOperate6") + .required("spname", ll::command::ParamKind::SoftEnum, "cfspOnlineSp") + .optional("pos", ll::command::ParamKind::Vec3) + .optional("speed", ll::command::ParamKind::Float) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + switch (self["operate"].get().index) { + case 0: + SP_ONLINE_OPERATE6_CALL(MoveTo) + case 1: + SP_ONLINE_OPERATE6_CALL(NavTo) + } + }); + + // sp p tp + this->command->runtimeOverload() + .text("p") + .text("tp") + .required("spname", ll::command::ParamKind::SoftEnum, "cfspOnlineSp") + .optional("pos", ll::command::ParamKind::Vec3) + .optional("dim", ll::command::ParamKind::Dimension) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + if (!self["pos"].has_value()) { + if (!player.value()) [[unlikely]] + return output.error("command.fail.lackPara"_tr()); + const auto& hit = player.value()->traceRay(5.25f, false, true); + if (hit) + return manager::CFSPManager::getInstance() + .spTp( + player.value(), + self["spname"].get(), + hit.mPos, + player.value()->getDimensionId() + ) + .output(output); + return manager::CFSPManager::getInstance() + .spTp( + player.value(), + self["spname"].get(), + player.value()->getFeetPos(), + player.value()->getDimensionId() + ) + .output(output); + } + if (!self["dim"].has_value()) { + if (!player.value()) + return manager::CFSPManager::getInstance() + .spTp( + player.value(), + self["spname"].get(), + self["pos"] + .get() + .getPosition(CommandVersion::CurrentVersion(), origin, {0, 0, 0}) + ) + .output(output); + return manager::CFSPManager::getInstance() + .spTp( + player.value(), + self["spname"].get(), + self["pos"] + .get() + .getPosition(CommandVersion::CurrentVersion(), origin, {0, 0, 0}), + player.value()->getDimensionId() + ) + .output(output); + } + manager::CFSPManager::getInstance() + .spTp( + player.value(), + self["spname"].get(), + self["pos"] + .get() + .getPosition(CommandVersion::CurrentVersion(), origin, {0, 0, 0}), + self["dim"].get().id + ) + .output(output); + }); + + // sp p select + this->command->runtimeOverload() + .text("p") + .text("select") + .required("spname", ll::command::ParamKind::SoftEnum, "cfspOnlineSp") + .required("item", ll::command::ParamKind::Item) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + return manager::CFSPManager::getInstance() + .spSelect( + player.value(), + self["spname"].get(), + self["item"].get().mId + ) + .output(output); + }); + + // sp p perm + ll::command::CommandRegistrar::getInstance().tryRegisterRuntimeEnum( + "cfspSpPermType", + { + {"all", -1}, + {"Spawn", 0 }, + {"Despawn", 1 }, + {"Respawn", 2 }, + {"Delete", 3 }, + {"Stop", 4 }, + {"Drop", 5 }, + {"DropInv", 6 }, + {"Swap", 7 }, + {"Sneaking", 8 }, + {"Swimming", 9 }, + {"Flying", 10}, + {"Sprinting", 11}, + {"Attack", 12}, + {"Build", 13}, + {"Interact", 14}, + {"Jump", 15}, + {"Use", 16}, + {"Destroy", 17}, + {"Chat", 18}, + {"RunCmd", 19}, + {"Select", 20}, + {"LookAt", 21}, + {"MoveTo", 22}, + {"NavTo", 23}, + {"Tp", 24}, + {"BeAddedToGroup", 25}, + } + ); + this->command->runtimeOverload() + .text("p") + .text("perm") + .required("spname", ll::command::ParamKind::SoftEnum, "cfspSplist") + .required("permType", ll::command::ParamKind::Enum, "cfspSpPermType") + .required("targetPlayer", ll::command::ParamKind::Player) + .required("enable", ll::command::ParamKind::Bool) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + auto targetPlayer = self["targetPlayer"].get().results(origin); + if (targetPlayer.size() > 1) return output.error("manager.fail.targetNotSingle"_tr()); + if (targetPlayer.data->data()[0]->isSimulatedPlayer()) return output.error("manager.fail.targetIsSp"_tr()); + auto index = self["permType"].get().index; + uint perm; + if (index == (uint64)-1) perm = (uint)-1; + else perm = 1 << index; + manager::CFSPManager::getInstance() + .spPerm( + player.value(), + self["spname"].get(), + perm, + self["enable"].get(), + targetPlayer.data->data()[0]->getUuid().asString() + ) + .output(output); + }); + + // sp p permpublic + this->command->runtimeOverload() + .text("p") + .text("permpublic") + .required("spname", ll::command::ParamKind::SoftEnum, "cfspSplist") + .required("permType", ll::command::ParamKind::Enum, "cfspSpPermType") + .required("enable", ll::command::ParamKind::Bool) + .execute([this](CommandOrigin const& origin, CommandOutput& output, ll::command::RuntimeCommand const& self) { + auto player = this->tryGetPlayer(origin); + if (!player.has_value()) return output.error("command.fail.illegalOrigin"_tr()); + auto index = self["permType"].get().index; + uint perm; + if (index == (uint64)-1) perm = (uint)-1; + else perm = 1 << index; + manager::CFSPManager::getInstance() + .spPerm( + player.value(), + self["spname"].get(), + perm, + self["enable"].get() + ) + .output(output); + }); +} +} // namespace coral_fans::cfsp::command \ No newline at end of file diff --git a/src/cfsp/entrance/gui/GuiManager.cpp b/src/cfsp/entrance/gui/GuiManager.cpp new file mode 100644 index 0000000..9e0cc4a --- /dev/null +++ b/src/cfsp/entrance/gui/GuiManager.cpp @@ -0,0 +1,205 @@ +#include "GuiManager.h" +#include "cfsp/base/OperateResult.h" +#include "cfsp/core/manager/CFSPManager.h" +#include "ll/api/base/StdInt.h" +#include "ll/api/form/CustomForm.h" +#include "ll/api/form/SimpleForm.h" +#include "ll/api/i18n/I18n.h" +#include "mc/world/actor/player/Player.h" +#include + +namespace coral_fans::cfsp::gui { +GuiManager& GuiManager::getInstance() { + static GuiManager instance; + return instance; +} + +std::optional GuiManager::tryGetVec3(std::string& str) { + std::istringstream iss(str); + float x, y, z; + char test; + if (!(iss >> x >> y >> z) || iss >> test) return std::nullopt; + return Vec3(x, y, z); +} + +std::optional GuiManager::tryGetInt(std::string& str) { + std::istringstream iss(str); + int i; + char test; + if (!(iss >> i) || iss >> test) return std::nullopt; + return i; +} + +std::optional GuiManager::tryGetFloat(std::string& str) { + std::istringstream iss(str); + float i; + char test; + if (!(iss >> i) || iss >> test) return std::nullopt; + return i; +} + +void GuiManager::sendMainMenu(Player& player) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::SimpleForm("gui.mainmenu.title"_tr()); + form.appendButton("gui.mainmenu.splistButton"_tr(), [this](Player& player) { this->sendSplist(player); }); + form.appendButton("gui.mainmenu.publicSplistButton"_tr(), [this](Player& player) { + this->sendPublicSplist(player); + }); + form.appendButton("gui.mainmenu.grouplistButton"_tr(), [this](Player& player) { this->sendGroupList(player); }); + form.sendTo(player); +} + +void GuiManager::sendManagerMainMenu(Player& player) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::SimpleForm("gui.mainmenu.title"_tr()); + form.appendButton("gui.managermainmenu.splistButton"_tr(), [this](Player& player) { this->sendAllSplist(player); }); + form.appendButton("gui.mainmenu.publicSplistButton"_tr(), [this](Player& player) { + this->sendPublicSplist(player); + }); + form.appendButton("gui.managermainmenu.grouplistButton"_tr(), [this](Player& player) { + this->sendAllGroupList(player); + }); + form.appendButton("gui.managermainmenu.managerlistButton"_tr(), [this](Player& player) { + this->sendManagePage(player); + }); + form.sendTo(player); +} + +void GuiManager::sendSplist(Player& player) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::SimpleForm("gui.splist.title"_tr()); + for (auto spn : manager::CFSPManager::getInstance().getSpNamesSorted(&player)) { + form.appendButton(spn, [spn, this](Player& player) { + auto cfsp = manager::CFSPManager::getInstance().tryGetCFSP(spn); + if (!cfsp.has_value()) return base::OperateResult::error("command.fail.spNoFind"_tr()).sendTo(player); + sendOperateSpPage(player, cfsp.value()); + }); + } + if (manager::CFSPManager::getInstance().canCreatePlayer(&player)) { + form.appendButton("gui.splist.newsp"_tr(), [this](Player& player) { + auto pos = player.getFeetPos(); + this->sendCreateSpPage( + player, + player.getDimensionId(), + std::to_string(pos.x) + " " + std::to_string(pos.y) + " " + std::to_string(pos.z) + ); + }); + } + form.sendTo(player); +} + +void GuiManager::sendGroupList(Player& player) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::SimpleForm("gui.grouplist.title"_tr()); + for (auto groupName : manager::CFSPManager::getInstance().getGroupNamesSorted(&player)) { + form.appendButton(groupName, [groupName, this](Player& player) { + auto group = manager::CFSPManager::getInstance().tryGetCFSPGroup(groupName); + if (!group.has_value()) return base::OperateResult::error("command.fail.groupNoFind"_tr()).sendTo(player); + sendOperateGroupPage(player, group.value()); + }); + } + if (manager::CFSPManager::getInstance().canCreateGroup(&player)) { + form.appendButton("gui.grouplist.newgroup"_tr(), [this](Player& player) { this->sendCreateGroupPage(player); }); + } + form.sendTo(player); +} + +void GuiManager::sendPublicSplist(Player& player) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::SimpleForm("gui.publicSpList.title"_tr()); + for (auto spn : manager::CFSPManager::getInstance().getPublicSpNamesSorted()) { + form.appendButton(spn, [spn, this](Player& player) { + auto cfsp = manager::CFSPManager::getInstance().tryGetCFSP(spn); + if (!cfsp.has_value()) return base::OperateResult::error("command.fail.spNoFind"_tr()).sendTo(player); + sendOperateSpPage(player, cfsp.value()); + }); + } + form.sendTo(player); +} + +void GuiManager::sendAllSplist(Player& player) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::SimpleForm("gui.managerSpList.title"_tr()); + for (auto spn : manager::CFSPManager::getInstance().getAllSpNamesSorted()) { + form.appendButton(spn, [spn, this](Player& player) { + auto cfsp = manager::CFSPManager::getInstance().tryGetCFSP(spn); + if (!cfsp.has_value()) return base::OperateResult::error("command.fail.spNoFind"_tr()).sendTo(player); + sendOperateSpPage(player, cfsp.value()); + }); + } + form.appendButton("gui.managerSpList.newsp"_tr(), [this](Player& player) { + auto pos = player.getFeetPos(); + this->sendCreateSpPage( + player, + player.getDimensionId(), + std::to_string(pos.x) + " " + std::to_string(pos.y) + " " + std::to_string(pos.z) + ); + }); + form.sendTo(player); +} + +void GuiManager::sendAllGroupList(Player& player) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::SimpleForm("gui.grouplist.title"_tr()); + for (auto groupName : manager::CFSPManager::getInstance().getAllGroupNamesSorted()) { + form.appendButton(groupName, [groupName, this](Player& player) { + auto group = manager::CFSPManager::getInstance().tryGetCFSPGroup(groupName); + if (!group.has_value()) return base::OperateResult::error("command.fail.groupNoFind"_tr()).sendTo(player); + sendOperateGroupPage(player, group.value()); + }); + } + form.appendButton("gui.grouplist.newgroup"_tr(), [this](Player& player) { this->sendCreateGroupPage(player); }); + form.sendTo(player); +} + +void GuiManager::sendManagePage(Player& player) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.manage.title"_tr()); + form.appendToggle("autojoin", "gui.manage.autojoin"_tr(), manager::CFSPManager::getInstance().getAutoJoin()); + form.appendToggle( + "autorespawn", + "gui.manage.autorespawn"_tr(), + manager::CFSPManager::getInstance().getAutoRespawn() + ); + form.appendToggle( + "autodespawn", + "gui.manage.autodespawn"_tr(), + manager::CFSPManager::getInstance().getAutoDespawn() + ); + form.sendTo( + player, + [](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (!cancelReason.has_value() && elements.has_value() + && manager::CFSPManager::getInstance().isManager(&player)) { + bool isChanged = false; + auto it = elements.value().find("autojoin"); + if (it != elements.value().end() && std::holds_alternative(it->second)) { + auto value = std::get(it->second); + if ((bool)value != manager::CFSPManager::getInstance().getAutoJoin()) { + manager::CFSPManager::getInstance().setAutoJoin(value); + isChanged = true; + } + } + it = elements.value().find("autorespawn"); + if (it != elements.value().end() && std::holds_alternative(it->second)) { + auto value = std::get(it->second); + if ((bool)value != manager::CFSPManager::getInstance().getAutoRespawn()) { + manager::CFSPManager::getInstance().setAutoRespawn(value); + isChanged = true; + } + } + it = elements.value().find("autodespawn"); + if (it != elements.value().end() && std::holds_alternative(it->second)) { + auto value = std::get(it->second); + if ((bool)value != manager::CFSPManager::getInstance().getAutoDespawn()) { + manager::CFSPManager::getInstance().setAutoDespawn(value); + isChanged = true; + } + } + if (isChanged) manager::CFSPManager::getInstance().save(); + base::OperateResult::success("manager.success.operate"_tr()).sendTo(player); + } + } + ); +} +} // namespace coral_fans::cfsp::gui \ No newline at end of file diff --git a/src/cfsp/entrance/gui/GuiManager.h b/src/cfsp/entrance/gui/GuiManager.h new file mode 100644 index 0000000..6b13b4a --- /dev/null +++ b/src/cfsp/entrance/gui/GuiManager.h @@ -0,0 +1,163 @@ +#pragma once + +#include "cfsp/core/group/CFSPGroup.h" +#include "cfsp/core/simPlayer/SimPlayer.h" +#include "mc/world/actor/player/Player.h" +#include +#include +#include + +namespace coral_fans::cfsp::gui { +class GuiManager { +public: + static GuiManager& getInstance(); + +private: + std::optional tryGetVec3(std::string&); + std::optional tryGetInt(std::string&); + std::optional tryGetFloat(std::string&); + +private: + void sendManagePage(Player&); + +private: + void sendOperateSpPage(Player&, std::shared_ptr); + void sendPublicSplist(Player&); + void sendAllSplist(Player&); + void sendCreateSpPage( + Player& player, + int defDim = 0, + std::string defPos = "", + std::string defName = "", + int defLockUniqueId = 0 + ); + void sendSpInfoPage(Player&, std::shared_ptr); + void sendSpInvOperatorPage(Player&, std::shared_ptr, uint); + void sendSpDropPage( + Player& player, + std::shared_ptr cfsp, + uint perm, + std::string defTimes = "1", + std::string defInterval = "1" + ); + void sendSpDropInvPage( + Player& player, + std::shared_ptr cfsp, + uint perm, + std::string defTimes = "1", + std::string defInterval = "1" + ); + void sendSpTpOperatorPage( + Player& player, + std::shared_ptr cfsp, + int defDim = 0, + std::string defPos = "" + ); + void sendSpMessageOperatorPage(Player&, std::shared_ptr, uint); + void sendSpMoveOperatorPage( + Player& player, + std::shared_ptr cfsp, + uint perm, + std::string defPos = "", + std::string defSpeed = "4.3", + int defOp = 0 + ); + void + sendSpLookOperatorPage(Player& player, std::shared_ptr cfsp, std::string defPos = ""); + void sendSpActionOperatorPage( + Player& player, + std::shared_ptr cfsp, + uint perm, + std::string defTimes = "1", + std::string defInterval = "1", + int defOp = 0 + ); + void sendSpLongActionOperatorPage( + Player& player, + std::shared_ptr cfsp, + uint perm, + std::string defLong = "10", + std::string defTimes = "1", + std::string defInterval = "1", + int defOp = 0 + ); + void sendSpStatusOperatorPage(Player&, std::shared_ptr, uint); + void sendSpPermPage(Player&, std::shared_ptr); + void sendSpPermPage2( + Player& player, + std::shared_ptr cfsp, + std::string targetPlayerName = "", + std::string targetPlayerUuid = "" + ); + +private: + void sendAllGroupList(Player&); + void sendCreateGroupPage(Player&); + void sendManageSpInGroupPage(Player&, std::shared_ptr, uint); + void sendOperateGroupPage(Player&, std::shared_ptr); + void sendGroupInfoPage(Player&, std::shared_ptr); + void sendGroupTpOperatorPage( + Player& player, + std::shared_ptr group, + int defDim = 0, + std::string defPos = "" + ); + void sendGroupLookOperatorPage(Player& player, std::shared_ptr group, std::string defPos = ""); + void sendGroupMoveOperatorPage( + Player& player, + std::shared_ptr group, + uint perm, + std::string defPos = "", + std::string defSpeed = "4.3", + int defOp = 0 + ); + void sendGroupInvOperatorPage(Player&, std::shared_ptr, uint); + void sendGroupDropPage( + Player& player, + std::shared_ptr group, + uint perm, + std::string defTimes = "1", + std::string defInterval = "1" + ); + void sendGroupDropInvPage( + Player& player, + std::shared_ptr group, + uint perm, + std::string defTimes = "1", + std::string defInterval = "1" + ); + void sendGroupMessageOperatorPage(Player&, std::shared_ptr, uint); + void sendGroupActionOperatorPage( + Player& player, + std::shared_ptr group, + uint perm, + std::string defTimes = "1", + std::string defInterval = "1", + int defOp = 0 + ); + void sendGroupLongActionOperatorPage( + Player& player, + std::shared_ptr group, + uint perm, + std::string defLong = "10", + std::string defTimes = "1", + std::string defInterval = "1", + int defOp = 0 + ); + void sendGroupStatusOperatorPage(Player&, std::shared_ptr, uint); + void sendGroupDeleteSpConfrim(Player&, std::unordered_set); + void sendGroupPermPage(Player&, std::shared_ptr); + void sendGroupPermPage2( + Player& player, + std::shared_ptr group, + std::string targetPlayerName = "", + std::string targetPlayerUuid = "" + ); + +public: + void sendMainMenu(Player&); + void sendManagerMainMenu(Player&); + void sendSplist(Player&); + void sendGroupList(Player&); +}; +} // namespace coral_fans::cfsp::gui \ No newline at end of file diff --git a/src/cfsp/entrance/gui/OperateGroupGui.cpp b/src/cfsp/entrance/gui/OperateGroupGui.cpp new file mode 100644 index 0000000..40077e9 --- /dev/null +++ b/src/cfsp/entrance/gui/OperateGroupGui.cpp @@ -0,0 +1,1031 @@ +#include "GuiManager.h" +#include "cfsp/base/OperateResult.h" +#include "cfsp/base/Utils.h" +#include "cfsp/core/group/CFSPGroup.h" +#include "cfsp/core/manager/CFSPManager.h" +#include "ll/api/form/CustomForm.h" +#include "ll/api/form/ModalForm.h" +#include "ll/api/form/SimpleForm.h" +#include "ll/api/i18n/I18n.h" +#include "ll/api/service/Bedrock.h" +#include "mc/world/level/Level.h" +#include "mc/world/phys/HitResult.h" +#include + + +namespace coral_fans::cfsp::gui { +void GuiManager::sendOperateGroupPage(Player& player, std::shared_ptr group) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::SimpleForm(group->mData.name); + uint perm; + bool ismanager = manager::CFSPManager::getInstance().isManager(&player); + if (ismanager) perm = manager::CFSPManager::getInstance().getGroupPermissionMask(); + else + perm = (uint)group->getPermission(&player) + & manager::CFSPManager::getInstance().getGroupPermissionMask( + std::optional(player.getCommandPermissionLevel()) + ); + if (perm) + form.appendButton("gui.operateGroup.groupInfo"_tr(), [this, group](Player& player) { + this->sendGroupInfoPage(player, group); + }); + if (perm & (uint)group::GroupPermission::AddSp || perm & (uint)group::GroupPermission::RmSp) + form.appendButton("gui.operateGroup.manageSp"_tr(), [this, group, perm](Player& player) { + this->sendManageSpInGroupPage(player, group, perm); + }); + if (perm & (uint)group::GroupPermission::Spawn) + form.appendButton("gui.operateGroup.online"_tr(), [gname = group->mData.name](Player& player) { + auto res = manager::CFSPManager::getInstance().groupSpawn(&player, gname); + for (auto perRes : res) perRes.sendTo(player); + }); + if (perm & (uint)group::GroupPermission::Despawn) + form.appendButton("gui.operateGroup.offline"_tr(), [gname = group->mData.name](Player& player) { + auto res = manager::CFSPManager::getInstance().groupDespawn(&player, gname); + for (auto perRes : res) perRes.sendTo(player); + }); + if (perm & (uint)group::GroupPermission::Respawn) + form.appendButton("gui.operateGroup.respawn"_tr(), [gname = group->mData.name](Player& player) { + auto res = manager::CFSPManager::getInstance().groupRespawn(&player, gname); + for (auto perRes : res) perRes.sendTo(player); + }); + if (perm & (uint)group::GroupPermission::Tp) + form.appendButton("gui.operateGroup.tp"_tr(), [this, group](Player& player) { + Vec3 pos; + const auto& hit = player.traceRay(5.25f, false, true); + if (hit) pos = hit.mPos; + else pos = player.getFeetPos(); + this->sendGroupTpOperatorPage( + player, + group, + player.getDimensionId(), + std::to_string(pos.x) + " " + std::to_string(pos.y) + " " + std::to_string(pos.z) + ); + }); + if (perm) + form.appendButton("gui.operateGroup.inv"_tr(), [this, group, perm](Player& player) { + this->sendGroupInvOperatorPage(player, group, perm); + }); + if (perm & (uint)group::GroupPermission::LookAt) + form.appendButton("gui.operateGroup.lookat"_tr(), [this, group](Player& player) { + Vec3 pos; + const auto& hit = player.traceRay(5.25f, false, true); + if (hit) pos = hit.mPos; + else pos = player.getFeetPos(); + this->sendGroupLookOperatorPage( + player, + group, + std::to_string(pos.x) + " " + std::to_string(pos.y) + " " + std::to_string(pos.z) + ); + }); + if (perm & (uint)group::GroupPermission::MoveTo || perm & (uint)group::GroupPermission::NavTo) + form.appendButton("gui.operateGroup.move"_tr(), [this, group, perm](Player& player) { + Vec3 pos; + const auto& hit = player.traceRay(5.25f, false, true); + if (hit) pos = hit.mPos; + else pos = player.getFeetPos(); + this->sendGroupMoveOperatorPage( + player, + group, + perm, + std::to_string(pos.x) + " " + std::to_string(pos.y) + " " + std::to_string(pos.z) + ); + }); + if (perm & (uint)group::GroupPermission::Attack || perm & (uint)group::GroupPermission::Build + || perm & (uint)group::GroupPermission::Interact || perm & (uint)group::GroupPermission::Jump) + form.appendButton("gui.operateGroup.perform"_tr(), [this, group, perm](Player& player) { + this->sendGroupActionOperatorPage(player, group, perm); + }); + if (perm & (uint)group::GroupPermission::Use || perm & (uint)group::GroupPermission::Destroy) + form.appendButton("gui.operateGroup.perform2"_tr(), [this, group, perm](Player& player) { + this->sendGroupLongActionOperatorPage(player, group, perm); + }); + if (perm & (uint)group::GroupPermission::Stop) + form.appendButton("gui.operateGroup.stop"_tr(), [gname = group->mData.name](Player& player) { + auto res = manager::CFSPManager::getInstance().groupStop(&player, gname); + for (auto perRes : res) perRes.sendTo(player); + }); + if (perm & (uint)group::GroupPermission::Sneaking || perm & (uint)group::GroupPermission::Swimming + || perm & (uint)group::GroupPermission::Flying || perm & (uint)group::GroupPermission::Sprinting) + form.appendButton("gui.operateGroup.status"_tr(), [this, group, perm](Player& player) { + this->sendGroupStatusOperatorPage(player, group, perm); + }); + if (perm & (uint)group::GroupPermission::Chat || perm & (uint)group::GroupPermission::RunCmd) + form.appendButton("gui.operateGroup.message"_tr(), [this, group, perm](Player& player) { + this->sendGroupMessageOperatorPage(player, group, perm); + }); + if (perm & (uint)group::GroupPermission::Delete) + form.appendButton("gui.operateGroup.rm"_tr(), [this, group](Player& player) { + auto confirmForm = ll::form::ModalForm( + "gui.operateGroup.rm"_tr(), + "gui.operateGroup.confirmRm"_tr(group->mData.name), + "base.yesOrNo.yes"_tr(), + "base.yesOrNo.no"_tr() + ); + confirmForm.sendTo( + player, + [this, + group](Player& player, ll::form::ModalFormResult result, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendOperateGroupPage(player, group); + if (!result.has_value()) return; + + if (result.value() == ll::form::ModalFormSelectedButton::Upper) { + return manager::CFSPManager::getInstance() + .groupDelete(&player, group->mData.name) + .sendTo(player); + } else if (result.value() == ll::form::ModalFormSelectedButton::Lower) + return this->sendOperateGroupPage(player, group); + } + ); + }); + if (perm & (uint)group::GroupPermission::DeleteSp) + form.appendButton("gui.operateGroup.deleteSp"_tr(), [this, group](Player& player) { + auto confirmForm = ll::form::ModalForm( + "gui.operateGroup.deleteSp"_tr(), + "gui.operateGroup.confirmDeleteSp"_tr(group->mData.name), + "base.yesOrNo.yes"_tr(), + "base.yesOrNo.no"_tr() + ); + confirmForm.sendTo( + player, + [this, + group](Player& player, ll::form::ModalFormResult result, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendOperateGroupPage(player, group); + if (!result.has_value()) return; + + if (result.value() == ll::form::ModalFormSelectedButton::Upper) { + auto res = manager::CFSPManager::getInstance().groupDeleteSp(&player, group->mData.name); + for (auto& perRes : res) + if (perRes.mType != base::OperateResult::Type::Swing) perRes.sendTo(player); + if (!group->mData.splist.empty()) { + std::unordered_set confirmList = group->mData.splist; + this->sendGroupDeleteSpConfrim(player, confirmList); + } + } else if (result.value() == ll::form::ModalFormSelectedButton::Lower) + return this->sendOperateGroupPage(player, group); + } + ); + }); + if (group->mData.ownerUuid == player.getUuid().asString() || ismanager) + form.appendButton("gui.operateGroup.perm"_tr(), [this, group](Player& player) { + this->sendGroupPermPage(player, group); + }); + + form.sendTo(player); +} + +void GuiManager::sendGroupDeleteSpConfrim(Player& player, std::unordered_set confirmList) { + using ll::i18n_literals::operator""_tr; + auto it = confirmList.begin(); + std::string spname = it->data(); + confirmList.erase(it); + auto confirmForm = ll::form::ModalForm( + "gui.operateGroup.deleteSp"_tr(), + "gui.operateGroup.confirmDeleteSp2"_tr(spname), + "base.yesOrNo.yes"_tr(), + "base.yesOrNo.no"_tr() + ); + confirmForm.sendTo( + player, + [this, + spname, + confirmList](Player& player, ll::form::ModalFormResult result, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) return; + if (!result.has_value()) return; + + if (result.value() == ll::form::ModalFormSelectedButton::Upper) + manager::CFSPManager::getInstance().spDelete(&player, spname, true, true).sendTo(player); + if (!confirmList.empty()) this->sendGroupDeleteSpConfrim(player, confirmList); + } + ); +} + +void GuiManager::sendCreateGroupPage(Player& player) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.managesp.title"_tr()); + form.appendInput("name", "gui.creategroup.title"_tr()); + form.sendTo( + player, + [this](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value()) return; + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + auto it = elements.value().find("name"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) { + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + } + auto name = std::get(it->second); + + auto res = manager::CFSPManager::getInstance().groupCreate(&player, name); + res.sendTo(player); + if (res) + this->sendManageSpInGroupPage( + player, + manager::CFSPManager::getInstance().tryGetCFSPGroup(name).value(), + (uint)-1 + ); + } + ); +} + +void GuiManager::sendManageSpInGroupPage(Player& player, std::shared_ptr group, uint perm) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.manageSpInGroup.title"_tr()); + std::vector splist; + if (manager::CFSPManager::getInstance().isManager(&player)) + splist = manager::CFSPManager::getInstance().getAllSpNamesSorted(); + else splist = manager::CFSPManager::getInstance().getCanBeAddedSpList(&player); + for (auto const& spname : splist) { + bool isContain = group->mData.splist.contains(spname); + if (isContain) { + if (perm & (uint)group::GroupPermission::RmSp) form.appendToggle(spname, spname, isContain); + } else if (perm & (uint)group::GroupPermission::AddSp) form.appendToggle(spname, spname, isContain); + } + form.sendTo( + player, + [this, + splist, + group, + perm](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value()) return this->sendOperateGroupPage(player, group); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + std::vector addList, removeList; + for (auto const& spname : splist) + if (auto it = elements.value().find(spname); + it != elements.value().end() && std::holds_alternative(it->second)) { + if ((bool)std::get(it->second)) { + if (!group->mData.splist.contains(spname)) addList.emplace_back(spname); + } else if (group->mData.splist.contains(spname)) removeList.emplace_back(spname); + } + std::vector res; + if (perm & (uint)group::GroupPermission::AddSp) + for (auto const& spname : addList) + res.emplace_back(manager::CFSPManager::getInstance().groupAddSp(&player, group->mData.name, spname) + ); + if (perm & (uint)group::GroupPermission::RmSp) + for (auto const& spname : removeList) + res.emplace_back(manager::CFSPManager::getInstance().groupRmSp(&player, group->mData.name, spname)); + for (auto& perRes : res) perRes.sendTo(player); + } + ); +} + +void GuiManager::sendGroupInfoPage(Player& player, std::shared_ptr group) { + using ll::i18n_literals::operator""_tr; + std::string info = ""; + for (auto perRes : manager::CFSPManager::getInstance().groupInfo(&player, group->mData.name)) + info += perRes.mInfo + '\n'; + ll::form::SimpleForm("gui.info.groupTitle"_tr(), info) + .sendTo(player, [this, group](Player& player, int, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + this->sendOperateGroupPage(player, group); + }); +} + +void GuiManager::sendGroupTpOperatorPage( + Player& player, + std::shared_ptr group, + int defDim, + std::string defPos +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.tp.groupTitle"_tr()); + form.appendInput("targetpos", "gui.para.targetPos"_tr(), "0 0 0", defPos); + form.appendDropdown( + "dim", + "gui.para.targetDim"_tr(), + std::vector{ + "base.dimension.overworld"_tr(), + "base.dimension.nether"_tr(), + "base.dimension.theend"_tr() + }, + defDim + ); + form.sendTo( + player, + [this, + group](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendOperateGroupPage(player, group); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + auto it = elements.value().find("targetpos"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto elePos = std::get(it->second); + auto targetPos = this->tryGetVec3(elePos); + + it = elements.value().find("dim"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleDim = std::get(it->second); + int dim; + if (eleDim == "base.dimension.overworld"_tr()) dim = 0; + else if (eleDim == "base.dimension.nether"_tr()) dim = 1; + else if (eleDim == "base.dimension.theend"_tr()) dim = 2; + else return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + if (!targetPos.has_value()) { + base::OperateResult::error("gui.para.posError"_tr()).sendTo(player); + return this->sendGroupTpOperatorPage(player, group, dim, elePos); + } + for (auto& perRes : + manager::CFSPManager::getInstance().groupTp(&player, group->mData.name, targetPos.value(), dim)) + perRes.sendTo(player); + } + ); +} + +void GuiManager::sendGroupLookOperatorPage( + Player& player, + std::shared_ptr group, + std::string defPos +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.look.groupTitle"_tr()); + form.appendInput("targetpos", "gui.para.targetPos"_tr(), "0 0 0", defPos); + form.sendTo( + player, + [this, + group](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendOperateGroupPage(player, group); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + auto it = elements.value().find("targetpos"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto elePos = std::get(it->second); + auto targetPos = this->tryGetVec3(elePos); + + if (!targetPos.has_value()) { + base::OperateResult::error("gui.para.posError"_tr()).sendTo(player); + return this->sendGroupLookOperatorPage(player, group, elePos); + } + + for (auto& perRes : + manager::CFSPManager::getInstance().groupLookAt(&player, group->mData.name, targetPos.value())) + perRes.sendTo(player); + } + ); +} + +void GuiManager::sendGroupMoveOperatorPage( + Player& player, + std::shared_ptr group, + uint perm, + std::string defPos, + std::string defSpeed, + int defOp +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.move.groupTitle"_tr()); + std::vector op; + if (perm & (uint)group::GroupPermission::MoveTo) op.emplace_back("gui.move.moveto"_tr()); + if (perm & (uint)group::GroupPermission::NavTo) op.emplace_back("gui.move.navto"_tr()); + form.appendDropdown("operate", "gui.para.operate"_tr(), op, defOp); + form.appendInput("targetpos", "gui.para.targetPos"_tr(), "0 0 0", defPos); + form.appendInput("speed", "gui.para.speed"_tr(), "4.3", defSpeed); + form.sendTo( + player, + [this, + group, + perm, + op](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendOperateGroupPage(player, group); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + auto it = elements.value().find("targetpos"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto elePos = std::get(it->second); + auto targetPos = this->tryGetVec3(elePos); + + it = elements.value().find("speed"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleSpeed = std::get(it->second); + auto speed = this->tryGetFloat(eleSpeed); + + it = elements.value().find("operate"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleOp = std::get(it->second); + + if (!targetPos.has_value() || !speed.has_value()) { + int size = (int)op.size(), opIndex = -1; + for (int i = 0; i < size; i++) + if (eleOp == op[i]) { + opIndex = i; + break; + } + if (opIndex == -1) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + base::OperateResult::error("gui.para.posError"_tr()).sendTo(player); + return this->sendGroupMoveOperatorPage(player, group, perm, elePos, eleSpeed, opIndex); + } + if (eleOp == "gui.move.moveto"_tr()) + for (auto& perRes : manager::CFSPManager::getInstance() + .groupMoveTo(&player, group->mData.name, targetPos.value(), speed.value())) + perRes.sendTo(player); + else if (eleOp == "gui.move.navto"_tr()) + for (auto& perRes : manager::CFSPManager::getInstance() + .groupNavTo(&player, group->mData.name, targetPos.value(), speed.value())) + perRes.sendTo(player); + else return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + } + ); +} + +void GuiManager::sendGroupInvOperatorPage(Player& player, std::shared_ptr group, uint perm) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::SimpleForm("gui.inv.group.title"_tr()); + if (perm) + form.appendButton("gui.inv.group.invInfo"_tr(), [this, group, perm](Player& player) { + std::string info = ""; + for (auto& perRes : manager::CFSPManager::getInstance().groupInvInfo(&player, group->mData.name)) + info += perRes.mInfo; + ll::form::SimpleForm("gui.inv.group.invInfo"_tr(), info) + .sendTo(player, [this, group, perm](Player& player, int, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + this->sendGroupInvOperatorPage(player, group, perm); + }); + }); + if (perm & (uint)group::GroupPermission::Drop) + form.appendButton("gui.inv.group.drop"_tr(), [this, group, perm](Player& player) { + sendGroupDropPage(player, group, perm); + }); + if (perm & (uint)group::GroupPermission::DropInv) + form.appendButton("gui.inv.group.dropinv"_tr(), [this, group, perm](Player& player) { + sendGroupDropInvPage(player, group, perm); + }); + form.sendTo(player, [this, group](Player& player, int, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + this->sendOperateGroupPage(player, group); + }); +} + +void GuiManager::sendGroupDropPage( + Player& player, + std::shared_ptr group, + uint perm, + std::string defTimes, + std::string defInterval +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.inv.group.drop"_tr()); + form.appendInput("times", "gui.para.times"_tr(), "1", defTimes); + form.appendInput("interval", "gui.para.interval"_tr(), "1", defInterval); + form.sendTo( + player, + [this, + group, + perm](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendGroupInvOperatorPage(player, group, perm); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + auto it = elements.value().find("times"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleTimes = std::get(it->second); + auto times = this->tryGetInt(eleTimes); + + it = elements.value().find("interval"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleInterval = std::get(it->second); + auto interval = this->tryGetInt(eleInterval); + + if (!times.has_value() || !interval.has_value()) { + base::OperateResult::error("gui.para.intError"_tr()).sendTo(player); + return this->sendGroupDropPage(player, group, perm, eleTimes, eleInterval); + } + + for (auto& perRes : manager::CFSPManager::getInstance() + .groupDrop(&player, group->mData.name, times.value(), interval.value())) + perRes.sendTo(player); + } + ); +} + +void GuiManager::sendGroupDropInvPage( + Player& player, + std::shared_ptr group, + uint perm, + std::string defTimes, + std::string defInterval +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.inv.group.dropinv"_tr()); + form.appendInput("times", "gui.para.times"_tr(), "1", defTimes); + form.appendInput("interval", "gui.para.interval"_tr(), "1", defInterval); + form.sendTo( + player, + [this, + group, + perm](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendGroupInvOperatorPage(player, group, perm); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + auto it = elements.value().find("times"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleTimes = std::get(it->second); + auto times = this->tryGetInt(eleTimes); + + it = elements.value().find("interval"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleInterval = std::get(it->second); + auto interval = this->tryGetInt(eleInterval); + + if (!times.has_value() || !interval.has_value()) { + base::OperateResult::error("gui.para.intError"_tr()).sendTo(player); + return this->sendGroupDropInvPage(player, group, perm, eleTimes, eleInterval); + } + + for (auto& perRes : manager::CFSPManager::getInstance() + .groupDropInv(&player, group->mData.name, times.value(), interval.value())) + perRes.sendTo(player); + } + ); +} + +void GuiManager::sendGroupMessageOperatorPage(Player& player, std::shared_ptr group, uint perm) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.message.groupTitle"_tr()); + std::vector op; + if (perm & (uint)group::GroupPermission::Chat) op.emplace_back("gui.message.chat"_tr()); + if (perm & (uint)group::GroupPermission::RunCmd) op.emplace_back("gui.message.runcmd"_tr()); + form.appendDropdown("operate", "gui.para.operate"_tr(), op); + form.appendInput("text", "gui.para.text"_tr()); + form.sendTo( + player, + [this, + group](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendOperateGroupPage(player, group); + + auto it = elements.value().find("operate"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleOp = std::get(it->second); + + it = elements.value().find("text"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleText = std::get(it->second); + + if (eleOp == "gui.message.chat"_tr()) + for (auto& perRes : manager::CFSPManager::getInstance().groupChat(&player, group->mData.name, eleText)) + perRes.sendTo(player); + else if (eleOp == "gui.message.runcmd"_tr()) + for (auto& perRes : + manager::CFSPManager::getInstance().groupRunCmd(&player, group->mData.name, eleText)) + perRes.sendTo(player); + else return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + } + ); +} + +void GuiManager::sendGroupActionOperatorPage( + Player& player, + std::shared_ptr group, + uint perm, + std::string defTimes, + std::string defInterval, + int defOp +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.action.groupTitle"_tr()); + std::vector op; + if (perm & (uint)group::GroupPermission::Attack) op.emplace_back("gui.action.attack"_tr()); + if (perm & (uint)group::GroupPermission::Build) op.emplace_back("gui.action.build"_tr()); + if (perm & (uint)group::GroupPermission::Interact) op.emplace_back("gui.action.interact"_tr()); + if (perm & (uint)group::GroupPermission::Jump) op.emplace_back("gui.action.jump"_tr()); + form.appendDropdown("operate", "gui.para.operate"_tr(), op, defOp); + form.appendInput("times", "gui.para.times"_tr(), "1", defTimes); + form.appendInput("interval", "gui.para.interval"_tr(), "1", defInterval); + form.sendTo( + player, + [this, + group, + op, + perm](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendOperateGroupPage(player, group); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + auto it = elements.value().find("operate"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleOp = std::get(it->second); + + it = elements.value().find("times"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleTimes = std::get(it->second); + auto times = this->tryGetInt(eleTimes); + + it = elements.value().find("interval"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleInterval = std::get(it->second); + auto interval = this->tryGetInt(eleInterval); + + if (!times.has_value() || !interval.has_value()) { + int size = (int)op.size(), opIndex = -1; + for (int i = 0; i < size; i++) + if (eleOp == op[i]) { + opIndex = i; + break; + } + if (opIndex == -1) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + base::OperateResult::error("gui.para.intError"_tr()).sendTo(player); + return this->sendGroupActionOperatorPage(player, group, perm, eleTimes, eleInterval, opIndex); + } + + if (eleOp == "gui.action.attack"_tr()) + for (auto& perRes : manager::CFSPManager::getInstance() + .groupAttack(&player, group->mData.name, times.value(), interval.value())) + perRes.sendTo(player); + else if (eleOp == "gui.action.build"_tr()) + for (auto& perRes : manager::CFSPManager::getInstance() + .groupBuild(&player, group->mData.name, times.value(), interval.value())) + perRes.sendTo(player); + else if (eleOp == "gui.action.interact"_tr()) + for (auto& perRes : manager::CFSPManager::getInstance() + .groupInteract(&player, group->mData.name, times.value(), interval.value())) + perRes.sendTo(player); + else if (eleOp == "gui.action.jump"_tr()) + for (auto& perRes : manager::CFSPManager::getInstance() + .groupJump(&player, group->mData.name, times.value(), interval.value())) + perRes.sendTo(player); + else return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + } + ); +} + +void GuiManager::sendGroupLongActionOperatorPage( + Player& player, + std::shared_ptr group, + uint perm, + std::string defLong, + std::string defTimes, + std::string defInterval, + int defOp +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.longAction.groupTitle"_tr()); + std::vector op; + if (perm & (uint)group::GroupPermission::Use) op.emplace_back("gui.longAction.use"_tr()); + if (perm & (uint)group::GroupPermission::Destroy) op.emplace_back("gui.longAction.destroy"_tr()); + form.appendDropdown("operate", "gui.para.operate"_tr(), op, defOp); + form.appendInput("long", "gui.para.long"_tr(), "10", defLong); + form.appendInput("times", "gui.para.times"_tr(), "1", defTimes); + form.appendInput("interval", "gui.para.interval"_tr(), "1", defInterval); + form.sendTo( + player, + [this, + group, + op, + perm](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendOperateGroupPage(player, group); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + auto it = elements.value().find("operate"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleOp = std::get(it->second); + + it = elements.value().find("long"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleLong = std::get(it->second); + auto _long = this->tryGetInt(eleLong); + + it = elements.value().find("times"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleTimes = std::get(it->second); + auto times = this->tryGetInt(eleTimes); + + it = elements.value().find("interval"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleInterval = std::get(it->second); + auto interval = this->tryGetInt(eleInterval); + + if (!_long.has_value() || !times.has_value() || !interval.has_value()) { + int size = (int)op.size(), opIndex = -1; + for (int i = 0; i < size; i++) + if (eleOp == op[i]) { + opIndex = i; + break; + } + if (opIndex == -1) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + base::OperateResult::error("gui.para.intError"_tr()).sendTo(player); + return this + ->sendGroupLongActionOperatorPage(player, group, perm, eleLong, eleTimes, eleInterval, opIndex); + } + + if (eleOp == "gui.longAction.use"_tr()) + for (auto& perRes : + manager::CFSPManager::getInstance() + .groupUse(&player, group->mData.name, _long.value(), times.value(), interval.value())) + perRes.sendTo(player); + else if (eleOp == "gui.longAction.destroy"_tr()) + for (auto& perRes : + manager::CFSPManager::getInstance() + .groupDestroy(&player, group->mData.name, _long.value(), times.value(), interval.value())) + perRes.sendTo(player); + else return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + } + ); +} + +void GuiManager::sendGroupStatusOperatorPage(Player& player, std::shared_ptr group, uint perm) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.status.groupTitle"_tr()); + if (perm & (uint)group::GroupPermission::Sneaking) form.appendToggle("sneaking", "gui.status.sneaking"_tr(), false); + if (perm & (uint)group::GroupPermission::Swimming) form.appendToggle("swimming", "gui.status.swimming"_tr(), false); + if (perm & (uint)group::GroupPermission::Flying) form.appendToggle("flying", "gui.status.flying"_tr(), false); + if (perm & (uint)group::GroupPermission::Sprinting) + form.appendToggle("sprinting", "gui.status.sprinting"_tr(), false); + form.sendTo( + player, + [this, + group](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendOperateGroupPage(player, group); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + if (auto it = elements.value().find("sneaking"); + it != elements.value().end() && std::holds_alternative(it->second)) { + if ((bool)std::get(it->second)) { + for (auto& perRes : + manager::CFSPManager::getInstance().groupSneaking(&player, group->mData.name, true)) + perRes.sendTo(player); + } else + for (auto& perRes : + manager::CFSPManager::getInstance().groupSneaking(&player, group->mData.name, false)) + perRes.sendTo(player); + } + + if (auto it = elements.value().find("swimming"); + it != elements.value().end() && std::holds_alternative(it->second)) { + if ((bool)std::get(it->second)) { + for (auto& perRes : + manager::CFSPManager::getInstance().groupSwimming(&player, group->mData.name, true)) + perRes.sendTo(player); + } else + for (auto& perRes : + manager::CFSPManager::getInstance().groupSwimming(&player, group->mData.name, false)) + perRes.sendTo(player); + } + + if (auto it = elements.value().find("flying"); + it != elements.value().end() && std::holds_alternative(it->second)) { + if ((bool)std::get(it->second)) { + for (auto& perRes : + manager::CFSPManager::getInstance().groupFlying(&player, group->mData.name, true)) + perRes.sendTo(player); + } else + for (auto& perRes : + manager::CFSPManager::getInstance().groupFlying(&player, group->mData.name, false)) + perRes.sendTo(player); + } + + if (auto it = elements.value().find("sprinting"); + it != elements.value().end() && std::holds_alternative(it->second)) { + if ((bool)std::get(it->second)) { + for (auto& perRes : + manager::CFSPManager::getInstance().groupSprinting(&player, group->mData.name, true)) + perRes.sendTo(player); + } else + for (auto& perRes : + manager::CFSPManager::getInstance().groupSprinting(&player, group->mData.name, false)) + perRes.sendTo(player); + } + } + ); +} + +void GuiManager::sendGroupPermPage(Player& player, std::shared_ptr group) { + using ll::i18n_literals::operator""_tr; + std::vector> splist; + auto level = ll::service::getLevel(); + level->forEachPlayer([&splist, pname = player.mName.get()](Player& player) { + if (!player.isSimulatedPlayer() && pname != player.mName.get()) + splist.emplace_back(std::make_pair(player.mName, player.getUuid().asString())); + return true; + }); + for (auto i : group->mData.permission) + splist.emplace_back(std::make_pair(base::utils::tryGetPlayerName(i.first), i.first)); + std::sort(splist.begin(), splist.end()); + + auto form = ll::form::SimpleForm("gui.perm.groupTitle"_tr()); + int size = (int)splist.size(); + if (size) { + form.appendButton(splist[0].first, [this, group, targetPlayer = splist[0]](Player& player) { + this->sendGroupPermPage2(player, group, targetPlayer.first, targetPlayer.second); + }); + for (int i = 1; i < size; i++) + if (splist[i] != splist[i - 1]) + form.appendButton(splist[i].first, [this, group, targetPlayer = splist[i]](Player& player) { + this->sendGroupPermPage2(player, group, targetPlayer.first, targetPlayer.second); + }); + } + form.appendButton("gui.perm.publicGroup"_tr(), [this, group](Player& player) { + this->sendGroupPermPage2(player, group); + }); + form.sendTo(player, [this, group](Player& player, int, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + this->sendOperateGroupPage(player, group); + }); +} + +void GuiManager::sendGroupPermPage2( + Player& player, + std::shared_ptr group, + std::string targetPlayerName, + std::string targetPlayerUuid +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.perm.groupTitle2"_tr( + group->mData.name, + targetPlayerName != "" ? targetPlayerName : "gui.perm.publicGroup"_tr() + )); + + uint perm = 0; + if (targetPlayerName == "") perm = group->mData.publicPermission; + else { + auto it = group->mData.permission.find(targetPlayerUuid); + if (it != group->mData.permission.end()) perm = it->second; + } + + form.appendToggle("addSp", "gui.perm.addSp"_tr(), perm & (uint)group::GroupPermission::AddSp); + form.appendToggle("rmSp", "gui.perm.rmSp"_tr(), perm & (uint)group::GroupPermission::RmSp); + form.appendToggle("delete", "gui.perm.delete"_tr(), perm & (uint)group::GroupPermission::Delete); + form.appendToggle("spawn", "gui.perm.spawn"_tr(), perm & (uint)group::GroupPermission::Spawn); + form.appendToggle("despawn", "gui.perm.despawn"_tr(), perm & (uint)group::GroupPermission::Despawn); + form.appendToggle("respawn", "gui.perm.respawn"_tr(), perm & (uint)group::GroupPermission::Respawn); + form.appendToggle("deleteSp", "gui.perm.deleteSp"_tr(), perm & (uint)group::GroupPermission::DeleteSp); + form.appendToggle("stop", "gui.perm.stop"_tr(), perm & (uint)group::GroupPermission::Stop); + form.appendToggle("drop", "gui.perm.drop"_tr(), perm & (uint)group::GroupPermission::Drop); + form.appendToggle("dropInv", "gui.perm.dropInv"_tr(), perm & (uint)group::GroupPermission::DropInv); + form.appendToggle("sneaking", "gui.perm.sneaking"_tr(), perm & (uint)group::GroupPermission::Sneaking); + form.appendToggle("dwimming", "gui.perm.swimming"_tr(), perm & (uint)group::GroupPermission::Swimming); + form.appendToggle("flying", "gui.perm.flying"_tr(), perm & (uint)group::GroupPermission::Flying); + form.appendToggle("sprinting", "gui.perm.sprinting"_tr(), perm & (uint)group::GroupPermission::Sprinting); + form.appendToggle("attack", "gui.perm.attack"_tr(), perm & (uint)group::GroupPermission::Attack); + form.appendToggle("build", "gui.perm.build"_tr(), perm & (uint)group::GroupPermission::Build); + form.appendToggle("interact", "gui.perm.interact"_tr(), perm & (uint)group::GroupPermission::Interact); + form.appendToggle("jump", "gui.perm.jump"_tr(), perm & (uint)group::GroupPermission::Jump); + form.appendToggle("use", "gui.perm.use"_tr(), perm & (uint)group::GroupPermission::Use); + form.appendToggle("destroy", "gui.perm.destroy"_tr(), perm & (uint)group::GroupPermission::Destroy); + form.appendToggle("chat", "gui.perm.chat"_tr(), perm & (uint)group::GroupPermission::Chat); + form.appendToggle("runCmd", "gui.perm.runCmd"_tr(), perm & (uint)group::GroupPermission::RunCmd); + form.appendToggle("lookAt", "gui.perm.lookAt"_tr(), perm & (uint)group::GroupPermission::LookAt); + form.appendToggle("moveTo", "gui.perm.moveTo"_tr(), perm & (uint)group::GroupPermission::MoveTo); + form.appendToggle("navTo", "gui.perm.navTo"_tr(), perm & (uint)group::GroupPermission::NavTo); + form.appendToggle("tp", "gui.perm.tp"_tr(), perm & (uint)group::GroupPermission::Tp); + form.appendToggle("select", "gui.perm.select"_tr(), perm & (uint)group::GroupPermission::Select); + + form.sendTo( + player, + [this, group, targetPlayerUuid]( + Player& player, + ll::form::CustomFormResult const& elements, + ll::form::FormCancelReason cancelReason + ) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendGroupPermPage(player, group); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + uint newPerm = 0; + + if (auto it = elements.value().find("addSp"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::AddSp; + + if (auto it = elements.value().find("rmSp"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::RmSp; + + if (auto it = elements.value().find("delete"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Delete; + + if (auto it = elements.value().find("spawn"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Spawn; + + if (auto it = elements.value().find("despawn"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Despawn; + + if (auto it = elements.value().find("respawn"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Respawn; + + if (auto it = elements.value().find("deleteSp"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::DeleteSp; + + if (auto it = elements.value().find("stop"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Stop; + + if (auto it = elements.value().find("drop"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Drop; + + if (auto it = elements.value().find("dropInv"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::DropInv; + + if (auto it = elements.value().find("sneaking"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Sneaking; + + if (auto it = elements.value().find("dwimming"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Swimming; + + if (auto it = elements.value().find("flying"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Flying; + + if (auto it = elements.value().find("sprinting"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Sprinting; + + if (auto it = elements.value().find("attack"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Attack; + + if (auto it = elements.value().find("build"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Build; + + if (auto it = elements.value().find("interact"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Interact; + + if (auto it = elements.value().find("jump"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Jump; + + if (auto it = elements.value().find("use"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Use; + + if (auto it = elements.value().find("destroy"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Destroy; + + if (auto it = elements.value().find("chat"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Chat; + + if (auto it = elements.value().find("runCmd"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::RunCmd; + + if (auto it = elements.value().find("lookAt"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::LookAt; + + if (auto it = elements.value().find("moveTo"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::MoveTo; + + if (auto it = elements.value().find("navTo"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::NavTo; + + if (auto it = elements.value().find("tp"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Tp; + + if (auto it = elements.value().find("select"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)group::GroupPermission::Select; + + if (targetPlayerUuid == "") group->mData.publicPermission = newPerm; + else if (newPerm) group->mData.permission[targetPlayerUuid] = newPerm; + else if (auto it = group->mData.permission.find(targetPlayerUuid); it != group->mData.permission.end()) + group->mData.permission.erase(it); + group->save(); + + base::OperateResult::success("manager.success.operate"_tr()).sendTo(player); + } + ); +} +} // namespace coral_fans::cfsp::gui \ No newline at end of file diff --git a/src/cfsp/entrance/gui/OperateSpGui.cpp b/src/cfsp/entrance/gui/OperateSpGui.cpp new file mode 100644 index 0000000..3c226bb --- /dev/null +++ b/src/cfsp/entrance/gui/OperateSpGui.cpp @@ -0,0 +1,1104 @@ +#include "GuiManager.h" +#include "cfsp/base/OperateResult.h" +#include "cfsp/base/Utils.h" +#include "cfsp/core/manager/CFSPManager.h" +#include "cfsp/core/simPlayer/SimPlayerPermission.h" +#include "ll/api/form/CustomForm.h" +#include "ll/api/form/ModalForm.h" +#include "ll/api/form/SimpleForm.h" +#include "ll/api/i18n/I18n.h" +#include "ll/api/service/Bedrock.h" +#include "mc/server/commands/CommandPermissionLevel.h" +#include "mc/world/actor/player/LayeredAbilities.h" +#include "mc/world/level/Level.h" +#include "mc/world/phys/HitResult.h" +#include +#include +#include +#include +#include + + +namespace coral_fans::cfsp::gui { + +void GuiManager::sendOperateSpPage(Player& player, std::shared_ptr cfsp) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::SimpleForm(cfsp->mSaveData.name); + uint perm; + bool ismanager = manager::CFSPManager::getInstance().isManager(&player); + if (ismanager) perm = manager::CFSPManager::getInstance().getSpPermissionMask(); + else + perm = (uint)cfsp->getPermission(&player) + & manager::CFSPManager::getInstance().getSpPermissionMask( + std::optional(player.getCommandPermissionLevel()) + ); + if (perm) + form.appendButton("gui.operateSp.spinfo"_tr(), [this, cfsp](Player& player) { + this->sendSpInfoPage(player, cfsp); + }); + if (!cfsp->mSimPlayer) { + if (perm & (uint)simulated_player::SimPlayerPermission::Spawn) + form.appendButton("gui.operateSp.online"_tr(), [spname = cfsp->mSaveData.name](Player& player) { + manager::CFSPManager::getInstance().spSpawn(&player, spname).sendTo(player); + }); + } else { + if (perm & (uint)simulated_player::SimPlayerPermission::Despawn) + form.appendButton("gui.operateSp.offline"_tr(), [spname = cfsp->mSaveData.name](Player& player) { + manager::CFSPManager::getInstance().spDespawn(&player, spname).sendTo(player); + }); + if (cfsp->mSimPlayer->isDead()) { + if (perm & (uint)simulated_player::SimPlayerPermission::Respawn) + form.appendButton("gui.operateSp.respawn"_tr(), [spname = cfsp->mSaveData.name](Player& player) { + manager::CFSPManager::getInstance().spRespawn(&player, spname).sendTo(player); + }); + if (perm & (uint)simulated_player::SimPlayerPermission::Tp) + form.appendButton("gui.operateSp.tp"_tr(), [this, cfsp](Player& player) { + Vec3 pos; + const auto& hit = player.traceRay(5.25f, false, true); + if (hit) pos = hit.mPos; + else pos = player.getFeetPos(); + this->sendSpTpOperatorPage( + player, + cfsp, + player.getDimensionId(), + std::to_string(pos.x) + " " + std::to_string(pos.y) + " " + std::to_string(pos.z) + ); + }); + if (perm) + form.appendButton("gui.operateSp.inv"_tr(), [this, cfsp, perm](Player& player) { + this->sendSpInvOperatorPage(player, cfsp, perm); + }); + if (perm & (uint)simulated_player::SimPlayerPermission::Chat + || perm & (uint)simulated_player::SimPlayerPermission::RunCmd) + form.appendButton("gui.operateSp.message"_tr(), [this, cfsp, perm](Player& player) { + this->sendSpMessageOperatorPage(player, cfsp, perm); + }); + } else { + form.appendButton("gui.operateSp.inv"_tr(), [this, cfsp, perm](Player& player) { + this->sendSpInvOperatorPage(player, cfsp, perm); + }); + if (perm & (uint)simulated_player::SimPlayerPermission::Tp) + form.appendButton("gui.operateSp.tp"_tr(), [this, cfsp](Player& player) { + Vec3 pos; + const auto& hit = player.traceRay(5.25f, false, true); + if (hit) pos = hit.mPos; + else pos = player.getFeetPos(); + this->sendSpTpOperatorPage( + player, + cfsp, + player.getDimensionId(), + std::to_string(pos.x) + " " + std::to_string(pos.y) + " " + std::to_string(pos.z) + ); + }); + if (perm & (uint)simulated_player::SimPlayerPermission::LookAt) + form.appendButton("gui.operateSp.lookat"_tr(), [this, cfsp](Player& player) { + if (!cfsp->mSimPlayer) + return base::OperateResult::error("manager.error.loseSimplayer"_tr()).sendTo(player); + if (player.getDimensionId() != cfsp->mSimPlayer->getDimensionId()) + this->sendSpLookOperatorPage(player, cfsp); + else { + Vec3 pos; + const auto& hit = player.traceRay(5.25f, false, true); + if (hit) pos = hit.mPos; + else pos = player.getFeetPos(); + this->sendSpLookOperatorPage( + player, + cfsp, + std::to_string(pos.x) + " " + std::to_string(pos.y) + " " + std::to_string(pos.z) + ); + } + }); + if (perm & (uint)simulated_player::SimPlayerPermission::MoveTo + || perm & (uint)simulated_player::SimPlayerPermission::NavTo) + form.appendButton("gui.operateSp.move"_tr(), [this, cfsp, perm](Player& player) { + if (!cfsp->mSimPlayer) + return base::OperateResult::error("manager.error.loseSimplayer"_tr()).sendTo(player); + if (player.getDimensionId() != cfsp->mSimPlayer->getDimensionId()) + this->sendSpMoveOperatorPage(player, cfsp, perm); + else { + Vec3 pos; + const auto& hit = player.traceRay(5.25f, false, true); + if (hit) pos = hit.mPos; + else pos = player.getFeetPos(); + this->sendSpMoveOperatorPage( + player, + cfsp, + perm, + std::to_string(pos.x) + " " + std::to_string(pos.y) + " " + std::to_string(pos.z) + ); + } + }); + if (cfsp->isFree()) { + if (perm & (uint)simulated_player::SimPlayerPermission::Attack + || perm & (uint)simulated_player::SimPlayerPermission::Build + || perm & (uint)simulated_player::SimPlayerPermission::Interact + || perm & (uint)simulated_player::SimPlayerPermission::Jump) + form.appendButton("gui.operateSp.perform"_tr(), [this, cfsp, perm](Player& player) { + this->sendSpActionOperatorPage(player, cfsp, perm); + }); + if (perm & (uint)simulated_player::SimPlayerPermission::Use + || perm & (uint)simulated_player::SimPlayerPermission::Destroy) + form.appendButton("gui.operateSp.perform2"_tr(), [this, cfsp, perm](Player& player) { + this->sendSpLongActionOperatorPage(player, cfsp, perm); + }); + } + if (perm & (uint)simulated_player::SimPlayerPermission::Stop) + form.appendButton("gui.operateSp.stop"_tr(), [spname = cfsp->mSaveData.name](Player& player) { + manager::CFSPManager::getInstance().spStop(&player, spname).sendTo(player); + }); + if (perm & (uint)simulated_player::SimPlayerPermission::Sneaking + || perm & (uint)simulated_player::SimPlayerPermission::Swimming + || (perm & (uint)simulated_player::SimPlayerPermission::Flying + && cfsp->mSimPlayer->getAbilities().getAbility(AbilitiesIndex::MayFly).mValue->mBoolVal) + || perm & (uint)simulated_player::SimPlayerPermission::Sprinting) + form.appendButton("gui.operateSp.status"_tr(), [this, cfsp, perm](Player& player) { + this->sendSpStatusOperatorPage(player, cfsp, perm); + }); + if (perm & (uint)simulated_player::SimPlayerPermission::Chat + || perm & (uint)simulated_player::SimPlayerPermission::RunCmd) + form.appendButton("gui.operateSp.message"_tr(), [this, cfsp, perm](Player& player) { + this->sendSpMessageOperatorPage(player, cfsp, perm); + }); + } + } + if (perm & (uint)simulated_player::SimPlayerPermission::Delete) + form.appendButton("gui.operateSp.rm"_tr(), [this, cfsp](Player& player) { + auto confirmForm = ll::form::ModalForm( + "gui.operateSp.rm"_tr(), + "gui.operateSp.confirmRm"_tr(cfsp->mSaveData.name), + "base.yesOrNo.yes"_tr(), + "base.yesOrNo.no"_tr() + ); + confirmForm.sendTo( + player, + [this, + cfsp](Player& player, ll::form::ModalFormResult result, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendOperateSpPage(player, cfsp); + if (!result.has_value()) return; + + if (result.value() == ll::form::ModalFormSelectedButton::Upper) { + if (cfsp->mSimPlayer) { + if (cfsp->isEmptyInv()) + return manager::CFSPManager::getInstance() + .spDelete(&player, cfsp->mSaveData.name) + .sendTo(player); + } else if (cfsp->checkInvEmptyForOfflineCFSP()) + return manager::CFSPManager::getInstance() + .spDelete(&player, cfsp->mSaveData.name) + .sendTo(player); + auto confirmForm2 = ll::form::ModalForm( + "gui.operateSp.rm"_tr(), + "gui.operateSp.confirmRm2"_tr(cfsp->mSaveData.name), + "base.yesOrNo.yes"_tr(), + "base.yesOrNo.no"_tr() + ); + confirmForm2.sendTo( + player, + [this, cfsp]( + Player& player, + ll::form::ModalFormResult result, + ll::form::FormCancelReason cancelReason + ) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + this->sendOperateSpPage(player, cfsp); + if (!result.has_value()) return; + + if (result.value() == ll::form::ModalFormSelectedButton::Upper) + return manager::CFSPManager::getInstance() + .spDelete(&player, cfsp->mSaveData.name, true) + .sendTo(player); + if (result.value() == ll::form::ModalFormSelectedButton::Lower) + return this->sendOperateSpPage(player, cfsp); + } + ); + } else if (result.value() == ll::form::ModalFormSelectedButton::Lower) + this->sendOperateSpPage(player, cfsp); + } + ); + }); + if (cfsp->mSaveData.ownerUuid == player.getUuid().asString() || ismanager) + form.appendButton("gui.operateSp.perm"_tr(), [this, cfsp](Player& player) { + this->sendSpPermPage(player, cfsp); + }); + + form.sendTo(player); +} + +void GuiManager::sendCreateSpPage( + Player& player, + int defDim, + std::string defPos, + std::string defName, + int defLockUniqueId +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.createSp.title"_tr()); + form.appendInput("name", "gui.createSp.name"_tr(), "", defName); + form.appendInput("targetpos", "gui.para.targetPos"_tr(), "0 0 0", defPos); + form.appendDropdown( + "dim", + "gui.para.targetDim"_tr(), + std::vector{ + "base.dimension.overworld"_tr(), + "base.dimension.nether"_tr(), + "base.dimension.theend"_tr() + }, + defDim + ); + form.appendDropdown( + "lockUniqueId", + "gui.createSp.lockUniqueId"_tr(), + std::vector{"base.yesOrNo.yes"_tr(), "base.yesOrNo.no"_tr()}, + defLockUniqueId + ); + form.sendTo( + player, + [this](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value()) return; + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + auto it = elements.value().find("name"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) { + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + } + auto name = std::get(it->second); + + it = elements.value().find("targetpos"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto elePos = std::get(it->second); + auto targetPos = this->tryGetVec3(elePos); + + it = elements.value().find("lockUniqueId"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleLockUniqueId = std::get(it->second); + bool lockUniqueId; + if (eleLockUniqueId == "base.yesOrNo.yes"_tr()) lockUniqueId = true; + else if (eleLockUniqueId == "base.yesOrNo.no"_tr()) lockUniqueId = false; + else return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + it = elements.value().find("dim"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleDim = std::get(it->second); + int dim; + if (eleDim == "base.dimension.overworld"_tr()) dim = 0; + else if (eleDim == "base.dimension.nether"_tr()) dim = 1; + else if (eleDim == "base.dimension.theend"_tr()) dim = 2; + else return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + if (!targetPos.has_value()) { + base::OperateResult::error("gui.para.posError"_tr()).sendTo(player); + return this->sendCreateSpPage(player, dim, elePos, name, lockUniqueId); + } + manager::CFSPManager::getInstance() + .spCreate(&player, name, targetPos.value(), dim, lockUniqueId) + .sendTo(player); + } + ); +} + +void GuiManager::sendSpInfoPage(Player& player, std::shared_ptr cfsp) { + using ll::i18n_literals::operator""_tr; + ll::form::SimpleForm( + "gui.info.spTitle"_tr(), + manager::CFSPManager::getInstance().spInfo(&player, cfsp->mSaveData.name).mInfo + ) + .sendTo(player, [this, cfsp](Player& player, int, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + this->sendOperateSpPage(player, cfsp); + }); +} + +void GuiManager::sendSpInvOperatorPage(Player& player, std::shared_ptr cfsp, uint perm) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::SimpleForm("gui.inv.sp.title"_tr()); + if (perm) + form.appendButton("gui.inv.sp.invinfo"_tr(), [this, cfsp, perm](Player& player) { + ll::form::SimpleForm( + "gui.inv.sp.invinfo"_tr(), + manager::CFSPManager::getInstance().spInvInfo(&player, cfsp->mSaveData.name).mInfo + ) + .sendTo(player, [this, cfsp, perm](Player& player, int, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + this->sendSpInvOperatorPage(player, cfsp, perm); + }); + }); + if (perm & (uint)simulated_player::SimPlayerPermission::Swap) + form.appendButton("gui.inv.sp.swap"_tr(), [spname = cfsp->mSaveData.name](Player& player) { + manager::CFSPManager::getInstance().spSwap(&player, spname).sendTo(player); + }); + if (cfsp->isFree()) { + if (perm & (uint)simulated_player::SimPlayerPermission::Drop) + form.appendButton("gui.inv.sp.drop"_tr(), [this, cfsp, perm](Player& player) { + sendSpDropPage(player, cfsp, perm); + }); + if (perm & (uint)simulated_player::SimPlayerPermission::DropInv) + form.appendButton("gui.inv.sp.dropinv"_tr(), [this, cfsp, perm](Player& player) { + sendSpDropInvPage(player, cfsp, perm); + }); + } + form.sendTo(player, [this, cfsp](Player& player, int, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + this->sendOperateSpPage(player, cfsp); + }); +} + +void GuiManager::sendSpDropPage( + Player& player, + std::shared_ptr cfsp, + uint perm, + std::string defTimes, + std::string defInterval +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.inv.sp.drop"_tr()); + form.appendInput("times", "gui.para.times"_tr(), "1", defTimes); + form.appendInput("interval", "gui.para.interval"_tr(), "1", defInterval); + form.sendTo( + player, + [this, + cfsp, + perm](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendSpInvOperatorPage(player, cfsp, perm); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + auto it = elements.value().find("times"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleTimes = std::get(it->second); + auto times = this->tryGetInt(eleTimes); + + it = elements.value().find("interval"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleInterval = std::get(it->second); + auto interval = this->tryGetInt(eleInterval); + + if (!times.has_value() || !interval.has_value()) { + base::OperateResult::error("gui.para.intError"_tr()).sendTo(player); + return this->sendSpDropPage(player, cfsp, perm, eleTimes, eleInterval); + } + + return manager::CFSPManager::getInstance() + .spDrop(&player, cfsp->mSaveData.name, times.value(), interval.value()) + .sendTo(player); + } + ); +} + +void GuiManager::sendSpDropInvPage( + Player& player, + std::shared_ptr cfsp, + uint perm, + std::string defTimes, + std::string defInterval +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.inv.sp.dropinv"_tr()); + form.appendInput("times", "gui.para.times"_tr(), "1", defTimes); + form.appendInput("interval", "gui.para.interval"_tr(), "1", defInterval); + form.sendTo( + player, + [this, + cfsp, + perm](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendSpInvOperatorPage(player, cfsp, perm); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + auto it = elements.value().find("times"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleTimes = std::get(it->second); + auto times = this->tryGetInt(eleTimes); + + it = elements.value().find("interval"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleInterval = std::get(it->second); + auto interval = this->tryGetInt(eleInterval); + + if (!times.has_value() || !interval.has_value()) { + base::OperateResult::error("gui.para.intError"_tr()).sendTo(player); + return this->sendSpDropInvPage(player, cfsp, perm, eleTimes, eleInterval); + } + + return manager::CFSPManager::getInstance() + .spDropInv(&player, cfsp->mSaveData.name, times.value(), interval.value()) + .sendTo(player); + } + ); +} + +void GuiManager::sendSpTpOperatorPage( + Player& player, + std::shared_ptr cfsp, + int defDim, + std::string defPos +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.tp.spTitle"_tr()); + form.appendInput("targetpos", "gui.para.targetPos"_tr(), "0 0 0", defPos); + form.appendDropdown( + "dim", + "gui.para.targetDim"_tr(), + std::vector{ + "base.dimension.overworld"_tr(), + "base.dimension.nether"_tr(), + "base.dimension.theend"_tr() + }, + defDim + ); + form.sendTo( + player, + [this, + cfsp](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendOperateSpPage(player, cfsp); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + auto it = elements.value().find("targetpos"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto elePos = std::get(it->second); + auto targetPos = this->tryGetVec3(elePos); + + it = elements.value().find("dim"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleDim = std::get(it->second); + int dim; + if (eleDim == "base.dimension.overworld"_tr()) dim = 0; + else if (eleDim == "base.dimension.nether"_tr()) dim = 1; + else if (eleDim == "base.dimension.theend"_tr()) dim = 2; + else return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + if (!targetPos.has_value()) { + base::OperateResult::error("gui.para.posError"_tr()).sendTo(player); + return this->sendSpTpOperatorPage(player, cfsp, dim, elePos); + } + manager::CFSPManager::getInstance() + .spTp(&player, cfsp->mSaveData.name, targetPos.value(), dim) + .sendTo(player); + } + ); +} + +void GuiManager::sendSpMessageOperatorPage( + Player& player, + std::shared_ptr cfsp, + uint perm +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.message.spTitle"_tr()); + std::vector op; + if (perm & (uint)simulated_player::SimPlayerPermission::Chat) op.emplace_back("gui.message.chat"_tr()); + if (perm & (uint)simulated_player::SimPlayerPermission::RunCmd) op.emplace_back("gui.message.runcmd"_tr()); + form.appendDropdown("operate", "gui.para.operate"_tr(), op); + form.appendInput("text", "gui.para.text"_tr()); + form.sendTo( + player, + [this, + cfsp](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendOperateSpPage(player, cfsp); + + auto it = elements.value().find("operate"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleOp = std::get(it->second); + + it = elements.value().find("text"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleText = std::get(it->second); + + if (eleOp == "gui.message.chat"_tr()) + return manager::CFSPManager::getInstance() + .spChat(&player, cfsp->mSaveData.name, eleText) + .sendTo(player); + if (eleOp == "gui.message.runcmd"_tr()) + return manager::CFSPManager::getInstance() + .spRunCmd(&player, cfsp->mSaveData.name, eleText) + .sendTo(player); + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + } + ); +} + +void GuiManager::sendSpMoveOperatorPage( + Player& player, + std::shared_ptr cfsp, + uint perm, + std::string defPos, + std::string defSpeed, + int defOp +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.move.spTitle"_tr()); + std::vector op; + if (perm & (uint)simulated_player::SimPlayerPermission::MoveTo) op.emplace_back("gui.move.moveto"_tr()); + if (perm & (uint)simulated_player::SimPlayerPermission::NavTo) op.emplace_back("gui.move.navto"_tr()); + form.appendDropdown("operate", "gui.para.operate"_tr(), op, defOp); + form.appendInput("targetpos", "gui.para.targetPos"_tr(), "0 0 0", defPos); + form.appendInput("speed", "gui.para.speed"_tr(), "4.3", defSpeed); + form.sendTo( + player, + [this, + cfsp, + perm, + op](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendOperateSpPage(player, cfsp); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + auto it = elements.value().find("targetpos"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto elePos = std::get(it->second); + auto targetPos = this->tryGetVec3(elePos); + + it = elements.value().find("speed"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleSpeed = std::get(it->second); + auto speed = this->tryGetFloat(eleSpeed); + + it = elements.value().find("operate"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleOp = std::get(it->second); + + if (!targetPos.has_value() || !speed.has_value()) { + int size = (int)op.size(), opIndex = -1; + for (int i = 0; i < size; i++) + if (eleOp == op[i]) { + opIndex = i; + break; + } + if (opIndex == -1) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + base::OperateResult::error("gui.para.posError"_tr()).sendTo(player); + return this->sendSpMoveOperatorPage(player, cfsp, perm, elePos, eleSpeed, opIndex); + } + if (eleOp == "gui.move.moveto"_tr()) + return manager::CFSPManager::getInstance() + .spMoveTo(&player, cfsp->mSaveData.name, targetPos.value(), speed.value()) + .sendTo(player); + if (eleOp == "gui.move.navto"_tr()) + return manager::CFSPManager::getInstance() + .spNavTo(&player, cfsp->mSaveData.name, targetPos.value(), speed.value()) + .sendTo(player); + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + } + ); +} + +void GuiManager::sendSpLookOperatorPage( + Player& player, + std::shared_ptr cfsp, + std::string defPos +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.look.spTitle"_tr()); + form.appendInput("targetpos", "gui.para.targetPos"_tr(), "0 0 0", defPos); + form.sendTo( + player, + [this, + cfsp](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendOperateSpPage(player, cfsp); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + auto it = elements.value().find("targetpos"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto elePos = std::get(it->second); + auto targetPos = this->tryGetVec3(elePos); + + if (!targetPos.has_value()) { + base::OperateResult::error("gui.para.posError"_tr()).sendTo(player); + return this->sendSpLookOperatorPage(player, cfsp, elePos); + } + + return manager::CFSPManager::getInstance() + .spLookAt(&player, cfsp->mSaveData.name, targetPos.value()) + .sendTo(player); + } + ); +} + +void GuiManager::sendSpActionOperatorPage( + Player& player, + std::shared_ptr cfsp, + uint perm, + std::string defTimes, + std::string defInterval, + int defOp +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.action.spTitle"_tr()); + std::vector op; + if (perm & (uint)simulated_player::SimPlayerPermission::Attack) op.emplace_back("gui.action.attack"_tr()); + if (perm & (uint)simulated_player::SimPlayerPermission::Build) op.emplace_back("gui.action.build"_tr()); + if (perm & (uint)simulated_player::SimPlayerPermission::Interact) op.emplace_back("gui.action.interact"_tr()); + if (perm & (uint)simulated_player::SimPlayerPermission::Jump) op.emplace_back("gui.action.jump"_tr()); + form.appendDropdown("operate", "gui.para.operate"_tr(), op, defOp); + form.appendInput("times", "gui.para.times"_tr(), "1", defTimes); + form.appendInput("interval", "gui.para.interval"_tr(), "1", defInterval); + form.sendTo( + player, + [this, + cfsp, + op, + perm](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendOperateSpPage(player, cfsp); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + auto it = elements.value().find("operate"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleOp = std::get(it->second); + + it = elements.value().find("times"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleTimes = std::get(it->second); + auto times = this->tryGetInt(eleTimes); + + it = elements.value().find("interval"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleInterval = std::get(it->second); + auto interval = this->tryGetInt(eleInterval); + + if (!times.has_value() || !interval.has_value()) { + int size = (int)op.size(), opIndex = -1; + for (int i = 0; i < size; i++) + if (eleOp == op[i]) { + opIndex = i; + break; + } + if (opIndex == -1) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + base::OperateResult::error("gui.para.intError"_tr()).sendTo(player); + return this->sendSpActionOperatorPage(player, cfsp, perm, eleTimes, eleInterval, opIndex); + } + + if (eleOp == "gui.action.attack"_tr()) + return manager::CFSPManager::getInstance() + .spAttack(&player, cfsp->mSaveData.name, times.value(), interval.value()) + .sendTo(player); + if (eleOp == "gui.action.build"_tr()) + return manager::CFSPManager::getInstance() + .spBuild(&player, cfsp->mSaveData.name, times.value(), interval.value()) + .sendTo(player); + if (eleOp == "gui.action.interact"_tr()) + return manager::CFSPManager::getInstance() + .spInteract(&player, cfsp->mSaveData.name, times.value(), interval.value()) + .sendTo(player); + if (eleOp == "gui.action.jump"_tr()) + return manager::CFSPManager::getInstance() + .spJump(&player, cfsp->mSaveData.name, times.value(), interval.value()) + .sendTo(player); + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + } + ); +} + +void GuiManager::sendSpLongActionOperatorPage( + Player& player, + std::shared_ptr cfsp, + uint perm, + std::string defLong, + std::string defTimes, + std::string defInterval, + int defOp +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.longAction.spTitle"_tr()); + std::vector op; + if (perm & (uint)simulated_player::SimPlayerPermission::Use) op.emplace_back("gui.longAction.use"_tr()); + if (perm & (uint)simulated_player::SimPlayerPermission::Destroy) op.emplace_back("gui.longAction.destroy"_tr()); + form.appendDropdown("operate", "gui.para.operate"_tr(), op, defOp); + form.appendInput("long", "gui.para.long"_tr(), "10", defLong); + form.appendInput("times", "gui.para.times"_tr(), "1", defTimes); + form.appendInput("interval", "gui.para.interval"_tr(), "1", defInterval); + form.sendTo( + player, + [this, + cfsp, + op, + perm](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendOperateSpPage(player, cfsp); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + auto it = elements.value().find("operate"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleOp = std::get(it->second); + + it = elements.value().find("long"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleLong = std::get(it->second); + auto _long = this->tryGetInt(eleLong); + + it = elements.value().find("times"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleTimes = std::get(it->second); + auto times = this->tryGetInt(eleTimes); + + it = elements.value().find("interval"); + if (it == elements.value().end() || !std::holds_alternative(it->second)) + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + auto eleInterval = std::get(it->second); + auto interval = this->tryGetInt(eleInterval); + + if (!_long.has_value() || !times.has_value() || !interval.has_value()) { + int size = (int)op.size(), opIndex = -1; + for (int i = 0; i < size; i++) + if (eleOp == op[i]) { + opIndex = i; + break; + } + if (opIndex == -1) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + base::OperateResult::error("gui.para.intError"_tr()).sendTo(player); + return this->sendSpLongActionOperatorPage(player, cfsp, perm, eleLong, eleTimes, eleInterval, opIndex); + } + + if (eleOp == "gui.longAction.use"_tr()) + return manager::CFSPManager::getInstance() + .spUse(&player, cfsp->mSaveData.name, _long.value(), times.value(), interval.value()) + .sendTo(player); + if (eleOp == "gui.longAction.destroy"_tr()) + return manager::CFSPManager::getInstance() + .spDestroy(&player, cfsp->mSaveData.name, _long.value(), times.value(), interval.value()) + .sendTo(player); + return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + } + ); +} + +void GuiManager::sendSpStatusOperatorPage( + Player& player, + std::shared_ptr cfsp, + uint perm +) { + using ll::i18n_literals::operator""_tr; + if (!cfsp->mSimPlayer) return base::OperateResult::error("manager.error.loseSimplayer"_tr()).sendTo(player); + auto form = ll::form::CustomForm("gui.status.spTitle"_tr()); + if (perm & (uint)simulated_player::SimPlayerPermission::Sneaking) + form.appendToggle( + "sneaking", + "gui.status.sneaking"_tr(), + cfsp->mSimPlayer->getStatusFlag(ActorFlags::Sneaking) + ); + if (perm & (uint)simulated_player::SimPlayerPermission::Swimming) + form.appendToggle( + "swimming", + "gui.status.swimming"_tr(), + cfsp->mSimPlayer->getStatusFlag(ActorFlags::Swimming) + ); + if (perm & (uint)simulated_player::SimPlayerPermission::Flying + && cfsp->mSimPlayer->getAbilities().getAbility(AbilitiesIndex::MayFly).mValue->mBoolVal) + form.appendToggle("flying", "gui.status.flying"_tr(), cfsp->mSimPlayer->isFlying()); + if (perm & (uint)simulated_player::SimPlayerPermission::Sprinting) + form.appendToggle( + "sprinting", + "gui.status.sprinting"_tr(), + cfsp->mSimPlayer->getStatusFlag(ActorFlags::Sprinting) + ); + form.sendTo( + player, + [this, + cfsp](Player& player, ll::form::CustomFormResult const& elements, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendOperateSpPage(player, cfsp); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + if (!cfsp->mSimPlayer) return base::OperateResult::error("manager.error.loseSimplayer"_tr()).sendTo(player); + + if (auto it = elements.value().find("sneaking"); + it != elements.value().end() && std::holds_alternative(it->second)) { + if ((bool)std::get(it->second)) { + manager::CFSPManager::getInstance().spSneaking(&player, cfsp->mSaveData.name, true).sendTo(player); + } else + manager::CFSPManager::getInstance().spSneaking(&player, cfsp->mSaveData.name, false).sendTo(player); + } + + if (auto it = elements.value().find("swimming"); + it != elements.value().end() && std::holds_alternative(it->second)) { + if ((bool)std::get(it->second)) { + manager::CFSPManager::getInstance().spSwimming(&player, cfsp->mSaveData.name, true).sendTo(player); + } else + manager::CFSPManager::getInstance().spSwimming(&player, cfsp->mSaveData.name, false).sendTo(player); + } + + if (cfsp->mSimPlayer->getAbilities().getAbility(AbilitiesIndex::MayFly).mValue->mBoolVal) + if (auto it = elements.value().find("flying"); + it != elements.value().end() && std::holds_alternative(it->second)) { + if ((bool)std::get(it->second)) { + manager::CFSPManager::getInstance() + .spFlying(&player, cfsp->mSaveData.name, true) + .sendTo(player); + } else + manager::CFSPManager::getInstance() + .spFlying(&player, cfsp->mSaveData.name, false) + .sendTo(player); + } + + if (auto it = elements.value().find("sprinting"); + it != elements.value().end() && std::holds_alternative(it->second)) { + if ((bool)std::get(it->second)) { + manager::CFSPManager::getInstance().spSprinting(&player, cfsp->mSaveData.name, true).sendTo(player); + } else + manager::CFSPManager::getInstance() + .spSprinting(&player, cfsp->mSaveData.name, false) + .sendTo(player); + } + } + ); +} + +void GuiManager::sendSpPermPage(Player& player, std::shared_ptr cfsp) { + using ll::i18n_literals::operator""_tr; + std::vector> splist; + auto level = ll::service::getLevel(); + if (level.has_value()) + level->forEachPlayer([&splist, pname = player.mName.get()](Player& player) { + if (!player.isSimulatedPlayer() && pname != player.mName.get()) + splist.emplace_back(std::make_pair(player.mName, player.getUuid().asString())); + return true; + }); + for (auto i : cfsp->mSaveData.permission) + splist.emplace_back(std::make_pair(base::utils::tryGetPlayerName(i.first), i.first)); + std::sort(splist.begin(), splist.end()); + + auto form = ll::form::SimpleForm("gui.perm.spTitle"_tr()); + int size = (int)splist.size(); + if (size) { + form.appendButton(splist[0].first, [this, cfsp, targetPlayer = splist[0]](Player& player) { + this->sendSpPermPage2(player, cfsp, targetPlayer.first, targetPlayer.second); + }); + for (int i = 1; i < size; i++) + if (splist[i] != splist[i - 1]) + form.appendButton(splist[i].first, [this, cfsp, targetPlayer = splist[i]](Player& player) { + this->sendSpPermPage2(player, cfsp, targetPlayer.first, targetPlayer.second); + }); + } + form.appendButton("gui.perm.publicSp"_tr(), [this, cfsp](Player& player) { this->sendSpPermPage2(player, cfsp); }); + form.sendTo(player, [this, cfsp](Player& player, int, ll::form::FormCancelReason cancelReason) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + this->sendOperateSpPage(player, cfsp); + }); +} + +void GuiManager::sendSpPermPage2( + Player& player, + std::shared_ptr cfsp, + std::string targetPlayerName, + std::string targetPlayerUuid +) { + using ll::i18n_literals::operator""_tr; + auto form = ll::form::CustomForm("gui.perm.spTitle2"_tr( + cfsp->mSaveData.name, + targetPlayerName != "" ? targetPlayerName : "gui.perm.publicSp"_tr() + )); + + uint perm = 0; + if (targetPlayerName == "") perm = cfsp->mSaveData.publicPermission; + else { + auto it = cfsp->mSaveData.permission.find(targetPlayerUuid); + if (it != cfsp->mSaveData.permission.end()) perm = it->second; + } + + form.appendToggle("spawn", "gui.perm.spawn"_tr(), perm & (uint)simulated_player::SimPlayerPermission::Spawn); + form.appendToggle("despawn", "gui.perm.despawn"_tr(), perm & (uint)simulated_player::SimPlayerPermission::Despawn); + form.appendToggle("respawn", "gui.perm.respawn"_tr(), perm & (uint)simulated_player::SimPlayerPermission::Respawn); + form.appendToggle("delete", "gui.perm.delete"_tr(), perm & (uint)simulated_player::SimPlayerPermission::Delete); + form.appendToggle("stop", "gui.perm.stop"_tr(), perm & (uint)simulated_player::SimPlayerPermission::Stop); + form.appendToggle("drop", "gui.perm.drop"_tr(), perm & (uint)simulated_player::SimPlayerPermission::Drop); + form.appendToggle("dropInv", "gui.perm.dropInv"_tr(), perm & (uint)simulated_player::SimPlayerPermission::DropInv); + form.appendToggle("swap", "gui.perm.swap"_tr(), perm & (uint)simulated_player::SimPlayerPermission::Swap); + form.appendToggle( + "sneaking", + "gui.perm.sneaking"_tr(), + perm & (uint)simulated_player::SimPlayerPermission::Sneaking + ); + form.appendToggle( + "swimming", + "gui.perm.swimming"_tr(), + perm & (uint)simulated_player::SimPlayerPermission::Swimming + ); + form.appendToggle("flying", "gui.perm.flying"_tr(), perm & (uint)simulated_player::SimPlayerPermission::Flying); + form.appendToggle( + "sprinting", + "gui.perm.sprinting"_tr(), + perm & (uint)simulated_player::SimPlayerPermission::Sprinting + ); + form.appendToggle("attack", "gui.perm.attack"_tr(), perm & (uint)simulated_player::SimPlayerPermission::Attack); + form.appendToggle("build", "gui.perm.build"_tr(), perm & (uint)simulated_player::SimPlayerPermission::Build); + form.appendToggle( + "interact", + "gui.perm.interact"_tr(), + perm & (uint)simulated_player::SimPlayerPermission::Interact + ); + form.appendToggle("jump", "gui.perm.jump"_tr(), perm & (uint)simulated_player::SimPlayerPermission::Jump); + form.appendToggle("use", "gui.perm.use"_tr(), perm & (uint)simulated_player::SimPlayerPermission::Use); + form.appendToggle("destroy", "gui.perm.destroy"_tr(), perm & (uint)simulated_player::SimPlayerPermission::Destroy); + form.appendToggle("chat", "gui.perm.chat"_tr(), perm & (uint)simulated_player::SimPlayerPermission::Chat); + form.appendToggle("runCmd", "gui.perm.runCmd"_tr(), perm & (uint)simulated_player::SimPlayerPermission::RunCmd); + form.appendToggle("select", "gui.perm.select"_tr(), perm & (uint)simulated_player::SimPlayerPermission::Select); + form.appendToggle("lookAt", "gui.perm.lookAt"_tr(), perm & (uint)simulated_player::SimPlayerPermission::LookAt); + form.appendToggle("moveTo", "gui.perm.moveTo"_tr(), perm & (uint)simulated_player::SimPlayerPermission::MoveTo); + form.appendToggle("navTo", "gui.perm.navTo"_tr(), perm & (uint)simulated_player::SimPlayerPermission::NavTo); + form.appendToggle("tp", "gui.perm.tp"_tr(), perm & (uint)simulated_player::SimPlayerPermission::Tp); + form.appendToggle( + "beAddedToGroup", + "gui.perm.beAddedToGroup"_tr(), + perm & (uint)simulated_player::SimPlayerPermission::BeAddedToGroup + ); + + form.sendTo( + player, + [this, cfsp, targetPlayerUuid]( + Player& player, + ll::form::CustomFormResult const& elements, + ll::form::FormCancelReason cancelReason + ) { + if (cancelReason.has_value() && cancelReason == ModalFormCancelReason::UserClosed) + return this->sendSpPermPage(player, cfsp); + if (!elements.has_value()) return base::OperateResult::error("gui.para.paraError"_tr()).sendTo(player); + + uint newPerm = 0; + + if (auto it = elements.value().find("spawn"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::Spawn; + + if (auto it = elements.value().find("despawn"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::Despawn; + + if (auto it = elements.value().find("respawn"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::Respawn; + + if (auto it = elements.value().find("delete"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::Delete; + + if (auto it = elements.value().find("stop"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::Stop; + + if (auto it = elements.value().find("drop"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::Drop; + + if (auto it = elements.value().find("dropInv"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::DropInv; + + if (auto it = elements.value().find("swap"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::Swap; + + if (auto it = elements.value().find("sneaking"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) + newPerm |= (uint)simulated_player::SimPlayerPermission::Sneaking; + + if (auto it = elements.value().find("swimming"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) + newPerm |= (uint)simulated_player::SimPlayerPermission::Swimming; + + if (auto it = elements.value().find("flying"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::Flying; + + if (auto it = elements.value().find("sprinting"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) + newPerm |= (uint)simulated_player::SimPlayerPermission::Sprinting; + + if (auto it = elements.value().find("attack"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::Attack; + + if (auto it = elements.value().find("build"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::Build; + + if (auto it = elements.value().find("interact"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) + newPerm |= (uint)simulated_player::SimPlayerPermission::Interact; + + if (auto it = elements.value().find("jump"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::Jump; + + if (auto it = elements.value().find("use"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::Use; + + if (auto it = elements.value().find("destroy"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::Destroy; + + if (auto it = elements.value().find("chat"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::Chat; + + if (auto it = elements.value().find("runCmd"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::RunCmd; + + if (auto it = elements.value().find("select"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::Select; + + if (auto it = elements.value().find("lookAt"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::LookAt; + + if (auto it = elements.value().find("moveTo"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::MoveTo; + + if (auto it = elements.value().find("navTo"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::NavTo; + + if (auto it = elements.value().find("tp"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) newPerm |= (uint)simulated_player::SimPlayerPermission::Tp; + + if (auto it = elements.value().find("beAddedToGroup"); + it != elements.value().end() && std::holds_alternative(it->second)) + if ((bool)std::get(it->second)) + newPerm |= (uint)simulated_player::SimPlayerPermission::BeAddedToGroup; + + + if (targetPlayerUuid == "") cfsp->mSaveData.publicPermission = newPerm; + else if (newPerm) cfsp->mSaveData.permission[targetPlayerUuid] = newPerm; + else if (auto it = cfsp->mSaveData.permission.find(targetPlayerUuid); + it != cfsp->mSaveData.permission.end()) + cfsp->mSaveData.permission.erase(it); + + cfsp->mShouldSave = true; + if (!cfsp->mSimPlayer) cfsp->save(); + + base::OperateResult::success("manager.success.operate"_tr()).sendTo(player); + } + ); +} +} // namespace coral_fans::cfsp::gui \ No newline at end of file diff --git a/src/cfsp/fix/FeatureFix.h b/src/cfsp/fix/FeatureFix.h deleted file mode 100644 index b74c78e..0000000 --- a/src/cfsp/fix/FeatureFix.h +++ /dev/null @@ -1,3 +0,0 @@ -namespace coral_fans::cfsp::fix { -void featureFix(bool bl); -} \ No newline at end of file diff --git a/src/cfsp/gui/FormPacketHelper.cpp b/src/cfsp/gui/FormPacketHelper.cpp deleted file mode 100644 index f38b5ec..0000000 --- a/src/cfsp/gui/FormPacketHelper.cpp +++ /dev/null @@ -1,198 +0,0 @@ -// from https://github.com/LiteLDev/LegacyScriptEngine/blob/v0.10.6/src/legacy/legacyapi/form -#include "FormPacketHelper.h" -#include "FormUI.h" -#include "ll/api/form/FormIdManager.h" -#include "ll/api/memory/Hook.h" -#include "mc/network/PacketHandlerDispatcherInstance.h" -#include "mc/network/ServerNetworkHandler.h" -#include "mc/network/packet/ModalFormResponsePacket.h" -#include "mc/server/ServerPlayer.h" -#include "mc/world/actor/player/Player.h" - -#include - -namespace lse::form { - -//////////////////////////////// Data //////////////////////////////// - -enum class FormType { - SimpleFormBuilder, - ModalFormBuilder, - CustomFormBuilder, - SimpleFormPacket, - ModalFormPacket, - CustomFormPacket -}; - -std::unordered_map formTypes; - -std::unordered_map> simpleFormPacketCallbacks; -std::unordered_map> modalFormPacketCallbacks; -std::unordered_map> - customFormPacketCallbacks; - -std::unordered_map> simpleFormBuilders; -std::unordered_map> modalFormBuilders; -std::unordered_map> customFormBuilders; - -//////////////////////////////// Functions //////////////////////////////// - -unsigned NewFormId() { - unsigned formId; - do { - formId = ll::form::FormIdManager::genFormId(); - } while (formTypes.find(formId) != formTypes.end()); - return formId; -} - -void SetSimpleFormPacketCallback(unsigned formId, std::function callback) { - formTypes[formId] = FormType::SimpleFormPacket; - simpleFormPacketCallbacks[formId] = callback; -} - -void SetModalFormPacketCallback(unsigned formId, std::function callback) { - formTypes[formId] = FormType::ModalFormPacket; - modalFormPacketCallbacks[formId] = callback; -} - -void SetCustomFormPacketCallback( - unsigned formId, - std::function callback -) { - formTypes[formId] = FormType::CustomFormPacket; - customFormPacketCallbacks[formId] = callback; -} - -void SetSimpleFormBuilderData(unsigned formId, std::shared_ptr data) { - formTypes[formId] = FormType::SimpleFormBuilder; - simpleFormBuilders[formId] = data; -} - -void SetModalFormBuilderData(unsigned formId, std::shared_ptr data) { - formTypes[formId] = FormType::ModalFormBuilder; - modalFormBuilders[formId] = data; -} - -void SetCustomFormBuilderData(unsigned formId, std::shared_ptr data) { - formTypes[formId] = FormType::CustomFormBuilder; - customFormBuilders[formId] = data; -} - -void HandleFormPacket(Player* player, unsigned formId, const std::string& data, FormCancelReason reason) { - if (formTypes.find(formId) == formTypes.end()) return; - - if (formTypes[formId] == FormType::SimpleFormBuilder) { - int chosen = data != "null" ? stoi(data) : -1; - - // Simple Form Builder - auto form = simpleFormBuilders[formId]; - if (form->callback) form->callback(player, chosen, reason); - // Button Callback - if (chosen >= 0) { - if ((size_t)chosen >= form->elements.size()) return; - auto button = dynamic_pointer_cast