Schaden wird nicht abblockiert

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
  • Hey,


    folgendes Problem:
    Ich möchte gerne, dass zum Beispiel eine Fraktion sich nicht gegenseitig anschiessen kann, sodass es vom Script aus blockiert wird.


    habe es aktuell so:




    public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid, bodypart)
    {

    if(Spieler[damagedid][Eingeloggt] == true)
    {
    if(Spieler[playerid][Fraktion] == 1 && Spieler[damagedid][Fraktion] == 1)//Abfrage ob Spieler Cop ist und ob der geschossene bzw. der angegriffene cop ist
    {
    GameTextForPlayer(playerid, "~r~Greife deine Kollegen nicht an", 3000, 3);
    return 0;
    }
    }
    return 1;
    }

    Das witzigste an der Sache ist, dass der GameText ausgegeben wird.
    Ebenfalls habe ich es mit "SetPlayerTeam, GetPlayerTeam und EnableVehicleFriendlyFire();" versucht, leider erfolgslos

    Mit freundlichen Grüßen,


    Keslo

  • Also irgendwie kann das gar nicht klappen, weil return nur ausgibt ob es im FS verfügbar sein soll oder nicht. Das heisst es passiert eigentlich nur der Text. Theoretisch müsstest du ihnen das Leben setzten, wenn ich mich nicht irre und zu den anderen. Bitte lasst doch diese unsinnige Beiträge :/

  • Also irgendwie kann das gar nicht klappen, weil return nur ausgibt ob es im FS verfügbar sein soll oder nicht. Das heisst es passiert eigentlich nur der Text. Theoretisch müsstest du ihnen das Leben setzten, wenn ich mich nicht irre und zu den anderen. Bitte lasst doch diese unsinnige Beiträge

    Hmm.. ja damit wird es zu 100% gehen.


    Aber wenn ich mal auf das hier verweisen darf, da hat es ja auch geklappt, und versucht habe ich es ebenfalls -> ohne erfolg


    Wie wärs wenn du das ganze einfach mal bei OnPlayerTakeDamage Versuchs?

    ja hab ich schon probiert^^

    Mit freundlichen Grüßen,


    Keslo

  • Am einfachsten wäre es, wenn du alle Leute in der Fraktion in das selbe Team setzt :)


    http://wiki.sa-mp.com/wiki/SetPlayerTeam





    Players can not damage/kill players on the same team unless they use a knife to slit their throat. As of SA-MP 0.3x, players are also unable to damage vehicles driven by a player from the same team. This can be enabled with EnableVehicleFriendlyFire.

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Also ich habe es nun soweit hinbekommen, dass Cops sich gegenseitig nicht anschiessen können.
    Zivillisten hingegen sollen sich aber anschiessen dürfen.
    Problem: keiner kann sich nun anschiessen, egal, ob ich die 2. if-Abfrage habe oder nicht.




    if(Spieler[damagedid][Eingeloggt] == true)
    {
    if(GetPlayerTeam(playerid) == 1 && GetPlayerTeam(damagedid) == 1)//cops
    {
    print("cop");
    GameTextForPlayer(playerid, "~r~Greife deine Kollegen nicht an", 3000, 3);
    return 0;
    }
    if(GetPlayerTeam(playerid) == 2 && GetPlayerTeam(damagedid) == 2)//zivis
    {
    print("zivi");
    GameTextForPlayer(playerid, "~r~Greife deine Kollegen nicht an", 3000, 3);
    return 1;
    }
    }

    Mit freundlichen Grüßen,


    Keslo

    Einmal editiert, zuletzt von Keslo ()

  • Problem: keiner kann sich nun anschiessen, egal, ob ich die 2. if-Abfrage habe oder nicht.

    Prinzipiell reicht es, wenn du es so machst (OnPlayerGiveDamage):
    if(Spieler[damagedid][Eingeloggt] == true)
    {
    if(GetPlayerTeam(playerid) == GetPlayerTeam(damagedid))
    {
    GameTextForPlayer(playerid, "~r~Greife deine Kollegen nicht an", 3000, 3);
    }
    }


    Jetzt musst du nur allen Cops das Team 1 zuweisen (beim Login, wenn Team 1 ist, SetPlayerTeam zu 1 machen).
    Für Zivis muss im Login SetPlayerTeam zu NO_TEAM gesetzt werden, damit sind diese in keinem Team mehr und können alle anderen Spieler verletzen.