[String]: Add IString func (#877)

This commit is contained in:
Edo 2023-03-27 12:51:00 +01:00 committed by GitHub
parent e539701d3d
commit ae6d50dad8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 3 deletions

View File

@ -35,14 +35,14 @@ namespace Components::GSC
void ScriptExtension::GScr_AddFieldsForEntityStub()
{
for (const auto& [offset, field] : CustomEntityFields)
for (const auto& field : CustomEntityFields | std::views::values)
{
Game::Scr_AddClassField(Game::ClassNum::CLASS_NUM_ENTITY, field.name, field.ofs);
}
Utils::Hook::Call<void()>(0x4A7CF0)(); // GScr_AddFieldsForClient
for (const auto& [offset, field] : CustomClientFields)
for (const auto& field : CustomClientFields | std::views::values)
{
Game::Scr_AddClassField(Game::ClassNum::CLASS_NUM_ENTITY, field.name, field.ofs);
}

View File

@ -5,6 +5,8 @@
namespace Components::GSC
{
using namespace Utils::String;
void String::AddScriptFunctions()
{
Script::AddFunction("ToUpper", [] // gsc: ToUpper(<string>)
@ -122,7 +124,7 @@ namespace Components::GSC
Game::Scr_AddFloat(static_cast<float>(Game::Scr_GetInt(0)));
break;
default:
Game::Scr_ParamError(0, Utils::String::VA("cannot cast %s to float", Game::Scr_GetTypeName(0)));
Game::Scr_ParamError(0, VA("cannot cast %s to float", Game::Scr_GetTypeName(0)));
break;
}
});
@ -141,6 +143,22 @@ namespace Components::GSC
Game::Scr_AddInt(result);
});
Script::AddFunction("IString", [] // gsc: IString(<string>)
{
if (Game::Scr_GetType(0) != Game::VAR_STRING)
{
Game::Scr_ParamError(0, VA("cannot cast %s to istring", Game::Scr_GetTypeName(0)));
return;
}
const auto value = Game::Scr_GetConstString(0);
Game::SL_AddRefToString(value);
Game::Scr_AddIString(Game::Scr_GetString(0));
Game::SL_RemoveRefToString(value);
});
}
String::String()