v3.2.0: fixed exploits with thrown weapon upgrading and shops
This commit is contained in:
@@ -36,6 +36,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.journal.Notes;
|
import com.shatteredpixel.shatteredpixeldungeon.journal.Notes;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||||
@@ -265,6 +266,9 @@ public class Shopkeeper extends NPC {
|
|||||||
Item returned = buybackItems.remove(index-2);
|
Item returned = buybackItems.remove(index-2);
|
||||||
Dungeon.gold -= returned.value();
|
Dungeon.gold -= returned.value();
|
||||||
Statistics.goldCollected -= returned.value();
|
Statistics.goldCollected -= returned.value();
|
||||||
|
if (returned instanceof MissileWeapon && returned.isUpgradable()){
|
||||||
|
Dungeon.hero.buff(MissileWeapon.UpgradedSetTracker.class).levelThresholds.put(((MissileWeapon) returned).setID, returned.level());
|
||||||
|
}
|
||||||
if (!returned.doPickUp(Dungeon.hero)){
|
if (!returned.doPickUp(Dungeon.hero)){
|
||||||
Dungeon.level.drop(returned, Dungeon.hero.pos);
|
Dungeon.level.drop(returned, Dungeon.hero.pos);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -769,7 +769,7 @@ abstract public class MissileWeapon extends Weapon {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final String SET_IDD = "set_ids";
|
public static final String SET_IDS = "set_ids";
|
||||||
public static final String SET_LEVELS = "set_levels";
|
public static final String SET_LEVELS = "set_levels";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -783,14 +783,14 @@ abstract public class MissileWeapon extends Weapon {
|
|||||||
levels[i] = levelThresholds.get(ID);
|
levels[i] = levelThresholds.get(ID);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
bundle.put(SET_IDD, IDs);
|
bundle.put(SET_IDS, IDs);
|
||||||
bundle.put(SET_LEVELS, levels);
|
bundle.put(SET_LEVELS, levels);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void restoreFromBundle(Bundle bundle) {
|
public void restoreFromBundle(Bundle bundle) {
|
||||||
super.restoreFromBundle(bundle);
|
super.restoreFromBundle(bundle);
|
||||||
long[] IDs = bundle.getLongArray(SET_IDD);
|
long[] IDs = bundle.getLongArray(SET_IDS);
|
||||||
int[] levels = bundle.getIntArray(SET_LEVELS);
|
int[] levels = bundle.getIntArray(SET_LEVELS);
|
||||||
levelThresholds.clear();
|
levelThresholds.clear();
|
||||||
for (int i = 0; i <IDs.length; i++){
|
for (int i = 0; i <IDs.length; i++){
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.windows;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Shopkeeper;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Shopkeeper;
|
||||||
@@ -32,13 +33,17 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Gold;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.MasterThievesArmband;
|
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.MasterThievesArmband;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
|
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.ui.CurrencyIndicator;
|
import com.shatteredpixel.shatteredpixeldungeon.ui.CurrencyIndicator;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton;
|
import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock;
|
||||||
|
|
||||||
public class WndTradeItem extends WndInfoItem {
|
public class WndTradeItem extends WndInfoItem {
|
||||||
|
|
||||||
@@ -70,7 +75,16 @@ public class WndTradeItem extends WndInfoItem {
|
|||||||
}
|
}
|
||||||
final Shopkeeper finalShop = shop;
|
final Shopkeeper finalShop = shop;
|
||||||
|
|
||||||
if (item.quantity() == 1) {
|
if (item.quantity() == 1 || (item instanceof MissileWeapon && item.isUpgradable())) {
|
||||||
|
|
||||||
|
if (item instanceof MissileWeapon && ((MissileWeapon) item).extraThrownLeft){
|
||||||
|
RenderedTextBlock warn = PixelScene.renderTextBlock(Messages.get(WndUpgrade.class, "thrown_dust"), 6);
|
||||||
|
warn.hardlight(CharSprite.WARNING);
|
||||||
|
warn.maxWidth(this.width);
|
||||||
|
warn.setPos(0, pos + GAP);
|
||||||
|
add(warn);
|
||||||
|
pos = warn.bottom();
|
||||||
|
}
|
||||||
|
|
||||||
RedButton btnSell = new RedButton( Messages.get(this, "sell", item.value()) ) {
|
RedButton btnSell = new RedButton( Messages.get(this, "sell", item.value()) ) {
|
||||||
@Override
|
@Override
|
||||||
@@ -230,6 +244,10 @@ public class WndTradeItem extends WndInfoItem {
|
|||||||
}
|
}
|
||||||
item.detachAll( hero.belongings.backpack );
|
item.detachAll( hero.belongings.backpack );
|
||||||
|
|
||||||
|
if (item instanceof MissileWeapon && item.isUpgradable()){
|
||||||
|
Buff.affect(hero, MissileWeapon.UpgradedSetTracker.class).levelThresholds.put(((MissileWeapon) item).setID, Integer.MAX_VALUE);
|
||||||
|
}
|
||||||
|
|
||||||
//selling items in the sell interface doesn't spend time
|
//selling items in the sell interface doesn't spend time
|
||||||
hero.spend(-hero.cooldown());
|
hero.spend(-hero.cooldown());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user