Problem mit Bestatter System.

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 bin gerade dabei mein Bestatter System zu scripten.


    Wenn ein Spieler stierbt, sollte eigentlich ein Pickup erstellt werden. Leider passiert da garnichts :(


    Codes:


    #define MAX_LEICHEN 3000


    enum LeichenInfoEnun{
    Float:l_x,
    Float:l_y,
    Float:l_z,
    pickup,
    Text3D:NamenLabel,
    onload
    }
    new leichenInfo[MAX_LEICHEN][LeichenInfoEnun];


    public OnPlayerDeath(playerid, killerid, reason)
    {
    new Float:tot_x,Float:tot_y,Float:tot_z;
    tot[playerid] = 1;
    giveplayermoney(playerid,-GetPlayerScore(playerid)*50);
    new namenstring[200];
    format(namenstring,sizeof(namenstring),"†\n%s",getPlayerName(playerid));
    for(new l = 0; l < MAX_LEICHEN; l++)
    {
    GetPlayerPos(playerid,tot_x,tot_y,tot_z);
    tot_x=leichenInfo[l][l_x];
    tot_y=leichenInfo[l][l_y];
    tot_z=leichenInfo[l][l_z];
    leichenInfo[l][pickup] = CreatePickup(1254,1,leichenInfo[l][l_x],leichenInfo[l][l_y],leichenInfo[l][l_z],0);
    leichenInfo[l][NamenLabel] = Create3DTextLabel(namenstring,C_Weiß,leichenInfo[l][l_x],leichenInfo[l][l_y],leichenInfo[l][l_z],10.0,0,0);
    leichenInfo[l][onload] = 0;
    print("OnPlayerDeath.. Leichenpickup usw. wurde erstellt!");
    return 1;
    }
    //.....
    //.....
    }


    Das Wird mir geprintet:


    [16:57:36] Number of vehicle models: 102
    [16:57:53] [join] German_ScripterHD has joined the server (0:127.0.0.1)
    [16:59:12] OnPlayerDeath.. Leichenpickup usw. wurde erstellt!


    Ich hoffe es kann mir jemand helfen :)


    MfG :thumbup:


    Mit freundlichen Grüßen
    German_ScripterHD

  • public OnPlayerDeath(playerid, killerid, reason)
    {
    new Float:tot_x,Float:tot_y,Float:tot_z;
    tot[playerid] = 1;
    giveplayermoney(playerid,-GetPlayerScore(playerid)*50);
    new namenstring[200];
    format(namenstring,sizeof(namenstring),"†\n%s",getPlayerName(playerid));
    for(new l = 0; l < MAX_LEICHEN; l++)
    {
    if(leichenInfo[l][existiert] == 1) continue;
    GetPlayerPos(playerid,tot_x,tot_y,tot_z);
    leichenInfo[l][l_x] = tot_x;
    leichenInfo[l][l_y] = tot_y;
    leichenInfo[l][l_z] = tot_z;
    leichenInfo[l][pickup] = CreatePickup(1254,1,leichenInfo[l][l_x],leichenInfo[l][l_y],leichenInfo[l][l_z],0);
    leichenInfo[l][NamenLabel] = Create3DTextLabel(namenstring,C_Weiß,leichenInfo[l][l_x],leichenInfo[l][l_y],leichenInfo[l][l_z],10.0,0,0);
    leichenInfo[l][onload] = 0;
    leichenInfo[l][existiert] = 1;
    print("OnPlayerDeath.. Leichenpickup usw. wurde erstellt!");
    break;
    }
    //.....
    //.....
    }


  • Danke, klappt :thumbup:


    Jetzt habe ich noch ein Problem mit meiner Leichenliste, diese soll ein Dialog mit allen leichen die es gibt anzeigen. Leider zeigt diese garnichts an .


    Code:
    #define DIALOG_LeichenMenu 122


    ocmd:corpselist(playerid,params[])
    {
    new string[512],string2[512],inhalt[512],Float:x,Float:y,Float:z;
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid,COLOR_GRAY,"*Du bist in keinem Fahrzeug!");
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)return SendClientMessage(playerid,COLOR_GRAY,"*Du bist nicht der Fahrer eines Fahrzeugs!");
    for(new i = 0; i < MAX_LEICHEN; i++)
    {
    if(leichenInfo[i][l_x] == 0 && leichenInfo[i][l_y] == 0 || leichenInfo[i][l_z] == 0)return 1;
    format(string2,sizeof(string2),"%s\t%0.2f Meter\t%d\n",GetAreaName(leichenInfo[i][l_x],leichenInfo[i][l_y],leichenInfo[i][l_z]),GetDistance(x,y,z,leichenInfo[i][l_x],leichenInfo[i][l_y],leichenInfo[i][l_z]));
    strcat(string, string2);
    }
    format(inhalt,sizeof(inhalt),"Ort\tEntfernung\n%s",string);
    ShowPlayerDialog(playerid, DIALOG_LeichenMenu, DIALOG_STYLE_TABLIST_HEADERS, "Leichen Menu",inhalt, "Wählen", "Abbrechen");
    return 1;
    }


    if(dialogid==DIALOG_LeichenMenu)
    {
    if(!response)return 1;
    new tmp;
    for(new i=1; i<MAX_LEICHEN; i++)
    {
    if(tmp==listitem)
    {
    if(leichenInfo[i][onload]==1)return 1;
    SetPlayerCheckpoint(playerid,leichenInfo[i][l_x],leichenInfo[i][l_y],leichenInfo[i][l_z],3.0);
    return 1;
    }
    else tmp++;
    }
    }


    Mit freundlichen Grüßen
    German_ScripterHD

  • ocmd:corpselist(playerid,params[])
    {
    new string[512],Float:x,Float:y,Float:z;
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid,COLOR_GRAY,"*Du bist in keinem Fahrzeug!");
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)return SendClientMessage(playerid,COLOR_GRAY,"*Du bist nicht der Fahrer eines Fahrzeugs!");
    for(new i = 0; i < MAX_LEICHEN; i++)
    {
    if(leichenInfo[i][existiert] == 0) continue;
    format(string,sizeof(string),"%s%s\t%0.2f Meter\n",string,GetAreaName(leichenInfo[i][l_x],leichenInfo[i][l_y],leichenInfo[i][l_z]),GetDistance(x,y,z,leichenInfo[i][l_x],leichenInfo[i][l_y],leichenInfo[i][l_z]));
    }
    if(!strlen(string)) return SendClientMessage(playerid, COLOR_GRAY, "Error: Keine Leichen vorhanden.");
    format(string,sizeof(string),"Ort\tEntfernung\n%s",string);
    ShowPlayerDialog(playerid, DIALOG_LeichenMenu, DIALOG_STYLE_TABLIST_HEADERS, "Leichen Menu",string, "Wählen", "Abbrechen");
    return 1;
    }


    if(dialogid==DIALOG_LeichenMenu)
    {
    if(!response)return 1;
    new tmp;
    for(new i=0; i<MAX_LEICHEN; i++)
    {
    if(leichenInfo[i][existiert] == 0) continue;
    if(tmp==listitem)
    {
    if(leichenInfo[i][onload]==1) return 1;
    SetPlayerCheckpoint(playerid,leichenInfo[i][l_x],leichenInfo[i][l_y],leichenInfo[i][l_z],3.0);
    return 1;
    }
    else tmp++;
    }
    }

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry () aus folgendem Grund: Siehe Post #6

  • Wenn ich mich jetzt das erstemal töte, wird mir bei der Leichenliste, jetzt angzeigt: "Santa Maria Beach Entfernung: blabla" klicke ich jetzt auf diesen Ort wird mir keine Checkpoint gesetzt. Wenn ich mich jetzt ein zweitesmal töte, wird auch dieser Ort angezeigt aber klicke ich jetzt auf das zweite wird mir der Checkpoint zum ersten gesetzt.


    Mit freundlichen Grüßen
    German_ScripterHD

  • Befehl zum leiche einsammeln:


    ocmd:corpse(playerid)
    {
    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_LEICHEN; i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid,10.0,leichenInfo[i][l_x],leichenInfo[i][l_y],leichenInfo[i][l_z]))return SendClientMessage(playerid,C_Error,"Hier ist keine Leiche!");
    Delete3DTextLabel(leichenInfo[i][NamenLabel]);
    DestroyPickup(leichenInfo[i][pickup]);
    SendClientMessage(playerid,C_Blau,"Du hast eine Leiche eingesammelt.");
    SendClientMessage(playerid,C_Blau,"Fahre nun zum Friedhof, und geb die Leiche dort ab.");
    leiche[playerid]=1;
    leichenInfo[i][existiert]=0;
    SetPlayerCheckpoint(playerid,927.4283,-1073.0220,24.2891,5.0);
    return 1;
    }
    return 1;
    }


    Muss jetzt dann .... leichenInfo[i][existiert]=0; oder leichenInfo[i][existiert]=1; ?


    .


    Mit freundlichen Grüßen
    German_ScripterHD

  • ocmd:corpse(playerid)
    {
    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_LEICHEN; i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid,10.0,leichenInfo[i][l_x],leichenInfo[i][l_y],leichenInfo[i][l_z]) || leichenInfo[i][existiert] != 1) continue;
    Delete3DTextLabel(leichenInfo[i][NamenLabel]);
    DestroyPickup(leichenInfo[i][pickup]);
    SendClientMessage(playerid,C_Blau,"Du hast eine Leiche eingesammelt.");
    SendClientMessage(playerid,C_Blau,"Fahre nun zum Friedhof, und geb die Leiche dort ab.");
    leiche[playerid]=1;
    leichenInfo[i][existiert]=0;
    SetPlayerCheckpoint(playerid,927.4283,-1073.0220,24.2891,5.0);
    return 1;
    }
    return SendClientMessage(playerid,C_Error,"Hier ist keine Leiche!");
    }