Beiträge von Kaliber

    @Music4You:


    Das würde zu Fehlern kommen, wenn der Spieler im Dialog ist und gleichzeitig wer anders im Dialog ist und dann würde der andere die ID vom anderen übernehmen ;)


    Deshalb muss man das nochmal Spielerspezifisch machen, sprich so:


    new nameid[MAX_PLAYERS char];//oben im script.


    ocmd:kick(playerid,params[])
    {
    new pID, reason[128], string[128];
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,Red,"Eingabe: /kick [ID] [Grund]");
    format(string,sizeof(string),"%s hat %s gekickt! Grund: %s",SpielerName(playerid),SpielerName(pID),reason);
    SendClientMessageToAll(Red,string);
    ShowPlayerDialog(playerid,DIALOG_KICK,DIALOG_STYLE_MSGBOX,"Kick","Möchtest du den Spieler wirklich kicken?","Ja","Nein");
    nameid{playerid}=pID;
    return 1;
    }
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_KICK) {
    if(!response) return SendClientMessage(playerid,Red,"Du hast den Vorgang abgebrochen!"),nameid{playerid}=0;
    return Kick(nameid{playerid});
    }
    return 1;
    }


    mfg. :thumbup:

    Schreibs so:


    ocmd:gotocoords(playerid, params[]) {
    if(!IsPlayerAnAdmin(playerid,5))return SendClientMessage(playerid,Hellrot,"* Du bist dazu nicht befugt.");
    new Float:Pos[3],string[128];
    if(sscanf(params,"fff",Pos[0],Pos[1],Pos[2]))return SendClientMessage(playerid,Grau,"FEHLER: /gotocoords [Koordinaten]");
    if(IsPlayerInAnyVehicle(playerid)) SetVehiclePos(GetPlayerVehicleID(playerid),Pos[0],Pos[1],Pos[2]);
    else SetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    format(string,sizeof(string),"* Du hast dich zu den Koordinaten %i %i %i teleportiert.",Pos[0],Pos[1],Pos[2]);
    SendClientMessage(playerid,Gelb,string);
    format(string,sizeof(string),"%s hat den Befehl /gotocoords benutzt. (Nur zur Info!)",SpielerName(playerid));
    print(string);
    return 1;
    }


    mfg. :thumbup:

    Ja, diese kleine Operation dauert halt keine ms, sondern nur ns...


    Mach eine Schleife mit einem Wert von 1000 dazwischen oder so und du wirst merken, er gibt dir ms aus ;)


    mfg. :thumbup:

    Aber sollte doch gleich sien oder?


    Also, folgendes:


    • Du musst nicht abfragen ob der Spieler connected ist, denn wenn er es nicht wäre, könnte er nicht auf den Desktop gehen ^^
    • Du musst den Callback nicht durch ein forward festlegen, da dieser Pointer bereits gesetzt wurde, das ist ein Standard Callback von SAMP und ist schon in der a_samp.inc geforwardet.


    AllowPlayerTeleport(playerid,1); // Teleport wird erlaub oder?


    Nein nein, das hat da nichts zu suchen ^^


    Unter OnGameModeInit() schreibe mal folgendes rein:


    AllowAdminTeleport(1);


    So und jetzt loggst du dich inGame als Rcon-Admin ein und dann kannst du dich direkt porten ^^


    mfg. :thumbup:

    KEY_CROUCH ist nur die Taste H, wenn du dich in einem Auto befindest und das nicht geändert hast in deinen GTA Einstellungen. Wenn du zu Fuß unterwegs bist, musst du die Taste C drücken, soweit du das nicht geändert hast ;)


    Den Code kannst du auch so schreiben:


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
    if(newkeys & KEY_CROUCH) {
    if(IsPlayerInRangeOfPoint(playerid,3.0,825.70001, 849.29999, 13.2)) return MoveObject(PaintAreaGate, 825.70001, 849.29999, 13.2-10, 3.0),SetTimer("PaintAreaGate1",5000,0);
    }
    return 1;
    }


    forward PaintAreaGate1();
    public PaintAreaGate1() return MoveObject(PaintAreaGate, 825.70001, 849.29999, 13.2+10, 3.0);


    Die Übergabe eines Parameters durch einen Timer wie "playerid" ist total nutzlos, da du diesen ja nicht in der Funktion PaintAreaGate1 verwendest ;)


    mfg. :thumbup:

    Doch wenn ich in diesem Befehl hier <= benutze wird die SendClientMessage nicht gesendet..!`?!? Und wenn ich nur < benutze funktioniert alles!?! Und das letzte Fahrzeug wird auch gelöscht! also funktioniert < bei mir wie eigendlich <= funktionieren sollte?! und bei <= wird alles unter der zeile irwie nicht mehr gelesen... warum funktioniert das mit <= nicht? (Benutze UMP 0.3 e falls das wichtig sein sollte..)


    Das liegt an dem Array von PlayerVehicle.


    Ganz einfach Arrays werden so erstellt:


    new test[3];
    test[0] = 1;
    test[1] = 2;
    test[2] = 3;
    test[3] = 4; //Das würde nicht funktionieren, da der Array nur auf 3 Cells begrenzt ist, also können wir nicht 4 nutzen (0,1,2 = 3 | 0,1,2,3 = 4)


    Bei deiner Schleife ist das das selbe, nur das hier kein Fehler während des Compilierens kommt, sondern erst während die Schleife ausgeführt wird.


    <= würde ja bedeuten, dass wir (jetzt auf mein Beispiel bezogen) in die 4. Cell was schreiben wollen, obwohl wir nur 3 haben.


    Deshalb < damit wir nur 0,1,2 beschreiben und nicht 0,1,2,3 ;)


    mfg. :thumbup:

    Das ist deine Funktion:


    CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 200.0);


    und hier jetzt einfach den letzten Parameter auf z.B. 300.0 erhöhen oder 400.0 jenachdem ;)


    mfg. :thumbup:

    Das wird so nicht funktionieren...ganz und gar nicht!


    Was ist mit einer Teleportation durch einen Admin oder wenn man auto fährt...oder Flugzeug...oder einen Interior betritt...


    mfg. 8|

    Mhm, ich habe mal eine Funktion aus dem Kopf geschrieben, sollte funktionieren:


    stock VehicleToPoint(vehicleid, Float:radi, Float:x, Float:y, Float:z)
    {
    new Float:_Pos[6];
    GetVehiclePos(vehicleid, _Pos[0], _Pos[1], _Pos[2]);
    _Pos[3] = (_Pos[0] -x),_Pos[4] = (_Pos[1] -y),_Pos[5] = (_Pos[2] -z);
    if(((_Pos[3] < radi) && (_Pos[3] > -radi)) && ((_Pos[4] < radi) && (_Pos[4] > -radi)) && ((_Pos[5] < radi) && (_Pos[5] > -radi))) return 1;
    return 0;
    }


    mfg. :thumbup: