Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Befehle:
- /berstellen [id][radius][geschwindigkeit]
- Mit diesem Befehl kannst du einen Blitzer erstellen.
- /bloeschen
- Sobald du in der nähe eines Blitzers bist, wird er automatisch gelöescht.
- /addbcreator [playerid]
- Mit diesem Befehl kannst du einem Spieler die Befugnis geben einen Blitzer zu erstellen.
- /removebcreator [playerid]
- Mit diesem Befehl kannst du einem Spieler die Befugnis nehmen einen Blitzer zu erstellen.
- /addnoblitz [playerid]
- Mit diesem Befehl kannst du einen Spieler aus dem Blitzprogramm ausschließen, d.h. er kann nicht mehr geblitzt werden.
- /removenoblitz [playerid]
- Mit diesem Befehl kannst du einen Spieler wieder in das Blitzprogramm hinzufügen, d.h. er kann wieder geblitzt werden.
- Features:
- -Blitzer schnell und einfach ingame erstellen
- -Blitzerberechtigung geben
- -NoBlitz Funktion, per Befehl kann eingestellt werden ob man geblitzt werden kann oder nicht. Prakitsch für aduty.
- Gescriptet für Midnight Roleplay.
- Erstellt von Dominik. .
- Mehrmals getestet,
- ein kleiner Fehler:
- Der Timer überprüft alle 1,5 Sekunden ob man in der nähe eines Blitzers ist.
- Bei hohem Blitzradius wird man evtl. 2x geblitzt.
- Info:
- Die Strafrechnung geht folgendermaßen:
- Gefahrene Geschwindigkeit * 10 - Erlaubte Geschwindigkeit
- Ist man also 60 gefahren, aber durfte nur 50 fahren wird es so gerechnet:
- 60 * 10 - 50
- _
- = 600 - 50
- _
- = 550
- Die Strafen sind an die heutigen "Reallife Server" angepasst, bei denen man sich eh pro Stunde 100.000$ farmt.
- */
- #define FILTERSCRIPT
- #include <a_samp>
- #include <SII>
- #include <zcmd>
- #define MAX_BLITZER 10 //Wie viele Blitzer sollen maximal stehen dürfen?
- #define MIN_RADIUS 10 //Was muss mindestens als Radius angegeben werden?
- #define MAX_RADIUS 50 //Was ist der maximale Radius?
- #define MIN_SPEED 10 //Was ist die mindestgeschwindigkeit?
- #define MAX_SPEED 100 //...Was die maximale?
- #define Verzeichnis "Accounts" //In welchem verzeichnis sind die Spielerdateien?
- forward BlitzCheck(playerid);
- #define cGrün 0x23FF00FF
- #define cRot 0xE10000FF
- #define cOrange 0xFF8200FF
- #define cBlau 0x0A00FFFF
- enum BlitzerInfo
- {
- Float:bX,
- Float:bY,
- Float:bZ,
- bRadius,
- bGeschwindigkeit,
- Text3D:bLabel,
- bObjekt
- };
- new Blitzer[MAX_BLITZER][BlitzerInfo];
- public OnFilterScriptInit()
- {
- for(new b = 1; b < MAX_BLITZER; b++)
- {
- bLoad(b);
- }
- print("\n--------------------------------------");
- print(" dBlitzer loaded ...");
- print(" (c)Midnight Roleplay");
- print(" Script by Dominik. .");
- print("--------------------------------------\n");
- return 1;
- }
- public BlitzCheck(playerid)
- {
- new bool:WurdeGeblitzt[MAX_PLAYERS] = false;
- new speed = GetPlayerSpeed(playerid,true);
- new strafe;
- new sName[24];
- GetPlayerName(playerid,sName,24);
- if(IsPlayerInAnyVehicle(playerid))
- {
- for(new b = 1; b < MAX_BLITZER; b++)
- {
- if(IsPlayerInRangeOfPoint(playerid,Blitzer[bRadius],Blitzer[b][bX],Blitzer[b][bY],Blitzer[b][bZ]))
- {
- if(speed > Blitzer[b][bGeschwindigkeit])
- {
- new sFile[64];
- format(sFile,64,"%s/%s.ini",Verzeichnis,sName);
- INI_Open(sFile);
- if(INI_ReadInt("bNoBlitz") != 1)
- {
- WurdeGeblitzt[playerid] = true;
- strafe = speed * 10 - Blitzer[b][bGeschwindigkeit];
- }
- else return SendClientMessage(playerid,cOrange,"Du wurdest geblitzt! musstest aber keine Strafe bezahlen da die einen bNoBlitz Rang hast!");
- }
- }
- }
- }
- if(WurdeGeblitzt[playerid] == true)
- {
- GivePlayerMoney(playerid,-strafe);
- new string[128];
- format(string,128,"|| %s wurde mit %d km/h geblitzt! Er musste $%d Strafe bezahlen!",sName,speed,strafe);
- SendClientMessageToAll(cBlau,string);
- return 1;
- }
- return 1;
- }
- CMD:bloeschen(playerid)
- {
- new sFile[64];
- new sName[24];
- GetPlayerName(playerid,sName,24);
- format(sFile,64,"%s/%s.ini",Verzeichnis,sName);
- INI_Open(sFile);
- if(INI_ReadInt("bErsteller") == 1)
- {
- for(new b = 1; b < MAX_BLITZER; b++)
- {
- if(IsPlayerInRangeOfPoint(playerid,5.0,Blitzer[b][bX],Blitzer[b][bY],Blitzer[b][bZ]))
- {
- new bFile[64];
- format(bFile,64,"Blitzer/%d.ini",b);
- INI_Remove(bFile);
- DestroyObject(Blitzer[b][bObjekt]);
- Delete3DTextLabel(Blitzer[b][bLabel]);
- Blitzer[b][bObjekt] = 0;
- Blitzer[b][bX] = 0;
- Blitzer[b][bY] = 0;
- Blitzer[b][bZ] = 0;
- Blitzer[b][bRadius] = 0;
- Blitzer[b][bGeschwindigkeit] = 0;
- SendClientMessage(playerid,cGrün,"Blitzer erfolgreich geloescht!");
- return 1;
- }
- else return SendClientMessage(playerid,cRot,"Du bist nicht nahe Genug an einem Blitzer!");
- }
- return 1;
- }
- else return SendClientMessage(playerid,cRot,"Du bist nicht berechtigt einen Blitzer zu löschen!");
- }
- CMD:berstellen(playerid,params[])
- {
- new sFile[64];
- new sName[24];
- GetPlayerName(playerid,sName,24);
- format(sFile,64,"%s/%s.ini",Verzeichnis,sName);
- INI_Open(sFile);
- if(INI_ReadInt("bErsteller") == 1)
- {
- INI_Close();
- new radius, geschwindigkeit, blitzerid;
- if(sscanf(params,"ddd",blitzerid,radius,geschwindigkeit)) return SendClientMessage(playerid,cRot,"Verwendung: /berstellen [blitzerid][radius][geschwindigkeit]");
- if(blitzerid >= 1 && blitzerid <= MAX_BLITZER)
- {
- if(radius <= MAX_RADIUS && radius >= MIN_RADIUS)
- {
- if(geschwindigkeit <= MAX_SPEED && geschwindigkeit >= MIN_RADIUS)
- {
- new Float:X,Float:Y,Float:Z;
- GetPlayerPos(playerid,X,Y,Z);
- bCreate(blitzerid,X,Y,Z,geschwindigkeit,radius);
- return 1;
- }
- else
- {
- new string[64];
- format(string,64,"Die Geschwindigkeit muss zwischen %d und %d liegen!",MIN_SPEED,MAX_SPEED);
- return SendClientMessage(playerid,cRot,string);
- }
- }
- else
- {
- new string[64];
- format(string,64,"Der Radius muss zwischen %d und %d liegen!",MIN_RADIUS,MAX_RADIUS);
- return SendClientMessage(playerid,cRot,string);
- }
- }
- else
- {
- new string[64];
- format(string,64,"Die BlitzerID muss zwischen 1 und %d liegen!",MAX_BLITZER);
- return SendClientMessage(playerid,cRot,string);
- }
- }
- else return SendClientMessage(playerid,cRot,"Du bist nicht berechtigt einen Blitzer zu erstellen!");
- }
- CMD:addbcreator(playerid,params[])
- {
- if(IsPlayerAdmin(playerid))
- {
- new addplayerid;
- if(sscanf(params,"d",addplayerid)) return SendClientMessage(playerid,cRot,"Verwendung: /addbcreator [addplayerid]");
- if(IsPlayerConnected(addplayerid) && addplayerid != INVALID_PLAYER_ID)
- {
- new sFile[64];
- new aName[24];
- new sName[24];
- GetPlayerName(playerid,sName,24);
- GetPlayerName(addplayerid,aName,24);
- format(sFile,64,"%s/%s.ini",Verzeichnis,aName);
- INI_Open(sFile);
- INI_WriteInt("bErsteller",1);
- INI_Save();
- INI_Close();
- new string[64];
- new string2[64];
- format(string,64,"Du hast %s erfolgreich den bErsteller Rang gegeben!",aName);
- format(string2,63,"%s hat dir den den bErsteller Rang gegeben!",sName);
- SendClientMessage(playerid,cGrün,string);
- SendClientMessage(addplayerid,cOrange,string2);
- return 1;
- }
- else return SendClientMessage(playerid,cRot,"Ungültige SpielerID!");
- }
- else return SendClientMessage(playerid,cRot,"Du bist kein RCON-Administrator!");
- }
- CMD:removebcreator(playerid,params[])
- {
- if(IsPlayerAdmin(playerid))
- {
- new addplayerid;
- if(sscanf(params,"d",addplayerid)) return SendClientMessage(playerid,cRot,"Verwendung: /removebcreator [addplayerid]");
- if(IsPlayerConnected(addplayerid) && addplayerid != INVALID_PLAYER_ID)
- {
- new sFile[64];
- new aName[24];
- new sName[24];
- GetPlayerName(playerid,sName,24);
- GetPlayerName(addplayerid,aName,24);
- format(sFile,64,"%s/%s.ini",Verzeichnis,aName);
- INI_Open(sFile);
- INI_WriteInt("bErsteller",0);
- INI_Save();
- INI_Close();
- new string[64];
- new string2[64];
- format(string,64,"Du hast %s erfolgreich den bErsteller Rang entzogen!",aName);
- format(string2,63,"%s hat dir den den bErsteller Rang entzogen!",sName);
- SendClientMessage(playerid,cGrün,string);
- SendClientMessage(addplayerid,cOrange,string2);
- return 1;
- }
- else return SendClientMessage(playerid,cRot,"Ungültige SpielerID!");
- }
- else return SendClientMessage(playerid,cRot,"Du bist kein RCON-Administrator!");
- }
- CMD:removeblitz(playerid,params[])
- {
- if(IsPlayerAdmin(playerid))
- {
- new addplayerid;
- if(sscanf(params,"d",addplayerid)) return SendClientMessage(playerid,cRot,"Verwendung: /removebcreator [addplayerid]");
- if(IsPlayerConnected(addplayerid) && addplayerid != INVALID_PLAYER_ID)
- {
- new sFile[64];
- new aName[24];
- new sName[24];
- GetPlayerName(playerid,sName,24);
- GetPlayerName(addplayerid,aName,24);
- format(sFile,64,"%s/%s.ini",Verzeichnis,aName);
- INI_Open(sFile);
- INI_WriteInt("bNoBlitz",0);
- INI_Save();
- INI_Close();
- new string[64];
- new string2[64];
- format(string,64,"Du hast %s erfolgreich den bNoBlitz Rang entzogen!",aName);
- format(string2,63,"%s hat dir den den bNoBlitz Rang entzogen!",sName);
- SendClientMessage(playerid,cGrün,string);
- SendClientMessage(addplayerid,cOrange,string2);
- return 1;
- }
- else return SendClientMessage(playerid,cRot,"Ungültige SpielerID!");
- }
- else return SendClientMessage(playerid,cRot,"Du bist kein RCON-Administrator!");
- }
- CMD:addnoblitz(playerid,params[])
- {
- if(IsPlayerAdmin(playerid))
- {
- new addplayerid;
- if(sscanf(params,"d",addplayerid)) return SendClientMessage(playerid,cRot,"Verwendung: /addnoblitz [addplayerid]");
- if(IsPlayerConnected(addplayerid) && addplayerid != INVALID_PLAYER_ID)
- {
- new sFile[64];
- new aName[24];
- new sName[24];
- GetPlayerName(playerid,sName,24);
- GetPlayerName(addplayerid,aName,24);
- format(sFile,64,"%s/%s.ini",Verzeichnis,aName);
- INI_Open(sFile);
- INI_WriteInt("bNoBlitz",1);
- INI_Save();
- INI_Close();
- new string[64];
- new string2[64];
- format(string,64,"Du hast %s erfolgreich den bNoBlitz Rang gegeben!",aName);
- format(string2,63,"%s hat dir den den bNoBlitz Rang gegeben!",sName);
- SendClientMessage(playerid,cGrün,string);
- SendClientMessage(addplayerid,cOrange,string2);
- return 1;
- }
- else return SendClientMessage(playerid,cRot,"Ungültige SpielerID!");
- }
- else return SendClientMessage(playerid,cRot,"Du bist kein RCON-Administrator!");
- }
- public OnFilterScriptExit()
- {
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- SetTimerEx("BlitzCheck",1500,true,"i",playerid);
- return 1;
- }
- stock bCreate(blitzerid,Float:X,Float:Y,Float:Z,geschwindigkeit,radius)
- {
- new bFile[64];
- format(bFile,64,"Blitzer/%d.ini",blitzerid);
- INI_Open(bFile);
- INI_WriteFloat("X",X);
- INI_WriteFloat("Y",Y);
- INI_WriteFloat("Z",Z);
- INI_WriteInt("Geschwindigkeit",geschwindigkeit);
- INI_WriteInt("Radius",radius);
- INI_Save();
- INI_Close();
- new text3dtext[128];
- format(text3dtext,128,"||==========||Blitzer||==========||\nGeschwindigkeit: %d\nRadius: %d\n||==========||Blitzer||==========||",geschwindigkeit,radius);
- Blitzer[blitzerid][bX] = X;
- Blitzer[blitzerid][bY] = Y;
- Blitzer[blitzerid][bZ] = Z;
- Blitzer[blitzerid][bGeschwindigkeit] = geschwindigkeit;
- Blitzer[blitzerid][bRadius] = radius;
- Blitzer[blitzerid][bLabel] = Create3DTextLabel(text3dtext,cBlau,X+1,Y+1,Z+1,radius / 2,0);
- Blitzer[blitzerid][bObjekt] = CreateObject(18880,X+1,Y+1,Z-1,0.0,0.0,0.0);
- return 1;
- }
- stock bLoad(blitzerid)
- {
- new bFile[64];
- format(bFile,64,"Blitzer/%d.ini",blitzerid);
- INI_Open(bFile);
- Blitzer[blitzerid][bX] = INI_ReadFloat("X");
- Blitzer[blitzerid][bY] = INI_ReadFloat("Y");
- Blitzer[blitzerid][bZ] = INI_ReadFloat("Z");
- Blitzer[blitzerid][bGeschwindigkeit] = INI_ReadInt("Geschwindigkeit");
- Blitzer[blitzerid][bRadius] = INI_ReadInt("Radius");
- new text3dtext[128];
- format(text3dtext,128,"||==========||Blitzer||==========||\nGeschwindigkeit: %d\nRadius: %d\n||==========||Blitzer||==========||",Blitzer[blitzerid][bGeschwindigkeit],Blitzer[blitzerid][bRadius]);
- Blitzer[blitzerid][bLabel] = Create3DTextLabel(text3dtext,cBlau,Blitzer[blitzerid][bX]+1,Blitzer[blitzerid][bY]+1,Blitzer[blitzerid][bZ]+1,Blitzer[blitzerid][bRadius] / 2,0);
- Blitzer[blitzerid][bObjekt] = CreateObject(18880,Blitzer[blitzerid][bX]+1,Blitzer[blitzerid][bY]+1,Blitzer[blitzerid][bZ]-1,0.0,0.0,0.0);
- INI_Close();
- return 1;
- }
- stock sscanf(string[], format[], {Float,_}:...)
- {
- #if defined isnull
- if (isnull(string))
- #else
- if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
- #endif
- {
- return format[0];
- }
- #pragma tabsize 4
- new
- formatPos = 0,
- stringPos = 0,
- paramPos = 2,
- paramCount = numargs(),
- delim = ' ';
- while (string[stringPos] && string[stringPos] <= ' ')
- {
- stringPos++;
- }
- while (paramPos < paramCount && string[stringPos])
- {
- switch (format[formatPos++])
- {
- case '\0':
- {
- return 0;
- }
- case 'i', 'd':
- {
- new
- neg = 1,
- num = 0,
- ch = string[stringPos];
- if (ch == '-')
- {
- neg = -1;
- ch = string[++stringPos];
- }
- do
- {
- stringPos++;
- if ('0' <= ch <= '9')
- {
- num = (num * 10) + (ch - '0');
- }
- else
- {
- return -1;
- }
- }
- while ((ch = string[stringPos]) > ' ' && ch != delim);
- setarg(paramPos, 0, num * neg);
- }
- case 'h', 'x':
- {
- new
- num = 0,
- ch = string[stringPos];
- do
- {
- stringPos++;
- switch (ch)
- {
- case 'x', 'X':
- {
- num = 0;
- continue;
- }
- case '0' .. '9':
- {
- num = (num << 4) | (ch - '0');
- }
- case 'a' .. 'f':
- {
- num = (num << 4) | (ch - ('a' - 10));
- }
- case 'A' .. 'F':
- {
- num = (num << 4) | (ch - ('A' - 10));
- }
- default:
- {
- return -1;
- }
- }
- }
- while ((ch = string[stringPos]) > ' ' && ch != delim);
- setarg(paramPos, 0, num);
- }
- case 'c':
- {
- setarg(paramPos, 0, string[stringPos++]);
- }
- case 'f':
- {
- new changestr[16], changepos = 0, strpos = stringPos;
- while(changepos < 16 && string[strpos] && string[strpos] != delim)
- {
- changestr[changepos++] = string[strpos++];
- }
- changestr[changepos] = '\0';
- setarg(paramPos,0,_:floatstr(changestr));
- }
- case 'p':
- {
- delim = format[formatPos++];
- continue;
- }
- case '\'':
- {
- new
- end = formatPos - 1,
- ch;
- while ((ch = format[++end]) && ch != '\'') {}
- if (!ch)
- {
- return -1;
- }
- format[end] = '\0';
- if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
- {
- if (format[end + 1])
- {
- return -1;
- }
- return 0;
- }
- format[end] = '\'';
- stringPos = ch + (end - formatPos);
- formatPos = end + 1;
- }
- case 'u':
- {
- new
- end = stringPos - 1,
- id = 0,
- bool:num = true,
- ch;
- while ((ch = string[++end]) && ch != delim)
- {
- if (num)
- {
- if ('0' <= ch <= '9')
- {
- id = (id * 10) + (ch - '0');
- }
- else
- {
- num = false;
- }
- }
- }
- if (num && IsPlayerConnected(id))
- {
- setarg(paramPos, 0, id);
- }
- else
- {
- #if !defined foreach
- #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
- #define __SSCANF_FOREACH__
- #endif
- string[end] = '\0';
- num = false;
- new
- name[MAX_PLAYER_NAME];
- id = end - stringPos;
- foreach (Player, playerid)
- {
- GetPlayerName(playerid, name, sizeof (name));
- if (!strcmp(name, string[stringPos], true, id))
- {
- setarg(paramPos, 0, playerid);
- num = true;
- break;
- }
- }
- if (!num)
- {
- setarg(paramPos, 0, INVALID_PLAYER_ID);
- }
- string[end] = ch;
- #if defined __SSCANF_FOREACH__
- #undef foreach
- #undef __SSCANF_FOREACH__
- #endif
- }
- stringPos = end;
- }
- case 's', 'z':
- {
- new
- i = 0,
- ch;
- if (format[formatPos])
- {
- while ((ch = string[stringPos++]) && ch != delim)
- {
- setarg(paramPos, i++, ch);
- }
- if (!i)
- {
- return -1;
- }
- }
- else
- {
- while ((ch = string[stringPos++]))
- {
- setarg(paramPos, i++, ch);
- }
- }
- stringPos--;
- setarg(paramPos, i, '\0');
- }
- default:
- {
- continue;
- }
- }
- while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
- {
- stringPos++;
- }
- while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
- {
- stringPos++;
- }
- paramPos++;
- }
- do
- {
- if ((delim = format[formatPos++]) > ' ')
- {
- if (delim == '\'')
- {
- while ((delim = format[formatPos++]) && delim != '\'') {}
- }
- else if (delim != 'z')
- {
- return delim;
- }
- }
- }
- while (delim > ' ');
- return 0;
- }
- stock GetPlayerSpeed(playerid,bool:kmh)
- {
- new Float:Vx,Float:Vy,Float:Vz,Float:rtn;
- if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid),Vx,Vy,Vz); else GetPlayerVelocity(playerid,Vx,Vy,Vz);
- rtn = floatsqroot(floatabs(floatpower(Vx + Vy + Vz,2)));
- return kmh?floatround(rtn * 100 * 1.61):floatround(rtn * 100);
- }
Add Comment
Please, Sign In to add comment