forked from PGR/ascnet
items db + default items
This commit is contained in:
parent
e850a18d54
commit
03128fcb84
|
@ -0,0 +1,69 @@
|
||||||
|
using AscNet.Common.MsgPack;
|
||||||
|
using MongoDB.Bson;
|
||||||
|
using MongoDB.Bson.Serialization.Attributes;
|
||||||
|
using MongoDB.Driver;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace AscNet.Common.Database
|
||||||
|
{
|
||||||
|
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
|
||||||
|
public class Inventory
|
||||||
|
{
|
||||||
|
public static readonly IMongoCollection<Inventory> collection = Common.db.GetCollection<Inventory>("inventory");
|
||||||
|
|
||||||
|
public static Inventory FromUid(long uid)
|
||||||
|
{
|
||||||
|
return collection.AsQueryable().FirstOrDefault(x => x.Uid == uid) ?? Create(uid);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Inventory Create(long uid)
|
||||||
|
{
|
||||||
|
Inventory inventory = new()
|
||||||
|
{
|
||||||
|
Uid = uid,
|
||||||
|
Items = new()
|
||||||
|
};
|
||||||
|
|
||||||
|
List<ItemConfig>? defaultItems = JsonConvert.DeserializeObject<List<ItemConfig>>(File.ReadAllText("./Configs/default_items.json"));
|
||||||
|
if (defaultItems is not null)
|
||||||
|
{
|
||||||
|
inventory.Items.AddRange(defaultItems.Select(item => new Item()
|
||||||
|
{
|
||||||
|
Id = item.Id,
|
||||||
|
Count = item.Count,
|
||||||
|
RefreshTime = DateTimeOffset.Now.ToUnixTimeSeconds(),
|
||||||
|
CreateTime = DateTimeOffset.Now.ToUnixTimeSeconds()
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
collection.InsertOne(inventory);
|
||||||
|
|
||||||
|
return inventory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Save()
|
||||||
|
{
|
||||||
|
collection.ReplaceOne(Builders<Inventory>.Filter.Eq(x => x.Id, Id), this);
|
||||||
|
}
|
||||||
|
|
||||||
|
[BsonId]
|
||||||
|
public ObjectId Id { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("uid")]
|
||||||
|
[BsonRequired]
|
||||||
|
public long Uid { get; set; }
|
||||||
|
|
||||||
|
[BsonElement("items")]
|
||||||
|
[BsonRequired]
|
||||||
|
public List<Item> Items { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public partial class ItemConfig
|
||||||
|
{
|
||||||
|
[JsonProperty("Id")]
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("Count")]
|
||||||
|
public long Count { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -212,7 +212,7 @@ namespace AscNet.Common.MsgPack
|
||||||
}
|
}
|
||||||
|
|
||||||
[MessagePackObject(true)]
|
[MessagePackObject(true)]
|
||||||
public partial class ItemList
|
public partial class Item
|
||||||
{
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public long Count { get; set; }
|
public long Count { get; set; }
|
||||||
|
@ -319,7 +319,7 @@ namespace AscNet.Common.MsgPack
|
||||||
public PlayerData PlayerData { get; set; }
|
public PlayerData PlayerData { get; set; }
|
||||||
public List<TimeLimitCtrlConfigList> TimeLimitCtrlConfigList { get; set; } = new();
|
public List<TimeLimitCtrlConfigList> TimeLimitCtrlConfigList { get; set; } = new();
|
||||||
public List<SharePlatformConfigList> SharePlatformConfigList { get; set; } = new();
|
public List<SharePlatformConfigList> SharePlatformConfigList { get; set; } = new();
|
||||||
public List<ItemList> ItemList { get; set; } = new();
|
public List<Item> ItemList { get; set; } = new();
|
||||||
public Dictionary<int, List<ItemRecycleData>> ItemRecycleDict { get; set; } = new();
|
public Dictionary<int, List<ItemRecycleData>> ItemRecycleDict { get; set; } = new();
|
||||||
public List<LoginCharacterList> CharacterList { get; set; } = new();
|
public List<LoginCharacterList> CharacterList { get; set; } = new();
|
||||||
public List<EquipList> EquipList { get; set; } = new();
|
public List<EquipList> EquipList { get; set; } = new();
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
{
|
{
|
||||||
public static class Miscs
|
public static class Miscs
|
||||||
{
|
{
|
||||||
public static int ParseIntOr(string? s, int d)
|
public static int ParseIntOr(string? s, int d = 0)
|
||||||
{
|
{
|
||||||
if (int.TryParse(s, out var parsed))
|
if (int.TryParse(s, out var parsed))
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
using AscNet.Common.Database;
|
using AscNet.Common.Database;
|
||||||
using AscNet.Common.MsgPack;
|
using AscNet.Common.MsgPack;
|
||||||
|
using AscNet.Common.Util;
|
||||||
using AscNet.Table.share.guide;
|
using AscNet.Table.share.guide;
|
||||||
|
using AscNet.Table.share.item;
|
||||||
using MessagePack;
|
using MessagePack;
|
||||||
|
|
||||||
namespace AscNet.GameServer.Handlers
|
namespace AscNet.GameServer.Handlers
|
||||||
|
@ -64,6 +66,8 @@ namespace AscNet.GameServer.Handlers
|
||||||
session.player = player;
|
session.player = player;
|
||||||
session.character = Character.FromUid(player.PlayerData.Id);
|
session.character = Character.FromUid(player.PlayerData.Id);
|
||||||
session.stage = Stage.FromUid(player.PlayerData.Id);
|
session.stage = Stage.FromUid(player.PlayerData.Id);
|
||||||
|
session.inventory = Inventory.FromUid(player.PlayerData.Id);
|
||||||
|
|
||||||
session.SendResponse(new LoginResponse
|
session.SendResponse(new LoginResponse
|
||||||
{
|
{
|
||||||
Code = 0,
|
Code = 0,
|
||||||
|
@ -85,10 +89,11 @@ namespace AscNet.GameServer.Handlers
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player = Player.FromToken(request.Token);
|
player = Player.FromToken(request.Token);
|
||||||
if (player is not null && (session.character is null || session.stage is null))
|
if (player is not null && (session.character is null || session.stage is null || session.inventory is null))
|
||||||
{
|
{
|
||||||
session.character = Character.FromUid(player.PlayerData.Id);
|
session.character = Character.FromUid(player.PlayerData.Id);
|
||||||
session.stage = Stage.FromUid(player.PlayerData.Id);
|
session.stage = Stage.FromUid(player.PlayerData.Id);
|
||||||
|
session.inventory = Inventory.FromUid(player.PlayerData.Id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,7 +136,7 @@ namespace AscNet.GameServer.Handlers
|
||||||
FubenMainLineData = new(),
|
FubenMainLineData = new(),
|
||||||
FubenChapterExtraLoginData = new(),
|
FubenChapterExtraLoginData = new(),
|
||||||
FubenUrgentEventData = new(),
|
FubenUrgentEventData = new(),
|
||||||
// ItemList = ItemTableReader.Instance.All.Select(x => new ItemList() { Id = x.Id, Count = 6969696969 }).ToList(),
|
ItemList = session.inventory.Items,
|
||||||
UseBackgroundId = 14000001 // main ui theme, table still failed to dump
|
UseBackgroundId = 14000001 // main ui theme, table still failed to dump
|
||||||
};
|
};
|
||||||
if (notifyLogin.PlayerData.DisplayCharIdList.Count < 1)
|
if (notifyLogin.PlayerData.DisplayCharIdList.Count < 1)
|
||||||
|
|
|
@ -17,6 +17,7 @@ namespace AscNet.GameServer
|
||||||
public Player player = default!;
|
public Player player = default!;
|
||||||
public Character character = default!;
|
public Character character = default!;
|
||||||
public Stage stage = default!;
|
public Stage stage = default!;
|
||||||
|
public Inventory inventory = default!;
|
||||||
public readonly Logger log;
|
public readonly Logger log;
|
||||||
private long lastPacketTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
private long lastPacketTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
||||||
private ushort packetNo = 0;
|
private ushort packetNo = 0;
|
||||||
|
@ -222,6 +223,7 @@ namespace AscNet.GameServer
|
||||||
player?.Save();
|
player?.Save();
|
||||||
character?.Save();
|
character?.Save();
|
||||||
stage?.Save();
|
stage?.Save();
|
||||||
|
inventory?.Save();
|
||||||
|
|
||||||
log.Warn($"{id} disconnected");
|
log.Warn($"{id} disconnected");
|
||||||
client.Close();
|
client.Close();
|
||||||
|
|
|
@ -29,6 +29,8 @@ namespace AscNet
|
||||||
|
|
||||||
static void KillProtocol(object? sender, EventArgs e)
|
static void KillProtocol(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
LoggerFactory.Logger.Info("Shutting down...");
|
||||||
|
|
||||||
foreach (var session in Server.Instance.Sessions)
|
foreach (var session in Server.Instance.Sessions)
|
||||||
{
|
{
|
||||||
session.Value.SendPush(new ShutdownNotify());
|
session.Value.SendPush(new ShutdownNotify());
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"Id": 1,
|
||||||
|
"Count": 30000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Id": 4,
|
||||||
|
"Count": 70
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Id": 12,
|
||||||
|
"Count": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Id": 17,
|
||||||
|
"Count": 21
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Id": 21,
|
||||||
|
"Count": 99
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Id": 22,
|
||||||
|
"Count": 21
|
||||||
|
}
|
||||||
|
]
|
Loading…
Reference in New Issue