setDamage()

şifrenisöyle

Kızıltaş Madencisi
En iyi cevaplar
0
öncelikle etiket atalım @Krumb069 @Leqo @Schaffer79 @Centeglassered @Dantero @Erenbulbul

şimdi şöyle ki ben;

public void playerAttack(EntityDamageByEntityEvent event){

bu eventte olan getDamage ve setDamage i kullanarak oyuncu birine vurunca vuran kişinin ne kadar vurduğunu get ile alıp set ile değiştirmek istedim ve bişiler yaptım şöyle değişik bişi oldu:

totaldamage = damage + (damage * (2.5 * HashMaps.damagescore.get(damager) / 100));

totaldamage aslında oyuncunun her bir damage attributes için %2.5 gücünü çoğaltıyor "(2.5 * HashMaps.damagescore.get(damager) / 100));" bu kısım %2.5 i ayarlıyor her verilen puan için ve damage ile çarpıyor ki hangi sayının 2.5 olduğunu bulmak için ve en son damage ile topluyor ki üstüne gcü eklesin diye ve ardından

event.setDamage(totaldamage);

şimdi şuana kadar soru mu sordum anlamadım ama şimdi öncelikle şunu sorıyım setdamage ile gelen hasarı düzenliyoruz dimi? ve;
totaldamage i ben adamda olan yani target vurulan kişinin bide zırhını delmek için gereken bi attr olucak bunu nasıl yapabilirim aynen lol deki armor pentation gibi yani benim hem damage attr puanım kadar %2.5 vs. artıcak hemde karşı vurulan kişinin zırhının %? bilmem kaçını yok sayması için bi işlem yapmalıyım kısaca zırh delme ile total damage'i birleştirmem gerekiyor bi yardım ederseniz iyi olur sadece mantığını kavramam açısından, biraz düşününce kafam başka yerlere gidiyor tam odaklanamıyorum biraz anlatırsanız makbulegeçer :)
 

Dantero

Elmas Madencisi
En iyi cevaplar
0
setDamage() ile gelen hasarı düzenliyorsun evet ama bu kodu kullanmadan önce eventi iptal edip yapman gerek yoksa üst üste damage verir.
Vurulan kişinin zırhına zarar vermek için şöyle bir kod olabilir;
Kod:
        Player vurulan = (Player) event.getEntity();
        short eksilt = (short) (vurulan.getInventory().getHelmet().getDurability() - 10);
        vurulan.getInventory().getHelmet().setDurability(eksilt);
Yardımcı olabildiysem ne mutlu bana :).
 

şifrenisöyle

Kızıltaş Madencisi
En iyi cevaplar
0
setDamage() ile gelen hasarı düzenliyorsun evet ama bu kodu kullanmadan önce eventi iptal edip yapman gerek yoksa üst üste damage verir.
Vurulan kişinin zırhına zarar vermek için şöyle bir kod olabilir;
Kod:
        Player vurulan = (Player) event.getEntity();
        short eksilt = (short) (vurulan.getInventory().getHelmet().getDurability() - 10);
        vurulan.getInventory().getHelmet().setDurability(eksilt);
Yardımcı olabildiysem ne mutlu bana :).
anladım teşkr. teknik bilgi için, ancak ben zırhına zarar gelmesini istemiyorum zırhının dayanıklık değerei aynı kalıcak ki zaten eventi cancel yaptığımızda zırha herhangi bir kırılma olmuyor dimi? direk eksiltme yapmazsam setcacel yapsam olur?

şöyle bişi hazırladım sizce nasıl?

Kod:
@EventHandler
    public void playerAttack(EntityDamageByEntityEvent event){
        if(event.getDamager() instanceof Player){
            Player saldıran = (Player) event.getDamager();
            double hasar = event.getDamage();
            double gelenhasar;
            double hasarpuanı;
            double toplamhasar;
            double toplamzırh;
            double zırhdelmepuanı;
            double zırhpuanı;
            if(event.getEntity() instanceof Player){
                Player vurulan = (Player) event.getEntity();
                hasarpuanı = HashMaps.damagescore.get(saldıran.getName());
                zırhpuanı = HashMaps.armorscore.get(vurulan.getName());
                zırhdelmepuanı = HashMaps.armorpentationscore.get(saldıran.getName());
                if(HashMaps.damagescore.get(saldıran.getName()) != null){
                    event.setCancelled(true);
                    gelenhasar = hasar + hasarpuanı;
                    if(zırhdelmepuanı >= zırhpuanı){
                        event.setDamage(gelenhasar);
                        return;
                    }
                    toplamzırh = zırhpuanı - zırhdelmepuanı;
                    if(toplamzırh >= gelenhasar){
                        event.setDamage(1);
                        return;
                    }
                    toplamhasar = gelenhasar - zırhpuanı;
                    event.setDamage(toplamhasar);
                }
            }
        }
    }
 

şifrenisöyle

Kızıltaş Madencisi
En iyi cevaplar
0
Amacın sadece zırha "kırılmazlık" eklemek ise unbreakable ekleyerek yapabilirsin:
ItemStack unbreakable = new ItemStack(s.getItemInHand());
unbreakable.setUnbreakable(true);
hayır öyle değil, ben bi oyuncuya vurunca sadece canı gidick yani her hangi mc olayı olmıycak sadece canında bi azalma olucak ve o azalmayı ben belirlemek istiyorum, zırhının dayanıklılık değeri azalsın istemiyorum
 

Dantero

Elmas Madencisi
En iyi cevaplar
0
Kod:
event.setCancelled(true);
event.setDamage(((short) totaldamage));
 

Nobody01

YASAKLANDI
En iyi cevaplar
0
Event'i iptal edip sonra damage ayarlayınca bir şey değişmez. Event'i iptal et, sonra oyuncuya hasar ver.
 
Üst