Raised This Month: $32 Target: $400
 8% 

[CS:S] One Man Army issues


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
InstantDeath
Senior Member
Join Date: Mar 2007
Old 06-19-2017 , 23:55   [CS:S] One Man Army issues
Reply With Quote #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(clientStringgrenade[])
{
    new 
MyWeapons FindSendPropInfo("CBasePlayer""m_hMyWeapons");
    if(
MyWeapons == -1)
        return -
1;
    
    
decl String:weapon[64];
    for(new 
0ent188+= 4)
    {
        
ent GetEntDataEnt2(clientMyWeapons i);
        
        if(
IsValidEntity(ent))
        {
            if(
IsValidEdict(ent))
            {
                
GetEdictClassname(entweaponsizeof(weapon));
                if(
StrEqual(weapongrenadefalse))
                    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, &impulseFloat:vel[3], Float:angles[3], &weapon)
{
    new 
boolomaenable 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(client2);
        new 
henadesgnade;
        
        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(clientRENDERFX_NONE);
                
PlayerSpeed[client] = 1.0;
                
SetSpeed(clientPlayerSpeed[client]);
                if(
weaponid != -1)
                    
SetEntityRenderFx(weaponidRENDERFX_NONE);
                if(
henade != -1)
                {
                    
SetEntityRenderFx(henadeRENDERFX_NONE);
                    
SetAlpha(henade255);
                }
                if(
sgnade != -1)
                {
                    
SetAlpha(sgnade255);
                    
SetEntityRenderFx(sgnadeRENDERFX_NONE);
                }
                
                
PlayerCanCloak[client] = false;
                
CreateTimer(1.0,CloakChargeclient,TIMER_FLAG_NO_MAPCHANGE);
                
//PrintToChat(client, "[SM] Player Attacked. Rendering reset");
            
}
            
            if(
PlayerSkills[client][2] >= 1)
            {
                new 
count GetClientGrenades(clientSlot_HEgrenade);
                if(!
NadeRegenActive[client] && count PlayerSkills[client][2])
                    
CreateTimer(FloatDiv(15.0float(PlayerSkills[client][2])),HEnadeRegenclient,TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
            }
            
            else if(
PlayerSkills[client][3] >= 1)
            {
                new 
count GetClientGrenades(clientSlot_Smokegrenade);
                if(!
SNadeRegenActive[client] && count PlayerSkills[client][3])
                    
CreateTimer(FloatDiv(15.0float(PlayerSkills[client][3])),SmokenadeRegenclient,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] > && PlayerCanCloak[client])
                    {    
                        
PlayerSpeed[client] = 1.0;
                        
SetSpeed(clientPlayerSpeed[client]);
                        
vec[0]= GetEntDataFloat(clientVelocityOffset_x) * ((PlayerSkills[client][8] * 0.5) + 1.0) / 2.0;
                        
vec[1]= GetEntDataFloat(clientVelocityOffset_y) * ((PlayerSkills[client][8] * 0.5) + 1.0) / 2.0;
                        
vec[2]= 1.0 50.0;
                        
SetEntDataVector(clientBaseVelocityOffsetvectrue);
                        
                        
PlayerCanCloak[client] = false;
                        
LongJump[client] = false;
                        
SetEntityRenderFx(clientRENDERFX_NONE);
                        
SetSpeed(clientPlayerSpeed[client]);
                        if(
weaponid != -1)
                            
SetEntityRenderFx(weaponidRENDERFX_NONE);
                        if(
henade != -1)
                        {
                            
SetAlpha(henade255);
                            
SetEntityRenderFx(henadeRENDERFX_NONE);
                        }
                        if(
sgnade != -1)
                        {
                            
SetAlpha(sgnade255);
                            
SetEntityRenderFx(sgnadeRENDERFX_NONE);
                        }
                        
                        
//PrintToChat(client, "[SM] Player Has used long jump.");
                        
CreateTimer(1.5,JumpChargeclient,TIMER_FLAG_NO_MAPCHANGE);
                        
CreateTimer(1.0,CloakChargeclient,TIMER_FLAG_NO_MAPCHANGE);
                    }
                }
                else if(
buttons IN_ATTACK || buttons IN_ATTACK2 || buttons IN_JUMP)
                {
                    
SetEntityRenderFx(clientRENDERFX_NONE);
                    
PlayerSpeed[client] = 1.0;
                    
SetSpeed(clientPlayerSpeed[client]);
                    if(
weaponid != -1)
                        
SetEntityRenderFx(weaponidRENDERFX_NONE);
                    if(
henade != -1)
                    {
                        
SetAlpha(henade255);
                        
SetEntityRenderFx(henadeRENDERFX_NONE);
                    }
                    if(
sgnade != -1)
                    {
                        
SetAlpha(sgnade255);
                        
SetEntityRenderFx(sgnadeRENDERFX_NONE);
                    }
                    
                    
PlayerCanCloak[client] = false;
                    
CreateTimer(1.0,CloakChargeclient,TIMER_FLAG_NO_MAPCHANGE);
                    
                    
//PrintToChat(client, "[SM] Player Attacked or Jumped. Rendering reset");
                
}
                else
                {
                    
SetEntityRenderFx(clientRENDERFX_FADE_FAST);
                    if(
weaponid != -1)
                        
SetEntityRenderFx(weaponidRENDERFX_FADE_FAST);
                    if(
henade != -1)
                    {
                        
SetEntityRenderFx(henadeRENDERFX_FADE_FAST);
                        
SetAlpha(henade0);
                    }
                    if(
sgnade != -1)
                    {
                        
SetEntityRenderFx(sgnadeRENDERFX_FADE_FAST);
                        
SetAlpha(sgnade0);
                    }
                    
                    
//PrintToChat(client, "[SM] Rendering fade fast");
                    
if(PlayerSkills[client][6] > 0)
                    {
                        
PlayerSpeed[client] = 1.0 + (0.4 PlayerSkills[client][6]);
                        
SetSpeed(clientPlayerSpeed[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(clientRENDERFX_NONE);
                    
PlayerSpeed[client] = 1.0;
                    
SetSpeed(clientPlayerSpeed[client]);
                    if(
weaponid != -1)
                        
SetEntityRenderFx(weaponidRENDERFX_NONE);
                    if(
henade != -1)
                    {
                        
SetAlpha(henade255);
                        
SetEntityRenderFx(henadeRENDERFX_NONE);
                    }
                    if(
sgnade != -1)
                    {
                        
SetAlpha(sgnade255);
                        
SetEntityRenderFx(sgnadeRENDERFX_NONE);
                    }
                    
                    
PlayerCanCloak[client] = false;
                    
CreateTimer(1.0,CloakChargeclient,TIMER_FLAG_NO_MAPCHANGE);
                    
                    
//PrintToChat(client, "[SM] Player Attacked or Jumped. Rendering reset");
                
}
                else
                {
                    
SetEntityRenderFx(clientRENDERFX_FADE_SLOW);
                    if(
weaponid != -1)
                        
SetEntityRenderFx(weaponidRENDERFX_FADE_SLOW);
                    if(
henade != -1)
                    {
                        
SetAlpha(henade0);
                        
SetEntityRenderFx(henadeRENDERFX_FADE_SLOW);
                    }
                    if(
sgnade != -1)
                    {
                        
SetAlpha(sgnade0);
                        
SetEntityRenderFx(sgnadeRENDERFX_FADE_SLOW);
                    }
                    
                    
//PrintToChat(client, "[SM] Rendering fade slow");
                    
if(PlayerSkills[client][6] > 0)
                    {
                        
PlayerSpeed[client] = 1.0 + (0.6 PlayerSkills[client][6]);
                        
SetSpeed(clientPlayerSpeed[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(clientRENDERFX_NONE);
            if(
PlayerSkills[client][7] > 0)
                
PlayerSpeed[client] = 1.0 + (0.2 PlayerSkills[client][7]);
            else
            
PlayerSpeed[client] = 1.0;
            
SetSpeed(clientPlayerSpeed[client]);
            if(
weaponid != -1)
                
SetEntityRenderFx(weaponidRENDERFX_NONE);
            if(
henade != -1)
            {
                
SetEntityRenderFx(henadeRENDERFX_NONE);
                
SetAlpha(henade255);
            }
            if(
sgnade != -1)
            {
                
SetAlpha(sgnade255);
                
SetEntityRenderFx(sgnadeRENDERFX_NONE);
            }
            
            
PlayerCanCloak[client] = false;
            
CreateTimer(1.0,CloakChargeclient,TIMER_FLAG_NO_MAPCHANGE);
            
            
//PrintToChat(client, "[SM] Rendering reset");
        
}                    
    }
    return 
Plugin_Continue;

__________________
InstantDeath is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 13:03.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode