Beiträge von Kaliber

    Also ich habe es mal getestet, hier so funktioniert es:


    stock ConvertCentMoney(Float:geld) {
    new str[32],i,tmp[16];valstr(str,floatround(geld)),i=(geld > 0) ? strlen(str)-3 : strlen(str)-4;
    for(; i>0; i-=3) strins(str,".",(geld > 0) ? i : i+1,24);
    format(tmp,sizeof tmp,"%.02f",geld),strmid(tmp,tmp,strfind(tmp,".")+1,strlen(tmp),sizeof tmp);
    return strcat(str,","),strcat(str,tmp),str;
    }


    //Beispiel wie ich es getestet habe:
    new Float:money = 39931.42;
    printf("%s$",ConvertCentMoney(money));
    //-> Output: 39.931,42$


    //Edit: Ich sag mal so wie es ist, wenn man zu große Float Variablen benutzt, dann kann Pawn das nicht mehr richtig verarbeiten! Also, nutze doch einfach 2 Variablen als int...


    mfg. :thumbup:

    Also wenn du irgendwelche Mods o.ä. hast, einfach mal deinstallieren.


    Und naja das kann an Objekten liegen, entweder die DrawDistance von den Objekten ist zu hoch, dann kann es zu einem Problem kommen (also stell die mal Testweise n bissl runter) oder du benutzt sehr oft sehr große Objekte, dass kann auch zu einem Fehler führen.


    mfg. :thumbup:

    Die Z Position die OnPlayerClickMap ausspruckt ist idR keine gültige Höhe auf der Map, so dass man mit dem Fahrzeug fallen würde.


    Das ist wohl richtig, allerdings hat der Ersteller der Include das ja selbst so gemacht, ich wollte lediglich aufzeigen, dass es ein wenig besser geht...ohne so viele Variablen..etc


    Nun, man könnte hier auch SetPlayerPosFindZ machen und dann die Position des Spielers nehmen und dann das Auto setzen. Richtig, dass wäre am Besten ;)


    Wenn das jemanden stört, kann er das ja so machen oder das MapSanAndreas Plugin nutzen :)


    mfg. :thumbup:

    Also, man kann das auch einfach so schreiben:


    #include <a_samp>
    static bool:active[MAX_PLAYERS char];
    public OnFilterScriptInit() return print("\tMap Teleporter Loaded. Edited by Kaliber");
    public OnPlayerConnect(playerid) return active{playerid}=false;
    public OnPlayerCommandText(playerid, cmdtext[]) {
    if(!strcmp(cmdtext, "/mapteleport", true)) {
    if(!active{playerid}) return SendClientMessage(playerid, -1, "Du hast den Map Teleporter {00FF40}aktiviert{FFFFFF}!"),active{playerid}=true,1;
    return SendClientMessage(playerid, -1, "Du hast den Map Teleporter {FF0000}deaktiviert{FFFFFF}!"),active{playerid}=false,1;
    }
    return 0;
    }
    public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ) {
    if(!active{playerid}) return 1;
    return (IsPlayerInAnyVehicle(playerid)) ? SetVehiclePos(GetPlayerVehicleID(playerid), fX, fY, fZ) : SetPlayerPosFindZ(playerid, fX, fY, fZ);
    }


    Das return 0; bei OnPlayerCommandText ist wichtig und strcmp gibt 0 zurück, wenn der Befehl übereinstimmt...und leere if-Abfragen sind sinnlos..logischerweise :D


    //Edit:
    Dome_:
    FaMezZz:
    Versucht mal diese Version ;)


    mfg. :thumbup:

    Schreibs mal so:


    ocmd:r(playerid,params[])
    {
    if(AFK[playerid]) return SendClientMessage(playerid,ROT,"Du kannst keine Befehle verwenden solange du AFK bist.");
    if(isPlayerInFrakt(playerid,0)) return SendClientMessage(playerid,ROT,"Du bist nicht befugt diesen Befehl zu benutzen.");
    if(!SpielerInfo[playerid][pFraktion] || SpielerInfo[playerid][pFraktion] > 3) return SendClientMessage(playerid,ROT,"Du bist nicht befugt diesen Befehl zu benutzen.");
    if(!params[0]) return SendClientMessage(playerid,DUNKELGRAU, "Benutzung: /r [Text]");
    new string[144];
    if(SpielerInfo[playerid][pRang] == 7) format(string,144,"** Leitung '%s': %s",SpielerName(playerid),params);
    else format(string,144,"** Rang %d '%s': %s",SpielerInfo[playerid][pRang],SpielerName(playerid),params);
    for(new i; i<MAX_PLAYERS; i++) {
    if(!isPlayerInFrakt(i, SpielerInfo[playerid][pFraktion])) continue;
    SendClientMessage(i, 0x7B89FFFF, string),Frakchatlog(string);
    }
    return 1;
    }


    Wenn das nicht klappt liegt der Fehler in der Funktion "Frakchatlog" ;)


    mfg. :thumbup:

    Habe es nur bis jetzt immer so gemacht.


    Ja...aber es ist dann halt anders sortiert :D


    for(new i; i<5; i++) {
    format(string,sizeof string,"Hallo ID: %d|%s",i,string);
    }


    /*
    Gibt aus:
    Hallo ID: 4|Hallo ID: 3|Hallo ID: 2|Hallo ID: 1|Hallo ID: 0|
    */


    //Und mein/unser Code gibt aus:


    for(new i; i<5; i++) {
    format(string,sizeof string,"%sHallo ID: %d|",string,i);
    }


    /*
    Gibt aus:
    Hallo ID: 0|Hallo ID: 1|Hallo ID: 2|Hallo ID: 3|Hallo ID: 4|
    */


    mfg. :rolleyes:

    Schreib es so, dass ist wesentlich besser und richtiger:


    dcmd_admins(playerid,params[])
    {
    #pragma unused params
    new string[128];
    for(new i; i < MAX_PLAYERS; i++) {
    if(!IsPlayerConnected(i) || !AccInfo[i][Level] || AccInfo[i][Hide]) continue;
    format(string, sizeof string, "%sAdmin %s (ID: %i)- Level %d - %s\n",string,PlayerName2(i),i, AccInfo[i][Level],(!AccInfo[i][OnDuty]) ? ("Busy") : ("Available"));
    }
    if(!string[0]) return ShowPlayerDialog(playerid,NO_ADMINS,DIALOG_STYLE_MSGBOX,"Online Admins","\n\n\n\nThere are no admins online.","Close","");
    return ShowPlayerDialog(playerid,DIALOG_ADMINS,DIALOG_STYLE_MSGBOX,"Online Admins",string,"Close","");
    }


    mfg. :thumbup:

    Fabi.StaR:


    Hier eine etwas kompaktere Funktion, die mehr deinen Wünschen entspricht:


    stock EditName(name[]) {
    static delimiter[][] = {"_",".",","},i,pos; //Du kannst das Array beliebig fortführen
    for(; i<sizeof delimiter; ++i) {
    pos = strfind(name,delimiter[i]);
    if(pos == -1) continue;
    name[pos] = ' ';
    }
    return name;
    }


    mfg. :thumbup:

    Okay, jetzt brauch ich nur nochmal die strcat-Funktion erklärt, weil ich Besitzer und Text mit dieser Zusammenfügen möchte und das ganze dann in einem Dialog ausgeben möchte.


    Nutze doch einfach...format da kannst du das alles zusammenfügen :wacko:

    Die Version von ElDiabolo: sieht mir Ressourcensparender aus :o


    Wenn du sscanf in deinem Script schon nutzt, kannst du das natürlich auch verwenden :rolleyes:


    public BlaBlub() {
    new string[256],query[64],besitzer[32],text[32];
    format(query, sizeof query, "SELECT `Besitzer`,`Text` FROM `Tickets` WHERE `Status` = '0'");
    mysql_query(query);
    mysql_store_result();
    while(mysql_fetch_row_format(string) == 1)
    {
    sscanf(string,"p<|>s[32]s[32]",besitzer,text);
    printf("**Spieler: %s | Text: %s**",besitzer,text);
    }
    mysql_free_result();
    }


    Der | kommt von dem MySQL-Result :rolleyes:


    mfg. :thumbup:

    Hier eine Lösung:



    public BlaBlub() {
    new string[256],query[64];
    format(query, sizeof query, "SELECT `Besitzer`,`Text` FROM `Tickets` WHERE `Status` = '0'");
    mysql_query(query);
    mysql_store_result();
    while(mysql_fetch_row_format(string) == 1)
    {
    printf("**Spieler: %s | Text: %s**",BESITZER(string),TEXT(string));
    }
    mysql_free_result();
    }


    stock TEXT(const string[]) {
    new tmp[32];
    strcat(tmp,string),strdel(tmp,0,strfind(string,"|")+1);
    return tmp;
    }


    stock BESITZER(const string[]) {
    new tmp[32];
    strcat(tmp,string),strdel(tmp,strfind(string,"|"),strlen(tmp));
    return tmp;
    }


    mfg. :thumbup: