[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
  • Guten Abend,
    wie kann ich aus meiner Datenbank auslesen ob der Spieler existiert wenn dieser nicht online ist.
    Ich verwende MySQL include R39-3


    new query[128];
    mysql_format(handle, query, sizeof(query), "SELECT id FROM users WHERE name = '%e'", name);
    mysql_pquery(handle, query, "RegCheck", "d", playerid);


    Und:
    forward RegCheck(playerid);
    public RegCheck(playerid)
    {
    new rows = cache_get_row_count();
    if(rows) SendClientMessage(playerid, 0xFFFFFFFF, "User ist in der Datenbank.");
    else SendClientMessage(playerid, 0xFF0000FF, "User ist nicht in der Datenbank.");
    return 1;
    }

  • Compiler hängt sich immer bei folgenden Code auf.

    if(strcmp(inputtext,"einverstanden",true)==0)
    {
    strdel(DialogString, 0, sizeof(DialogString));
    ShowPlayerDialog(playerid, DIALOG_GESCHLECHT, DIALOG_STYLE_LIST, ""HTML_WHITE"Account erstellen - 3/3", ""HTML_WHITE"Männlich\nWeiblich", "Bestätigen", "Abbrechen");
    }
    else
    {
    strdel(DialogString, 0, sizeof(DialogString));
    format(DialogString, sizeof(DialogString),""HTML_YELLOW"Du hast 'einverstanden' nicht in das vorgegebene Feld geschrieben\n\n"HTML_WHITE"Um auf unserem Server spielen zu können, musst Du mit unseren Nutzungsbestimmungen einverstanden sein.\nDie Nutzungsbestimmungen kannst Du auf unserer Homepage unter "#SERVER_WEBURL" einsehen.\nWenn Du diese durchgelesen hast und einverstanden bist, schreibe bitter "HTML_YELLOW"einverstanden"HTML_WHITE"in das vorgegebene Feld.\n\nWenn Du mit diesen nicht einverstanden bist, dann musst Du leider unseren Server verlassen.");
    ShowPlayerDialog(playerid, DIALOG_NUTZUNGSBESTIMMUNGEN, DIALOG_STYLE_INPUT, ""HTML_WHITE"Account erstellen - 2/3", DialogString, "Bestätigen", "Abbrechen");
    return 1;
    }

  • Moin habe folgendes Kommando


    Der Teil


    for(new i; i <dropval/MoneyVal; i++) war vorher for(new i; i <dropval/1000; i++), wollte jedoch den Wert eines Geldpakets variabel einstellen und habe daher jetzt via #define einen Wert festgesetzt.



    Mit maxmoney will ich verhindern dass die MAX_PICKUPS Grenze ueberschritten wird



    Problem ist jedoch: Wenn ich z.B. MoneyVal 330 habe und dann beispielsweise irgendwas durch 330 habe, dann habe ich doch nen Float als Bedingungen im Zweifelsfall oder?



    Oder wird dieser Fall schon durch das Modulo ausgeschlossen? Kann ich den Befehl uebrigends vereinfachen?


    Weil ich habe probiert einen Float als Iterator zu nehmen und dann die Bedingungen auch als Float, aber wenn ich den Float erhoehen will mit ++ wird er interessanterweise um 1 kleiner statt groesser ?(


    Gibt es weiterhin die Moeglichkeit Pickups zu loeschen nach einer bestimmten Zeit, also wenn keiner die mit diesem Command gedroppten Pickups einsammelt innerhalb einiger Minuten?


    Habe da irgendwie an einen Timer gedacht der die PickupID uebergibt und dann mit einer Funktion IsValidPickup ueberprueft ob dieses existiert, und wenn ja es destroyed und das PickupArray neu sortiert.
    Jedoch sehe ich nur den Haken dass wenn man irgendwie 1000 Dinger droppt man dann 1000 Timer hat was wohl stark unguenstig ist fuer den Server


    Bitte um Rat

    Einmal editiert, zuletzt von Sub Royal ()

  • Wie ist es möglich, von einem X-beliebigen Befehl, oder Funktion die Reaktionszeit im Chat anzeigen zu lassen?


    Beispiel:
    /testim Chat:Der Befehl hat x-millisekunden gedauert zum ausführen.


    Wichtig ist halt in Millisekunden

    new tick = GetTickCount();
    //Code...
    printf("Der Befehl hat %d Millisekunden gedauert.", GetTickCount()-tick);

  • @Jeffry Gibt es eine bekannte Methode, womit ich die Fläche einer Area berechnen kann? Wobei diese via CreateDynamicPolygon (Incognito) erstellt werden, dementsprechend sind es nicht nur Rechtecke o.ä. sondern komplexere Formen.

    http://www.mathopenref.com/coordpolygonarea.html
    http://www.mathopenref.com/coordpolygonarea2.html


    Die Funktion im zweiten Link kannst du ja problemlos an PAWN anpassen.


    EDIT:
    Also so:
    forward Float:polygonArea(coord[2][], numPoints);
    stock Float:polygonArea(coord[2][], numPoints)
    {
    new Float:area = 0.0, j = numPoints-1;
    for(new i=0; i<numPoints; i++)
    {
    area += (coord[0][j]+coord[0][i]) * (coord[1][j]-coord[1][i]);
    j = i;
    }
    area = area / 2.0;
    return area;
    }

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • new tick = GetTickCount();//Code...printf("Der Befehl hat %d Millisekunden gedauert.", GetTickCount()-tick);

    Danke erstmal!
    Es klappt nur halb, er gibt mir immer aus, selbst bei %.10f, dass er 0,000000 millisekunden braucht, also entweder hat es tatsächlich keine verzögerung, oder irgendwas stimmt nicht..


    Beispielswiese bei dem Befehl:




    ocmd:sethp(playerid,params[])
    {
    new tick = GetTickCount();
    if(Spieler[playerid][Adminlevel] < 2)return SendClientMessage(playerid,COLOR_GRAD2,"* Du besitzt nicht die benötigten Rechte.");
    new pID,leben,string[128];
    if(sscanf(params, "ui",pID,leben))return SCM(playerid,COLOR_GRAD2,"** FEHLER: /sethp [ID/Name] [Leben]");


    if(leben < 0|| leben > 200) return SendClientMessage(playerid, COLOR_LIGHTRED, "Das Leben kann nicht unter 1 und über 200 sein.");
    SetPlayerHealth(pID,leben);
    format(string,sizeof(string),"** Du hast das Leben/die HP von %s auf %d geändert",SpielerName(pID),leben);
    SendClientMessage(playerid,COLOR_ORANGE,string);


    format(string,sizeof(string),"** Dein Leben wurde von %s auf %d geändert.",SpielerName(playerid),leben);
    SendClientMessage(pID,COLOR_ORANGE,string);

    format(string,sizeof(string),"Der Befehl hat %.10f ms gedauert.",GetTickCount()-tick);
    SCM(playerid,COLOR_RED,string);
    return 1;
    }

    Mit freundlichen Grüßen,


    Keslo

  • @Keslo deine Messmethode ist nicht genau genug beziehungsweise geht der Befehl tatsächlich zu schnell sodass bei deiner Messmethode 0 rauskommt. Was du machen kannst ist den selben Befehl z.b per schleife 1000x ausführen zu lassen. Dann hast du einen ordentlichen wert an den du dich orientieren kannst .

  • Beitrag von Paddy_Corleone ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Falsch gelesen ().
  • Ja Moin! :)


    Ich habe (mal wieder) ein Problem, undzwar möchte ich nicht mehr NPC Arbeiten, wieso auch? Actors reichen für meine Dienst aus. :)
    Jetzt habe ich aber das Problem, das mir der Actor wohl immer durch die Map Fällt. X( (Selbstgemapptest Interior)



    enum ActorEnum
    {
    aName[128],
    Float:aX,
    Float:aY,
    Float:aZ,
    Float:aA,
    aInterior,
    aSkin,
    aID
    };
    new ActorInfo[][ActorEnum] = {
    {""#FARBE_GELB"Willkommen in der Stadthalle.\nWie kann ich ihnen Helfen?\nTippe: '"#FARBE_ORANGE"/stadthalle"#FARBE_GELB"'", 1028.6716, -205.8224, 2215.5969, 93.4388, 0, 11, 0}
    };


    // OnGameModeInit
    for(new i = 0; i < sizeof(ActorInfo); i++)
    {
    CreateDynamic3DTextLabel(ActorInfo[i][aName], -1, ActorInfo[i][aX], ActorInfo[i][aY], ActorInfo[i][aZ]+2.0, 20.0);
    ActorInfo[i][aID] = CreateActor(ActorInfo[i][aSkin], ActorInfo[i][aX], ActorInfo[i][aY], ActorInfo[i][aZ], ActorInfo[i][aA]);
    SetActorVirtualWorld(ActorInfo[i][aID], -1);
    SetActorInvulnerable(ActorInfo[i][aID], true);
    }


    Hat jemand eine Lösung dafür eventuell?


    MfG.
    Aaron!

    Die Missglückte Persönlichkeit, Ciao!


  • public OnActorStreamIn(actorid, forplayerid)
    {
    new string[64];
    format(string, sizeof(string), "Actor %d Loading", actorid);
    SendClientMessage(forplayerid, -1, string);
    return 1;
    }


    Ich habe dies zB gefunden, aber auch diese "Funktion" funktioniert leider nicht.


    Ist am Code vielleicht etwas Falsch?


    Apple, wie meinst es die Position neu setzen? Sobald jemand das Interior betritt die Actors dann alle neu Setzen? Oo


    MfG.
    Aaron!

    Die Missglückte Persönlichkeit, Ciao!

  • Nunja, das ist ja, das ich die mit einer Forschleife laden lasse.
    Ich müsste also entweder ein Stock Benutzen den ich immer aufrufen muss wenn er ein "Raum" betreten tut wo ein Actor ist,
    oder sobald ein Spieler den Raum betreten tut wo ein Actor ist die Schleife neu Starten.


    Das Echt doof Gelöst, eine Funktion den Actor zu Freezen gibt es nicht, oder?


    MfG.
    Aaron!

    Die Missglückte Persönlichkeit, Ciao!

  • @Aaron1337 die Objekte werden wahrscheinlich per Objectstreamer erstellt oder?
    Werden denn die Objekte auch für den Actor gestreamt? Bzw werden die auch für den gestreamt wenn sonst kein Spieler in der nähe ist oderso?
    Du könntest ja zum Beispiel den Boden auf dem der stehen soll als normales Objekt einfügen. Würde das das Problem lösen?


    Sorry falls das Blödsinn ist, ich hab schon länger nichts mit Pawn gemacht und kenn mich generell mit diesen Actors nicht so wirklich aus ^^

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen