[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
  • Hö,
    ich wunder mich gerade, wie ich die Objekte destroye vom Fahrzeug?
    ObjektLkwJob1[1][/*Index*/]


    Der Index ist ja gleich pInfo[playerid][pJobVeh] (< -- das ist JobFahrzeug[i])
    Ist das nicht Riskant?


    Funktioniert der Code so auch, wenn ich nicht der Killer vom Fahrzeug bin, sollte es ja, kann es nur nicht testen :D

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Wie realisiere ich am cleversten ein "Runden" System in einem Gamemode mit mehreren Minigames?


    Weil bei einer Programmiersprache wie C oder PAWN wird sowas ja ziemlich sperrig, wenn ich in jedem public abfragen muss welcher Spielmodus aktuell aktiv ist, und ich dann immer fuer diesen Modus die Dinge definieren muss.
    Undzwar ich habe folgendes.
    Ich habe bspw. Spielmodi wie Deathmatch Rennen etc. und nachdem z.B. ein Deathmatch gespielt wurde, soll aus dem Pool der Minigames ein anderer ausgesucht werden, und dieser dann gestartet werden.
    Bisher habe ich das ziemlich doof geloest indem ich halt fuer jeden Mode ein eigenes Script habe, was vermutlich einfacher ist.
    Problem ist: Das Random aussuchen geht schwer, und der gmx ist ja auch nervig.


    Oder ist da der Weg ueber eine objektorientierte Sprache ueber APIs sinvoller?

    Einmal editiert, zuletzt von Sub Royal ()

  • Wieso wird der Code trotzdem jede Sekunde aufgerufen ??



    if(BeatUnix[i] > 0) { BeatUnix[i] --; }
    else if(BeatUnix[i] == 0 && SetPVarInt(i,"BeatUnix",1)) { UnfreezePlayer(i); SetPVarInt(i,"BeatUnix",0); }


  • else if(BeatUnix[i] == 0


    zu:


    if(BeatUnix[i] > 0) { BeatUnix[i] --; }
    else if(BeatUnix[i] <= 0) { UnfreezePlayer(i); }


    Verstehe aber auch nicht wieso du den PVar setzt, den Spieler Entfreezt und dann den PVar wieder auf 0 setzt.
    In dieser Abfrage, ergibt dies keinen wirklichen Mehrsinn.


    MfG.

    Bestes Zitat des Jahres von Max Jackson!
    Vertrauen kann man mir auch, ich bin hier auf Breadfish schon sehr lange Aktiv und das sollte schon auf einer gewissen Weise, eine Vertrauensbasis schaffen. Ich meine, meine schlimmste Verwarnung war lediglich eine Morddrohung - Is ja nix.

  • else if(BeatUnix[i] == 0zu:if(BeatUnix[i] > 0) { BeatUnix[i] --; }else if(BeatUnix[i] <= 0) { UnfreezePlayer(i); }


    Verstehe aber auch nicht wieso du den PVar setzt, den Spieler Entfreezt und dann den PVar wieder auf 0 setzt.
    In dieser Abfrage, ergibt dies keinen wirklichen Mehrsinn.


    MfG.

    Wird trotzdem weiterhin ausgeführt.

  • Zeig mal bitte die ganze Funktion dazu.


    //e Und bei UnfreezePlayer();
    BeatUnix[i] = -1;


    Und deine Abfrage ändern in:
    else if(BeatUnix[i] == 0zu:if(BeatUnix[i] > 0) { BeatUnix[i] --; }else if(BeatUnix[i] == 0) { UnfreezePlayer(i); }

    Bestes Zitat des Jahres von Max Jackson!
    Vertrauen kann man mir auch, ich bin hier auf Breadfish schon sehr lange Aktiv und das sollte schon auf einer gewissen Weise, eine Vertrauensbasis schaffen. Ich meine, meine schlimmste Verwarnung war lediglich eine Morddrohung - Is ja nix.

  • Zeig mal bitte die ganze Funktion dazu.


    //e Und bei UnfreezePlayer();
    BeatUnix[i] = -1;


    Und deine Abfrage ändern in:
    else if(BeatUnix[i] == 0zu:if(BeatUnix[i] > 0) { BeatUnix[i] --; }else if(BeatUnix[i] == 0) { UnfreezePlayer(i); }


    if(Spieler[i][pKnast] == 1) {
    if(Spieler[i][pKnasttime] > 0) { Spieler[i][pKnasttime] --; }
    else {
    Spieler[i][pKnast] = 0;
    Spieler[i][pKnasttime] = 0;
    Spieler[i][pKnastZelle] = 0;
    SetPlayerInterior(i,0);
    SetPlayerVirtualWorld(i,0);
    UnfreezePlayer(i);
    SpawnPlayer(i);
    }
    if(BeatUnix[i] > 0) { BeatUnix[i] --; }
    else if(BeatUnix[i] <= 0) { UnfreezePlayer(i); }
    }


  • Hier, so sollte es klappen.



    if(Spieler[i][pKnast] == 1){
    if(Spieler[i][pKnasttime] > 0) { Spieler[i][pKnasttime] --; }
    else {
    Spieler[i][pKnast] = 0;
    Spieler[i][pKnasttime] = 0;
    Spieler[i][pKnastZelle] = 0;
    SetPlayerInterior(i,0);
    SetPlayerVirtualWorld(i,0);
    UnfreezePlayer(i);
    SpawnPlayer(i);
    }
    if(BeatUnix[i] > 0) { BeatUnix[i] --; }
    else { UnfreezePlayer(i); BeatUnix[i] = 0;}
    }

    Bestes Zitat des Jahres von Max Jackson!
    Vertrauen kann man mir auch, ich bin hier auf Breadfish schon sehr lange Aktiv und das sollte schon auf einer gewissen Weise, eine Vertrauensbasis schaffen. Ich meine, meine schlimmste Verwarnung war lediglich eine Morddrohung - Is ja nix.

  • Wenn ich diesen Befehle eingebe kommt das ich bitte die /help öffnen soll.


    Wo liegt der Denkfehler ?




    CMD:accept(playerid,params[])
    {
    if(!Spieler[playerid][pLoggedIn])return 1;
    new option[32],string[128];
    if(sscanf(params,"s[32]",option))
    {
    SendClientMessage(playerid,Grau,"|__________________ Accept __________________|");
    SendClientMessage(playerid,Weiss,"Verwendung: /accept [Name]");
    SendClientMessage(playerid,Weiss,"Verfügbare Namen: Stats");
    SendClientMessage(playerid,Grau,"|____________________________________________|");
    return 1;
    }
    if(strcmp(option,"Stats",true) == 0)
    {
    if(AcceptStats[playerid] != -255)
    {
    AcceptStats[playerid] = -255;
    ShowStats(AcceptStats[playerid],playerid);
    format(string,sizeof(string),"* %s schaut sich deine Statistik an.",Spieler[playerid][pName]);
    SendClientMessage(AcceptStats[playerid],Hellblau,string);
    }
    else { SendClientMessage(playerid,Grau,"Niemand hat dir das Angebot gemacht, sich Statistiken anzuschauen."); }
    }
    return 1;
    }

  • Bisher habe ich das ziemlich doof geloest indem ich halt fuer jeden Mode ein eigenes Script habe, was vermutlich einfacher ist.
    Problem ist: Das Random aussuchen geht schwer, und der gmx ist ja auch nervig.

    Nutze doch Includes ;)


    Für jeden Mode, ein Include :)


    Und baust halt in jedes Include auch eine Reset Funktion ein, was alle Objekte + Fahrzeuge etc zerstört und eben alles zurücksetzt :)


    Dann brauchst du keinen gmx, setzt das einfach alles zurück und startest einfach den neuen Mode mit einer Init Funktion :)


    Dann hast du auch alles separat, aber ohne gmx oder anderen Schnick-Schnack. (arbeite schön mit static, dann kommt sich da nichts in die Quere Modularer Skripten).



    Wenn ich diesen Befehle eingebe kommt das ich bitte die /help öffnen soll.

    Wie die /help...was meinst du? Davon steht doch gar nichts im Befehl?


    Aber ich würde es an deiner Stelle so schreiben:



    Finde du solltest Makros nutzen...weiiil macht den Code übersichtlicher und du kannst wesentlich schneller skripten, aber jeder wie er mag.


    Kannst natürlich auch alles ausschreiben...


    Falls du etwas mehr lesen magst: https://breadfish.de/index.php…-strukturierter-skripten/


    Gibt viele Infos darüber :)


    Aber ist natürlich jedem selbst überlassen ^^

    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
  • Für jeden Mode, ein Include

    Halt ich persönlich nicht für sinnvoll,
    Dort verliert man eher die Übersicht und man muss für jedes Objekt/Auto/Textdraw etc. diese dauernd neu und entladen.
    Das ist nicht nur viel zu aufwändig sondern auch nervenaufreibend, wenn man eine Sache irgendwie vergessen hat zu löschen.


    Sinnvoller wäre es hier mit changemode -> [wiki]SendRconCommand[/wiki]zu arbeiten und entsprechend verschiedenen Gamemodes.
    Man kann den Mode sogar zufällig auswählen lassen. Geht mit Modes in einem Gamemode auch, aber man kommt um hooking und abfragen welcher Mode aktiv ist nicht herum.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Dort verliert man eher die Übersicht

    Worüber?



    und man muss für jedes Objekt/Auto/Textdraw etc. diese dauernd neu und entladen.

    dauernd? 1x laden und 1x entladen...


    Das spart halt aber den gmx...



    wenn man eine Sache irgendwie vergessen hat zu löschen.

    Wie sollte das denn passieren?
    Wenn es genau N Variablen gibt, muss man doch nur durch N Variablen gehen mit einer Schleife und eben löschen...



    Naja..wie jeder meint, ich find es äußerst praktisch xD

    ast2ufdyxkb1.png


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

  • dauernd? 1x laden und 1x entladen...

    Für jeden mode einmal
    Also schon "dauernd"

    Das spart halt aber den gmx...

    Ein Glück haben wir heute alle keine Zeit mehr. Zumal das Laden und Entladen von allem auch "Zeit kostet".

    Worüber?

    Wenn man mit pawno arbeitet dann verliert man schon schnell die Übersicht, wenn man wirklich Modular arbeitet.
    Wenn man jeden Mode in ein Include packe, dann kann ich auch gleich bei seperaten Modes bleiben und muss mir keine Gedanken darüber machen ob ich alles entladen habe.

    Wenn es genau N Variablen gibt, muss man doch nur durch N Variablen gehen mit einer Schleife und eben löschen...

    Dann muss man jedes Object in einen Objekt Pool packen, find ich - falls man keinen Streamer benutzt, etwas blöd.

    Naja..wie jeder meint, ich find es äußerst praktisch xD

    Das musst du mir jetzt mal erklären, in wiefern ist es praktischer, alles in einer riesigen Sammlung an Includes zu haben, die man nicht mal ohne restart neu laden kann ?


    Modulares arbeiten hat durchaus seine Vorteile, aber hier ist es mMn nicht angebracht.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Mois,
    random(sizeof(/*Array-Name*/));
    Wie kann ich die ersten beiden Einträge eine geringe Wahrscheinlichkeit geben beim randomisieren wie zuvor gezeigt?


    Heißt ich will das die Zahl 0 oder 1 eine geringere Wahrscheinlichkeit haben als die 2 hier im Beispiel

    C
    stock const AHVehTypes1[][] =
    {
        {"Fahrzeug1",410, 2500}, //Geringe Wahrscheinlichkeit
        {"Fahrzeug2",411, 1000},
        {"Fahrzeug3",412, 5020}, //hohe Wahrscheinlichkeit

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Du kannst das bspw. prozentual machen


    new rand = random(100);


    if(rand < 20) // Fahrzeug 1
    else if(rand >= 20 && rand < 30) // Fahrzeug 2
    else if(rand >= 30) // Fahrzeug 3

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Wann benutzte ich >= und wann >
    Ist das nicht das Selbe?



    Irgendwie spawnt mein Fahrzeug nicht, warum?


    C
    stock const Float:AHCarSpawn1[][] = 
    {
        {740.280,-1346.980,13.209,242.152},
    //... +5 Einträge
    
    
    };


    C
    new AutohausCar1[6];
    Code
    stock const AHVehTypes1[][] =
    {
        {"X","X",411,1},
    // +8 Einträge
    };

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • new zufall = random(1000);
    if(zufall < 10) Fahrzeug = 0;
    else if(zufall <= 10 && zufall < 20) Fahrzeug = 1;
    else if(zufall >= 21) Fahrzeug = random(7) + 2;

    Mach mal nur:


    C
    new zufall = random(100);
    if(zufall < 10) Fahrzeug = 0; //10% Wahrscheinlich
    else if(zufall < 20) Fahrzeug = 1; //10% Wahrscheinlich
    else Fahrzeug = random(7) + 2; //80% Wahrscheinlich

    > bedeutet eben echt größer.


    6 > 5 = 6 ist größer als 5...richtig
    6 > 6 = 6 ist größer als 6...falsch


    6 => 5 = 6 ist größer gleich 5...richtig
    6 => 6 = 6 ist größer gleich 6...richtig


    Also >= ist größer oder gleich

    ast2ufdyxkb1.png


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

  • ne sagt nichts, alles normal


    //Edit zum 3. Mal :D


    Fehler gefunden, ich hatte kein Enum benutzt.


    Warum wiederholt er das ganze richtig oft? (soll nur alle AHCarSpawn1 mit Fahrzeuge Füllen (6) Stück)Komme mit Doppelschleifen noch nicht so klar... Oder soll man es nicht so machen
    http://prntscr.com/nzds61


    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

    3 Mal editiert, zuletzt von Jameso ()