DM Arena erstellen mit Random Spawns

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
  • Hallo,


    da ich mich dazu entschlossen habe scripten zu lernen habe ich mal angefangen aus "Spaß" einen DM Server zu scripten, um dabei etwas zu lernen.


    Nun:
    Ich möchte eine DM Arena erstellen mit Random Spawns, natürlich will ich dazu noch einen /Exit Befehl einbauen.
    Wie soll ich da anfangen und was sollte ich beachten? Wäre nett wenn ihr mir erklären würdet, wie ich da vorgehen soll. :)


    Viele Grüße
    Aviero

  • Schau mal hier:
    http://forum.sa-mp.com/showthread.php?t=162488


    Nur dass du es nicht in OnPlayerSpawn packst, sondern in deinen Befehl.


    Zum /exit kannst du ja zum Beispiel abfragen, ob der Spieler in einer anderen virtuellen Welt ist, die du beim Befehl gesetzt hast, oder du machst eine PVar auf 1 wenn er die Area betritt.


    Edit:
    Siehe auch:
    http://forum.sa-mp.com/showthread.php?t=176688



    Edit2:
    @CIBERKILLER: Es gibt keine deutschen Tutorials dazu, zumindest habe ich keins gefunden, welches dazu noch etwas taugt. Hast du eins?

    3HZXdYd.png

    2 Mal editiert, zuletzt von Jeffry ()

  • Nun, ich habe mir mal vorgeschlagenen Tutorials von Jeffry angeschaut und es auch halbwegs verstanden, jedoch würde ich das ganze gerne in OCMD haben.




    Wäre nett, wenn Du mir ein kleines Beispiel machen würdest. Ich habe zwar ungefähr verstanden, wie es funktionieren soll, kann es jedoch nicht umsetzen. :whistling:


    Viele Grüße

  • Du schreibst das einfach in einen ocmd Befehl:
    ocmd:dm(playerid, params[])
    {
    new Random = random(sizeof(RandomSpawns));
    SetPlayerPos(playerid, RandomSpawns[Random][0], RandomSpawns[Random][1], RandomSpawns[Random][2]);
    SetPlayerFacingAngle(playerid, RandomSpawns[Random][3]);
    return 1;
    }

  • Beitrag von ArTeX ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Okay. Das mit den Random Spawns habe ich verstanden, nun zu der Sache mit den Arenen.


    Ich möchte es so haben, wenn eine Person bspw. in einer Arena ist, kann er nicht mehr in eine andere. Das heißt, er muss als erstes die Arena verlassen und anschließend kann er in eine andere Arena gehen.


    Theoretisch weiß ich, wie das funktionieren soll, jedoch kann ich es leider nicht umsetzen..


    Viele Grüße

  • Ähm, ja.. xD


    new busy[MAX_PLAYERS];
    new inJail[MAX_PLAYERS];
    new inDM[MAX_PLAYERS];


    ocmd:dm(playerid,params[])
    {
    SetPlayerPos(playerid,1763.2980,-1896.6514,13.5625,276.7087);
    busy[playerid] = 1;
    inDM[playerid] = 1;
    return 1;
    }


    omcd:exit(playerid,params[])
    {
    if(inJail[playerid] == 0)
    {
    buy[playerid] = 0;
    inDM[playerid] = 0;
    return 1;
    }
    if(busy[playerid] == 1)
    {
    SendClientMessage(playerid,COLOR_ORANGE,"** Du kannst diesen Befehl nicht benuzten, weil du bereits in einer Arena bist oder im Gefängnis sitzt. **");
    return 1;
    }
    return 0;
    }

  • SetPlayerPos(playerid,1763.2980,-1896.6514,13.5625,276.7087);
    zu:
    SetPlayerPos(playerid,1763.2980,-1896.6514,13.5625);
    SetPlayerFacingAngle(playerid, 276.7087);


    Kannst du die Zeilen mit den Fehlern bitte mal markieren? Und die restlichen Zeilen posten? Das sind nämlich Errors die gar nicht hier vorkommen.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ich hatte nur Schreibfehler, lol.
    Beim Compilen erhalte ich nun keine Fehler mehr, ich teste das ganze mal eben Ingame.


    Okay, also:
    Der Befehl /dm funktioniert, jedoch möchte ich es so machen, dass wenn er bereits in der DM Arena ist, nicht erneut da reingehen kann.


    &


    Wenn er bereits nicht in einer Arena ist und dann /exit eingibt, sollte eine Fehlermeldung kommen, dass er nicht, wenn er schon im "/EXIT Modus" ist erneut ins Exit Modus gehen kann.


    Wie genau frage ich das nun ab? Und wie formatiere ich das ganze richtig?


    Viele Grüße

    Einmal editiert, zuletzt von Aviero ()


  • new busy[MAX_PLAYERS];
    new inJail[MAX_PLAYERS];
    new inDM[MAX_PLAYERS];



    ocmd:dm(playerid,params[])
    {
    SetPlayerPos(playerid,1939.1534,-1771.2437,19.5250);
    SetPlayerFacingAngle(playerid, 88.5281);
    busy[playerid] = 1;
    inDM[playerid] = 1;
    return 1;
    }


    ocmd:exit(playerid,params[])
    {
    if(inJail[playerid] == 0)
    {
    SetPlayerPos(playerid,1763.2980,-1896.6514,13.5625);
    SetPlayerFacingAngle(playerid, 276.7087);
    busy[playerid] = 0;
    inDM[playerid] = 0;
    return 1;
    }
    if(busy[playerid] == 1)
    {
    SendClientMessage(playerid,COLOR_ORANGE,"** Du kannst diesen Befehl nicht benuzten, weil du bereits in einer Arena bist oder im Gefängnis sitzt. **");
    return 1;
    }
    return 0;
    }

  • Müsste so passen:
    ocmd:dm(playerid,params[])
    {
    if(inDM[playerid] == 1)
    {
    SendClientMessage(playerid,COLOR_ORANGE,"** Du kannst diesen Befehl nicht benuzten, weil du bereits in einer Arena bist. **");
    return 1;
    }
    if(busy[playerid] == 1)
    {
    SendClientMessage(playerid,COLOR_ORANGE,"** Du kannst diesen Befehl nicht benuzten, weil du im Gefängnis sitzt. **");
    return 1;
    }
    SetPlayerPos(playerid,1939.1534,-1771.2437,19.5250);
    SetPlayerFacingAngle(playerid, 88.5281);
    busy[playerid] = 1;
    inDM[playerid] = 1;
    return 1;
    }


    ocmd:exit(playerid,params[])
    {
    if(inDM[playerid] == 0)
    {
    SendClientMessage(playerid,COLOR_ORANGE,"** Du kannst diesen Befehl nicht benuzten, weil du nicht in einer Arena bist. **");
    return 1;
    }
    if(inJail[playerid] == 0)
    {
    SetPlayerPos(playerid,1763.2980,-1896.6514,13.5625);
    SetPlayerFacingAngle(playerid, 276.7087);
    busy[playerid] = 0;
    inDM[playerid] = 0;
    return 1;
    }
    if(busy[playerid] == 1)
    {
    SendClientMessage(playerid,COLOR_ORANGE,"** Du kannst diesen Befehl nicht benuzten, weil du im Gefängnis sitzt. **");
    return 1;
    }
    return 1;
    }