//edit: Ja, ich weiß, alte Command-Form...
//edit2: Bilder hinzugefügt (siehe Anhang)
//edit3: Aufzug als Tresorraum... hab halt nichts besseres gefunden xD + Spoiler gesetzt
Hallo,
ich habe mein altes Tresorrob System heute einmal hergenommen und es zum versprochenen Filterscript umgeschrieben.
Ich konnte es bisher leider noch nicht testen, es sollte allerdings problemlos funktionieren
Sollten dennoch Probleme auftreten, bitte ich um Rückmeldung, damit ich diese möglichst schnell beiseiteschaffen kann.
Das Script ist derzeit für 0.3x geschrieben, kann aber innerhalb von Sekunden (includes aktualisieren + compilen) auf 0.3z aktualisiert werden
Includes (kompatible zu 0.3x) + FIlterscript: http://www.file-upload.net/dow…rrob---samp-0.3x.rar.html
Zunächst einmal muss folgendes Script in euer Hauptscript (auch bekannt als Gamemode), solltet ihr zwischen mehreren wechseln, sollte es selbstverständlich in alle!
(Muss minimal angepasst werden; Die Funktion IsACop(playerid); ist oftmals schon vorhanden und darf deshalb nicht kopiert werden!)
forward SetTresorCriminal(playerid, wanteds);
public SetTresorCriminal(playerid, wanteds)
{
if(IsPlayerConnected(playerid))
{
WantedPoints[playerid]+=wanteds; //muss ans entsprechende Script angepasst werden !
SetPlayerCriminal(playerid,255, "Tresorraus (-versuch)"); //muss ans entsprechende Script angepasst werden !
}
}
forward IsACop();
public IsACop(playerid)
{
if(IsPlayerConnected(playerid))
{
new leader = PlayerInfo[playerid][pLeader]; //muss ans entsprechende Script angepasst werden !
new member = PlayerInfo[playerid][pMember]; //muss ans entsprechende Script angepasst werden !
if(member==1 || member==2 || member==3 || member==16 || member==22) //muss ans entsprechende Script angepasst werden (Fraktionen, die entschärfen und Verbrechern Geldsäcke abnehmen können)
{
return 1;
}
else if(leader==1 || leader==2 || leader==3 || leader==16 || leader==22) //muss ans entsprechende Script angepasst werden (Fraktionen, die entschärfen und Verbrechern Geldsäcke abnehmen können)
{
return 1;
}
if(PlayerInfo[playerid][SEKDuty] == 1)
{
return 1;
}
}
return 0;
}
Pastebin:
http://pastebin.com/PPYpLf0d
Und das Filterscript:
#include <a_samp>
#include <utils>
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_ORANGE 0xFF9900AA
#define COLOR_RED 0xAA3333AA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_LIGHTBLUE 0x33CCFFAA
new robtresor[MAX_PLAYERS];
new tresorrobbing = 0;
new tresorrobtime = 12; //Angabe für die Wartezeit, wann der Tresor wieder ausgeraubt werden kann (in Stunden; 0 für keine Wartezeit)
new twanteds = 3; //Anzahl der Wanteds, die für das Platzieren einer Bombe am Tesor, vergeben werden.
new gmoney = 7500; //Angabe für das Geld, das sich in einer Tasche befindet (wird am Ende *2 genommen)
new tresorbombe1;
new tresorbombe2;
new tbombe = 0;
new trobm = 0;
new geldsack[MAX_PLAYERS];
new TresorTor1;
new TresorTor2;
new Float:tresorX,Float:tresorY,Float:tresorZ;
public OnFilterScriptInit()
{
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[256];
new tmp[256];
new string[256];
new idx;
new giveplayerid;
new sendername[MAX_PLAYER_NAME];
new giveplayer[MAX_PLAYER_NAME];
new moneys;
GetPlayerName(playerid,sendername,sizeof(sendername));
cmd = strtok(cmdtext, idx);
if(strcmp(cmd, "/take", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(CallRemoteFunction("IsACop","d", playerid))
{
new x_nr[256];
x_nr = strtok(cmdtext, idx);
if(!strlen(x_nr)) {
SendClientMessage(playerid, COLOR_LIGHTBLUE, "________________________________ Take ____________________________");
SendClientMessage(playerid, COLOR_WHITE, "Benutze: /take [Sache] [SpielerID]");
SendClientMessage(playerid, COLOR_WHITE, "Verfügbar: Geldsack");
SendClientMessage(playerid, COLOR_LIGHTBLUE, "__________________________________________________________________");
return 1;
}
else if(strcmp(x_nr,"Geldsack",true) == 0)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Benutze: /take Geldsack [SpielerID]");
return 1;
}
giveplayerid = ReturnUser(tmp);
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
if (ProxDetectorS(8.0, playerid, giveplayerid))
{
GetPlayerName(playerid,sendername,sizeof(sendername));
GetPlayerName(giveplayerid,giveplayer,sizeof(giveplayer));
format(string, sizeof(string), "Sie haben %s(%d) Geldsäcke abgenommen.",giveplayer,giveplayerid);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
format(string, sizeof(string), "%s(%d) hat ihnen ihre Geldsäcke abgenommen.", sendername,playerid);
SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
geldsack[giveplayerid]= 0;
RemovePlayerAttachedObject(giveplayerid, 3);
RemovePlayerAttachedObject(giveplayerid, 4);
return 1;
}
else
{
SendClientMessage(playerid, COLOR_RED, "Dieser Spieler ist nicht in ihrer Nähe.");
return 1;
}
}
}
else
{
SendClientMessage(playerid, COLOR_RED, "Dieser Spieler ist offline.");
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_RED, "Nicht verfügbar.");
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_RED, "Sie sind kein Staatsdiener.");
return 1;
}
return 1;
}
}
if (strcmp("/defuse", cmdtext, true, 10) == 0)
{
if(CallRemoteFunction("IsACop","d", playerid))
{
if(PlayerToPoint(5, playerid, 286.43, -1515.56, 25.27))
{
if(tbombe == 1)
{
GetPlayerName(playerid, sendername, sizeof(sendername));
tbombe = 0;
DestroyObject(tresorbombe1);
DestroyObject(tresorbombe2);
format(string, sizeof(string), "Die Bombe am Hotel in Los Santos wurde von %s entschärft.", sendername);
SendClientMessageToAll(COLOR_ORANGE, string);
}
else
{
SendClientMessage(playerid,COLOR_RED,"Es befindet sich keine Bombe am Tresor.");
}
}
else
{
SendClientMessage(playerid,COLOR_RED,"Sie befinden sich nicht am Tresor des Hotels.");
}
}
else
{
SendClientMessage(playerid,COLOR_RED,"Nur das SEK und die Army kann Bomben entschärfen.");
}
return 1;
}
if (strcmp("/einpacken", cmdtext, true, 10) == 0)
{
if(PlayerToPoint(5, playerid, 286.43, -1515.56, 25.27))
{
if(trobm >= 2)
{
if(geldsack[playerid] >= 2)
{
SendClientMessage(playerid,COLOR_RED,"Sie können nicht mehr Geldsäcke tragen.");
}
else
{
GetPlayerName(playerid, sendername, sizeof(sendername));
geldsack[playerid] = 2;
trobm -= 2;
SendClientMessage(playerid,COLOR_LIGHTBLUE,"Sie haben sich zwei Geldsäcke geschnappt.");
SendClientMessage(playerid,COLOR_LIGHTBLUE,"Die Regierung wird versuchen, Ihnen diese wieder abzunehmen.");
SendClientMessage(playerid,COLOR_LIGHTBLUE,"Sie können die Geldsäcke mit /auspacken auspacken und das Geld erhalten (Mindestabstand zum tresor: 500Meter).");
SetPlayerAttachedObject(playerid, 3, 1550, 5, 0.101, -0.0, 0.0, 5.50, 84.60, 83.7, 1, 1, 1);
SetPlayerAttachedObject(playerid, 4, 1550, 6, 0.101, -0.0, 0.0, 5.50, 84.60, 83.7, 1, 1, 1);
}
}
else
{
SendClientMessage(playerid,COLOR_RED,"Der Tresorraum ist leer; es gibt nichtsmehr zu holen.");
}
}
else
{
SendClientMessage(playerid,COLOR_RED,"Sie befinden sich nicht am Tresor des Hotels.");
}
return 1;
}
if (strcmp("/auspacken", cmdtext, true, 10) == 0)
{
if(PlayerToPoint(500, playerid, 286.43, -1515.56, 25.27))
{
SendClientMessage(playerid,COLOR_RED,"Sie sind nicht weit genug weg vom Tresorraum des Hotels.");
}
else
{
if(geldsack[playerid] >= 2)
{
moneys = geldsack[playerid] * gmoney;
GivePlayerMoney(playerid, moneys);
format(string, sizeof(string), "Sie haben das Geld aus den Taschen geholt und $%d erbeutet.", moneys);
SendClientMessage(playerid,COLOR_ORANGE, string);
RemovePlayerAttachedObject(playerid, 3);
RemovePlayerAttachedObject(playerid, 4);
geldsack[playerid] = 0;
}
else
{
SendClientMessage(playerid,COLOR_RED,"Sie haben keine Geldsäcke.");
}
return 1;
}
return 1;
}
if (strcmp("/tresorrob", cmdtext, true, 10) == 0 || strcmp("/trob", cmdtext, true, 10) == 0)
{
if(PlayerToPoint(5, playerid, 286.43, -1515.56, 25.27))
{
new hour,minuite,second;
gettime(hour,minuite,second);
if(hour >= 12 && hour <= 20)
{
if(tresorrobbing == 0)
{
if(tbombe == 0)
{
GetPlayerPos(playerid,tresorX,tresorY,tresorZ);
tresorbombe1 = CreateObject(1654, 287.13, -1515.06, 25.51, 0.00, 0.00, 59.01);
tresorbombe2 = CreateObject(1654, 287.30, -1514.82, 25.51, 0.00, 0.00, 59.01);
SendClientMessage(playerid,COLOR_RED,"Die Bombe explodiert in 5 Minuten.");
SetTimerEx("TresorBombe",100,0,"i",playerid);
tresorrobbing = 1;
tbombe = 1;
SendClientMessageToAll(COLOR_ORANGE,"Eine Dynamitladung wurde am Tresor des Hotels in Los Santos angebracht.");
CallRemoteFunction("SetTresorCriminal","dd", playerid, twanteds);
SetPlayerWantedLevel(playerid, GetPlayerWantedLevel(playerid)+twanteds);
SetTimerEx("Tresorfrei",3600000 * tresorrobtime,0,"i",playerid);
}
else
{
SendClientMessage(playerid,COLOR_RED,"Der Tresor wird gerade ausgeraubt.");
}
}
else
{
SendClientMessage(playerid,COLOR_RED,"Der Tresor wurde heute schon ausgeraubt.");
}
}
else
{
SendClientMessage(playerid,COLOR_RED,"Ein Tresorraub ist nur zwischen 12:00 und 21:00 Uhr möglich.");
}
}
else
{
SendClientMessage(playerid,COLOR_RED,"Sie befinden sich nicht am Tresor des Hotels.");
}
return 1;
}
return 0;
}
forward TresorBombe(playerid);
public TresorBombe(playerid)
{
if(tbombe == 1)
{
SendClientMessage(playerid,COLOR_YELLOW,"Die Bombe explodiert in 5 Minuten.");
SetTimerEx("TresorBombe1",60000,0,"i",playerid);
SendClientMessageToAll(COLOR_ORANGE,"Die Bombe explodiert in 5 Minuten.");
return 1;
}
else
{
SendClientMessageToAll(COLOR_ORANGE,"Der Tresorrob in Los Santos ist fehlgeschlagen.");
tbombe = 0;
return 1;
}
}
forward TresorBombe1(playerid);
public TresorBombe1(playerid)
{
if(tbombe == 1)
{
SendClientMessage(playerid,COLOR_YELLOW,"Die Bombe explodiert in 4 Minuten.");
SetTimerEx("TresorBombe2",60000,0,"i",playerid);
SendClientMessageToAll(COLOR_ORANGE,"Die Bombe explodiert in 4 Minuten.");
return 1;
}
else
{
SendClientMessageToAll(COLOR_ORANGE,"Der Tresorrob in Los Santos ist fehlgeschlagen.");
tbombe = 0;
return 1;
}
}
forward TresorBombe2(playerid);
public TresorBombe2(playerid)
{
if(tbombe == 1)
{
SendClientMessage(playerid,COLOR_YELLOW,"Die Bombe explodiert in 3 Minuten.");
SetTimerEx("TresorBombe3",60000,0,"i",playerid);
SendClientMessageToAll(COLOR_ORANGE,"Die Bombe explodiert in 3 Minuten.");
return 1;
}
else
{
SendClientMessageToAll(COLOR_ORANGE,"Der Tresorrob in Los Santos ist fehlgeschlagen.");
tbombe = 0;
return 1;
}
}
forward TresorBombe3(playerid);
public TresorBombe3(playerid)
{
if(tbombe == 1)
{
SendClientMessage(playerid,COLOR_YELLOW,"Die Bombe explodiert in 2 Minuten.");
SetTimerEx("TresorBombe4",60000,0,"i",playerid);
SendClientMessageToAll(COLOR_ORANGE,"Die Bombe explodiert in 2 Minuten.");
return 1;
}
else
{
SendClientMessageToAll(COLOR_ORANGE,"Der Tresorrob in Los Santos ist fehlgeschlagen.");
tbombe = 0;
return 1;
}
}
forward TresorBombe4(playerid);
public TresorBombe4(playerid)
{
if(tbombe == 1)
{
SendClientMessage(playerid,COLOR_YELLOW,"Die Bombe explodiert in 60 Sekunden.");
SetTimerEx("TresorBombe5",60000,0,"i",playerid);
SendClientMessageToAll(COLOR_ORANGE,"Die Bombe explodiert in 60 Sekunden.");
return 1;
}
else
{
SendClientMessageToAll(COLOR_ORANGE,"Der Tresorrob in Los Santos ist fehlgeschlagen.");
tbombe = 0;
return 1;
}
}
forward TresorBombe5(playerid);
public TresorBombe5(playerid)
{
DestroyObject(TresorTor1);
DestroyObject(TresorTor2);
DestroyObject(tresorbombe1);
DestroyObject(tresorbombe2);
CreateExplosion(tresorX,tresorY,tresorZ,2,6);
CreateExplosion(tresorX,tresorY,tresorZ,2,6);
CreateExplosion(tresorX,tresorY,tresorZ,2,6);
CreateExplosion(tresorX,tresorY,tresorZ,2,6);
CreateExplosion(tresorX,tresorY,tresorZ+2,2,6);
CreateExplosion(tresorX,tresorY,tresorZ+2,2,6);
CreateExplosion(tresorX,tresorY,tresorZ+2,2,6);
CreateExplosion(tresorX,tresorY,tresorZ+2,2,6);
CreateExplosion(tresorX,tresorY+2,tresorZ,2,6);
CreateExplosion(tresorX,tresorY+2,tresorZ,2,6);
CreateExplosion(tresorX,tresorY+2,tresorZ,2,6);
CreateExplosion(tresorX,tresorY+2,tresorZ,2,6);
CreateExplosion(tresorX+2,tresorY,tresorZ,2,6);
CreateExplosion(tresorX+2,tresorY,tresorZ,2,6);
CreateExplosion(tresorX+2,tresorY,tresorZ,2,6);
CreateExplosion(tresorX+2,tresorY,tresorZ,2,6);
SendClientMessage(playerid,COLOR_RED,"Die Bombe ist explodiert. Der Tresor ist nun geöffnet.");
SendClientMessage(playerid,COLOR_RED,"Das Geld kann im Tresorraum mit /einpacken eingepackt werden.");
SetTimerEx("tresortor",900000,0,"i",playerid);
tbombe = 0;
trobm = 14;
CreateObject(2463, 284.67, -1511.61, 25.24, 0.00, 0.00, 53.69);
CreateObject(2463, 283.79, -1512.72, 25.24, 0.00, 0.00, 53.69);
CreateObject(1212, 283.65, -1513.11, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 283.71, -1513.04, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 283.77, -1512.96, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 283.83, -1512.88, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 283.89, -1512.80, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 283.96, -1512.72, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 284.02, -1512.64, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 284.08, -1512.56, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 284.14, -1512.48, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 284.20, -1512.40, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 284.26, -1512.32, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 284.32, -1512.24, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 284.38, -1512.16, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 284.38, -1512.16, 26.75, 0.00, 0.00, 358.55);
CreateObject(1212, 284.32, -1512.24, 26.75, 0.00, 0.00, 358.57);
CreateObject(1212, 284.26, -1512.32, 26.75, 0.00, 0.00, 358.58);
CreateObject(1212, 284.20, -1512.40, 26.75, 0.00, 0.00, 358.59);
CreateObject(1212, 284.14, -1512.48, 26.75, 0.00, 0.00, 358.61);
CreateObject(1212, 284.08, -1512.56, 26.75, 0.00, 0.00, 358.62);
CreateObject(1212, 284.02, -1512.64, 26.75, 0.00, 0.00, 358.64);
CreateObject(1212, 283.96, -1512.72, 26.75, 0.00, 0.00, 358.65);
CreateObject(1212, 283.89, -1512.80, 26.75, 0.00, 0.00, 358.66);
CreateObject(1212, 283.83, -1512.88, 26.75, 0.00, 0.00, 358.68);
CreateObject(1212, 283.77, -1512.96, 26.75, 0.00, 0.00, 358.69);
CreateObject(1212, 283.71, -1513.04, 26.75, 0.00, 0.00, 358.70);
CreateObject(1212, 283.65, -1513.11, 26.75, 0.00, 0.00, 358.72);
CreateObject(1212, 284.60, -1511.91, 26.75, 0.00, 0.00, 358.68);
CreateObject(1212, 284.67, -1511.82, 26.75, 0.00, 0.00, 358.66);
CreateObject(1212, 284.74, -1511.73, 26.75, 0.00, 0.00, 358.65);
CreateObject(1212, 284.80, -1511.65, 26.75, 0.00, 0.00, 358.64);
CreateObject(1212, 284.87, -1511.56, 26.75, 0.00, 0.00, 358.62);
CreateObject(1212, 284.94, -1511.47, 26.75, 0.00, 0.00, 358.61);
CreateObject(1212, 285.01, -1511.38, 26.75, 0.00, 0.00, 358.59);
CreateObject(1212, 285.07, -1511.29, 26.75, 0.00, 0.00, 358.58);
CreateObject(1212, 285.14, -1511.20, 26.75, 0.00, 0.00, 358.57);
CreateObject(1212, 285.21, -1511.11, 26.75, 0.00, 0.00, 358.55);
CreateObject(1212, 285.15, -1511.18, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 285.04, -1511.34, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 285.11, -1511.26, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 285.00, -1511.39, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 284.95, -1511.46, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 284.90, -1511.53, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 284.85, -1511.60, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 284.74, -1511.73, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 284.80, -1511.66, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 284.69, -1511.80, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 284.64, -1511.87, 26.39, 0.00, 0.00, 0.00);
CreateObject(1212, 284.59, -1511.93, 26.39, 0.00, 0.00, 0.00);
return 1;
}
forward tresortor();
public tresortor()
{
TresorTor1=CreateObject(2634, 286.43, -1515.56, 25.27, 0.00, 0.00, 54.79);
TresorTor2=CreateObject(2634, 287.57, -1514.02, 25.27, 0.00, 0.00, 234.79);
return 1;
}
forward Tresorfrei(playerid);
public Tresorfrei(playerid)
{
tresorrobbing = 0;
robtresor[playerid]=0;
return 1;
}
//Sonstige Funktionen
forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);
public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
if(IsPlayerConnected(playerid))
{
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);
//printf("DEBUG: X:%f Y:%f Z:%f",posx,posy,posz);
if(((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
{
return 1;
}
}
return 0;
}
forward ProxDetectorS(Float:radi, playerid, targetid);
public ProxDetectorS(Float:radi, playerid, targetid)
{
if(IsPlayerConnected(playerid)&&IsPlayerConnected(targetid))
{
new Float:posx, Float:posy, Float:posz;
new Float:oldposx, Float:oldposy, Float:oldposz;
new Float:tempposx, Float:tempposy, Float:tempposz;
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
//radi = 2.0; //Trigger Radius
GetPlayerPos(targetid, posx, posy, posz);
tempposx = (oldposx -posx);
tempposy = (oldposy -posy);
tempposz = (oldposz -posz);
//printf("DEBUG: X:%f Y:%f Z:%f",posx,posy,posz);
if(((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
{
return 1;
}
}
return 0;
}
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;
}
Pastebin:
http://pastebin.com/sGdjiByj
Ich bitte ausdrücklich um ein kurzes Feedback