mirror of
https://github.com/JezuzLizard/T4SP-Server-Plugin.git
synced 2025-04-19 21:22:54 +00:00
Add pluto patches to compiler
This commit is contained in:
parent
15309fc2c0
commit
d8e10441ec
@ -1996,12 +1996,31 @@ LABEL_17:
|
|||||||
game::BuiltinFunction GetFunction(game::scriptInstance_t inst, const char **pName, int *type)
|
game::BuiltinFunction GetFunction(game::scriptInstance_t inst, const char **pName, int *type)
|
||||||
{
|
{
|
||||||
if ( inst )
|
if ( inst )
|
||||||
|
{
|
||||||
|
// pluto
|
||||||
|
if (game::plutonium::cscr_get_function_hook != nullptr)
|
||||||
|
{
|
||||||
|
return game::plutonium::cscr_get_function_hook(pName, type);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
else
|
||||||
{
|
{
|
||||||
return game::CScr_GetFunction(pName, type);
|
return game::CScr_GetFunction(pName, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// pluto
|
||||||
|
if (game::plutonium::scr_get_function_hook != nullptr)
|
||||||
|
{
|
||||||
|
return game::plutonium::scr_get_function_hook(pName, type);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
else
|
||||||
|
{
|
||||||
return game::Scr_GetFunction(pName, type);
|
return game::Scr_GetFunction(pName, type);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Completed
|
// Completed
|
||||||
void EmitCall(game::scriptInstance_t inst, game::sval_u func_name, game::sval_u params, int bStatement, game::scr_block_s* block)
|
void EmitCall(game::scriptInstance_t inst, game::sval_u func_name, game::sval_u params, int bStatement, game::scr_block_s* block)
|
||||||
@ -2113,12 +2132,30 @@ LABEL_17:
|
|||||||
game::BuiltinMethod GetMethod(game::scriptInstance_t inst, const char **pName, int *type)
|
game::BuiltinMethod GetMethod(game::scriptInstance_t inst, const char **pName, int *type)
|
||||||
{
|
{
|
||||||
if ( inst )
|
if ( inst )
|
||||||
|
{
|
||||||
|
// pluto
|
||||||
|
if (game::plutonium::cscr_get_method_hook != nullptr)
|
||||||
|
{
|
||||||
|
return game::plutonium::cscr_get_method_hook(pName, type);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
else
|
||||||
{
|
{
|
||||||
return game::CScr_GetMethod(pName, type);
|
return game::CScr_GetMethod(pName, type);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// pluto
|
||||||
|
if (game::plutonium::scr_get_method_hook != nullptr)
|
||||||
|
{
|
||||||
|
return game::plutonium::scr_get_method_hook(pName, type);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
else
|
||||||
|
{
|
||||||
return game::Scr_GetMethod(type, pName);
|
return game::Scr_GetMethod(type, pName);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Completed
|
// Completed
|
||||||
void EmitMethod(game::scriptInstance_t inst, game::sval_u expr, game::sval_u func_name, game::sval_u params, game::sval_u methodSourcePos, int bStatement, game::scr_block_s* block)
|
void EmitMethod(game::scriptInstance_t inst, game::sval_u expr, game::sval_u func_name, game::sval_u params, game::sval_u methodSourcePos, int bStatement, game::scr_block_s* block)
|
||||||
@ -2345,8 +2382,10 @@ LABEL_17:
|
|||||||
pos = game::Scr_EvalVariable(inst, posId);
|
pos = game::Scr_EvalVariable(inst, posId);
|
||||||
if ( pos.type != game::VAR_UNDEFINED )
|
if ( pos.type != game::VAR_UNDEFINED )
|
||||||
{
|
{
|
||||||
// crash BUG! need to check in developer (vanilla)
|
// pluto
|
||||||
if ( pos.u.intValue )
|
auto* developer = game::Dvar_FindVar("developer");
|
||||||
|
if ( pos.u.intValue && developer && developer->current.enabled )
|
||||||
|
//
|
||||||
{
|
{
|
||||||
game::CompileError(inst, sourcePos, "function '%s' already defined in '%s'", game::SL_ConvertToString(name, inst), game::gScrParserPub[inst].sourceBufferLookup[game::Scr_GetSourceBuffer(inst, pos.u.codePosValue)].buf);
|
game::CompileError(inst, sourcePos, "function '%s' already defined in '%s'", game::SL_ConvertToString(name, inst), game::gScrParserPub[inst].sourceBufferLookup[game::Scr_GetSourceBuffer(inst, pos.u.codePosValue)].buf);
|
||||||
}
|
}
|
||||||
@ -4980,6 +5019,14 @@ LABEL_17:
|
|||||||
game::gScrCompileGlob[inst].cumulOffset = 0;
|
game::gScrCompileGlob[inst].cumulOffset = 0;
|
||||||
game::gScrCompileGlob[inst].maxOffset = 0;
|
game::gScrCompileGlob[inst].maxOffset = 0;
|
||||||
game::gScrCompileGlob[inst].maxCallOffset = 0;
|
game::gScrCompileGlob[inst].maxCallOffset = 0;
|
||||||
|
|
||||||
|
// pluto
|
||||||
|
if (game::plutonium::store_func_codepos != nullptr)
|
||||||
|
{
|
||||||
|
game::plutonium::store_func_codepos(inst, val.node[1].stringValue);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
|
||||||
game::CompileTransferRefToString(val.node[1].stringValue, inst, 2u);
|
game::CompileTransferRefToString(val.node[1].stringValue, inst, 2u);
|
||||||
game::EmitFormalParameterList(inst, val.node[2], sourcePos, block);
|
game::EmitFormalParameterList(inst, val.node[2], sourcePos, block);
|
||||||
game::EmitStatementList(inst, val.node[3], 1, endSourcePos.stringValue, block);
|
game::EmitStatementList(inst, val.node[3], 1, endSourcePos.stringValue, block);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include <stdinc.hpp>
|
#include <stdinc.hpp>
|
||||||
#include "loader/component_loader.hpp"
|
#include "loader/component_loader.hpp"
|
||||||
|
#include "gsc.hpp"
|
||||||
|
|
||||||
#include "scheduler.hpp"
|
#include "scheduler.hpp"
|
||||||
|
|
||||||
@ -107,6 +108,11 @@ namespace gsc
|
|||||||
{
|
{
|
||||||
functions.insert_or_assign(name, function);
|
functions.insert_or_assign(name, function);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::unordered_map<std::string, game::BuiltinFunction>& get()
|
||||||
|
{
|
||||||
|
return functions;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace method
|
namespace method
|
||||||
@ -115,6 +121,11 @@ namespace gsc
|
|||||||
{
|
{
|
||||||
methods.insert_or_assign(name, method);
|
methods.insert_or_assign(name, method);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::unordered_map<std::string, game::BuiltinMethod>& get()
|
||||||
|
{
|
||||||
|
return methods;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class component final : public component_interface
|
class component final : public component_interface
|
||||||
@ -122,6 +133,7 @@ namespace gsc
|
|||||||
public:
|
public:
|
||||||
void post_unpack() override
|
void post_unpack() override
|
||||||
{
|
{
|
||||||
|
// for when we dont use the decomp
|
||||||
// custom gsc methods
|
// custom gsc methods
|
||||||
if (game::plutonium::scr_get_method_stub != nullptr)
|
if (game::plutonium::scr_get_method_stub != nullptr)
|
||||||
{
|
{
|
||||||
|
@ -5,10 +5,12 @@ namespace gsc
|
|||||||
namespace function
|
namespace function
|
||||||
{
|
{
|
||||||
void add(const std::string& name, const game::BuiltinFunction function);
|
void add(const std::string& name, const game::BuiltinFunction function);
|
||||||
|
const std::unordered_map<std::string, game::BuiltinFunction>& get();
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace method
|
namespace method
|
||||||
{
|
{
|
||||||
void add(const std::string& name, const game::BuiltinMethod method);
|
void add(const std::string& name, const game::BuiltinMethod method);
|
||||||
|
const std::unordered_map<std::string, game::BuiltinMethod>& get();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -139,15 +139,13 @@ namespace signatures
|
|||||||
|
|
||||||
std::string err_reason;
|
std::string err_reason;
|
||||||
|
|
||||||
std::string get_err_reason()
|
const std::string& get_err_reason()
|
||||||
{
|
{
|
||||||
return err_reason;
|
return err_reason;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool process_printf()
|
bool process_printf(std::unordered_map<std::string, std::string> &cache_info)
|
||||||
{
|
{
|
||||||
auto cache_info = get_cache_info_for_our_version();
|
|
||||||
|
|
||||||
if (cache_info.contains("printf"))
|
if (cache_info.contains("printf"))
|
||||||
{
|
{
|
||||||
game::plutonium::printf.set(std::atoi(cache_info.at("printf").c_str()));
|
game::plutonium::printf.set(std::atoi(cache_info.at("printf").c_str()));
|
||||||
@ -165,7 +163,6 @@ namespace signatures
|
|||||||
game::plutonium::printf.set(string_ref + 4 + 5 + offset);
|
game::plutonium::printf.set(string_ref + 4 + 5 + offset);
|
||||||
|
|
||||||
cache_info.insert_or_assign("printf", std::to_string(string_ref + 4 + 5 + offset));
|
cache_info.insert_or_assign("printf", std::to_string(string_ref + 4 + 5 + offset));
|
||||||
save_cache_info_for_our_version(cache_info);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -201,6 +198,12 @@ namespace signatures
|
|||||||
{
|
{
|
||||||
size_t addr1;
|
size_t addr1;
|
||||||
size_t addr2;
|
size_t addr2;
|
||||||
|
auto cache_info = get_cache_info_for_our_version();
|
||||||
|
|
||||||
|
if (!process_printf(cache_info))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
SAFE_SET_PLUTO_SYMBOL_DOUBLE(load_custom_script_func, 0x689C80, 0x6);
|
SAFE_SET_PLUTO_SYMBOL_DOUBLE(load_custom_script_func, 0x689C80, 0x6);
|
||||||
SAFE_SET_PLUTO_SYMBOL_DOUBLE(script_preprocess, 0x689BCF, 0x2);
|
SAFE_SET_PLUTO_SYMBOL_DOUBLE(script_preprocess, 0x689BCF, 0x2);
|
||||||
@ -210,9 +213,16 @@ namespace signatures
|
|||||||
SAFE_SET_PLUTO_SYMBOL_DOUBLE(scr_execentthread_update_codepos_func, 0x699640, 0x7);
|
SAFE_SET_PLUTO_SYMBOL_DOUBLE(scr_execentthread_update_codepos_func, 0x699640, 0x7);
|
||||||
SAFE_SET_PLUTO_SYMBOL_DOUBLE(scr_addexecthread_update_codepos_func, 0x699730, 0x7);
|
SAFE_SET_PLUTO_SYMBOL_DOUBLE(scr_addexecthread_update_codepos_func, 0x699730, 0x7);
|
||||||
SAFE_SET_PLUTO_SYMBOL_DOUBLE(at_codepose_va, 0x68B3A5, 0xA);
|
SAFE_SET_PLUTO_SYMBOL_DOUBLE(at_codepose_va, 0x68B3A5, 0xA);
|
||||||
|
SAFE_SET_PLUTO_SYMBOL_DOUBLE(store_func_codepos, 0x688909, 0x3);
|
||||||
|
|
||||||
|
SAFE_SET_PLUTO_SYMBOL(cscr_get_function_hook, 0x682DC0);
|
||||||
SAFE_SET_PLUTO_SYMBOL(scr_get_function_stub, 0x682D99);
|
SAFE_SET_PLUTO_SYMBOL(scr_get_function_stub, 0x682D99);
|
||||||
SAFE_SET_PLUTO_SYMBOL(scr_get_method_stub, 0x683043);
|
SAFE_SET_PLUTO_SYMBOL(scr_get_method_stub, 0x683043);
|
||||||
|
SAFE_SET_PLUTO_SYMBOL(cscr_get_method_hook, 0x68305C);
|
||||||
|
SAFE_SET_PLUTO_SYMBOL_DOUBLE(scr_get_method_hook, 0x683043, 0x4);
|
||||||
|
SAFE_SET_PLUTO_SYMBOL_DOUBLE(scr_get_function_hook, 0x682D99, 0x8);
|
||||||
|
|
||||||
|
save_cache_info_for_our_version(cache_info);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -221,6 +231,6 @@ namespace signatures
|
|||||||
{
|
{
|
||||||
utils::cryptography::des::set_key("694201337");
|
utils::cryptography::des::set_key("694201337");
|
||||||
|
|
||||||
return handle_funcs() && process_printf();
|
return handle_funcs();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,6 @@
|
|||||||
|
|
||||||
namespace signatures
|
namespace signatures
|
||||||
{
|
{
|
||||||
std::string get_err_reason();
|
const std::string& get_err_reason();
|
||||||
bool process();
|
bool process();
|
||||||
}
|
}
|
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#define RE_CSCR_ANIMTREE_USE_WRAPPERS
|
#define RE_CSCR_ANIMTREE_USE_WRAPPERS
|
||||||
#define RE_CSCR_COMPILER_USE_WRAPPERS
|
//#define RE_CSCR_COMPILER_USE_WRAPPERS
|
||||||
//#define RE_CSCR_MAIN_USE_WRAPPERS
|
//#define RE_CSCR_MAIN_USE_WRAPPERS
|
||||||
//#define RE_CSCR_MEMORYTREE_USE_WRAPPERS
|
//#define RE_CSCR_MEMORYTREE_USE_WRAPPERS
|
||||||
//#define RE_CSCR_PARSER_USE_WRAPPERS
|
//#define RE_CSCR_PARSER_USE_WRAPPERS
|
||||||
@ -33,7 +33,7 @@
|
|||||||
//#define RE_CSCR_VM_USE_WRAPPERS
|
//#define RE_CSCR_VM_USE_WRAPPERS
|
||||||
//#define RE_CSCR_YACC_USE_WRAPPERS
|
//#define RE_CSCR_YACC_USE_WRAPPERS
|
||||||
|
|
||||||
//#define DISABLE_RE_CSCR_YACC
|
//#define DISABLE_RE_CSCR_ANIMTREE
|
||||||
//#define DISABLE_RE_CSCR_COMPILER
|
//#define DISABLE_RE_CSCR_COMPILER
|
||||||
//#define DISABLE_RE_CSCR_MAIN
|
//#define DISABLE_RE_CSCR_MAIN
|
||||||
//#define DISABLE_RE_CSCR_MEMORYTREE
|
//#define DISABLE_RE_CSCR_MEMORYTREE
|
||||||
|
@ -106,5 +106,12 @@ namespace game
|
|||||||
|
|
||||||
WEAK symbol<void()> scr_get_method_stub{ 0x0, 0x0 };
|
WEAK symbol<void()> scr_get_method_stub{ 0x0, 0x0 };
|
||||||
WEAK symbol<void()> scr_get_function_stub{ 0x0, 0x0 };
|
WEAK symbol<void()> scr_get_function_stub{ 0x0, 0x0 };
|
||||||
|
|
||||||
|
WEAK symbol<game::BuiltinMethod(const char** name, int* type)> scr_get_method_hook{ 0x0, 0x0 };
|
||||||
|
WEAK symbol<game::BuiltinFunction(const char** name, int* type)> scr_get_function_hook{ 0x0, 0x0 };
|
||||||
|
WEAK symbol<game::BuiltinMethod(const char** name, int* type)> cscr_get_method_hook{ 0x0, 0x0 };
|
||||||
|
WEAK symbol<game::BuiltinFunction(const char** name, int* type)> cscr_get_function_hook{ 0x0, 0x0 };
|
||||||
|
|
||||||
|
WEAK symbol<void(int scrInstance, int str_num)> store_func_codepos{ 0x0, 0x0 };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user