All pastes #1548453 Raw Edit

Stuff

public text v1 · immutable
#1548453 ·published 2009-08-30 18:43 UTC
rendered paste body
#include <a_samp>

//SEATBELT! by [K4L]Jacob
//This script is released under the GNU/GPL licensing standards.
//Credit to Seif for creating the original collision code.

#define COLOR_CORAL 0xFF7F50AA
#define COLOR_GREEN 0x33AA33AA


new Seatbelt[MAX_PLAYERS];
new TimerStack;
new Float:VehicleHealthStack[700][3];
new tmp[128];
forward IsABike(vehicleid);
forward VehicleDamageToPlayerHealth(playerid, vehicleid);
forward VehicleDamageToPlayerHealth2(playerid, vehicleid);
forward DisablePlayerKnockout(playerid);
forward IsACopSkin(playerid);
forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);


public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
	new Float:oldposx, Float:oldposy, Float:oldposz;
	new Float:tempposx, Float:tempposy, Float:tempposz;
	GetPlayerPos(playerid, oldposx, oldposy, oldposz);
	tempposx = (oldposx -x);
	tempposy = (oldposy -y);
	tempposz = (oldposz -z);
	if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
	{
		return 1;
	}
	return 0;
}

ReturnUser(string[])
{
    new IsNumerical=1;
    new tmpstring[MAX_PLAYER_NAME];
    for(new cell; cell < strlen(string); cell++) if((string[cell]<='0') || (string[cell]>='9'))IsNumerical=0;
    if(IsNumerical)return strval(string);
    else
    {
        for(new players; players < MAX_PLAYERS; players++)
        {
            GetPlayerName(players,tmpstring,sizeof(tmpstring));
            if(strfind(tmpstring,string,true)>-1)return players;
        }
    }
    return INVALID_PLAYER_ID;
}

strtok(const string[], &index)
{
	new length = strlen(string);
	while ((index < length) && (string[index] <= ' '))
	{
		index++;
	}

	new offset = index;
	new result[20];
	while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
	{
		result[index - offset] = string[index];
		index++;
	}
	result[index - offset] = EOS;
	return result;
}

public OnFilterScriptInit()
{
	return 1;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
	if(ispassenger == 0)
	{
 		SetTimerEx("VehicleDamageToPlayerHealth",200,1,"ii",playerid, vehicleid);
		return 1;
	}
	else
	{
 		SetTimerEx("VehicleDamageToPlayerHealth2",200,1,"ii",playerid, vehicleid);
 		return 1;
	}
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
	Seatbelt[playerid] = 0;
	return 1;
}

public VehicleDamageToPlayerHealth2(playerid, vehicleid)
{
   	if (IsPlayerInVehicle(playerid,vehicleid))
	{
		if(Seatbelt[playerid] == 1)
		{
  			GetVehicleHealth(vehicleid, VehicleHealthStack[vehicleid][0]);
   			if (floatcmp(VehicleHealthStack[vehicleid][0], VehicleHealthStack[vehicleid][1]) == -1)
    		{
    	       	GetPlayerHealth(playerid, VehicleHealthStack[vehicleid][2]);
    	       	SetPlayerHealth(playerid, floatsub(VehicleHealthStack[vehicleid][2], 3));
    	       	if(GetPlayerHealth(playerid) >= 1)
				{
        			SendClientMessage(playerid,COLOR_CORAL,"Du wurdest von der Kollision durchgeschttelt.");
				    SendClientMessage(playerid,COLOR_CORAL,"Zum Glck hast du dich angeschnallt..");
				}
				else
				{
       				SendClientMessage(playerid,COLOR_CORAL,"Da deine Kondition zu schlecht ist, bist du durch die Wucht des Aufpralls bewusstlos geworden .");
					GameTextForPlayer(playerid,"~r~Out ~w~cold",4000,1);
				}
    		}
    	   	VehicleHealthStack[vehicleid][1] = VehicleHealthStack[vehicleid][0];
    	   	return 1;
   		}
		else
		{
			GetVehicleHealth(vehicleid, VehicleHealthStack[vehicleid][0]);
   			if (floatcmp(VehicleHealthStack[vehicleid][0], VehicleHealthStack[vehicleid][1]) == -1)
    		{
    	       	GetPlayerHealth(playerid, VehicleHealthStack[vehicleid][2]);
    	       	SetPlayerHealth(playerid, floatsub(VehicleHealthStack[vehicleid][2], 12));
    	       	if(GetPlayerHealth(playerid) >= 1)
				{
        			SendClientMessage(playerid,COLOR_CORAL,"Du wurdest von der Kollision durchgeschttelt.");
				    SendClientMessage(playerid,COLOR_CORAL,"Pass auf! Da du nicht angeschnallt bist verlierst du bei einem Crash mehr Leben! ");
				}
				else
				{
        			SendClientMessage(playerid,COLOR_CORAL,"Da deine Kondition zu schlecht ist, bist du durch die Wucht des Aufpralls bewusstlos geworden .");
					GameTextForPlayer(playerid,"~r~Out ~w~cold",4000,1);
				}
    		}
    	   	VehicleHealthStack[vehicleid][1] = VehicleHealthStack[vehicleid][0];
    	   	return 1;
		}
	}
	return 1;
}

