v2.0.0: fixed rare cases of darts being lost when merging tipped darts
This commit is contained in:
+8
@@ -24,6 +24,8 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.Dart;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.TippedDart;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
||||
import com.watabou.utils.Bundle;
|
||||
@@ -39,6 +41,12 @@ public class PinCushion extends Buff {
|
||||
for (Item item : items){
|
||||
if (item.isSimilar(projectile)){
|
||||
item.merge(projectile);
|
||||
if (TippedDart.lostDarts > 0){
|
||||
Dart d = new Dart();
|
||||
d.quantity(TippedDart.lostDarts);
|
||||
TippedDart.lostDarts = 0;
|
||||
stick(d);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,8 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfWealth;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.Dart;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.TippedDart;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.journal.Document;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
||||
@@ -167,6 +169,13 @@ public class Heap implements Bundlable {
|
||||
if (sprite != null) {
|
||||
sprite.view(this).place( pos );
|
||||
}
|
||||
|
||||
if (TippedDart.lostDarts > 0){
|
||||
Dart d = new Dart();
|
||||
d.quantity(TippedDart.lostDarts);
|
||||
TippedDart.lostDarts = 0;
|
||||
drop(d);
|
||||
}
|
||||
}
|
||||
|
||||
public void replace( Item a, Item b ) {
|
||||
|
||||
@@ -34,6 +34,8 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.bags.Bag;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.Dart;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.TippedDart;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
@@ -223,6 +225,23 @@ public class Item implements Bundlable {
|
||||
Talent.onItemCollected(Dungeon.hero, item);
|
||||
if (isIdentified()) Catalog.setSeen(getClass());
|
||||
}
|
||||
if (TippedDart.lostDarts > 0){
|
||||
Dart d = new Dart();
|
||||
d.quantity(TippedDart.lostDarts);
|
||||
TippedDart.lostDarts = 0;
|
||||
if (!d.collect()){
|
||||
//have to handle this in an actor as we can't manipulate the heap during pickup
|
||||
Actor.add(new Actor() {
|
||||
{ actPriority = VFX_PRIO; }
|
||||
@Override
|
||||
protected boolean act() {
|
||||
Dungeon.level.drop(d, Dungeon.hero.pos).sprite.drop();
|
||||
Actor.remove(this);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
+18
@@ -29,7 +29,9 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.PinCushion;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.plants.Blindweed;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.plants.Mageroyal;
|
||||
@@ -129,6 +131,22 @@ public abstract class TippedDart extends Dart {
|
||||
}
|
||||
}
|
||||
|
||||
//the number of regular darts lost due to merge being called
|
||||
public static int lostDarts = 0;
|
||||
|
||||
@Override
|
||||
public Item merge(Item other) {
|
||||
int total = quantity() + other.quantity();
|
||||
super.merge(other);
|
||||
int extra = total - quantity();
|
||||
|
||||
//need to spawn waste tipped darts as regular darts
|
||||
if (extra > 0){
|
||||
lostDarts += extra;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
private static int targetPos = -1;
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user