Beiträge von Douq

    Danke dir!
    Wie kann ich ein Delay erstellen?


    Ich habe eine KeyState abfrage, ich will nicht, dass man die Taste penetrieren kann und das dadurch die weiteren Funktionen öfters aufgerufen werden.
    Was kann ich da machen?

    Wenn ich es richtig verstehe, möchtest du dass wenn man eine bestimmte Taste drückt, erst nach drei Sekunden (z.B.) wieder die Taste drücken kann bzw. der Code ausgeführt wird? Das würde sich beispielsweise über das Speichern des aktuellen Timestamps (gettime()) realisieren. Dann kannst du den Wert in einer Variable speichern, die Differenz bilden und schauen, ob diese beispielsweise drei ist.


    Sollte die Differenz unter einer Sekunde liegen (beispielsweise alle 500ms) kannst du mit [wiki]GetTickCount[/wiki]() arbeiten. Falls du dich für diese Funktion entscheidest, kann ich dir den Wikieintrag ans Herz legen.

    Ich habe ein Problem. Ich will ein Timer setzten, dieser wird aber öfters gesetzt, wenn ich in den anderen Areas rein gehe.
    Könnte ich noch eine Variable erstellen und dann abfragen, ob der Timer bereits gesetzt ist, oder gibt es eine vernünftige Lösung?


    C
    if(areaid == XArea[0])
    	{
    SetTimerEx("X",2000,true,"i",playerid);
    		PlayerArea[playerid] = 1;
    	}
    	if(areaid == XArea[1])
    	{
    SetTimerEx("X",2000,true,"i",playerid);
    		PlayerArea[playerid] = 1;
    	}

    I

    SetTimerEx() gibt eine Zahl zurück, die eine einmalige ID für die Timer darstellt. Wenn du diese in eine Variable speicherst, kannst du checken ob bereits ein Timer existiert und ggf. diesen per KillTimer killen. Solltest du den Weg gehen, solltest du entsprechend auch beim Aufruf des Timers die Variable auf einen invaliden Wert setzen (z.B. -1).

    Ich bin der Meinung, dass unter OnGameModeInit() mindestens 1x [wiki]AddPlayerClass[/wiki]() sein muss, damit das Spawnen von Spielern einwandfrei funktioniert. Bei dir sehe ich das aber nicht? Und mit SetSpawnInfo würde ich den richtigen Spawnpunkt setzen, anstatt nur 0 zu verwenden.

    Also wenn ich deinen Code richtig verstehe, ist der Ansatz von Kaliber falsch.


    Korrigiere mich wenn ich falsch liege, aber jedes "building" hat ein "bizint". buildings.Interior beinhaltet einen Index für BizInts. BizInts.Interior ist die wirkliche InteriorID, die gesetzt werden soll. Wenn dem so ist stellt sich mir aber die Frage, wieso du 8x das gleiche Interior erstellst - das ist dann ja gar nicht notwendig. Außerdem fehlen uns die Werte, die in dem Array bInfo sind.


    Um zu überprüfen, ob es ein begehbares Business ist oder nicht würde sich beispielsweise auch anbieten, buildings.Interior auf -1 zu setzen -> invalider Interior gleich nicht betretbar (in dem Fall ist der Check selbstverständlich auch anzupassen).


    Zusätzlich: Setzt du denn beim Spawn / wo auch immer die P-Var "InBiz" auf -1? Ansonsten wird deine Überprüfung am Anfang immer wahr sein, da GetPVarInt() 0 zurückgibt, falls diese nicht existiert.


    Ich würde dir auch empfehlen deine variablen klarer zu benennen oder ggf. zu kommentieren - die sind nicht wirklich eindeutig.

    Spontan würden mir da zwei Möglichkeiten einfallen:


    • Ternärer Operator. Die Syntax ist ungefähr BEDINGUNG ? trifft zu : trifft nicht zu . Demnach würde es dann so aussehen (pInfo[playerid][pGehalt] == 0 ? ("rot") : ("grün"))
    • Altbekannter weg, in dem du die Farbe vor dem format bereits ermittelst:

      Code
      new farbCode[8];
      if(pInfo[playerid][pGehalt] == 0} format(farbCode, 8, "rot"); 
      else format(farbCode, 8, "grün");

    Beides jeweils analog zu pSteuern.

    Hallo,


    da es keine Werbung zurzeit gibt, der Server auch nicht online ist und es sonst keine Instanzen gibt, die bewertbar sind, halte ich es für sinnig dieses Thema zu schließen. Der Umgangston in diesem Thread ist ja auch mal wieder bemerkenswert.

    Bist du dir denn sicher, dass der Server wirklich neustartet, oder verlieren einfach nur alle Spieler + Bots die Verbindung? Der log ist leider zu unvollständig, um das beurteilen zu können.

    In Zeile 20413 wird auf ein Array-Index (13) zugegriffen, der mit der Array-Größe kollidiert (13). Musst mal schauen was da los ist und ggf. Array vergrößern oder den Zugriff vorher abfangen

    @Sub Royal Anstatt so viel redundanten Code zu haben, würde ich einfach *_TEAM_COLOR_TAG in ein Array schmeißen und per remainingTeamID auf den jeweiligen Index zu greifen. Dann hast du deutlich weniger Zeilen, sparst dir das mit den Markos und das hinzufügen / entfernen weiterer Teams (im Allgemeinen die Wartbarkeit) erleichtert sich deutlich.