Angepinnt [SAMMELTHREAD] Kleine Scripting Fragen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hast ein Enum dazu?

    Also die X, Y und Z Koordinaten, wo stehen die denn drinnen.

    Im Prinzip loopst durch alle durch, nimmst von jedem den Abstand zu dem Spieler und nimmst die id von dem, wo der Abstand am kleinsten ist und solltest noch auf einen max Abstand prüfen, sodass er auch wirklich davor steht :)


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Quellcode

    1. MoveDynamicObject(Holzfb[i][holzfb_ID], Holzfb[i][holzfb_x], Holzfb[i][holzfb_y]+0.001, Holzfb[i][holzfb_z], 0.002, Holzfb[i][holzfb_urx], Holzfb[i][holzfb_ury], Holzfb[i][holzfb_urz]);
    Warum wird das Object direkt Umgeworfen ?
    Der Baum steht in der Rotation 0.0.0 ich Move ihn da auf 90.0.0 aber er fällt direkt um ?
    youtube.com/channel/UC5TZUUd86…AZ4dYQ?view_as=subscriber

    Biete Scripting Service an bei Interesse ->Pn
    Verkaufe Selfmade Script bei Interesse -> Pn
  • Wie wird der Name denn übergeben?

    Oder willste den Spielernamen speichern?

    Theoretisch einfach mit:

    PAWN-Quellcode

    1. format(ATMPlayer[playerid], sizeof(ATMPlayer[]), inputtext);


    Für Zwischenspeicherung eigenen sich aber auch gut PVars, da man diese nach temporärer Nutzung wieder löschen kann :)


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Danke, perfekt.

    Sollte dementsprechend so sein, jedoch werden ATM's nur manchmal gelöscht und ich kriege öfters eine Warnung, dass ich nicht in der Nähe bin. Letztendlich funktioniert dann auch derjenige ATM nicht mehr.. :D

    PAWN-Quellcode

    1. CMD:delete(playerid, params[])
    2. {
    3. new str[32];
    4. if(sscanf(params, "s[32]", str))return SendClientMessage(playerid, COLOR_GREY, "Verwendung: /delete [ATM]");
    5. if(strcmp(str, "ATM", true) == 0)
    6. {
    7. for(new i=0;i<MAX_ATM;i++)
    8. {
    9. if(IsPlayerInRangeOfPoint(playerid, 1.5, ATMInfo[i][aPos][0], ATMInfo[i][aPos][1], ATMInfo[i][aPos][2]))
    10. {
    11. ATMInfo[i][aPos][0] = 0.0;
    12. ATMInfo[i][aPos][1] = 0.0;
    13. ATMInfo[i][aPos][2] = 0.0;
    14. ATMInfo[i][aPos][3] = 0.0;
    15. ATMInfo[i][aPos][4] = 0.0;
    16. ATMInfo[i][aPos][5] = 0.0;
    17. DestroyDynamicObject(ATMInfo[i][aObject]);
    18. DestroyDynamic3DTextLabel(ATMInfo[i][aLabel]);
    19. ATMInfo[i][aLabel] = Text3D: INVALID_3DTEXT_ID;
    20. new query[128];
    21. mysql_format(MySQLConnection, query, sizeof(query), "DELETE FROM `server_atm` WHERE `ID` = '%d' LIMIT 1", i);
    22. mysql_query(MySQLConnection, query);
    23. }
    24. }
    25. return SendClientMessage(playerid, COLOR_GREY, "Du befindest dich nicht in der Nähe eines Bankautomaten.");
    26. }
    27. return 1;
    28. }
    Alles anzeigen
  • Ebenso danke. Was mir komisch erscheint ist, ich erstelle beispielweise 3 ATM's In-Game.
    Diese werden in die Datenbank eingetragen und lediglich 1 funktioniert davon.

    Ich weiß nicht woran es liegt. Ich versuche Sie zu löschen, lediglich der funktionierende lässt sich löschen. Object alles wird entfernt, aber aus der Datenbank wird der ATM eben nicht entfernt.

    Erstellen/Löschen:

    PAWN-Quellcode

    1. CMD:create(playerid, params[])
    2. {
    3. new str[32];
    4. if(sscanf(params, "s[32]", str))return SendClientMessage(playerid, COLOR_GREY, "Verwendung: /create [ATM]");
    5. if(strcmp(str, "ATM", true) == 0)
    6. {
    7. new id = GetFreeATM();
    8. if(id == -1) return SendClientMessage(playerid, COLOR_GREY, "Der Server hat die maximale Anzahl an Bankautomaten erreicht. ("#MAX_ATM"/"#MAX_ATM")");
    9. new Float:Pos[3], Object;
    10. GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
    11. GetXYInFrontOfPlayer(playerid, Pos[0], Pos[1], 3.0);
    12. Object = CreateDynamicObject(19526, Pos[0], Pos[1], Pos[2], 0.0, 0.0, 0.0, -1, -1);
    13. EditDynamicObject(playerid, Object);
    14. ATMEdit[playerid] = true;
    15. }
    16. return 1;
    17. }
    18. CMD:delete(playerid, params[])
    19. {
    20. new str[32];
    21. if(sscanf(params, "s[32]", str))return SendClientMessage(playerid, COLOR_GREY, "Verwendung: /delete [ATM]");
    22. if(strcmp(str, "ATM", true) == 0)
    23. {
    24. for(new i=0;i<MAX_ATM;i++)
    25. {
    26. if(IsPlayerInRangeOfPoint(playerid, 3.0, ATMInfo[i][aPos][0], ATMInfo[i][aPos][1], ATMInfo[i][aPos][2]))
    27. {
    28. ATMInfo[i][aPos][0] = 0.0;
    29. ATMInfo[i][aPos][1] = 0.0;
    30. ATMInfo[i][aPos][2] = 0.0;
    31. ATMInfo[i][aPos][3] = 0.0;
    32. ATMInfo[i][aPos][4] = 0.0;
    33. ATMInfo[i][aPos][5] = 0.0;
    34. DestroyDynamicObject(ATMInfo[i][aObject]);
    35. DestroyDynamic3DTextLabel(ATMInfo[i][aLabel]);
    36. ATMInfo[i][aLabel] = Text3D: INVALID_3DTEXT_ID;
    37. new query[128];
    38. mysql_format(MySQLConnection, query, sizeof(query), "DELETE FROM `server_atm` WHERE `ID` = '%d' LIMIT 1", i);
    39. mysql_query(MySQLConnection, query);
    40. return 1;
    41. }
    42. }
    43. return SendClientMessage(playerid, COLOR_GREY, "Du befindest dich nicht in der Nähe eines Bankautomaten.");
    44. }
    45. return 1;
    46. }
    Alles anzeigen


    PAWN-Quellcode

    1. stock GetFreeATM()
    2. {
    3. new szQuery[64], rows;
    4. for(new id = 0; id < MAX_ATM; id++)
    5. {
    6. mysql_format(MySQLConnection,szQuery,sizeof(szQuery),"SELECT * FROM `server_atm` WHERE `ID` = '%d'", id);
    7. mysql_query(MySQLConnection,szQuery);
    8. cache_get_row_count(rows);
    9. if(rows == 0) return id;
    10. }
    11. return -1;
    12. }
    Alles anzeigen

  • Kleines Beispiel

    Quellcode

    1. mysql_format(handle, query, sizeof(query), "SELECT * FROM Accounts WHERE Name = '%e' AND password = MD5('%e')", pInfo[playerid][pName], inputtext);
    2. mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
    3. //Du kannst nicht hier das Cache_.... verwenden da dann immer 0 herraus kommt


    Quellcode

    1. Sondern hier ( wie Kaliber sagt ein anderer Callback als da wo den Mysql Befehl ausführst )
    2. public OnUserLogin(playerid)
    3. {
    4. new rows;
    5. cache_get_row_count(rows);
    6. if(rows == 0)
    7. {
    8. ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "{FFFFFF}Anmeldung", "{FFFFFF}Bitte logge Dich ein:\n{FF0000}Falsches Passwort!", "{FFFFFF}Ok", "{FFFFFF}Abbrechen");
    9. }
    10. else
    11. {
    12. cache_get_value_name_int(0, "ID", pInfo[playerid][p_id]);
    13. cache_get_value_name_int(0, "Skin", pInfo[playerid][pSkin]);
    Alles anzeigen
    youtube.com/channel/UC5TZUUd86…AZ4dYQ?view_as=subscriber

    Biete Scripting Service an bei Interesse ->Pn
    Verkaufe Selfmade Script bei Interesse -> Pn
  • Tue ich doch bei mir gar nicht?

    PAWN-Quellcode

    1. CMD:create(playerid, params[])
    2. {
    3. new str[32];
    4. if(sscanf(params, "s[32]", str))return SendClientMessage(playerid, COLOR_GREY, "Verwendung: /create [ATM]");
    5. if(strcmp(str, "ATM", true) == 0)
    6. {
    7. new id = GetFreeATM();
    8. if(id == -1) return SendClientMessage(playerid, COLOR_GREY, "Der Server hat die maximale Anzahl an Bankautomaten erreicht. ("#MAX_ATM"/"#MAX_ATM")");
    9. new Float:Pos[3], Object;
    10. GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
    11. GetXYInFrontOfPlayer(playerid, Pos[0], Pos[1], 3.0);
    12. Object = CreateDynamicObject(19526, Pos[0], Pos[1], Pos[2], 0.0, 0.0, 0.0, -1, -1);
    13. EditDynamicObject(playerid, Object);
    14. ATMEdit[playerid] = true;
    15. }
    16. return 1;
    17. }
    Alles anzeigen
  • FamouZz_ schrieb:

    stock GetFreeATM()
    Schreib die Funktion am Einfachsten mal so:

    C-Quellcode

    1. stock GetFreeATM()
    2. {
    3. for(new id; id < MAX_ATM; id++)
    4. {
    5. if(!ATMInfo[id][aObject]) return id;
    6. }
    7. return -1;
    8. }

    und bei deinem Create, die Objekt Variable macht da keinen Sinn.

    Schreib das mal so:


    C-Quellcode

    1. new Float:Pos[3];
    2. GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
    3. GetXYInFrontOfPlayer(playerid, Pos[0], Pos[1], 3.0);
    4. ATMInfo[id][aObject] = CreateDynamicObject(19526, Pos[0], Pos[1], Pos[2], 0.0, 0.0, 0.0, -1, -1);
    5. EditDynamicObject(playerid, ATMInfo[id][aObject]);
    6. ATMEdit[playerid] = true;


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Passt perfekt. Entschuldige mich, wenn ich dir am Anfang nicht folgen konnte. Habe das mit der Objekt Variable erst gerade gesehen.

    Ein einziges Problem stellt sich mir noch.
    Ich habe ein System, welches einen Spieler ermöglicht, Überweisungen auszuführen, während der Spieler offline ist.
    Das ganze funktioniert auch halb, ich überweise beispielweise den Spieler Finn Geld und es funktioniert, nehme ich einen anderen Spieler in der Datenbank bekomme ich die Meldung, dass der Account nicht gefunden wurde.

    PAWN-Quellcode

    1. public Server_ATMTranslate(playerid)
    2. {
    3. new rows = cache_num_rows();
    4. if(rows)
    5. {
    6. new ID, LastMoney, query[128], PIN;
    7. cache_get_value_name_int(0, "ID", ID);
    8. cache_get_value_name_int(0, "Bank", LastMoney);
    9. cache_get_value_name_int(0, "PIN", PIN);
    10. if(PIN == 0)
    11. {
    12. strdel(DialogString, 0, sizeof(DialogString));
    13. format(DialogString, sizeof(DialogString),""HTML_SERVER1"Fehler:"HTML_SERVER2" Der angegebene Spieler hat noch kein Konto bei der Bank of SA\n\n"HTML_SERVER2"Willkommen bei der "HTML_SERVER1"Bank of SA"HTML_SERVER2",\n"HTML_SERVER2"bitte gebe nun den gewünschten Spieler an, welchen du ("HTML_SERVER1"$%d"HTML_SERVER2") überweisen möchtest.\n\n", ATMAmount[playerid]);
    14. strcat(DialogString, ""HTML_SERVER1"Info: "HTML_SERVER2"Bitte gebe nun in das untere Feld den Namen ein, hierbei ist es irrelevant ob er online oder offline ist.");
    15. ShowPlayerDialog(playerid, DIALOG_ATMTRANSLATEPLAYER, DIALOG_STYLE_INPUT, ""#HTML_SERVER1""#SERVER_NAME" "HTML_SERVER2"- Bankautomat (Geld überweisen)", DialogString, "Bestätigen", "Zurück");
    16. return 1;
    17. }
    18. PlayerInfo[playerid][pBank] -= ATMAmount[playerid];
    19. LastMoney += ATMAmount[playerid];
    20. mysql_format(MySQLConnection, query, sizeof(query), "UPDATE `server_accounts` SET `Bank` = '%d' WHERE `ID` = '%d' LIMIT 1", LastMoney, ID);
    21. mysql_query(MySQLConnection, query);
    22. strdel(DialogString, 0, sizeof(DialogString));
    23. format(DialogString, sizeof(DialogString),""HTML_SERVER2"Willkommen bei der "HTML_SERVER1"Bank of SA"HTML_SERVER2",\n"HTML_SERVER2"du hast dem offline Spieler "HTML_SERVER1"%s "HTML_SERVER2"erfolgreich ("HTML_SERVER1"$%d"HTML_SERVER2") auf sein Bankkonto überwiesen.\n\n"HTML_SERVER1"Info: "HTML_SERVER2"Diese Transaktion ist nun ebenfalls in deiner Transaktionsübersicht vorhanden.", ATMPlayer[playerid] , ATMAmount[playerid]);
    24. ShowPlayerDialog(playerid, DIALOG_ATMTRANSLATEFINISH, DIALOG_STYLE_MSGBOX, ""#HTML_SERVER1""#SERVER_NAME" "HTML_SERVER2"- Bankautomat (Geld überweisen)", DialogString, "Schließen", "");
    25. new query1[512], timestring[256], Day, Month, Year, Hour, Minute, Second;
    26. getdate(Year, Month, Day);
    27. gettime(Hour, Minute, Second);
    28. format(timestring, sizeof(timestring),"%02d.%02d.%d - %02d:%02d:%02d", Day, Month, Year, Hour, Minute, Second);
    29. mysql_format(MySQLConnection, query1, sizeof(query1),"INSERT INTO `server_atmlog`(`Absender`, `Empfänger`, `Zeit`, `Betrag`) VALUES ('%e', '%e', '%s', '%d')", PlayerInfo[playerid][pName], ATMPlayer[playerid], timestring, ATMAmount[playerid]);
    30. mysql_query(MySQLConnection, query1);
    31. }
    32. else
    33. {
    34. strdel(DialogString, 0, sizeof(DialogString));
    35. format(DialogString, sizeof(DialogString),""HTML_SERVER1"Fehler:"HTML_SERVER2" Der angegebene Spieler existiert nicht in der Datenbank\n\n"HTML_SERVER2"Willkommen bei der "HTML_SERVER1"Bank of SA"HTML_SERVER2",\n"HTML_SERVER2"bitte gebe nun den gewünschten Spieler an, welchen du ("HTML_SERVER1"$%d"HTML_SERVER2") überweisen möchtest.\n\n"HTML_SERVER1"Info: "HTML_SERVER2"Bitte gebe nun in das untere Feld den Namen ein, hierbei ist es irrelevant ob er online oder offline ist.", ATMAmount[playerid]);
    36. ShowPlayerDialog(playerid, DIALOG_ATMTRANSLATEPLAYER, DIALOG_STYLE_INPUT, ""#HTML_SERVER1""#SERVER_NAME" "HTML_SERVER2"- Bankautomat (Geld überweisen)", DialogString, "Bestätigen", "Zurück");
    37. return 1;
    38. }
    39. return 1;
    40. }
    Alles anzeigen


    PAWN-Quellcode

    1. format(ATMPlayer[playerid], sizeof(ATMPlayer[]), inputtext);
    2. new query[128];
    3. mysql_format(MySQLConnection, query, sizeof(query), "SELECT * FROM server_accounts WHERE Name = '%e' LIMIT 1", inputtext);
    4. mysql_pquery(MySQLConnection, query, "Server_ATMTranslate", "d", playerid);
  • FamouZz_ schrieb:

    dass der Account nicht gefunden wurde.
    Nur als Info, du kannst auch direkt inputtext im mysql_format verwenden, musst es da nicht in eine Variable packen :)

    Zu dem Fehler, printe dir doch mal dein Query und dann schau in PHPMyAdmin nach, lass das query laufen und schau, was er dir da ausgibt.

    Wahrscheinlich existiert der Spielername dann wirklich nicht :D


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Achso, okay danke. :)

    Der query scheint richtig zu laufen

    SQL-Abfrage

    1. SELECT * FROM server_accounts WHERE Name = 'Peter' LIMIT 1
    /e:
    Es kommt immer nur (befördert), obwohl ich ihm einen niedrigeren Rang setze?

    PAWN-Quellcode

    1. CMD:makeadmin(playerid, params[])
    2. {
    3. new playerID, Rang, string[256];
    4. //if(PlayerInfo[playerid][pAdmin] < 6)return SendClientMessage(playerid, COLOR_GREY, ERROR_ADMIN);
    5. if(sscanf(params, "ui", playerID, Rang))return SendClientMessage(playerid, COLOR_GREY, "Verwendung: /makeadmin [SpielerID/Teilname] [Rang]");
    6. if(Rang < 0 || Rang > 6)return SendClientMessage(playerid, COLOR_GREY, "Verwendung: /makeadmin [SpielerID/Teilname] [Rang (0-6)]");
    7. if(!IsPlayerConnected(playerID))return SendClientMessage(playerid, COLOR_GREY, ERROR_OFFLINE);
    8. if(!PlayerInfo[playerID][pLogin])return SendClientMessage(playerid, COLOR_GREY, ERROR_LOGIN);
    9. if(Rang < PlayerInfo[playerID][pAdmin])
    10. {
    11. PlayerInfo[playerID][pAdmin] = Rang;
    12. if(Rang == 0)
    13. {
    14. format(string, sizeof(string),"AdminCMD: %s %s hat dich aus dem Team geworfen", GetPlayerAdminName(playerid), PlayerInfo[playerid][pName]);
    15. SendClientMessage(playerID, COLOR_LIGHTBLUE, string);
    16. format(string, sizeof(string),"AdminCMD: Du hast %s aus dem Team geworfen", PlayerInfo[playerID][pName]);
    17. SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    18. }
    19. else
    20. {
    21. format(string, sizeof(string),"AdminCMD: %s %s hat dich zum Team-Rang %s degradiert", GetPlayerAdminName(playerid), PlayerInfo[playerid][pName], GetPlayerAdminName(playerID));
    22. SendClientMessage(playerID, COLOR_LIGHTBLUE, string);
    23. format(string, sizeof(string),"AdminCMD: Du hast %s zum Team-Rang %s degradiert", PlayerInfo[playerID][pName], GetPlayerAdminName(playerID));
    24. SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    25. }
    26. }
    27. else
    28. {
    29. format(string, sizeof(string),"AdminCMD: %s %s hat dich zum Team-Rang %s befördert", GetPlayerAdminName(playerid), PlayerInfo[playerid][pName], GetPlayerAdminName(playerID));
    30. SendClientMessage(playerID, COLOR_LIGHTBLUE, string);
    31. format(string, sizeof(string),"AdminCMD: Du hast %s zum Team-Rang %s befördert", PlayerInfo[playerID][pName], GetPlayerAdminName(playerID));
    32. SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    33. }
    34. return 1;
    35. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von FamouZz_ ()

    Beitrag von FamouZz_ ()

    Dieser Beitrag wurde vom Autor gelöscht ().