Spieler sterben nicht (Bug)

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
  • Hallo Community,


    Wenn ein Spieler stirbt, d.h. seine HP ist auf 0 und er müste ja eigendlich respawnen, dann tut er es oft nicht.


    Das heist man ist Tot, kann aber noch rumlaufen. Ich hab gehört, dass auch andere das Problem haben, vielleicht kann mir da jemand helfen, weil solche Bugs sind nicht gut für das Game.


    ** Auch bei Adminbefehl (/Kill ID) ist das so, der Gamemode setzt die HP auf -1 bei dem Befehl, der Spieler lebt aber noch.


    Bitte helft mir desbezüglich,
    danke


    mfG

  • public OnPlayerDeath(playerid, killerid, reason)
    {
    P_Inventar[playerid][Messer] = 0;
    P_Inventar[playerid][Maske] = 0;
    P_Inventar[playerid][Seil] = 0;
    if(GetPlayerWantedLevel(playerid) == 0)
    {
    Player[playerid][InKrankenhaus] = 1;
    return 1;
    }
    if(GetPlayerWantedLevel(playerid) >= 1)
    {
    if(P_Team[killerid][Team] == 1 || P_Team[killerid][Team] == 2)
    {
    new string[128];
    new pWanted = GetPlayerWantedLevel(playerid);
    new jailtimeres = (pWanted*180*2);
    P_JailTime[playerid] = jailtimeres;
    new payres = (pWanted*250*2);
    P_Geld[playerid] -= payres;
    StaatsKasse += payres;
    SetPlayerInterior(playerid, 6);
    SetPlayerPos(playerid, 264.0099, 77.5517, 1000.4089);
    P_Jailed[playerid] = 1;
    SendClientMessage(playerid,SERFOLG,"Du wurdest für deine Verbrechen eingesperrt!");
    SendClientMessage(playerid,ROT,"Da du getötet wurdest, ist deine Haftzeit sowie die Strafzahlung doppelt so hoch!");
    format(string, sizeof string,"Zeit der Haft: %d Sekunden! | Strafzahlung: %d$!",jailtimeres,payres);
    SendClientMessage(playerid,SERFOLG,string);
    SetPlayerWantedLevel(playerid, 0);
    ResetPlayerWeapons(playerid);
    new Float:px,Float:py,Float:pz;
    new Float:cx,Float:cy,Float:cz;
    GetPlayerPos(playerid,px,py,pz);
    PlayerPlaySound(playerid, 1052, px,py,pz);
    GetPlayerPos(killerid,cx,cy,cz);
    PlayerPlaySound(killerid, 1053, cx,cy,cz);
    GameTextForPlayer(killerid,"~g~]]] ERFOLG ]]] ~n~ Straftäter eingesperrt ~n~~n~~w~+50 Punkte", 5000, 4);
    GameTextForPlayer(playerid,"~r~In Haft!", 5000, 4);
    P_Punkte[killerid] += 50;
    Player[playerid][Airbreaking]--;
    for(new i=0; i<=GetMaxPlayers(); i++)
    {
    if(P_Team[i][Team] == 1 || P_Team[i][Team] == 2)
    {
    new pCop[MAX_PLAYER_NAME];
    GetPlayerName(killerid, pCop, sizeof(pCop));
    new pTater[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pTater, sizeof(pTater));
    new strin[128];
    format(strin, sizeof strin,"[WANTED-COMPUTER] Der Straftäter %s wurde von %s ausgeschaltet und eingesperrt!",pTater,pCop);
    SendClientMessage(i,PCHAT,strin);
    printf("[Spieler][Wanted-Tod] Polizist/FBI %s tötet Verdächtigen %s",pCop,pTater);
    return 1;
    }
    }
    return 1;
    }
    }
    else if(P_Team[killerid][Team] != 1 && P_Team[killerid][Team] != 2)
    {
    new pKiller[MAX_PLAYER_NAME], pOpfer[MAX_PLAYER_NAME];
    GetPlayerName(killerid, pKiller, sizeof pKiller);
    GetPlayerName(playerid, pOpfer, sizeof pOpfer);
    new pWanted = GetPlayerWantedLevel(killerid);
    new Wantedres = pWanted += 3;
    SetPlayerWantedLevel(killerid, Wantedres);
    SendClientMessage(killerid,SERFOLG,"[Wanted-Akte] Du hast einen Mord begangen!");
    SendClientMessage(killerid,SERFOLG,"[Wanted-Akte] Zu deiner Akte werden 3 Wanted-Punkte hinzugefügt!");
    printf("[Spieler][Mord] Spieler %s ermordet %s",pKiller,pOpfer);
    }
    return 1;
    }

  • hallo


    ich hab das problem auch vll könnt ihr mir gleich mithelfen


    und bei mir ist noch so wenn man stirbt verliert man 25$ dann kommt ein pickup(geld) das gibt dann 25$
    dann hab ich noch ein deathpickup(totenkopf) wo ein medic /wiederbeleben machen kann
    aber wenn man das geld einsammelt und dann nochmal übers deathpickup(totenkopf) läuft gibs nochmal 25$
    und es verschwindet und medic sieht den /wiederbeleben point nicht x.X


    public OnPlayerDeath(playerid, killerid, reason)
    {
    PlayerInfo[playerid][pTot] = 1;
    new Float:pX,Float:pY,Float:pZ;
    GetPlayerPos(playerid, pX, pY, pZ);
    TotenKopf[playerid] = CreatePickup(1254,1, pX, pY, pZ);
    PlayerInfo[playerid][pTx] = pX;
    PlayerInfo[playerid][pTy] = pY;
    PlayerInfo[playerid][pTz] = pZ;
    new name[MAX_PLAYER_NAME];
    new string[128], string2[128];
    if(JustSpawned[playerid] != 0)
    {
    return 1;
    }
    if(PlayerSFDM[playerid] == 1)
    {
    if(PlayerSFDM[killerid] == 1)
    {
    PlayerSFDMKills[killerid]+=1;
    if(PlayerSFDMKills[killerid] > SFDMWinnerKills)
    {
    new killer[MAX_PLAYER_NAME];
    //SFDMWinner = killerid;
    SFDMWinnerKills = PlayerSFDMKills[killerid];
    GetPlayerName(killerid, killer, sizeof(killer));
    format(string2, sizeof(string2), "* %s is in the lead (%d kills)", killer, SFDMWinnerKills);
    format(string, sizeof(string), "* %s ist mit %d Kills in Führung.",killer,SFDMWinnerKills);
    SendUserMessageToAll(COLOR_WHITE, string, string2);
    if(SFDMWinnerKills == 25)
    {
    StopSFDM();
    }
    }
    }
    return 1;
    }
    if (PlayerToPoint(20.0, playerid,2305.6890,-16.0881,26.7496))
    {
    if(reauber[playerid] == 1)
    {
    new rob1[100];//, name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    reauber[playerid] = 0;
    glav = 14400;
    KillTimer(bankcountdown1);
    KillTimer(bankcountdown2);
    KillTimer(bankcountdown3);
    KillTimer(bankcountdown4);
    KillTimer(bankcountdown5);
    KillTimer(ausgeraubt1);
    SetTimer("rauberlauben1", 60000, 0);
    format(rob1,sizeof(rob1),"%s wurde GETÖTET. Der Bankraub ist fehlgeschlagen!!!",name);
    SendClientMessageToAll(COLOR_LIGHTBLUE,rob1);
    }
    return 1;
    }
    //new dmessage[128];
    //new deathreason[20];
    //new playercash;
    //new victimteam;
    new Float:px,Float:py,Float:pz;
    //new killerteam;
    new Float:x45, Float:y45, Float:z45;
    GetPlayerPos(playerid, x45,y45,z45);
    //victimteam = gTeam[playerid];
    PlayerInfo[playerid][pGameCrash] = 0;
    //killerteam = gTeam[killerid];
    if(TakeOverTime[playerid] > 0)
    {
    for(new idd; idd<GangZone_Index;idd++)
    {
    if(idd == TakeOver[playerid])
    {
    GangZoneStopFlashForAll(GangZone[idd][gzID]);
    }
    }
    new job, job2;
    if(PlayerInfo[playerid][pMember] >0)
    {
    job = PlayerInfo[playerid][pMember];
    }
    else if(PlayerInfo[playerid][pLeader] >0)
    {
    job = PlayerInfo[playerid][pLeader];
    }
    format(string, sizeof(string), "~w~Du hast ~r~versagt!");
    for(new i; i<MAX_PLAYERS; i++)
    {
    if(PlayerInfo[i][pMember] >0)
    {
    job2 = PlayerInfo[i][pMember];
    }
    else if(PlayerInfo[i][pLeader] >0)
    {
    job2 = PlayerInfo[i][pLeader];
    }
    if(job2 == job)
    {
    GameTextForPlayer(i, string, 5000, 1);
    }
    }
    format(string, sizeof(string), "~g~Dieses Gebiet bleibt in eurem Besitz!");
    for(new i; i<MAX_PLAYERS; i++)
    {
    if(PlayerInfo[i][pMember] >0)
    {
    job2 = PlayerInfo[i][pMember];
    }
    else if(PlayerInfo[i][pLeader] >0)
    {
    job2 = PlayerInfo[i][pLeader];
    }
    if(GangZone[TakeOver[playerid]][owner] == job2)
    {
    GameTextForPlayer(i, string, 5000, 1);
    }
    }
    TakeOver[playerid] = 255;
    TakeOverTime[playerid] = 0;
    }
    if(PlayerGetMoney(playerid) >= 250 && DeathPickup[playerid]==0)
    {
    // new string2[128];
    DeathPickup[playerid] = CreatePickup(1212, 1, x45,y45,z45-0.5);
    new betrag;
    betrag = 25;
    ConsumingMoney[playerid] = 1; PlayerGiveMoney(playerid, -betrag);
    DeathPickupMoney[playerid] = betrag;
    format(string, sizeof(string), "Du hast $%d aus deinen Taschen verloren!",betrag);
    format(string2, sizeof(string2), "You lost $%d out of your pockets!", betrag);
    SendUserMessage(playerid, COLOR_RED, string, string2);
    SetTimerEx("DestroyDeathPickup", 60000, 0, "i",playerid);
    }

  • gPlayerSpawned[playerid] = 0;
    GetPlayerName(playerid, name, sizeof(name));
    PlayerInfo[playerid][pLocal] = 255;
    GetPlayerPos(playerid, px, py, pz);
    if(PlaysLSPDDM[playerid] == 1)
    {
    // new string2[128];
    new name2[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    GetPlayerName(killerid, name2, sizeof(name2));
    format(string, sizeof(string), "DM: %s wurde von %s getötet", name, name2);
    format(string2, sizeof(string2), "DM: %s got killed by %s", name, name2);
    SendUserMessageToAll(COLOR_RED, string, string2);
    LSPDDMPlayers--;
    PlaysLSPDDM[playerid] = 0;
    LSPDDM = 2;
    LSPDDeathmatch();
    return 1;
    }
    if(killerid != 255)
    {
    if(GetPlayerState(killerid) == 2)
    {
    new kickname[MAX_PLAYER_NAME], usname[MAX_PLAYER_NAME];
    SendUserMessage(killerid, COLOR_YELLOW, "Mache keine DriveBy Kills!", "Do not make Drive-By Kills!");
    GetPlayerName(killerid, kickname, sizeof(kickname));
    GetPlayerName(playerid, usname, sizeof(usname));
    format(string, 256, "AdmWarning: [%d]%s got drive-by killed by %s",playerid,usname, kickname);
    ABroadCast(COLOR_YELLOW,string,1);
    return 1;
    }
    }
    if(reason == 38)
    {
    new kstring[128];
    new kickname[MAX_PLAYER_NAME];
    if(IsPlayerConnected(killerid))
    {
    GetPlayerName(killerid, kickname, sizeof(kickname));
    format(string, 256, "AdmWarnung: [%d]%s hat gerade einen Spieler mit einer Minigun gekillt.",killerid,kickname);
    ABroadCast(COLOR_YELLOW,string,1);
    printf("%s", kstring);
    }
    }
    if (gPlayerCheckpointStatus[playerid] > 4 && gPlayerCheckpointStatus[playerid] < 11)
    {
    DisablePlayerCheckpoint(playerid);
    gPlayerCheckpointStatus[playerid] = CHECKPOINT_NONE;
    }
    new caller = Mobile[playerid];
    if(caller != 255)
    {
    if(caller < 255)
    {
    SendUserMessage(caller, COLOR_GRAD2, "Die Leitung ist tod!", "The line is death!");
    CellTime[caller] = 0;
    CellTime[playerid] = 0;
    Mobile[caller] = 255;
    }
    Mobile[playerid] = 255;
    CellTime[playerid] = 0;
    }
    if(PlayerPaintballing[playerid] != 0)
    {
    PlayerPaintballKills[killerid] ++;
    if(PlayerPaintballKills[killerid] > PaintballWinnerKills)
    {
    new killer[MAX_PLAYER_NAME];
    PaintballWinner = killerid;
    PaintballWinnerKills = PlayerPaintballKills[killerid];
    GetPlayerName(killerid, killer, sizeof(killer));
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(PlayerPaintballing[i] != 0)
    {
    format(string2, sizeof(string2), "* %s is in the lead (%s kills)", killer, PaintballWinnerKills);
    format(string, sizeof(string), "* %s ist mit %d Kills in Führung.",killer,PaintballWinnerKills);
    SendUserMessage(i, COLOR_WHITE, string, string2);
    }
    }
    }
    }
    return 1;
    }
    if(GettingCK[playerid] < 999 || OnCK[playerid] < 999)
    {
    if(IsPlayerConnected(killerid))
    {
    if(GettingCK[killerid] < 999 || OnCK[playerid] < 999)
    {
    new killer[MAX_PLAYER_NAME];
    new dier[MAX_PLAYER_NAME];
    GetPlayerName(playerid, dier, sizeof(dier));
    GetPlayerName(killerid, killer, sizeof(killer));
    format(string, sizeof(string), "* %s hat einen Charakter Kill für dich eingeleitet. Du kannst mit diesem Charakter nicht mehr spielen!",killer);
    SendUserMessage(playerid, COLOR_LIGHTRED, string,string);
    format(string, sizeof(string), "** %s hat den Charakter von %s gekillt! **",killer,dier);
    CKLog(string);
    PlayerInfo[playerid][pCK] = 1;
    if(GettingCK[playerid] < 999) { GettingCK[playerid] = 999; }
    else if(OnCK[playerid] < 999) { OnCK[playerid] = 999; }
    if(GettingCK[killerid] < 999) { GettingCK[killerid] = 999; }
    else if(OnCK[killerid] < 999) { OnCK[killerid] = 999; }
    KickPlayer[playerid] = 1;
    }
    }
    }
    if(PlayerInfo[playerid][pHeadValue] > 0)
    {
    if(IsPlayerConnected(killerid))
    {
    if(gTeam[killerid] == 10 || PlayerInfo[killerid][pLeader] == 8)
    {
    if(GoChase[killerid] == playerid)
    {
    ConsumingMoney[killerid] = 1;
    new killer[MAX_PLAYER_NAME];
    GetPlayerName(killerid, killer, sizeof(killer));
    PlayerGiveMoney(killerid, PlayerInfo[playerid][pHeadValue]);
    format(string,128,"<< Hitman %s hat den Vertrag mit %s vervollständigt und %d$ gesammelt. >>",killer,name,PlayerInfo[playerid][pHeadValue]);
    format(string,128,"<< Hitman %s has fullfilled the $%d contract on %s",killer,PlayerInfo[playerid][pHeadValue], name);
    SendFamilyMessage(8, COLOR_YELLOW, string, string2);
    PlayerInfo[playerid][pHeadValue] = 0;
    GotHit[playerid] = 0;
    GetChased[playerid] = 999;
    GoChase[killerid] = 999;
    new Float:x11, Float:y11, Float:z11;
    GetPlayerPos(playerid, x11,y11,z11);
    if(y11 > 0)
    {
    Krankenhaus[playerid] = 2;
    }
    else
    {
    Krankenhaus[playerid] = 1;
    }
    }
    }
    }
    }
    PlayerInfo[playerid][pGCAmmo1] = 0;
    PlayerInfo[playerid][pGCAmmo2] = 0;
    PlayerInfo[playerid][pGCAmmo3] = 0;
    PlayerInfo[playerid][pGCAmmo4] = 0;
    PlayerInfo[playerid][pGCAmmo5] = 0;
    PlayerInfo[playerid][pGCAmmo6] = 0;
    if(IsPlayerConnected(killerid))
    {
    if(!IsACop(killerid))
    {
    if(PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pLeader] == 1 || PlayerInfo[playerid][pLeader] == 18)
    {
    WantedPoints[killerid] +=4;
    SetPlayerCriminal(killerid, 255, "Mord an einem LSPD Beamten", "Murder on a LSPD Officer",2);
    }
    else if(PlayerInfo[playerid][pMember] == 2 || PlayerInfo[playerid][pLeader] == 2)
    {
    WantedPoints[killerid] +=4;
    SetPlayerCriminal(killerid, 255, "Mord an einem FBI Agenten", "Murder on a FBI Agent",3);
    }
    else if(PlayerInfo[playerid][pMember] == 3 || PlayerInfo[playerid][pLeader] == 3)
    {
    WantedPoints[killerid] +=4;
    SetPlayerCriminal(killerid, 255, "Mord an einem Soldaten", "Murder on a soldier",4);
    }
    else if(PlayerInfo[playerid][pMember] == 12 || PlayerInfo[playerid][pLeader] == 12)
    {
    WantedPoints[killerid] +=4;
    SetPlayerCriminal(killerid, 255, "Mord an einem SFPD Beamten", "Murder on a SFPD Officer",2);
    }
    else if(PlayerInfo[playerid][pMember] == 19 || PlayerInfo[playerid][pLeader] == 19)
    {
    WantedPoints[killerid] +=4;
    SetPlayerCriminal(killerid, 255, "Mord an einem S.I.D. Agenten", "Murder on a S.I.D. Agent",4);
    }
    else
    {
    SetPlayerCriminal(killerid, 255, "Mord an einem Zivilisten", "Murder on a civilian",1);
    }
    }
    else
    {
    if(WantedLevel[playerid] > 1)
    {
    new pprice, time, name1[MAX_PLAYER_NAME], name2[MAX_PLAYER_NAME];
    pprice = WantedLevel[playerid] * 5000;
    time = WantedLevel[playerid] * 300;
    GetPlayerName(playerid, name1, sizeof(name1));
    GetPlayerName(killerid, name2, sizeof(name2));
    PlayerInfo[playerid][pJailed] = 1;
    PlayerInfo[playerid][pJailTime] += time;
    ConsumingMoney[playerid] = 1; PlayerGiveMoney(playerid, -pprice);
    format(string, sizeof(string), "Du stirbst mit %d Wanteds und bezahlst %d Strafe",WantedLevel[playerid],pprice);
    format(string2, sizeof(string2), "You died with %d wanteds. Penalty: %d", WantedLevel[playerid],pprice);
    SendUserMessage(playerid, COLOR_LIGHTRED, string, string2);
    format(string2, sizeof(string2), "HQ: %s got killed by %s (Wanted Level: %d)",name1,name2, WantedLevel[playerid]);
    format(string, sizeof(string), "HQ: %s wurde von %s mit %d Wanteds erschossen", name1, name2, WantedLevel[playerid]);
    WantedPoints[playerid] = 0;
    WantedLevel[playerid] = 0;
    SetPlayerWanteds(playerid);
    ClearCrime(playerid);
    for(new i; i<MAX_USERS; i++)
    {
    if(IsACop(i))
    {
    SendUserMessage(i, COLOR_LIGHTRED, string,string2);
    }
    }
    new Float:xPos, Float:yPos, Float:zPos;
    GetPlayerPos(playerid, xPos, yPos, zPos);
    format(string, sizeof(string), "~w~fluechtiger ~g~gestorben~n~~w~+~b~$%d", pprice/3);
    for(new i; i<MAX_USERS;i++)
    {
    if(PlayerToPoint(25, i, xPos, yPos, zPos))
    {
    if(IsACop(i))
    {
    if(OnDuty[i] == 1)
    {
    ConsumingMoney[i] = 1; PlayerGiveMoney(i, pprice/3);
    GameTextForPlayer(i, string, 6000, 1);
    PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
    }
    }
    }
    }
    }
    }
    }
    PlayerInfo[killerid][pKills]++;
    ClearCrime(playerid);
    killerid = INVALID_PLAYER_ID;
    //SetPlayerColor(playerid,COLOR_GRAD2);
    SetPlayerWanteds(playerid);
    return 1;
    }

  • Mach EIn Spawnpunkt Bei OnPLayerDeath
    Sonst Respawnt Er Nicht

  • Was für einen Spawnpunkt? Die vielen Spieler habe unterschiedliche.


    Kann ich auch OnPlayerSpawn(playerid); machen?


    Dann würde er ja auch Spawnen.


    Danke aber erstmal für den Tipp.


    mfG

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ja, toll. Die Funktion gibts garnicht.


    Hast ein include oder was?


    Ich hab schon probiert einen Spieler mit OnPlayerSpawn(playerid); zu spawnen, aber da ist das kein wirklicher Tod (eher ein HP0 und Spawn).


    ** Nochwas: Wenn man jetzt von 300Meter vom HImmel fällt (zB) dann kommt man auf dem Boden auf, der spieler liegt aber nicht, er steht dann auf dem Boden mit HP 0, obwohl eigendlich ja die Tod-Animation kommen sollte.


    ** Wenn ich dann per Adminbefehl die HP Auf (zB) 100 setzte, spawnt der Spieler wieder (ohne Tod-Animation)


    Das ist aber nur manchmal so, und am Root kanns auch nicht liegen, weil der Root viel Leistung aufweist.


    Ich erstelle gerade ein Video dazu, zum ansehen. Vielleicht hilf das weiter.


    mfG

  • Das ist normal sofern dein Server zuviele Ressourcen Verschwendet oder Laggt, etc. die Kill/Death - Animation kann man nicht löschen högstens ändern, sie ist Standart... okay ich denke man kann sie schon irgendwie disablen aber bei Deinen Callback sehe ich keine Anzeichen von dem Disable

  • @ Xaiunay


    Also, das hab ich bereits beim Paintball so.


    Wenn der Spieler im Paintball stirbt dann Player[playerid][PBSpawn] == 1;


    Und bei OnPlayerSpawn abfragen, ok.


    Ich werds mal ausprobieren, bist du sicher das es so klappt?


    Danke für den Tipp


    mfG

  • Ich glaube das ist ein Samp bug. Da als ich gestorben bin ganz normal gespawnt bin und dan irgend wan ma konnte ich wieder rumlaufen bis ich verhungert bin. Auch auf Nova ist das so