Senior Member
|
06-19-2017
, 23:55
[CS:S] One Man Army issues
|
#1
|
So, I would like to dedicate this thread to issues related to the CS:S One Man Army and to specific coding questions or problems I run into, as I seem to run into a fair amount when I work on this project.
If you need to look at the whole plugin, I won't be posting the entire plugin here as 4000+ lines would be way too much. the latest version can be grabbed here.
Now, my current and long standing issue is grenades. A staple feature of this mod/plugin is that CTs can go invisible. Now that feature works, however, CS:S apparently uses a dummy model for the grenades that are placed on the character model's belt. So when the player goes invisible, you essentially see a floating grenade. I have used the code below to fix the gun/knife model from showing, but I cannot figure out how to get the id for the dummy model so it will fade as well.
I have also included the helper function: GetGrenadeID
PHP Code:
stock GetGrenadeID(client, String: grenade[])
{
new MyWeapons = FindSendPropInfo("CBasePlayer", "m_hMyWeapons");
if(MyWeapons == -1)
return -1;
decl String:weapon[64];
for(new i = 0, ent; i < 188; i += 4)
{
ent = GetEntDataEnt2(client, MyWeapons + i);
if(IsValidEntity(ent))
{
if(IsValidEdict(ent))
{
GetEdictClassname(ent, weapon, sizeof(weapon));
if(StrEqual(weapon, grenade, false))
return ent;
}
}
}
return -1;
}
/*
OnPlayerRunCmd will hook and detect player's +commands.
I have it set up so that this function will cloak the player
when they are pressing the crouch or walk key.
The weapon detection is for cloaking nades.
*/
public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
{
new bool: omaenable = GetConVarBool(cvarpluginstatus);
if(!omaenable)
return Plugin_Continue;
if(!IsClientInGame(client))
return Plugin_Continue;
if(FreezeTime)
return Plugin_Continue;
if(IsPlayerAlive(client) && GetClientTeam(client) == TEAM_CT)
{
new weaponid = GetPlayerWeaponSlot(client, 2);
new henade, sgnade;
if(PlayerSkills[client][2] >= 1)
henade = GetGrenadeID(client, "weapon_hegrenade");
else
henade = -1;
if(PlayerSkills[client][3] >= 1)
sgnade = GetGrenadeID(client, "weapon_smokegrenade");
else
sgnade = -1;
//PrintToChat(client, "[SM] CheckCloak is called.");
if(buttons & IN_ATTACK || buttons & IN_ATTACK2)
{
if(PlayerCanCloak[client])
{
SetEntityRenderFx(client, RENDERFX_NONE);
PlayerSpeed[client] = 1.0;
SetSpeed(client, PlayerSpeed[client]);
if(weaponid != -1)
SetEntityRenderFx(weaponid, RENDERFX_NONE);
if(henade != -1)
{
SetEntityRenderFx(henade, RENDERFX_NONE);
SetAlpha(henade, 255);
}
if(sgnade != -1)
{
SetAlpha(sgnade, 255);
SetEntityRenderFx(sgnade, RENDERFX_NONE);
}
PlayerCanCloak[client] = false;
CreateTimer(1.0,CloakCharge, client,TIMER_FLAG_NO_MAPCHANGE);
//PrintToChat(client, "[SM] Player Attacked. Rendering reset");
}
if(PlayerSkills[client][2] >= 1)
{
new count = GetClientGrenades(client, Slot_HEgrenade);
if(!NadeRegenActive[client] && count < PlayerSkills[client][2])
CreateTimer(FloatDiv(15.0, float(PlayerSkills[client][2])),HEnadeRegen, client,TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}
else if(PlayerSkills[client][3] >= 1)
{
new count = GetClientGrenades(client, Slot_Smokegrenade);
if(!SNadeRegenActive[client] && count < PlayerSkills[client][3])
CreateTimer(FloatDiv(15.0, float(PlayerSkills[client][3])),SmokenadeRegen, client,TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}
}
else if(buttons & IN_DUCK && !(GetEntityRenderFx(client) & RENDERFX_FADE_SLOW))
{
if(PlayerCanCloak[client])
{
if(buttons & IN_JUMP && LongJump[client])
{
new Float:vec[3];
if(PlayerSkills[client][8] > 0 && PlayerCanCloak[client])
{
PlayerSpeed[client] = 1.0;
SetSpeed(client, PlayerSpeed[client]);
vec[0]= GetEntDataFloat(client, VelocityOffset_x) * ((PlayerSkills[client][8] * 0.5) + 1.0) / 2.0;
vec[1]= GetEntDataFloat(client, VelocityOffset_y) * ((PlayerSkills[client][8] * 0.5) + 1.0) / 2.0;
vec[2]= 1.0 * 50.0;
SetEntDataVector(client, BaseVelocityOffset, vec, true);
PlayerCanCloak[client] = false;
LongJump[client] = false;
SetEntityRenderFx(client, RENDERFX_NONE);
SetSpeed(client, PlayerSpeed[client]);
if(weaponid != -1)
SetEntityRenderFx(weaponid, RENDERFX_NONE);
if(henade != -1)
{
SetAlpha(henade, 255);
SetEntityRenderFx(henade, RENDERFX_NONE);
}
if(sgnade != -1)
{
SetAlpha(sgnade, 255);
SetEntityRenderFx(sgnade, RENDERFX_NONE);
}
//PrintToChat(client, "[SM] Player Has used long jump.");
CreateTimer(1.5,JumpCharge, client,TIMER_FLAG_NO_MAPCHANGE);
CreateTimer(1.0,CloakCharge, client,TIMER_FLAG_NO_MAPCHANGE);
}
}
else if(buttons & IN_ATTACK || buttons & IN_ATTACK2 || buttons & IN_JUMP)
{
SetEntityRenderFx(client, RENDERFX_NONE);
PlayerSpeed[client] = 1.0;
SetSpeed(client, PlayerSpeed[client]);
if(weaponid != -1)
SetEntityRenderFx(weaponid, RENDERFX_NONE);
if(henade != -1)
{
SetAlpha(henade, 255);
SetEntityRenderFx(henade, RENDERFX_NONE);
}
if(sgnade != -1)
{
SetAlpha(sgnade, 255);
SetEntityRenderFx(sgnade, RENDERFX_NONE);
}
PlayerCanCloak[client] = false;
CreateTimer(1.0,CloakCharge, client,TIMER_FLAG_NO_MAPCHANGE);
//PrintToChat(client, "[SM] Player Attacked or Jumped. Rendering reset");
}
else
{
SetEntityRenderFx(client, RENDERFX_FADE_FAST);
if(weaponid != -1)
SetEntityRenderFx(weaponid, RENDERFX_FADE_FAST);
if(henade != -1)
{
SetEntityRenderFx(henade, RENDERFX_FADE_FAST);
SetAlpha(henade, 0);
}
if(sgnade != -1)
{
SetEntityRenderFx(sgnade, RENDERFX_FADE_FAST);
SetAlpha(sgnade, 0);
}
//PrintToChat(client, "[SM] Rendering fade fast");
if(PlayerSkills[client][6] > 0)
{
PlayerSpeed[client] = 1.0 + (0.4 * PlayerSkills[client][6]);
SetSpeed(client, PlayerSpeed[client]);
}
}
}
}
else if(buttons & IN_SPEED && !(GetEntityRenderFx(client) & RENDERFX_FADE_FAST))
{
if(PlayerCanCloak[client])
{
if(buttons & IN_ATTACK || buttons & IN_ATTACK2 || buttons & IN_JUMP)
{
SetEntityRenderFx(client, RENDERFX_NONE);
PlayerSpeed[client] = 1.0;
SetSpeed(client, PlayerSpeed[client]);
if(weaponid != -1)
SetEntityRenderFx(weaponid, RENDERFX_NONE);
if(henade != -1)
{
SetAlpha(henade, 255);
SetEntityRenderFx(henade, RENDERFX_NONE);
}
if(sgnade != -1)
{
SetAlpha(sgnade, 255);
SetEntityRenderFx(sgnade, RENDERFX_NONE);
}
PlayerCanCloak[client] = false;
CreateTimer(1.0,CloakCharge, client,TIMER_FLAG_NO_MAPCHANGE);
//PrintToChat(client, "[SM] Player Attacked or Jumped. Rendering reset");
}
else
{
SetEntityRenderFx(client, RENDERFX_FADE_SLOW);
if(weaponid != -1)
SetEntityRenderFx(weaponid, RENDERFX_FADE_SLOW);
if(henade != -1)
{
SetAlpha(henade, 0);
SetEntityRenderFx(henade, RENDERFX_FADE_SLOW);
}
if(sgnade != -1)
{
SetAlpha(sgnade, 0);
SetEntityRenderFx(sgnade, RENDERFX_FADE_SLOW);
}
//PrintToChat(client, "[SM] Rendering fade slow");
if(PlayerSkills[client][6] > 0)
{
PlayerSpeed[client] = 1.0 + (0.6 * PlayerSkills[client][6]);
SetSpeed(client, PlayerSpeed[client]);
}
}
}
}
else if(!(buttons & IN_DUCK || buttons & IN_SPEED) && (buttons & IN_FORWARD
|| buttons & IN_BACK || buttons & IN_LEFT || buttons & IN_RIGHT || buttons & IN_MOVELEFT || buttons & IN_MOVERIGHT || buttons & IN_JUMP) && PlayerCanCloak[client])
{
SetEntityRenderFx(client, RENDERFX_NONE);
if(PlayerSkills[client][7] > 0)
PlayerSpeed[client] = 1.0 + (0.2 * PlayerSkills[client][7]);
else
PlayerSpeed[client] = 1.0;
SetSpeed(client, PlayerSpeed[client]);
if(weaponid != -1)
SetEntityRenderFx(weaponid, RENDERFX_NONE);
if(henade != -1)
{
SetEntityRenderFx(henade, RENDERFX_NONE);
SetAlpha(henade, 255);
}
if(sgnade != -1)
{
SetAlpha(sgnade, 255);
SetEntityRenderFx(sgnade, RENDERFX_NONE);
}
PlayerCanCloak[client] = false;
CreateTimer(1.0,CloakCharge, client,TIMER_FLAG_NO_MAPCHANGE);
//PrintToChat(client, "[SM] Rendering reset");
}
}
return Plugin_Continue;
}
__________________
|
|