.:: Plötzliches sterben bei dem Befehl /heilen ::.

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 Breadfisch wie geht es euch ?
    Nun, ich bin jetzt ein kleines bisschen Sauer, weil das was ich gescriptet habe nicht klappt.
    Ich habe für die Medics ein Befehl "/heilen" gescriptet, mit meinen Freund zusammen. Mein Freund hat mir dabei ein bisschen geholfen
    und auch er weiss keinen Rat mehr, vielleicht könntet ihr, falls es euch natürlich nichts ausmacht, mal reinschauen, wisst ihr ?
    Das ihr euch den Code genau anguckt und dann mich auf Fehler hinweist. Wenn ihr nicht wisst, wie ihr mir am besten helfen könnt, dann schreibt bitte erst gar nicht darunter und verbringt eure kostbare Zeit, nicht damit, etwas sinnloses zu Posten ok ? Ich hoffe wir alle sind uns in diesen Punkt einig geworden, denn ich will mir ja schließlich keine Vorwürfe anhören, sondern möchte wie jeder andere Hilfe haben.


    So, wenn ich den Befehl "/heilen [Id]" eingebe, dann kommen die ganzen Messages, die gescriptet wurden, was ja auch ganz normal ist,
    was auch so seien muss. Doch der Patient, den ich heilen möchte, stirbt dann ur plötzlich und ich muss ihn areviven.
    Was kann ich dafür tuhn, das dieser Spieler nicht mehr stirbt ? Hier der Code.


    ocmd:heilen(playerid,params[])
    {
    new pID,string[128];
    if(!DarfPlayerCommand(playerid))return ErrorMsg(playerid,"Du kannst keine Befehle benutzen.");
    if(!IsPlayerInFrac(playerid,4))return ErrorMsg(playerid,"Du bist kein Notarzt Cowboy.");
    if(OnDuty[playerid]==0)return ErrorMsg(playerid,"Du bist nicht im Dienst.");
    if(!IsPlayerInAnyVehicle(playerid))return ErrorMsg(playerid,"Du musst in einen Rettungswagen sitzen.");
    if(sscanf(params,"u",pID))return ErrorMsg(playerid,"Nutze: /heilen [playerid]");
    if(!IsPlayerConnected(pID))return ErrorMsg(playerid,"Der angegebene Spieler ist nicht eingeloggt!");
    if(IsPlayerNPC(pID))return ErrorMsg(playerid,"Das kannst du nicht.");
    if(!IsPlayerInVehicle(pID,GetPlayerVehicleID(playerid)))return ErrorMsg(playerid,"Spieler befindet sich nicht in deinem Fahrzeug.");
    if(isEngineOn(GetPlayerVehicleID(playerid)))return ErrorMsg(playerid,"Der Motor muss ausgeschaltet sein.");
    if(GetPlayerMoney(pID)<50)return ErrorMsg(playerid,"Dieser Spieler hat nicht genügend Geld.");
    format(string,sizeof(string),"%s (ID:%i) verarztet dich nun.",SpielerName(playerid),playerid);
    SendClientMessage(pID,0x00C71EFF,string);
    SendClientMessage(pID,0x00C71EFF,"Die Dauer und intensivität des Heilungsvorgangs richtet sich nach den Fähigkeiten deines Arztes.");
    format(string,sizeof(string),"Du verarztes %s (ID:%i).",SpielerName(pID),pID);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,"Die Dauer und intensivität des Heilungsvorgangs richtet sich nach deinen Fähigkeiten.");
    PlayerInfo[playerid][pHealOther]=SetTimerEx("Healplayer",1000,1,"ii",playerid,pID,50);
    format(string,sizeof(string),"** %s %s behandelt %s im Rettungswagen **",getFRankName(PlayerInfo[playerid][pFrakt],PlayerInfo[playerid][Rank],PlayerInfo[playerid][Subrank]),SpielerName(playerid),SpielerName(pID));
    ProxMsg(playerid,string);
    return 1;
    }


    Dann hier den Timer, für den Spieler, das der Heilungsprozess n8un beginnen kann, doch, da beginnt er gerade, so hört er auch gleich wieder auf, denn
    der Patient den ich heilen möchte stirbt, die HP geht auf 0.


    public Healplayer(playerid,targetid,cost)
    {
    new string[128];
    if(!IsPlayerConnected(playerid)||!IsPlayerConnected(targetid))
    {
    format(string,sizeof(string),"Dein Partner %s verließ das Spiel während du ihn verarztet hast.",SpielerName(playerid));
    ErrorMsg(playerid,string);
    format(string,sizeof(string),"Dein Partner %s verließ das Spiel während er dich verarztet hat.",SpielerName(playerid));
    ErrorMsg(targetid,string);
    PlayerInfo[playerid][pHealTime]=0;
    KillTimer(PlayerInfo[playerid][pHealOther]);
    return 1;
    }
    if(!IsPlayerInVehicle(targetid,GetPlayerVehicleID(playerid)))
    {
    format(string,sizeof(string),"Dein Patient %s verließ das Fahrzeug.",SpielerName(targetid));
    ErrorMsg(playerid,string);
    format(string,sizeof(string),"Du hast %s 's Fahrzeug verlassen.",SpielerName(playerid));
    ErrorMsg(targetid,string);
    PlayerInfo[playerid][pHealTime]=0;
    KillTimer(PlayerInfo[playerid][pHealOther]);
    return 1;
    }
    if(!IsPlayerNearPlayer(playerid,targetid,5.0))
    {
    format(string,sizeof(string),"Du bist zu weit weg von %s.",SpielerName(targetid));
    ErrorMsg(playerid,string);
    format(string,sizeof(string),"Du bist zu weit weg von %s.",SpielerName(playerid));
    ErrorMsg(targetid,string);
    PlayerInfo[playerid][pHealTime]=0;
    KillTimer(PlayerInfo[playerid][pHealOther]);
    return 1;
    }
    PlayerInfo[playerid][pHealTime]++;
    GivePlayerHealth(targetid,10);
    switch(PlayerInfo[playerid][pMedicHealplayerSkill])
    {
    case 5:
    {
    format(string,sizeof(string),"~n~~n~~n~~n~~y~Heilungsprozess~g~%i:%02d~w~ Minuten",(20-PlayerInfo[playerid][pHealTime])/60,(20-PlayerInfo[playerid][pHealTime])%60);
    GameTextForPlayer(playerid,string,1000,3);
    format(string,sizeof(string),"~n~~n~~n~~n~~y~Heilungsprozess~g~%i:%02d~w~ Minuten",(20-PlayerInfo[playerid][pHealTime])/60,(20-PlayerInfo[playerid][pHealTime])%60);
    GameTextForPlayer(targetid,string,1000,3);
    SetPlayerACHealth(targetid,GetPlayerACHealth(targetid)+5);
    if(PlayerInfo[playerid][pHealTime]>=20||GetPlayerACHealth(targetid)>=100)
    {
    GibGeld(targetid,-cost);
    PlayerInfo[playerid][pMedicHealCount]++;
    format(string,sizeof(string),"Du hast %s (ID:%i) für %i$ verarztet.",SpielerName(targetid),targetid,cost);
    SendClientMessage(playerid,0x00C300FF,string);
    SendClientMessage(playerid,0x00C300FF,"Das Geld fließt an den Staat. | Deine vollbrachte Leistung fließt mit in das Gehalt.");
    SendClientMessage(playerid,0x00C300FF,"Du hast alle Fähigkeitspunkte (Arzt) erreicht!");
    format(string,sizeof(string),"%s (ID:%i) hat dich für %i$ verarztet.",SpielerName(playerid),playerid,cost);
    SendClientMessage(targetid,0x00C300FF,string);
    }
    return 1;
    }
    case 4:
    {
    format(string,sizeof(string),"~n~~n~~n~~n~~y~Heilungsprozess~g~%i:%02d~w~ Minuten",(20-PlayerInfo[playerid][pHealTime])/60,(40-PlayerInfo[playerid][pHealTime])%60);
    GameTextForPlayer(playerid,string,1000,3);
    format(string,sizeof(string),"~n~~n~~n~~n~~y~Heilungsprozess~g~%i:%02d~w~ Minuten",(20-PlayerInfo[playerid][pHealTime])/60,(40-PlayerInfo[playerid][pHealTime])%60);
    GameTextForPlayer(targetid,string,1000,3);
    SetPlayerACHealth(targetid,GetPlayerACHealth(targetid)+2.5);
    if(PlayerInfo[playerid][pHealTime]>=40||GetPlayerACHealth(targetid)>=100)
    {
    GibGeld(targetid,-cost);
    PlayerInfo[playerid][pMedicHealCount]++;
    if(PlayerInfo[playerid][pMedicHealCount]>=MAX_SKILL_UP_COUNT)
    {
    TextDrawShowForPlayer(playerid,InfoSign);
    PlayerTextDrawSetString(playerid,INFOdraw[playerid][2],"~g~Skill Level Up.");
    PlayerTextDrawShow(playerid,INFOdraw[playerid][2]);
    SetTimerEx("HideInfoBox",3000,0,"i",playerid);
    PlayerInfo[playerid][pMedicHealCount]=0;
    PlayerInfo[playerid][pMedicHealplayerSkill]=5;
    }
    format(string,sizeof(string),"Du hast %s (ID:%i) für %i$ verarztet.",SpielerName(targetid),targetid,cost);
    SendClientMessage(playerid,0x00C300FF,string);
    SendClientMessage(playerid,0x00C300FF,"Das Geld fließt an den Staat. | Deine vollbrachte Leistung fließt mit in das Gehalt.");
    format(string,sizeof(string),"Du musst noch %i mal jemanden verarzten haben um einen Fähigkeitspunkt dazu zubekommen.",MAX_SKILL_UP_COUNT-PlayerInfo[playerid][pMedicHealCount]);
    SendClientMessage(playerid,0x00C300FF,string);
    format(string,sizeof(string),"%s (ID:%i) hat dich für %i$ verarztet.",SpielerName(playerid),playerid,cost);
    SendClientMessage(targetid,0x00C300FF,string);
    }
    return 1;
    }
    case 3:
    {
    format(string,sizeof(string),"~n~~n~~n~~n~~y~Heilungsprozess~g~%i:%02d~w~ Minuten",(60-PlayerInfo[playerid][pHealTime])/60,(60-PlayerInfo[playerid][pHealTime])%60);
    GameTextForPlayer(playerid,string,1000,3);
    format(string,sizeof(string),"~n~~n~~n~~n~~y~Heilungsprozess~g~%i:%02d~w~ Minuten",(60-PlayerInfo[playerid][pHealTime])/60,(60-PlayerInfo[playerid][pHealTime])%60);
    GameTextForPlayer(targetid,string,1000,3);
    SetPlayerACHealth(targetid,GetPlayerACHealth(targetid)+1.6);
    if(PlayerInfo[playerid][pHealTime]>=60||GetPlayerACHealth(targetid)>=100)
    {
    GibGeld(targetid,-cost);
    if(PlayerInfo[playerid][pMedicHealCount]>=MAX_SKILL_UP_COUNT)
    {
    TextDrawShowForPlayer(playerid,InfoSign);
    PlayerTextDrawSetString(playerid,INFOdraw[playerid][2],"~g~Skill Level Up.");
    PlayerTextDrawShow(playerid,INFOdraw[playerid][2]);
    SetTimerEx("HideInfoBox",3000,0,"i",playerid);
    PlayerInfo[playerid][pMedicHealCount]=0;
    PlayerInfo[playerid][pMedicHealplayerSkill]=4;
    }
    format(string,sizeof(string),"Du hast %s (ID:%i) für %i$ verarztet.",SpielerName(targetid),targetid,cost);
    SendClientMessage(playerid,0x00C300FF,string);
    SendClientMessage(playerid,0x00C300FF,"Das Geld fließt an den Staat. | Deine vollbrachte Leistung fließt mit in das Gehalt.");
    format(string,sizeof(string),"Du musst noch %i mal jemanden verarzten haben um einen Fähigkeitspunkt dazu zubekommen.",MAX_SKILL_UP_COUNT-PlayerInfo[playerid][pMedicHealCount]);
    SendClientMessage(playerid,0x00C300FF,string);
    format(string,sizeof(string),"%s (ID:%i) hat dich für %i$ verarztet.",SpielerName(playerid),playerid,cost);
    SendClientMessage(targetid,0x00C300FF,string);
    }
    return 1;
    }
    case 2:
    {
    format(string,sizeof(string),"~n~~n~~n~~n~~y~Heilungsprozess~g~%i:%02d~w~ Minuten",(80-PlayerInfo[playerid][pHealTime])/60,(80-PlayerInfo[playerid][pHealTime])%60);
    GameTextForPlayer(playerid,string,1000,3);
    format(string,sizeof(string),"~n~~n~~n~~n~~y~Heilungsprozess~g~%i:%02d~w~ Minuten",(80-PlayerInfo[playerid][pHealTime])/60,(80-PlayerInfo[playerid][pHealTime])%60);
    GameTextForPlayer(targetid,string,1000,3);
    SetPlayerACHealth(targetid,GetPlayerACHealth(targetid)+1.25);
    if(PlayerInfo[playerid][pHealTime]>=80||GetPlayerACHealth(targetid)>=100)
    {
    GibGeld(targetid,-cost);
    if(PlayerInfo[playerid][pMedicHealCount]>=MAX_SKILL_UP_COUNT)
    {
    TextDrawShowForPlayer(playerid,InfoSign);
    PlayerTextDrawSetString(playerid,INFOdraw[playerid][2],"~g~Skill Level Up.");
    PlayerTextDrawShow(playerid,INFOdraw[playerid][2]);
    SetTimerEx("HideInfoBox",3000,0,"i",playerid);
    PlayerInfo[playerid][pMedicHealCount]=0;
    PlayerInfo[playerid][pMedicHealplayerSkill]=3;
    }
    format(string,sizeof(string),"Du hast %s (ID:%i) für %i$ verarztet.",SpielerName(targetid),targetid,cost);
    SendClientMessage(playerid,0x00C300FF,string);
    SendClientMessage(playerid,0x00C300FF,"Das Geld fließt an den Staat. | Deine vollbrachte Leistung fließt mit in das Gehalt.");
    format(string,sizeof(string),"Du musst noch %i mal jemanden verarzten haben um einen Fähigkeitspunkt dazu zubekommen.",MAX_SKILL_UP_COUNT-PlayerInfo[playerid][pMedicHealCount]);
    SendClientMessage(playerid,0x00C300FF,string);
    format(string,sizeof(string),"%s (ID:%i) hat dich für %i$ verarztet.",SpielerName(playerid),playerid,cost);
    SendClientMessage(targetid,0x00C300FF,string);
    }
    return 1;
    }
    case 1:
    {
    format(string,sizeof(string),"~n~~n~~n~~n~~y~Heilungsprozess~g~%i:%02d~w~ Minuten",(100-PlayerInfo[playerid][pHealTime])/60,(100-PlayerInfo[playerid][pHealTime])%60);
    GameTextForPlayer(playerid,string,1000,3);
    format(string,sizeof(string),"~n~~n~~n~~n~~y~Heilungsprozess~g~%i:%02d~w~ Minuten",(100-PlayerInfo[playerid][pHealTime])/60,(100-PlayerInfo[playerid][pHealTime])%60);
    GameTextForPlayer(targetid,string,1000,3);
    SetPlayerACHealth(targetid,GetPlayerACHealth(targetid)+1);
    if(PlayerInfo[playerid][pHealTime]>=100||GetPlayerACHealth(targetid)>=100)
    {
    GibGeld(targetid,-cost);
    if(PlayerInfo[playerid][pMedicHealCount]>=MAX_SKILL_UP_COUNT)
    {
    TextDrawShowForPlayer(playerid,InfoSign);
    PlayerTextDrawSetString(playerid,INFOdraw[playerid][2],"~g~Skill Level Up.");
    PlayerTextDrawShow(playerid,INFOdraw[playerid][2]);
    SetTimerEx("HideInfoBox",3000,0,"i",playerid);
    PlayerInfo[playerid][pMedicHealCount]=0;
    PlayerInfo[playerid][pMedicHealplayerSkill]=2;
    }
    format(string,sizeof(string),"Du hast %s (ID:%i) für %i$ verarztet.",SpielerName(targetid),targetid,cost);
    SendClientMessage(playerid,0x00C300FF,string);
    SendClientMessage(playerid,0x00C300FF,"Das Geld fließt an den Staat. | Deine vollbrachte Leistung fließt mit in das Gehalt.");
    format(string,sizeof(string),"Du musst noch %i mal jemanden verarzten haben um einen Fähigkeitspunkt dazu zubekommen.",MAX_SKILL_UP_COUNT-PlayerInfo[playerid][pMedicHealCount]);
    SendClientMessage(playerid,0x00C300FF,string);
    format(string,sizeof(string),"%s (ID:%i) hat dich für %i$ verarztet.",SpielerName(playerid),playerid,cost);
    SendClientMessage(targetid,0x00C300FF,string);
    }
    return 1;
    }
    default:
    {
    format(string,sizeof(string),"~n~~n~~n~~n~~y~Heilungsprozess~g~%i:%02d~w~ Minuten",(120-PlayerInfo[playerid][pHealTime])/60,(120-PlayerInfo[playerid][pHealTime])%60);
    GameTextForPlayer(playerid,string,1000,3);
    format(string,sizeof(string),"~n~~n~~n~~n~~y~Heilungsprozess~g~%i:%02d~w~ Minuten",(120-PlayerInfo[playerid][pHealTime])/60,(120-PlayerInfo[playerid][pHealTime])%60);
    GameTextForPlayer(targetid,string,1000,3);
    SetPlayerACHealth(targetid,GetPlayerACHealth(targetid)+0-83);
    if(PlayerInfo[playerid][pHealTime]>=120||GetPlayerACHealth(targetid)>=100)
    {
    if(PlayerInfo[playerid][pMedicHealCount]>=MAX_SKILL_UP_COUNT)
    {
    TextDrawShowForPlayer(playerid,InfoSign);
    PlayerTextDrawSetString(playerid,INFOdraw[playerid][2],"~g~Skill Level Up.");
    PlayerTextDrawShow(playerid,INFOdraw[playerid][2]);
    SetTimerEx("HideInfoBox",3000,0,"i",playerid);
    PlayerInfo[playerid][pMedicHealCount]=0;
    PlayerInfo[playerid][pMedicHealplayerSkill]=1;
    }
    format(string,sizeof(string),"Du hast %s (ID:%i) für %i$ verarztet.",SpielerName(targetid),targetid,cost);
    SendClientMessage(playerid,0x00C300FF,string);
    SendClientMessage(playerid,0x00C300FF,"Das Geld fließt an den Staat. | Deine vollbrachte Leistung fließt mit in das Gehalt.");
    format(string,sizeof(string),"Du musst noch %i mal jemanden verarzten haben um einen Fähigkeitspunkt dazu zubekommen.",MAX_SKILL_UP_COUNT-PlayerInfo[playerid][pMedicHealCount]);
    SendClientMessage(playerid,0x00C300FF,string);
    format(string,sizeof(string),"%s (ID:%i) hat dich für %i$ verarztet.",SpielerName(playerid),playerid,cost);
    SendClientMessage(targetid,0x00C300FF,string);
    }
    return 1;
    }
    }
    return 1;
    }


    forward Healplayer(playerid,targetid,cost);


    Ich habe die vermutung in dieser Funktion.
    SetPlayerACHealth(targetid,GetPlayerACHealth(targetid)+1);


    stock SetPlayerACHealth(playerid,Float:health)
    {
    SetPlayerHealth(playerid,health);
    GetPlayerHealth(playerid,OLDhealth[playerid]);
    return 1;
    }


    stock Float:GetPlayerACHealth(playerid)
    {
    new Float:health;
    GetPlayerHealth(playerid,health);
    return health;
    }


    MfG