Tod-System wird nicht ausgeführt

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,


    irgendwie buggt mein OnPlayerDeath seit dem ich die If Abfrage bei den Wanteds gemacht habe, ob killerid ein Cop ist und ob Playerid ein Cop ist(wenn Killerid cop ist bekommt man keine Wanteds und wenn Playerid cop ist bekommt Killerid(falls kein cop) 5 Wanteds und wenn nicht nur 3)
    Jedoch egal ob ich Wanteds habe oder nicht, ich sterbe einfach ganz normal und komme dann an die Position an der ich mich ausgeloggt habe.
    Eigentlich soll es ja so sein, dass wenn ich in der Nähe eines Cops Sterbe mit Wanteds ich in den Knast komme, falls ich keine habe oder kein Cop in der Nähe ist ich dann am Friedhof spawne.



    Mein OnPlayerDeath


    Spoiler anzeigen
    public OnPlayerDeath(playerid, killerid, reason)
    {
    //________________ Definierungen ______________________
    new stringz[128],die[128],wtd[128],string[128];
    SpielerInfo[playerid][pTode] +=1;
    if(killerid != INVALID_PLAYER_ID) SpielerInfo[killerid][pKills] +=1;
    SpielerInfo[playerid][pDuty] = 0;
    //________________ Wanted-System ______________________
    if(SpielerInfo[playerid][pTeam] == 1 && SpielerInfo[killerid][pTeam] != 1)
    {
    SpielerInfo[killerid][pWanteds] += 5;
    SetPlayerWantedLevel(killerid, (SpielerInfo[killerid][pWanteds]/5) + 1);
    SpielerInfo[killerid][pSterne] = SpielerInfo[killerid][pWanteds]/5 + 1;
    SpielerInfo[killerid][pVerbrechen] += 5;
    format(wtd,sizeof(wtd),"%s hat ein Verbrechen begangen: Polizeimord. Anzahl: 5 | Zeuge: %s.",SpielerName(killerid),SpielerName(playerid));
    SendFraktionMessage(1, cop, wtd);
    format(string,sizeof(string),"Du hast ein Verbrechen begangen: Polizeimord. Anzahl: 5 | Zeuge: %s.",SpielerName(playerid));
    SendClientMessage(killerid,info,string);
    format(string,sizeof(string), "Aktuelles Wanted: %i",SpielerInfo[killerid][pWanteds]);
    SendClientMessage(killerid,info,string);
    }
    else if(SpielerInfo[playerid][pTeam] != 1 && SpielerInfo[killerid][pTeam] != 1)
    {
    SpielerInfo[killerid][pWanteds] += 3;
    SetPlayerWantedLevel(killerid, (SpielerInfo[killerid][pWanteds]/5) + 1);
    SpielerInfo[killerid][pSterne] = SpielerInfo[killerid][pWanteds]/5 + 1;
    SpielerInfo[killerid][pVerbrechen] += 3;
    format(wtd,sizeof(wtd),"%s hat ein Verbrechen begangen: Zivimord. Anzahl: 3 | Zeuge: %s.",SpielerName(killerid),SpielerName(playerid));
    SendFraktionMessage(1, cop, wtd);
    format(string,sizeof(string),"Du hast ein Verbrechen begangen: Zivimord. Anzahl: 3 | Zeuge: %s.",SpielerName(playerid));
    SendClientMessage(killerid,info,string);
    format(string,sizeof(string), "Aktuelles Wanted: %i",SpielerInfo[killerid][pWanteds]);
    SendClientMessage(killerid,info,string);
    }
    //________________ Tot_System ______________________
    if(SpielerInfo[playerid][pWanteds] > 0 && teaminrangeofpoint(playerid, 1))
    {
    new wstring[128];
    format(wstring, sizeof(wstring), "%s wurde Verhaftet! Grund: Tot.",SpielerName(playerid));
    SendClientMessageToAll(info, wstring);
    print(wstring);
    new time = SpielerInfo[playerid][pWanteds] * 120;
    SpielerInfo[playerid][pKnastzeitBis] = gettime() + time;
    SpielerInfo[playerid][pKnastzeit] = time;
    SpielerInfo[playerid][pKnast] = 1;
    SpielerInfo[playerid][wTot] += 1;
    SpielerInfo[playerid][pInhaftiert] += 1;
    SpielerInfo[playerid][pWanteds] = 0;
    SpielerInfo[playerid][pSterne] = 0;
    SpielerInfo[playerid][kSkin] = 62;
    SetPlayerWantedLevel(playerid, 0);
    }
    else if(SpielerInfo[playerid][pTot] == 0) {
    SpielerInfo[playerid][pTot] = 1;
    tzeit[playerid] = 120;
    GetPlayerPos(playerid,tx[playerid],ty[playerid],tz[playerid]);
    toticon[playerid] = CreatePickup(1254,1,tx[playerid],ty[playerid],tz[playerid],-1);
    format(stringz, sizeof(stringz), "%s", SpielerName(playerid));
    totlabel = Create3DTextLabel(stringz,0xFF0000FF, tx[playerid], ty[playerid], tz[playerid], 32.0, 0);
    format(die,sizeof(die),"%s ist gestorben! Er braucht dringend einen Arzt.",SpielerName(playerid));
    SendFraktionMessage(2, medic, die);
    SpielerInfo[playerid][pTotskin] = 162;
    }
    //________________ Tot-Ende ______________________
    TextDrawHideForPlayer(playerid,txtTimeDisp);
    return 1;
    }


    OnPlayerSpawn


    Spoiler anzeigen
    public OnPlayerSpawn(playerid)
    {
    //________________ Knast-Tot-Spawn ______________________
    if(SpielerInfo[playerid][pKnast] == 1)
    {
    SpielerInfo[playerid][pKnastzeitBis] = gettime() + SpielerInfo[playerid][pKnastzeit]; //Damit die 500 Sekunden wieder drauf sind.
    SetPlayerSkin(playerid, SpielerInfo[playerid][kSkin]);
    SetPlayerWantedLevel(playerid, 0);
    SpielerInfo[playerid][pSterne] = 0;
    SetPlayerInterior(playerid, 3);
    SetPlayerPos(playerid,198.0428,161.8516,1003.0300);
    SendClientMessage(playerid, info, "Du musst zurück in den Knast!");
    }
    else if(SpielerInfo[playerid][pTot] == 1)
    {
    SetPlayerPos(playerid,-2719.6924,-318.3633,7.8438);
    SetPlayerVirtualWorld(playerid,playerid+1);
    SetPlayerHealth(playerid,10000000000);
    SetPlayerSkin(playerid, SpielerInfo[playerid][pTotskin]);
    SetPlayerWeather(playerid, 8);
    tzeit[playerid] = 180;
    SendClientMessage(playerid,info,"Du bist gestorben. Warte 2 Minuten oder warte, bis ein Arzt dich reanimiert.");
    timer[playerid] = SetTimerEx("tottimer",888,true,"i",playerid);
    SetPlayerWantedLevel(playerid, SpielerInfo[playerid][pSterne]);
    }
    else {
    SetPlayerSkin(playerid, SpielerInfo[playerid][pSkin]);
    SetPlayerPos(playerid,SpielerInfo[playerid][xKord],SpielerInfo[playerid][yKord],SpielerInfo[playerid][zKord]);
    SetPlayerInterior(playerid,SpielerInfo[playerid][pInterior]);
    SetPlayerWantedLevel(playerid, SpielerInfo[playerid][pSterne]); }


    Auf anweisung von Jeffry: ein eigenes Thread erstellt.


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Falls du das normale Wanted System benutzt, also mit den Sternen oben rechts, würde ich mal ausprobieren statt:
    SpielerInfo[playerid][pWanteds] > 0


    Das "normale" zu benutzen:
    GetPlayerWantedLevel(playerid) > 0


    Generell, um Fehler zu finden, habe ich persoönlich immer Nachrichten an den Spieler gesendet ( also nur wenn etwas nicht funktioniert hat ) bei dem dann verschiedene Werte beschrieben werden.
    Z.B.: könntest du mal das Wanted Level ausgeben.


    Könntest du mal TeamInRangeOfPoint(...) schicken ?


    Edit::
    Bei OnPlayerSpawn hast du nur das GetPlayerWantedLevel() resettet, aber nicht deine eigen konstruierte Variable.
    Falls du keine Abfrage hast bzw. einen Timer kann das Fatal sein, denn automatisch settet es nicht zu deiner Variable.
    Edit zu Edit: Mir ist aufgefallen, dass du doch etwas behandelt hast, undzwar pSterne. Ich verstehe nicht ganz, warum du pSterne pWanted und GetPlayerWantedLevel() benutzt.


    Folgendes ist auch kritisch:

    SetPlayerWantedLevel(killerid, (SpielerInfo[killerid][pWanteds]/5) + 1);
    SpielerInfo[killerid][pSterne] = SpielerInfo[killerid][pWanteds]/5 + 1;


    Der zweite Parameter der Funktion SetPlayerWantedLevel ist eigentlich ein Integer, aber bei dir gibst du eine Variable, die eigentlich vom Typ Float sein könnten, weil du durch 5 Teilst. Leider bin ich mir nicht ganz sicher, wie das bei Pawn mit Variablen Konvertern handgehabt wird.

    2 Mal editiert, zuletzt von Nixon ()

  • Danke das mit den wanteds resetten ist mir nicht mal aufgefallen, jedoch ändert es nichts.
    Und das mit den wanteds passt schon so, wie gesagt es ging alles bis ich die if abfragen ganz oben gemacht habe. Vielleicht blockieren die den Übergang zwischen Knast tot und normaler spawn?(bei opd nur Knast tot)



    Mfg



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Danke das mit den wanteds resetten ist mir nicht mal aufgefallen, jedoch ändert es nichts.
    Und das mit den wanteds passt schon so, wie gesagt es ging alles bis ich die if abfragen ganz oben gemacht habe. Vielleicht blockieren die den Übergang zwischen Knast tot und normaler spawn?(bei opd nur Knast tot)

    Damit man dir besser helfen kann, wäre es trotzdem besser, wenn du uns das Verhätnis ziwschen pSterne, pWanted und GetPlayerWantedLevel() sagen würdest.
    Ein Punkt von mir hast du noch nicht behandelt: ich schrieb:


    Generell, um Fehler zu finden, habe ich persönlich immer Nachrichten an
    den Spieler gesendet ( also nur wenn etwas nicht funktioniert hat ) bei
    dem dann verschiedene Werte beschrieben werden.


    Z.B.: könntest du mal das Wanted Level ausgeben.


    Könntest du das mal machen, und dann sagen was als Ausgabe da kommt =

  • Schreibe es auf jeden Fall mal so:

    Spoiler anzeigen
    public OnPlayerDeath(playerid, killerid, reason)
    {
    //________________ Definierungen ______________________
    new string[128];
    SpielerInfo[playerid][pTode] +=1;
    SpielerInfo[playerid][pDuty] = 0;
    //________________ Wanted-System ______________________
    if(killerid != INVALID_PLAYER_ID)
    {
    SpielerInfo[killerid][pKills] +=1;
    if(SpielerInfo[playerid][pTeam] == 1 && SpielerInfo[killerid][pTeam] != 1)
    {
    SpielerInfo[killerid][pWanteds] += 5;
    SetPlayerWantedLevel(killerid, (SpielerInfo[killerid][pWanteds]/5) + 1);
    SpielerInfo[killerid][pSterne] = SpielerInfo[killerid][pWanteds]/5 + 1;
    SpielerInfo[killerid][pVerbrechen] += 5;
    format(string,sizeof(string),"%s hat ein Verbrechen begangen: Polizeimord. Anzahl: 5 | Zeuge: %s.",SpielerName(killerid),SpielerName(playerid));
    SendFraktionMessage(1, cop, string);
    format(string,sizeof(string),"Du hast ein Verbrechen begangen: Polizeimord. Anzahl: 5 | Zeuge: %s.",SpielerName(playerid));
    SendClientMessage(killerid,info,string);
    format(string,sizeof(string), "Aktuelles Wanted: %i",SpielerInfo[killerid][pWanteds]);
    SendClientMessage(killerid,info,string);
    }
    else if(SpielerInfo[playerid][pTeam] != 1 && SpielerInfo[killerid][pTeam] != 1)
    {
    SpielerInfo[killerid][pWanteds] += 3;
    SetPlayerWantedLevel(killerid, (SpielerInfo[killerid][pWanteds]/5) + 1);
    SpielerInfo[killerid][pSterne] = SpielerInfo[killerid][pWanteds]/5 + 1;
    SpielerInfo[killerid][pVerbrechen] += 3;
    format(string,sizeof(string),"%s hat ein Verbrechen begangen: Zivimord. Anzahl: 3 | Zeuge: %s.",SpielerName(killerid),SpielerName(playerid));
    SendFraktionMessage(1, cop, string);
    format(string,sizeof(string),"Du hast ein Verbrechen begangen: Zivimord. Anzahl: 3 | Zeuge: %s.",SpielerName(playerid));
    SendClientMessage(killerid,info,string);
    format(string,sizeof(string), "Aktuelles Wanted: %i",SpielerInfo[killerid][pWanteds]);
    SendClientMessage(killerid,info,string);
    }
    }
    //________________ Tot_System ______________________
    if(SpielerInfo[playerid][pWanteds] > 0 && teaminrangeofpoint(playerid, 1))
    {
    new wstring[128];
    format(wstring, sizeof(wstring), "%s wurde Verhaftet! Grund: Tot.",SpielerName(playerid));
    SendClientMessageToAll(info, wstring);
    print(wstring);
    new time = SpielerInfo[playerid][pWanteds] * 120;
    SpielerInfo[playerid][pKnastzeitBis] = gettime() + time;
    SpielerInfo[playerid][pKnastzeit] = time;
    SpielerInfo[playerid][pKnast] = 1;
    SpielerInfo[playerid][wTot] += 1;
    SpielerInfo[playerid][pInhaftiert] += 1;
    SpielerInfo[playerid][pWanteds] = 0;
    SpielerInfo[playerid][pSterne] = 0;
    SpielerInfo[playerid][kSkin] = 62;
    SetPlayerWantedLevel(playerid, 0);
    }
    else if(SpielerInfo[playerid][pTot] == 0)
    {
    SpielerInfo[playerid][pTot] = 1;
    tzeit[playerid] = 120;
    GetPlayerPos(playerid,tx[playerid],ty[playerid],tz[playerid]);
    toticon[playerid] = CreatePickup(1254,1,tx[playerid],ty[playerid],tz[playerid],-1);
    format(string, sizeof(string), "%s", SpielerName(playerid));
    totlabel = Create3DTextLabel(string,0xFF0000FF, tx[playerid], ty[playerid], tz[playerid], 32.0, 0);
    format(string,sizeof(string),"%s ist gestorben! Er braucht dringend einen Arzt.",SpielerName(playerid));
    SendFraktionMessage(2, medic, string);
    SpielerInfo[playerid][pTotskin] = 162;
    }
    //________________ Tot-Ende ______________________
    TextDrawHideForPlayer(playerid,txtTimeDisp);
    return 1;
    }


    Dann: Bekommst du die Nachrichten (welche?) die kommen sollen?

  • Hallo,


    nun geht alles :)


    Bekomme wieder alle nachrichten und werde nun wieder normal in den Knast gesteckt :)



    Da ich kein neues Threath aufmachen möchte, und noch eine Frage habe schreib ich das jetzt hier rein.


    Hab ein Problem mit meinen Toren, habe es so geregelt, dass wenn man ein Tor mit H öffnet sich ein Timer startet, und in dem Timer wird eine Variable auf 1 gestellt.
    Das man nicht immer hintereinander das Tor öffnen kann sondern sogesehen nur jede 8 Sekunden.
    Jedoch wenn mehr als 1 Spieler(2) auf dem Server sind kann ich das Tor nur einmal öffnen, also wird die Variable nicht mehr zurück auf 0 gemacht.
    Das tor schließt sich jedoch trotzdem ganz normal.


    forward CloseTor(playerid);
    new Toroffen[MAX_PLAYERS];


    Spoiler anzeigen
    if(newkeys & KEY_CROUCH)
    {
    for(new Gateid = 0; Gateid < sizeof(Tore); Gateid++)
    {
    if(IsPlayerInRangeOfPoint(playerid,20.0, Tore[Gateid][CloseX],Tore[Gateid][CloseY],Tore[Gateid][CloseZ]))
    {
    if(SpielerInfo[playerid][pTeam] == Tore[Gateid][Gateteam])
    {
    if(Toroffen[playerid] == 0)
    {
    MoveObject(Tore[Gateid][TorID], Tore[Gateid][OpenX], Tore[Gateid][OpenY], Tore[Gateid][OpenZ], 5);
    SendClientMessage(playerid,tortext, Tore[Gateid][Text]);
    Toroffen[playerid] = 1;
    }
    SetTimer("CloseTor", 8000, 0);
    }
    }
    }
    }


    //_______Tore________//
    public CloseTor(playerid) {
    for(new Gateid = 0; Gateid < sizeof(Tore); Gateid++) {
    MoveObject(Tore[Gateid][TorID], Tore[Gateid][CloseX],Tore[Gateid][CloseY],Tore[Gateid][CloseZ],5.0); }
    Toroffen[playerid] = 0;
    return 1; }


    Jeffry:


    Wo ist jetzt der Fehler?


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Ich kenne dein ganzes System davon zwar nicht, aber ich könnte mir das so vorstellen.
    Wie hast du denn die maximale Anzahl von den Toren definiert? (MAX_TORE?)
    Ändere ggf. MAX_TORE in die Anzahl der maximalen Tore, die zugelassen werden.


    Wenn du nicht weißt was ich meine, dann schicke mir mal das Array Tore bitte.
    new TorOffen[MAX_TORE];


    if(newkeys & KEY_CROUCH)
    {
    for(new gateid;gateid < sizeof Tore;gateid++)
    {
    if(IsPlayerInRangeOfPoint(playerid,20.0,Tore[gateid][CloseX],Tore[gateid][CloseY],Tore[gateid][CloseZ]))
    {
    if(SpielerInfo[playerid][pTeam] == Tore[gateid][Gateteam])
    {
    if(TorOffen[gateid] == 0)
    {
    MoveObject(Tore[gateid][TorID],Tore[gateid][OpenX],Tore[gateid][OpenY],Tore[gateid][OpenZ],5);
    SendClientMessage(playerid,tortext,Tore[gateid][Text]);
    TorOffen[gateid] = 1;
    SetTimerEx("CloseTor",8000,0,"i",gateid);
    break;
    }
    }
    }
    }
    return 1;
    }


    forward CloseTor(gateid);
    public CloseTor(gateid)
    {
    MoveObject(Tore[gateid][TorID],Tore[gateid][CloseX],Tore[gateid][CloseY],Tore[gateid][CloseZ],5);
    TorOffen[gateid] = 0;
    return 1;
    }

  • new Float:Tore[][Gates] = {
    {987, -1522.80005, 482.5, -0.4,0.0, 0.0, 0.0,"Das Tor schließt sich automatisch nach 8 Sekunden", -1522.80005, 482.5, 6.2, 0.0, 0.0, 180.0, 1, 1},//zeile 123
    {980, -1631.6, 688.29999, 3.4, 0.0, 0.0, 0.0,"Das Tor schließt sich automatisch nach 8 Sekunden", -1631.6, 688.29999, 9.0, 0.0, 0.0, 0.0, 1, 2},//zeile 124
    {980, -1817.3, 2.3, 11.3, 0.0, 0.0, 90.0,"Das Tor schließt sich automatisch nach 8 Sekunden", -1817.3, 2.3, 16.9, 0.0, 0.0, 90.0, 5, 3}//zeile 124

    };


    Meins du das?


    Soll ich das dann mit "MAX_TORE 3" machen?



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Ja genau, mache das so:
    #define MAX_TORE 3 //Oben ins Script (Nun kannst du 3 Tore erstellen, wenn du mehrere haben möchtes => Zahl erhöhen!)


    new Float:Tore[MAX_TORE][Gates] = {
    {987, -1522.80005, 482.5, -0.4,0.0, 0.0, 0.0,"Das Tor schließt sich automatisch nach 8 Sekunden", -1522.80005, 482.5, 6.2, 0.0, 0.0, 180.0, 1, 1},//zeile 123
    {980, -1631.6, 688.29999, 3.4, 0.0, 0.0, 0.0,"Das Tor schließt sich automatisch nach 8 Sekunden", -1631.6, 688.29999, 9.0, 0.0, 0.0, 0.0, 1, 2},//zeile 124
    {980, -1817.3, 2.3, 11.3, 0.0, 0.0, 90.0,"Das Tor schließt sich automatisch nach 8 Sekunden", -1817.3, 2.3, 16.9, 0.0, 0.0, 90.0, 5, 3}//zeile 124
    };


    new TorOffen[MAX_TORE];