[Weapons]: Added new functions and some fixes

This commit is contained in:
JerryALT 2024-06-18 15:09:31 +03:00
parent 1944dc360c
commit 2fc28052c3

View File

@ -57,11 +57,11 @@ namespace Components
Dvars::p_allowFire = Dvars::Register::Dvar_RegisterBool("p_allowFire", "Enables/Disables player fire", true, Game::saved_flag);
});
GSC::AddFunction("getweapondamage", []
GSC::AddFunction("GetWeaponDamage", []
{
if (Game::Scr_GetNumParam() != 1)
{
Game::Scr_Error("getweapondamage( <string> weaponName ) requires one parameter");
Game::Scr_Error("GetWeaponDamage( <string> weaponName ) requires one parameter");
return;
}
@ -70,11 +70,11 @@ namespace Components
return Game::Scr_AddInt(weapon->damage);
}, false);
GSC::AddFunction("setweapondamage", []
GSC::AddFunction("SetWeaponDamage", []
{
if (Game::Scr_GetNumParam() != 2)
{
Game::Scr_Error("setweapondamage( <string> weaponName, <int> value ) requires two parameters");
Game::Scr_Error("SetWeaponDamage( <string> weaponName, <int> value ) requires two parameters");
return;
}
@ -96,16 +96,77 @@ namespace Components
}
int fxId = Game::Scr_GetInt(0);
int realTagName = Game::Scr_GetConstString(1);
unsigned int weaponIndex = Game::ps->weapon;
int tagName = Game::Scr_GetConstString(1);
const auto weaponDef = Game::bg_weaponDefs[weaponIndex];
unsigned int weaponIndex = Game::ps->weapon;
const auto viewmodelInfo = &Game::cg_weaponsArray[weaponIndex];
std::uint8_t bone = 254;
if (!Game::DObjGetBoneIndex(viewmodelInfo->viewModelDObj, tagName, &bone))
{
const char* error_msg = Utils::String::VA("PlayViewmodelFX(): viewmodel weapon '%s', does not have bone '%s'", viewmodelInfo->translatedDisplayName, Game::SL_ConvertToString(tagName));
Game::Scr_Error(error_msg);
return;
}
Game::CG_PlayBoltedEffect(Game::cgs->localClientNum,
Game::scr_const->tag_flash,
weaponIndex + 2176,
tagName,
weaponIndex + 2176, // <-- CG_WeaponDObjHandle
Game::cgsArray->fxs[fxId]);
Game::Scr_AddInt(true);
}, false);
GSC::AddFunction("ViewmodelHideTag", []
{
if (Game::Scr_GetNumParam() != 1)
{
Game::Scr_Error("ViewmodelHideTag() called with wrong params.\n");
return;
}
int tagName = Game::Scr_GetConstString(0);
unsigned int weaponIndex = Game::ps->weapon;
const auto viewmodelInfo = &Game::cg_weaponsArray[weaponIndex];
std::uint8_t bone = 254;
if (!Game::DObjGetBoneIndex(viewmodelInfo->viewModelDObj, tagName, &bone))
{
const char* error_msg = Utils::String::VA("ViewmodelHideTag: No such bone tag (%s) for weapon (%s)", viewmodelInfo->translatedDisplayName, Game::SL_ConvertToString(tagName));
Game::Scr_Error(error_msg);
return;
}
viewmodelInfo->partBits[bone >> 5] |= 0x80000000 >> (bone & 0x1F);
Game::ChangeViewmodelDobj(Game::g_clients->ps.weapon, Game::g_clients->ps.weaponmodels[Game::g_clients->ps.weapon], viewmodelInfo->handModel, viewmodelInfo->gogglesModel, viewmodelInfo->rocketModel, viewmodelInfo->knifeModel, 1);
Game::Scr_AddInt(true);
}, false);
GSC::AddFunction("ViewmodelShowTag", []
{
if (Game::Scr_GetNumParam() != 1)
{
Game::Scr_Error("ViewmodelShowTag() called with wrong params.\n");
return;
}
int tagName = Game::Scr_GetConstString(0);
unsigned int weaponIndex = Game::ps->weapon;
const auto viewmodelInfo = &Game::cg_weaponsArray[weaponIndex];
std::uint8_t bone = 254;
if (!Game::DObjGetBoneIndex(viewmodelInfo->viewModelDObj, tagName, &bone))
{
const char* error_msg = Utils::String::VA("ViewmodelShowTag: No such bone tag (%s) for weapon (%s)", viewmodelInfo->translatedDisplayName, Game::SL_ConvertToString(tagName));
Game::Scr_Error(error_msg);
return;
}
viewmodelInfo->partBits[bone >> 5] &= ~(0x80000000 >> (bone & 0x1F));
Game::ChangeViewmodelDobj(Game::g_clients->ps.weapon, Game::g_clients->ps.weaponmodels[Game::g_clients->ps.weapon], viewmodelInfo->handModel, viewmodelInfo->gogglesModel, viewmodelInfo->rocketModel, viewmodelInfo->knifeModel, 1);
Game::Scr_AddInt(true);
}, false);
Utils::Hook(0x5C2C91, Weapons::FireWeaponStub, HOOK_JUMP).install()->quick();