[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
  • Ich brauch mal ein Denkanstupser
    Ich habe mir die Funktion gebastelt:
    stock FindNextHaltestelle(Input[])
    {
    new str[128];
    new pos = strfind(Input,"\n");
    strdel(Input,0,pos);
    format(str,128,"%s",Input);
    pos = strfind(Input,"\n");
    strdel(str,pos,sizeof(str));
    return str;
    }
    So mit der Funktion möchte ich den Text aufteilen bzw die erste Haltestelle anzeigen lassen
    Das ist mein Input:
    "{FF8400}Buslinie 1:\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department"
    Ich möchte das er mir nur Bank ausgibt, doch leider gibt er mir nichts aus


    Hat jemand ne idee wo ich was falsch gemacht habe?


    //edit
    Habe das jetzt so
    stock FindNextHaltestelle(Input[])
    {
    new pos = strfind(Input,"\n");
    strdel(Input,0,pos+1);
    pos = strfind(Input,"\n");
    strdel(Input,pos,strlen(Input));
    return Input;
    }
    Lass ich es in der Funktion printen, dann zeigt er alles Sauber an
    Lass ich es aber als Message senden, dann sendet der mir irgendein Mist von A-Z Sonderzeichen etc

    All in all it's just another brick in the wall

    Einmal editiert, zuletzt von Beavis ()


  • Alle Zeichenketten/Strings werden als original an Funktionen Übergeben ;) heißt wenn du mit strdel arbeitest löscht du einfach den Rest und kannst danach gar keine weitere Haltestelle mehr abrufen, weil die Daten gelöscht wurden (bei Syno: seinem Beispiel der selbe Fehler ;) )


    So sollte es klappen:
    stock FindHaltestelle(Input[], num)
    {
    new num_count = 0, i = 0;

    new result[64], result_num = 0;
    while(Input[i] != '\0')
    {
    if(Input[i] == '\n')
    {
    if(Input[i+1] == '\0')break; // *Input[]* endet mit "\n" (danach ist nichts mehr zu finden) -> BREAK
    num_count++;
    i+=1; // setze *i* nach "\n"
    }
    if(num_count == num)
    {
    result[result_num] = Input[i];
    result_num++;
    }
    i++;
    }
    return result;
    }


    Laut deinem beispiel-text:

    FindHaltestelle(Input[], 0) -> "{FF8400}Buslinie 1:"
    FindHaltestelle(Input[], 1) -> "Bank"
    FindHaltestelle(Input[], 2) -> "Visage Hotel"
    FindHaltestelle(Input[], 3) -> "Airport"
    ...

  • Bei den
    stock FindNextHaltestelle(Input[])
    {
    new pos = strfind(Input,"\n");
    strdel(Input,0,pos+1);
    pos = strfind(Input,"\n");
    strdel(Input,pos,strlen(Input));
    return Input;
    }
    Bekomm ich laut debug vor den resturn den richtigen wert raus
    Er soll mir das erste anzeigen was in den string nach den ersten \n steht
    nur das nix anderes
    Und da sendet er mir so ein Müll wie das:
    [23:18:19] Funktion: Autohaus Autobahn
    [23:18:19] Message: (Irgendein Sonderzeichen)
    [23:18:19] Funktion: Autohaus Autobahn
    bei den Code
    for(new c = 0; c < sizeof(BusInfo); c ++)
    {
    if(IsPlayerInRangeOfPoint(i,10.0,BusInfo[code=c][bX],BusInfo[code=c][bY],BusInfo[code=c][bZ]) && BusText[i] != BusInfo[code=c][bX])
    {
    BusText[i] = BusInfo[code=c][bX];
    printf("Message: %s",FindNextHaltestelle(BusInfo[code=c][bLable]));
    format(query,128,"Nächste Haltestelle: %s",FindNextHaltestelle(BusInfo[code=c][bLable]));
    SendClientMessage(i,cYellow,query);
    break;
    }
    }
    Es muss doch entweder ein Bug von Samp aus sein oder ich bin doof X(

    All in all it's just another brick in the wall

  • Das mit den formatieren am ende hat sogar geklappt,
    Finde es zwar komisch das es Bugs gibt wenn ich den direkt returne aber es klappt nun


    Das von d0. währe mir einfach zu aufwändig gewesen wenn ich das für hunderte Texte machen müsste da is meins definitiv besser

    All in all it's just another brick in the wall

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Beavis:
    sobald du deine Funktion einmal ausgeführt hast wird der Inhalt von "BusInfo[code=c][bLable]" bis auf das eine Ergebnis gelöscht ... heißt es Funktioniert nur ein einziges mal deine "bessere" Funktion


    beachte lieber meinen oberen Beitrag, da hatte ich es schon erklärt


    EDIT: nebenbei, das ist nicht aufwendig sofern man Arrays/Zeichenketten komplett verstanden hat. So ein Code ist innerhalb von 2-3 Minuten fertig (schneller als ewig mit strdel zu spielen ;)

  • Es soll ja auch nur einmal Funktionieren, da
    {2307.9595,2418.8325,10.8203,"{FF8400}Buslinie 1:\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department"},
    {2142.4578,2358.4353,10.8203,"{FF8400}Buslinie 1:\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department\nBank"},
    {2049.8838,1918.2258,12.3294,"{FF8400}Buslinie 1:\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department\nBank\nVisage Hotel"},
    {1716.2192,1377.9611,10.6406,"{FF8400}Buslinie 1:\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department\nBank\nVisage Hotel\nAirport"},
    {2078.6287,1413.8086,10.8203,"{FF8400}Buslinie 1:\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn"},
    {2158.1570,1992.6667,10.8203,"{FF8400}Buslinie 1:\nSteakhaus\nAmmunation\nPolice Department\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt"},
    {2386.3877,1967.5383,10.8203,"{FF8400}Buslinie 1:\nAmmunation\nPolice Department\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus"},
    {2533.2708,2092.8899,10.8203,"{FF8400}Buslinie 1:\nPolice Department\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation"}

    All in all it's just another brick in the wall


  • sobald dein Bus die Linie ein zweites mal fährt sind die Daten leider gelöscht :(


    EDIT:
    Hier ist der ganze Code ohne dem "num" Parameter, da du den anscheinend gar nicht brauchst ;)
    stock FindNextHaltestelle(Input[])
    {
    new i = 0;

    new result[64], result_num = -1;
    while(Input[i] != '\0')
    {
    if(Input[i] == '\n')
    {
    if(result_num != -1)break;
    result_num = 0;
    i+=1; // setze *i* nach "\n"
    }
    if(result_num > -1)
    {
    result[result_num] = Input[i];
    result_num++;
    }
    i++;
    }
    return result;
    }

  • man kann es per MySQL umrechnen lassen, oder sich eine Funktion erstellen die das auslesen kann
    Falls du mit MySQL arbeitest, habe ich das hier:
    GetTimestamp(Timestamp)
    {
    new Wert[50],query[128];
    format(query, 128, "SELECT FROM_UNIXTIME(%d, '%s.%s.%s %s');", Timestamp, "%d","%m","%Y","%T");
    mysql_query(query, (-1), (0), SQL);
    mysql_store_result(SQL);
    mysql_fetch_string(Wert,SQL);
    mysql_free_result(SQL);
    return Wert;
    }
    anwendung:
    format(str,128,"%s Uhr",GetTimestamp(Timestamp));
    Das Uhr steht dahinter, da der erst das Datum sendet und dann die Uhrzeit
    Aber bevor ich es vergesse, das plugin von den MySQL was ich nutze ist von Strickenkid

    All in all it's just another brick in the wall

  • Hab es jetzt über die HTTP Methode von Pawn und einem PHP Script gemacht.
    Nur ein Problem.


    Ich hole mit SORT ASC Einträge aus der Datenbank. Laut Log werden diese auch in der korrekten Reihenfolge an mein PHP Script geschickt.
    Im Callback der HTTP Funktion im Script gebe ich dann den Inhalt des PHP Scripts aus. Das funktioniert auch. Nur ist dort die Reihenfolge durcheinander.


    Kann es sein, dass die HTTP REquest unterschiedlich schnell Ablaufen und dann auch unterschiedlich ausgegeben werden?

  • Hier


    so holt das die MYSQL


    Log:

    Code
    [Mon May  6 12:44:18 2013] Function: mysql_query executed: "SELECT `Newname`,`Date` FROM `database`.`Namechange` WHERE `ID` = 1 ORDER BY `Namechange`.`Date` ASC" with result: "0".
    [Mon May  6 12:44:18 2013] Function: mysql_store_result executed with result: "1"
    [Mon May  6 12:44:18 2013] Function: mysql_num_rows executed with result: "%".
    [Mon May  6 12:44:18 2013] Function: mysql_fetch_row executed with result: "Testuser|1367836212".
    [Mon May  6 12:44:18 2013] Function: mysql_fetch_row executed with result: "Hagi|1367836222".
    [Mon May  6 12:44:18 2013] Function: mysql_fetch_row executed with result: "Hagi_Lorma|1367836225".


    Man sieht, der Return ist nach dem Date geordnet.


    In dieser Reihenfolge wird das an mein PHP Script geschickt. Jede Row in einem HTTP Request.
    Im Callback zu HTML(); wird einfach der Rückgabewert via SendClientMessage ausgegeben.


    Es wird allerdings nicht wie oben, sondern so ausgegebene.


    Code
    Testuser|1367836212
    Hagi_Lorma|1367836225
    Hagi|1367836222


    edit: Bei der Ausgabe ist der Timestamp natürlich durch die entsprechende Datums Formatierung angegeben (dafür ja das php script)

  • Hey, habe ein Problem bei einer Stringzuweisung.
    Wenn ich dem Hausbesitzer einen Namen zuweise, wird nur der Anfangsbuchstabe dann dadrin gespeichert, obwohl dieser 24 Zellen besitzt.


    LG

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.