Beiträge von Sub Royal

    Ich gruess euch
    Bin mit meinem Konverter weiter :D CreateObject und CreateDynamicObject als auch paar andere Formate kann ich nun ins MTA_SA Format, und die jeweils anderen uebertragen.


    Problem ist jedoch: Ich schaffe es einfach nicht mit dem MTA XML Format umzugehen


    XML
    <map edf:definitions="editor_main">
      <object id="object (Konvert)(0)" breakable="true" interior="0" collisions="true" alpha="255" model="3361" doublesided="false" scale="1" dimension="0" posX="3487.779" posY="3228.359" posZ="189.8204" rotX="0" rotY="0" rotZ="183.988"></object>
    </map>


    Wie kann ich da beispielsweise mit fscanf die Integer und Floats rauskriegen? ?(


    Bei CreateObject habe ich einfach die Kommas ignorieren lassen, aber hier haben wir ja Strings und viele andere Symbole zwischen jedem Float und Integer Wert was das ganze fuer mich unmoeglich macht.


    Habe mir auch ein XML Schema gebaut, wenn das ueberhaupt korrekt ist.
    Habe leider nie zuvor mit XML gearbeitet.


    Wie kann ich es hinkriegen mit einem beliebigen XML Parser, aus der Objektzeile die Werte rauszuparsen? Hat jemand da eventuell ein Beispiel damit ich mich daran orientieren kann?


    Danke schonmal vorab.


    Will eine offlinevariante von ConvertFFS machen, vorallem bei fetten Dateien geht das Ding nicht


    Weiterhin habe ich das Problem dass bei fetten Files mein Programm nicht terminiert.
    Weiss jemand warum? Bei kleinen Files kein Problem.
    Es wird zwar erfolgreich konvertiert, aber es terminiert dennoch nicht.


    Vielen Dank schonmal! GIbt es in C eigentlich eine Funktion die das gleiche macht wie sscanf? Weil laut dem sscanf Thread soll das PAWN sscanf und das C sscanf was unterschiedliches sein.



    Habe das mal probiert mit


    Jedoch ist leider immernoch alles 0.
    Habe noch nie mit enums gearbeitet, habe ich vielleicht was falsch gemacht? Oder kann es sein dass der String fuer sscanf zu lang ist?

    Ich hatte eigentlich vor das in C zu machen weil ich das letztendlich in der Uni auch studiere, aber da wuerde es ja praktisch identisch funktionieren , gibts ja auch eine Funktion die dem PAWN sscanf gleicht
    Aber ich fine dafuer keinen genauen Ansatz wie ich das mit dem String hinkriege


    Habe es auch mal mit strreplace probiert, und die Kommas werden auch entfernt, aber auch dann gehts leider nicht



    strreplace(str, ","," ");
    printf(str);

    Danke, dass mit dem \"%d\" hat geholfen!


    Leider funktioniert das ganze mit sscanf wohl noch nicht so richtig, habe ich da vielleicht was falsch gemacht?


    Output ist:


    /e:

    C
    <object id="1" breakable="true" interior="0" collisions="true" alpha="255" model="0" doublesided="false" scale="1" dimension="0" posX="0.000000" posY="0.000000" posZ="0.000000" rotX="0.000000" rotY="0.000000" rotZ="0.000000"></object>


    Also alles 0

    Ich gruesse euch liebe Community,



    Aktuell programmiere ich durch mein Studium nun gut ein halbes Jahr in C, jedoch weiss ich nicht wie ich folgendes realisieren kann.
    Ich bin es inzwischen leid die Online Converter zu nutzen, vorallem bei fetten Objektmengen ab 40000 funktionieren die allesamt nicht mehr.



    Ich habe eine Datei A, Textdatei mit folgendem Beispielinhalt:
    [...]
    CreateObject(1794,268.0996100,1881.5000000,-31.4000000,0.0000000,0.0000000,0.0000000);
    [...]




    Das ganze soll in folgendes Format umgewandelt werden, in eine Datei B:



    [...]
    <object id="object (LOW_BED_3) (1)" breakable="true" interior="0" collisions="true" alpha="255" model="1794" doublesided="false" scale="1" dimension="0" posX="268.09961" posY="1881.5" posZ="-31.4" rotX="0" rotY="0" rotZ="0"></object>
    [...]



    Wie kann ich das umsetzen ? Hat jemand da einen Ansatz?


    Habe den Ansatz mit strfind und strtok zu arbeiten, das wird aber bestimmt sehr haesslich. Oder alternativ sscanf?


    Moin


    Aktuell habe ich einen Command /blowup mit dem ich pruefe ob der Spieler in der Naehe eines Bettes von diesem Array hier ist:


    C
    new const Float:beds[][3] = {
    	{-2340.7637,-2024.7919,270.5094},//VIOLET
    	{-2812.6035,-1515.9814,140.8438},//Brown
    	{-2326.8735,-1356.4872,300.2661}//Yellow
    };


    Und dann mit dem jeweiligen Index stelle ich fest ob er bei dem Brown ist oder aehnlich.
    Kann ich das ganze eventuell effizienter machen, indem ich die CreateObjects in das Array packe? Kann ich die dann auch z.B. mit DeleteObject oder aehnlich verarbeiten? also so dass ich in dem Array statt der 3 Koordinaten einfach die 3 Objekte habe?


    Weitere Sache.
    Ich will folgendes machen:


    Habe ein Gamemode mit 3 Maps, jedoch braucht jeder dieser Maps angepasste Koordinaten, weshalb ich Koordinaten und OnPlayerCommandText fuer jede Map mit #tryinclude einbinde.
    Gibt es die Moeglichkeit dass ich irgendwie mit Praeprozessoranweisung machen kann, dass ich den Mapnamen irgendwie im Kopf des Gamemodes festgelegt wird, und je nachdem das entsprechende Include eingebunden wird? Also geht if etc. mit Praeprozessoranweisungen?


    Also ich will das ganze Modular machen, das meiste ist bei allen Maps gleich, ausser die Koordinaten von diversen Spawns und locations, und die will ich halt bei Bedarf einfach einsetzen koennen ohne irgendwie, wie ich es bisher gemacht habe, den Gamemode zu kopieren, und da die Koordinaten umzuschreiben.

    Vielen Dank schonmal dafuer, macht natuehrlich sinn :D
    Habe etwas gefunden, was eventuell hilft bei der Fehlersuche, ich werde jedoch daraus nicht schlau.


    Es werden in 4 Zonen Random Pickups erstellt mit meiner eigens erstellen Funktion GenerateRandomPickup



    In OnPlayerPickupPickup wird der Wert maxmoney um 1 reduziert, damit will ich verhindern dass mehr als 4000 Pickups spawnen und das Limit ueberschritten wird



    Timer dafuer werden in OnGameModeInit gesetzt

    C
    SetTimer("MoneyTeamGrey", MoneyDropTimer, true);
    	SetTimer("MoneyTeamBrown", MoneyDropTimer, true);
    	SetTimer("MoneyTeamYellow", MoneyDropTimer, true);
    	SetTimer("MoneyJunkyard", 1000, true);


    Hier mal MoneyTeamGrey und MoneyJunkyard


    MoneyDropTimer ist gleich 2500ms, MoneyJunkyard 1000ms, also muessten bei MoneyJunkyard ja schneller mehr Pickups spawnen.
    Was mich jedoch ueberrascht hat: Bei MoneyJunkyard sind maximal 1 oder 2 Pickups gespawnt (obwohl der Timer "kleiner" ist als die anderen), und bei den anderen bestimmt ueber 1000 Stueck! (Obwohl 2500ms)


    Wie kann ich ausserdem den Kram aus dem Profiler auswerten? Werde aus den Funktionsnamen nicht schlau.. (ok Problem geloest dank -d3)


    SCHLAU.png



    Weiterhin reicht, nachdem der Server nun 1 Stunde laeuft, schon 1 Linksklick im Auswahlbildschirm, und "Acks sent" ist innerhalb von einer Sekunde auf ueber 60000 :D
    update.png

    Was passiert wenn dieser Wert ueberschritten wird? :D Habe eine Variable die dann auf einmal negativ wird obwohl immer nur 100000 addiert werden jede Sekunde


    OnPlayerDeath
    Ich vermute es liegt an dem String


    Weiterhin wird ein Object Destroyed dass unter Umstaenden nicht existiert, aber ich bezweifle dass das die Ursache fuer das Problem ist

    Vielen Dank schonmal, profiler kriege ich nicht zum laufen weshalb ich leider aktuell nur crashdetect drin habe.
    Konnte den Bug reproduzieren: Wenn ich am Anfang, nach dem Zweiten Login , also 2tes mal joinen die Pfeiltasten in der Grand Larceny Teamauswahl oder Stadtauswahl spamme haengt sich irgendwann alles auf und der meldet ueberschrittenes Ackslimit.


    Gibt es einen Weg das zu umgehen? Ich habe das Gefuehl es liegt an OnPlayerUpdate



    Crashdetect sagt jedoch vor dem joinen:



    C
    [10:27:21] [debug] Run time error 4: "Array index out of bounds"
    [10:27:21] [debug]  Attempted to read/write array element at index 65535 in array of size 32
    [10:27:21] [debug] AMX backtrace:
    [10:27:21] [debug] #0 000324bc in public OnPlayerDeath (0, 65535, 54) from bedwarschilliad.amx

    Koennen weiterhin Integer die unendlich gross werden ein Problem werden?

    Moin


    Habe vor bei mir den Score und die Tode eines Spielers zu speichern.
    Wie kriege ich das hin?
    Habe mich mit dem File Functions Tutorial im SA-MP Wiki beschaeftigt, und das scheint ja genauso zu funktionieren wie die file.h Bibliothek in C.


    Jedoch hat mich das Tutorial nicht so sehr weitergebracht da es scheinbar sehr viele Nachteil beim Gebrauch von file gibt.


    Kann jemand eventuell einen kleinen Beispielcode schreiben, mit welchem ich beim Disconnect des Spielers Kills und Score speichere, und beim Connect wieder auslese? Am besten mit Spielername als Dateiname oder aehnlich.
    Waere super wenn jemand da was schreiben koennte, gibt schliesslich soviele Includes um Dateien zu schreiben, vielleicht kennt jemand ja das "beste".


    Zu Speichern und zu Lesen sind die Arrays PKills[MAX_PLAYERS]; und PScore[MAX_PLAYERS] mit PScore[playerid] = GetPlayerScore(playerid);

    Ich gruesse euch liebe Community,


    Habe aktuell mein Script Last Bed Standing am laufen, welches ich auch hier im Forum veroeffentlicht habe, jedoch kommt es nun nach laengerem Testen zu Problemen.


    Nach einer nicht definierten Zeit werden Spieler gekickt/gebannt weil irgendwie das messageholelimit oder ackslimit ueberschritten wurde, und dann spielt der Server verrueckt! Nix mehr geht, Fahrzeuge verschwinden, Objekte verschwinden etc.


    Woran kann das liegen? Habe schonmal im Englischen Forum gefragt, und dort wurde mir gesagt dass in meinem Script die typischen Ursachen wie Endlosschleifen etc. nicht zu finden seien.


    Ich hoffe jemand hat Zeit und kann mir bei meinem Problem helfen.



    Hier ein Beispiel: 3 Spieler auf dem Server, 2 sind kurz hintereinander rausgeflogen, beim 3. passiert nix.


    ackslimit und messageholelimit raufsetzen auf 10000 hat auch nichts gebracht, auch da wurde es ueberschritten



    Hier der Link zum Quellcode:


    http://pastebin.com/16cKHfUe

    Ich gruesse euch liebe Community,


    Habe aktuell das Problem dass ich im Log die Meldung "[warning] client exceeded 'messageholelimit'" aufgefunden habe, und darauf wurde ich interessanterweise von meinem Server gebannt.


    Woran liegt das, und was kann ich dagegen machen?


    Mein OnPlayerUpdate Teil, 1:1 aus Grand Larceny beibehalten


    Kann ich folgenden Code eventuell effizienter oder besser schreiben, vorallem wegen der Kontrollstrukturen?


    Ich moechte weiterhin folgendes umsetzen:
    Ich will nicht dass ein Spieler das eigene "Bett" mit /blowup zerstoert.
    Also will ich irgendwie ausschliessen dass der beispielsweise bedstateviolet auf -1 setzen kann wenn er selbst gPlayerTeamSelection[playerid] == TEAM_VIOLET ist.
    Daher habe ich irgendwie das gefuehl dass ich alles umbauen muss, vielleicht hat jemand einen Vorschlag

    Wenn jemand noch Zeit hat, auch folgenden Befehl

    Ich gruesse euch liebe Community,


    Aktuell will ich 2 Gamemodes laufen lassen, so dass nach jedem "gmx" der naechste Gamemode kommt, das heisst jeder der beiden laeuft nur einmal, und nachher der andere.


    Wie realisiere ich das korrekt in der Server.cfg? Der Wiki Eintrag im SAMP Wiki hat mir leider nicht weitergeholfen, da dort kein Beispiel zu 2 Gamemodes ist.



    Bitte daher um Rat, vielleicht weiss ja einer weiter.

    Habe mir mal ne Funktion erstellt um in einer Zone mit y_max, y_min, x_max, x_min, bspw. einer Gangzone, random Pickups erstellen zu lassen.


    Weiterhin braucht ih dazu meine frandom Funktion oben fuer random Floats.


    Weiterhin erstellt ihr am Kopf des Scripts eine Variable maxmoney, damit ihr das Pickuplimit von 4096 nicht ueberschreitet!

    Moin


    Versuche aktuell folgendes zu realisieren:
    Spieler koennen sich Bombem kaufen, PBomb[playerid] wird =1 gesetzt.
    Nun kann der Spieler die Bombe irgendwo ablegen mit /dropbomb, und soll sie spaeter mit /detonate sprengen koennen.


    Problem ist folgendes: Um zu ermoeglichen dass mehrere verschiedene Spieler eine Bombe droppen und zuenden koennen muss ich ja wahrscheinlich ein Array erstellen mit den Koordinaten, und irgendwie die playerid reinbringen oder? irgendwas in Richtung Px[playerid],Py[playerid],Pz[playerid], und dann der Bombe noch ne ID geben mit PBombID[playerid], richtig?
    Oder kann man das auch anders loesen?


    Weiterhin, wie kann ich solche Animlibs "Preloaden" ? Finde dazu leider nix ausser den Wiki Eintrag zu ApplyAnimation.
    Habe das Problem das Animationen eher zufaellig ausgefuehrt werden, manchmal ja manchmal nicht, aber nie dann wenn ich es will