Beiträge von SmD

    ich weis nicht ob meine antwort hier noch gebraucht wird, aber so würde es funktionieren:




    if(GetPlayerAnimationIndex(playerid))
    {
    new animlib[32];
    new animname[32];
    GetAnimationName(GetPlayerAnimationIndex(playerid),animlib,32,animname,32);
    if(!strcmp(animname,"VEND_USE",true))
    {
    new Float:phealth;
    GetPlayerHealth(playerid,phealth);
    SetPlayerHealth(playerid,phealth);
    ClearAnimations(playerid);
    }
    return 0;
    }


    //edit: das ganze unter OnPlayerUpdate


    ocmd:setskin(playerid,params[])
    {
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFF0000FF,"Du bist kein Admin!");
    new pID,skinid;
    if(sscanf(params,"ii",pID,skinid)) return SendClientMessage(playerid,0xFFFFFFFF,"Info: /setskin [playerid] [Skin-ID]");
    if(skinid < 0 || skinid > 299) return SendClientMessage(playerid,0xFF0000FF,"Ungültige Skin-ID!");
    SetPlayerSkin(pID,skinid);
    return 1;
    }

    um z.b. geld in eine spielerdatei zu speichern wäre das ein beispiel:

    new playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,MAX_PLAYER_NAME);
    new spielerdatei[64];
    format(spielerdatei,sizeof(spielerdatei),"%s.ini",playername);
    dini_IntSet(spielerdatei,"Geld",GetPlayerMoney(playerid));

    was funktioniert denn nicht?
    es gibt aber auch gute tutorials und erklärungen
    z.B. forum.sa-mp.de/san-andreas-multiplayer/tutorials/6569-dateiensystem-dini-dateien-erstellen-löschen-speichern-laden/?page=Thread&threadID=6569

    oben ins script:



    forward knastzeit(pID);
    new Frei[MAX_PLAYERS] = -1; //das durch die alte ersetzen


    dann erstellst du dir unten im script eine neue funktion:



    public knastzeit(pID)
    {
    if(Frei[pID] == 0)
    {
    //das was passiert wenn er seine zeit abgesessen hat
    Frei[pID] = -1;
    }
    else
    {
    Frei[pID]--;
    SetTimerEx("knastzeit",60000,0,"i",pID);
    }
    return 1;
    }


    und in deinem einbuchten command:



    SetTimerEx("knastzeit",60000,0,"i",pID);


    und ersetzt "Frei[pID] = 240*wantedlevel"
    durch "Frei[pID] = 3*wantedlevel", da mein lösungsvorschlag mit minuten arbeitet


    dann der befehl:



    if(!strcmp(cmdtext,"/knastzeit",true))
    {
    if(Frei[playerid] == -1) return SendClientMessage(playerid,0xFFFFFFFF,"Du sitzt nicht im Knast");
    new string[256];
    format(string,sizeof(string),"Du musst noch %i Minuten im Knast sitzen", Frei[playerid]);
    SendClientMessage(playerid,0xFFFFFFFF,string);
    return 1;
    }


    //edit


    wegen dem aus dem knast cheaten unter onplayerspawn:



    if(Frei[playerid] != -1)
    {
    //hier der knastport
    SetTimerEx("knastzeit",60000,0"i",playerid);
    }


    if(!strcmp(cmdtext,"/time",true,5))
    {
    if(cmdtext[5] == 0) return SendClientMessage(playerid,0xFFFF00FF,"BEFEHL: /time [Stunde]"); // wenn der Spieler keine parameter angegeben wird ihm der befehl gezeigt
    new time = strval(cmdtext[5]); //in die variable "time" wird geschrieben was der spieler für eine stunde angegeben hat
    if(time < 1 || time > 24) return SendClientMessage(playerid,0xFF0000FF,"Du kannst nur Zahlen zwischen 1 und 24 angeben");
    SetWorldTime(time); //Die Tageszeit, also die Stunde, wird auf dem Server verändert
    return 1;
    }

    dcmd_f(playerid, params[])
    {
    if(GetPlayerFraktion(playerid, 1)) return SendClientMessage(playerid, COLOR_GREY, "*:: Du bist in keiner Fraktion. ::*");
    new str[256];
    if(sscanf(params, "s", str)) return SendClientMessage(playerid, COLOR_GREY, "*:: /f [Text] :: Fraktionchat ::*");
    if(strlen(str) < 4 || strlen(str) > 255) return SendClientMessage(playerid, COLOR_GREY, "*:: Die Nachricht muss zwischen 4 und 255 Buchstaben lang sein. ::*");
    new string[256];
    if(GetPlayerFraktion(playerid, 3))
    {
    switch(PlayerInfo[playerid][pRank])
    {
    case 8: { format(string, sizeof(string), "** (( Director %s: %s )) **", ReadName(playerid), str); }
    case 7: { format(string, sizeof(string), "** (( Deputy Director %s: %s )) **", ReadName(playerid), str); }
    case 6: { format(string, sizeof(string), "** (( Assistant Director %s: %s )) **", ReadName(playerid), str); }
    case 5: { format(string, sizeof(string), "** (( Special Agent in Charge %s: %s )) **", ReadName(playerid), str); }
    case 4: { format(string, sizeof(string), "** (( Assistant Special Agent in Charge %s: %s )) **", ReadName(playerid), str); }
    case 3: { format(string, sizeof(string), "** (( Supervisory Special Agent %s: %s )) **", ReadName(playerid), str); }
    case 2: { format(string, sizeof(string), "** (( Special Agent %s: %s )) **", ReadName(playerid), str); }
    case 1: { format(string, sizeof(string), "** (( New Agent %s: %s )) **", ReadName(playerid), str); }
    case 0: { format(string, sizeof(string), "** (( New Agent %s: %s )) **", ReadName(playerid), str); }
    }
    SendMessage(PlayerInfo[playerid][pMember], COLOR_YELLOW, string);
    SendMessage(PlayerInfo[playerid][pLeader], COLOR_YELLOW, string);
    FraktionLog(string);
    return 1;
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "*:: Du bist in keiner Fraktion ::*");
    return 1;
    }
    return 1;
    }


    man könnte statt switch auf die normale if-abfrage verwenden ich finde switch aber etwas besser

    um positionen abzuspeichern machst du dir einfach ein paar variabeln:
    new Float:x,Float:y,Float:z;
    als beispiel und ließt dann die position mit GetPlayerPos aus.
    dann schreibst du mit dini in die dateien, z.B.:
    dini_FloatSet(spielerdatei,"PosX",x);


    das entscheidende dabei ist, dass du Float statt Int(eger) benutzt da eine koordinate etwas so aussieht: 1024.00486
    und int nur ganze zahlen umfasst

    du kannst mit mta auch die geschlossenen machen, du musst einfach nur ein weiteres tor einfügen und es in die "offene position" setzen