[Problem] bei Bestatter Job

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 Brotfische,


    Ich war gerade dabei den Bestatter Job für meinen Server zu scripten... leider etwas verbuggt.
    Bei /findcorpse möchte ich das mir ein Zufalls Leichen-Pickup angezeigt wird...
    Bei /corpse ist verbuggt, da es das nicht richtig löscht (die Sachen aus dem Enum)


    Codes:


    enum leichen{
    Float:l_x,
    Float:l_y,
    Float:l_z,
    pickup,
    Text3D:NamenLabel,
    p_id
    }


    new leichenInfo[MAX_PLAYERS][leichen];
    new leiche[MAX_PLAYERS];


    ocmd:corpse(playerid,params[])
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 442)return SendClientMessage(playerid,C_Error,"Du bist nicht im Leichenwagen!");
    if(IsPlayerInRangeOfPoint(playerid,10.0,leichenInfo[playerid][l_x],leichenInfo[playerid][l_y],leichenInfo[playerid][l_z]))
    {
    DestroyPickup(leichenInfo[playerid][pickup]);
    Delete3DTextLabel(leichenInfo[playerid][NamenLabel]);
    SendClientMessage(playerid,C_Blau,"Du hast eine Leiche eingesammelt.");
    SendClientMessage(playerid,C_Blau,"Fahre nun zum Friedhof, und geb dich Leiche dort ab.");
    leiche[playerid]=1;
    SetPlayerCheckpoint(playerid,927.4283,-1073.0220,24.2891,5.0);
    return 1;
    }
    return SendClientMessage(playerid,C_Error,"Es ist keine Leiche in deiner Nähe!");
    }
    ocmd:findcorpse(playerid,params[])
    {
    GameTextForPlayer(playerid,"Leiche wird gesucht...",2000,3);
    SetPlayerCheckpoint(playerid,leichenInfo[playerid][l_x],leichenInfo[playerid][l_y],leichenInfo[playerid][l_z],5.0);
    return SendClientMessage(playerid,C_Error,"Es sind keine Leichen in der Umgebung!");
    }
    ocmd:unloadcorpse(playerid,params[])
    {
    if(!IsPlayerInRangeOfPoint(playerid,7.0,927.4283,-1073.0220,24.2891))return SendClientMessage(playerid,C_Error,"Du bist nicht am Friedhof!");
    if(leiche[playerid]==1)
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 442)return SendClientMessage(playerid,C_Error,"Du bist nicht im Leichenwagen!");
    SendClientMessage(playerid,C_Blau,"Du hast die Leiche erfolgreich abgeladen.");
    giveplayermoney(playerid,600);
    leiche[playerid]=0;
    return 1;
    }
    if(leiche[playerid]==0)
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 442)return SendClientMessage(playerid,C_Error,"Du bist nicht im Leichenwagen!");
    SendClientMessage(playerid,C_Error,"Du hast keine Leiche geladen!");
    }
    return 1;
    }
    public OnPlayerDeath(playerid, killerid, reason)
    {
    new namenstring[200];
    format(namenstring,sizeof(namenstring),"%s",getPlayerName(playerid));
    GetPlayerPos(playerid,leichenInfo[playerid][l_x],leichenInfo[playerid][l_y],leichenInfo[playerid][l_z]);
    leichenInfo[playerid][pickup] = CreatePickup(1254,1,leichenInfo[playerid][l_x],leichenInfo[playerid][l_y],leichenInfo[playerid][l_z],0);
    leichenInfo[playerid][NamenLabel] = Create3DTextLabel(namenstring,C_Weiß,leichenInfo[playerid][l_x],leichenInfo[playerid][l_y],leichenInfo[playerid][l_z],10.0,0,0);
    }


    Ich hoffe es kann mir jemand helfen :D


    MFG German_ScripterHD


    Mit freundlichen Grüßen
    German_ScripterHD

  • ich glaube du meinst das die neue leichen position etc... nicht überschrieben wird denke ich.
    ich denke ma liegt daran das du bei onplayerdeath die daten des toten in seinem enum speicherst.
    bei /corpse etc.. gibste aber die daten vom enum des leichenbestatter selber aus.
    Also kurz gesagt du nutzt die falsche spielerid
    weil bei onplayerdeath 'playerid' = der tote spieler
    beim befehl 'playerid' wer den befehl ausführt
    ändere die playerids in den befehlen einfach auf deine p_id

    >> sPa.M << go, go,Bann me, Bann me

  • enum leichen{
    Float:l_x,
    Float:l_y,
    Float:l_z,
    pickup,
    Text3D:NamenLabel,
    p_id,
    bool:IstSpielerTot
    }


    new leichenInfo[MAX_PLAYERS][leichen];
    new leiche[MAX_PLAYERS];


    ocmd:corpse(playerid,params[])
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 442)return SendClientMessage(playerid,C_Error,"Du bist nicht im Leichenwagen!");
    if(leiche[playerid] == 1) return SendClientMessage(playerid, C_Error, "Du hast bereits eine Leiche geladen. Bringe sie zuerst zum Friedhof.");
    for(new i=0; i < MAX_PLAYERS; i++)
    {
    if(leichenInfo[i][IstSpielerTot] == true)
    {
    if(IsPlayerInRangeOfPoint(playerid,10.0,leichenInfo[i][l_x],leichenInfo[i][l_y],leichenInfo[i][l_z]))
    {
    DestroyPickup(leichenInfo[i][pickup]);
    Delete3DTextLabel(leichenInfo[i][NamenLabel]);
    SendClientMessage(playerid,C_Blau,"Du hast eine Leiche eingesammelt.");
    SendClientMessage(playerid,C_Blau,"Fahre nun zum Friedhof, und geb dich Leiche dort ab.");
    leiche[playerid]=1;
    SetPlayerCheckpoint(playerid,927.4283,-1073.0220,24.2891,5.0);
    leichenInfo[playerid][IstSpielerTot] = false;
    return 1;
    }
    }
    }
    return SendClientMessage(playerid,C_Error,"Es ist keine Leiche in deiner Nähe!");
    }



    ocmd:findcorpse(playerid,params[])
    {
    GameTextForPlayer(playerid,"Leiche wird gesucht...",2000,3);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(leichenInfo[i][IstSpielerTot] == false) continue; // Arbeite normalerweise nicht mit continue. Alternative wäre: if(leichenInfo[i][IstSpielerTot] == true) und dann halt der untere Code
    SetPlayerCheckpoint(playerid,leichenInfo[i][l_x],leichenInfo[i][l_y],leichenInfo[i][l_z],5.0);
    SendClientMessage(playerid, C_Blau, "Du hast eine Leiche gefunden.");
    return 1;
    }
    return SendClientMessage(playerid,C_Error,"Es sind keine Leichen in der Umgebung!");
    }



    ocmd:unloadcorpse(playerid,params[])
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 442)return SendClientMessage(playerid,C_Error,"Du bist nicht im Leichenwagen!");
    if(leiche[playerid] ==0) return SendClientMessage(playerid, C_Error, "Du hast keine Leiche geladen!");
    if(!IsPlayerInRangeOfPoint(playerid,7.0,927.4283,-1073.0220,24.2891))return SendClientMessage(playerid,C_Error,"Du bist nicht am Friedhof!");
    if(leiche[playerid]==1)
    {
    SendClientMessage(playerid,C_Blau,"Du hast die Leiche erfolgreich abgeladen.");
    giveplayermoney(playerid,600);
    leiche[playerid]=0;
    return 1;
    }
    return 1;
    }
    public OnPlayerDeath(playerid, killerid, reason)
    {
    new namenstring[200];
    format(namenstring,sizeof(namenstring),"%s",getPlayerName(playerid));
    GetPlayerPos(playerid,leichenInfo[playerid][l_x],leichenInfo[playerid][l_y],leichenInfo[playerid][l_z]);
    leichenInfo[playerid][pickup] = CreatePickup(1254,1,leichenInfo[playerid][l_x],leichenInfo[playerid][l_y],leichenInfo[playerid][l_z],0);
    leichenInfo[playerid][NamenLabel] = Create3DTextLabel(namenstring,C_Weiß,leichenInfo[playerid][l_x],leichenInfo[playerid][l_y],leichenInfo[playerid][l_z],10.0,0,0);
    leichenInfo[playerid][IstSpielerTot] = true;
    }


    Probiers mal aus :)
    Ist ungetestet und unkompiliert.