Beiträge von Ted.

    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

    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;
    }

    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

    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;
    }

    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) ? :D


    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