/Members > OFFLINE

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

  • ocmd:members(playerid, params[])
    {
    // if(!IsPlayerAdmin(playerid)) return 0;
    new str[128], Cache:members;
    if(PlayerInfo[playerid][FracID] == 0) return SCM(playerid,COOLRED,"You are in no Frac");
    mysql_format(handle, str, sizeof(str), "SELECT * FROM `user` WHERE FracID = '%d'",PlayerInfo[playerid][FracID]);
    members = mysql_query(handle, str, true);
    new count = cache_num_rows();
    if(count > 0)
    {
    SendClientMessage(playerid, USAGE, "Members:");
    for(new i = 0; i < count; i++)
    {
    new username[25], Rank[25],showmembs[128];
    cache_get_value_name(i, "Name", username);
    format(showmembs,sizeof(showmembs),"%s%s %s",str,"Members",((PlayerInfo[i][pLoggedIn] == true)?("{6EF83C}[ONLINE]"):("{ff0000}[OFFLINE]")));
    ShowPlayerDialog(playerid, 345, DIALOG_STYLE_LIST, "Members", showmembs, "Choose", "Exit");
    }
    }
    else return SendClientMessage(playerid, RED, "There are currently no Members > Server Error!");
    cache_delete(members);
    return 1;
    }





    KEINE ahnung wie ich das richtig angehe xD >> https://www.pic-upload.de/view-36114114/members.png.html

  • MySQL R41-4 also das aktuellste


    Ne Idee wie ich den Code umschreiben muss ? Habe keinen Plan, habe


    sowas in der Art noch nie gemacht


    2.//



    // edit 15:50 > Hab mal den Wert von WelcomeMsg höher zu setzten als MAX_PLAYER_NAME,


    crasht leider immernoch



    [15:39:30] [INFO] Callback successfully executed.[15:39:44] [DEBUG] mysql_pquery(1, "INSERT INTO `ServerShops` (´EnterX´, `EnterY`, `EnterZ`, `ExitX`, `ExitY`,`ExitZ`,`SpecialShopName`,`WelcomeMsg`,`interior`,`MapIconID`) VALUES ('1953.741333', '-2104.513427', '13.546875', '372.485900', '-133.244598', '1001.492187','Well stacked Pizza','You entered Well stacke','5','29')", "OnServerShopCreated", "i")[15:39:44] [DEBUG] CCallback::Create(amx=0x4b07678, name='OnServerShopCreated', format='i', params=0x5af7250, param_offset=5)[15:39:44] [DEBUG] CCallback::Create - callback index for 'OnServerShopCreated': 63[15:39:44] [DEBUG] processing specifier 'i' with parameter index 0[15:39:44] [DEBUG] retrieved and pushed value '9'[15:39:44] [INFO] Callback 'OnServerShopCreated' set up for delayed execution.[15:39:44] [DEBUG] created delayed callback with 1 parameter[15:39:44] [DEBUG] CHandle::Execute(this=0x258f2d8, type=2, query=0x25909b8)[15:39:44] [DEBUG] CConnectionPool::Queue(query=0x25909b8, this=0x258b9d0)[15:39:44] [DEBUG] CHandle::Execute - return value: true[15:39:44] [DEBUG] mysql_pquery: return value: '1'[15:39:44] [DEBUG] CConnection::Execute(query=0x25909b8, this=0x5fe4020, connection=0x25b7f68)[15:39:44] [DEBUG] CQuery::Execute(this=0x25909b8, connection=0x25b7f68)[15:39:44] [ERROR] error #1064 while executing query "INSERT INTO `ServerShops` (´EnterX´, `EnterY`, `EnterZ`, `ExitX`, `ExitY`,`ExitZ`,`SpecialShopName`,`WelcomeMsg`,`interior`,`MapIconID`) VALUES ('1953.741333', '-2104.513427', '13.546875', '372.485900', '-133.244598', '1001.492187','Well stacked Pizza','You entered Well stacke','5','29')": You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '´EnterX´, `EnterY`, `EnterZ`, `ExitX`, `ExitY`,`ExitZ`,`SpecialShopName`,`Welc' at line 1[15:39:44] [DEBUG] CConnection::GetError(this=0x5fe4020, connection=0x25b7f68)[15:39:44] [DEBUG] CCallback::Create(amx=0x4b07678, name='OnQueryError', format='dsssd)[15:39:44] [DEBUG] CCallback::Create - callback index for 'OnQueryError': -10046[15:39:44] [DEBUG] processing specifier 'd'[15:39:44] [DEBUG] retrieved and pushed value '1064'[15:39:44] [DEBUG] processing specifier 's'[15:39:44] [DEBUG] retrieved and pushed value 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '´EnterX´, `EnterY`, `EnterZ`, `ExitX`, `ExitY`,`ExitZ`,`SpecialShopName`,`Welc' at line 1'[15:39:44] [DEBUG] processing specifier 's'[15:39:44] [DEBUG] retrieved and pushed value 'OnServerShopCreated'[15:39:44] [DEBUG] processing specifier 's'[15:39:44] [DEBUG] retrieved and pushed value 'INSERT INTO `ServerShops` (´EnterX´, `EnterY`, `EnterZ`, `ExitX`, `ExitY`,`ExitZ`,`SpecialShopName`,`WelcomeMsg`,`interior`,`MapIconID`) VALUES ('1953.741333', '-2104.513427', '13.546875', '372.485900', '-133.244598', '1001.492187','Well stacked Pizza','You entered Well stacke','5','29')'[15:39:44] [DEBUG] processing specifier 'd'[15:39:44] [DEBUG] retrieved and pushed value '1'[15:39:44] [INFO] Callback 'OnQueryError' set up for delayed execution.[15:39:44] [DEBUG] created delayed callback with 5 parameters[15:39:44] [DEBUG] CCallback::Execute(amx=0x4b07678, index=-10046, num_params=5)



    Geht auch mit der Vergrößerung nicht, hier mal der Original code



    format(query, sizeof(query),"INSERT INTO `ServerShops` (´EnterX´, `EnterY`, `EnterZ`, `ExitX`, `ExitY`,`ExitZ`,`SpecialShopName`,`WelcomeMsg`,`interior`,`MapIconID`) VALUES ('%f', '%f', '%f', '%f', '%f', '%f','%s','%s','%d','%d')",xc, yc, zc,ServerShop[id][ExitX],ServerShop[id][ExitY],ServerShop[id][ExitZ],ServerShop[id][SpecialShopName],ServerShop[id][WelcomeMsg],ServerShop[id][shopint],ServerShop[id][SMapIconID]);mysql_pquery(handle, query, "OnServerShopCreated", "i", id);printf(query);[15:39:44] INSERT INTO `ServerShops` (´EnterX´, `EnterY`, `EnterZ`, `ExitX`, `ExitY`,`ExitZ`,`SpecialShopName`,`WelcomeMsg`,`interior`,`MapIconID`) VALUES ('1953.741333', '-2104.513427', '13.546875', '372.485900', '-133.244598', '1001.492187','Well stacked Pizza','You entered Well stacke','5','29')[15:39:44] [debug] Server crashed due to an unknown error[15:39:45] [debug] Native backtrace:[15:39:45] [debug] #0 004016eb in ?? () from samp-server.exe[15:39:45] [debug] #1 6f6c35e9 in ?? () from plugins\mysql.DLL[15:39:45] [debug] #2 6f6c6688 in ?? () from plugins\mysql.DLL[15:39:45] [debug] #3 6f6ac52e in ?? () from plugins\mysql.DLL[15:39:45] [debug] #4 6f6adc7f in ?? () from plugins\mysql.DLL[15:39:45] [debug] #5 6f6ae3d3 in ?? () from plugins\mysql.DLL[15:39:45] [debug] #6 00469a66 in ?? () from samp-server.exe[15:39:45] [debug] #7 0048d4db in ?? () from samp-server.exe[15:39:45] [debug] #8 0049b4a1 in ?? () from samp-server.exe[15:39:45] [debug] #9 0049b4b1 in ?? () from samp-server.exe[15:39:45] [debug] Registers:

  • Was ist denn bei dem mysql_pquery die 1? Das soll der handle sein...
    Hast du irgendwo oben in deinem Script ein "new MySQL:handle;" oder ähnliches?


    Und zu MAX_PLAYER_NAME erhöht? MAX_PLAYER_NAME sind 24 Zeichen...
    Versuch es mal auf 256 zu erhöhen.


    Also so wie es aussieht, ist alles was du mit MySQL in deinem Script hast falsch.


  • ocmd:members(playerid, params[])
    {
    // if(!IsPlayerAdmin(playerid)) return 0;
    new str[128];
    if(PlayerInfo[playerid][FracID] == 0) return SCM(playerid,COOLRED,"You are in no Frac");
    mysql_format(handle, str, sizeof(str), "SELECT * FROM `user` WHERE FracID = '%d'",PlayerInfo[playerid][FracID]);
    mysql_tquery(handle, str, "OnFrakMembersLoad", "d", playerid);
    }


    forward OnFrakMembersLoad(playerid);
    public OnFrakMembersLoad(playerid)
    {
    new count;
    cache_num_rows(count);
    if(count > 0)
    {
    SendClientMessage(playerid, USAGE, "Members:");
    for(new i = 0; i < count; i++)
    {
    new username[25], Rank[25],showmembs[128];
    cache_get_value_name(i, "Name", username);
    format(showmembs,sizeof(showmembs),"%s%s %s",str,"Members",((PlayerInfo[i][pLoggedIn] == true)?("{6EF83C}[ONLINE]"):("{ff0000}[OFFLINE]")));
    ShowPlayerDialog(playerid, 345, DIALOG_STYLE_LIST, "Members", showmembs, "Choose", "Exit");
    }
    }
    else return SendClientMessage(playerid, RED, "There are currently no Members > Server Error!");
    return 1;
    }

    Sollte so klappen, ist aber ungetestet.
    Les dich am besten mal in die MySQL R41-4 rein:
    [wiki]MySQL/R40[/wiki]

  • Code
    format(showmembs,sizeof(showmembs),"%s%s %s\n",str,"Members",((PlayerInfo[i][pLoggedIn] == true)?("{6EF83C}[ONLINE]"):("{ff0000}[OFFLINE]")));
    			ShowPlayerDialog(playerid, 345, DIALOG_STYLE_LIST, "Members", showmembs, "Choose", "Exit");

    Danke schon mal soweit,


    was ist mit dem Dialog? Da wird jetzt nur [ONLINE] angezeigt, stelle ich mir irgendwie


    komplizierter vor als es vermutlich ist.


    format(showmembs,sizeof(showmembs),"%s%s %s\n",str,"Members",((username,PlayerInfo[i][pLoggedIn] == true)?("{6EF83C}[ONLINE]"):("{ff0000}[OFFLINE]")));
    ShowPlayerDialog(playerid, 345, DIALOG_STYLE_LIST, "Members", showmembs, "Choose", "Exit");

  • Du kannst das so nicht abfragen ob jemand online ist, da die playerid immer überschrieben wird.


    Stattdessen könntest du eine Funktion zum Beispiel nehmen um alle Spieler auf dem Server nach einem Namen durchzuloopen, und wenn ein Spieler mit dem Namen online ist return true wenn nicht halt return false.
    Und dann kannst du diese Funktion einfach verwenden. (Den Namen hast du bei username ja schon gespeichert.)


  • forward OnFrakMembersLoad(playerid);
    public OnFrakMembersLoad(playerid)
    {
    new count, str[128];
    cache_get_row_count(count);


    if(count > 0)
    {
    SendClientMessage(playerid, USAGE, "Members:");
    for(new i = 0; i < count; i++)
    {
    new username[25], Rank[25],showmembs[128],number;
    cache_get_value_name(i, "Name", username);
    cache_get_value_name_int(i, "number", number);
    new pid = getAccIDBesitzer(number);
    format(showmembs,sizeof(showmembs),"%s %s\n",username,((IsPlayerConnected(pid))?("{6EF83C}[ONLINE]"):("{ff0000}[OFFLINE]")));


    ShowPlayerDialog(playerid, 345, DIALOG_STYLE_TABLIST, "Members", showmembs, "Choose", "Exit");
    }
    }
    else return SendClientMessage(playerid, RED, "There are currently no Members > Server Error!");
    return 1;


    }




    Okay soweit sogut, jetzt zeigt er mir schon Username + Online Status korrekt an.


    Aber halt nur von einer Person, wie kann ich alle anzeigen lassen?

  • Pack das ShowPlayerDialog unter die Schleife.
    Das mit dem IsPlayerConnected geht immer noch nicht! Die playerid wird immer überschrieben, wenn sich der nächste einloggt, nachdem du dich eingeloggt hast, erhält er deine playerid.
    Benutz diese Funktion:

    IsPlayerConnectedEx(pname[])
    {
    new pname2[MAX_PLAYER_NAME];
    for(new i; i<MAX_PLAYERS; i++)
    {
    GetPlayerName(i, pname2);
    if(!strcmp(name,pname2, true) return true;
    }
    return false;
    }

    Und das format machst du so;
    format(showmembs,sizeof(showmembs),"%s%s %s\n",showmembs,username,((IsPlayerConnectedEx(username))?("{6EF83C}[ONLINE]"):("{ff0000}[OFFLINE]")));

  • Vielen Dank ^^ //


    Aber kurze Frage hätte ich noch :D



    Bei OnFrakMembersLoad wird ja einfach alles bis zum letzten match durchgeloopt,


    SetPVarString(playerid,"UserEditName",username);



    Heißt also wenn ich den User den ich anklicke editieren möchte, wird mir immer der letzte angezeigt, > IG getestet unter der schleife und in


    der schleife.


    Die schleife beenden nach dem ersten match wär ja auch dumm,


    Ideen?

  • Du verwendest ja den Dialog Style DIALOG_STYLE_TABLIST, also kannst du mit \t Tabs verwenden.
    Du änderst das format jetzt einfach zu;

    format(showmembs,sizeof(showmembs),"%s%s\t%s\n",showmembs,username,((IsPlayerConnectedEx(username))?("{6EF83C}[ONLINE]"):("{ff0000}[OFFLINE]")));

    Und bei OnDialogResponse, fragst du bei dem Dialog einfach den inputtext ab, welcher dann der Spielername ist.