Skocz do zawartości
  • 0

HP Z LUKU


seimandero

Pytanie

Cześć, jest ktos w stanie mi pomoc? Chodzi mi o kod, ze jak strzelam w gracza z luku wyswietla mi ile ma hp w send

private static final HandlerList handlers = new HandlerList(); private final ItemStack bow; private Entity projectile; private final float force; private boolean cancelled;
Nie ma gracza, jest tylko Jako Entity strzał, przez co nie dziala
Odnośnik do komentarza
https://skript.pl/temat/26233-hp-z-luku/
Udostępnij na innych stronach

12 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

- Nasłuchujecie EntityDamageByEntityEvent

- Sprawdzacie czy getEntity() jest Playerem

- Sprawdzacie czy getDamager() to Projectile

- Castujecie getDamager() do Projectile

- Sprawdzacie czy getShooter() to CommandSender

- Castujecie getShooter() do CommandSender i wysyłacie wiadomość :)

Pozdrawiam Czerwono :)

Odnośnik do komentarza
https://skript.pl/temat/26233-hp-z-luku/#findComment-172895
Udostępnij na innych stronach

  • 0

w evencie projectile hit czy coś takiego jest funkcja getShooter() bodajże i do niego możesz sendować hp celu

edit

a jednak musisz zrobić event.getEntity().getShooter() i to ci zwróci tego co strzelał

https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/entity/ProjectileHitEvent.html

Edytowane przez LloydPL
Odnośnik do komentarza
https://skript.pl/temat/26233-hp-z-luku/#findComment-172896
Udostępnij na innych stronach

  • 0

Hmmm, ale co jeżeli taki gracz ma goda, friendlyfire, albo gamemode? Nie wiem czy ProjectileHitEvent byłby lepszy od EntityDamageByEntityEvent - w tym drugim wiadomo, że normalnie powinien otrzymać damage (jeżeli event nie został anulowany). Dodatkowo można także obliczyć ile damage graczowi zadano, czy gracz umrze po tym uderzeniu, itd.

Odnośnik do komentarza
https://skript.pl/temat/26233-hp-z-luku/#findComment-172903
Udostępnij na innych stronach

  • 0
    @EventHandler(ignoreCancelled = true)
    public void onDamage(EntityDamageByEntityEvent e) {
        final Entity entity = e.getEntity();
        final Entity damager = e.getDamager();

        if (!(entity instanceof Player))return;

        if (damager instanceof Projectile) {
            final ProjectileSource shooter = ((Projectile) damager).getShooter();
            if (shooter instanceof Player) {
                final Player attacker = (Player) shooter;
                final Player victim = (Player) entity;
                attacker.sendMessage("zabrano damage! "+e.getDamage()+" teraz hp tego gracza wynosi: " 
                        + (victim.getHealth()/2));
                return;
            }
        }
    }

sprobuj. (victim.getHealth() mozesz dac w decimalformat)

i nie wiem czy victim.getHealth() to bedzie od razu z 'zadanym damage', jezeli nie to zrob sobie cos typu

private double getHealth(Player target, double givenDamage) {
	final double health = ((target.getHealth()/2)-givenDamage);
	return health;
}

no i mozesz tez sprawdzac czy nie jest na minusie itd

Edytowane przez yooniks
nawias
Odnośnik do komentarza
https://skript.pl/temat/26233-hp-z-luku/#findComment-172944
Udostępnij na innych stronach

  • 0
1 minutę temu, GotoFinal napisał:

@yooniks co ty tu odwalasz? czemu dzielisz health przez dwa? to nie ma żadnego sensu 

serduszek jest 10, wiec zamiast zwracac 20hp moim zdaniem jest lepiej zwracac 10 (m.in. tak mi kazano pod ostatnie zlecenie)

Odnośnik do komentarza
https://skript.pl/temat/26233-hp-z-luku/#findComment-172962
Udostępnij na innych stronach

  • 0
1 minutę temu, yooniks napisał:

serduszek jest 10, wiec zamiast zwracac 20hp moim zdaniem jest lepiej zwracac 10 (m.in. tak mi kazano pod ostatnie zlecenie)

