Beiträge von Jeffry

    public minute()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(GetPVarInt(i,"loggedin")==0)continue;
    //Spieler ist eingeloggt & online
    SetPVarInt(i,"Paytime",GetPVarInt(i,"Paytime")+1);
    if(GetPVarInt(i,"Paytime")==60)
    {
    SetPVarInt(i,"Paytime",0);
    SendClientMessage(i,ROT,"|_______________Zahltag_______________|");
    SendClientMessage(i,ROT,"Geld: 5000");
    GivePlayerMoney(i,5000);
    new Respektpunkte=GetPVarInt(i,"Respektpunkte");
    SetPVarInt(i,"Respektpunkte",Respektpunkte+=1);
    if(GetPVarInt(i,"Respektpunkte")==GetPlayerScore(i)*8)
    {
    GivePlayerScore(i,1);
    SetPVarInt(i,"Respektpunkte",0);
    SendClientMessage(i,HBLAU,"Du bist ein Level höhrer Herzlichen Glückwunsch");
    }
    new string[128];
    format(string,sizeof(string),"Respektpunkte: %i/%i",GetPVarInt(i,"Respektpunkte"), GetPlayerScore(i)*8); //Hier habe ich die Parameter geändert.
    SendClientMessage(i,ROT,string);
    SpielerSpeichern(i);
    }
    }
    return 1;
    }


    Änderungen sollten selbsterklärend sein.

    Bei mir gehts.
    http://pokit.org/get/img/8ced8…fd65365f63d59b8493ff4.jpg


    So gehts auch:
    CREATE TABLE IF NOT EXISTS `accounts` (
    `paydayhad` INT( 11 ) DEFAULT NULL ,
    `cdplayer` INT( 11 ) DEFAULT NULL ,
    `wins` INT( 11 ) DEFAULT NULL ,
    `loses` INT( 11 ) DEFAULT NULL ,
    `newsskill` INT( 6 ) NOT NULL DEFAULT '0',
    `drugsskill` INT( 6 ) NOT NULL DEFAULT '0',
    `cockskill` INT( 6 ) NOT NULL DEFAULT '0',
    `fishskill` INT( 6 ) NOT NULL DEFAULT '0',
    `farmerskill` INT( 6 ) NOT NULL DEFAULT '0',
    `tut` INT( 11 ) DEFAULT NULL ,
    `warns` INT( 11 ) DEFAULT NULL ,
    `online` INT( 11 ) DEFAULT NULL ,
    `pA` FLOAT NOT NULL ,
    `pFarbe1` INT( 11 ) NOT NULL ,
    `pFarbe2` INT( 11 ) NOT NULL ,
    `pModel` INT( 11 ) NOT NULL ,
    `pPreis1` INT( 11 ) NOT NULL ,
    PRIMARY KEY ( `id` )) AUTO_INCREMENT =38897;


    Wenn du noch immer Fehler bekommst, zeig nochmal deinen Code und die Fehler.

    Es gibt sie doch noch, die strtok Nutzer, sehr schön :thumbup:


    Zeig bitte noch wie du das Nagelband erstellst.
    Bekommst du irgendwelche Meldungen, Nachrichten, was passiert wenn du den Command eingibst, was steht im Chat?

    Och Leute:
    default: {SendClientMessage(playerid, COLOR_RED, "Skin gewechselt);}


    zu:
    default: {SendClientMessage(playerid, COLOR_RED, "Skin gewechselt");}


    Da fehlt schlichtweg ein " am Ende.
    Durch Klammerfehler stürzt der Compiler nicht ab, du wirst nur 26 Errors bekommen.

    dcmd_admin(playerid, params[])
    {
    new text[128], nachricht[144], aname[MAX_PLAYER_NAME]; //144 ist das Maximum in SendClientMessage & text ist ein string, also Array [110] lang.
    if(IstSpielerAdmin(playerid, 1))
    {
    if(sscanf(params,"s[128]",text))
    {
    return SCM(playerid,hellrot,"Benutze: /admin <Text>");
    }
    else
    {
    GetPlayerName(playerid,aname,sizeof(aname));
    format(nachricht,sizeof(nachricht),">>%s | %s: %s",sSpieler[playerid][AdminRang],aname,text); //ServerRang?? AdminRang.
    for(new i = 0;i < MAX_PLAYERS; i++)
    {
    if(IstSpielerAdmin(i, 1))
    {
    SCM(i,gelb,nachricht); //kein return in schleifen!
    }
    }
    }
    }
    return 1;
    }


    Erklärungen im Code.

    Das kannst du machen, indem du einen Timer mit einer Sekunde erstellst, und bei diesem jedes mal dem Spieler von einer variable zeit eine Sekunde abziehst.


    OnGameModeInit
    SetTimer("PersoTimer", 888, 1); //888 ist etwas genauer eine Sekunde als 1000.


    Unten im Code:
    forward PersoTimer();
    public PersoTimer()
    {
    for(new i=0; i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && PersoWurdeBestellt[i]==1)
    {
    WarteZeit[i]--;
    if(WarteZeit[i] < 1)
    {
    PersoWurdeBestellt[i]=0; //und noch ne Nachricht, dass der Perso geholt werden kann.
    }
    }
    }
    return 1;
    }


    Im Command: Timer weg machen und


    PersoWurdeBestellt[playerid] = 1;
    WarteZeit[playerid]=3600; //1 Stunde (in Sekunden)


    Beide Werte speicherst du dem Spieler in seine Datei/Datenbank wenn er den Server verlässt.

    Das liegt daran, dass du die Position des Spielers zu weit vom.Krankenhaus entfernt gesetzt hast. Deshalb siehst du nur die LOD des Objekts.


    Um das zu beheben einfach den Spieler nahe ans Krankenhaus setzen.

    Was auch immer du gemacht hast. So wird es tun:
    ShowPlayerDialog(playerid, Login, DIALOG_STYLE_PASSWORD, "San Andreas Roleplay: Login", "Willkommen zurück auf {009BFF}San Andreas Roleplay{FFFFFF}. Logge dich mit deinem Passwort ein.","Login","Abbruch");


    Nicht vergessen den Script zu kompilieren und den Server neu zu starten.

    @Poster oben: Weder noch gibt wirklich Sinn, ich würde da mal gerne sehen wir ihr die jeweilige Ansicht im Code vertreten würdet, so dass es auch funktioniert.


    --------------------------------------
    Im enum hinzufügen:
    pToBanID,
    pToBanID[128],
    Diese brauchen wir, um später die Informationen zu speichern.


    Definieren:
    #define BAN_DIALOG 1337


    Der Command:
    ocmd:ban(playerid,params[])
    {
    new pID, grund[128],string[128];
    if(!IsPlayerAnAdmin(playerid,4))return SendClientMessage(playerid,FRot,"[ERROR:] Server unknow command ['/ban'], use '/help' .");
    if(sscanf(params,"us",pID,grund))return SendClientMessage(playerid,FGrau,"Fehler: benutze /ban [ID] [Grund]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,FGrau,"Fehler: Dieser spieler ist nicht online !");
    if(IsPlayerNPC(pID))return SendClientMessage(playerid,FGrau,"Fehler: Du kannst keine NPCs bannen !");
    if(pID == playerid)return SendClientMessage(playerid,FGrau,"Fehler: Du kannst dich nicht selber bannen!");
    if(!IsPlayerAnAdmin(pID,6))
    {
    if(IsPlayerAnAdmin(pID,5))return SendClientMessage(playerid,FGrau,"Fehler: Du darfst keine admins bannen die über admin level 5 sind!");
    }
    format(string,sizeof(string),"Bis du sicher, dass du %s [ID: %d]\nmit dem Grund %s\nbannen willst?",pName[pID],pID,grund);
    SpielerInfo[playerid][pToBanID] = pID; //Hier speichern wir die eingegebene ID.
    SpielerInfo[playerid][pToBanID] = grund; //Hier speichern wir den eingegebenen Grund.
    ShowPlayerDialog(playerid, BAN_DIALOG, DIALOG_STYLE_MSGBOX, "Bestätige:", string, "Ban!", "Abbrechen");
    return 1;
    }


    OnDialogResponse:
    if(dialogid == BAN_DIALOG && response == 1)
    {
    new pID, grund[128],string[128];
    pID= SpielerInfo[playerid][pToBanID]; //Hier laden wir die ID
    grund = SpielerInfo[playerid][pToBanGrund]; //Hier laden wir den Grund
    if(!IsPlayerAnAdmin(playerid,4))return SendClientMessage(playerid,FRot,"[ERROR:] Server unknow command ['/ban'], use '/help' .");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,FGrau,"Fehler: Dieser spieler ist nicht online !");
    if(IsPlayerNPC(pID))return SendClientMessage(playerid,FGrau,"Fehler: Du kannst keine NPCs bannen !");
    if(pID == playerid)return SendClientMessage(playerid,FGrau,"Fehler: Du kannst dich nicht selber bannen!");
    if(!IsPlayerAnAdmin(pID,6))
    {
    if(IsPlayerAnAdmin(pID,5))return SendClientMessage(playerid,FGrau,"Fehler: Du darfst keine admins bannen die über admin level 5 sind!");
    }
    format(string,sizeof(string),"[SERVER:] %s [ID: %d] has been banned from the server ! Reason: %s",pName[pID],pID,grund);
    SendClientMessageToAll(FRot,string);
    SpielerInfo[pID][pGebannt] = 1;
    SpielerInfo[pID][pAdmin] = 0;
    mysql_SetString("accounts", "GebanntGrund", grund ,"Name", pName[pID]);
    Kick(pID);
    return 1;
    }


    Sollte verständlich sein, ist ja größtenteils eh dein Code, nur leicht verdreht. Ich gehe aber mal davon aus, dass es hier nicht nötig ist viel zu erklären, da der Code für sich selbst spricht.
    Falls was unklar ist, kannst du ja fragen.

    hm du hast Recht, warum?


    http://wiki.sa-mp.com/wiki/Scripting_Basics_DE#Boolean


    Boolesche Werte gibt es nur zwei. Die sind in PAWN als "true" (!= 0) und false (= 0) definiert. Du kannst, wenn du als Tag "bool" angibst, auch nur true oder false angeben, da weniger Speicher für die variable reserviert wird, und sie daher nur zwei Werte annehmen kann (0/1 = false/true). Durch die Angabe eines Integers (0/1/...) könntest du ja viel mehr angeben, was die Boolesche Variable sprengt. Was du aber machen kannst ist folgendes:


    new bool:test;
    test = bool:1;

    Das würde nun true entsprechen. Wie schon gesagt würde auch "bool:1245221" true entsprechen, da true => != 0


    --------------------


    Zum Thread:
    Das was [DT]deed in seinem ersten Post schon geschrieben hat, nur ohne bool, bzw. 1/0 geändert zu true/false (Erklärung oben^).

    Du hast auch ein Fehler, Jeffry:
    Bei Punkt 4 unten hast du playerid benutzt.


    Kommt davon wenn man zu viel Copy&Paste macht. Danke dir, sehr aufmerksam. :)


    Übrigens, da du schreibst "auch ein Fehler": Ich sprach nicht von Fehlern, die kommen vor. Es ging darum, dass sich keiner Gedanken gemacht hat warum der Code nicht tut und einfach mal ins blaue geschossen hat.

    Hier ein Video in den genau das gemacht wird, was du willst:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Ich bin zwar nicht so der Fan von Videos, aber das hier ist ganz in Ordnung. Musst du eventuell an deinen Code anpassen, zwecks Laden und Speichern.