Beiträge von d0ma

    Tacho5[playerid] = CreatePlayerTextDraw(playerid,140.000000, 393.000000, " ");
    Connecten jetzt 100 Leute 10 mal, dann hast du 1000 erstellte Textdraws obwohl man nur 100 benötigt
    Damit will ich sagen das du die nicht löscht
    ~> Lösung: Einfach for schleife bei OnGameModeInit und dann erstellen somit werden direkt für alle eines erstellt


    ?(

    • CreatePlayerTextDraw wird in OnGameModeInit nicht funktionieren (player TextDraws können nur erstellt werden wenn der Spieler online ist)
    • Und wenn hundert Leute 10 mal Connecten hat man auch nicht 1000 TextDraws! Spieler TextDraws leert der Server automatisch beim Disconnect...


    [DT]Nightstr3am hat genau die beste Methode gewählt

    Kurz gesagt: Android basiert auf Linux und "root" ist sozusagen der Adminzugang ;) Wenn du dein Handy "rootest" hast du Adminrechte und kannst somit mehr tun/verändern.

    du hast in OnPlayerUpdate ernsthaft folgenden code ?
    format(var, 32, "SHealthh=%d\n",PlayerInfo[playerid][SHealthh]);fwrite(hFile, var);


    der Server wird massiv CPU/Festplatten-geschwingikeit verbrauchen sobald mehr wie 5 Spieler auf dem Server spielen


    zum Problem:
    OnPlayerLogin musst du nicht strval sondern floatstr verwenden... da es sich wie oben schon erwähnt um eine Kommazahl(Float) handelt ;)


    Blitzer:
    Such dir was aus, einfach nach "cam" gesucht...
    http://gta-sa-mp.de/object/?searchName=cam

    hab da etwas ganz altes rausgekramt:
    TurnAroundPoint( Float:turn_around_x, Float:turn_around_y, Float:cur_x, Float:cur_y, Float:t_degrees, &Float:ret_newx, &Float:ret_newy ) // by D0erf|er
    {
    // new x pos cos(degrees)*vector_x - sin(degrees)*vector_y + turn_around_x
    ret_newx=(floatcos(t_degrees, degrees)*(cur_x-turn_around_x))-(floatsin(t_degrees, degrees)*(cur_y-turn_around_y))+turn_around_x;
    // new y pos sin(degrees)*vector_x + cos(degrees)*vector_y + turn_around_y
    ret_newy=(floatsin(t_degrees, degrees)*(cur_x-turn_around_x))+(floatcos(t_degrees, degrees)*(cur_y-turn_around_y))+turn_around_y;
    return 1;
    }
    ein wenig Mathe :)


    turn_around_x & turn_around_y: um diesen Punkt wird gedreht
    cur_x & cur_y: das Objekt Position die gedreht werden soll
    t_degrees: um wie viel Grad gedreht werden soll
    ret_newx & ret_newy: die neue Position


    Anwendung:

    // Beispiel Objekt: CreateObject(1234, 1000.0, 2000.0 , 3000.0, 0.0, 0.0, 0.0);
    new Float:neues_X, Float:neues_Y;
    TurnAroundPoint( 0.0, 0.0, 1000.0, 2000.0, 90.0, neues_X, neues_Y ); // 0.0, 0.0 = Der Punkt um den gedreht wird || 1000.0, 2000.0 = Die Position des Beispiel Objektes || 90.0 = Drehung um 90 Grad || neues_X, neues_Y = Die neue Position


    So wie du es benötigst:
    Du ersetzt alle "CreateObject" mit "CreateObjectYO" und setzt die 3 define-Werte so wie du sie brauchst, anschließend startest du den Server und schon hast du die neue Map in deiner server_log.txt (nur noch raus kopieren und in den Server einfügen)

    #define TURN_AROUND_x 0.0
    #define TURN_AROUND_y 0.0
    #define TURN_Rotation 90.0
    stock CreateObjectYO(mid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
    {
    new Float:neues_X, Float:neues_Y;
    TurnAroundPoint( TURN_AROUND_x, TURN_AROUND_y, x, y, TURN_Rotation, neues_X, neues_Y );
    printf("CreateObject(%d, %f, %f, %f, %f, %f, %f);", mid, neues_X, neues_Y, z, rx, ry, rz+TURN_Rotation);
    }

    Du willst zum beispiel 387 zu 39 runden ?


    Hier ein Code um die letzte Stelle weg zu runden:

    stock RoundLastDigit(number)
    {
    if( ( number % 10 ) >= 5 ) // ab 5 aufrunden
    {
    return (number/10)+1;
    }
    return (number/10);
    }

    wenn du "PlayerText:" verwendest dann musst du auch die Spieler Textdraws verwenden und nicht wie oben im ersten Post die normalen TextDraws...


    Hier Spieler TextDraws: http://wiki.sa-mp.com/wiki/CreatePlayerTextDraw (unten sind alle Funktionsnamen für Spieler Textdraws aufgelistet)


    Normale Textdraws: new Text:Textdraw...[MAX_PALYERS];
    Spieler Textdraws: new PlayerText:Textdraw...[MAX_PALYERS];


    wenn du das ganze durcheinander mixt dann kommen Tag Mismatch Warnungen !

    würde es nicht so machen wie XeroX es sagt.... (alles auf einmal ist immer die SCHLECHTESTE Wahl)


    Du denkst schon richtig, nicht zu viel auf einmal. Desto mehr du den Code verteilst (also nicht für alle Spieler zur selben Zeit), desto weniger wird es zu Lag kommen!!!


    Stell dir aber noch die Frage: Ist wirklich für jeden Spieler ein Timer notwendig ? Reicht es vll auch einfach nach jedem Tod (OnPlayerSpawn) den Spieler zu Updaten(ohne Timer dann) ? (oder so in der Art)

    Das Problem liegt an der Font, die in SA-MP verwendet wird.
    Das mit "\t" und Spalten ist SEHR schwer zu realisieren...


    der Grund dafür ist, das die Font, die in SA-MP verwendet wird für jeden Buchstaben eine unterschiedliche Breite verwendet.


    heißt das zum Beispiel ein A mehr Platz als ein B einnimmt und das verschiebt das ganze dann :/

    Dazu wird kein Timer benötigt:


    new oLastChatTime[MAX_PLAYERS];


    /o command (playerid, ....)
    {
    if(gettime() - oLastChatTime[playerid] < 10) return SendClientMessage(playerid, 0xFF0000FF, "Nur alle 10 Sekunden!!!!");
    oLastChatTime[playerid] = gettime();
    //........
    }