feat: unlock homeworld bgm and set homeworld bgm. (#1844)

* will be able to change home bgm.

* feat: unlock homeworld bgm and set homeworld bgm.

* Update src/main/java/emu/grasscutter/game/home/GameHome.java

* Update GameHome.java

* Get default unlocked home bgms from HomeWorldBgmData

* fix: duplicate home items by sending packet
This commit is contained in:
hamusuke
2022-10-11 20:59:43 +09:00
committed by GitHub
parent 98ac42a6c6
commit 4da4c03ecc
15 changed files with 3178 additions and 0 deletions

View File

@@ -15,7 +15,9 @@ import lombok.Builder;
import lombok.Data;
import lombok.experimental.FieldDefaults;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
@Entity(value = "homes", useDiscriminator = false)
@@ -34,6 +36,7 @@ public class GameHome {
int exp;
List<FurnitureMakeSlotItem> furnitureMakeSlotItemList;
ConcurrentHashMap<Integer, HomeSceneItem> sceneMap;
Set<Integer> unlockedHomeBgmList;
public void save(){
DatabaseHelper.saveHome(this);
@@ -72,9 +75,33 @@ public class GameHome {
player.getSession().send(new PacketHomeComfortInfoNotify(player));
player.getSession().send(new PacketFurnitureCurModuleArrangeCountNotify());
player.getSession().send(new PacketHomeMarkPointNotify(player));
player.getSession().send(new PacketUnlockedHomeBgmNotify(player));
}
public HomeWorldLevelData getLevelData(){
return GameData.getHomeWorldLevelDataMap().get(level);
}
public void addUnlockedHomeBgm(int homeBgmId) {
getUnlockedHomeBgmList().add(homeBgmId);
save();
}
public Set<Integer> getUnlockedHomeBgmListInfo() {
var list = getUnlockedHomeBgmList();
if (list == null) {
list = new HashSet<>();
addAllDefaultUnlockedBgmIds(list);
setUnlockedHomeBgmList(list);
save();
}
return list;
}
private void addAllDefaultUnlockedBgmIds(Set<Integer> list) {
GameData.getHomeWorldBgmDataMap().int2ObjectEntrySet().stream()
.filter(entry -> entry.getValue().isDefaultUnlock())
.forEach(entry -> list.add(entry.getIntKey()));
}
}

View File

@@ -25,6 +25,7 @@ public class HomeSceneItem {
Position bornPos;
Position bornRot;
Position djinnPos;
int homeBgmId;
HomeFurnitureItem mainHouse;
int tmpVersion;
public static HomeSceneItem parseFrom(HomeworldDefaultSaveData defaultItem, int sceneId) {
@@ -55,6 +56,7 @@ public class HomeSceneItem {
this.bornPos = new Position(arrangementInfo.getBornPos());
this.bornRot = new Position(arrangementInfo.getBornRot());
this.djinnPos = new Position(arrangementInfo.getDjinnPos());
this.homeBgmId = arrangementInfo.getUnk2700BJHAMKKECEI();
this.mainHouse = HomeFurnitureItem.parseFrom(arrangementInfo.getMainHouse());
this.tmpVersion = arrangementInfo.getTmpVersion();
}
@@ -82,6 +84,7 @@ public class HomeSceneItem {
.setDjinnPos(djinnPos.toProto())
.setIsSetBornPos(true)
.setSceneId(sceneId)
.setUnk2700BJHAMKKECEI(homeBgmId)
.setTmpVersion(tmpVersion);
if(mainHouse != null){

View File

@@ -833,6 +833,17 @@ public class InventorySystem extends BaseGameSystem {
break;
}
break;
case MATERIAL_BGM:
ItemUseData use = itemData.getItemUse().get(0);
if (use.getUseOp() == ItemUseOp.ITEM_USE_UNLOCK_HOME_BGM) {
int bgmId = Integer.parseInt(use.getUseParam()[0]);
player.getInventory().removeItem(useItem, 1);
player.sendPacket(new PacketUnlockHomeBgmNotify(bgmId));
player.getHome().addUnlockedHomeBgm(bgmId);
player.sendPacket(new PacketUnlockedHomeBgmNotify(player));
return useItem;
}
break;
default:
break;
}