mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-02 20:26:03 +08:00
fix: shop list
This commit is contained in:
20
Common/Data/Excel/ItemUseDataExcel.cs
Normal file
20
Common/Data/Excel/ItemUseDataExcel.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
namespace EggLink.DanhengServer.Data.Excel;
|
||||
|
||||
[ResourceEntity("ItemUseData.json")]
|
||||
public class ItemUseDataExcel : ExcelResource
|
||||
{
|
||||
public int UseDataID { get; set; }
|
||||
public int UseMultipleMax { get; set; }
|
||||
public List<int> UseParam { get; set; } = [];
|
||||
public bool IsAutoUse { get; set; }
|
||||
|
||||
public override int GetId()
|
||||
{
|
||||
return UseDataID;
|
||||
}
|
||||
|
||||
public override void Loaded()
|
||||
{
|
||||
GameData.ItemUseDataData.TryAdd(UseDataID, this);
|
||||
}
|
||||
}
|
||||
@@ -197,6 +197,7 @@ public static class GameData
|
||||
public static Dictionary<int, MappingInfoExcel> MappingInfoData { get; private set; } = [];
|
||||
public static Dictionary<int, ItemConfigExcel> ItemConfigData { get; private set; } = [];
|
||||
public static Dictionary<int, ItemUseBuffDataExcel> ItemUseBuffDataData { get; private set; } = [];
|
||||
public static Dictionary<int, ItemUseDataExcel> ItemUseDataData { get; private set; } = [];
|
||||
public static Dictionary<int, EquipmentConfigExcel> EquipmentConfigData { get; private set; } = [];
|
||||
public static Dictionary<int, EquipmentExpTypeExcel> EquipmentExpTypeData { get; private set; } = [];
|
||||
public static Dictionary<int, EquipmentExpItemConfigExcel> EquipmentExpItemConfigData { get; private set; } = [];
|
||||
|
||||
@@ -97,6 +97,8 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
|
||||
case ItemSubTypeEnum.Food:
|
||||
case ItemSubTypeEnum.Book:
|
||||
case ItemSubTypeEnum.FindChest:
|
||||
case ItemSubTypeEnum.Gift:
|
||||
case ItemSubTypeEnum.ForceOpitonalGift:
|
||||
itemData = await PutItem(itemId, count);
|
||||
break;
|
||||
}
|
||||
@@ -362,6 +364,7 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
|
||||
{
|
||||
case ItemMainTypeEnum.Material:
|
||||
case ItemMainTypeEnum.Pet:
|
||||
case ItemMainTypeEnum.Usable:
|
||||
return Data.MaterialItems.Find(x => x.ItemId == itemId);
|
||||
case ItemMainTypeEnum.Equipment:
|
||||
return uniqueId > 0
|
||||
@@ -695,89 +698,99 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
|
||||
GameData.ItemConfigData.TryGetValue(itemId, out var itemConfig);
|
||||
if (itemConfig == null) return (Retcode.RetItemNotExist, null);
|
||||
var dataId = itemConfig.ID;
|
||||
GameData.ItemUseBuffDataData.TryGetValue(dataId, out var useConfig);
|
||||
if (useConfig == null) return (Retcode.RetItemUseConfigNotExist, null);
|
||||
|
||||
for (var i = 0; i < count; i++) // do count times
|
||||
List<ItemData> resItemDatas = [];
|
||||
if (GameData.ItemUseBuffDataData.TryGetValue(dataId, out var useConfig))
|
||||
{
|
||||
if (useConfig.PreviewSkillPoint != 0) await Player.LineupManager!.GainMp((int)useConfig.PreviewSkillPoint);
|
||||
|
||||
if (baseAvatarId > 0)
|
||||
for (var i = 0; i < count; i++) // do count times
|
||||
{
|
||||
// single use
|
||||
var avatar = Player.AvatarManager!.GetFormalAvatar(baseAvatarId);
|
||||
if (avatar == null) return (Retcode.RetAvatarNotExist, null);
|
||||
if (useConfig.PreviewSkillPoint != 0) await Player.LineupManager!.GainMp((int)useConfig.PreviewSkillPoint);
|
||||
|
||||
var extraLineup = Player.LineupManager!.GetCurLineup()?.IsExtraLineup() == true;
|
||||
|
||||
if (useConfig.PreviewHPRecoveryPercent != 0)
|
||||
if (baseAvatarId > 0)
|
||||
{
|
||||
avatar.SetCurHp(
|
||||
Math.Min(Math.Max(avatar.CurrentHp + (int)(useConfig.PreviewHPRecoveryPercent * 10000), 0),
|
||||
10000), extraLineup);
|
||||
// single use
|
||||
var avatar = Player.AvatarManager!.GetFormalAvatar(baseAvatarId);
|
||||
if (avatar == null) return (Retcode.RetAvatarNotExist, null);
|
||||
|
||||
await Player.SendPacket(new PacketSyncLineupNotify(Player.LineupManager.GetCurLineup()!));
|
||||
var extraLineup = Player.LineupManager!.GetCurLineup()?.IsExtraLineup() == true;
|
||||
|
||||
if (useConfig.PreviewHPRecoveryPercent != 0)
|
||||
{
|
||||
avatar.SetCurHp(
|
||||
Math.Min(Math.Max(avatar.CurrentHp + (int)(useConfig.PreviewHPRecoveryPercent * 10000), 0),
|
||||
10000), extraLineup);
|
||||
|
||||
await Player.SendPacket(new PacketSyncLineupNotify(Player.LineupManager.GetCurLineup()!));
|
||||
}
|
||||
|
||||
if (useConfig.PreviewHPRecoveryValue != 0)
|
||||
{
|
||||
avatar.SetCurHp(
|
||||
Math.Min(Math.Max(avatar.CurrentHp + (int)useConfig.PreviewHPRecoveryValue, 0), 10000),
|
||||
extraLineup);
|
||||
|
||||
await Player.SendPacket(new PacketSyncLineupNotify(Player.LineupManager.GetCurLineup()!));
|
||||
}
|
||||
|
||||
if (useConfig.PreviewPowerPercent != 0)
|
||||
{
|
||||
avatar.SetCurSp(
|
||||
Math.Min(Math.Max(avatar.CurrentHp + (int)(useConfig.PreviewPowerPercent * 10000), 0), 10000),
|
||||
extraLineup);
|
||||
|
||||
await Player.SendPacket(new PacketSyncLineupNotify(Player.LineupManager.GetCurLineup()!));
|
||||
}
|
||||
}
|
||||
|
||||
if (useConfig.PreviewHPRecoveryValue != 0)
|
||||
else
|
||||
{
|
||||
avatar.SetCurHp(
|
||||
Math.Min(Math.Max(avatar.CurrentHp + (int)useConfig.PreviewHPRecoveryValue, 0), 10000),
|
||||
extraLineup);
|
||||
// team use
|
||||
if (useConfig.PreviewHPRecoveryPercent != 0)
|
||||
{
|
||||
Player.LineupManager!.GetCurLineup()!.Heal((int)(useConfig.PreviewHPRecoveryPercent * 10000), true);
|
||||
|
||||
await Player.SendPacket(new PacketSyncLineupNotify(Player.LineupManager.GetCurLineup()!));
|
||||
}
|
||||
await Player.SendPacket(new PacketSyncLineupNotify(Player.LineupManager.GetCurLineup()!));
|
||||
}
|
||||
|
||||
if (useConfig.PreviewPowerPercent != 0)
|
||||
{
|
||||
avatar.SetCurSp(
|
||||
Math.Min(Math.Max(avatar.CurrentHp + (int)(useConfig.PreviewPowerPercent * 10000), 0), 10000),
|
||||
extraLineup);
|
||||
if (useConfig.PreviewHPRecoveryValue != 0)
|
||||
{
|
||||
Player.LineupManager!.GetCurLineup()!.Heal((int)useConfig.PreviewHPRecoveryValue, true);
|
||||
|
||||
await Player.SendPacket(new PacketSyncLineupNotify(Player.LineupManager.GetCurLineup()!));
|
||||
await Player.SendPacket(new PacketSyncLineupNotify(Player.LineupManager.GetCurLineup()!));
|
||||
}
|
||||
|
||||
if (useConfig.PreviewPowerPercent != 0)
|
||||
{
|
||||
Player.LineupManager!.GetCurLineup()!.AddPercentSp((int)(useConfig.PreviewPowerPercent * 10000));
|
||||
|
||||
await Player.SendPacket(new PacketSyncLineupNotify(Player.LineupManager.GetCurLineup()!));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// team use
|
||||
if (useConfig.PreviewHPRecoveryPercent != 0)
|
||||
{
|
||||
Player.LineupManager!.GetCurLineup()!.Heal((int)(useConfig.PreviewHPRecoveryPercent * 10000), true);
|
||||
|
||||
await Player.SendPacket(new PacketSyncLineupNotify(Player.LineupManager.GetCurLineup()!));
|
||||
}
|
||||
//maze buff
|
||||
if (useConfig.MazeBuffID > 0)
|
||||
foreach (var info in Player.SceneInstance?.AvatarInfo.Values.ToList() ?? [])
|
||||
if (baseAvatarId == 0 || info.AvatarInfo.BaseAvatarId == baseAvatarId)
|
||||
await info.AddBuff(new SceneBuff(useConfig.MazeBuffID, 1, info.AvatarInfo.AvatarId));
|
||||
|
||||
if (useConfig.PreviewHPRecoveryValue != 0)
|
||||
{
|
||||
Player.LineupManager!.GetCurLineup()!.Heal((int)useConfig.PreviewHPRecoveryValue, true);
|
||||
|
||||
await Player.SendPacket(new PacketSyncLineupNotify(Player.LineupManager.GetCurLineup()!));
|
||||
}
|
||||
|
||||
if (useConfig.PreviewPowerPercent != 0)
|
||||
{
|
||||
Player.LineupManager!.GetCurLineup()!.AddPercentSp((int)(useConfig.PreviewPowerPercent * 10000));
|
||||
|
||||
await Player.SendPacket(new PacketSyncLineupNotify(Player.LineupManager.GetCurLineup()!));
|
||||
}
|
||||
}
|
||||
if (useConfig.MazeBuffID2 > 0)
|
||||
foreach (var info in Player.SceneInstance?.AvatarInfo.Values.ToList() ?? [])
|
||||
if (baseAvatarId == 0 || info.AvatarInfo.BaseAvatarId == baseAvatarId)
|
||||
await info.AddBuff(new SceneBuff(useConfig.MazeBuffID2, 1, info.AvatarInfo.AvatarId));
|
||||
}
|
||||
|
||||
//maze buff
|
||||
if (useConfig.MazeBuffID > 0)
|
||||
foreach (var info in Player.SceneInstance?.AvatarInfo.Values.ToList() ?? [])
|
||||
if (baseAvatarId == 0 || info.AvatarInfo.BaseAvatarId == baseAvatarId)
|
||||
await info.AddBuff(new SceneBuff(useConfig.MazeBuffID, 1, info.AvatarInfo.AvatarId));
|
||||
|
||||
if (useConfig.MazeBuffID2 > 0)
|
||||
foreach (var info in Player.SceneInstance?.AvatarInfo.Values.ToList() ?? [])
|
||||
if (baseAvatarId == 0 || info.AvatarInfo.BaseAvatarId == baseAvatarId)
|
||||
await info.AddBuff(new SceneBuff(useConfig.MazeBuffID2, 1, info.AvatarInfo.AvatarId));
|
||||
if (GameData.ItemUseDataData.TryGetValue(dataId, out var useData))
|
||||
{
|
||||
foreach (var rewardId in useData.UseParam)
|
||||
{
|
||||
resItemDatas.AddRange(await HandleReward(rewardId, true));
|
||||
}
|
||||
}
|
||||
|
||||
// remove item
|
||||
await RemoveItem(itemId, count);
|
||||
|
||||
return (Retcode.RetSucc, null);
|
||||
return (Retcode.RetSucc, resItemDatas);
|
||||
}
|
||||
|
||||
#region Equip
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
using EggLink.DanhengServer.Data.Config;
|
||||
using EggLink.DanhengServer.Data.Excel;
|
||||
using EggLink.DanhengServer.Enums.Mission;
|
||||
using EggLink.DanhengServer.GameServer.Game.Player;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.Mission.FinishType.Handler;
|
||||
[MissionFinishType(MissionFinishTypeEnum.WorldLevel)]
|
||||
public class MissionHandlerWorldLevel : MissionFinishTypeHandler
|
||||
{
|
||||
public override async ValueTask HandleMissionFinishType(PlayerInstance player, SubMissionInfo info, object? arg)
|
||||
{
|
||||
await player.MissionManager!.FinishSubMission(info.ID);
|
||||
}
|
||||
|
||||
public override async ValueTask HandleQuestFinishType(PlayerInstance player, QuestDataExcel quest, FinishWayExcel excel, object? arg)
|
||||
{
|
||||
await player.QuestManager!.UpdateQuestProgress(quest.QuestID, player.Data.WorldLevel);
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ using EggLink.DanhengServer.Database.Inventory;
|
||||
using EggLink.DanhengServer.Enums.Item;
|
||||
using EggLink.DanhengServer.Enums.Mission;
|
||||
using EggLink.DanhengServer.GameServer.Game.Player;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.Shop;
|
||||
|
||||
@@ -19,7 +20,7 @@ public class ShopService(PlayerInstance player) : BasePlayerManager(player)
|
||||
|
||||
foreach (var cost in goods.CostList) await Player.InventoryManager!.RemoveItem(cost.Key, cost.Value * count);
|
||||
var items = new List<ItemData>();
|
||||
if (itemConfig.ItemMainType == ItemMainTypeEnum.Equipment || itemConfig.ItemMainType == ItemMainTypeEnum.Relic)
|
||||
if (itemConfig.ItemMainType is ItemMainTypeEnum.Equipment or ItemMainTypeEnum.Relic)
|
||||
{
|
||||
for (var i = 0; i < count; i++)
|
||||
{
|
||||
@@ -30,7 +31,18 @@ public class ShopService(PlayerInstance player) : BasePlayerManager(player)
|
||||
else
|
||||
{
|
||||
var item = await Player.InventoryManager!.AddItem(itemConfig.ID, count, false);
|
||||
if (item != null) items.Add(item);
|
||||
if (item != null)
|
||||
{
|
||||
if (GameData.ItemUseDataData.TryGetValue(item.ItemId, out var useData) && useData.IsAutoUse)
|
||||
{
|
||||
var res = await Player.InventoryManager!.UseItem(item.ItemId);
|
||||
if (res.returnItems != null) items.AddRange(res.returnItems);
|
||||
}
|
||||
else
|
||||
{
|
||||
items.Add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await Player.MissionManager!.HandleFinishType(MissionFinishTypeEnum.BuyShopGoods, goods);
|
||||
|
||||
@@ -13,9 +13,8 @@ public class PacketQueryProductInfoScRsp : BasePacket
|
||||
//PEKJLBINDGG = (ulong)Extensions.GetUnixSec() + 8640000, // 100 day
|
||||
ProductList =
|
||||
{
|
||||
GameData.RechargeConfigData.Values.Where(x => x.GiftType != 1).Select(x => new Product
|
||||
GameData.RechargeConfigData.Values.Where(x => x.ProductID.Contains("chn") && !x.ProductID.Contains("cloud")).Select(x => new Product
|
||||
{
|
||||
EndTime = uint.MaxValue,
|
||||
GiftType = (ProductGiftType)x.GiftType,
|
||||
PriceTier = x.TierID,
|
||||
ProductId = x.ProductID
|
||||
|
||||
@@ -14,13 +14,13 @@ public class PacketGetShopListScRsp : BasePacket
|
||||
};
|
||||
|
||||
foreach (var item in GameData.ShopConfigData.Values)
|
||||
if (item.ShopType == shopType)
|
||||
if (item.ShopType == shopType && item.Goods.Count > 0)
|
||||
proto.ShopList.Add(new Proto.Shop
|
||||
{
|
||||
ShopId = (uint)item.ShopID,
|
||||
CityLevel = 1,
|
||||
EndTime = uint.MaxValue,
|
||||
GoodsList = { item.Goods.Select(g => g.ToProto()) }
|
||||
GoodsList = { item.Goods.Where(x => x.ItemID != 0).Select(g => g.ToProto()) }
|
||||
});
|
||||
|
||||
SetData(proto);
|
||||
|
||||
Reference in New Issue
Block a user