mirror of
https://github.com/MikuLeaks/MikuSB.git
synced 2026-06-04 16:23:58 +00:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5aa5ef92d0 | ||
|
|
c34ad5eb1e | ||
|
|
8a597e24b6 | ||
|
|
9763f1f8d9 | ||
|
|
933ba097f9 | ||
|
|
c10d380e11 |
18
Common/Data/Excel/HouseFurniturePosData.cs
Normal file
18
Common/Data/Excel/HouseFurniturePosData.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
namespace MikuSB.Data.Excel;
|
||||||
|
|
||||||
|
[ResourceEntity("house/FurniturePos.json")]
|
||||||
|
public class HouseFurniturePosExcel : ExcelResource
|
||||||
|
{
|
||||||
|
public uint AreaId { get; set; }
|
||||||
|
public uint GroupId { get; set; }
|
||||||
|
|
||||||
|
public override uint GetId()
|
||||||
|
{
|
||||||
|
return (AreaId << 48) | (GroupId << 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Loaded()
|
||||||
|
{
|
||||||
|
GameData.HouseFurniturePosData.TryAdd(GetId(), this);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -31,6 +31,7 @@ public static class GameData
|
|||||||
public static Dictionary<uint, WeaponPartsExcel> WeaponPartsData { get; private set; } = [];
|
public static Dictionary<uint, WeaponPartsExcel> WeaponPartsData { get; private set; } = [];
|
||||||
public static Dictionary<uint, GuideExcel> GuideData { get; private set; } = [];
|
public static Dictionary<uint, GuideExcel> GuideData { get; private set; } = [];
|
||||||
public static Dictionary<uint, DormGiftExcel> DormGiftData { get; private set; } = [];
|
public static Dictionary<uint, DormGiftExcel> DormGiftData { get; private set; } = [];
|
||||||
|
public static Dictionary<uint, HouseFurniturePosExcel> HouseFurniturePosData { get; private set; } = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class GameResourceTemplateId
|
public static class GameResourceTemplateId
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using MikuSB.Data;
|
using MikuSB.Data;
|
||||||
|
using MikuSB.Database;
|
||||||
using MikuSB.Database.Inventory;
|
using MikuSB.Database.Inventory;
|
||||||
using MikuSB.Enums.Item;
|
using MikuSB.Enums.Item;
|
||||||
using MikuSB.Enums.Player;
|
using MikuSB.Enums.Player;
|
||||||
@@ -42,6 +43,7 @@ public class CommandGiveAll : ICommands
|
|||||||
weapons.Add(weapon);
|
weapons.Add(weapon);
|
||||||
}
|
}
|
||||||
if (weapons.Count > 0) await player.SendPacket(new PacketNtfCallScript(weapons));
|
if (weapons.Count > 0) await player.SendPacket(new PacketNtfCallScript(weapons));
|
||||||
|
DatabaseHelper.SaveDatabaseType(player.InventoryManager.InventoryData);
|
||||||
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
||||||
I18NManager.Translate("Word.Weapon"), weapons.Count.ToString()));
|
I18NManager.Translate("Word.Weapon"), weapons.Count.ToString()));
|
||||||
}
|
}
|
||||||
@@ -77,6 +79,7 @@ public class CommandGiveAll : ICommands
|
|||||||
supportCards.Add(supportCard);
|
supportCards.Add(supportCard);
|
||||||
}
|
}
|
||||||
if (supportCards.Count > 0) await player.SendPacket(new PacketNtfCallScript(supportCards));
|
if (supportCards.Count > 0) await player.SendPacket(new PacketNtfCallScript(supportCards));
|
||||||
|
DatabaseHelper.SaveDatabaseType(player.InventoryManager.InventoryData);
|
||||||
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
||||||
I18NManager.Translate("Word.SupportCard"), supportCards.Count.ToString()));
|
I18NManager.Translate("Word.SupportCard"), supportCards.Count.ToString()));
|
||||||
}
|
}
|
||||||
@@ -111,6 +114,7 @@ public class CommandGiveAll : ICommands
|
|||||||
weaponSkins.Add(weaponSkin);
|
weaponSkins.Add(weaponSkin);
|
||||||
}
|
}
|
||||||
if (weaponSkins.Count > 0) await player.SendPacket(new PacketNtfCallScript(weaponSkins));
|
if (weaponSkins.Count > 0) await player.SendPacket(new PacketNtfCallScript(weaponSkins));
|
||||||
|
DatabaseHelper.SaveDatabaseType(player.InventoryManager.InventoryData);
|
||||||
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
||||||
I18NManager.Translate("Word.WeaponSkin"), weaponSkins.Count.ToString()));
|
I18NManager.Translate("Word.WeaponSkin"), weaponSkins.Count.ToString()));
|
||||||
}
|
}
|
||||||
@@ -147,6 +151,7 @@ public class CommandGiveAll : ICommands
|
|||||||
profileItems.Add(profile);
|
profileItems.Add(profile);
|
||||||
}
|
}
|
||||||
if (profileItems.Count > 0) await player.SendPacket(new PacketNtfCallScript(profileItems));
|
if (profileItems.Count > 0) await player.SendPacket(new PacketNtfCallScript(profileItems));
|
||||||
|
DatabaseHelper.SaveDatabaseType(player.InventoryManager.InventoryData);
|
||||||
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
||||||
I18NManager.Translate("Word.Profile"), profileItems.Count.ToString()));
|
I18NManager.Translate("Word.Profile"), profileItems.Count.ToString()));
|
||||||
}
|
}
|
||||||
@@ -183,6 +188,7 @@ public class CommandGiveAll : ICommands
|
|||||||
skinPartItems.Add(skinPart);
|
skinPartItems.Add(skinPart);
|
||||||
}
|
}
|
||||||
if (skinPartItems.Count > 0) await player.SendPacket(new PacketNtfCallScript(skinPartItems));
|
if (skinPartItems.Count > 0) await player.SendPacket(new PacketNtfCallScript(skinPartItems));
|
||||||
|
DatabaseHelper.SaveDatabaseType(player.InventoryManager.InventoryData);
|
||||||
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
||||||
I18NManager.Translate("Word.SkinPart"), skinPartItems.Count.ToString()));
|
I18NManager.Translate("Word.SkinPart"), skinPartItems.Count.ToString()));
|
||||||
}
|
}
|
||||||
@@ -219,6 +225,7 @@ public class CommandGiveAll : ICommands
|
|||||||
callItems.Add(callItem);
|
callItems.Add(callItem);
|
||||||
}
|
}
|
||||||
if (callItems.Count > 0) await player.SendPacket(new PacketNtfCallScript(callItems));
|
if (callItems.Count > 0) await player.SendPacket(new PacketNtfCallScript(callItems));
|
||||||
|
DatabaseHelper.SaveDatabaseType(player.InventoryManager.InventoryData);
|
||||||
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
||||||
I18NManager.Translate("Word.CallItem"), callItems.Count.ToString()));
|
I18NManager.Translate("Word.CallItem"), callItems.Count.ToString()));
|
||||||
}
|
}
|
||||||
@@ -255,6 +262,7 @@ public class CommandGiveAll : ICommands
|
|||||||
weaponPartItems.Add(weaponPart);
|
weaponPartItems.Add(weaponPart);
|
||||||
}
|
}
|
||||||
if (weaponPartItems.Count > 0) await player.SendPacket(new PacketNtfCallScript(weaponPartItems));
|
if (weaponPartItems.Count > 0) await player.SendPacket(new PacketNtfCallScript(weaponPartItems));
|
||||||
|
DatabaseHelper.SaveDatabaseType(player.InventoryManager.InventoryData);
|
||||||
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
||||||
I18NManager.Translate("Word.WeaponPart"), weaponPartItems.Count.ToString()));
|
I18NManager.Translate("Word.WeaponPart"), weaponPartItems.Count.ToString()));
|
||||||
}
|
}
|
||||||
@@ -291,6 +299,7 @@ public class CommandGiveAll : ICommands
|
|||||||
skinItems.Add(skin);
|
skinItems.Add(skin);
|
||||||
}
|
}
|
||||||
if (skinItems.Count > 0) await player.SendPacket(new PacketNtfCallScript(skinItems));
|
if (skinItems.Count > 0) await player.SendPacket(new PacketNtfCallScript(skinItems));
|
||||||
|
DatabaseHelper.SaveDatabaseType(player.InventoryManager.InventoryData);
|
||||||
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
||||||
I18NManager.Translate("Word.Skin"), skinItems.Count.ToString()));
|
I18NManager.Translate("Word.Skin"), skinItems.Count.ToString()));
|
||||||
}
|
}
|
||||||
@@ -327,6 +336,7 @@ public class CommandGiveAll : ICommands
|
|||||||
furnitureItems.Add(furniture);
|
furnitureItems.Add(furniture);
|
||||||
}
|
}
|
||||||
if (furnitureItems.Count > 0) await player.SendPacket(new PacketNtfCallScript(furnitureItems));
|
if (furnitureItems.Count > 0) await player.SendPacket(new PacketNtfCallScript(furnitureItems));
|
||||||
|
DatabaseHelper.SaveDatabaseType(player.InventoryManager.InventoryData);
|
||||||
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
||||||
I18NManager.Translate("Word.Furniture"), furnitureItems.Count.ToString()));
|
I18NManager.Translate("Word.Furniture"), furnitureItems.Count.ToString()));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -214,6 +214,10 @@ public class PlayerInstance(PlayerGameData data)
|
|||||||
};
|
};
|
||||||
|
|
||||||
foreach (var chara in CharacterManager.CharacterData.Characters) proto.Items.Add(chara.ToProto());
|
foreach (var chara in CharacterManager.CharacterData.Characters) proto.Items.Add(chara.ToProto());
|
||||||
|
foreach (var item in InventoryManager.InventoryData.Items.Values) proto.Items.Add(item.ToProto());
|
||||||
|
foreach (var skin in InventoryManager.InventoryData.Skins.Values) proto.Items.Add(skin.ToProto());
|
||||||
|
foreach (var weapon in InventoryManager.InventoryData.Weapons.Values) proto.Items.Add(weapon.ToProto());
|
||||||
|
foreach (var card in InventoryManager.InventoryData.SupportCards.Values) proto.Items.Add(card.ToProto());
|
||||||
foreach (var x in Data.Attrs)
|
foreach (var x in Data.Attrs)
|
||||||
{
|
{
|
||||||
uint gid = x.Gid;
|
uint gid = x.Gid;
|
||||||
@@ -323,20 +327,49 @@ public class PlayerInstance(PlayerGameData data)
|
|||||||
|
|
||||||
private static IEnumerable<(uint Gid, uint Sid, uint Value)> BuildGirlFurnitureAttrs()
|
private static IEnumerable<(uint Gid, uint Sid, uint Value)> BuildGirlFurnitureAttrs()
|
||||||
{
|
{
|
||||||
// Unlock some furniture slots for every girl
|
|
||||||
// Each furniture attr int stores 10 slots using 3 bits per slot
|
|
||||||
// Value below means slot 0..9 = 1
|
|
||||||
const uint furnitureUnlockedValue = 153391689;
|
const uint furnitureUnlockedValue = 153391689;
|
||||||
|
var groupFurnitureByArea = new Dictionary<uint, uint>();
|
||||||
|
foreach (var pos in GameData.HouseFurniturePosData.Values)
|
||||||
|
{
|
||||||
|
var areaId = pos.AreaId;
|
||||||
|
var groupId = pos.GroupId;
|
||||||
|
uint selectedIndex = 1;
|
||||||
|
var shift = (groupId - 1) * 3;
|
||||||
|
if (!groupFurnitureByArea.TryGetValue(areaId, out var packed)) packed = 0;
|
||||||
|
packed |= (selectedIndex << (int)shift);
|
||||||
|
groupFurnitureByArea[areaId] = packed;
|
||||||
|
}
|
||||||
|
|
||||||
for (uint girlId = 0; girlId <= 50; girlId++)
|
for (uint girlId = 0; girlId <= 50; girlId++)
|
||||||
{
|
{
|
||||||
// FurnitureStart..FurnitureEnd = 10..19
|
var baseSid = girlId * 50;
|
||||||
for (uint offset = 10; offset <= 19; offset++)
|
for (uint offset = 10; offset <= 19; offset++)
|
||||||
{
|
yield return (101, baseSid + offset, furnitureUnlockedValue);
|
||||||
uint sid = (girlId * 50) + offset;
|
|
||||||
|
if (groupFurnitureByArea.TryGetValue(girlId, out var groupValue))
|
||||||
|
yield return (101, baseSid + 20, groupValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Massage room furniture
|
||||||
|
// 10010..10019
|
||||||
|
for (uint sid = 10010; sid <= 10019; sid++)
|
||||||
|
yield return (101, sid, furnitureUnlockedValue);
|
||||||
|
|
||||||
|
// Massage room group state
|
||||||
|
yield return (101, 10020, 1);
|
||||||
|
|
||||||
|
// Hot spring furniture
|
||||||
|
// 15001..15010
|
||||||
|
for (uint sid = 15001; sid <= 15010; sid++)
|
||||||
|
yield return (101, sid, furnitureUnlockedValue);
|
||||||
|
|
||||||
|
// Beach furniture
|
||||||
|
// 17101..17110
|
||||||
|
for (uint sid = 17101; sid <= 17110; sid++)
|
||||||
|
yield return (101, sid, furnitureUnlockedValue);
|
||||||
|
|
||||||
|
for (uint sid = 30000; sid < 31000; sid++)
|
||||||
yield return (101, sid, furnitureUnlockedValue);
|
yield return (101, sid, furnitureUnlockedValue);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IEnumerable<(uint Gid, uint Sid, uint Value)> BuildLobbyBootstrapAttrs()
|
private static IEnumerable<(uint Gid, uint Sid, uint Value)> BuildLobbyBootstrapAttrs()
|
||||||
|
|||||||
@@ -87,7 +87,6 @@ public class HandlerReqLogin : Handler
|
|||||||
await connection.Player.OnHeartBeat();
|
await connection.Player.OnHeartBeat();
|
||||||
await connection.SendPacket(new PacketNtfUpdateFriend(connection.Player!));
|
await connection.SendPacket(new PacketNtfUpdateFriend(connection.Player!));
|
||||||
ApplySavedGirlSkinTypes(connection.Player!);
|
ApplySavedGirlSkinTypes(connection.Player!);
|
||||||
await connection.SendPacket(new PacketNtfCallScript(connection.Player!.InventoryManager.InventoryData));
|
|
||||||
await SendGirlSkinTypeOnLogin(connection);
|
await SendGirlSkinTypeOnLogin(connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -270,12 +270,17 @@ public class RouteController : ControllerBase
|
|||||||
var finalEmail = email ?? form_email ?? await GetJsonBodyValue("email");
|
var finalEmail = email ?? form_email ?? await GetJsonBodyValue("email");
|
||||||
if (!string.IsNullOrWhiteSpace(finalEmail))
|
if (!string.IsNullOrWhiteSpace(finalEmail))
|
||||||
{
|
{
|
||||||
var accountByEmail = AccountData.GetAccountByEmail(finalEmail);
|
var username = finalEmail.Split('@')[0];
|
||||||
if (accountByEmail == null)
|
var accountData = AccountData.GetAccountByUserName(username);
|
||||||
return BuildLoginFailedResponse("Account not found.");
|
if (accountData == null)
|
||||||
|
{
|
||||||
|
if (!ConfigManager.Config.ServerOption.AutoCreateUser) return BuildLoginFailedResponse("Account not found.");
|
||||||
|
AccountData.CreateAccount(username, 0, "123456");
|
||||||
|
accountData = AccountData.GetAccountByUserName(username)!;
|
||||||
|
}
|
||||||
|
|
||||||
var finalUidValue = accountByEmail.Uid.ToString();
|
var finalUidValue = accountData.Uid.ToString();
|
||||||
var finalTokenValue = accountByEmail.GenerateComboToken();
|
var finalTokenValue = accountData.GenerateComboToken();
|
||||||
|
|
||||||
object emailLoginRsp = new
|
object emailLoginRsp = new
|
||||||
{
|
{
|
||||||
@@ -286,14 +291,14 @@ public class RouteController : ControllerBase
|
|||||||
isFirstLogin = false,
|
isFirstLogin = false,
|
||||||
isNeedKoreaSciAuth = false,
|
isNeedKoreaSciAuth = false,
|
||||||
ksOpenId = $"ks_{finalUidValue}",
|
ksOpenId = $"ks_{finalUidValue}",
|
||||||
nickname = accountByEmail.Username,
|
nickname = accountData.Username,
|
||||||
passportId = finalUidValue,
|
passportId = finalUidValue,
|
||||||
playerFillAgeUrl = "",
|
playerFillAgeUrl = "",
|
||||||
status = 0,
|
status = 0,
|
||||||
thirdPartyUid = "",
|
thirdPartyUid = "",
|
||||||
token = finalTokenValue,
|
token = finalTokenValue,
|
||||||
type = "guest",
|
type = "guest",
|
||||||
uid = accountByEmail.Uid
|
uid = accountData.Uid
|
||||||
},
|
},
|
||||||
msg = "操作成功"
|
msg = "操作成功"
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
v=2.7
|
v=2.9
|
||||||
Reference in New Issue
Block a user