mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-02 20:26:03 +08:00
feat: buggy decide gacha item
This commit is contained in:
@@ -114,7 +114,7 @@ public class BannerConfig
|
||||
return gold[random.Next(0, gold.Count)];
|
||||
}
|
||||
|
||||
public GachaInfo ToInfo(List<int> goldAvatar)
|
||||
public GachaInfo ToInfo(List<int> decideOrder, List<int> goldAvatar)
|
||||
{
|
||||
var info = new GachaInfo
|
||||
{
|
||||
@@ -127,6 +127,17 @@ public class BannerConfig
|
||||
{
|
||||
info.BeginTime = BeginTime;
|
||||
info.EndTime = EndTime;
|
||||
info.DecideItemInfo = new DecideItemInfo();
|
||||
}
|
||||
|
||||
if (GachaType == GachaTypeEnum.AvatarUp)
|
||||
{
|
||||
info.DecideItemInfo = new DecideItemInfo
|
||||
{
|
||||
DecideItemOrder = { decideOrder.Select(x => (uint)x) },
|
||||
CHDOIBFEHLP = 1,
|
||||
JIGONEALCPC = { 11 }
|
||||
};
|
||||
}
|
||||
|
||||
if (GachaId == 1001)
|
||||
|
||||
18
Common/Data/Excel/DecideAvatarOrderExcel.cs
Normal file
18
Common/Data/Excel/DecideAvatarOrderExcel.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
namespace EggLink.DanhengServer.Data.Excel;
|
||||
|
||||
[ResourceEntity("DecideAvatarOrder.json")]
|
||||
public class DecideAvatarOrderExcel : ExcelResource
|
||||
{
|
||||
public int ItemID { get; set; } = 0;
|
||||
public int Order { get; set; } = 0;
|
||||
|
||||
public override int GetId()
|
||||
{
|
||||
return ItemID;
|
||||
}
|
||||
|
||||
public override void Loaded()
|
||||
{
|
||||
GameData.DecideAvatarOrderData.Add(ItemID, this);
|
||||
}
|
||||
}
|
||||
20
Common/Data/Excel/RechargeConfigExcel.cs
Normal file
20
Common/Data/Excel/RechargeConfigExcel.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
namespace EggLink.DanhengServer.Data.Excel;
|
||||
|
||||
[ResourceEntity("RechargeConfig.json")]
|
||||
public class RechargeConfigExcel : ExcelResource
|
||||
{
|
||||
public string TierID { get; set; } = "";
|
||||
public string ProductID { get; set; } = "";
|
||||
public int GiftType { get; set; }
|
||||
public int ListOrder { get; set; }
|
||||
|
||||
public override int GetId()
|
||||
{
|
||||
return TierID.GetHashCode();
|
||||
}
|
||||
|
||||
public override void Loaded()
|
||||
{
|
||||
GameData.RechargeConfigData[ProductID] = this;
|
||||
}
|
||||
}
|
||||
18
Common/Data/Excel/RechargeGiftConfigExcel.cs
Normal file
18
Common/Data/Excel/RechargeGiftConfigExcel.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
namespace EggLink.DanhengServer.Data.Excel;
|
||||
|
||||
[ResourceEntity("RechargeGiftConfig.json")]
|
||||
public class RechargeGiftConfigExcel : ExcelResource
|
||||
{
|
||||
public int GiftType { get; set; }
|
||||
public List<int> GiftIDList { get; set; } = [];
|
||||
|
||||
public override int GetId()
|
||||
{
|
||||
return GiftType;
|
||||
}
|
||||
|
||||
public override void Loaded()
|
||||
{
|
||||
GameData.RechargeGiftConfigData.Add(GiftType, this);
|
||||
}
|
||||
}
|
||||
@@ -51,6 +51,7 @@ public static class GameData
|
||||
|
||||
public static Dictionary<int, AdventurePlayerExcel> AdventurePlayerData { get; private set; } = [];
|
||||
public static Dictionary<int, SummonUnitDataExcel> SummonUnitDataData { get; private set; } = [];
|
||||
public static Dictionary<int, DecideAvatarOrderExcel> DecideAvatarOrderData { get; private set; } = [];
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -112,6 +113,8 @@ public static class GameData
|
||||
public static Dictionary<int, PlayerLevelConfigExcel> PlayerLevelConfigData { get; private set; } = [];
|
||||
public static Dictionary<int, BackGroundMusicExcel> BackGroundMusicData { get; private set; } = [];
|
||||
public static Dictionary<int, ChatBubbleConfigExcel> ChatBubbleConfigData { get; private set; } = [];
|
||||
public static Dictionary<string, RechargeConfigExcel> RechargeConfigData { get; private set; } = [];
|
||||
public static Dictionary<int, RechargeGiftConfigExcel> RechargeGiftConfigData { get; private set; } = [];
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ public class GachaData : BaseDatabaseDataHelper
|
||||
public bool LastWeaponGachaFailed { get; set; } = false;
|
||||
public int LastGachaFailedCount { get; set; } = 0;
|
||||
public int LastGachaPurpleFailedCount { get; set; } = 0;
|
||||
[SugarColumn(IsJson = true)] public List<int> GachaDecideOrder { get; set; } = [];
|
||||
}
|
||||
|
||||
public class GachaInfo
|
||||
|
||||
@@ -9,7 +9,7 @@ public class ServerPrefsData : BaseDatabaseDataHelper
|
||||
{
|
||||
[SugarColumn(IsJson = true)] public Dictionary<int, ServerPrefsInfo> ServerPrefsDict { get; set; } = [];
|
||||
|
||||
public double Version { get; set; } = 2.4;
|
||||
public double Version { get; set; } = 3.2;
|
||||
|
||||
public void SetData(int prefsId, string b64Data)
|
||||
{
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
public static class GameConstants
|
||||
{
|
||||
public const string GAME_VERSION = "3.2.0";
|
||||
public const int GameVersionInt = 3200;
|
||||
public const int MAX_STAMINA = 300;
|
||||
public const int MAX_STAMINA_RESERVE = 2400;
|
||||
public const int STAMINA_RECOVERY_TIME = 360; // 6 minutes
|
||||
|
||||
@@ -11,9 +11,23 @@ using GachaInfo = EggLink.DanhengServer.Database.Gacha.GachaInfo;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Game.Gacha;
|
||||
|
||||
public class GachaManager(PlayerInstance player) : BasePlayerManager(player)
|
||||
public class GachaManager : BasePlayerManager
|
||||
{
|
||||
public GachaData GachaData { get; } = DatabaseHelper.Instance!.GetInstanceOrCreateNew<GachaData>(player.Uid);
|
||||
public GachaData GachaData { get; }
|
||||
|
||||
public GachaManager(PlayerInstance player) : base(player)
|
||||
{
|
||||
GachaData = DatabaseHelper.Instance!.GetInstanceOrCreateNew<GachaData>(player.Uid);
|
||||
|
||||
if (GachaData.GachaHistory.Count >= 50)
|
||||
GachaData.GachaHistory.RemoveRange(0, GachaData.GachaHistory.Count - 50);
|
||||
|
||||
foreach (var order in GameData.DecideAvatarOrderData.Values.ToList().OrderBy(x => -x.Order))
|
||||
{
|
||||
if (GachaData.GachaDecideOrder.Contains(order.ItemID)) continue;
|
||||
GachaData.GachaDecideOrder.Add(order.ItemID);
|
||||
}
|
||||
}
|
||||
|
||||
public List<int> GetPurpleAvatars()
|
||||
{
|
||||
@@ -21,7 +35,7 @@ public class GachaManager(PlayerInstance player) : BasePlayerManager(player)
|
||||
foreach (var avatar in GameData.AvatarConfigData.Values)
|
||||
if (avatar.Rarity == RarityEnum.CombatPowerAvatarRarityType4 &&
|
||||
!(GameData.MultiplePathAvatarConfigData.ContainsKey(avatar.AvatarID) &&
|
||||
GameData.MultiplePathAvatarConfigData[avatar.AvatarID].BaseAvatarID != avatar.AvatarID))
|
||||
GameData.MultiplePathAvatarConfigData[avatar.AvatarID].BaseAvatarID != avatar.AvatarID) && avatar.MaxRank > 0)
|
||||
purpleAvatars.Add(avatar.AvatarID);
|
||||
return purpleAvatars;
|
||||
}
|
||||
@@ -98,11 +112,11 @@ public class GachaManager(PlayerInstance player) : BasePlayerManager(player)
|
||||
var banner = GameData.BannersConfig.Banners.Find(x => x.GachaId == bannerId);
|
||||
if (banner == null) return null;
|
||||
Player.InventoryManager?.RemoveItem(banner.GachaType.GetCostItemId(), times);
|
||||
|
||||
var decideItem = GachaData.GachaDecideOrder.GetRange(0, 7);
|
||||
var items = new List<int>();
|
||||
for (var i = 0; i < times; i++)
|
||||
{
|
||||
var item = banner.DoGacha(GetGoldAvatars(), GetPurpleAvatars(), GetPurpleWeapons(), GetGoldWeapons(),
|
||||
var item = banner.DoGacha(decideItem, GetPurpleAvatars(), GetPurpleWeapons(), GetGoldWeapons(),
|
||||
GetBlueWeapons(), GachaData);
|
||||
items.Add(item);
|
||||
}
|
||||
@@ -284,7 +298,8 @@ public class GachaManager(PlayerInstance player) : BasePlayerManager(player)
|
||||
{
|
||||
GachaRandom = (uint)Random.Shared.Next(1000, 1999)
|
||||
};
|
||||
foreach (var banner in GameData.BannersConfig.Banners) proto.GachaInfoList.Add(banner.ToInfo(GetGoldAvatars()));
|
||||
foreach (var banner in GameData.BannersConfig.Banners) proto.GachaInfoList.Add(banner.ToInfo(GachaData.GachaDecideOrder, GetGoldAvatars()));
|
||||
|
||||
return proto;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Gacha;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Gacha;
|
||||
|
||||
[Opcode(CmdIds.SetGachaDecideItemCsReq)]
|
||||
public class HandlerSetGachaDecideItemCsReq : Handler
|
||||
{
|
||||
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
|
||||
{
|
||||
var req = SetGachaDecideItemCsReq.Parser.ParseFrom(data);
|
||||
|
||||
connection.Player!.GachaManager!.GachaData.GachaDecideOrder = req.DecideItemOrder.Select(x => (int)x).ToList();
|
||||
|
||||
await connection.SendPacket(new PacketSetGachaDecideItemScRsp(req.GachaId, req.DecideItemOrder.ToList()));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using EggLink.DanhengServer.GameServer.Server.Packet.Send.RechargeGift;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.RechargeGift;
|
||||
|
||||
[Opcode(CmdIds.GetRechargeGiftInfoCsReq)]
|
||||
public class HandlerGetRechargeGiftInfoCsReq : Handler
|
||||
{
|
||||
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
|
||||
{
|
||||
await connection.SendPacket(new PacketGetRechargeGiftInfoScRsp());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Gacha;
|
||||
|
||||
public class PacketSetGachaDecideItemScRsp : BasePacket
|
||||
{
|
||||
public PacketSetGachaDecideItemScRsp(uint gachaId, List<uint> order) : base(CmdIds.SetGachaDecideItemScRsp)
|
||||
{
|
||||
var proto = new SetGachaDecideItemScRsp
|
||||
{
|
||||
GachaId = gachaId,
|
||||
DecideItemInfo = new DecideItemInfo
|
||||
{
|
||||
DecideItemOrder = { order },
|
||||
CHDOIBFEHLP = 1,
|
||||
JIGONEALCPC = { 11 }
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Data;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Player;
|
||||
@@ -10,6 +11,13 @@ public class PacketQueryProductInfoScRsp : BasePacket
|
||||
var proto = new QueryProductInfoScRsp
|
||||
{
|
||||
//PEKJLBINDGG = (ulong)Extensions.GetUnixSec() + 8640000, // 100 day
|
||||
ProductList = { GameData.RechargeConfigData.Values.Where(x => x.GiftType != 1).Select(x => new Product
|
||||
{
|
||||
EndTime = uint.MaxValue,
|
||||
GiftType = (ProductGiftType)x.GiftType,
|
||||
PriceTier = x.TierID,
|
||||
ProductId = x.ProductID
|
||||
}) }
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
using EggLink.DanhengServer.Data;
|
||||
using EggLink.DanhengServer.Kcp;
|
||||
using EggLink.DanhengServer.Proto;
|
||||
|
||||
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.RechargeGift;
|
||||
|
||||
public class PacketGetRechargeGiftInfoScRsp : BasePacket
|
||||
{
|
||||
public PacketGetRechargeGiftInfoScRsp() : base(CmdIds.GetRechargeGiftInfoScRsp)
|
||||
{
|
||||
var proto = new GetRechargeGiftInfoScRsp
|
||||
{
|
||||
RechargeBenefitList =
|
||||
{
|
||||
GameData.RechargeGiftConfigData.Values.Select(x => new RechargeGiftInfo
|
||||
{
|
||||
GiftType = (uint)x.GiftType,
|
||||
EndTime = uint.MaxValue,
|
||||
GiftDataList =
|
||||
{
|
||||
x.GiftIDList.Select(h => new RechargeGiftData
|
||||
{
|
||||
Status = RechargeGiftStatus.Received,
|
||||
Index = (uint)x.GiftIDList.IndexOf(h),
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user