[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
  • Schreibt du deinen Code eigentlich absichtlich so verschachtelt, ich habe dir soo oft schon gezeigt wie du das schöner machen kannst.


    Und wiiiiiieso startest du Schleifen immer ab 1???


    Ich habe dir jetzt schon 1000x erklärt, dass Arrays in Pawn/C/Java/C#/C++/Javascript und allen anderen C ähnlichen Sprachen bei 0 beginnt.


    Lässt du das ab 1 starten, überspringst du immer deinen 1. Eintrag..und eine Tankstelle wird nicht funktionieren ^^



    Es ist wichtig Redundanz zu vermeiden.


    Desweiteren hattest du da was beim else vertauscht, der Code löst schon mal ein Problem, was dir bei deinem vorherigen Code nicht aufgefallen ist.


    Du sagst zwar es werden irgendwo viele Zahlen ausgegeben...aber du das nicht wo...was soll das? :D Sollen wir jetzt raten bei welcher Ausgabe das passiert?!?!
    Gib mal präzise Infos, was genau ausgegeben wird...etc pp
    Printe dir eventuell auch mal Werte und gib einen schönen Debug der Variablen an, dann kann man dir auch sofort helfen..


    Immer diese halben Sachen und komischen Codes.


    Generell könntest du dir soviel arbeit sparen, wenn du deine Systeme mal vernünftig auslagern würdest.
    Ich wette bis zu 70% deiner Zeit verschwendest du damit redundanten Code zu schreiben.

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • new Reward[MAX_PLAYERS];


    Reward[playerid] = SetTimerEx("PlayReward", 900000, true, "i", playerid);


    forward public PlayReward(playerid);public PlayReward(playerid){ for(new i=0; i<MAX_PLAYERS; i++) { if(PlayerInfo[i][LoggedIn] == false) continue; if(isPlayerAFK(i)) return 1; PlayerInfo[i][Tokens] += 5; SFM(playerid,COLOR_COP,"Reward: {FFFFFF}Du bekommst 5 Tokens!"); SavePlayer(i); } return 1;}


    public OnPlayerDisconnect(playerid, reason){ KillTimer(Reward[playerid]);


    Das Problem dabei ist dass das System manchmal 5x 5 Tokens gibt. (manchmal auch 2 oder 6, ist immer unterschiedlich.) Hat jemand eine Lösung dafür?

    Einmal editiert, zuletzt von Romnus ()

  • as Problem dabei ist dass das System manchmal 5x 5 Tokens gibt. Hat jemand eine Lösung dafür?

    Du erstellst einen Timer für jeden Spieler und Loopst bei jedem Spieler durch alle Spieler o:


    Daaavon ist abzuraten ^^


    //Edit:
    Ahh wait, du willst, dass für jeden Spieler der Timer individuell gestartet wird.


    Mach es so:



    Bist du sicher, dass du da den Spieler direkt speichern magst?


    Also kannst du machen, aber reicht es nicht unter OnPlayerDisconnect oder dient das der Server-Crash Vorbeugung? ^^

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Vielen dank, funktioniert jetzt. Ja das mit dem Spieler speichern ist unnötig, habs jetzt bei OnPlayerDisconnect.

  • Der Compeiler meckert überall wo gebraucht steht.


    C:\Users\Patrick\Desktop\Reallife\gamemodes\Reallife.pwn(20036) : warning 202: number of arguments does not match definition


    new gebraucht = floatround(Tanke[i][tMaxLiterBenzin] - Tanke[i][tLiterBenzin]);
    SendClientMessage(playerid, COLOR_WHITE,"{21DD00}Es konnten nur %d Liter Benzin abgeliefert werden, die Tankstelle ist voll.", gebraucht);


    Muss man da kein float davor machen oder so?

  • Muss man da kein float davor machen oder so?

    Entweder fällt dir lesen schwer, oder das kopieren.


    Habe ich da irgendwo in meinem Code SendClientMessage stehen?


    Und jetzt frage dich, wieso das du das?


    Theoretisch muss man da kein Float vor machen, da du ja ganze Liter haben willst und das über das floatround gerundet wird.


    Und..meine letzte Frage, in welcher Zeile der Fehler auftritt sagst du mir nicht und gibst uns keine Debug Informationen...

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Ist das angeben eines :default wertes bei switch sinvoll? Bzw. warum macht man das? Oder dient das einfach nur als "else" ?

    Dient einfach nur als else.


    Muss man nicht angeben, der Code darunter würde ja quasi einfach weiter laufen.



    Oben im Script einbaue findet er SCM nicht

    Das muss natürlich unter das SCM oder schreibe es so:


    #define SCME(%0,%1,%2,%3) format(string,sizeof(string),%2,%3),SendClientMessage(%0,%1,string)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Alles klar, danke dir!


    Habe mal eine Frage:
    Ist es machbar NPC, bzw. Bots zu bauen, welche bspw. als annehmbare Gegner in einem Deathmatch dienen koennen?
    Die sich also auf den Spieler zu bewegen, man diese vernichten kann, und auch den Gegner angreifen?

  • Ist es machbar NPC, bzw. Bots zu bauen, welche bspw. als annehmbare Gegner in einem Deathmatch dienen koennen?
    Die sich also auf den Spieler zu bewegen, man diese vernichten kann, und auch den Gegner angreifen?

    Jup, das geht mit FCNPC.


    Zwar etwas fricklig, aber es wurde mal n gutes Include realisiert, was dir vielleicht weiter hilft: https://forum.sa-mp.com/showthread.php?t=663155

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • vor einigen Jahren war sowas Utopie.

    Awas, gab schon vor 5 Jahren, wenn nicht noch länger her Zombie Server, die einen angegriffen haben oder so.


    Halt alles um einiges schlechter realisiert, aber gegeben hat es das schon.


    Gerade in der englischen bzw russischen Szene xD


    Aber ich erinnere mich auch mal an einen Deutschen Server von Beavis und Blackace oder so xD

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Hehe alles klar.
    Ich habe mit NPC nur einmal zutun gehabt, undzwar etwa 2010, da habe ich etwa 25 NPCs auf meinen Server gehabt, das Ding hatte 100% CPU Auslastung, und ist immer wieder abgeschmiert :D Seitdem habe ich es nie wieder probiert.

  • Hallo, jemand da der mir evtl weiterhelfen könnte? Habe vor einiger Zeit mit einem eigenen Gamemode angefangen, lerne aber noch ziemlich viel. Viel bekomme ich mit dem SAMP Wiki und Beiträgen hier raus selbst gelöst, aber bei folgendem komme ich nicht weiter. Für das Admsystem hatte/habe ich mir das Selfmade für Anfänger, bzw zum weiter Scripten angesehen/teilweise übernommen, nun kommt aber im /a(dmchat) nur 1/4 meiner Nachricht im Chat an.


    Mein /a Code:
    ocmd:a(playerid, params[])
    {
    new atext[128], astring[128];
    if(PlayerInfo[playerid][pAdmin] < 1) return SendClientMessage(playerid, COLOR_RED, ""err""COLOR_HEX_WHITE""a404"");
    if(sscanf(params, "s", atext)) return SendClientMessage(playerid, COLOR_WHITE, "[Nutzung] /a(dminchat) [Text]");
    format(astring, sizeof(astring), "%s "COLOR_HEX_YELLOW"%s"COLOR_HEX_WHITE": %s", admName(playerid), PlayerName(playerid), atext);
    SendToAdms(COLOR_WHITE, astring);
    return 1;
    }


    SendToAdms:
    stock SendToAdms(COLOR, msg[])
    {
    for(new i = 0;i < MAX_PLAYERS; i++)
    if(PlayerInfo[i][pAdmin] >= 1) {
    SendClientMessage(i, COLOR, msg); }
    return 0;
    }


    Habe schon viel rumprobiert, bspw auch im Befehl die astring Größe erhöht (gleiches mit atext); Ohne Erfolg.

  • jemand da der mir evtl weiterhelfen könnte

    Schauen wir uns das doch mal an :)


    sscanf scheint glaube bei dir veraltet zu sein (du scheinst die Funktion zu nutzen, aber das Plugin ist um einiges besser), in diesem Fall, wo man auch nur einen Parameter nutzt, sollte man gänzlich darauf verzichten (erst bei einem String).


    Schreib das alles mal so:


    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Achja... Den Umstieg aufs Plugin zwischendurch hatte ich total vergessen. Hätte man natürlich anpassen sollen :whistling:
    Bin mittlerweile aufm Sprung, teste das später & schaue mir auch noch mal die genauere Funktionsweise des sscanf Plugins an.


    Danke dir soweit + melde mich später :thumbup:

  • @Kaliber



    Tankstelle: Diese Tankstelle hat 1176256512 Benzin erhalten.


    Werde den Code noch genauer anpassen keine sorge :D und danke für deine hilfe mit den abkürzungen fällt mir leichter :D

  • printf("Tankstelle: Diese Tankstelle hat %d Benzin erhalten.", floatadd(gebraucht, Tanke[i][tLiterBenzin]))

    floatadd gibt immer einen Float Wert zurück.


    Also musst du:


    printf("Tankstelle: Diese Tankstelle hat %d Benzin erhalten.", floatround(floatadd(gebraucht, Tanke[i][tLiterBenzin])));


    machen.

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

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