mirror of
https://github.com/Melledy/Nebula.git
synced 2025-12-12 12:24:35 +01:00
Spawn the shop npc at the end of a monolith run
This commit is contained in:
@@ -16,6 +16,8 @@ import emu.nebula.game.player.Player;
|
||||
import emu.nebula.game.player.PlayerChangeInfo;
|
||||
import emu.nebula.game.tower.cases.StarTowerBaseCase;
|
||||
import emu.nebula.game.tower.cases.StarTowerDoorCase;
|
||||
import emu.nebula.game.tower.cases.StarTowerHawkerCase;
|
||||
import emu.nebula.game.tower.cases.StarTowerNpcRecoveryHPCase;
|
||||
import emu.nebula.game.tower.cases.StarTowerPotentialCase;
|
||||
import emu.nebula.game.tower.room.RoomType;
|
||||
import emu.nebula.game.tower.room.StarTowerBaseRoom;
|
||||
@@ -403,16 +405,39 @@ public class StarTowerGame {
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a potential selector for the client if there are any potential selectors avaliable.
|
||||
* If there are none, then return null.
|
||||
* Creates a potential selectors for the client if there are any potential selectors avaliable.
|
||||
* If there are none, then create the door case so the player can exit
|
||||
*/
|
||||
public StarTowerBaseCase handlePendingPotentialSelectors() {
|
||||
public List<StarTowerBaseCase> handlePendingPotentialSelectors() {
|
||||
// Create potential selectors if any are avaliable
|
||||
if (this.pendingPotentialCases > 0) {
|
||||
this.pendingPotentialCases--;
|
||||
return this.createPotentialSelector();
|
||||
} else {
|
||||
return null;
|
||||
|
||||
return List.of(this.createPotentialSelector());
|
||||
}
|
||||
|
||||
// Return empty list if room already has an exit
|
||||
if (this.getRoom().hasDoor()) {
|
||||
return List.of();
|
||||
}
|
||||
|
||||
// Init List of next cases
|
||||
List<StarTowerBaseCase> cases = new ArrayList<>();
|
||||
|
||||
// Add door case here
|
||||
cases.add(this.createExit());
|
||||
|
||||
// Create shop npc if this is the last room
|
||||
if (this.isOnFinalFloor()) {
|
||||
// Create hawker case (shop)
|
||||
cases.add(new StarTowerHawkerCase(this));
|
||||
} else if (this.getRoom() instanceof StarTowerBattleRoom) {
|
||||
// Create recovery npc
|
||||
cases.add(new StarTowerNpcRecoveryHPCase());
|
||||
}
|
||||
|
||||
// Complete
|
||||
return cases;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,7 +3,6 @@ package emu.nebula.game.tower.cases;
|
||||
import emu.nebula.GameConstants;
|
||||
import emu.nebula.data.GameData;
|
||||
import emu.nebula.game.player.PlayerChangeInfo;
|
||||
import emu.nebula.game.tower.room.StarTowerBattleRoom;
|
||||
import emu.nebula.proto.PublicStarTower.StarTowerRoomCase;
|
||||
import emu.nebula.proto.StarTowerInteract.StarTowerInteractReq;
|
||||
import emu.nebula.proto.StarTowerInteract.StarTowerInteractResp;
|
||||
@@ -85,17 +84,10 @@ public class StarTowerBattleCase extends StarTowerBaseCase {
|
||||
this.getGame().addItem(GameConstants.STAR_TOWER_GOLD_ITEM_ID, money, change);
|
||||
|
||||
// Handle pending potential selectors
|
||||
var potentialCase = this.getGame().handlePendingPotentialSelectors();
|
||||
if (potentialCase != null) {
|
||||
// Create potential selector
|
||||
this.getGame().addCase(rsp.getMutableCases(), potentialCase);
|
||||
} else if (!this.getRoom().hasDoor()) {
|
||||
// Add door case here if door hasn't opened yet
|
||||
this.getGame().createExit(rsp.getMutableCases());
|
||||
// Create recovery npc
|
||||
if (this.getRoom() instanceof StarTowerBattleRoom) {
|
||||
this.getRoom().addCase(rsp.getMutableCases(), new StarTowerNpcRecoveryHPCase());
|
||||
}
|
||||
var nextCases = this.getGame().handlePendingPotentialSelectors();
|
||||
|
||||
for (var towerCase : nextCases) {
|
||||
this.getGame().addCase(rsp.getMutableCases(), towerCase);
|
||||
}
|
||||
|
||||
// Add sub note skills
|
||||
|
||||
@@ -4,6 +4,7 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import emu.nebula.GameConstants;
|
||||
import emu.nebula.game.tower.StarTowerGame;
|
||||
import emu.nebula.game.tower.StarTowerShopGoods;
|
||||
import emu.nebula.proto.PublicStarTower.HawkerGoods;
|
||||
import emu.nebula.proto.PublicStarTower.StarTowerRoomCase;
|
||||
@@ -18,6 +19,17 @@ public class StarTowerHawkerCase extends StarTowerBaseCase {
|
||||
public StarTowerHawkerCase() {
|
||||
this.goods = new HashMap<>();
|
||||
}
|
||||
|
||||
public StarTowerHawkerCase(StarTowerGame game) {
|
||||
this();
|
||||
|
||||
// Create shop goods
|
||||
for (int i = 0; i < 6; i++) {
|
||||
this.addGoods(new StarTowerShopGoods(1, 1, 200));
|
||||
}
|
||||
|
||||
// TODO apply discounts based on star tower talents
|
||||
}
|
||||
|
||||
@Override
|
||||
public CaseType getType() {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package emu.nebula.game.tower.cases;
|
||||
|
||||
import emu.nebula.game.tower.room.StarTowerBattleRoom;
|
||||
import emu.nebula.proto.PublicStarTower.PotentialInfo;
|
||||
import emu.nebula.proto.PublicStarTower.StarTowerRoomCase;
|
||||
import emu.nebula.proto.StarTowerInteract.StarTowerInteractReq;
|
||||
@@ -51,17 +50,10 @@ public class StarTowerPotentialCase extends StarTowerBaseCase {
|
||||
rsp.setChange(change.toProto());
|
||||
|
||||
// Handle pending potential selectors
|
||||
var potentialCase = this.getGame().handlePendingPotentialSelectors();
|
||||
if (potentialCase != null) {
|
||||
// Create potential selector
|
||||
this.getGame().addCase(rsp.getMutableCases(), potentialCase);
|
||||
} else if (!this.getRoom().hasDoor()) {
|
||||
// Add door case here if door hasn't opened yet
|
||||
this.getGame().createExit(rsp.getMutableCases());
|
||||
// Create recovery npc
|
||||
if (this.getRoom() instanceof StarTowerBattleRoom) {
|
||||
this.getRoom().addCase(rsp.getMutableCases(), new StarTowerNpcRecoveryHPCase());
|
||||
}
|
||||
var nextCases = this.getGame().handlePendingPotentialSelectors();
|
||||
|
||||
for (var towerCase : nextCases) {
|
||||
this.getGame().addCase(rsp.getMutableCases(), towerCase);
|
||||
}
|
||||
|
||||
return rsp;
|
||||
|
||||
@@ -2,7 +2,6 @@ package emu.nebula.game.tower.room;
|
||||
|
||||
import emu.nebula.data.resources.StarTowerStageDef;
|
||||
import emu.nebula.game.tower.StarTowerGame;
|
||||
import emu.nebula.game.tower.StarTowerShopGoods;
|
||||
import emu.nebula.game.tower.cases.StarTowerHawkerCase;
|
||||
import emu.nebula.game.tower.cases.StarTowerSyncHPCase;
|
||||
import lombok.Getter;
|
||||
@@ -16,15 +15,8 @@ public class StarTowerHawkerRoom extends StarTowerBaseRoom {
|
||||
|
||||
@Override
|
||||
public void onEnter() {
|
||||
// Create hawker case
|
||||
var hawker = new StarTowerHawkerCase();
|
||||
|
||||
// TODO
|
||||
for (int i = 0; i < 8; i++) {
|
||||
hawker.addGoods(new StarTowerShopGoods(1, 1, 200));
|
||||
}
|
||||
|
||||
this.getGame().addCase(hawker);
|
||||
// Create hawker case (shop)
|
||||
this.getGame().addCase(new StarTowerHawkerCase(this.getGame()));
|
||||
|
||||
// Create door case
|
||||
this.getGame().createExit();
|
||||
|
||||
Reference in New Issue
Block a user