/scar

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
  • Wieso funktioniert das nicht?



    forward scar(playerid);
    new SCAR[MAX_PLAYERS],Float:sx[MAX_PLAYERS], Float:sy[MAX_PLAYERS], Float:sz[MAX_PLAYERS], Float:sa[MAX_PLAYERS];


    if (strcmp(cmdtext, "/scar", true)==0)
    {
    if (GetPlayerVirtualWorld(playerid) == 2)
    {
    SendClientMessage(playerid,COLOR_RED,"You cant use this command here!");
    }
    else
    {
    if (GetPlayerVirtualWorld(playerid) == 4)
    {
    SendClientMessage(playerid,COLOR_RED,"You cant use this command if you are jailed!");
    }
    else
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    SCAR[playerid] = GetPlayerVehicleID(playerid);
    GetVehiclePos(SCAR[playerid], sx[playerid], sy[playerid], sz[playerid]);
    GetVehicleZAngle(GetPlayerVehicleID(playerid), sa[playerid]);
    SetTimer("scar",100,1);
    SendClientMessage(playerid, COLOR_BASIC, "VehiclePOS saved!");
    }
    else
    {
    SendClientMessage(playerid, COLOR_BASIC, "You musst be in a vehicle!");
    }
    }
    }
    return 1;
    }


    public scar(playerid) {
    if(!GetVehiclePos(SCAR[playerid], sx[playerid], sy[playerid], sz[playerid]))
    {
    if(!GetVehicleZAngle(SCAR[playerid], sa[playerid]))
    {
    SetVehiclePos(SCAR[playerid], sx[playerid], sy[playerid], sz[playerid]);
    SetVehicleZAngle(SCAR[playerid], sa[playerid]);
    }
    }
    return 1;
    }

  • was willst du damit denn erreichen? Die pos saven?
    un wofür is der timer?
    Außerdem sieht man da nirgendwo dass du eine pos savest oO


    Außerdem gehts auch nit wenn du das nur in variablen savest, die sin nach dem server restart ja wieder weg. Das musst du in dateien saven

  • ne das soll nur machen das einfahrzeug dauerhaft auf eine position gespawnt wird... als beispiel:


    Wen man mit z.b. mit nen Packer stuntet plaziert man ihn ja irgendwo hin und nutzt ihn als rampe... Dabei verschiebt er sich immer weiter bis man den nochmal zurückschieben muss..


    Der befehl soll dafür sorgen das der packer immer auf seine alte position zurückgespawnt werden soll! Das soll kein Savepos / loadpos kommand werden und auch nicht das fahrzeug irgendwo dauerhaft speichern!

  • das fahrzeug wird nicht zurückgestellt auf seine pos wan ich /scar eingegeben habe das wird garnicht verschoben als ob der timer garnicht da wäre!


    Also der Timer Funktioniert einfach nicht sonst schätzte ich alles richtig!

    Einmal editiert, zuletzt von SkaterDenis ()

  • Soll das


    if(!GetVehiclePos(SCAR[playerid], sx[playerid], sy[playerid], sz[playerid]))
    {
    if(!GetVehicleZAngle(SCAR[playerid], sa[playerid]))
    {


    abfragen ob das Vehicle nicht dor sthet wo man /scar gemacht hat ?


  • new float:newx,Float:newy,Float:newz,Float:newa;
    GetVehiclePos(SCAR[playerid],newx,newy,newz);
    GetVehicleFacingAngle(SCAR[playerid],newa);
    if(newx != sx[playerid] || newy != sy[playerid] || newz != sz[playerid] || newa !=sa[playerid])
    {
    SetVehiclePos(SCAR[playerid], sx[playerid], sy[playerid], sz[playerid]);
    SetVehicleZAngle(SCAR[playerid], sa[playerid]);
    }


    So sollte es funktionieren

  • wieso newx y z? ich habe doch schon sx sy sz kann ich nicht gleich das verwenden?


    Klappt das nicht einfach so=?



    if(sx [playerid]!= sx[playerid] || sy[playerid] != sy[playerid] || sz[playerid] != sz[playerid] || sa[playerid] !=sa[playerid])
    {
    SetVehiclePos(SCAR[playerid], sx[playerid], sy[playerid], sz[playerid]);
    SetVehicleZAngle(SCAR[playerid], sa[playerid]);
    }

  • Nein würde es nicht, da du in deinem letzten Beispiel eine variable verwendest. w.B.


    variable1 = 1


    Diese Variable hat nun den Wert 1


    Wenn du nun nach deinem Beispiel gehen würdest


    if(1 != 1)


    Was aber nicht der Fall ist, weshalb auch der if-Körper nicht ausgeführt wird.


    Aber probieren kann man es theoretisch ja mal

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Der Timer kann auch für keine Spielerid, ausser der SpielerID 0 funktionieren.


    Bei SetTimer kannst du keinen Timer angeben, der einen Parameter hat.
    In deinem Falle scar(playerid).


    Entweder du benutzt SetTimerEx oder scar() + eine For-Schleife.

  • Ich würd settimerex empfehlen


    hier mal der gesamte cmd


    forward scar(playerid);
    new SCAR[MAX_PLAYERS],Float:sx[MAX_PLAYERS], Float:sy[MAX_PLAYERS], Float:sz[MAX_PLAYERS], Float:sa[MAX_PLAYERS];


    if (strcmp(cmdtext, "/scar", true)==0)
    {
    if (GetPlayerVirtualWorld(playerid) == 2)
    {
    SendClientMessage(playerid,COLOR_RED,"You cant use this command here!");
    }
    else
    {
    if (GetPlayerVirtualWorld(playerid) == 4)
    {
    SendClientMessage(playerid,COLOR_RED,"You cant use this command if you are jailed!");
    }
    else
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    SCAR[playerid] = GetPlayerVehicleID(playerid);
    GetVehiclePos(SCAR[playerid], sx[playerid], sy[playerid], sz[playerid]);
    GetVehicleZAngle(GetPlayerVehicleID(playerid), sa[playerid]);
    SetTimerEx("scar",100,1,"i",playerid);
    SendClientMessage(playerid, COLOR_BASIC, "VehiclePOS saved!");
    }
    else
    {
    SendClientMessage(playerid, COLOR_BASIC, "You musst be in a vehicle!");
    }
    }
    }
    return 1;
    }


    public scar(playerid) {
    new float:newx,Float:newy,Float:newz,Float:newa;
    GetVehiclePos(SCAR[playerid],newx,newy,newz);
    GetVehicleFacingAngle(SCAR[playerid],newa);
    if(newx != sx[playerid] || newy != sy[playerid] || newz != sz[playerid] || newa !=sa[playerid])
    {


    SetVehiclePos(SCAR[playerid], sx[playerid], sy[playerid], sz[playerid]);
    SetVehicleZAngle(SCAR[playerid], sa[playerid]);
    }

    return 1;
    }


    Kann jetzt hier grad net einrücken sry

  • Achso das meint ihr for (new i = 0; i < MAX_PLAYERS; i++) {
    Na das kommt noch ich teste natürlich meine scripts erst offline alleine befor ich die dan reinstelle...


    achja nochwas!
    Kann man das " if(newx != sx[playerid] || newy != sy[playerid] || newz != sz[playerid] || newa !=sa[playerid])
    so erweitern das bei einem unterschied von 1 das auto nicht zurückgespawnt wird?


    Also als beispiel wen die z achse beim speichern 5 ist und auf 5.5 verschoben wird wegen z.b. einer bordsteinkante! Das das auto noch nicht zürückkommt sondern erst ab einem unterschied von mindestens 1 zurückgespawnt wird!

    Einmal editiert, zuletzt von SkaterDenis ()

  • Ja kann man, ich weiß jetzt nicht ob ichs grad zu umständlich mache, sollte aber funktionieren



    new float:newx,Float:newy,Float:newz,Float:newa;
    new difx,dify,difz,difa;
    difx = newx - sx[playerid];
    dify = newy - sy[playerid];
    difz = newz - sz[playerid];
    difa = newa - sa[playerid];
    GetVehiclePos(SCAR[playerid],newx,newy,newz);
    GetVehicleFacingAngle(SCAR[playerid],newa);
    if(newx != sx[playerid] && difx >= 1 || difa <= -1 || newy != sy[playerid] && dify >= 1 || dify <= -1 || newz != sz[playerid] && difz >= 1 || difz <= -1 || newa !=sa[playerid] && difa <= 1 || difa <= -1 )
    {


    Theoretisch sollte es funktionieren, musst du mal ausprobiere

  • difx = newx - sx[playerid];
    dify = newy - sy[playerid];
    difz = newz - sz[playerid];
    difa = newa - sa[playerid];


    Kommt bei allen 4ren "warning 213: tag mismatch"


    EDIT
    Achso du hast das Float bei new vergessen... new Float:difx,Float:dify,Float:difz,Float:difa; jetzt kommt schonmal kein error gleich mal testen..


    EDIT
    Ne klappt nicht... genau wie forher bei dem kleinsten milimeter spawnt es zurück... habe sogar aus der 1 mal ne 10 gemacht hat trotzdem bei jeder scheise respawnt!

    3 Mal editiert, zuletzt von SkaterDenis ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen