Beiträge von ErikSon

    @FerienFreak: Du musst das Ganze in einem String formatieren..
    ocmd:score(playerid,params[]) {
    new heading[32],text[64];
    format(heading,sizeof(heading),"Score von %s",Name(playerid)), format(text,sizeof(text),"Dein Score: %s",GetPVarInt(playerid,"Respektpunkte"));
    return ShowPlayerDialog(playerid, DIALOG_SCORE, DIALOG_STYLE_MSGBOX, heading, text, "Close", "");
    }

    Dann benutze mal 'strtok'..
    if(strcmp(strget(cmdtext,0), "/heal", true) == 0)
    {
    if(!IstSpielerAdmin(playerid, 1)) return SendClientMessage(playerid, RED, "SERVER: Du bist kein Admin!");
    new idx,tmp[64], ziel;
    tmp = strtok(cmdtext,idx); ziel = strval(tmp);
    if(!IsPlayerConnected(ziel)) return SendClientMessage(playerid, RED, "SERVER: Dieser Spieler ist nicht mit dem Server verbunden!");
    if(!strlen(strget(cmdtext,1))) return SendClientMessage(playerid, RED, "SERVER: Benutze: /heal ID");
    new zielname[16],playername[16],msg[128],Float:health;
    GetPlayerHealth(ziel,health);
    if(health >= 100)return SendClientMessage(playerid, RED, "SERVER: Dieser Spieler muss nicht geheilt werden!");
    SetPlayerHealth(ziel, 100);
    GetPlayerName(playerid, playername, sizeof(playername)), GetPlayerName(ziel, zielname, sizeof(zielname));
    format(msg, sizeof(msg), "SERVER: Du hast %s geheilt!", zielname),SendClientMessage(playerid, RED, msg);
    format(msg, sizeof(msg), "SERVER: %s hat dich geheilt!", playername);
    return SendClientMessage(ziel, RED, msg);
    }




    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;
    }
    Sollte so richtig sein, verwende selber nie strtok, jedoch ist es anscheinend einfach..


    //Edit: Sorry, vergessen.. Bearbeitet! @Post unten

    Nein, das brauchst du dort nicht machen..
    Du brichst den Befehl per 'return' doch eh ab ( wenn es nicht den Anforderungen entspricht ), also wozu das 'else'?


    //Edit:
    Trotzdem sind die Klammern ein Fehler, da sie am falschen Ort sind!
    Benutzt du vlt einen Commandprozessor? ( zum Beispiel 'OCMD' )

    Hey,
    versuche es mal so:
    if(strcmp(strget(cmdtext,0), "/heal", true) == 0)
    {
    if(!IstSpielerAdmin(playerid, 1)) return SendClientMessage(playerid, RED, "SERVER: Du bist kein Admin!");
    new ziel = strval(strget(cmdtext,1));
    if(!IsPlayerConnected(ziel)) return SendClientMessage(playerid, RED, "SERVER: Dieser Spieler ist nicht mit dem Server verbunden!");
    if(!strlen(strget(cmdtext,1))) return SendClientMessage(playerid, RED, "SERVER: Benutze: /heal ID");
    new zielname[512],playername[512],msg[128],Float:health;
    GetPlayerHealth(ziel,health);
    if(health >= 100)return SendClientMessage(playerid, RED, "SERVER: Dieser Spieler muss nicht geheilt werden!");
    SetPlayerHealth(ziel, 100);
    GetPlayerName(playerid, playername, sizeof(playername)), GetPlayerName(ziel, zielname, sizeof(zielname));
    format(msg, sizeof(msg), "SERVER: Du hast %s geheilt!", zielname),SendClientMessage(playerid, RED, msg);
    format(msg, sizeof(msg), "SERVER: %s hat dich geheilt!", playername);
    return SendClientMessage(ziel, RED, msg);
    }
    Du hast ziemlich viele unnötige Klammern gemacht!
    Wenn du etwas returnst, darfst du hinterher keine Klammer auf mehr machen ( direkt danach )
    Beispiel:
    if(!IsPlayerConnected(ziel)) return SendClientMessage(playerid, RED, "SERVER: Dieser Spieler ist nicht mit dem Server verbunden!");
    {
    Das ergibt keinen Sinn!

    Hey,
    versuche es mal so:
    if(!isAdmin(playerid,3)) return SendClientMessage(playerid,ROT,"Info: Du bist dazu nicht befugt!");
    new pID, weapon, ammunation;
    if(sscanf(params,"udd",pID, weapon, ammunation))return SendClientMessage(playerid,ROT,"Benutze /givegun [playerid] [waffen ID] [munition]");
    if(weapon < 0 || weapon > 54)return SendClientMessage(playerid,ROT, "Error: Bitte gib eine gültige Waffen-ID an (0-54)!");
    GivePlayerWeapon(pID, weapon, ammunation);
    new string[128],gunname[32];
    GetWeaponName(weapon,gunname,sizeof(gunname)); //Waffenname auslesen
    format(string, sizeof(string),"Du hast %s eine %s gegeben mit %i Muni",getPlayerName(pID), gunname, ammunation);
    SendClientMessage(playerid, ROT, string);
    format(string, sizeof(string),"Du hast von %s eine %s bekommen mit %i Muni",getPlayerName(playerid), gunname, ammunation);
    return SendClientMessage(pID, ROT, string);


    Du hast einen Integer als String ausgegeben.. -> Deswegen stand dort nichts.
    Außerdem musst du den Waffennamen auslesen!

    PStar: Warum speicherst du es unter OnPlayerDisconnect und in der Funktion "SpielerSpeichern"?
    Einmal reicht doch vollkommen ;)


    stock SpielerSpeichern(playerid){
    new name[MAX_PLAYER_NAME],Spielerdatei[64], datum[20], string[100],jahr, monat, tag, stunde, minute, sekunde;
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    if(GetPVarInt(playerid, "loggedin")){
    dini_IntSet(Spielerdatei,"Interior",GetPVarInt(playerid,"Interior"));
    dini_IntSet(Spielerdatei,"VWorld",GetPVarInt(playerid,"VWorld"));
    //Alles speichern
    return 1;
    }
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason){
    SpielerSpeichern(playerid);
    return 1;
    }

    1. Ja, genau..
    2. Nein.. So
    ocmd:betreten(playerid)
    {
    new h_id = NearestHaus (playerid);
    if(h_id == -1)return SendClientMessage(playerid,-1,"Du bist nicht in der Nähe eines Hauses!");
    if(Haus[h_id][haus_lock] == 1)return SendClientMessage(playerid,-1,"Das Haus ist verschlossen!");


    SetPlayerInterior(playerid,Haus[h_id][haus_int]);
    SetPlayerVirtualWorld(playerid,Haus[h_id][haus_vw]);
    SetPVarInt(playerid,"ImHaus",h_id);
    SendClientMessage(playerid,-1,"Du hast das Haus betreten.");
    return SetPlayerPos(playerid,Haus[h_id][haus_xi],Haus[h_id][haus_yi],Haus[h_id][haus_zi]);
    }


    #Handy

    Mach mal das SetPlayerPos vor dem 'return ...'


    Die Abfrage bei der stock-Funktion gibt das näheste Haus (die ID) zurück. .
    Bei dem Befehl 'betreten' kannst du 'NearestHaus' auch einer Integer-Variable zuteilen, dann frisst das auch noch weniger Ressourcen. Dann musst du aber auch überall anstatt 'NearestHaus (playerid)' 》beispielsweise 'h_id' machen...

    Kann es sein, dass du unter "OnPlayerSpawn" einige Objekte löscht? -> Ja, werden


    Bei OnplayerSpawn steht nix davon nur das halt was ich Weg Gemappt habe


    Also stehts ja doch dort? .. :rolleyes:


    RemoveBuildingForPlayer(playerid, 5858, 1214.1484, -913.4453, 43.0547, 0.25);
    RemoveBuildingForPlayer(playerid, 1522, 1199.9688, -917.6406, 42.0234, 0.25);
    RemoveBuildingForPlayer(playerid, 6010, 1214.1484, -913.4453, 43.0547, 0.25);


    //Fahrschule
    RemoveBuildingForPlayer(playerid, 11372, -2076.4375, -107.9297, 36.9688, 0.25);
    RemoveBuildingForPlayer(playerid, 11014, -2076.4375, -107.9297, 36.9688, 0.25);


    Das könnte das Problem sein, da Objekte, die bereits bei dem Spieler nicht mehr existieren, trotzdem versucht werden, zu entfernen, was dann zu einem "Standbild" führt..


    Also, der Spieler connected -> wird gespawnt | Objekte werden entfernt. -> Spieler stirbt -> Wird gespawnt | Objekte werden erneut versucht zu entfernen -> Spieler stirbt -> Wird gespawnt | Objekte werden erneut versucht zu entfernen -> Crash / "Standbild"

    Kann es sein, dass du unter "OnPlayerSpawn" einige Objekte löscht?
    Das könnte das Problem sein, da Objekte, die bereits bei dem Spieler nicht mehr existieren, trotzdem versucht werden, zu entfernen, was dann zu einem "Standbild" führt..


    //Edit: @Post unten: @GameComander:
    Du solltest unsere Fragen / etc auch schon beantworten, wenn du willst, dass wir dir helfen..!

    Und warum ist dann nur eins dort..?


    ) VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", i, escape(name), escape(Tag), escape(CRank1), escape(CRank2), escape(CRank3), escape(CRank4), escape(CRank5), escape(CRank6));


    Kenne mich damit nicht aus, aber muss das dann nicht eher so?:
    ) VALUES "( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')[size=18]"[/size], i, escape(name), escape(Tag), escape(CRank1), escape(CRank2), escape(CRank3), escape(CRank4), escape(CRank5), escape(CRank6));