[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • @[LnD]JustMe.77: Das ist dann relativ kompliziert. Du benötigst eine Datei in die du alle deine Admins rein schreibst und darüber dann ausgeben lässt. Kommt jemand dazu, musst du ihn der Datei hinzufügen (fwrite) und wenn jemand das Team verlässt musst du ihn entfernen (alle Zeilen auslesen, wieder in die Datei schreiben, außer die Zeile mit entsprechendem Name).


    Grapefruit:
    Du setzt das wahrscheinlich nicht auf 0 zurück.
    Schreibe es dann einfach so:
    public OnPlayerDisconnect(playerid, reason)
    {
    new Float:x, Float:y, Float:z, string[80], hour, mins, sec;
    SpielerInfo[playerid][sLogout] = gettime()+60;
    GetPlayerPos(playerid, x, y, z);
    gettime(hour, mins, sec);
    new pickup = CreatePickup(1272, 2, x, y, z, -1);
    format(string, sizeof(string), "*%s*\n**%d.%d.%d", SpielerInfo[playerid][sName], hour, mins, sec);
    new Text3D:label = Create3DTextLabel(string, COLOR_WHITE, x, y, z, 40.0, 0, 0);
    SetTimerEx("Logout", 60000, 0, "dd", _:label, pickup);
    SavePlayer(playerid);
    SpielerInfo[playerid][sLogout] = 0;
    return 1;
    }


    Außerdem musst du das sLogout beim Login natürlich auch aus der Datenbank laden lassen, sonst bringt es ja nichts.

  • Generelle Frage: Ich arbeite an nem Waffensystem, habe Animationen beim Waffenwechseln als Ausweg reingepackt, aber hatte eigentlich was anderes vor: Ich habe bei Mauzen gesehen, dass er es ohne Texdraws geschafft hat, die geladene Munitio / Ammo auf einen bestimmten Wert zu setzen... Wie kann ich das realisieren? Es gibt keine Funktion / Möglichkeit nach meinem Wissen, die geladene Munition / Ammo zu setzen ??
    Damit meine ich nicht die gesamte Munition, sondern halt wie gesagt, die geladene, bei der es, wenn diese alle ist, automatisch eine Nachladeanimation gibt -> zB: 200 / 30 -> 30 geladene Muni von 230 (200 vorrätige Muni).


    Hoffe ich konnte mich richtig ausdrücken ;) (Brauche das, um die alte Muni wieder zu setzen, sobald ich auf die alte Waffe wechsle).


    MfG Alf21

  • Beitrag von Edgar ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Jeffry:


    Ich habe ein Problem. Jedes mal wenn ich mein HealthBar Textdraw lade, sind alle Spieler auf meinem Server pausiert.


    Dieses FilterScript zeigt das Heal in % an bei der Healthbar.


    Ich kopiere das mal hier rein, hoffe du kannstm mir sagen woran das liegt.


    Spoiler anzeigen

    #include <a_samp>
    #include <ocmd>

    Spoiler anzeigen
    new Text:Textdraw0;
    new Text:Textdraw1;

    Spoiler anzeigen
    new Text:Health[MAX_PLAYERS];
    new Text:Armour[MAX_PLAYERS];

    Spoiler anzeigen
    forward vitals(playerid);
    public vitals(playerid)
    {
    new string[5]
    ;new Float:pHealth, Float:pArmour;
    GetPlayerHealth(playerid,pHealth);
    GetPlayerArmour(playerid,pArmour);
    format(string, sizeof(string), "%.0f%", pHealth);
    TextDrawSetString(Health[playerid], string);
    format(string, sizeof(string), "%.0f%", pArmour);
    TextDrawSetString(Armour[playerid], string);
    }

    Spoiler anzeigen
    public OnFilterScriptInit()
    {

    Spoiler anzeigen
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    Health[i] = TextDrawCreate(566.000000, 67.000000, "100%");
    TextDrawBackgroundColor(Health[i], 255);
    TextDrawFont(Health[i], 1);
    TextDrawLetterSize(Health[i], 0.219999, 0.899999);
    TextDrawColor(Health[i], -1);
    TextDrawSetOutline(Health[i], 1);
    TextDrawSetProportional(Health[i], 1);

    Spoiler anzeigen
    Armour[i] = TextDrawCreate(566.000000, 44.000000, "100%");
    TextDrawBackgroundColor(Armour[i], 255);
    TextDrawFont(Armour[i], 1);
    TextDrawLetterSize(Armour[i], 0.219999, 0.899999);
    TextDrawColor(Armour[i], -1);
    TextDrawSetOutline(Armour[i], 1);
    TextDrawSetProportional(Armour[i], 1);
    }

    SetTimer("vitals",1000,1);
    }

    Spoiler anzeigen
    public OnFilterScriptExit()
    {
    TextDrawHideForAll(Textdraw0);
    TextDrawDestroy(Textdraw0);
    TextDrawHideForAll(Textdraw1);
    TextDrawDestroy(Textdraw1);
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerSpawn(playerid)
    {
    TextDrawShowForPlayer(playerid, Health[playerid]);
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerUpdate(playerid)
    {
    new Float:pArmour;
    GetPlayerArmour(playerid, pArmour);
    if(pArmour == 0){
    TextDrawHideForPlayer(playerid, Armour[playerid]);
    }else{
    TextDrawShowForPlayer(playerid, Armour[playerid]);
    }
    }

    Spoiler anzeigen
    public OnPlayerConnect(playerid)
    {
    TextDrawShowForPlayer(playerid, Textdraw0);
    TextDrawShowForPlayer(playerid, Textdraw1);
    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Jeffry:


    Und du gehst davon aus das dies der Grund war warum meine Spieler AFK waren sobald ich das Script geladen habe? (Sie konnten trotzdem noch schreiben etc)


    Kann das gerade nicht mit einem 2. Spieler austesten da er gerade wieder offline ist, aber ich werde das noch machen.


    Und irgendwie zeigt der mir das nur beim Armour Textdraw an, Health nicht..



    Edit: Er war gerade on gekommen währned ich am schreiben war, Problem besteht noch.


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Möglicherweise hast du das Textdraw Limit überschritten, wenn MAX_PLAYERS noch auf 500 bzw. 1000 ist, dann ist das sehr wahrscheinlich.
    Erstelle PlayerTextdraws anstatt diesen globalen Textdraws, und erstelle diese bei OnPlayerConnect, zeige sie dem Spieler bei OnPlayerSpawn an und lösche sie bei OnPlayerDisconnect wieder.

  • Jeffry:


    So richtig?Falls ja hilft das nicht. Ich hätte eher gedacht das es vielleicht an OnPlayerUpdate liegt und das Problem gefixxt ist wenn ich das in mein GameMode Integriere, bin mir aber nicht sicher.


    Spoiler anzeigen

    #include <a_samp>
    #include <ocmd>

    Spoiler anzeigen
    new Text:Textdraw0;
    new Text:Textdraw1;

    Spoiler anzeigen
    new Text:Health[MAX_PLAYERS];
    new Text:Armour[MAX_PLAYERS];

    Spoiler anzeigen
    forward vitals(playerid);
    public vitals(playerid)
    {
    new string[5]
    ;new Float:pHealth, Float:pArmour;
    GetPlayerHealth(playerid,pHealth);
    GetPlayerArmour(playerid,pArmour);
    format(string, sizeof(string), "%.0f%", pHealth);
    TextDrawSetString(Health[playerid], string);
    format(string, sizeof(string), "%.0f%", pArmour);
    TextDrawSetString(Armour[playerid], string);
    }

    Spoiler anzeigen
    public OnFilterScriptInit()
    {

    SetTimer("vitals",1000,1);
    }

    Spoiler anzeigen
    public OnFilterScriptExit()
    {
    TextDrawHideForAll(Textdraw0);
    TextDrawDestroy(Textdraw0);
    TextDrawHideForAll(Textdraw1);
    TextDrawDestroy(Textdraw1);
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerSpawn(playerid)
    {
    TextDrawShowForPlayer(playerid, Health[playerid]);
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerUpdate(playerid)
    {
    new Float:pArmour;
    GetPlayerArmour(playerid, pArmour);
    if(pArmour == 0){
    TextDrawHideForPlayer(playerid, Armour[playerid]);
    }else{
    TextDrawShowForPlayer(playerid, Armour[playerid]);
    }
    }

    Spoiler anzeigen
    public OnPlayerConnect(playerid)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    Health[i] = TextDrawCreate(566.000000, 67.000000, "100%%");
    TextDrawBackgroundColor(Health[i], 255);
    TextDrawFont(Health[i], 1);
    TextDrawLetterSize(Health[i], 0.219999, 0.899999);
    TextDrawColor(Health[i], -1);
    TextDrawSetOutline(Health[i], 1);
    TextDrawSetProportional(Health[i], 1);

    Spoiler anzeigen
    Armour[i] = TextDrawCreate(566.000000, 44.000000, "100%%");
    TextDrawBackgroundColor(Armour[i], 255);
    TextDrawFont(Armour[i], 1);
    TextDrawLetterSize(Armour[i], 0.219999, 0.899999);
    TextDrawColor(Armour[i], -1);
    TextDrawSetOutline(Armour[i], 1);
    TextDrawSetProportional(Armour[i], 1);
    }

    TextDrawShowForPlayer(playerid, Textdraw0);
    TextDrawShowForPlayer(playerid, Textdraw1);
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerDisconnect(playerid)
    {
    TextDrawHideForAll(Textdraw0);
    TextDrawDestroy(Textdraw0);
    TextDrawHideForAll(Textdraw1);
    TextDrawDestroy(Textdraw1);
    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Jetzt kann man sich einloggen obwohl die 60 sek noch nicht rum sind.


    new query[150];
    mysql_escape_string(pName(playerid), pName(playerid));
    format(query, sizeof(query), "UPDATE Accounts SET Logout='%i' WHERE Spielername='%s'", SpielerInfo[playerid][sLogout], pName(playerid));
    mysql_pquery(handle, query);


    So lass ich sLogout laden.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • public OnPlayerConnect(playerid)
    {
    new query[150];
    mysql_escape_string(pName(playerid), pName(playerid));
    format(query, sizeof(query), "UPDATE Accounts SET Logout='%i' WHERE Spielername='%s'", SpielerInfo[playerid][sLogout], pName(playerid));
    mysql_pquery(handle, query);
    return 1;
    }

  • Das ist falsch. UPDATE ändert einen Wert in der Datenbank. Du musst mit SELECT arbeiten, so wie du die Spieler-Statistiken (Geld etc...) aus der Datenbank lädst.
    Bei OnPlayerDisconnect -> SavePlayer nutzt du UPDATE, du speicherst etwas. Bei OnPlayerConnect -> LoginPlayer nutzt du SELECT, du lädst etwas.

  • Hallo, ich habe ein kleines Problem mit meiner MySQL Abfrage.
    Ich möchte Abfragen ob dieser Eintrag in der DB existiert doch aus einen bestimmten Grund geht das nicht bzw. es kommt immer "0" dabei raus obwohl in der Datenbank der Eintrag existiert.


    Abfrage:

    stock mysql_CheckHaus(id)
    {
    new Query[256],count;
    format(Query, sizeof(Query), "SELECT * FROM `"HAUSTABLE"` WHERE `ID` = '%d'", id);
    mysql_query(Query);
    mysql_store_result();
    count = mysql_num_rows();
    printf("mysql_CheckHaus(%d) -> mysql_num_rows = %d -> count = %d",id,mysql_num_rows(),count);
    mysql_free_result();
    return count;
    }

    MySQL Eintrag:
    MySQL_2.png
    MySQL_1.png



    Logeintrag:


    Ich danke für jede Hilfe :) vllt. habe ich auch gerade nur ein Blatt vor den Augen und es ist was ganz offensichtliches.

    „Auge um Auge - und die ganze Welt wird blind sein.“
    - Mahatma Gandhi

  • Steht der Code, der mysql_CheckHaus aufruft, bei OnGameModeInit (oder wird davon aufgerufen)?
    Falls ja, dem Log zufolge sieht das so auch als hast du erst die mysql_CheckHaus-Aufrufe und baust danach die MySQL Verbindung auf. Das muss andersherum sein.

  • hi leute ich habe meine mysql datenbank bei bplaced.net wie finde ich da die ip meiner datenbank raus? also den host?