mirror of
https://github.com/Melledy/Nebula.git
synced 2025-12-13 21:04:36 +01:00
Add monolith shop npc
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
package emu.nebula.game.tower;
|
package emu.nebula.game.tower;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import emu.nebula.proto.PublicStarTower.HawkerGoods;
|
||||||
import emu.nebula.proto.PublicStarTower.StarTowerRoomCase;
|
import emu.nebula.proto.PublicStarTower.StarTowerRoomCase;
|
||||||
import it.unimi.dsi.fastutil.ints.IntArrayList;
|
import it.unimi.dsi.fastutil.ints.IntArrayList;
|
||||||
import it.unimi.dsi.fastutil.ints.IntList;
|
import it.unimi.dsi.fastutil.ints.IntList;
|
||||||
@@ -22,9 +26,15 @@ public class StarTowerCase {
|
|||||||
private int floorId;
|
private int floorId;
|
||||||
private int roomType;
|
private int roomType;
|
||||||
|
|
||||||
|
private int eventId;
|
||||||
|
private int npcId;
|
||||||
|
|
||||||
// Selector
|
// Selector
|
||||||
private IntList ids;
|
private IntList ids;
|
||||||
|
|
||||||
|
// Hawker
|
||||||
|
private Map<Integer, StarTowerShopGoods> goodsList;
|
||||||
|
|
||||||
public StarTowerCase(CaseType type) {
|
public StarTowerCase(CaseType type) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
@@ -49,6 +59,16 @@ public class StarTowerCase {
|
|||||||
return this.getIds().getInt(index);
|
return this.getIds().getInt(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addGoods(StarTowerShopGoods goods) {
|
||||||
|
if (this.goodsList == null) {
|
||||||
|
this.goodsList = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.getGoodsList().put(getGoodsList().size() + 1, goods);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Proto
|
||||||
|
|
||||||
public StarTowerRoomCase toProto() {
|
public StarTowerRoomCase toProto() {
|
||||||
var proto = StarTowerRoomCase.newInstance()
|
var proto = StarTowerRoomCase.newInstance()
|
||||||
.setId(this.getId());
|
.setId(this.getId());
|
||||||
@@ -74,6 +94,30 @@ public class StarTowerCase {
|
|||||||
case PotentialSelect -> {
|
case PotentialSelect -> {
|
||||||
proto.getMutableSelectPotentialCase();
|
proto.getMutableSelectPotentialCase();
|
||||||
}
|
}
|
||||||
|
case NpcEvent -> {
|
||||||
|
proto.getMutableSelectOptionsEventCase()
|
||||||
|
.setEvtId(this.getEventId())
|
||||||
|
.setNPCId(this.getNpcId())
|
||||||
|
.addAllOptions(this.getIds().toIntArray());
|
||||||
|
}
|
||||||
|
case Hawker -> {
|
||||||
|
var hawker = proto.getMutableHawkerCase();
|
||||||
|
|
||||||
|
for (var entry : getGoodsList().entrySet()) {
|
||||||
|
var id = entry.getKey();
|
||||||
|
var goods = entry.getValue();
|
||||||
|
|
||||||
|
var info = HawkerGoods.newInstance()
|
||||||
|
.setIdx(goods.getGoodsId())
|
||||||
|
.setSid(id)
|
||||||
|
.setType(goods.getType())
|
||||||
|
.setGoodsId(102) // ?
|
||||||
|
.setPrice(goods.getPrice())
|
||||||
|
.setTag(1);
|
||||||
|
|
||||||
|
hawker.addList(info);
|
||||||
|
}
|
||||||
|
}
|
||||||
default -> {
|
default -> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import it.unimi.dsi.fastutil.ints.IntSet;
|
|||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
|
import us.hebi.quickbuf.RepeatedMessage;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Entity(useDiscriminator = false)
|
@Entity(useDiscriminator = false)
|
||||||
@@ -58,8 +59,9 @@ public class StarTowerGame {
|
|||||||
|
|
||||||
// Case
|
// Case
|
||||||
private int lastCaseId = 0;
|
private int lastCaseId = 0;
|
||||||
private int selectorCaseIndex = -1;
|
|
||||||
private int battleCaseIndex = -1;
|
private int battleCaseIndex = -1;
|
||||||
|
private int selectorCaseIndex = -1;
|
||||||
|
private int hawkerCaseIndex = -1;
|
||||||
private List<StarTowerCase> cases;
|
private List<StarTowerCase> cases;
|
||||||
|
|
||||||
// Bag
|
// Bag
|
||||||
@@ -202,11 +204,19 @@ public class StarTowerGame {
|
|||||||
return this.getCases().get(this.getSelectorCaseIndex());
|
return this.getCases().get(this.getSelectorCaseIndex());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public StarTowerCase getHawkerCase() {
|
||||||
|
if (this.getHawkerCaseIndex() < 0 || this.getHawkerCaseIndex() >= this.getCases().size()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.getCases().get(this.getHawkerCaseIndex());
|
||||||
|
}
|
||||||
|
|
||||||
public StarTowerCase addCase(StarTowerCase towerCase) {
|
public StarTowerCase addCase(StarTowerCase towerCase) {
|
||||||
return this.addCase(null, towerCase);
|
return this.addCase(null, towerCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
public StarTowerCase addCase(StarTowerInteractResp rsp, StarTowerCase towerCase) {
|
public StarTowerCase addCase(RepeatedMessage<StarTowerRoomCase> cases, StarTowerCase towerCase) {
|
||||||
// Add to cases list
|
// Add to cases list
|
||||||
this.getCases().add(towerCase);
|
this.getCases().add(towerCase);
|
||||||
|
|
||||||
@@ -214,8 +224,8 @@ public class StarTowerGame {
|
|||||||
towerCase.setId(++this.lastCaseId);
|
towerCase.setId(++this.lastCaseId);
|
||||||
|
|
||||||
// Set proto
|
// Set proto
|
||||||
if (rsp != null) {
|
if (cases != null) {
|
||||||
rsp.getMutableCases().add(towerCase.toProto());
|
cases.add(towerCase.toProto());
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -223,6 +233,8 @@ public class StarTowerGame {
|
|||||||
this.selectorCaseIndex = this.getCases().size() - 1;
|
this.selectorCaseIndex = this.getCases().size() - 1;
|
||||||
} else if (towerCase.getType() == CaseType.Battle) {
|
} else if (towerCase.getType() == CaseType.Battle) {
|
||||||
this.battleCaseIndex = this.getCases().size() - 1;
|
this.battleCaseIndex = this.getCases().size() - 1;
|
||||||
|
} else if (towerCase.getType() == CaseType.Hawker) {
|
||||||
|
this.hawkerCaseIndex = this.getCases().size() - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return towerCase;
|
return towerCase;
|
||||||
@@ -351,6 +363,8 @@ public class StarTowerGame {
|
|||||||
rsp = this.onSelect(req, rsp);
|
rsp = this.onSelect(req, rsp);
|
||||||
} else if (req.hasEnterReq()) {
|
} else if (req.hasEnterReq()) {
|
||||||
rsp = this.onEnterReq(req, rsp);
|
rsp = this.onEnterReq(req, rsp);
|
||||||
|
} else if (req.hasHawkerReq()) {
|
||||||
|
rsp = this.onHawkerReq(req, rsp);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add any items
|
// Add any items
|
||||||
@@ -400,7 +414,7 @@ public class StarTowerGame {
|
|||||||
var potentialCase = this.createPotentialSelector(charId);
|
var potentialCase = this.createPotentialSelector(charId);
|
||||||
|
|
||||||
// Add case
|
// Add case
|
||||||
this.addCase(rsp, potentialCase);
|
this.addCase(rsp.getMutableCases(), potentialCase);
|
||||||
|
|
||||||
// Add sub note skills
|
// Add sub note skills
|
||||||
var battleCase = this.getBattleCase();
|
var battleCase = this.getBattleCase();
|
||||||
@@ -481,8 +495,9 @@ public class StarTowerGame {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Clear cases
|
// Clear cases
|
||||||
this.selectorCaseIndex = -1;
|
|
||||||
this.battleCaseIndex = -1;
|
this.battleCaseIndex = -1;
|
||||||
|
this.selectorCaseIndex = -1;
|
||||||
|
this.hawkerCaseIndex = -1;
|
||||||
this.lastCaseId = 0;
|
this.lastCaseId = 0;
|
||||||
this.cases.clear();
|
this.cases.clear();
|
||||||
|
|
||||||
@@ -506,28 +521,38 @@ public class StarTowerGame {
|
|||||||
var battleCase = new StarTowerCase(CaseType.Battle);
|
var battleCase = new StarTowerCase(CaseType.Battle);
|
||||||
battleCase.setSubNoteSkillNum(Utils.randomRange(1, 3));
|
battleCase.setSubNoteSkillNum(Utils.randomRange(1, 3));
|
||||||
|
|
||||||
this.addCase(battleCase);
|
this.addCase(room.getMutableCases(), battleCase);
|
||||||
room.addCases(battleCase.toProto());
|
} else if (this.roomType == StarTowerRoomType.EventRoom.getValue()) {
|
||||||
|
|
||||||
|
} else if (this.roomType == StarTowerRoomType.ShopRoom.getValue()) {
|
||||||
|
var hawkerCase = new StarTowerCase(CaseType.Hawker);
|
||||||
|
|
||||||
|
hawkerCase.addGoods(new StarTowerShopGoods(1, 1, 200));
|
||||||
|
hawkerCase.addGoods(new StarTowerShopGoods(1, 1, 200));
|
||||||
|
hawkerCase.addGoods(new StarTowerShopGoods(1, 1, 200));
|
||||||
|
|
||||||
|
this.addCase(room.getMutableCases(), hawkerCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add cases
|
// Add cases
|
||||||
this.addCase(syncHpCase);
|
this.addCase(room.getMutableCases(), syncHpCase);
|
||||||
this.addCase(doorCase);
|
this.addCase(room.getMutableCases(), doorCase);
|
||||||
|
|
||||||
// Add cases to room
|
|
||||||
room.addCases(syncHpCase.toProto());
|
|
||||||
room.addCases(doorCase.toProto());
|
|
||||||
|
|
||||||
|
// Done
|
||||||
return rsp;
|
return rsp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public StarTowerInteractResp onRecoveryHP(StarTowerInteractReq req, StarTowerInteractResp rsp) {
|
public StarTowerInteractResp onRecoveryHP(StarTowerInteractReq req, StarTowerInteractResp rsp) {
|
||||||
// Add case
|
// Add case
|
||||||
this.addCase(rsp, new StarTowerCase(CaseType.RecoveryHP));
|
this.addCase(rsp.getMutableCases(), new StarTowerCase(CaseType.RecoveryHP));
|
||||||
|
|
||||||
return rsp;
|
return rsp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private StarTowerInteractResp onHawkerReq(StarTowerInteractReq req, StarTowerInteractResp rsp) {
|
||||||
|
return rsp;
|
||||||
|
}
|
||||||
|
|
||||||
public StarTowerInteractResp settle(StarTowerInteractResp rsp) {
|
public StarTowerInteractResp settle(StarTowerInteractResp rsp) {
|
||||||
// End game
|
// End game
|
||||||
this.getManager().endGame();
|
this.getManager().endGame();
|
||||||
|
|||||||
20
src/main/java/emu/nebula/game/tower/StarTowerShopGoods.java
Normal file
20
src/main/java/emu/nebula/game/tower/StarTowerShopGoods.java
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
package emu.nebula.game.tower;
|
||||||
|
|
||||||
|
import dev.morphia.annotations.Entity;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Entity(useDiscriminator = false)
|
||||||
|
public class StarTowerShopGoods {
|
||||||
|
private int type;
|
||||||
|
private int goodsId;
|
||||||
|
private int price;
|
||||||
|
private boolean sold;
|
||||||
|
|
||||||
|
public StarTowerShopGoods(int type, int goodsId, int price) {
|
||||||
|
this.type = type;
|
||||||
|
this.goodsId = goodsId;
|
||||||
|
this.price = price;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user