gut erklärt und jo für Anfänger nicht schlecht.
9/10
Danke für deine Bewertung
gut erklärt und jo für Anfänger nicht schlecht.
9/10
Danke für deine Bewertung
Aber nicht für diesen Command. Das ist Sinnlos.
Vielleicht für einen makeleader oder makeadmin Befehl ist dies nützlich.
habs gelöscht
Seht Gutes & Ausführliches Tutorial
Danke für deine Bewertung
Ich würd aber sscanf mit dazu holen weil wenn man ja dann ocmd hat kann man ja anfangen damit zu arbeiten
strcmp ist nicht so toll
Ja werd ich naher verklinken
Hallo Breadfish!
Ja ich habe mal so ein bisschen rum geguckt und habe ein Navi Tut gesehn
was ich aber ziemlich unübersichtlich finde.
Ich werde das in meinen Worten erklären (Speziell für Anfänger)
=======================================================================================
Was ich euch erklären werde:
• Dialog für den Navi erstellen
• Dialog Style List richitg benützen
• Checkpoints beim erreichen löschen
Was ihr braucht:
• Zeit
• Lesen können
Was ihr solltet:
•Kein C&P damit ihr versteht um was es hier geht
Also gut fangen wir an
=======================================================================================
So als erstes definieren wir Oben im Script ein Dialog, ich werde ihn
"DIALOG_NAVI" nennen.
z. B:
#define DIALOG_NAVI 1 //Die Zahl müsst ihr selber einstellen falls die 1 schon einem anderen Dialog zugewiesen wird
So Schritt 1 wäre erledigt es folgt
-Schritt 2
So wir haben nun ein Dialog definiert und ihm die id 1 zugewiesen. Jetzt erstellen wir ein
Command, ich werde es mit OCMD tun, falls ihr noch nicht Ocmd habt ladet euch das
Include runter.
Ihr könnt natürlich auch strcmp benutzen das bleibt euch überlassen. Also erstellen wir mal den Command.
ocmd:navi(playerid,params[])
{
return 1;
}
Unser Command wäre erstellt nun fügen wir noch ein was passieren soll
wenn jemand /navi eingibt. Das machen wir so:
ocmd:navi(playerid,params[])
{
ShowPlayerDialog(playerid,DIALOG_NAVI,DIALOG_STYLE_LIST,"Navigation","Stadthalle\nSAPD\nBank","Go","Abbrechen");
//nun wird dem Spieler dialog navi gezeigt
return 1;
}
So das hätten wir es folgt
-Schritt 3
Nun will er ja wissen was passieren soll wenn man z. B Stadthalle auswählt.
Dafür gehen wir zu OnDialogResponse, und Scripten was passieren soll
wenn man Stadthalle auswählt. Ich werde mit switch und case arbeiten
ihr könnt natürlich auch listitem==0 benutzen wenn ihr möchet.
Warum ich case nutze ? Ganz einfach ich finde es einfacher und schneller. Also gut los gehts.
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid==DIALOG_NAVI) //Welchen dialog
{
case 1:
{
if(!response) //Wenn auf Abbrechen gedrückt wird
{
SendClientMessage(playerid,farbe,"Du hast den Vorgang abgebrochen");
return 1;
}
switch(listitem)
{
case 0:
{
SetPlayerCheckpoint(playerid,x,y,z,4.0); //Bei X,Y,Z eure Koordinaten einsetzen
}
case 1:
{
SetPlayerCheckpoint(playerid,x,y,z,4.0);
}
case 2:
{
SetPlayerCheckpoint(playerid,x,y,z,4.0);
}
return 1;
}
Warum fange ich bei case 0: an? Ganz eifnach in pwn wird angefangen ab 0 zuzählen.
So nun werden die CheckPoints gesetzt alles gut. Wenn ihr es jetzt testet würdet ihr merken
das die Checkpoints nicht verschwinden. Wie stellen wir ein dass wenn ein Spieler sein
Checkpoint erreicht das dieser Checkpoint nicht mehr auf der Minimap angezeigt wird ?
Das ist ganz einfach und zwar mit der Funktion: DisablePlayerCheckpoint. diesen befehl
fügt ihr einfach bei OnPlayerEnterCheckpoint ein. Wenn ihr das getan habt sieht es so aus.
public OnPlayerEnterCheckpoint(playerid)
{
DisablePlayerCheckpoint(playerid);
return 1;
}
Nun wird der Checkpoint gelöscht wenn man ihn erreicht.
So das wars mit diesem Tutorial. Ich werde auch noch in einem 2Part einfügen wie
die Checkpoints nach einer bestimmten zeit einfach gelöscht werden.
Mit diesem Tutorial wollte ich nicht das bereits vorhandene Tutorial für den
Navi system verbessern , ich wollte es nur nochmal in meinen Worten erklären, und
alles genau erklären wie es alles abläuft. Dieses Tutorial ist Anfänger freundlich.
Bewertet es, damit ich weiß ob ich noch weitere Tut's für anfänger machen soll.
Hier nochmal ein Tutorial wie man Tore mit Timer Scriptet
[ SCRIPTING ] Tore mit Befehl & Timer Scripten/erstellen
=======================================================================================
MFG: |John| ~ Bei errors bitte einfach posten
du hast ocmd_heal benutzt es heißt ocmd:heal
hast du Teamviewer ?
ah dann musst du im befehl hinzufügen das du ingame bestimmst welchen skin er bekommen soll
// edit
//Beispiel
ocmd:makeleader(playerid,params[])
{
if(!isPlayerAnAdmin(playerid,3))return SendClientMessage(playerid,ROT,"Rang zu Niedrig.");
new pID,fID,skin;
if(sscanf(params,"ui",pID,fID,skin))return SendClientMessage(playerid,BLAU,"/makeleader [playerid] [fraktionsid] [Skin ID]");
SetPlayerSkin(pID,skin);
SetPVarInt(pID,"Fraktion",fID);
SendClientMessage(playerid,BLAU,"Erfolgreich.");
return 1;
}
und das mit sscanf fügst du ganz unten ins script und mach das mit dem #define weg ;))
nein das ocmd musst du irgendwo ins script schreiben in kein Public !!
emm warte ich setzt ein dl für ocmd ein
http://www.mediafire.com/?7hyjf8bsqxlenbn
//edit link hinzugefügt
kannst auch sscanf unten is script einfügen
stock sscanf(sstring[], format[], {Float,_}:...)
{
#if defined isnull
if (isnull(sstring))
#else
if (sstring[0] == 0 || (sstring[0] == 1 && sstring[1] == 0))
#endif
{
return format[0];
}
#pragma tabsize 4
new
formatPos = 0,
sstringPos = 0,
paramPos = 2,
paramCount = numargs(),
delim = ' ';
while (sstring[sstringPos] && sstring[sstringPos] <= ' ')
{
sstringPos++;
}
while (paramPos < paramCount && sstring[sstringPos])
{
switch (format[formatPos++])
{
case '\0':
{
return 0;
}
case 'i', 'd':
{
new
neg = 1,
num = 0,
ch = sstring[sstringPos];
if (ch == '-')
{
neg = -1;
ch = sstring[++sstringPos];
}
do
{
sstringPos++;
if ('0' <= ch <= '9')
{
num = (num * 10) + (ch - '0');
}
else
{
return -1;
}
}
while ((ch = sstring[sstringPos]) > ' ' && ch != delim);
setarg(paramPos, 0, num * neg);
}
case 'h', 'x':
{
new
num = 0,
ch = sstring[sstringPos];
do
{
sstringPos++;
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 = sstring[sstringPos]) > ' ' && ch != delim);
setarg(paramPos, 0, num);
}
case 'c':
{
setarg(paramPos, 0, sstring[sstringPos++]);
}
case 'f':
{
new changestr[16], changepos = 0, strpos = sstringPos;
while(changepos < 16 && sstring[strpos] && sstring[strpos] != delim)
{
changestr[changepos++] = sstring[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(sstring, format[formatPos], false, sstringPos)) == -1)
{
if (format[end + 1])
{
return -1;
}
return 0;
}
format[end] = '\'';
sstringPos = ch + (end - formatPos);
formatPos = end + 1;
}
case 'u':
{
new
end = sstringPos - 1,
id = 0,
bool:num = true,
ch;
while ((ch = sstring[++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
sstring[end] = '\0';
num = false;
new
name[MAX_PLAYER_NAME];
id = end - sstringPos;
foreach (Player, playerid)
{
GetPlayerName(playerid, name, sizeof (name));
if (!strcmp(name, sstring[sstringPos], true, id))
{
setarg(paramPos, 0, playerid);
num = true;
break;
}
}
if (!num)
{
setarg(paramPos, 0, INVALID_PLAYER_ID);
}
sstring[end] = ch;
#if defined __SSCANF_FOREACH__
#undef foreach
#undef __SSCANF_FOREACH__
#endif
}
sstringPos = end;
}
case 's', 'z':
{
new
i = 0,
ch;
if (format[formatPos])
{
while ((ch = sstring[sstringPos++]) && ch != delim)
{
setarg(paramPos, i++, ch);
}
if (!i)
{
return -1;
}
}
else
{
while ((ch = sstring[sstringPos++]))
{
setarg(paramPos, i++, ch);
}
}
sstringPos--;
setarg(paramPos, i, '\0');
}
default:
{
continue;
}
}
while (sstring[sstringPos] && sstring[sstringPos] != delim && sstring[sstringPos] > ' ')
{
sstringPos++;
}
while (sstring[sstringPos] && (sstring[sstringPos] == delim || sstring[sstringPos] <= ' '))
{
sstringPos++;
}
paramPos++;
}
do
{
if ((delim = format[formatPos++]) > ' ')
{
if (delim == '\'')
{
while ((delim = format[formatPos++]) && delim != '\'') {}
}
else if (delim != 'z')
{
return delim;
}
}
}
while (delim > ' ');
return 0;
}
du brauchst das OCMD plugin..
mfg
meinst du wenn du /makeleader machst das der typ dann zusätzlich ein bestimmten skin bekommt ?
wenn ja
füge das hinzu :
SetPlayerSkin(pID,101); // 101 ist nur ein beispiel skin such dir ein aus
//edit bitte löschen
also mit Ocmd funzt das so
ocmd:heal(playerid,params[])
{
new pID, HP;
if(sscanf(params,"ui",pID,HP))return SendClientMessage(playerid,farbe,"Benutze: /heal [Name/ID] [HP]");
SetPlayerHealth(pID,HP);
SendClientMessage(pID,"Du wurdest gehealt"); //das muss man nicht kann man aber (Mit SendClientMessage)
return 1;
}
ich find er sollte einfach Ocmd oder dcmd benutzen
..
ist besser
huch warte mal
ich glaub es geht nicht mit strcmp ka
benutz OCMD damit klappts 100%
und dann brauchst du noch das sscanf include, das hast du aber oder ?
du hast sscanf falsch genutz guck dir mein befehl oben an
Ozan jetzt wird die HP direkt auf 100 gesetzt er möchte ja bestimmen wer gehealt werden soll und wie viel Hp der jenige daze bekommen soll
*hust* kommst du nicht aus Gta city (ozan_new) ?
hm machs so
if (strcmp("/heal", cmdtext, true, 10) == 0)
{
new pid, hp;
if(sscanf(params,"ui",pid,hp))return SendClientMessage(playerid,farbe,"nutze /healp [name] [Hp]");
SetPlayerHealth(pid,hp);
SendClientMessage(pid,farbe,"du wurdest gehealt");
return 1;
}
sollte klappen
du hast es einfach bei OnPlayerCommandText rein geschrieben aber nicht geschrieben wie der Command lautet
Man erkennt nichts stell das mal richtig rein