Beiträge von IceWave

    Hallo,
    Habe mal eine Frage:


    Ich mache beim Login, wenn das Passwort richtig war TogglePlayerSpectating(playerid, 0); 
    Bisher dachte ich wenn man Spec auf 0 setzt wird automatisch OnPlayerSpawn aufgerufen.
    Jedoch wenn ich jetzt ohne extra darunter SpawnPlayer(playerid) schreibe wird der Spieler an dem
    Standard Spawn in LV gespawnt und gekickt.?

    Da funktioniert es, habe ich auch erst gemacht.
    Nur das Problem war jetzt habe ich das Haussystem eingebaut und jetzt muss ich ja den Interior hinzufügen.


    Das Problem tritt ja auch z.B. auf wenn man stirbt. Für den Fall muss ich ja den Interior bei OnPlayerSpawn setzen.
    Dann kann das Problem auftreten dass er wegen SetSpawnInfo mit den Koordinaten ins Haus gesetzt wird und ganz kurz danach
    erst der Interior gesetzt wird. Deshalb fällt man manchmal durch...

    public OnPlayerSpawn(playerid)
    {
    if(!isPlayerInFrakt(playerid,0) && sInfo[playerid][spawnchange]==1)
    {
    new fID;
    fID = sInfo[playerid][fraktion];
    SetPlayerPos(playerid, fInfo[fID][f_x],fInfo[fID][f_y],fInfo[fID][f_z]);
    SetPlayerInterior(playerid,fInfo[fID][f_interior]);
    }
    else if(sInfo[playerid][spawnchange]==0)
    {
    SetPlayerPos(playerid, fInfo[0][f_x],fInfo[0][f_y],fInfo[0][f_z]);
    SetPlayerFacingAngle(playerid,fInfo[0][f_r]);
    SetPlayerInterior(playerid,0);
    }
    else if(sInfo[playerid][spawnchange]==2)
    {
    for(new i=0; i<sizeof(hInfo); i++)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    if(!hInfo[i][h_id])continue;
    if(!strlen(hInfo[i][h_besitzer]))continue;
    if(strcmp(hInfo[i][h_besitzer],name,true))continue;
    SetPlayerPos(playerid, hInfo[i][h_ix],hInfo[i][h_iy],hInfo[i][h_iz]);
    SetPlayerInterior(playerid,hInfo[i][h_interior]);
    SetPlayerVirtualWorld(playerid,i);
    }
    }
    return 1;
    }
    Spawnen lasse ich ihn dann einfach mit SpawnPlayer




    Das ist aber wirklich nur ganz ganz kurz, fällt vielen fast nicht auf. Vielleicht geht das ja auch nicht weg ?

    Ist nichts drin.

    public OnPlayerRequestClass(playerid, classid)
    {
    TogglePlayerSpectating(playerid, 1);
    InterpolateCameraPos(playerid, 662.793823, -1230.628906, 103.279098, 487.261230, -1540.240234, 49.741668, 17000);
    InterpolateCameraLookAt(playerid, 659.840881, -1234.597167, 102.549331, 487.067871, -1535.948242, 47.184101, 17000);
    return 1;
    }

    Hallo, habe jetzt auch probiert den Spieler ganz normal unter OnPlayerSpawn spawnen zu lassen.
    Funktioniert natürlich auch. Nur sehe ich ganz kurz wie er in LV steht, an dem Standardspawn.
    Dann spawnt er erst an der gewünschten Position...
    Kann ich das umgehen ?

    public OnPlayerSpawn(playerid)
    {
    if(!isPlayerInFrakt(playerid,0) && sInfo[playerid][spawnchange]==1)
    {
    new fID;
    fID = sInfo[playerid][fraktion];
    SetPlayerInterior(playerid,fInfo[fID][f_interior]);
    }
    else if(isPlayerInFrakt(playerid,0) || sInfo[playerid][spawnchange]==0)
    {
    SetPlayerInterior(playerid,0);
    }
    else if(sInfo[playerid][spawnchange]==2)
    {
    for(new i=0; i<sizeof(hInfo); i++)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    if(!hInfo[i][h_id])continue;
    if(!strlen(hInfo[i][h_besitzer]))continue;
    if(strcmp(hInfo[i][h_besitzer],name,true))continue;
    SetPlayerInterior(playerid,hInfo[i][h_interior]);
    SetPlayerVirtualWorld(playerid,i);
    }
    }
    return 1;
    }



    ocmd:spawn(playerid,params[])
    {
    new pID, text[2][60];
    new sendename[MAX_PLAYER_NAME];
    new empfangname[MAX_PLAYER_NAME];
    if(!IsPlayerAnAdmin(playerid,3))return SendClientMessage(playerid, ROT, "Du bist kein Admin oder dein Rang ist zu niedrig!");
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,ROT,"Befehl: /spawn [ID]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT,"Der Spieler ist nicht online!");
    GetPlayerName(playerid, sendename, MAX_PLAYER_NAME);
    GetPlayerName(pID, empfangname, MAX_PLAYER_NAME);
    format(text[0], sizeof(text[]), "%s hat dich gespawnt!",sendename);
    format(text[1], sizeof(text[]), "Du hast %s gespawnt!",empfangname);
    SendClientMessage(pID,GOLD,text[0]);
    SendClientMessage(playerid,GOLD,text[1]);
    //PLAYERSPAWNORT
    if(!isPlayerInFrakt(pID,0) && sInfo[pID][spawnchange]==1)
    {
    new fID;
    fID = sInfo[pID][fraktion];
    SetSpawnInfo(pID,0,sInfo[pID][skinid],fInfo[fID][f_x],fInfo[fID][f_y],fInfo[fID][f_z],fInfo[fID][f_r],0,0,0,0,0,0);
    }
    else if(isPlayerInFrakt(playerid,0) || sInfo[playerid][spawnchange]==0)
    {
    SetSpawnInfo(playerid,0,sInfo[playerid][skinid], fInfo[0][f_x],fInfo[0][f_y],fInfo[0][f_z],fInfo[0][f_r], 0, 0, 0, 0, 0, 0);
    }
    else if(sInfo[playerid][spawnchange]==2)
    {
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(!hInfo[i][h_id])continue;
    if(!strlen(hInfo[i][h_besitzer]))continue;
    if(strcmp(hInfo[i][h_besitzer],sendename,true))continue;
    SetSpawnInfo(playerid,0,sInfo[playerid][skinid], hInfo[i][h_ix],hInfo[i][h_iy],hInfo[i][h_iz],0.0, 0, 0, 0, 0, 0, 0);
    }
    }
    SpawnPlayer(pID);
    return 1;
    }



    Jetzt ist das Problem, dass er manchmal durch das Haus durchfällt, da der Spieler ja kurz bevor ich den Interior bei OnPlayerSpawn setze spawnt.



    Und wenn ich jetzt dass SetSpawnInfo lasse und alles bei OnPlayerSpawn mache hatte ich das Problem, dass es mir immer kurz den Himmel bzw. einen anderen Ort anzeigt bevor ich spawne. Natürlich nur sehr kurz, aber das nervt^^

    Mein Problem ist eigentlich dass ich wenn ich den Spawn bei OnPlayerSpawn mit SetPlayerPos gemacht habe,
    ist er jedes mal wenn ich ihn spawnen lasse kurz an einem anderen Ort gewesen.


    Sieht dann immer doof aus..



    Kann man das umgehen? Oder soll ichs einfach nochmal versuchen.






    @Sunrizez


    mein Befehl:
    ocmd:setskin(playerid,params[])
    {
    new pID, skin, text[2][60];
    new sendename[MAX_PLAYER_NAME];
    new empfangname[MAX_PLAYER_NAME];
    if(!IsPlayerAnAdmin(playerid,3))return SendClientMessage(playerid, ROT, "Du bist kein Admin oder dein Rang ist zu niedrig!");
    if(sscanf(params,"ui",pID,skin))return SendClientMessage(playerid,ROT,"Befehl: /setskin [ID] [SKINID]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT,"Der Spieler ist nicht online!");
    if(skin<=0||skin>299)return SendClientMessage(playerid,ROT,"Skin ID muss zwischen 0 und 299 liegen!");
    GetPlayerName(playerid, sendename, MAX_PLAYER_NAME);
    GetPlayerName(pID, empfangname, MAX_PLAYER_NAME);
    format(text[0], sizeof(text[]), "%s hat dir deine Skin ID auf %i gesetzt!",sendename, skin);
    format(text[1], sizeof(text[]), "Du hast %s die Skin ID auf %i gesetzt!",empfangname, skin);
    SendClientMessage(pID,GOLD,text[0]);
    SendClientMessage(playerid,GOLD,text[1]);
    SetPlayerSkin(pID,skin);
    sInfo[pID][skinid] = skin;
    return 1;
    }


    sInfo[pID][skinid] = skin;

    die Variable muss ich aber dann eigentlich bei OnPlayerSpawn setzen oder? dass da der Interior gesetzt wird,
    auch wenn ich sterbe oder sowas.


    Wenn ich das ja nur z.b. bei dem Befehl /spawnplayer hinmache würde der Interior ja nur dann gesetzt werden.

    Ja das Problem ist ich will ja den Interior des Spielers nicht bei SetSpawnInfo setzen.
    Weil wenn ich jetzt zum Beispiel spawnchange eingebe und bei der Fraktion spawnen will, möchte ich ja
    erst beim nächsten Spawn in dem Gebäude spawnen.
    Wenn ich jetzt da SetPlayerInterior reinmache würde er ja gleich den Interior ändern

    if(!isPlayerInFrakt(playerid,0) && sInfo[playerid][spawnchange]==1)
    {
    new fID;
    fID = sInfo[playerid][fraktion];
    SetSpawnInfo(playerid,0,sInfo[playerid][skinid],fInfo[fID][f_x],fInfo[fID][f_y],fInfo[fID][f_z],fInfo[fID][f_r],0,0,0,0,0,0);
    }
    else if(isPlayerInFrakt(playerid,0) || sInfo[playerid][spawnchange]==0)
    {
    SetSpawnInfo(playerid,0,sInfo[playerid][skinid], fInfo[0][f_x],fInfo[0][f_y],fInfo[0][f_z],fInfo[0][f_r], 0, 0, 0, 0, 0, 0);
    }
    else if(sInfo[playerid][spawnchange]==2)
    {
    SetSpawnInfo(playerid,0,sInfo[playerid][skinid], hInfo[0][h_ix],hInfo[0][h_iy],hInfo[0][h_iz],0.0, 0, 0, 0, 0, 0, 0);
    }


    Kann man hier irgendwie auch den Interior mit reinsetzen bei SpawnInfo? Oder wie könnte ich das Problem lösen.. ?

    ok, aber wieso RadbmxTimer(playerid); ? Damit der auch auf 0 gesetzt wird oder wie?


    Und wenn der Timer normal abgelaufen ist passt ja alles, also da muss ich nichts zurück setzen oder?
    Bei dem public RadbmxTimer

    aber den Timer unten schon leihbmxtimer[playerid] = SetTimerEx("RadbmxTimer",600000,false,"i",playerid);
    so aufrufen:


    public RadbmxTimer(playerid)
    {
    SendClientMessage(playerid,ROT,"Dein BMX wurde zurückgegeben!");
    DestroyVehicle(radbmx[playerid]);
    radbmx[playerid] = 0;
    return 1;
    }


    bekomme nämlich jetzt iwie nichtmal mehr eine Nachricht, vorher habe ich die Nachricht noch bekommen

    SetTimerEx


    Hab grade gesehen ich muss die einer variable zuweisen und dann z.b


    test[playerid] = SetTimerEx....



    Und dann KillTimer(test[playerid])


    Oder???

    Hi, habe jetzt auf einmal ein Problem wenn mein Fahrrad abgegeben werden soll.
    Vor 2 Tagen hat es noch funktioniert..


    radbmx[playerid]=CreateVehicle(481,479.0388,-1501.8889,20.0479,263.1277,0,0,-1);
    wird bei dem Dialog bei response erstellt.


    if (dialogid==DIALOG_ABGEBEN)
    {
    if(response)
    {
    if(radbmx[playerid] != 0)
    {
    KillTimer(RadbmxTimer(playerid));
    }
    else if(radmou[playerid] != 0)
    {
    KillTimer(RadmouTimer(playerid));
    }
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du hast den Vorgang abgebrochen!");
    }
    }


    public RadmouTimer(playerid)
    {
    SendClientMessage(playerid,ROT,"Dein Mountainbike wurde zurückgegeben!");
    DestroyVehicle(radmou[playerid]);
    radmou[playerid] = 0;
    return 1;
    }
    public RadbmxTimer(playerid)
    {
    SendClientMessage(playerid,ROT,"Dein BMX wurde zurückgegeben!");
    DestroyVehicle(radbmx[playerid]);
    radbmx[playerid] = 0;
    return 1;
    }


    Die Nachricht wird auch gesendet Dein Bmx/Mountainbike wurde zurückgegeben, aber das Fahrzeug bleibt da.. ?(