no ale to wtedy nie ma nic do ilości HP, 1 serduszko nie musi nawet reprezentować 2 pkt HP, może reprezentować 1 lub 1000 - minecraft wspiera takie skalowanie. Więc takie dzielenie jest kompletnie niepoprawne i psuje kompatybilność z innymi pluginami które mogą modyfikować HP. Jak już dzielić to trzeba by obliczyć ilość HP przysługującą na jedno serce i wtedy wyświetlać uwzględniając ten fakt - np wyświetlać ilość HP jako emotki serc czy też dopisać że chodzi o serca a nie HP.

Do tego zwyczajnie źle wtedy obliczasz tutaj: 

private double getHealth(Player target, double givenDamage) {
	final double health = ((target.getHealth()/2)-givenDamage);
	return health;
}

Bo od połowy hp gracza odejmujesz całość zadanego dmagae, co ma jeszcze mniej sensu.

 

Więc nie dawaj takich kodów publicznie bo ci jakiś client kazał... a z klientem to warto pogadać czy na pewno rozumie to chce chce.

Odnośnik do komentarza
https://skript.pl/temat/26233-hp-z-luku/#findComment-172963
Udostępnij na innych stronach

  • 0
1 minutę temu, GotoFinal napisał:

no ale to wtedy nie ma nic do ilości HP, 1 serduszko nie musi nawet reprezentować 2 pkt HP, może reprezentować 1 lub 1000 - minecraft wspiera takie skalowanie. Więc takie dzielenie jest kompletnie niepoprawne i psuje kompatybilność z innymi pluginami które mogą modyfikować HP. Jak już dzielić to trzeba by obliczyć ilość HP przysługującą na jedno serce i wtedy wyświetlać uwzględniając ten fakt - np wyświetlać ilość HP jako emotki serc czy też dopisać że chodzi o serca a nie HP.

Do tego zwyczajnie źle wtedy obliczasz tutaj: 


private double getHealth(Player target, double givenDamage) {
	final double health = ((target.getHealth()/2)-givenDamage);
	return health;
}

Bo od połowy hp gracza odejmujesz całość zadanego dmagae, co ma jeszcze mniej sensu.

 

Więc nie dawaj takich kodów publicznie bo ci jakiś client kazał... a z klientem to warto pogadać czy na pewno rozumie to chce chce.

Ale autor ma po prostu zwykly serwer, bez zadnym modow czy innych dodatków, dałem mu prosty kod, co z tym zrobi to jego sprawa, jeśli bym robił taki plugin 'publiczny' to oczywiście ,że zrobiłbym to inaczej, szukasz nieistotnych szczegółów..

Cytat

Do tego zwyczajnie źle wtedy obliczasz tutaj: 


private double getHealth(Player target, double givenDamage) {
	final double health = ((target.getHealth()/2)-givenDamage);
	return health;
}

Bo od połowy hp gracza odejmujesz całość zadanego dmagae, co ma jeszcze mniej sensu.

Pisane na szybko, nieprzemyślane :P

Odnośnik do komentarza
https://skript.pl/temat/26233-hp-z-luku/#findComment-172968
Udostępnij na innych stronach

  • 0
Teraz, GotoFinal napisał:

@yooniks Przecież nie znasz wszystkich pluginów na jego serwerze i tego jakie może wrzucić w przyszłości... więc nie dawaj mu kodu który psuje kompatybilność...

DOBRZE

    @EventHandler(ignoreCancelled = true)
    public void onDamage(EntityDamageByEntityEvent e) {
        final Entity entity = e.getEntity();
        final Entity damager = e.getDamager();

        if (!(entity instanceof Player))return;

        if (damager instanceof Projectile) {
            final ProjectileSource shooter = ((Projectile) damager).getShooter();
            if (shooter instanceof Player) {
                final Player attacker = (Player) shooter;
                final Player victim = (Player) entity;
                attacker.sendMessage("hp gracza: "+victim.getHealth()+" maxymalne hp: "+victim.getHealthScale());
                return;
            }
        }
    }

 

Odnośnik do komentarza
https://skript.pl/temat/26233-hp-z-luku/#findComment-172972
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...