RP Name wird nicht angezeigt

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo,


    Folgendes Problem, vor ein Paar monaten hatte ich glaube ich mit euch das mal besprochen, aber das ist nun lange her..
    Aber jetz habe ich immernoch einen Fehler, ich schicke mal die Codes


    Ganz oben:
    new RPName[MAX_PLAYERS][MAX_PLAYER_NAME];

    im register:
    format(var, 32, "RPName=%s\n",RPName[playerid]);fwrite(hFile, var);


    im Login:
    if( strcmp( key , "RPName" , true ) == 0 ) { val = ini_GetValue( Data ); format(RPName[playerid],MAX_PLAYER_NAME,"%s",val); }


    Wenn er was sagt:
    format(string, sizeof(string), "%s {787878}%s {FFFFFF}sagt: %s",akzent,RPName[playerid], text);
    ProxDetector(20.0, playerid, string,COLOR_FADE1,COLOR_FADE2,COLOR_FADE3,COLOR_FADE4,COLOR_FADE5);
    format(string, sizeof(string), "%s",text);
    SetPlayerChatBubble(playerid,string,0xFF0000FF,15,10000);
    wenn man gerade beim Registrieren ist, und den Namen einfügen soll:
    format(RPName[playerid],MAX_PLAYER_NAME,"%s",inputtext);


    Nun der Fehler:
    http://www.pic-upload.de/view-23862057/sa-mp-006.png.html


    Mein Name wird nicht abgelesen wieso auch immer..

    • Verwende nicht Funktionen wie ini_GetValue(). Diese sind uneffizient und keineswegs empfehlenswert.
    • Auch die Funktion ProxDetector() ist kompletter Schwachsinn. Da gibt es weit bessere Möglichkeiten das Vorhaben umzusetzen.
    • Das ist nun wirklich unverständlich für mich. Verwende doch direkt die "text" Variable:



    format(string, sizeof(string), "%s", text);
    SetPlayerChatBubble(playerid, string, 0xFF0000FF, 15, 10000);
    Um dein Problem zu lösen: Debugge deinen Quellcode. Schaue nach wann und wie die Variablen gesetzt werden und verfolge die Problematik zum Ausgangspunkt, um sie zu beheben.

  • Simon2202:


    • Nicht das Rad neu erfinden und einfach auf y_ini umsteigen. Besser noch: Direkt auf ein Datenbanksystem umsteigen, denn früher oder später wird man mit Filesystemen an Grenzen stoßen.
    • Bei der bekannten ProxDetector() Funktion wird viel unnötig berechnet und eine Unmenge an Variablen unnötig erstellt. Ich halte dies (eigene Kreation) für besser:



    stock Float:getDistanceBetweenCoordinates(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2) {
    return floatsqroot(floatpower(floatabs(floatsub(x2, x1)), 2) + floatpower(floatabs(floatsub(y2, y1)), 2) + floatpower(floatabs(floatsub(z2, z1)), 2));
    }


    sendLocalMessage(msg[], Float:posX, Float:posY, Float:posZ, Float:radius, interior, vw, color) {
    new Float:X,
    Float:Y,
    Float:Z,
    Float:distance;


    if(color != 0) {
    foreach(new i : playerIterator) {
    if(GetPlayerInterior(i) == interior && GetPlayerVirtualWorld(i) == vw) {
    GetPlayerPos(i, X, Y, Z);
    distance = getDistanceBetweenCoordinates(posX, posY, posZ, X, Y, Z);
    if(distance < radius) {
    SendClientMessage(i, color, msg);
    }
    }
    }
    } else {
    new Float:radiusStep = radius / 6;
    foreach(new i : playerIterator) {
    if(GetPlayerInterior(i) == interior && GetPlayerVirtualWorld(i) == vw) {
    GetPlayerPos(i, X, Y, Z);
    distance = getDistanceBetweenCoordinates(posX, posY, posZ, X, Y, Z);
    if(distance < radiusStep) {
    SendClientMessage(i, COLOR_WHITE, msg);
    } else if(distance < radiusStep * 2) {
    SendClientMessage(i, COLOR_FADE1, msg);
    } else if(distance < radiusStep * 3) {
    SendClientMessage(i, COLOR_FADE2, msg);
    } else if(distance < radiusStep * 4) {
    SendClientMessage(i, COLOR_FADE3, msg);
    } else if(distance < radiusStep * 5) {
    SendClientMessage(i, COLOR_FADE4, msg);
    } else if(distance < radiusStep * 6) {
    SendClientMessage(i, COLOR_FADE5, msg);
    }
    }
    }
    }
    }