Beiträge von FACE

    Das ist mir doch wurst.
    Du solltest du nur beim Speichern der Position dieselben Variablen benutzen wie beim Auslesen und dem nachfolgendem Spawning.

    Nein!
    So wird das auch nicht gehen, er muss auch die Positionen richtig auslesen X(



    public OnPlayerDeath(playerid,killerid,reason){
    SpielerInfo[playerid][Gestorben] = 1;
    GetPlayerPos(playerid,SpielerInfo[playerid][PosXX],SpielerInfo[playerid][PosYY],SpielerInfo[playerid][PosZZ]);
    return 1;
    }


    Wenn du schon aus dem Array SpielerInfo ausliest, solltest du vielleicht auch genau vorher mal in dieses etwas schreiben ^^

    Exerzier das Ganze doch ersteinmal testweise für Sekunden durch.
    Sagt bei sekunde 40 soll er die message plotten und du setzt den timer auf 1 sek.
    So lässt sich der Fehler evtl schneller beheben.
    Muss sich um irgendeinen Logikfehler handeln ;)
    (Eine Verschiebung oder so :) )


    @ Maxx: Das ist nicht die Lösung, wenn er etwas zeitgesteuert tun möchte, was er auch im Vorfeld explizit zur Geltung gebracht hat.

    Ich geb dir mal einen kleinen Happen ;)


    Das Skin Array:

    new skins[/*Hier bitte die Anzahl der Skins eintragen*/] = { 2,3,5,6 };//SkinIDs eintragen, wie im Beispiel..


    Die Variable:

    new IsPlayerInSkinSel[MAX_PLAYERS];


    Variable unter OnPlayerConnect auf "false" setzen: (man weiß ja nie, ob nicht ein vorheriger Spieler mit derselben ID den Server mit "true" verlassen hat)

    IsPlayerInSkinSel[playerid]=-1;//-1 ist jetzt mal für uns false, da wir eigentlich noch eine zweite Variable benötigen, ich diese aber gerade einsparen möchte..


    Nun zu unserer KeyAbfrage:

    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(IsPlayerInSkinSel[playerid]!=-1)//Wenn Spieler in SkinSelection..
    {


    if ((newkeys & KEY_SPRINT) && !(oldkeys & KEY_SPRINT))//Spieler hat leertaste gedrückt
    {
    if(IsPlayerInSkinSel[playerid]+1>sizeof(skins)){IsPlayerInSkinSel[playerid]=0;}else{IsPlayerInSkinSel[playerid]++;}
    SetPlayerSkin(playerid,skins[IsPlayerInSkinSel[playerid]);
    }


    if ((newkeys & KEY_SECONDARY_ATTACK) && !(oldkeys & KEY_SECONDARY_ATTACK))//Spieler hat enter gedrückt
    {
    SetCameraBehindPlayer(playerid);//Cam wieder hinter Spieler setzen.
    TogglePlayerControllable(playerid, true);//Spieler entfreezen
    //SpawnPlayer(playerid);//Spieler spawnen lassen ?? vielleicht lieber Position setzen..
    //Das Skin setzen könnte sich beißen mit der normalen Skin-Selection, von daher benutze doch anschließend noch SetSpawnInfo.
    }
    }
    return 1;
    }


    Jetzt brauchen wir nurnoch den Weg hin zur Class-Selection..
    Dies kann über ein Pickup, einen Command, ein Menü oder sonstwas geschehen.


    Egal wie, es wird trotzdem mindestens Folgendes dafür benötigt:

    SetPlayerPos(playerid, X,Y,Z);//Werte für Spielerpos ersetzen
    SetPlayerFacingAngle(playerid, R);//Ersetzen durch Rotation des Spielers


    SetPlayerCameraPos(playerid, X,Y,Z);//CameraPosition (ersetzen)
    SetPlayerCameraLookAt(playerid, X,Y,Z);//Und auch hier durch den gewünschten Blickwinkel ersetzen.


    //SetPlayerInterior(playerid, I); - Nicht zwingend notwendig, sofern im selben Interior, wie sich der Spieler ohnehin schon befindet.


    TogglePlayerControllable(playerid, false);//Spieler bewegungsunfähig machen.


    Das ist jetzt aber wirklich genug Häppchen ;)
    (Um die Zeit und für "aus dem Kopf geschrieben" gibts keine Garantie :P )

    Was soll denn diese Frage bedeuten??
    Hau die Skins in ein Array, damit kannst du ja schonmal anfangen.
    Den Boolean kannst du direkt danach erstellen.


    Danach kannst du dir mal die Koordinaten für deine Class-Selection besorgen (PlayerPos, CamPos, CamLookAt, InteriorID, etc..)

    Speicher halt in einem Bool, ob sich der Spieler in deiner gebauten Skin-Selection befindet.
    Wenn ja, dann gehst du über die interrupts vom OnPlayerKeyStateChange.
    Speichere zuvor die Skins in einem Array und lese aus diesem beim drücken der Leertaste.
    Die Skinauswahl an sich besteht aus einem Freeze, einer Spielerposition + Spielerrotation und einer CameraPos mit CameraLookAt.

    Da die Messages im Chat angezeigt werden, man sich aber auf der Dialog-Ebene bewegt, würde ich
    hier eine Message im Dialog vorziehen:

    //Oben im Script
    #define kickinfo 255//Ersetz die 255 durch eine freie DialogID


    if(dialogid==DIALOG_LOGIN)
    {
    if(response==0)
    {
    ShowPlayerDialog(playerid,kickinfo,DIALOG_STYLE_MSGBOX,"Server - Disconnect!","Du hast den Login-Vorgang abgebrochen.\nAls Folge wurdest du gekickt","Ok","");
    Kick(playerid);
    }


    if(response==1)
    {
    if(!strlen(inputtext)) //Wenn das Passwort falsch ist
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","{ff0000}FALSCHES PASSWORT.\n{ffffff}Gib bitte das richtige Passwort ein!","Login","Abbrechen");
    }
    else //Wenn das Passwort stimmt
    {
    Login(playerid,inputtext);
    }
    }
    return 1;
    }

    Du musst doch nur abfragen, ob die Minute null ist. ^^
    Hätte dann einen Timer auf eine Minute gesetzt, also 60000 Millisekunden.
    (Alternativ auch noch 2 Minuten, ob die Message dann mal ne Minute später kommt, wird wohl eher egal sein.)

    Wenn du das Fahrzeug parkst, nimmst du die Koordinaten, da auch noch SetVehicleZAngle möglich ;)
    Nun zerstörst du das Fahrzeug und kreierst es direkt neu, mit den gespeicherten Daten.
    CreateVehicle(modelid, Float:x, Float:y, Float:z, Float:angle, color1, color2, respawn_delay).
    Angle ist dann hier vorhanden ;)

    Dann ergeben aber doch die Zeilen die ich gerade gepostet habe relativ wenig Sinn ^^
    Ich hätte eher die Erwartungshaltung gehabt, die Variable "fs" bezeichne die FraktionsID.


    Mit "fsWinFaction" als FraktionsID, sähe es evtl. so aus:

    FraktionsKasse[fsWinFaction][FightSystem[fs][fsWinFaction]] += 75000;

    shaiN du hast dir den Code offenbar nicht sonderlich gründlich angesehen..

    TextDrawHideForPlayer(i,FightSystem[fs][fsWinFaction]);
    TextDrawHideForPlayer(i,FightSystem[fs][fsWinKills]);

    Und in seinem zweiten Post meint der Threadsteller, dass fsWinFaction die ID bezeichnet..
    Na? jetzt bist du hoffentlich auch stutzig.

    Die Dinger sind einfach nicht definiert..
    Das sieht halt heftig nach C&P aus.
    Tut mir leid, wenn ich daneben liegen sollte, aber das ist glaube einfach ein blind eingefügtes snippet.
    Das jetzt du definieren macht keinen Sinn für mich..

    Timmeyable:
    Wenn es per Command ist, und der Parameter die Ziel-PlayerID ist. (bsp: /kill [playerid])


    Hätte es dann wie folgt gelöst:if(GetPlayerVehicleID(playerid)==GetPlayerVehicleID(targetplayerid)){...}


    Schreibs halt auf deine Bedürfnisse um ;)



    AooH:
    Irgendwo könnte sich ein http request oder Ähnliches befinden, der das Script mit einer online-gestellten version abgleicht.
    Schau mal nach irgendwelchen connections, die ins externe leiten...

    Tipp: Bau deine lokale Speicherumgebung um.
    Ähnlich einer Datenbank benutzt du Tabellen um Werte miteinander zu verbinden.


    Die helfende Tabelle für dieses Problem wäre eine, die eine Nummer (user-nummer) mit einem Usernamen verknüpft.
    Eine Schleife durch die Nummern sollte so kein Problem mehr darstellen ;)


    Also aufbau des Files:

    Code
    0 Peter
    1 Uwe
    2 Uschi
    3 Hans-Jürgen
    ...


    Damit sollte sich dein Problem dann lösen lassen.


    Ich hab oft dasselbe Problem und hab auch schon nach bequemeren Lösungsmethoden gesucht.
    Jedoch bietet das Speichern von Relationen noch andere Vorzüge, die ich nichtmehr misen möchte. ;)
    MFG FACE.

    Handbremse heißt in keinem Fall, dass das Fahrzeug nicht fahrbar ist.
    Wer mal mit angezogener Handbremse gefahren ist, weiß wovon ich rede.
    Ich hätte in diesem Fall über OnPlayerKeyStateChange beim Beschleunigen des Fahrzeuges den Wagen
    entschleunigt.
    In diesem Fall würde ich die Velocity Funktionen in Betracht ziehen ;)