public VehicleDamageToPlayerHealth(playerid, vehicleid)
{
   	if (IsPlayerInVehicle(playerid,vehicleid))
	{
		if(Seatbelt[playerid] == 1)
		{
  			GetVehicleHealth(vehicleid, VehicleHealthStack[vehicleid][0]);
   			if (floatcmp(VehicleHealthStack[vehicleid][0], VehicleHealthStack[vehicleid][1]) == -1)
    		{
    	       	GetPlayerHealth(playerid, VehicleHealthStack[vehicleid][2]);
    	       	SetPlayerHealth(playerid, floatsub(VehicleHealthStack[vehicleid][2], 3));
    	       	if(GetPlayerHealth(playerid) >= 1)
				{
     			    SendClientMessage(playerid,COLOR_CORAL,"Du wurdest von der Kollision durchgeschttelt.");
				}
				else
				{
        			SendClientMessage(playerid,COLOR_CORAL,"Da deine Kondition zu schlecht ist, bist du durch die Wucht des Aufpralls bewusstlos geworden .");
					GameTextForPlayer(playerid,"~r~Out ~w~cold",4000,1);
				}
    		}
    	   	VehicleHealthStack[vehicleid][1] = VehicleHealthStack[vehicleid][0];
    	   	return 1;
   		}
		else
		{
			GetVehicleHealth(vehicleid, VehicleHealthStack[vehicleid][0]);
   			if (floatcmp(VehicleHealthStack[vehicleid][0], VehicleHealthStack[vehicleid][1]) == -1)
    		{
    	       	GetPlayerHealth(playerid, VehicleHealthStack[vehicleid][2]);
    	       	SetPlayerHealth(playerid, floatsub(VehicleHealthStack[vehicleid][2], 12));
    	       	if(GetPlayerHealth(playerid) >= 1)
				{
					SendClientMessage(playerid,COLOR_CORAL,"Du wurdest von der Kollision durchgeschttelt.");
 					SendClientMessage(playerid,COLOR_CORAL,"Pass auf! Du hast durch den Unfall einen Schock und kannst erst in wenigen Sekunden weiterfahren!");
					TogglePlayerControllable(playerid, 0);
					TimerStack = SetTimerEx("DisablePlayerKnockout",3500,1,"i",playerid);
				}
				else
				{
        			SendClientMessage(playerid,COLOR_CORAL,"Da deine Kondition zu schlecht ist, bist du durch die Wucht des Aufpralls bewusstlos geworden .");
					GameTextForPlayer(playerid,"~r~Out ~w~cold",4000,1);
				}
    		}
    	   	VehicleHealthStack[vehicleid][1] = VehicleHealthStack[vehicleid][0];
    	   	return 1;
		}
	}
	return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
	new string[128];
	new vehicleid = GetPlayerVehicleID(playerid);
	new giveplayerid;
	if (strcmp("/gurt", cmdtext, true, 9) == 0 || strcmp("/helm", cmdtext, true, 7) == 0)
	{
		if(IsPlayerInAnyVehicle(playerid) && Seatbelt[playerid] == 0)
		{
		    if(IsABike(vehicleid))
		    {
		        Seatbelt[playerid] = 1;
		        SendClientMessage(playerid, COLOR_GREEN, "Du hast dir einen Helm aufgesetzt, bei einem Crash kann der Helm dir das Leben retten!");
		        return 1;
			}
				else
				{
				    Seatbelt[playerid] = 1;
				    SendClientMessage(playerid, COLOR_GREEN, "Gut das du dich angeschnallt hast.. Bei einem Unfall kann der Gurt dir das Leben retten!");
					return 1;
				}
		}
		if(IsPlayerInAnyVehicle(playerid) && Seatbelt[playerid] == 1)
		{
		    if(IsABike(vehicleid))
		    {
		        Seatbelt[playerid] = 0;
		        SendClientMessage(playerid, COLOR_GREEN, "Du nimmst den Helm ab und bist somit nicht mehr sicher wenn du einen Unfall baust.");
				return 1;
			}
			else
			{
			    Seatbelt[playerid] = 0;
			    SendClientMessage(playerid, COLOR_GREEN, "Du schnallst dich ab und bist somit nicht mehr sicher wenn du einen Unfall baust.");
				return 1;
			}
		}
		else
		{
		    SendClientMessage(playerid, COLOR_CORAL, "Wie willst du dich angurten wenn du in keinem Auto sitzt?");
		    return 1;
		}
	}

	if(strcmp(cmdtext, "/checkseatbelt", true) == 0 || strcmp(cmdtext, "/csb", true) == 0)
	{
	    new idx;
		tmp = strtok(cmdtext, idx);
	   	if(!strlen(tmp))
		{
			SendClientMessage(playerid, COLOR_CORAL, "BEFEHL: /checkseatbelt [playerid]");
			return 1;
		}
		giveplayerid = ReturnUser(tmp);
		if(IsACopSkin(playerid))
		{
			if(IsPlayerConnected(giveplayerid))
			{
		    	if(giveplayerid != INVALID_PLAYER_ID)
				{
					new Float:x, Float:y, Float:z;
					new PlayerName[24];
					GetPlayerPos(giveplayerid, x, y, z);
					GetPlayerName(giveplayerid, PlayerName, 24);
					if(PlayerToPoint(6.0, playerid, x, y, z) && Seatbelt[giveplayerid] == 1)
					{
						format(string, sizeof(string), "%s ist angeschnallt.", PlayerName);
					    SendClientMessage(playerid, COLOR_GREEN, string);
					    return 1;
					}
					else if(PlayerToPoint(6.0, playerid, x, y, z) && Seatbelt[giveplayerid] == 0)
					{
						format(string, sizeof(string), "%s hat sich nicht angeschnallt.", PlayerName);
						SendClientMessage(playerid, COLOR_GREEN, string);
						return 1;
					}
					else
					{
					    SendClientMessage(playerid, COLOR_CORAL, "Du bist nicht nah genug am Spieler!");
						return 1;
					}
				}
				else
				{
	   				SendClientMessage(playerid, COLOR_CORAL, "ID existiert nicht.");
	  				return 1;
			}
			}
			else
			{
   				SendClientMessage(playerid, COLOR_CORAL, "Du bist kein Cop ;)");
		 	  	return 1;
		}
		}
	}
	return 0;
}


public DisablePlayerKnockout(playerid)
{
	TogglePlayerControllable(playerid, 1);
	SendClientMessage(playerid, COLOR_GREEN, "Du hast dich vom Schock erholt... du kannst nun weiterfahren - aber bitte fahre Vorsichtig!");
	KillTimer(TimerStack);
	return 1;
}
	
public IsABike(vehicleid)
{   new model = GetVehicleModel(vehicleid);
	if(model == 581 || model == 509 || model == 481 || model == 462 || model == 521 || model == 463 || model == 510 || model == 522 || model == 461 || model == 448 || model == 471 || model == 468 || model == 586)
	{
		return 1;
	}
	return 0;
}

public IsACopSkin(playerid)
{
	if(GetPlayerSkin(playerid) == 280 || GetPlayerSkin(playerid) == 281 || GetPlayerSkin(playerid) == 282 || GetPlayerSkin(playerid) == 283 || GetPlayerSkin(playerid) == 288 || GetPlayerSkin(playerid) == 284 || GetPlayerSkin(playerid) == 285 || GetPlayerSkin(playerid) == 286 || GetPlayerSkin(playerid) == 287)
	{
		return 1;
	}
	return 0;
}