Hallo, liebe Community,
Ich wurde oft gefragt (nicht im Forum) wie man Tore auf einen Befehl bekommt.
[Ich weiss, diese Tutorials gibt es schon], aber nicht mit Namenserkennung.
Deswegen, setzte ich jetzt ein komplettes [Tutorial] zu diesesm Thema rein.
Also, wir fangen an:
Als erstes wollen wir das [Funktion] Tor "forwarden"
wenn wir also ein [Funktion] Tor Namens = "lspd" haben, nennen wir das Tor [zB] = "lspdtor".
Das mach ich so, damit ich nicht durcheinander komme; ein wenig Ordnung im Script, ist auch nicht schlecht
Also, lspd:
forward GateCloselspd();
Somit haben wir die Funktion stehen, ...
Aber nicht das Tor. Das Tor setzen wir oben in den new Bereich :
new lspdtor;
Dann muss das Script ja wissen, welches Objekt überhaupt an welchen Platz sollte ...
Deswegen, sezten wir unter public OnGameModeInit das Objekt, mit allen Infos rein.
[Ich nutze den bfx_oStreamer]:
lspdtor = b_CreateObject(971,1589.0394,-1638.0865,12.7981,0.00,0.00,180.00);
Das müssen die x,y,z, etc. Koordinaten sein, wo das Tor im geschlossenen Zustand ist!
Kurze Erklärung, zu den Koordinaten, in der zeile:
modelid = Die Objekt ID
Float:bx = Die X-Koordinate, wo sich das Objekt befinden soll
Float:by = Die Y-Koordinate, wo sich das Objekt befinden soll
Float:bz = Die Z-Koordinate, wo sich das Objekt befinden soll
Float:brx = Die Rotation des Objekts X
Float:bry = Die Rotation des Objekts Y
Float:brz = Die Rotation des Objekts Z
Wenn wir also das Tor [im geschlossenen Zustand] unter public OnGameModeInit
gespeichert haben, kommen wir jetzt zum Befehl, der das Tor öffnen soll:
if(strcmp(cmdtext, "/DeinBefehl", true) == 0 || strcmp(cmdtext, "/Abkürung[wenn du willst!/Kein Muss]", true) == 0)
{
if(IsPlayerConnected(playerid))
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
if(PlayerToPoint(20.0, playerid, 1596.8392,-1638.0865,12.7981)) // LSPD Tor 1
{
if(gTeam[playerid] == 2 || IsACop(playerid)||PlayerInfo[playerid][pAdmin] >= 1339)
{
b_MoveObject(LS,1596.8392,-1638.0865,12.7981, 3.5);
SetTimer("GateCloseLS", 5000, 0);
SendClientMessage(playerid, COLOR_YELLOW,"Willkommen beim LSPD, das Tor schliesst sich in 5 Sekunden !");
return 1;
}
else
{
SendClientMessage(playerid, COLOR_GREY, " Du gehörst
nicht zum Polizeirevier / S.W.A.T. / oder zur Army !");
}
}
Das ist der Tor Befehl. Damit öffnest du ein Tor.
Kommen wir zur Erklärung, was alles drinne vorhanden ist!:
Das ist der allgemeine Tor Befehl, dort sieht man, welcher Command genutzt wird.
if(strcmp(cmdtext, "/DeinBefehl", true) == 0 || strcmp(cmdtext, "/Abkürung[wenn du willst!/Kein Muss]", true) == 0)
Wenn man diesen Befehl also nutzen will, muss der Server erst einmal wissen, ob du Online bist:
if(IsPlayerConnected(playerid))
So, dann kommen wir jetzt zu den x,y,z Koordinaten. Nur wenn du dort stehst, kannst du das Tor öffnen:
Hier werden deine Koordinaten also abgerufen, und wenn du in der Nähe bist, von diesem Punkt:
if(PlayerToPoint(20.0, playerid, 1596.8392,-1638.0865,12.7981)) // LSPD Tor 1
Kannst du das Tor öffnen, also schreiben wir hier die Koordinaten des Tores hin, wenn es aufgemacht ist,:
also im Geöffneten Zustand!
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
if(PlayerToPoint(20.0, playerid, 1596.8392,-1638.0865,12.7981)) // LSPD Tor 1
Dann wollen wir ja noch bestimmen, für wen dieses Tor öffnungsfähig sein soll!:
if(gTeam[playerid] == 2 || IsACop(playerid)||PlayerInfo[playerid][pAdmin] >= 1339)
Da steht nicht viel mehr drinne, als das du in dem Team Cop, oder ein Admin Rang 1339 sein musst!, Ich habe
IsACop
Für Swat, army Cops und FBI, definiert.
Das ist natürlich frei entscheidbar!
Hier kommen nochmals die Koordinaten rein,wenn das Tor im geöffneten Zustand ist.
Hier ist nun aber noch eine Funktion!
Die
Funktion des Timers. Diese sagt nur, wie lange die Torfunktion
GateCloselspd in dem geöffneten Zustand bleiben soll!
SetTimer("GateCloselspd", 5000, 0);
Wir erinnern uns an:
forward GateCloselspd();
Und natürlich die Nachricht, wenn du Es aufgemacht hast!
b_MoveObject(LS,1596.8392,-1638.0865,12.7981, 3.5);
SetTimer("GateCloseLS", 5000, 0);
SendClientMessage(playerid, COLOR_YELLOW,"Willkommen beim LSPD, das Tor schliesst sich in 5 Sekunden !");
return 1;
Wenn du allerdings nicht in der Fraktion sein solltest, tritt dieser Schritt in Kraft!:
else
{
SendClientMessage(playerid, COLOR_GREY, " Du gehörst nicht zum
Polizeirevier / S.W.A.T. / oder zur Army !");
}
Am Ende wollen wir das Tor noch publicieren!
Das mach ich immer am Ende meines Scripts. Viele sagen, mach das irgendwo, ich sage,
hab Ordnung in deinem Script, so findest du alles schneller!
Also, kommt unten das hin:
public GateCloselspd()
{
b_MoveObject(lspdtor,923.520386, -1221.555054, 17.693405, 3.5);
return 1;
}
Dort werden wieder die Koordinaten, des geschlossenen Tores, gefordert.
Wie wir sehen können, ist die Tor Funktion publiciert, und das Tor ist drinne:
public gateCloselspd
und das Tor:
b_MoveObject(lspdtor, .....);
Wenn du also mehrere Tore unter diesem Command laufen lassen willst, musst du
diesen erst forwarden, dann allgemein kennzeichnen und unter deinen Befehl stecken,
Wie!?
Also:
Wenn du hier dein erstes Tor hast:
if(strcmp(cmdtext, "/DeinBefehl", true) == 0 || strcmp(cmdtext, "/Abkürung[wenn du willst!/Kein Muss]", true) == 0)
{
if(IsPlayerConnected(playerid))
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
if(PlayerToPoint(20.0, playerid, 1596.8392,-1638.0865,12.7981)) // LSPD Tor 1
{
if(gTeam[playerid] == 2 || IsACop(playerid)||PlayerInfo[playerid][pAdmin] >= 1339)
{
b_MoveObject(LS,1596.8392,-1638.0865,12.7981, 3.5);
SetTimer("GateCloseLS", 5000, 0);
SendClientMessage(playerid, COLOR_YELLOW,"Willkommen beim LSPD, das Tor schliesst sich in 5 Sekunden !");
return 1;
}
else
{
SendClientMessage(playerid, COLOR_GREY, " Du gehörst
nicht zum Polizeirevier / S.W.A.T. / oder zur Army !");
}
}
musst du es nur drunter tun!
Beispiel:
if(strcmp(cmdtext, "/DeinBefehl", true) == 0 || strcmp(cmdtext, "/Abkürung[wenn du willst!/Kein Muss]", true) == 0)
{
if(IsPlayerConnected(playerid))
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
if(PlayerToPoint(20.0, playerid, 1596.8392,-1638.0865,12.7981)) // LSPD Tor 1
{
if(gTeam[playerid] == 2 || IsACop(playerid)||PlayerInfo[playerid][pAdmin] >= 1339)
{
b_MoveObject(LS,1596.8392,-1638.0865,12.7981, 3.5);
SetTimer("GateCloseLS", 5000, 0);
SendClientMessage(playerid, COLOR_YELLOW,"Willkommen beim LSPD, das Tor schliesst sich in 5 Sekunden !");
return 1;
}
else
{
SendClientMessage(playerid, COLOR_GREY, " Du gehörst
nicht zum Polizeirevier / S.W.A.T. / oder zur Army !");
}
}
//------------------------- neues Tor --------------------------------------------------------»
if(PlayerToPoint(20.0, playerid, 923.516113, -1221.483154, 14.268457)) // LSADAC Tor 1
{
if(PlayerInfo[playerid][pHSMember]==24 ||
PlayerInfo[playerid][pHSLeader]==24||PlayerInfo[playerid][pAdmin] >=
1339)
{
if(IsPlayerConnected(playerid))
b_MoveObject(LSADACtor,923.516113, -1221.483154, 14.268457, 3.5);
SetTimer("GateCloseLSADAC", 5000, 0);
SendClientMessage(playerid,
COLOR_YELLOW,"Willkommen beim LS - ADAC, das Tor schliesst sich in 5
Sekunden !");
return 1;
}
else
{
SendClientMessage(playerid, COLOR_GREY, " Du gehörst nicht zum LS - ADAC !");
}
}
}
Nun haben wir ein zweites Tor drinne, aber vorsicht!
Du musst mit dem 2ten Tor genau so verkehren, wie mit dem ersten!
Hier bei dem 2ten, ist eine kleinigkeit anders!
if(PlayerInfo[playerid][pMember]==24 ||
PlayerInfo[playerid][pLeader]==24||PlayerInfo[playerid][pAdmin] >=
1339)
hier steht aber nur drinne, welche Fraktion das nutzen kann, und nicht, ob er ein Cop ist [IsACop]
So, jetzt kommen wir zum letzten Part!
In diesem Part, zeige ich euch, wie man ein Tor auf Personen beziehen kann!
Das ist im Prinzip sehr easy, wenn man seinen Kopf mal anstrengt
Also, bei der Abfrage, welche Fraktion, oder ob er ein Cop ist, kommt hier einfach
die Abfrage rein, welcher Spieler das Tor öffnen darf!:
Also, anstelle, von dem hier:
if(PlayerInfo[playerid][pMember]==24 ||
PlayerInfo[playerid][pLeader]==24||PlayerInfo[playerid][pAdmin] >=
1339)
kommt da
new szPlayername[MAX_PLAYER_NAME];
GetPlayerName(playerid, szPlayername, sizeof(szPlayername));
if(!strcmp(szPlayername, "fresh_latte", true))
das rein!
Erklärung:
new szPlayername[MAX_PLAYER_NAME];
Das ist die allgemeine Einstellung, das das Script nach dem Namen sucht!
GetPlayerName(playerid, szPlayername, sizeof(szPlayername));
Dann will das Script natürlich wissen, wo es suchen soll!
Und zum Schluss:
if(!strcmp(szPlayername, "fresh_latte", true))
Muss das Script wissen, welcher Name es denn sein soll!
Das wars im Prinzip schon von mir und meinem [Tutuorial]
Bitte seit nicht soooo streng mit der Bewertung, es ist mein erstes [Tutorial]
Mfg
EDIT// Originaltext:
[http://87.106.31.133/fresh-tap…?page=Thread&threadID=70&]