Wie fügt man Map ein in Script ?

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
  • Ich hab einen eigenen Server und einen Mapper der hat mir das Map für Wheelman gegeben
    und ich weiß nicht wie ich es auf den Server rauf kriege bzw er hat tore eingefügt und ich weiß nicht wie man
    die Tore befehle einstellen soll.


    Eure Hilfe benötigt Danke :)


    Über TeamViewer könnt ihr auch helfen

  • Mit was Arbeitet den dein Mapper? Den San Andreas Map Constructor oder den MTA Map Editor?


    Die Objekte müssten für das Skript in folgenden Format sein:


    CreateObject(Modelid, Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ);


    Wenn der Code anders aussieht musst du den einmal Konverten:


    Map Konverter


    bei Tor befehlen kann ich dir auch nicht direkt Helfen ohne Code. Du musst nur mit den Achsen spielen. Schau dir dafür mal ein Tutorial an, es gibt hier sehr viele wo dir sowas erklärt wird.
    Aber ein kleinen Tipp bekommst du noch:


    Tore kannst du mit MoveObject bewegen lassen.
    Siehe:

    Wikipedia


    Tutorials: Einfach mal hier im Tutorial Bereich schauen. Da findest du etwas!

  • Also. Zuallererst fügt man die Map in den Public "OnGameModeInit" ein.
    Dazu muss die Map in CreateObject, oder CreateDynamicObject sein wenn du einen Streamer benutzt. Sollte es noch im MTA Fomat sein, kannst du es mit diesem (http://gtamap.delux-host.com/converter/) Converter auf das PAWN oder auf ein Streamer Format umwandeln.
    Hat man es dann auf dem gewünschten Format kann man es in den Public "OnGameModeInit" einfügen.


    Jetzt zu der Frage mit den Toren. Man kann ein Tor machen, dass mit einem Befehl auf und zu geht. Mann kann aber auch eins machen wo das Tor sich nach einer bestimmten Zeit wieder schließt. Ich zeige dir diese beiden Varianten.


    1. Die Befehl auf/zu Variante
    Zuerst muss man das Tor definieren. Somit kann man es später im Befehl auch anwenden. Dazu erstellen wir jetzt eine Variable.


    new Tor;


    Jetzt haben wir diese erstellt, und sie steht nur so da. Um jetzt dieser Variable ein Tor zuzuweisen gehen wir in OnGameModeInit und schauen wo sich das Tor befindet. Es ist ratsam die Tore extra einzufügen, damit man es später leichter hat. Hat man das Tor gefunden schreiben wir nun folgendes:


    Tor = CreateObject(.....);
    Tor = CretaeDynamicObject(....);


    Jetzt haben wir das Tor, also das Objekt auf dieser Variable. Nun können wir auch mit dem Befehl beginnen, diesen machen wir in dem Public OnPlayerCommandText. Das Grundgerüst sieht so aus.


    if(strcmp(cmdtext,"/tor",true) == 0)
    {
    return 1;
    }


    Der Befehl steht. Wenn man jetzt Ingame /tor machen würde, würde nichts passieren. Das ändern wir jetzt. Zuerst erstellen wir unter der Variable "Tor" eine neue bool.


    new bool:TorStatus = false;


    Mit dem "TorStatus" können wir nun das Tor "lenken". Sprich wenn man den Befehlt einmal eingibt öffnet es sich, und wenn man den Befehl ein zweites mal eingibt schließt es sich. Um das zu ermögliche schreiben wir jetzt folgendes in den Befehl.


    if(TorStatus == false)
    {
    TorStatus = true;
    }
    else if(TorStatus == true)
    {
    TorStatus = false;
    }


    Somit bestimmen wir ob das Tor auf oder zu gehen soll. Haben wir das gemacht, kommt jetzt MoveObjectoder MoveDynamicObject. Je nachdem ob du einen Streamer benutzt. Jetzt lassen wir das Tor erstmal öffnen. Dazu machen wir -10 an die Z Achse. Somit verschwindet das Tor im Boden.


    MoveObject(Tor,X,Y,Z-10,5.0);
    MobeDynamicObject(Tor,X,Y,Z-10,5.0);


    Was machen wir jetzt? Wir lassen das Objekt "Tor" um -10 in den Boden senken, und das mit der Geschwindigkeit 5. X,Y,Z sind die Koordinaten von Tor. Also die vom CreateObject bzw. CreateDynamicObject wenn du einen Streamer benutzt.. Nun ist das Tor unten, und die Variable "TorStatus" ist auf true. Wenn wir jetzt den Befehl erneut eingeben, soll das Tor ja wieder hochfahren. Das machen wir, in dem wir nun die alten Koordinaten dort wieder einfügen, also das -10 weg.


    MoveObject(Tor,X,Y,Z,5.0);
    MobeDynamicObject(Tor,X,Y,Z,5.0);


    Zusammen sieht das so aus


    if(strcmp(cmdtext,"/tor",true) == 0)
    {
    if(TorStatus == false)
    {
    MoveObject(Tor,X,Y,Z-10,5.0);
    MoveDynamicObject(Tor,X,Y,Z-10,5.0);
    TorStatus = true;
    }
    else if(TorStatus == true)
    {
    MoveObject(Tor,X,Y,Z,5.0);
    MoveDynamicObject(Tor,X,Y,Z-10,5.0);
    TorStatus = false;
    }
    return 1;
    }


    Jetzt kann man noch eine Message senden lassen wenn das Tor auf oder zu ist.


    SendClientMessage(playerid,FARBE,"Das Tor ist offen");
    SendClientMessage(playerid,FARBE,"Das Tor ist zu");


    2. Die Tor auf/zu Variante mit dem Timer


    Um das möglich zu machen, brauchen wir einen neuen Public. Wenn wir den jetzt nur so erstellen, kommt ein Warning. Man muss immer ein forward Publicname(); machen, damit alles funktioniert. Das machen wir jetzt. Diesen neuen Public mache ich ganz unten in das Script.


    forward TorZu();
    public TorZu()
    {
    return 1;
    }


    Jetzt können wir einen Timer verwenden. Dieser Timer greift nur auf einen Public. Alles andere würde nicht funktionieren. Wir werden nun in diesen Public schon einmal den "Zu-Vorgang" hineinschreiben.


    public TorZu()
    {
    MoveObject(Tor,X,Y,Z,5.0);
    MoveDynamicObject(Tor,X,Y,Z-10,5.0);
    return 1;
    }


    Wenden wir uns nun dem Befehl zu. Diesen muss man jetzt ändern. Man macht jetzt nur den "Öffnen-Vorgang" hinein. Den "Schließen-Vorgang" übernimmt ja dann der Timer.


    if(strcmp(cmdtext,"/tor",true) == 0)
    {
    MoveObject(Tor,X,Y,Z,-10,5.0);
    MoveDynamicObject(Tor,X,Y,Z-10,5.0);
    return 1;
    }


    Auch dazu erstellen wir jetzt einen Timer der dann das Tor schließt. Dazu verwenden wir SetTimer.


    SetTimer("TorZu",2000,false);


    was machen wir jetzt? Wir sagen dem Timer das er auf den Public "TorZu" zugreifen soll. Und zugreifen soll er erst in 2 Sekunden. (2000 Millisekunden = 2 Sekunden). Mit false sagen wir das der Timer nicht wiederholt werden soll. Wenn wir jetzt den Befehl eingeben würden, würde das Tor 1. aufgehen und 2. sich automatisch schließen. Kommen wir nun zu der Abfrage ob der Spieler in der nähe des Tores ist. Es ist sinnlos wenn man einen Tor Befehl erstellt den man dann überall anwenden kann. Deswegen gibt es eine Abfrage ob der Spieler in der nähe eines Punktes ist. Das macht man mit IsPlayerInRangeOfPoint. Dazu nehmen wir die Koordinaten vom Tor.


    if(IsPlayerInRangeOfPoint(playerid,7.0,X,Y,Z))
    {
    //Tor Zeugs
    }
    else SendClientMessage(playerid,FARBE,"Du bist nicht in der Nähe");


    Wir fragen ab ob der Spieler in der Nähe vom Tor ist. Die Distanz kann man für sich einstellen, je nachdem wie weit man den Befehl nutzen darf/soll.
    So viel erfolg beim Scripten.

  • Ich Danke euch mal für eure netten Antworten :)


    Da ich kein großer Scripter bin könnte mir vlt. jmnd über TeamViewer helfen :)?


    Das wäre eig sehr nett,

    Ich würde vorschlagen, weil wir alle mal klein angefangen haben. Machst du das auch mal ;) Probier es einfach, wenn du Fehler o. Fragen hast kannst du diese hier im Forum stellen! Dafür sind wir immerhin da. Einfach mal loslegen, Gamer hat dir das alles so wie es aussieht sehr gut erklärt. Das wäre mein Vorschlag, sonst lernst du sowas nie ... Einfach anfangen. Also keine Angst! So viel kann man nicht falsch machen :)

  • Famarca du hast recht :)
    Aber ich kenn mich überhaupt nicht aus ich weiß wirklich nicht was alles T4ls
    Geschrieben hat :(


    Versuch einfach die Scriptteile zu verstehen. Lies dir das ganz genau durch, und versuch zu verstehen, was das Script macht. Dann klappt das.

    [align=center]