Tutorial für eigene Ein- Ausgänge ohne Cmd

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
  • Hi Leutz,


    ich will euch heute mal zeigen, wie man eigene Ein- und Ausgänge ohne Cmd macht.


    Damit wir eigene Eingänge machen können, müssen die Trichter erst einmal raus.
    Das geschied hier:
    public OnGameModeInit()
    {
    DisableInteriorEnterExits();
    return 1;
    }
    WARNUNG: Mit dem machst du nicht nur die gelben Trichter weg, nein sondern auch
    die NPC's in Burgershots und Ammunations. Die Ein- und Ausgänge musst du dann
    selber machen (Saven und Einfügen)!


    als nächstes brauchen wir einen Timer:
    forward Ports(playerid);


    den Timer benennen wir:
    new PortTimer;


    Der Timer muss natürlich irgendwie gestartet werden.
    Das machen wir unter public GamemodeInit:


    public OnGameModeInit()
    {
    PortTimer = SetTimer("Ports", 1000, 1);
    return 1;
    }


    Jetzt kommen wir zu den Ein- Ausgängen:
    public Ports(playerid)
    {
    if (PlayerToPoint(1, playerid, 1555.1205, -1675.6710, 16.1953)) // PD Eingang // if (PlayerToPoint(Radius, playerid, Float:X, Float:Y, Float:Z)) // Wo der Spieler Stehen soll
    {
    SetPlayerInterior(playerid, 6);
    SetPlayerPos(playerid, 246.7840, 63.9002, 1003.6406); // Wo der Spieler hin kommen soll
    SetPlayerFacingAngle(playerid, 0.0);
    }
    else if (PlayerToPoint(1, playerid, 246.7282, 62.7136, 1003.6406)) // PD Ausgang
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerPos(playerid, 1552.4490, -1674.9897, 16.1953);
    SetPlayerFacingAngle(playerid, 90.0);
    }
    return 1;
    }


    Damit ihr wisst, wo die Ein- Ausgänge sind, machen wir noch Pickups:
    public OnGameModeInit()
    {
    CreatePickup(1318, 23, 1555.1205, -1675.6710, 16.1953); // PD Eingang // kleiner gelber Trichter
    CreatePickup(1559, 23, 246.7282, 62.7136, 1003.6406); // PD Ausgang // Weißer Pfeil
    return 1;
    }


    Bei einem Gamemode- Serverrestart müsst ihr den Timer noch killen, da er sonnst 2x statt 1x läuft:
    public OnGameModeExit()
    {
    KillTimer(PortTimer);
    return 1;
    }


    Falls ihr PlayerToPoint nicht hast kommt folgendes in den Script:
    forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);


    public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
    {
    if (IsPlayerConnected(playerid))
    {
    new Float:oldposx, Float:oldposy, Float:oldposz;
    new Float:tempposx, Float:tempposy, Float:tempposz;
    GetPlayerPos(playerid, oldposx, oldposy, oldposz);
    tempposx = (oldposx -x);
    tempposy = (oldposy -y);
    tempposz = (oldposz -z);
    if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
    {
    return 1;
    }
    }
    return 0;
    }


    Zusammen gefasst sollte das ungefähr so aussehen:
    forward Ports(playerid);
    forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);


    new PortTimer;


    public OnGameModeInit()
    {
    DisableInteriorEnterExits();
    PortTimer = SetTimer("Ports", 1000, 1);
    CreatePickup(1318, 23, 1555.1205, -1675.6710, 16.1953); // PD Eingang // kleiner gelber Trichter
    CreatePickup(1559, 23, 246.7282, 62.7136, 1003.6406); // PD Ausgang // Weißer Pfeil
    return 1;
    }


    public OnGameModeExit()
    {
    KillTimer(PortTimer);
    return 1;
    }


    public Ports(playerid)
    {
    if (PlayerToPoint(1, playerid, 1555.1205, -1675.6710, 16.1953)) // PD Eingang // if (PlayerToPoint(Radius, playerid, Float:X, Float:Y, Float:Z)) // Wo der Spieler Stehen soll
    {
    SetPlayerInterior(playerid, 6);
    SetPlayerPos(playerid, 246.7840, 63.9002, 1003.6406); // Wo der Spieler hin kommen soll
    SetPlayerFacingAngle(playerid, 0.0);
    }
    else if (PlayerToPoint(1, playerid, 246.7282, 62.7136, 1003.6406)) // PD Ausgang
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerPos(playerid, 1552.4490, -1674.9897, 16.1953);
    SetPlayerFacingAngle(playerid, 90.0);
    }
    return 1;
    }


    public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
    {
    if (IsPlayerConnected(playerid))
    {
    new Float:oldposx, Float:oldposy, Float:oldposz;
    new Float:tempposx, Float:tempposy, Float:tempposz;
    GetPlayerPos(playerid, oldposx, oldposy, oldposz);
    tempposx = (oldposx -x);
    tempposy = (oldposy -y);
    tempposz = (oldposz -z);
    if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
    {
    return 1;
    }
    }
    return 0;
    }


    Das wars auch schon. Ich hoffe es hilft einigen von euch, vorallem den Anfängern.
    Bitte nicht so harte Kritik (falls es welche geben sollte :D).
    Das war mein aller erstes Tutorial


    Viel Spaß noch


    Mit freundlichen Grüßen
    Ich


    MY SELFMADE GAMEMODE "NoName"

    Spoiler anzeigen


    - AccountSystem: 100%
    - LizenzenSystem: 5%
    - TelefonSystem: 5%
    - JobSystem: 3%
    - GeldSystem: 80%
    - AutoSystem: 75%
    - FahndungsSystem: [color=#ff6600]10%
    [color=#000000]- HausSystem: [color=#ff0000]0%

    [color=#000000]- GeschäftsSystem: [color=#ff0000]0%

    [color=#000000]- ZahlTag System: [color=#ff0000]0%

    [color=#000000]- WetterSystem: [color=#ff0000]0%

    [color=#000000]- AntiCheatSystem: [color=#ff0000]0%

    Spoiler anzeigen
    GameModeName: [GM]MyGamemode
    Filterscripts: None
    Benutze Includes: [Inc]MyInclude
    Voraussichtliche Fertigstellung: Unbekannt
    Voraussichtliche Servereröffnung: Unbekannt
    Voraussichtliche Veröffentlichung des Scripts: Wahrscheinlich NIE
    Voraussichtliche Veröffentlichung des Scripts: Wahrscheinlich NIE
    Sonstige Anmerkungen: Selfmade

  • Du kannst auf deinem HomeServer die Koordinaten rausfinden, indem du dich zuerst in´s RCON einloggst ( in der Server.cfg bei "rcon_password " ) und dann /save eingibst.
    Diese Koordinaten werden in folgenden zwei Varianten gespeichert:
    AddPlayerClass( 0, 1958.33, 1343.12, 15.36, 269.15, 26, 36, 28, 150, 0, 0 ); (= Userstandpunkt ohne Auto )
    oder...
    AddStaticVehicle(520, 2109.1763, 1503.0453, 32.2887, 82.2873, 0, 1); (= Autostandpunkt ).


    Diese werden meines Wissens im San Andreas Ordner in einem Textdokument gespeichert.
    Du kannst eben so die Autos in der "samp_debug.exe" erstellen bzw. speichern durch /vsel und /save.


    ----------------------------------------------------------------------------------------


    Du fügst in ein Script ein:

    // Unter OnPlayerCommandText
    dcmd(koords,6,cmdtext);


    // Außerhalb eines CallBacks, also "public ..."
    dcmd_koords(playerid,params[])
    {
    #pragma unused params
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    format(string,sizeof string, " %f - %f - %f ",x,y,z);
    SendClientMessage(playerid, 0xFF0000AA , string);
    return 1;
    }



    Dann die Koordinate von der nachricht aufschriben - eingeben - fertig !



    http://wiki.sa-mp.com/wiki/AddStaticVehicle

    Suche Scriptlehrer :rolleyes:

  • hm, ich hätte da ein paar fragen:



    1. Es gibt ja innenräume, wie burger shot, die gibt es nur 1 mal. wie muss ich dass den dann machen? also dass ich wieder am richtigen eingang rauskomme, und nicht an nen anderen. oder ergibt sich dass von alleine?



    2. Wie soll ich dass machen, wenn ich mehr teleports habe? einfach immer weiter mit else if? oder wie?

    Zitat

    (skype) Wastl: Oida, i greif ka schowaßding mea au, gestan bam schwoaßn hob i ma meine sockhoa vaseink :-/

    Zitat

    (skype) Wastl: Alter, ich greife kein schweißgerät mehr an, gestern beim schweißen hab ich mir meine intimhaare versenkt :-/

    :D :D :D

  • Funktioniert das in GF auch genauso ??? Wenn nein wie dann ??? habe nämlich nen Error da ^^
    (Ja iss GF ich machs aus Fun !!!!)


    Der Error:
    D:\samp02Xserver.win32\gamemodes\gf.pwn(7074) : warning 225: unreachable code


    Das Script:


    (ist unter ongamemodeint)
    CreateObject(1696, 2881.867920, -1976.293213, 6.420997, 0.0000, 0.0000, 90.0000);
    CreateObject(1696, 2881.726807, -1981.505737, 6.420997, 0.0000, 0.0000, 90.0000);
    CreateObject(1696, 2881.850586, -1985.454712, 6.420997, 0.0000, 0.0000, 90.0000);
    CreateObject(1696, 2876.824463, -1989.975342, 6.420997, 0.0000, 0.0000, 90.0000);
    CreateObject(1696, 2881.852295, -1989.950439, 6.420997, 0.0000, 0.0000, 90.0000);


    {
    DisableInteriorEnterExits();
    PortTimer = SetTimer("Ports", 1000, 1);
    CreatePickup(1318, 23, 4871.7666,-2121.8618,3.4560); // PD Eingang // kleiner gelber Trichter
    CreatePickup(1559, 23, 246.7282, 62.7136, 1003.6406); // PD Ausgang // Weißer Pfeil
    return 1;
    }




    LinkVehicleToInterior(116, 7);
    LinkVehicleToInterior(117, 7);
    LinkVehicleToInterior(118, 7);
    LinkVehicleToInterior(119, 7);
    LinkVehicleToInterior(120, 4);



    // ganz unten vom Script



    stock IsLeapYear (year) {
    if (year % 4 == 0 &&
    (year % 100 != 0 ||
    year % 400 == 0)) {
    return 1;
    } else {
    return 0;
    }
    }


    public OnGameModeExit()
    {
    KillTimer(PortTimer);
    return 1;
    }


    public Ports(playerid)
    {
    if (PlayerToPoint(1, playerid, 1555.1205, -1675.6710, 16.1953)) // PD Eingang // if (PlayerToPoint(Radius, playerid, Float:X, Float:Y, Float:Z)) // Wo der Spieler Stehen soll
    {
    SetPlayerInterior(playerid, 6);
    SetPlayerPos(playerid, 246.7840, 63.9002, 1003.6406); // Wo der Spieler hin kommen soll
    SetPlayerFacingAngle(playerid, 0.0);
    }
    else if (PlayerToPoint(1, playerid, 246.7282, 62.7136, 1003.6406)) // PD Ausgang
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerPos(playerid, 1552.4490, -1674.9897, 16.1953);
    SetPlayerFacingAngle(playerid, 90.0);
    }
    return 1;
    }

    Zitat

    naja aufm homeserver mit kumpel getestet und nix laggt von daher sollte nen richtiger server mit sowas keine probs haben

    *an Kopf schlag
    sowas kommt Raus wenn man erst absendet ohne nachzudenken. Bitte Leute Hirn einschalten beim Posten...

  • Man sollte mal feststellen, ob das ganze funktioniert, wenn man ein Tut dazu macht.

    forward Ports();
    public Ports()
    {
    for(new playerid=0; playerid<GetMaxPlayers(); playerid++)
    {
    if(IsPlayerConnected(playerid))
    {
    if (PlayerToPoint(1, playerid, 1555.1205, -1675.6710, 16.1953)) // PD Eingang // if (PlayerToPoint(Radius, playerid, Float:X, Float:Y, Float:Z)) // Wo der Spieler Stehen soll
    {
    SetPlayerInterior(playerid, 6);
    SetPlayerPos(playerid, 246.7840, 63.9002, 1003.6406); // Wo der Spieler hin kommen soll
    SetPlayerFacingAngle(playerid, 0.0);
    }
    else if (PlayerToPoint(1, playerid, 246.7282, 62.7136, 1003.6406)) // PD Ausgang
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerPos(playerid, 1552.4490, -1674.9897, 16.1953);
    SetPlayerFacingAngle(playerid, 90.0);
    }
    }
    }
    return 1;
    }


    Ist nicht böse gemeint, aber dein Code funktioniert nur für ID 0 und wenn man das alleine testet, kanns vorkommen, dass man ID 0 ist ;)


    Ich scripte NICHT mehr, ich möchte mit NIEMANDEM einen Server aufmachen habe auch NICHTS mehr mit LoH zu tun, also lasst es mit den PNs!

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • geht das nun im GF oder net weil bei mir kommt immer der eine Error

    Zitat

    naja aufm homeserver mit kumpel getestet und nix laggt von daher sollte nen richtiger server mit sowas keine probs haben

    *an Kopf schlag
    sowas kommt Raus wenn man erst absendet ohne nachzudenken. Bitte Leute Hirn einschalten beim Posten...

  • Mach an der Stelle da return 1; weg.
    DisableInteriorEnterExits();
    PortTimer = SetTimer("Ports", 1000, 1);
    CreatePickup(1318, 23, 4871.7666,-2121.8618,3.4560); // PD Eingang // kleiner gelber Trichter
    CreatePickup(1559, 23, 246.7282, 62.7136, 1003.6406); // PD Ausgang // Weißer Pfeil
    return 1;


    Ich scripte NICHT mehr, ich möchte mit NIEMANDEM einen Server aufmachen habe auch NICHTS mehr mit LoH zu tun, also lasst es mit den PNs!

  • thx jetz funtzt´s ^^

    Zitat

    naja aufm homeserver mit kumpel getestet und nix laggt von daher sollte nen richtiger server mit sowas keine probs haben

    *an Kopf schlag
    sowas kommt Raus wenn man erst absendet ohne nachzudenken. Bitte Leute Hirn einschalten beim Posten...

  • Hallo,
    ich versuche nun schon die ganze Zeit das hinzubekommen, jedoch bisher ohne Erfolg :(
    Kann mir bitte wer helfen?



    forward Ports(playerid);
    forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);


    new PortTimer;


    public OnGameModeInit()
    {
    DisableInteriorEnterExits();
    PortTimer = SetTimer("Ports", 1000, 1);
    CreatePickup(1318, 23, 1544.5673, -1645.5866, 4.85562); // LSPD Eingang in Zelle // kleiner gelber Trichter
    CreatePickup(1559, 23, 269.7615, 76.1335, 1000.0042); // LSPD Ausgang zur Garage // Weißer Pfeil
    return 1;
    }


    public OnGameModeExit()
    {
    KillTimer(PortTimer);
    return 1;
    }


    public Ports(playerid)
    {
    if (PlayerToPoint(1, playerid, 1544.5673, -1645.5866, 4.85562)) // LSPD Eingang in Zelle // if (PlayerToPoint(Radius, playerid, Float:X, Float:Y, Float:Z)) // Wo der Spieler Stehen soll
    {
    SetPlayerInterior(playerid, 6);
    SetPlayerPos(playerid, 269.1224, 79.5670, 1000.1520); // Wo der Spieler hin kommen soll
    SetPlayerFacingAngle(playerid, 0.0);
    }
    else if (PlayerToPoint(1, playerid, 269.7615, 76.1335, 1000.0042)) // PD Ausgang
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerPos(playerid, 1552.4490, -1674.9897, 16.1953);
    SetPlayerFacingAngle(playerid, 90.0);
    }
    return 1;
    }


    public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
    {
    if (IsPlayerConnected(playerid))
    {
    new Float:oldposx, Float:oldposy, Float:oldposz;
    new Float:tempposx, Float:tempposy, Float:tempposz;
    GetPlayerPos(playerid, oldposx, oldposy, oldposz);
    tempposx = (oldposx -x);
    tempposy = (oldposy -y);
    tempposz = (oldposz -z);
    if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
    {
    return 1;
    }
    }
    return 0;
    }




    filterscripts\LSPD_GARAGE_TELEPORT.pwn(6) : warning 235: public function lacks forward declaration (symbol "OnGameModeInit")
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(8) : error 017: undefined symbol "DisableInteriorEnterExits"
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(9) : error 017: undefined symbol "SetTimer"
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(10) : error 017: undefined symbol "CreatePickup"
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(11) : error 017: undefined symbol "CreatePickup"
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(15) : warning 235: public function lacks forward declaration (symbol "OnGameModeExit")
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(17) : error 017: undefined symbol "KillTimer"
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(23) : warning 213: tag mismatch
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(23) : error 070: rational number support was not enabled
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(25) : error 017: undefined symbol "SetPlayerInterior"
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(26) : error 017: undefined symbol "SetPlayerPos"
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(27) : error 017: undefined symbol "SetPlayerFacingAngle"
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(29) : warning 213: tag mismatch
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(29) : error 070: rational number support was not enabled
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(31) : error 017: undefined symbol "SetPlayerInterior"
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(32) : error 017: undefined symbol "SetPlayerPos"
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(33) : error 017: undefined symbol "SetPlayerFacingAngle"
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(40) : error 017: undefined symbol "IsPlayerConnected"
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(44) : error 017: undefined symbol "GetPlayerPos"
    filterscripts\LSPD_GARAGE_TELEPORT.pwn(9) : warning 204: symbol is assigned a value that is never used: "PortTimer"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    15 Errors.



    Ich danke euch schon im vorraus :)


    Liebe Grüße
    Mafiathne


    [GELÖST] ;)

  • Also erstmal eine Frage:
    Hast du ganz oben in deinem Script

    #include <a_samp>


    Wenn es drin ist, sollte es eigentlich funktionieren.
    Aber ich würde den Public nicht mir Playerid machen sondern mit einer for Schleife, sonst kann nur ID 0 die Ports benutzen.
    Also so


    forward Ports();



    public Ports()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    if (PlayerToPoint(1, playerid, 1544.5673, -1645.5866, 4.85562)) // LSPD Eingang in Zelle // if (PlayerToPoint(Radius, playerid, Float:X, Float:Y, Float:Z)) // Wo der Spieler Stehen soll
    {
    SetPlayerInterior(playerid, 6);
    SetPlayerPos(playerid, 269.1224, 79.5670, 1000.1520); // Wo der Spieler hin kommen soll
    SetPlayerFacingAngle(playerid, 0.0);
    }
    else if (PlayerToPoint(1, playerid, 269.7615, 76.1335, 1000.0042)) // PD Ausgang
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerPos(playerid, 1552.4490, -1674.9897, 16.1953);
    SetPlayerFacingAngle(playerid, 90.0);
    }
    return 1;
    }




    Probier das mal aus und schau nach ob #include <a_samp> im Script ist.

  • Sorry hab vergessen, dass du bei PlayerToPoint playerid durch i ersetzten musst


    public Ports()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    if (PlayerToPoint(1, i, 1544.5673, -1645.5866, 4.85562)) // LSPD Eingang in Zelle // if (PlayerToPoint(Radius, playerid, Float:X, Float:Y, Float:Z)) // Wo der Spieler Stehen soll
    {
    SetPlayerInterior(i, 6);
    SetPlayerPos(i, 269.1224, 79.5670, 1000.1520); // Wo der Spieler hin kommen soll
    SetPlayerFacingAngle(i, 0.0);
    }
    else if (PlayerToPoint(1, i, 269.7615, 76.1335, 1000.0042)) // PD Ausgang
    {
    SetPlayerInterior(i, 0);
    SetPlayerPos(i, 1552.4490, -1674.9897, 16.1953);
    SetPlayerFacingAngle(i, 90.0);
    }
    return 1;
    }


    Mal abgesehen davon, hat 0.3 einen besseren Public


    IsPlayerInRangeOfPoint

  • Nein du kannst es durchaus verwenden.


    Wollte nur sagen, dass es eine andere Möglichkeit gibt, die Ressourcen spart.


    Wäre dann so


    IsPlayerInRangeOfPoint(playerid,range,x,y,z);


    public Ports()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    if (IsPlayerInRangeOfPoint(i, 1, 1544.5673, -1645.5866, 4.85562)) // LSPD Eingang in Zelle // if (PlayerToPoint(Radius, playerid, Float:X, Float:Y, Float:Z)) // Wo der Spieler Stehen soll
    {
    SetPlayerInterior(i, 6);
    SetPlayerPos(i, 269.1224, 79.5670, 1000.1520); // Wo der Spieler hin kommen soll
    SetPlayerFacingAngle(i, 0.0);
    }
    else if (IsPlayerInRangeOfPoint(i, 1, 269.7615, 76.1335, 1000.0042)) // PD Ausgang
    {
    SetPlayerInterior(i, 0);
    SetPlayerPos(i, 1552.4490, -1674.9897, 16.1953);
    SetPlayerFacingAngle(i, 90.0);
    }
    return 1;
    }


    Dann brauchst du PlayerToPoint nicht zu definieren und zu benutzen