Files
hjha-server/GameDAL/Club/ClubRCDiscountRedisUtil.cs
xiaoou e9616125ce feat: initial commit - HJHA game server full source
6 major server modules (PdkFriendServer/GlobalSever/ServerCore/GameModule/GameNetModule) +
game logic (GameFix/GameDAL/ServerData) +
network layer (NetWorkMessage) +
data layer (ObjectModel) +
utilities (MrWu/Core/Config/CloudAPI/dll) +
adapters (zyxAdapter/base)

.NET 8.0 C# solution, 16 projects, 958 source files
2026-07-07 12:02:15 +08:00

210 lines
6.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using Server.DB.Redis;
using System.Text;
using StackExchange.Redis;
using MrWu.Debug;
namespace GameDAL {
/// <summary>
/// 俱乐部房卡折扣记录
/// </summary>
public static class ClubRCDiscountRedisUtil {
private const int DbIdx = 5;
private static IDatabaseProxy dbp => redisManager.Getdb(DbIdx);
private static IDatabase db => redisManager.GetDataBase(DbStyle.main, DbIdx);
private const string baseKey = "ClubRCDiscount";
#region
private static string GetClubKey() {
return $"{baseKey}:Club";
}
/// <summary>
/// 获取所有的折扣信息
/// </summary>
public static List<string> GetClubAll()
{
string key = GetClubKey();
var allEntry = dbp.HashGetAll(key);
List<string> list = allEntry.Select(x=>$"{x.Name}, {Convert.ToSingle(x.Value)}").ToList();
return list;
}
public static List<(int Id, float Discount)> GetClubAllEntry()
{
string key = GetClubKey();
var allEntry = dbp.HashGetAll(key);
List<(int, float)> list = new List<(int, float)>();
foreach (var item in allEntry)
{
list.Add((int.Parse(item.Name), float.Parse(item.Value)));
}
return list.ToList();
}
/// <summary>
/// 添加折扣
/// </summary>
public static bool AddClub(int clubId, float discount) {
string key = GetClubKey();
return dbp.HashSet(key, clubId, discount);
}
/// <summary>
/// 移除折扣
/// </summary>
public static bool RemoveClub(int clubId) {
string key = GetClubKey();
return dbp.HashDelete(key, clubId);
}
/// <summary>
/// 获取折扣
/// </summary>
public static float GetClub(int clubId) {
string key = GetClubKey();
var value = dbp.HashGet(key, clubId);
if (value.HasValue && float.TryParse(value, out var discount))
{
return discount;
}
return 0.7f;
}
#endregion
#region
private static string GetPlayerKey() {
return $"{baseKey}:Player";
}
/// <summary>
/// 获取所有的折扣信息
/// </summary>
public static List<string> GetPlayerAll()
{
string key = GetPlayerKey();
var allEntry = dbp.HashGetAll(key);
List<string> list = allEntry.Select(x=>$"{x.Name}, {Convert.ToSingle(x.Value)}").ToList();
return list;
}
public static List<(int Id, float Discount)> GetPlayerAllEntry()
{
string key = GetPlayerKey();
var allEntry = dbp.HashGetAll(key);
List<(int, float)> list = new List<(int, float)>();
foreach (var item in allEntry)
{
list.Add((int.Parse(item.Name), float.Parse(item.Value)));
}
return list.ToList();
}
/// <summary>
/// 添加折扣
/// </summary>
public static bool AddPlayer(int userId, float discount) {
string key = GetPlayerKey();
return dbp.HashSet(key, userId, discount);
}
/// <summary>
/// 移除折扣
/// </summary>
public static bool RemovePlayer(int userId) {
string key = GetPlayerKey();
return dbp.HashDelete(key, userId);
}
/// <summary>
/// 获取折扣
/// </summary>
public static float GetPlayer(int userId) {
string key = GetPlayerKey();
var value = dbp.HashGet(key, userId);
if (value.HasValue && float.TryParse(value, out var discount))
{
return discount;
}
return 1;
}
#endregion
#region
private static string GetPlayerClubLimitKey(int userId) {
return $"{baseKey}:PlayerClubLimit:{userId}";
}
/// <summary>
/// 添加玩家俱乐部转入限制
/// </summary>
public static bool AddPlayerClubLimit(int userId, int clubId) {
string key = GetPlayerClubLimitKey(userId);
return dbp.SetAdd(key,clubId);
}
public static bool AddPlayerClubLimit(int userId, List<int> ids) {
string key = GetPlayerClubLimitKey(userId);
dbp.KeyDelete(key);
RedisValue[] redisValues = ids.Select(id => (RedisValue)id).ToArray();
if (redisValues.Length == 0)
return true;
return dbp.SetAdd(key, redisValues) > 0;
}
public static bool RemovePlayerClubLimit(int userId) {
string key = GetPlayerClubLimitKey(userId);
return dbp.KeyDelete(key);
}
/// <summary>
/// 是否允许转入房卡
/// </summary>
public static bool IsPlayerClubGiveEnable(int userId, int clubId) {
string key = GetPlayerClubLimitKey(userId);
if (!dbp.KeyExists(key)) return true; // 不存在key就没有限制都可以转入
return dbp.SetContains(key, clubId); // 存在key只能转入对应的俱乐部
}
/// <summary>
/// 获取玩家俱乐部转入限制
/// </summary>
public static List<int> GetPlayerClubLimit(int userId)
{
string key = GetPlayerClubLimitKey(userId);
if (!dbp.KeyExists(key)) return new List<int>();
return dbp.SetMembers(key).Select(x=>int.Parse(x)).ToList();
}
#endregion
#region
public static (int TotalNum, int GiveNum) CalPlayerCardWithDiscount(int userId, int cardCnt)
{
var discount = GetPlayer(userId);
if (discount <=0 || discount >= 1) return (cardCnt, 0);
var totalNum = (int)Math.Round(cardCnt / discount);
var giveNum = totalNum - cardCnt;
return (totalNum, giveNum);
}
public static (int TotalNum, int GiveNum) CalClubCardWithDiscount(int clubId, int cardCnt)
{
var discount = GetClub(clubId);
if (discount <= 0 || discount >= 1) return (cardCnt, 0);
var totalNum = (int)Math.Round(cardCnt / discount);
var giveNum = totalNum - cardCnt;
return (totalNum, giveNum);
}
#endregion
}
}