Bessere Lösung?

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
  • Also icharbeite zurzeit an einem Script mit Zombies, Menschen etc.


    Wobei die Zombies (pInfected == 1) wenn sie die rechte Maus gedrückt halten alle Menschen in ihrer Umgebung ebenfalls infizieren sollen.


    1) Gibt es dafür vielleicht eine sauberere Lösung um das hinzubekommen?


    2) Klappt das so überhaupt oder werden so alle Spieler auf dem Server infiziert, hatte leider bisher noch keine Zeit es zu testen.


    Nun aber mal der Script:

    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if (newkeys & KEY_SECONDARY_ATTACK)
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    new infizierwaffe = 4;
    if(GetPlayerWeapon(playerid) == infizierwaffe && SpielerInfo[playerid][pInfected] == 1)
    {
    new Float:PosX ,Float:PosY, Float:PosZ;
    GetPlayerPos(playerid, PosX, PosY, PosZ);
    if(IsPlayerInRangeOfPoint(i, 3, PosX, PosY, PosZ))
    {
    SpielerInfiziert[i] = 1;
    SpielerInfo[playerid][pTeam] = 1;
    GameTextForPlayer(playerid,"~w~Du hast dein Opfer~n~~r~Infiziert",5000,1);
    }
    }
    }
    }
    }


    Achja für die dies nicht wissen: IsPlayerInRangeOfPoint ist die "offizielle" Variante von PlayerToPoint, also nicht deswegen schon rummeckern!

  • 1) Deine Variante ist gut, aber meinst du nicht auch, dass Zombies etwas zu ... doof sind, um Waffen zu tragen ?
    2) Es würde wahrscheinlich nichts passieren, da der Zombie sich maximal selber infizieren würde, würde die Bedingung ihn nicht abhalten

  • Die Messer sollen mit viel Fantasie deren Klauen/Krallen/ etc... sein und eben nur damit infizieren.
    Außerdem wären sie nur mit Boxen den menschen mit Ihren Waffen wohl unterlegen.


    Hast du eine Idee wie ich es hinbekomme, dass dann einfach alle anderen die noch nicht (SpielerInfiziert[...] == 1) sind dann infiziert werden.

  • Das ist ein Scherz, oder?
    Du willst sie echt nur mit dem Messer gegen Menschen antreten lassen ?
    Entweder du skriptest ihnen einen Vorteil, oder du gibst ihnen eine Motorsäge.
    Ich bevorzuge ersteres.
    Und die Fantasie kann man sich bei SAMP Spieler sonstwohin kleben ;)


    Also: Skripte einen Effekt und pack das Messer weg !


    @2. Frage:
    Wieso zum Geier machst du eigentlich bei OnPlayerKeyState eine for-schleife ??????


    1. Code optimierung
    -Prüfe vor der Schleife erstmal, ob playerid (das ist die person, die du suchst :pinch: ) ein Zombie ist
    -Wie ich glaube, crasht der Server, wenn 2 Personen gleichzeitig schlagen. Mach also den Wert global mit einem playerid-array !
    2. Deine Frage
    Mach die for-schleife nach dem Text, und wenn diese InRangeOfPoint sind, Effekt

  • Zombies haben mehr Leben, wie viel ich denen gebe werden die ersten Wochen zeigen, nach diversen Tests und sie sind die einzigsten die Rüstung haben.
    Außerdem sind Zombies in fast allen Filem/Spielen nur Kanonenfutter und alleine halt schwach, in Massen aber gefährlich, die Zombies müssen sich zusammenrotten und gemeinsam auf die Menschen draufgehen.


    for Schleife war dazu da um zu überprüfen ob Spieler in der Nähe sind und wenn ja = Infizieren, weil ich mir anders nicht zu behelfen wusste.


    Außerdem wird doch geprüft, ob playerid ein Zombie ist: "if(GetPlayerWeapon(playerid) == infizierwaffe && SpielerInfo[playerid][pInfected] == 1)


    Und der text soll ja nur kommen wenn auch jemand infiziert wurde, oder verstehe ich dich grade falsch?