use of com.watabou.pixeldungeon.items.Item in project pixel-dungeon-remix by NYRDS.
the class Mob method dropLoot.
@SuppressWarnings("unchecked")
protected void dropLoot() {
if (loot != null && Random.Float() <= lootChance) {
Item item;
if (loot instanceof Generator.Category) {
item = Generator.random((Generator.Category) loot);
} else if (loot instanceof Class<?>) {
item = Generator.random((Class<? extends Item>) loot);
} else {
item = (Item) loot;
}
Dungeon.level.drop(item, getPos()).sprite.drop();
}
}
use of com.watabou.pixeldungeon.items.Item in project pixel-dungeon-remix by NYRDS.
the class Mob method die.
@Override
public void die(Object cause) {
runMobScript("onDie", cause);
Hero hero = Dungeon.hero;
{
// TODO we should move this block out of Mob class
if (hero.heroClass == HeroClass.NECROMANCER) {
if (hero.isAlive()) {
if (hero.belongings.armor instanceof NecromancerRobe) {
hero.accumulateSoulPoints();
}
}
}
for (Item item : hero.belongings) {
if (item instanceof BlackSkull && item.isEquipped(hero)) {
((BlackSkull) item).mobDied(this, hero);
}
}
}
{
if (hero.isAlive()) {
if (!friendly(hero)) {
Statistics.enemiesSlain++;
Badges.validateMonstersSlain();
Statistics.qualifiedForNoKilling = false;
if (Dungeon.nightMode) {
Statistics.nightHunt++;
} else {
Statistics.nightHunt = 0;
}
Badges.validateNightHunter();
}
if (!(cause instanceof Mob) || hero.heroClass == HeroClass.NECROMANCER) {
if (hero.lvl() <= maxLvl && exp > 0) {
hero.earnExp(exp);
}
}
}
}
super.die(cause);
Library.identify(Library.MOB, getMobClassName());
if (hero.lvl() <= maxLvl + 2) {
dropLoot();
}
if (hero.isAlive() && !Dungeon.visible[getPos()]) {
GLog.i(TXT_DIED);
}
}
use of com.watabou.pixeldungeon.items.Item in project pixel-dungeon-remix by NYRDS.
the class WellWater method affect.
protected boolean affect() {
Heap heap;
if (pos == Dungeon.hero.getPos() && affectHero(Dungeon.hero)) {
volume = off[pos] = cur[pos] = 0;
return true;
} else if ((heap = Dungeon.level.getHeap(pos)) != null) {
Item oldItem = heap.peek();
Item newItem = affectItem(oldItem);
if (newItem != null) {
if (newItem == oldItem) {
} else if (oldItem.quantity() > 1) {
oldItem.quantity(oldItem.quantity() - 1);
heap.drop(newItem);
} else {
heap.replace(oldItem, newItem);
}
heap.sprite.link();
volume = off[pos] = cur[pos] = 0;
return true;
} else {
int newPlace;
do {
newPlace = pos + Level.NEIGHBOURS8[Random.Int(8)];
} while (!Dungeon.level.passable[newPlace] && !Dungeon.level.avoid[newPlace]);
Dungeon.level.drop(heap.pickUp(), newPlace).sprite.drop(pos);
return false;
}
} else {
return false;
}
}
Aggregations