修复动态指令

This commit is contained in:
Qiuzhizhe 2022-11-10 16:54:20 +08:00
parent d772221882
commit 55fd424d13
No known key found for this signature in database
GPG Key ID: 4EF4BF5521540263
2 changed files with 13 additions and 14 deletions

View File

@ -48,7 +48,7 @@ class Command {
#define AFTER_EXTRA #define AFTER_EXTRA
// Add Member There // Add Member There
#define DISABLE_CONSTRUCTOR_PREVENTION_COMMAND
protected: protected:
int version; // 8 int version; // 8
CommandRegistry* registry; // 16 CommandRegistry* registry; // 16
@ -68,18 +68,16 @@ public:
return sym(a, b); return sym(a, b);
} }
std::string getCommandName() const{ std::string getCommandName() const{
return this->registry->symbolToString(this->symbol); return registry->symbolToString(symbol);
}; };
Command(){ // Command(){
CommandFlag mflag; // this->version = 0;
mflag.value = CommandFlagValue::None; // this->registry = 0LL;
*(void**)this = dlsym("??_7Command@@6B@"); // this->symbol = -1;
this->version = 0; // this->permission = CommandPermissionLevel(5);
this->registry = 0LL; // this->flag.value = CommandFlagValue::None;
this->symbol = -1; // this->unk = 0;
this->permission = CommandPermissionLevel(5); // }
this->flag = mflag;
}
#undef AFTER_EXTRA #undef AFTER_EXTRA
#ifndef DISABLE_CONSTRUCTOR_PREVENTION_COMMAND #ifndef DISABLE_CONSTRUCTOR_PREVENTION_COMMAND

View File

@ -395,7 +395,8 @@
inline char DynamicCommand::builderCallbackHanler(DCCallback* cb, DCArgs* args, DCValue* result, void* userdata) { inline char DynamicCommand::builderCallbackHanler(DCCallback* cb, DCArgs* args, DCValue* result, void* userdata) {
DynamicCommandInstance& command = *(DynamicCommandInstance*)userdata; DynamicCommandInstance& command = *(DynamicCommandInstance*)userdata;
auto arg1 = (std::unique_ptr<Command>*)dcbArgPointer(args); auto arg1 = (std::unique_ptr<Command>*)dcbArgPointer(args);
DynamicCommand::commandBuilder(arg1, command.getCommandName()); arg1->release();
result->p = DynamicCommand::commandBuilder(arg1, command.getCommandName());
return 'p'; return 'p';
} }
@ -503,7 +504,7 @@
#ifdef USE_PARSE_ENUM_STRING #ifdef USE_PARSE_ENUM_STRING
Global<CommandRegistry>->addEnumValuesInternal(fixedView.data(), values, typeid_t<CommandRegistry>::count++, &CommandRegistry::parseEnumStringAndInt).val; Global<CommandRegistry>->addEnumValuesInternal(fixedView.data(), values, typeid_t<CommandRegistry>::count++, &CommandRegistry::parseEnumStringAndInt).val;
#else #else
Global<CommandRegistry>->_addEnumValuesInternal(fixedView.data(), values, typeid_t<CommandRegistry>::count++, &CommandRegistry::parseEnum<int>).val; Global<CommandRegistry>->addEnumValuesInternal(fixedView.data(), values, typeid_t<CommandRegistry>::count++, &CommandRegistry::parseEnum<int>).val;
#endif // USE_PARSE_ENUM_STRING #endif // USE_PARSE_ENUM_STRING
} }
commandInstance->enumRanges.swap(convertedEnumRanges); commandInstance->enumRanges.swap(convertedEnumRanges);