Merge branch 'develop' into main
This commit is contained in:
+55
-2
@@ -1,6 +1,10 @@
|
||||
// const getNextCallbackId = ll.import("GMLIB_FormAPI", "getNextFormCallbackId");
|
||||
|
||||
class ServerSettingForm {
|
||||
constructor() {
|
||||
throw new Error("Static class cannot be instantiated");
|
||||
}
|
||||
|
||||
static getDefaultPriority() {
|
||||
return ll.import("GMLIB_ServerSettingForm", "getDefaultPriority")();
|
||||
}
|
||||
@@ -123,7 +127,56 @@ class ServerSettingForm {
|
||||
static removeElement(id) {
|
||||
return ll.import("GMLIB_ServerSettingForm", "removeElement")(id);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = { ServerSettingForm };
|
||||
class NpcDialogueForm {
|
||||
constructor(npcName, sceneName, dialogue) {
|
||||
this.mFormId = ll.import("GMLIB_NpcDialogueForm", "createForm")(npcName, sceneName, dialogue);
|
||||
}
|
||||
|
||||
addButton(button) {
|
||||
return ll.import("GMLIB_NpcDialogueForm", "addButton")(this.mFormId, button);
|
||||
}
|
||||
|
||||
sendTo(pl, callback = (pl, index, type) => { }, free = true) {
|
||||
let callbackId = getNextCallbackId();
|
||||
ll.export(callback, "GMLIB_FORM_CALLBACK", callbackId);
|
||||
ll.import("GMLIB_NpcDialogueForm", "sendTo")(this.mFormId, pl, callbackId);
|
||||
if (free) {
|
||||
this.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
destroy() {
|
||||
ll.import("GMLIB_NpcDialogueForm", "destroyForm")(this.mFormId);
|
||||
}
|
||||
}
|
||||
|
||||
class ChestForm {
|
||||
constructor(npcName, sceneName, dialogue) {
|
||||
this.mFormId = ll.import("GMLIB_NpcDialogueForm", "createForm")(npcName, sceneName, dialogue);
|
||||
}
|
||||
|
||||
addButton(button) {
|
||||
return ll.import("GMLIB_NpcDialogueForm", "addButton")(this.mFormId, button);
|
||||
}
|
||||
|
||||
sendTo(pl, free = true) {
|
||||
//let callbackId = getNextCallbackId();
|
||||
//ll.export(callback, "GMLIB_FORM_CALLBACK", callbackId);
|
||||
//ll.import("GMLIB_NpcDialogueForm", "sendTo")(this.mFormId, pl, callbackId);
|
||||
//if (free) {
|
||||
// this.destroy();
|
||||
//}
|
||||
}
|
||||
|
||||
destroy() {
|
||||
//ll.import("GMLIB_NpcDialogueForm", "destroyForm")(this.mFormId);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
ServerSettingForm,
|
||||
NpcDialogueForm,
|
||||
ChestForm
|
||||
};
|
||||
+2
-2
@@ -3,7 +3,7 @@
|
||||
|
||||
ll::Logger logger(PLUGIN_NAME);
|
||||
|
||||
namespace GMLIB {
|
||||
namespace gmlib {
|
||||
|
||||
std::unique_ptr<LegacyRemoteCallApi>& LegacyRemoteCallApi::getInstance() {
|
||||
static std::unique_ptr<LegacyRemoteCallApi> instance;
|
||||
@@ -33,6 +33,6 @@ bool LegacyRemoteCallApi::enable() { return true; }
|
||||
|
||||
bool LegacyRemoteCallApi::disable() { return true; }
|
||||
|
||||
} // namespace GMLIB
|
||||
} // namespace gmlib
|
||||
|
||||
LL_REGISTER_MOD(GMLIB::LegacyRemoteCallApi, GMLIB::LegacyRemoteCallApi::getInstance());
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@
|
||||
#include <ll/api/mod/NativeMod.h>
|
||||
#include <ll/api/mod/RegisterHelper.h>
|
||||
|
||||
namespace GMLIB {
|
||||
namespace gmlib {
|
||||
|
||||
class LegacyRemoteCallApi {
|
||||
|
||||
@@ -30,4 +30,4 @@ private:
|
||||
ll::mod::NativeMod& mSelf;
|
||||
};
|
||||
|
||||
} // namespace GMLIB
|
||||
} // namespace gmlib
|
||||
|
||||
+125
-21
@@ -2,28 +2,84 @@
|
||||
|
||||
using namespace ll::hash_utils;
|
||||
|
||||
// class LegacyScriptFormManager {
|
||||
// private:
|
||||
// int64 mNextFormCallbackId = 0;
|
||||
class LegacyScriptFormManager {
|
||||
private:
|
||||
int64 mNextFormCallbackId = 0;
|
||||
int64 mNextFormId = 0;
|
||||
std::unordered_map<int64, std::unique_ptr<gmlib::form::NpcDialogueForm>> mNpcDialogueForms;
|
||||
// std::unordered_map<int64, std::unique_ptr<ChestForm>> mChestForms;
|
||||
|
||||
// public:
|
||||
// std::string getNextFormCallbackId() {
|
||||
// return "GMLIB_FormApi_" + std::to_string(mNextFormCallbackId++);
|
||||
// }
|
||||
public:
|
||||
// std::string getNextFormCallbackId() {
|
||||
// return "GMLIB_FormApi_" + std::to_string(mNextFormCallbackId++);
|
||||
// }
|
||||
|
||||
// public:
|
||||
// static LegacyScriptFormManager& getInstance() {
|
||||
// static std::unique_ptr<LegacyScriptFormManager> instance;
|
||||
// if (!instance) instance = std::make_unique<LegacyScriptFormManager>();
|
||||
// return *instance;
|
||||
// }
|
||||
// };
|
||||
int64 getNextFormId() {
|
||||
mNextFormId++;
|
||||
return mNextFormId;
|
||||
}
|
||||
|
||||
int64 createNpcDialogueForm(std::string const& npcName, std::string const& sceneName, std::string const& dialogue) {
|
||||
auto formId = LegacyScriptFormManager::getInstance().getNextFormId();
|
||||
auto formPtr = std::make_unique<gmlib::form::NpcDialogueForm>(npcName, sceneName, dialogue);
|
||||
mNpcDialogueForms[formId] = std::move(formPtr);
|
||||
return formId;
|
||||
}
|
||||
|
||||
bool destroyNpcDialogueForm(int64 formId) {
|
||||
if (mNpcDialogueForms.contains(formId)) {
|
||||
mNpcDialogueForms.erase(formId);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
optional_ref<gmlib::form::NpcDialogueForm> getNpcDialogueForm(int64 formId) {
|
||||
if (mNpcDialogueForms.contains(formId)) {
|
||||
return mNpcDialogueForms[formId].get();
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
/*
|
||||
int64 createChestForm(std::string const& npcName, std::string const& sceneName, std::string const& dialogue) {
|
||||
auto formId = LegacyScriptFormManager::getInstance().getNextFormId();
|
||||
auto formPtr = std::make_unique<ChestForm>(npcName, sceneName, dialogue);
|
||||
mChestForms[formId] = std::move(formPtr);
|
||||
return formId;
|
||||
}
|
||||
|
||||
bool destroyChestForm(int64 formId) {
|
||||
if (mChestForms.contains(formId)) {
|
||||
mChestForms.erase(formId);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
optional_ref<ChestForm> getChestForm(int64 formId) {
|
||||
if (mChestForms.contains(formId)) {
|
||||
return mChestForms[formId].get();
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
*/
|
||||
public:
|
||||
static LegacyScriptFormManager& getInstance() {
|
||||
static std::unique_ptr<LegacyScriptFormManager> instance;
|
||||
if (!instance) {
|
||||
instance = std::make_unique<LegacyScriptFormManager>();
|
||||
}
|
||||
return *instance;
|
||||
}
|
||||
};
|
||||
|
||||
#define PLAYER_DETECROR \
|
||||
[detectorId, result](Player& pl) -> bool { \
|
||||
[detectorId, result](::Player& pl) -> bool { \
|
||||
try { \
|
||||
if (RemoteCall::hasFunc("GMLIB_FORM_CALLBACK", detectorId)) { \
|
||||
auto const& detector = RemoteCall::importAs<bool(Player*)>("GMLIB_FORM_CALLBACK", detectorId); \
|
||||
auto const& detector = RemoteCall::importAs<bool(::Player*)>("GMLIB_FORM_CALLBACK", detectorId); \
|
||||
return detector(&pl); \
|
||||
} else { \
|
||||
gmlib::form::ServerSettingForm::removeElement(result); \
|
||||
@@ -44,15 +100,28 @@ using namespace ll::hash_utils;
|
||||
} catch (...) {} \
|
||||
}
|
||||
|
||||
#define CALLBACK_TYPE_NORMAL \
|
||||
[callbackId](::Player& pl) { \
|
||||
try { \
|
||||
if (RemoteCall::hasFunc("GMLIB_FORM_CALLBACK", callbackId)) { \
|
||||
auto const& callback = RemoteCall::importAs<void(::Player*)>("GMLIB_FORM_CALLBACK", callbackId); \
|
||||
callback(&pl); \
|
||||
} \
|
||||
} catch (...) {} \
|
||||
}
|
||||
|
||||
|
||||
void Export_Form_API() {
|
||||
RemoteCall::exportAs("GMLIB_gmlib::form::ServerSettingForm", "getDefaultPriority", []() -> int {
|
||||
return gmlib::form::ServerSettingForm::getDefaultPriority();
|
||||
});
|
||||
//////////////////////////////// Form Manager /////////////////////////////////
|
||||
// RemoteCall::exportAs("GMLIB_FormAPI", "getNextFormCallbackId", []() -> std::string {
|
||||
// return LegacyScriptFormManager::getInstance().getNextFormCallbackId();
|
||||
// });
|
||||
RemoteCall::exportAs("GMLIB_gmlib::form::ServerSettingForm", "hasTitle", []() -> bool { return gmlib::form::ServerSettingForm::hasTitle(); });
|
||||
RemoteCall::exportAs("GMLIB_gmlib::form::ServerSettingForm", "getTitle", []() -> std::string {
|
||||
////////////////////////////// ServerSettingForm //////////////////////////////
|
||||
RemoteCall::exportAs("GMLIB_ServerSettingForm", "getDefaultPriority", []() -> int {
|
||||
return gmlib::form::ServerSettingForm::getDefaultPriority();
|
||||
});
|
||||
RemoteCall::exportAs("GMLIB_ServerSettingForm", "hasTitle", []() -> bool { return gmlib::form::ServerSettingForm::hasTitle(); });
|
||||
RemoteCall::exportAs("GMLIB_ServerSettingForm", "getTitle", []() -> std::string {
|
||||
return gmlib::form::ServerSettingForm::getTitle();
|
||||
});
|
||||
RemoteCall::exportAs("GMLIB_gmlib::form::ServerSettingForm", "setTitle", [](std::string const& title, bool forceModify) -> bool {
|
||||
@@ -181,4 +250,39 @@ void Export_Form_API() {
|
||||
RemoteCall::exportAs("GMLIB_gmlib::form::ServerSettingForm", "removeElement", [](uint id) -> bool {
|
||||
return gmlib::form::ServerSettingForm::removeElement(id);
|
||||
});
|
||||
////////////////////////////// NpcDialogueForm //////////////////////////////
|
||||
RemoteCall::exportAs(
|
||||
"GMLIB_NpcDialogueForm",
|
||||
"createForm",
|
||||
[](std::string const& npcName, std::string const& sceneName, std::string const& dialogue) -> int64 {
|
||||
return LegacyScriptFormManager::getInstance().createNpcDialogueForm(npcName, sceneName, dialogue);
|
||||
}
|
||||
);
|
||||
RemoteCall::exportAs("GMLIB_NpcDialogueForm", "destroyForm", [](int64 formId) -> bool {
|
||||
return LegacyScriptFormManager::getInstance().destroyNpcDialogueForm(formId);
|
||||
});
|
||||
RemoteCall::exportAs(
|
||||
"GMLIB_NpcDialogueForm",
|
||||
"addButton",
|
||||
[](int64 formId, std::string const& button, std::string const& callbackId) -> void {
|
||||
if (auto formPtr = LegacyScriptFormManager::getInstance().getNpcDialogueForm(formId)) {
|
||||
formPtr->addButton(button, CALLBACK_TYPE_NORMAL);
|
||||
}
|
||||
}
|
||||
);
|
||||
RemoteCall::exportAs(
|
||||
"GMLIB_NpcDialogueForm",
|
||||
"onPlayerClose",
|
||||
[](int64 formId, std::string const& callbackId) -> void {
|
||||
if (auto formPtr = LegacyScriptFormManager::getInstance().getNpcDialogueForm(formId)) {
|
||||
formPtr->onPlayerClose(CALLBACK_TYPE_NORMAL);
|
||||
}
|
||||
}
|
||||
);
|
||||
RemoteCall::exportAs("GMLIB_NpcDialogueForm", "sendTo", [](int64 formId, ::Player* pl) -> void {
|
||||
if (auto formPtr = LegacyScriptFormManager::getInstance().getNpcDialogueForm(formId)) {
|
||||
formPtr->sendTo(*pl);
|
||||
}
|
||||
});
|
||||
////////////////////////////// ChestForm //////////////////////////////
|
||||
}
|
||||
Reference in New Issue
Block a user