#include //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; }