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.Dungeon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
|
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.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
||||||
import com.watabou.utils.Bundle;
|
import com.watabou.utils.Bundle;
|
||||||
@@ -39,6 +41,12 @@ public class PinCushion extends Buff {
|
|||||||
for (Item item : items){
|
for (Item item : items){
|
||||||
if (item.isSimilar(projectile)){
|
if (item.isSimilar(projectile)){
|
||||||
item.merge(projectile);
|
item.merge(projectile);
|
||||||
|
if (TippedDart.lostDarts > 0){
|
||||||
|
Dart d = new Dart();
|
||||||
|
d.quantity(TippedDart.lostDarts);
|
||||||
|
TippedDart.lostDarts = 0;
|
||||||
|
stick(d);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfWealth;
|
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfWealth;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
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.journal.Document;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
||||||
@@ -167,6 +169,13 @@ public class Heap implements Bundlable {
|
|||||||
if (sprite != null) {
|
if (sprite != null) {
|
||||||
sprite.view(this).place( pos );
|
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 ) {
|
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.effects.Speck;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.bags.Bag;
|
import com.shatteredpixel.shatteredpixeldungeon.items.bags.Bag;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
|
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.journal.Catalog;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
@@ -223,6 +225,23 @@ public class Item implements Bundlable {
|
|||||||
Talent.onItemCollected(Dungeon.hero, item);
|
Talent.onItemCollected(Dungeon.hero, item);
|
||||||
if (isIdentified()) Catalog.setSeen(getClass());
|
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;
|
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.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth;
|
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.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.plants.Blindweed;
|
import com.shatteredpixel.shatteredpixeldungeon.plants.Blindweed;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.plants.Mageroyal;
|
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;
|
private static int targetPos = -1;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user