SA-MP Forums Archive
How can I edit this damage system? - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: How can I edit this damage system? (/showthread.php?tid=642635)



How can I edit this damage system? - OGMurda - 03.10.2017

I have a script and I wish to edit the damage system because right now it is really OP you can take two shots from any gun and die which I do not like I want to change this so it is more realistic and fit table for SAMP her is the code:
Код:
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
{
    if(GetPVarInt(playerid, "PlayerLogged") == 0) return 1;
    if(GetPVarInt(issuerid, "LSPD_Ta") == 0) CallRemoteFunction("ShowBlood", "i", playerid);

    if(IsPlayerConnected(issuerid))
    {
        new Float:damage = 0, string[128], Float:amoun, Float:distance = 0.9, Float:radius, feet, Float:x, Float:y, Float:z, Float:health, Float:armour;
		GetPlayerPos(playerid,x,y,z), GetPlayerHealth(playerid,health), GetPlayerArmourEx(playerid,armour);
		//==========//
		// KO System
		if(weaponid <= 15 && GetPVarInt(playerid, "Dead") == 5)
		{
			SetPlayerHealth(playerid, 99);
			return 1;
		}
		
		if(weaponid >= 22 && weaponid <= 38 && GetPVarInt(playerid, "Dead") == 5)
		{
			ResetPlayerWeapons(playerid);
		    TogglePlayerControllableEx(playerid, false);
		    SetPVarInt(playerid, "Dead", 2);
		    SetPlayerPosEx(playerid,GetPVarFloat(playerid, "PosX"),GetPVarFloat(playerid, "PosY"),GetPVarFloat(playerid, "PosZ"));
			SetPlayerFacingAngle(playerid,GetPVarFloat(playerid, "Angle"));
			SetPlayerInterior(playerid,GetPVarInt(playerid, "Interior"));
			SetPlayerVirtualWorld(playerid,GetPVarInt(playerid, "World"));
			SetCameraBehindPlayer(playerid);
            SendClientMessage(playerid,COLOR_WHITE,"Type (/accept death) to continue.");
            SetPlayerHealthEx(playerid,1.0);
            GivePlayerWeaponEx(playerid, PlayerInfo[playerid][pPlayerWeapon], PlayerInfo[playerid][pPlayerAmmo]);
			if(GetPVarInt(playerid, "Admin") != 10) SetPVarInt(playerid, "DeathTime", GetCount()+60000);
		}

		if(GetPVarInt(playerid, "Dead") != 0) return 1;

        // Taser System
        if(weaponid == 23 && GetPVarInt(issuerid, "LSPD_Ta") == 1
		&& GetPVarInt(playerid, "Dead") == 0 && GetPVarInt(playerid, "Cuffed") == 0
		&& GetPlayerState(playerid) == PLAYER_STATE_ONFOOT  && !IsPlayerInRangeOfPoint(issuerid,0.9,x,y,z))
		{
		    if(GetPlayerWeapon(playerid) >= 22 && GetPlayerWeapon(playerid) <= 38) return SendClientMessage(issuerid,COLOR_ERROR,"You can't taze a player who has a weapon in his hand."),SetPlayerHealthEx(playerid,health);
		    if(!IsPlayerInRangeOfPoint(issuerid, 10.0, x, y, z)) return SendClientMessage(issuerid, COLOR_ERROR,"You are too far away from the player you're shooting at.");
		    if(GetPVarInt(issuerid, "LSPD_Delay") > GetCount()) return true;
			new sendername[MAX_PLAYER_NAME], giveplayer[MAX_PLAYER_NAME];
			format(sendername, sizeof(sendername), "%s", PlayerNameEx(playerid));
	        format(giveplayer, sizeof(giveplayer), "%s", PlayerNameEx(issuerid));
      	    GiveNameSpace(sendername);
            GiveNameSpace(giveplayer);
            format(string, sizeof(string), "*** %s aims %s taser at %s and fires it.", giveplayer, CheckSex(issuerid), sendername);
            ProxDetector(30.0, issuerid, string, COLOR_PURPLE);
   	        TogglePlayerControllableEx(playerid,false);
    	    SetPVarInt(playerid, "Cuffed", 1);
    	    SetPVarInt(playerid, "CuffedTime", 60);
    	    SetPVarInt(playerid, "Tazed", 1);
    	    ApplyAnimationEx(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);
            SetPlayerArmourEx(playerid,armour);
			if(health < 11.0) SetPlayerHealthEx(playerid, 10.0);
		    else SetPlayerHealthEx(playerid,health);
            PlaySoundPlyRadius(playerid, 6003, 10.0);
            scm(issuerid, -1, "You must wait a moment before shooting the taser again.");
            SetPVarInt(issuerid, "LSPD_Delay", GetCount()+1500);
		    return true;
        }

        if(weaponid >= 22 && weaponid <= 38)
	    {
		    SetPVarInt(issuerid, "HitMark", 1);
		    TextDrawHideForPlayer(issuerid, HitMark);
		    TextDrawShowForPlayer(issuerid, HitMark);
		}

		if(weaponid == 41)
		{
		    if(GetPVarInt(playerid, "Blinded") == 0 && GetPVarInt(playerid, "BlackScreen") == 0)
		    {
		        TextDrawShowForPlayer(playerid,BlindDraw);
		        SetTimerEx("EndBlackScreen", 2000, false, "i", playerid);
		        SetPVarInt(playerid, "BlackScreen", 1);
		        SetPlayerHealthEx(playerid, health);
		    }
		    return true;
		}

		if(PlayerInfo[issuerid][pAmmoType] == 113) // BEANBAG
		{
		    if(weaponid == 25 || weaponid == 26)
		    {
		        if(IsPlayerInRangeOfPoint(issuerid, 20.0, x, y, z))
		        {
		        	SetPlayerArmourEx(playerid,armour);
    	            if(health < 10.0) SetPlayerHealthEx(playerid,10.0);
		            else SetPlayerHealthEx(playerid,health);

		            if(PlayerInfo[playerid][pBeanbaggedTime] == 0)
		            {
			            if(PlayerInfo[playerid][pBeanbagged] == 0)
			            {
			            	PlayerInfo[playerid][pBeanbagged] = 1;
			            	PlayerInfo[playerid][pBeanbaggedTime] = 3;
			            }
			            else if(PlayerInfo[playerid][pBeanbagged] == 1)
			            {
			            	PlayerInfo[playerid][pBeanbagged] = 2;
			            	PlayerInfo[playerid][pBeanbaggedTime] = 10;
			            }
			            else if(PlayerInfo[playerid][pBeanbagged] == 2)
			            {
			            	PlayerInfo[playerid][pBeanbagged] = 3;
			            	PlayerInfo[playerid][pBeanbaggedTime] = 20;
			            }

			            ClearAnimations(playerid);

			            format(string, sizeof(string),"You shot %s with a bean bag.", PlayerNameEx(playerid));
				        SendClientMessage(issuerid,COLOR_WHITE,string);
				        format(string, sizeof(string),"%s shot you with a bean bag.", PlayerNameEx(issuerid));
				        SendClientMessage(playerid,COLOR_WHITE,string);

				        TogglePlayerControllableEx(playerid, false);
						ApplyAnimationEx(playerid, "ped", "FLOOR_hit", 4.0, 0, 1, 1, 1, -1);
		            }
			        return true;
		        }
		        else
		        {
		        	SetPlayerArmourEx(playerid,armour);
    	        	if(health < 10.0) SetPlayerHealthEx(playerid,10.0);
		        	else SetPlayerHealthEx(playerid,health);
    	            return true;
		        }
		    }
		}
		if(PlayerInfo[issuerid][pAmmoType] == 128) // RUBBER
		{
		    if(weaponid == 31)
		    {
		        if(IsPlayerInRangeOfPoint(issuerid, 30.0, x, y, z))
		        {
		        	SetPlayerArmourEx(playerid,armour);
    	            if(health < 10.0) SetPlayerHealthEx(playerid,10.0);
		            else SetPlayerHealthEx(playerid,health);

		           	if(PlayerInfo[playerid][pBeanbaggedTime] == 0)
		            {
			            if(PlayerInfo[playerid][pBeanbagged] == 0)
			            {
			            	PlayerInfo[playerid][pBeanbagged] = 1;
			            	PlayerInfo[playerid][pBeanbaggedTime] = 3;
			            }
			            else if(PlayerInfo[playerid][pBeanbagged] == 1)
			            {
			            	PlayerInfo[playerid][pBeanbagged] = 2;
			            	PlayerInfo[playerid][pBeanbaggedTime] = 10;
			            }
			            else if(PlayerInfo[playerid][pBeanbagged] == 2)
			            {
			            	PlayerInfo[playerid][pBeanbagged] = 3;
			            	PlayerInfo[playerid][pBeanbaggedTime] = 20;
			            }

			            ClearAnimations(playerid);

			            format(string, sizeof(string),"You shot %s with a rubber bullet.", PlayerNameEx(playerid));
				        SendClientMessage(issuerid,COLOR_WHITE,string);
				        format(string, sizeof(string),"%s shot you with a rubber bullet.", PlayerNameEx(issuerid));
				        SendClientMessage(playerid,COLOR_WHITE,string);

				        TogglePlayerControllableEx(playerid, false);
						ApplyAnimationEx(playerid, "ped", "FLOOR_hit", 4.0, 0, 1, 1, 1, -1);
		        	}
			        return true;
		        }
		        else
		        {
		        	SetPlayerArmourEx(playerid,armour);
    	        	if(health < 10.0) SetPlayerHealthEx(playerid,10.0);
		        	else SetPlayerHealthEx(playerid,health);
    	            return true;
		        }
		    }
		}
		if(bodypart == 9) // HEADSHOT !
		{
		    if(armour > 200)
		    {
				SetPlayerArmourEx(playerid, 100.0);
		    }
		    else if(armour > 100)
		    {
				SetPlayerArmourEx(playerid, 50.0);
		    }
		    else if(armour > 0)
		    {
		        if(armour > 50.0) SetPlayerHealthEx(playerid, 50.0);
				SetPlayerArmourEx(playerid, 0.0);
		    }
		    else
		    {
		        SetPlayerHealthEx(playerid, 0.0), SetPlayerArmourEx(playerid, 0.0);
		    }
		    return true;
		}
	    //==========//
		radius = GetPlayerDistanceFromPoint(issuerid, x, y, z);
		feet = floatround(radius);
		switch(weaponid)
		{
			case 2 .. 3: damage = 5 * 1.5;
			case 4: damage = 20 * 1.5;
			case 5 .. 8: damage = 15 * 1.5;
		    case 22: damage = DAMAGE_COLT * 1.5;
		    case 23: damage = DAMAGE_SILENCER * 1.5;
		    case 24: damage = DAMAGE_DEAGLE * 1.5;
		    case 25:
		    {
			    damage = DAMAGE_SHOTGUN * 1.5;
			    if(feet <= 5.0) damage+=50;
			}
		    case 26:
		    {
			    damage = DAMAGE_SAWNOFF * 1.5;
			    if(feet <= 5.0) damage+=50;
			}
		    case 28: damage = DAMAGE_UZI * 1.5;
		    case 29: damage = DAMAGE_MP5 * 1.5;
		    case 30: damage = DAMAGE_AK47;
		    case 31: damage = DAMAGE_M4;
		    case 32: damage = DAMAGE_TEC9 * 1.5;
		    case 33: damage = DAMAGE_RIFLE;
		    case 34: damage = DAMAGE_SNIPER;
		}

		if(weaponid < 15 && GetPVarInt(playerid,"DrugTime") > 0)
		{
			switch(GetPVarInt(playerid,"DrugHigh"))
			{
				case 501: // cocaine
				{
					damage += 5;
				}
				case 502: // crack
				{
					damage -= 5;
				}
			}
		}

		if(PlayerInfo[issuerid][pAmmoType] == 113) // BEANBAG
		{
			damage = 0;
		}
		else if(PlayerInfo[issuerid][pAmmoType] == 128) // RUBBER
		{
			damage = 0;
		}

		if(damage != 0)
		{
			if(WoundWeapon(weaponid) && PlayerInfo[issuerid][pArcade] == 0 && PlayerInfo[playerid][pArcade] == 0)
			{
			    if(!IsPlayerInRangeOfPoint(issuerid,distance,x,y,z))
			    {
					switch(bodypart)
					{
					    case 3,4: PlayerWound(playerid, 1, 1);
					    case 5,6: PlayerWound(playerid, 2, 1);
					    case 7,8: PlayerWound(playerid, 3, 1);
					}
		    	}
		    }
		    if(armour > 0)
		    {
		        amoun = armour - damage;
			    if(amoun < 0)
			    {
			    	SetPlayerHealthEx(playerid,health - damage);
			    }
			    
			    SetPlayerArmourEx(playerid,armour-damage);
		    }
		    else
		    {
		    	SetPlayerHealthEx(playerid,health-damage);
		    }

		    PlayerInfo[playerid][pInjuries][bodypart] += 1;
		}

		if(weaponid <= 15 && health <= 20.0 && GetPlayerState(playerid) == PLAYER_STATE_ONFOOT && GetPVarInt(playerid, "Dead") == 0)
		{
		    new rand = random(5);
		    switch(rand)
		    {
		        case 0: ApplyAnimationEx(playerid, "ped", "FLOOR_hit", 4.0, 0, 1, 1, 1, -1);
		        case 1: ApplyAnimationEx(playerid, "ped", "FLOOR_hit_f", 4.0, 0, 1, 1, 1, -1);
		        case 2: ApplyAnimationEx(playerid, "ped", "KO_shot_front", 4.0, 0, 1, 1, 1, -1);
		        case 3: ApplyAnimationEx(playerid, "ped", "KO_shot_stom", 4.0, 0, 1, 1, 1, -1);
		        case 4: ApplyAnimationEx(playerid, "ped", "BIKE_fall_off", 4.0, 0, 1, 1, 1, -1);
		        default: ApplyAnimationEx(playerid, "FINALE", "FIN_Land_Die", 4.0, 0, 1, 1, 1, -1);
		    }

		    SetPVarInt(playerid, "Dead", 5);
		    SetPVarInt(playerid, "CrackTime", GetCount() + 60000);

		    SendClientMessage(playerid, COLOR_ERROR, "You have been knocked out. (/getup)");

		    PlayerInfo[playerid][pInjuriesText] = CreateDynamic3DTextLabel("(( Has been injured (/injuries) for more information. ))", COLOR_ERROR, x, y, z, 25.0, playerid, INVALID_VEHICLE_ID, 1, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid), -1, 20.0);

		    SetPlayerHealth(playerid, 99);
		    return 1;
		}
    }
	return true;
}