Stránka 1 z 1

KeepInventory PvP

Napsal: 19 led 2016, 23:31
od MinfasCZE
Server: 93.91.250.125:27731

Ahoj, potřeboval bych vědět jestli je nějaká metoda že když hráč zemře nepřijde o věci, ale pouze když hráč zemře zabitím jiného hráče. Chtěl bych aby se to dalo vypnout v určitém regionu (aspoň světě). Díky.

Re: KeepInventory PvP

Napsal: 19 led 2016, 23:42
od MarekBurget
Ten plugin rezidencia to má, platená verzia, že v danej rezidencií je keep inventory ,tzn drop inventory : false / true. alebo keep inventory.

Re: KeepInventory PvP

Napsal: 20 led 2016, 07:31
od MinfasCZE
Ale pouze pokud je hráč zabit jiným hráčem

Re: KeepInventory PvP

Napsal: 20 led 2016, 15:33
od Hanakocz
net.minecraft.entity.player.EntityPlayer:

Kód: Vybrat vše

 public void onDeath(DamageSource p_70645_1_)
    {
        if (ForgeHooks.onLivingDeath(this, p_70645_1_)) return;
        super.onDeath(p_70645_1_);
        this.setSize(0.2F, 0.2F);
        this.setPosition(this.posX, this.posY, this.posZ);
        this.motionY = 0.10000000149011612D;

        captureDrops = true;
        capturedDrops.clear();

        if (this.getCommandSenderName().equals("Notch"))
        {
            this.func_146097_a(new ItemStack(Items.apple, 1), true, false);
        }

        if (!this.worldObj.getGameRules().getGameRuleBooleanValue("keepInventory"))
        {
            this.inventory.dropAllItems();
        }

        captureDrops = false;

        if (!worldObj.isRemote)
        {
            PlayerDropsEvent event = new PlayerDropsEvent(this, p_70645_1_, capturedDrops, recentlyHit > 0);
            if (!MinecraftForge.EVENT_BUS.post(event))
            {
                for (EntityItem item : capturedDrops)
                {
                    joinEntityItemWithWorld(item);
                }
            }
        }

        if (p_70645_1_ != null)
        {
            this.motionX = (double)(-MathHelper.cos((this.attackedAtYaw + this.rotationYaw) * (float)Math.PI / 180.0F) * 0.1F);
            this.motionZ = (double)(-MathHelper.sin((this.attackedAtYaw + this.rotationYaw) * (float)Math.PI / 180.0F) * 0.1F);
        }
        else
        {
            this.motionX = this.motionZ = 0.0D;
        }

        this.yOffset = 0.1F;
        this.addStat(StatList.deathsStat, 1);
    }
   
   


Z toho důležitá je tadle část:

Kód: Vybrat vše

 if (!this.worldObj.getGameRules().getGameRuleBooleanValue("keepInventory"))
        {
            this.inventory.dropAllItems();
        }

Říká, že pokud je gamerule "keepInventory" false, tak dropne všechny itemy.
Pokud chceš rozlišovat, jaká smrt nastala, musíš tu funkci upravit..
Důležité je, že ta funkce celá má vstupní parametr : DamageSource p_70645_1_ - tedy, kdo dává damage.
Takže se stačí podívat, zda ten damage source je hráč, nebo ne.

Kód: Vybrat vše

 if (!this.worldObj.getGameRules().getGameRuleBooleanValue("keepInventory") && (p_70645_1_.getEntity() instanceof EntityPlayer) )
        {
            this.inventory.dropAllItems();
        }

V tomto případě potřebuješ mít zapnuté keepInventory, ale pak ve chvíli, kdy hráče zabije hráč, tak věci padnou.

A teď ti už stačí programátor, co ti to napíše v bukkitu, todle bych ti zvládl udělat jako mod (a zdroják je sice z vanilly, ale Forgí dekompilován, takže upraven), plugin se může nějak trochu lišit, ale princip bude stejný. Lidí zabývajících se tu Bukkitem je dost ;-)

Re: KeepInventory PvP

Napsal: 20 led 2016, 16:24
od variodriver
Taky by šlo, že ta arena bude v jiném světě, a že tam dáš příkaz /gamerule keepInventory true
Mělo by to fungovat na ten svět, ve kterém to dáš a žádný plugin přidávat nemusíš, je to i ve vannile

Re: KeepInventory PvP

Napsal: 20 led 2016, 19:04
od pitilon@seznam.cz
Ale on chce aby to rozlišovalo smrt, a ne že vůbec nepříde

Re: KeepInventory PvP

Napsal: 20 led 2016, 22:45
od MinfasCZE
Žádný arény... OK díky zatím.