1212
This commit is contained in:
@@ -24,16 +24,5 @@ namespace Application.Domain.Entity
|
|||||||
[SugarColumn(IsNullable = true)]
|
[SugarColumn(IsNullable = true)]
|
||||||
public long? gold { get; set; }
|
public long? gold { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 师德
|
|
||||||
/// </summary>
|
|
||||||
[SugarColumn(IsNullable = true)]
|
|
||||||
public long? teach { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 声望
|
|
||||||
/// </summary>
|
|
||||||
[SugarColumn(IsNullable = true)]
|
|
||||||
public long? renown { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Application.Domain.Entity
|
||||||
|
{
|
||||||
|
[Tenant("Kg.SeaTime.Game")]
|
||||||
|
public class unit_user_data
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// userId
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsPrimaryKey = true, Length = 50)]
|
||||||
|
public string userId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 师德
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsNullable = true)]
|
||||||
|
public long? teach { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 声望
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsNullable = true)]
|
||||||
|
public long? renown { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 罪恶值
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsNullable = true)]
|
||||||
|
public long? enemy { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 魅力
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsNullable = true)]
|
||||||
|
public long? charm { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Application.Domain.Entity
|
||||||
|
{
|
||||||
|
[Tenant("Kg.SeaTime.Game")]
|
||||||
|
public class unit_user_temp
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// userId
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsPrimaryKey = true, Length = 50)]
|
||||||
|
public string userId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// areaId
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsNullable = true)]
|
||||||
|
public int? areaId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// lev
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsNullable = true)]
|
||||||
|
public int? lev { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 等级更新时间
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsNullable = true)]
|
||||||
|
public long? upTime { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 人品
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(Length = 18, IsNullable = true)]
|
||||||
|
public decimal? luck { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 评分
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(Length = 18, IsNullable = true)]
|
||||||
|
public decimal? score { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 攻击
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(Length = 18, IsNullable = true)]
|
||||||
|
public decimal? atk { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 防御
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(Length = 18, IsNullable = true)]
|
||||||
|
public decimal? defense { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 敏捷
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(Length = 18, IsNullable = true)]
|
||||||
|
public decimal? agility { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 体力
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(Length = 18, IsNullable = true)]
|
||||||
|
public decimal? upBlood { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 士气
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(Length = 18, IsNullable = true)]
|
||||||
|
public decimal? upMorale { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
namespace Application.Domain.Entity;
|
||||||
|
|
||||||
|
public class FightRemoveData
|
||||||
|
{
|
||||||
|
public string code { get; set; }
|
||||||
|
public string par { get; set; }
|
||||||
|
public int count { get; set; }
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@ public class FightResultModel
|
|||||||
public int myHarm { get; set; }
|
public int myHarm { get; set; }
|
||||||
public int otHarm { get; set; }
|
public int otHarm { get; set; }
|
||||||
public List<string> myStateData { get; set; }
|
public List<string> myStateData { get; set; }
|
||||||
public List<dynamic> myRemData { get; set; }
|
public List<FightRemoveData> myRemData { get; set; }
|
||||||
public List<string> otStateData { get; set; }
|
public List<string> otStateData { get; set; }
|
||||||
public List<dynamic> otRemData { get; set; }
|
public List<FightRemoveData> otRemData { get; set; }
|
||||||
}
|
}
|
||||||
10
Service/Application.Domain.Entity/model/GameRankModel.cs
Normal file
10
Service/Application.Domain.Entity/model/GameRankModel.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
namespace Application.Domain.Entity;
|
||||||
|
|
||||||
|
public class GameRankModel
|
||||||
|
{
|
||||||
|
public string userId { get; set; }
|
||||||
|
public UserModel user { get; set; }
|
||||||
|
public string sign { get; set; }
|
||||||
|
public string par { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
10
Service/Application.Domain.Entity/model/OnHookAwardModel.cs
Normal file
10
Service/Application.Domain.Entity/model/OnHookAwardModel.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
namespace Application.Domain.Entity;
|
||||||
|
|
||||||
|
public class OnHookAwardModel
|
||||||
|
{
|
||||||
|
public string userId { get; set; }
|
||||||
|
public long exp { get; set; }
|
||||||
|
public long copper { get; set; }
|
||||||
|
public long useTime { get; set; }
|
||||||
|
public List<TowerGet> award { get; set; }
|
||||||
|
}
|
||||||
@@ -17,6 +17,7 @@
|
|||||||
public decimal luck { get; set; }//幸运
|
public decimal luck { get; set; }//幸运
|
||||||
public int weight { get; set; }//负重
|
public int weight { get; set; }//负重
|
||||||
public int lev { get; set; }//等级
|
public int lev { get; set; }//等级
|
||||||
|
public long upTime { get; set; }
|
||||||
public int minAtk { get; set; }//最小攻击
|
public int minAtk { get; set; }//最小攻击
|
||||||
public int maxAtk { get; set; }//最大攻击
|
public int maxAtk { get; set; }//最大攻击
|
||||||
public int defense { get; set; }//防御
|
public int defense { get; set; }//防御
|
||||||
|
|||||||
@@ -10,8 +10,15 @@ namespace Application.Domain
|
|||||||
{
|
{
|
||||||
public enum BusEventsName
|
public enum BusEventsName
|
||||||
{
|
{
|
||||||
HandleOnHook,//处理挂机
|
|
||||||
PutFightAward,//战斗奖励事件
|
PutFightAward,//战斗奖励事件
|
||||||
|
PutOnHookAward,//发放挂机奖励
|
||||||
|
HandleOnHook,//处理挂机
|
||||||
|
HandleUpdateRank,//更新排名
|
||||||
|
HandleOnlineTime,//处理在线时间
|
||||||
|
HandleCreateMonster,//处理创建的怪物
|
||||||
|
HandleFightData,//处理战斗日志数据
|
||||||
|
HandleExchangeData,//处理兑换数据
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,22 +3,87 @@
|
|||||||
public class BusEventsSubscriber : IEventSubscriber
|
public class BusEventsSubscriber : IEventSubscriber
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 处理贡献提成
|
/// 处理战斗结束相关(含奖励发放)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="context"></param>
|
/// <param name="context"></param>
|
||||||
[EventSubscribe(BusEventsEnum.BusEventsName.PutFightAward, NumRetries = 0)]
|
[EventSubscribe(BusEventsEnum.BusEventsName.PutFightAward, NumRetries = 0,RetryTimeout = 999999999)]
|
||||||
public async Task HandleQueueBonus(EventHandlerExecutingContext context)
|
public async Task PutFightAward(EventHandlerExecutingContext context)
|
||||||
{
|
{
|
||||||
var data = context.GetPayload<game_fight_data>();
|
var data = context.GetPayload<game_fight_data>();
|
||||||
var fightService = App.GetService<IGameFightService>();
|
var fightService = App.GetService<IGameFightService>();
|
||||||
await fightService.HandleFight(data);
|
await fightService.HandleFight(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 发放挂机奖励
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
[EventSubscribe(BusEventsEnum.BusEventsName.PutOnHookAward, NumRetries = 0,RetryTimeout = 999999999)]
|
||||||
|
public async Task PutOnHookAward(EventHandlerExecutingContext context)
|
||||||
|
{
|
||||||
|
var data = context.GetPayload<OnHookAwardModel>();
|
||||||
|
var hookService = App.GetService<IOnHookService>();
|
||||||
|
await hookService.HandleOnHookGoods(data);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 处理挂机
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
[EventSubscribe(BusEventsEnum.BusEventsName.HandleOnHook, NumRetries = 0,RetryTimeout = 999999999)]
|
[EventSubscribe(BusEventsEnum.BusEventsName.HandleOnHook, NumRetries = 0,RetryTimeout = 999999999)]
|
||||||
public async Task HandleOnHook(EventHandlerExecutingContext context)
|
public async Task HandleOnHook(EventHandlerExecutingContext context)
|
||||||
{
|
{
|
||||||
var hookService = App.GetService<IOnHookService>();
|
var hookService = App.GetService<IOnHookService>();
|
||||||
await hookService.HandleHook();
|
await hookService.HandleHook();
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 处理排行榜
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
[EventSubscribe(BusEventsEnum.BusEventsName.HandleUpdateRank, NumRetries = 0,RetryTimeout = 999999999)]
|
||||||
|
public async Task HandleUpdateRank(EventHandlerExecutingContext context)
|
||||||
|
{
|
||||||
|
var rankService = App.GetService<IRankService>();
|
||||||
|
await rankService.HandleRank();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 处理在线时间
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
[EventSubscribe(BusEventsEnum.BusEventsName.HandleOnlineTime, NumRetries = 0,RetryTimeout = 999999999)]
|
||||||
|
public async Task HandleOnlineTime(EventHandlerExecutingContext context)
|
||||||
|
{
|
||||||
|
var attrService = App.GetService<IUnitUserAttrService>();
|
||||||
|
await attrService.HandleOnLineTimeData();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 处理生成的怪物
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
[EventSubscribe(BusEventsEnum.BusEventsName.HandleCreateMonster, NumRetries = 0,RetryTimeout = 999999999)]
|
||||||
|
public async Task HandleCreateMonster(EventHandlerExecutingContext context)
|
||||||
|
{
|
||||||
|
var monsterService = App.GetService<IGameMonsterService>();
|
||||||
|
await monsterService.HandleCreateMonster();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 处理战斗日志记录
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
[EventSubscribe(BusEventsEnum.BusEventsName.HandleFightData, NumRetries = 0,RetryTimeout = 999999999)]
|
||||||
|
public async Task HandleFightData(EventHandlerExecutingContext context)
|
||||||
|
{
|
||||||
|
var fightService = App.GetService<IGameFightService>();
|
||||||
|
await fightService.HandleFightData();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 处理兑换记录
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
[EventSubscribe(BusEventsEnum.BusEventsName.HandleExchangeData, NumRetries = 0,RetryTimeout = 999999999)]
|
||||||
|
public async Task HandleExchangeData(EventHandlerExecutingContext context)
|
||||||
|
{
|
||||||
|
var exchangeService = App.GetService<IExchangeService>();
|
||||||
|
await exchangeService.HandleExchangeLogData();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -10,7 +10,7 @@ public static class AccEnum
|
|||||||
teach,//师德
|
teach,//师德
|
||||||
renown,//声望
|
renown,//声望
|
||||||
charm,//魅力
|
charm,//魅力
|
||||||
evil,//罪恶值
|
enemy,//罪恶值
|
||||||
}
|
}
|
||||||
public enum Name
|
public enum Name
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ public static class GameChatEnum
|
|||||||
Team,//队伍
|
Team,//队伍
|
||||||
Region,//全区
|
Region,//全区
|
||||||
Dress,//全服
|
Dress,//全服
|
||||||
System//系统
|
System,//系统
|
||||||
|
Notice,//通知
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -10,6 +10,11 @@ public static class GameEnum
|
|||||||
public enum JobCode
|
public enum JobCode
|
||||||
{
|
{
|
||||||
OnHook,//定时任务
|
OnHook,//定时任务
|
||||||
|
UpdateRank,//更新排名
|
||||||
|
UpdateOnlineTime,//更新在线时间
|
||||||
|
UpdateCreateMonster,//更新创建得怪物
|
||||||
|
UpdateFightData,//更新战斗信息
|
||||||
|
UpdateExchangeData,//更新兑换的记录
|
||||||
}
|
}
|
||||||
public enum PropCode//游戏资源编码
|
public enum PropCode//游戏资源编码
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ public static class GoodsEnum
|
|||||||
State,//状态物品
|
State,//状态物品
|
||||||
Ship,//船只
|
Ship,//船只
|
||||||
Practise,//修炼道具
|
Practise,//修炼道具
|
||||||
|
Durability,//负重道具
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum DrugCls
|
public enum DrugCls
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ public static class MessageEnum
|
|||||||
Friend,//交友消息
|
Friend,//交友消息
|
||||||
Marry,//婚姻消息
|
Marry,//婚姻消息
|
||||||
Trade,//交易通知
|
Trade,//交易通知
|
||||||
|
Notice,//普通通知
|
||||||
}
|
}
|
||||||
public enum BroadcastCode
|
public enum BroadcastCode
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -49,6 +49,10 @@ public class MessageHandle
|
|||||||
{
|
{
|
||||||
return new MessageHandleResult() { success = true, msg = "消息通知已处理!" };
|
return new MessageHandleResult() { success = true, msg = "消息通知已处理!" };
|
||||||
}
|
}
|
||||||
|
else if (events.code == nameof(MessageEnum.EventCode.Notice))
|
||||||
|
{
|
||||||
|
return new MessageHandleResult() { success = true, msg = "消息通知已处理!" };
|
||||||
|
}
|
||||||
|
|
||||||
return new MessageHandleResult() { success = false, msg = "暂不支持该操作处理!" };
|
return new MessageHandleResult() { success = false, msg = "暂不支持该操作处理!" };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,4 +6,5 @@ public interface IExchangeService
|
|||||||
Task<game_exchange> GetExchangeInfo(int exId);
|
Task<game_exchange> GetExchangeInfo(int exId);
|
||||||
Task<int> GetExchangeCount(string userId, int exId);
|
Task<int> GetExchangeCount(string userId, int exId);
|
||||||
Task<bool> AddUserExchangeLog(string userId, int exId, int count, long endTime);
|
Task<bool> AddUserExchangeLog(string userId, int exId, int count, long endTime);
|
||||||
|
Task HandleExchangeLogData();
|
||||||
}
|
}
|
||||||
@@ -9,4 +9,5 @@ public interface IOnHookService
|
|||||||
|
|
||||||
Task<bool> StopOnHook(string userId);
|
Task<bool> StopOnHook(string userId);
|
||||||
Task HandleHook();
|
Task HandleHook();
|
||||||
|
Task HandleOnHookGoods(OnHookAwardModel data);
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
namespace Application.Domain;
|
||||||
|
|
||||||
|
public interface IRankService
|
||||||
|
{
|
||||||
|
Task<string> GetRankUpdateTime();
|
||||||
|
Task<List<GameRankModel>> GetGameRank(int type, int area, int page, int limit, RefAsync<int> total);
|
||||||
|
Task<List<GameRankModel>> GetGameCopperRank(int area, int page, int limit, RefAsync<int> total);
|
||||||
|
Task<List<GameRankModel>> GetGameTeachAndRenownRank(int type, int area, int page, int limit, RefAsync<int> total);
|
||||||
|
Task HandleRank();
|
||||||
|
}
|
||||||
@@ -14,6 +14,7 @@ public interface IGameEquService
|
|||||||
Task<List<unit_user_equ>> GetUserEquData(string userId, int type, string equName, int PageIndex, int PageSize,
|
Task<List<unit_user_equ>> GetUserEquData(string userId, int type, string equName, int PageIndex, int PageSize,
|
||||||
RefAsync<int> Total, bool isRemOn = false, bool isRemLock = false);
|
RefAsync<int> Total, bool isRemOn = false, bool isRemLock = false);
|
||||||
|
|
||||||
|
Task<List<unit_user_equ>> GetUserEquData(string userId, string query);
|
||||||
Task<List<unit_user_equ>> GetUserEquData(string userId, int equId);
|
Task<List<unit_user_equ>> GetUserEquData(string userId, int equId);
|
||||||
Task<List<unit_user_equ>> GetUserEquData(string userId, string code, List<string> noUeId);
|
Task<List<unit_user_equ>> GetUserEquData(string userId, string code, List<string> noUeId);
|
||||||
Task<unit_user_equ> GetUserEquInfo(string ueId);
|
Task<unit_user_equ> GetUserEquInfo(string ueId);
|
||||||
@@ -62,6 +63,13 @@ public interface IGameEquService
|
|||||||
|
|
||||||
Task<int> GetUserEquWeightSum(string userId);
|
Task<int> GetUserEquWeightSum(string userId);
|
||||||
Task<game_equ_make> GetMakeEquByGoodsId(int goodsId);
|
Task<game_equ_make> GetMakeEquByGoodsId(int goodsId);
|
||||||
|
Task RemoveUserOnEqu(string userId, string type, int count);
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 耐久
|
||||||
|
|
||||||
|
Task UpdateUserOnEquDurability(string userId);
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -16,7 +16,7 @@ public interface IGameFightService
|
|||||||
string userId, long exp = 0, long copper = 0, long petExp = 0, string award = "", string pars = "");
|
string userId, long exp = 0, long copper = 0, long petExp = 0, string award = "", string pars = "");
|
||||||
|
|
||||||
Task<bool> SetFightWin(game_fight_data fightData, string winUser,bool setDefMap=true);
|
Task<bool> SetFightWin(game_fight_data fightData, string winUser,bool setDefMap=true);
|
||||||
|
Task HandleFightData();
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
#region 战斗相关
|
#region 战斗相关
|
||||||
@@ -28,7 +28,7 @@ public interface IGameFightService
|
|||||||
Task<game_map_goods> GetFightGoodsInfo(string mapId, string mgId);
|
Task<game_map_goods> GetFightGoodsInfo(string mapId, string mgId);
|
||||||
Task RemoveFightGoods(string mapId, string mgId);
|
Task RemoveFightGoods(string mapId, string mgId);
|
||||||
Task AutoUseDrug(UserAttrModel user, game_fight_data fight);
|
Task AutoUseDrug(UserAttrModel user, game_fight_data fight);
|
||||||
Task HandelFightEnd(string userId, List<dynamic> data);
|
Task HandelFightEnd(string userId, List<FightRemoveData> data);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -20,6 +20,7 @@ public interface IGameMapService
|
|||||||
Task<string> GetUserOnMapId(string userId);
|
Task<string> GetUserOnMapId(string userId);
|
||||||
Task<game_city_map> GetUserOnToMapInfo(string userId);
|
Task<game_city_map> GetUserOnToMapInfo(string userId);
|
||||||
Task<unit_user_online> GetUserOnMap(string userId);
|
Task<unit_user_online> GetUserOnMap(string userId);
|
||||||
|
Task UpdateUserOnMap(string userId);
|
||||||
Task UpdateUserOnMap(string userId, string ip, string mapId);
|
Task UpdateUserOnMap(string userId, string ip, string mapId);
|
||||||
Task<bool> UpdateUserOnMap(unit_user_online data, string mapId);
|
Task<bool> UpdateUserOnMap(unit_user_online data, string mapId);
|
||||||
Task<UserOnMap> GetUserOnMapInfo(string userId);
|
Task<UserOnMap> GetUserOnMapInfo(string userId);
|
||||||
|
|||||||
@@ -14,6 +14,9 @@ public interface IGameMonsterService
|
|||||||
int count = 1, int time = 0, string par = "");
|
int count = 1, int time = 0, string par = "");
|
||||||
|
|
||||||
Task<unit_user_monster> GetCreateMonsterInfo(string umId);
|
Task<unit_user_monster> GetCreateMonsterInfo(string umId);
|
||||||
|
Task<bool> RemoveCreateMonster(string umId);
|
||||||
|
Task<bool> RemoveCreateMonster(unit_user_monster data);
|
||||||
|
Task HandleCreateMonster();
|
||||||
Task<List<MapMonsterModel>> GetMapMonster(string userId, string mapId, string teamId);
|
Task<List<MapMonsterModel>> GetMapMonster(string userId, string mapId, string teamId);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ public interface IUnitUserAccService
|
|||||||
|
|
||||||
Task<unit_user_copper> GetUserCopperInfo(string userId);
|
Task<unit_user_copper> GetUserCopperInfo(string userId);
|
||||||
Task<bool> UpdateUserCopper(string userId, int type, long count, string remark = "");
|
Task<bool> UpdateUserCopper(string userId, int type, long count, string remark = "");
|
||||||
|
Task<unit_user_data> GetUserDataInfo(string userId);
|
||||||
|
Task<bool> UpdateUserData(string userId, int type, string accType, long count, string remark = "");
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -44,7 +44,7 @@ public interface IUnitUserAttrService
|
|||||||
#region 在线时间
|
#region 在线时间
|
||||||
|
|
||||||
Task<bool> UpdateOnLineTime(string userId, string code, int time);
|
Task<bool> UpdateOnLineTime(string userId, string code, int time);
|
||||||
|
Task HandleOnLineTimeData();
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 药品栏
|
#region 药品栏
|
||||||
|
|||||||
@@ -17,14 +17,12 @@ public class ExchangeService(ISqlSugarClient DbClient, IRedisCache redis) : IExc
|
|||||||
|
|
||||||
public async Task<int> GetExchangeCount(string userId, int exId)
|
public async Task<int> GetExchangeCount(string userId, int exId)
|
||||||
{
|
{
|
||||||
int result = 0;
|
|
||||||
string key = $"{userId}_{exId}";
|
|
||||||
var db = DbClient.AsTenant().GetConnectionWithAttr<game_exchange_log>();
|
var db = DbClient.AsTenant().GetConnectionWithAttr<game_exchange_log>();
|
||||||
return await db.Queryable<game_exchange_log>().Where(it => it.userId == userId && it.exId == exId)
|
return await db.Queryable<game_exchange_log>().Where(it => it.userId == userId && it.exId == exId)
|
||||||
.SumAsync(it => (int)it.count);
|
.SumAsync(it => (int)it.count);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> AddUserExchangeLog(string userId, int exId, int count,long endTime)
|
public async Task<bool> AddUserExchangeLog(string userId, int exId, int count, long endTime)
|
||||||
{
|
{
|
||||||
game_exchange_log log = new game_exchange_log();
|
game_exchange_log log = new game_exchange_log();
|
||||||
log.ueId = StringAssist.NewGuid;
|
log.ueId = StringAssist.NewGuid;
|
||||||
@@ -38,4 +36,11 @@ public class ExchangeService(ISqlSugarClient DbClient, IRedisCache redis) : IExc
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task HandleExchangeLogData()
|
||||||
|
{
|
||||||
|
var db = DbClient.AsTenant().GetConnectionWithAttr<game_exchange_log>();
|
||||||
|
await db.Deleteable<game_exchange_log>().Where(it => it.endTime <= TimeExtend.GetTimeStampSeconds)
|
||||||
|
.ExecuteCommandAsync();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,8 @@
|
|||||||
|
|
||||||
namespace Application.Domain;
|
namespace Application.Domain;
|
||||||
|
|
||||||
public class GameAutoJobService(ISqlSugarClient DbClient, IRedisCache redis,ITimerJobManager jobManager) : IGameAutoJobService, ITransient
|
public class GameAutoJobService(ISqlSugarClient DbClient, IRedisCache redis, ITimerJobManager jobManager)
|
||||||
|
: IGameAutoJobService, ITransient
|
||||||
{
|
{
|
||||||
public async Task<List<game_job>> GetJobData()
|
public async Task<List<game_job>> GetJobData()
|
||||||
{
|
{
|
||||||
@@ -12,11 +13,12 @@ public class GameAutoJobService(ISqlSugarClient DbClient, IRedisCache redis,ITim
|
|||||||
|
|
||||||
public async Task<game_job> GetJobInfo(string jobId)
|
public async Task<game_job> GetJobInfo(string jobId)
|
||||||
{
|
{
|
||||||
string key = string.Format(BaseCache.BaseCacheKey,"JobData");
|
string key = string.Format(BaseCache.BaseCacheKey, "JobData");
|
||||||
if (await redis.HExistsHashAsync(key, jobId))
|
if (await redis.HExistsHashAsync(key, jobId))
|
||||||
{
|
{
|
||||||
return await redis.GetHashAsync<game_job>(key, jobId);
|
return await redis.GetHashAsync<game_job>(key, jobId);
|
||||||
}
|
}
|
||||||
|
|
||||||
var db = DbClient.AsTenant().GetConnectionWithAttr<game_job>();
|
var db = DbClient.AsTenant().GetConnectionWithAttr<game_job>();
|
||||||
var data = await db.Queryable<game_job>().Where(it => it.jobId == jobId).SingleAsync();
|
var data = await db.Queryable<game_job>().Where(it => it.jobId == jobId).SingleAsync();
|
||||||
await redis.AddHashAsync(key, jobId, data);
|
await redis.AddHashAsync(key, jobId, data);
|
||||||
@@ -53,12 +55,41 @@ public class GameAutoJobService(ISqlSugarClient DbClient, IRedisCache redis,ITim
|
|||||||
|
|
||||||
public async Task HandleJob(game_job data)
|
public async Task HandleJob(game_job data)
|
||||||
{
|
{
|
||||||
if (data.code == nameof(GameEnum.JobCode.OnHook))//挂机
|
if (data.code == nameof(GameEnum.JobCode.OnHook)) //挂机
|
||||||
{
|
{
|
||||||
var _eventPublisher = App.GetService<IEventPublisher>();
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
||||||
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleOnHook,
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleOnHook,
|
||||||
data));
|
data));
|
||||||
}
|
}
|
||||||
|
else if (data.code == nameof(GameEnum.JobCode.UpdateRank)) //更新排名
|
||||||
|
{
|
||||||
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
||||||
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleUpdateRank,
|
||||||
|
data));
|
||||||
|
}
|
||||||
|
else if (data.code == nameof(GameEnum.JobCode.UpdateOnlineTime)) //更新在线时间
|
||||||
|
{
|
||||||
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
||||||
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleOnlineTime,
|
||||||
|
data));
|
||||||
|
}
|
||||||
|
else if (data.code == nameof(GameEnum.JobCode.UpdateCreateMonster)) //更新创建得怪物
|
||||||
|
{
|
||||||
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
||||||
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleCreateMonster,
|
||||||
|
data));
|
||||||
|
}
|
||||||
|
else if (data.code == nameof(GameEnum.JobCode.UpdateFightData)) //更新战斗记录
|
||||||
|
{
|
||||||
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
||||||
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleFightData,
|
||||||
|
data));
|
||||||
|
}
|
||||||
|
else if (data.code == nameof(GameEnum.JobCode.UpdateExchangeData)) //更新兑换类记录
|
||||||
|
{
|
||||||
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
||||||
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.HandleExchangeData,
|
||||||
|
data));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -111,8 +111,9 @@ public class OnHookService(ISqlSugarClient DbClient, IRedisCache redis) : IOnHoo
|
|||||||
public async Task HandleHook()
|
public async Task HandleHook()
|
||||||
{
|
{
|
||||||
long onTime = TimeExtend.GetTimeStampSeconds;
|
long onTime = TimeExtend.GetTimeStampSeconds;
|
||||||
var accService = App.GetService<IUnitUserAccService>();
|
|
||||||
var attrService = App.GetService<IUnitUserAttrService>();
|
var attrService = App.GetService<IUnitUserAttrService>();
|
||||||
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
||||||
|
|
||||||
var db = DbClient.AsTenant().GetConnectionWithAttr<game_onhook>();
|
var db = DbClient.AsTenant().GetConnectionWithAttr<game_onhook>();
|
||||||
var data = await db.Queryable<game_onhook>().Where(it => it.status == 1).ToListAsync();
|
var data = await db.Queryable<game_onhook>().Where(it => it.status == 1).ToListAsync();
|
||||||
foreach (var hook in data)
|
foreach (var hook in data)
|
||||||
@@ -147,19 +148,74 @@ public class OnHookService(ISqlSugarClient DbClient, IRedisCache redis) : IOnHoo
|
|||||||
|
|
||||||
if (await UpdateOnHook(hook.userId, exp, copper))
|
if (await UpdateOnHook(hook.userId, exp, copper))
|
||||||
{
|
{
|
||||||
if (exp > 0)
|
OnHookAwardModel push = new OnHookAwardModel()
|
||||||
{
|
{
|
||||||
await attrService.UpdateUserExp(hook.userId, exp);
|
userId = hook.userId,
|
||||||
|
exp = exp,
|
||||||
|
copper = copper,
|
||||||
|
useTime = allTime,
|
||||||
|
award = award
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.PutOnHookAward,
|
||||||
|
push));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (copper > 0)
|
}
|
||||||
{
|
|
||||||
await accService.UpdateUserCopper(hook.userId, 1, copper, "挂机获得");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (award.Count > 0)
|
public async Task HandleOnHookGoods(OnHookAwardModel data)
|
||||||
{
|
{
|
||||||
await GameBus.UpdateBag(hook.userId, 1, award, "挂机获得");
|
var accService = App.GetService<IUnitUserAccService>();
|
||||||
|
var attrService = App.GetService<IUnitUserAttrService>();
|
||||||
|
var mapService = App.GetService<IGameMapService>();
|
||||||
|
var equService = App.GetService<IGameEquService>();
|
||||||
|
|
||||||
|
int onlineTime = Convert.ToInt32(data.useTime / 1000 / 60);
|
||||||
|
if (onlineTime > 0)
|
||||||
|
{
|
||||||
|
await attrService.UpdateOnLineTime(data.userId, "OnHook", onlineTime); //更新在线时间
|
||||||
|
}
|
||||||
|
|
||||||
|
await mapService.UpdateUserOnMap(data.userId);//更新在线
|
||||||
|
await equService.UpdateUserOnEquDurability(data.userId);//更新耐久
|
||||||
|
if (data.exp > 0)
|
||||||
|
{
|
||||||
|
await attrService.UpdateUserExp(data.userId, data.exp);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.copper > 0)
|
||||||
|
{
|
||||||
|
await accService.UpdateUserCopper(data.userId, 1, data.copper, "挂机获得");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.award.Count > 0)
|
||||||
|
{
|
||||||
|
var userService = App.GetService<IUnitUserService>();
|
||||||
|
var userConfig = await userService.GetUserConfigInfo(data.userId);
|
||||||
|
if (userConfig.autoBag != 0)
|
||||||
|
{
|
||||||
|
var weightService = App.GetService<IUnitUserWeight>();
|
||||||
|
bool auto = true;
|
||||||
|
foreach (var item in data.award)
|
||||||
|
{
|
||||||
|
if (auto == false)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (await weightService.CheckUserWeight(data.userId, item))
|
||||||
|
{
|
||||||
|
await GameBus.UpdateBag(data.userId, 1, item.code, item.parameter, item.count,
|
||||||
|
"挂机获得");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,193 @@
|
|||||||
|
namespace Application.Domain;
|
||||||
|
|
||||||
|
public class RankService(ISqlSugarClient DbClient, IRedisCache redis) : IRankService, ITransient
|
||||||
|
{
|
||||||
|
public async Task<string> GetRankUpdateTime()
|
||||||
|
{
|
||||||
|
string key = string.Format(BaseCache.BaseCacheKey, "RankTime");
|
||||||
|
if (await redis.ExistsAsync(key))
|
||||||
|
{
|
||||||
|
return await redis.GetAsync<string>(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
return "更新时间:/-/-/ 00:00:00";
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task SetRankUpdateTime()
|
||||||
|
{
|
||||||
|
string key = string.Format(BaseCache.BaseCacheKey, "RankTime");
|
||||||
|
await redis.SetAsync(key, $"更新时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<GameRankModel>> GetGameRank(int type, int area, int page, int limit, RefAsync<int> total)
|
||||||
|
{
|
||||||
|
var db = DbClient.AsTenant().GetConnectionWithAttr<unit_user_temp>();
|
||||||
|
var data = await db.Queryable<unit_user_temp>()
|
||||||
|
.WhereIF(area != 0, it => it.areaId == area)
|
||||||
|
.WhereIF(type == 0, it => it.lev > 30)
|
||||||
|
.WhereIF(type == 1, it => it.atk > 100)
|
||||||
|
.WhereIF(type == 2, it => it.defense > 100)
|
||||||
|
.WhereIF(type == 3, it => it.agility > 100)
|
||||||
|
.WhereIF(type == 4, it => it.upBlood > 100)
|
||||||
|
.WhereIF(type == 5, it => it.upMorale > 0)
|
||||||
|
.WhereIF(type == 6, it => it.luck > 0)
|
||||||
|
.WhereIF(type == 7, it => it.score > 1000)
|
||||||
|
.OrderByIF(type == 0, it => it.lev, OrderByType.Desc)
|
||||||
|
.OrderByIF(type == 0, it => it.upTime, OrderByType.Desc)
|
||||||
|
.OrderByIF(type == 1, it => it.atk, OrderByType.Desc)
|
||||||
|
.OrderByIF(type == 2, it => it.defense, OrderByType.Desc)
|
||||||
|
.OrderByIF(type == 3, it => it.agility, OrderByType.Desc)
|
||||||
|
.OrderByIF(type == 4, it => it.upBlood, OrderByType.Desc)
|
||||||
|
.OrderByIF(type == 5, it => it.upMorale, OrderByType.Desc)
|
||||||
|
.OrderByIF(type == 6, it => it.luck, OrderByType.Desc)
|
||||||
|
.OrderByIF(type == 7, it => it.score, OrderByType.Desc)
|
||||||
|
.Take(100)
|
||||||
|
.ToListAsync();
|
||||||
|
total = data.Count;
|
||||||
|
data = PageExtend.GetPageList(data, page, limit);
|
||||||
|
List<GameRankModel> result = new List<GameRankModel>();
|
||||||
|
foreach (var item in data)
|
||||||
|
{
|
||||||
|
GameRankModel temp = new GameRankModel();
|
||||||
|
temp.userId = item.userId;
|
||||||
|
temp.user = await UserModelTool.GetUserView(item.userId);
|
||||||
|
temp.sign = GetRankSign(item, type);
|
||||||
|
temp.par = "";
|
||||||
|
result.Add(temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetRankSign(unit_user_temp data, int type)
|
||||||
|
{
|
||||||
|
string result = "0";
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
result = $"{Convert.ToString(data.lev)}级";
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
result = Convert.ToString(data.atk);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
result = Convert.ToString(data.defense);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
result = Convert.ToString(data.agility);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
result = Convert.ToString(data.upBlood);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
result = Convert.ToString(data.upMorale);
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
result = (Convert.ToDecimal(data.luck) * 100).ToString("#0");
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
result = Convert.ToDecimal(data.score).ToString("#0.00");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<GameRankModel>> GetGameCopperRank(int area, int page, int limit, RefAsync<int> total)
|
||||||
|
{
|
||||||
|
var db = DbClient.AsTenant().GetConnectionWithAttr<unit_user_copper>();
|
||||||
|
var data = await db.Queryable<unit_user_copper>().LeftJoin<unit_user>((uc, u) => uc.userId == u.userId)
|
||||||
|
.WhereIF(area != 0, (uc, u) => u.areaId == area)
|
||||||
|
.Where((uc, u) => uc.copper > 1000000)
|
||||||
|
.Select<unit_user_copper>()
|
||||||
|
.OrderByDescending(uc => uc.copper)
|
||||||
|
.Take(100)
|
||||||
|
.ToListAsync();
|
||||||
|
total = data.Count;
|
||||||
|
data = PageExtend.GetPageList(data, page, limit);
|
||||||
|
List<GameRankModel> result = new List<GameRankModel>();
|
||||||
|
foreach (var item in data)
|
||||||
|
{
|
||||||
|
GameRankModel temp = new GameRankModel();
|
||||||
|
temp.userId = item.userId;
|
||||||
|
temp.user = await UserModelTool.GetUserView(item.userId);
|
||||||
|
temp.sign = GameTool.ConvertCopperName((long)item.copper);
|
||||||
|
temp.par = "";
|
||||||
|
result.Add(temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
public async Task<List<GameRankModel>> GetGameTeachAndRenownRank(int type, int area, int page, int limit, RefAsync<int> total)
|
||||||
|
{
|
||||||
|
var db = DbClient.AsTenant().GetConnectionWithAttr<unit_user_data>();
|
||||||
|
var data = await db.Queryable<unit_user_data>().LeftJoin<unit_user>((uc, u) => uc.userId == u.userId)
|
||||||
|
.WhereIF(area != 0, (uc, u) => u.areaId == area)
|
||||||
|
.WhereIF(type == 9, (uc, u) => uc.teach > 0)
|
||||||
|
.WhereIF(type == 10, (uc, u) => uc.renown > 0)
|
||||||
|
.WhereIF(type == 11, (uc, u) => uc.charm > 0)
|
||||||
|
.Select<unit_user_data>()
|
||||||
|
.OrderByIF(type == 9, uc => uc.teach, OrderByType.Desc)
|
||||||
|
.OrderByIF(type == 10, uc => uc.renown, OrderByType.Desc)
|
||||||
|
.OrderByIF(type == 11, uc => uc.charm, OrderByType.Desc)
|
||||||
|
.Take(100)
|
||||||
|
.ToListAsync();
|
||||||
|
total = data.Count;
|
||||||
|
data = PageExtend.GetPageList(data, page, limit);
|
||||||
|
List<GameRankModel> result = new List<GameRankModel>();
|
||||||
|
foreach (var item in data)
|
||||||
|
{
|
||||||
|
GameRankModel temp = new GameRankModel();
|
||||||
|
temp.userId = item.userId;
|
||||||
|
temp.user = await UserModelTool.GetUserView(item.userId);
|
||||||
|
if (type == 9)
|
||||||
|
{
|
||||||
|
temp.sign = item.teach.ToString();
|
||||||
|
}
|
||||||
|
else if(type==10)
|
||||||
|
{
|
||||||
|
temp.sign = item.renown.ToString();
|
||||||
|
}
|
||||||
|
temp.par = "";
|
||||||
|
result.Add(temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
public async Task HandleRank()
|
||||||
|
{
|
||||||
|
var db = DbClient.AsTenant().GetConnectionWithAttr<unit_user_temp>();
|
||||||
|
await db.Deleteable<unit_user_temp>().ExecuteCommandAsync();
|
||||||
|
|
||||||
|
long endTime = TimeExtend.GetTimeStampBySeconds(TimeAssist.GetDateTimeYMD(0));
|
||||||
|
var data = await db.Queryable<unit_user_online>().Where(it => it.upTime > endTime).ToListAsync();
|
||||||
|
var attrService = App.GetService<IUnitUserAttrService>();
|
||||||
|
List<unit_user_temp> addData = new List<unit_user_temp>();
|
||||||
|
foreach (var item in data)
|
||||||
|
{
|
||||||
|
var attrInfo = await attrService.GetUserAttrModel(item.userId);
|
||||||
|
unit_user_temp temp = new unit_user_temp()
|
||||||
|
{
|
||||||
|
userId = attrInfo.id,
|
||||||
|
areaId = attrInfo.area,
|
||||||
|
lev = attrInfo.lev,
|
||||||
|
upTime = attrInfo.upTime,
|
||||||
|
luck = attrInfo.luck,
|
||||||
|
score = attrInfo.score,
|
||||||
|
atk = attrInfo.maxAtk,
|
||||||
|
defense = attrInfo.defense,
|
||||||
|
agility = attrInfo.agility,
|
||||||
|
upBlood = attrInfo.upBlood,
|
||||||
|
upMorale = attrInfo.upMorale
|
||||||
|
};
|
||||||
|
addData.Add(temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (addData.Count > 0)
|
||||||
|
{
|
||||||
|
await db.Insertable(addData).ExecuteCommandAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
await SetRankUpdateTime();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -136,6 +136,10 @@ public class GameChatService : IGameChatService, ITransient
|
|||||||
case "System":
|
case "System":
|
||||||
chat.delTime = TimeExtend.GetTimeStampBySeconds(DateTime.Now.AddHours(6));
|
chat.delTime = TimeExtend.GetTimeStampBySeconds(DateTime.Now.AddHours(6));
|
||||||
break;
|
break;
|
||||||
|
case "Notice":
|
||||||
|
chat.delTime = TimeExtend.GetTimeStampBySeconds(DateTime.Now.AddDays(1));
|
||||||
|
chat.code = nameof(GameChatEnum.Code.System);
|
||||||
|
break;
|
||||||
case "Group":
|
case "Group":
|
||||||
chat.delTime = TimeExtend.GetTimeStampBySeconds(DateTime.Now.AddHours(6));
|
chat.delTime = TimeExtend.GetTimeStampBySeconds(DateTime.Now.AddHours(6));
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -55,6 +55,15 @@ public class GameEquService(ISqlSugarClient DbClient, IRedisCache redis) : IGame
|
|||||||
.OrderByDescending(it => it.lev)
|
.OrderByDescending(it => it.lev)
|
||||||
.OrderByDescending(it => it.ueId).ToPageListAsync(PageIndex, PageSize, Total);
|
.OrderByDescending(it => it.ueId).ToPageListAsync(PageIndex, PageSize, Total);
|
||||||
}
|
}
|
||||||
|
public async Task<List<unit_user_equ>> GetUserEquData(string userId,string query)
|
||||||
|
{
|
||||||
|
long onTime = TimeExtend.GetTimeStampSeconds;
|
||||||
|
var db = DbClient.AsTenant().GetConnectionWithAttr<unit_user_equ>();
|
||||||
|
return await db.Queryable<unit_user_equ>().Where(it => it.userId == userId)
|
||||||
|
.WhereIF(!string.IsNullOrEmpty(query),
|
||||||
|
it => it.equName.Contains(query) || it.unitEquName.Contains(query))
|
||||||
|
.ToListAsync();
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<List<unit_user_equ>> GetUserEquData(string userId, int equId)
|
public async Task<List<unit_user_equ>> GetUserEquData(string userId, int equId)
|
||||||
{
|
{
|
||||||
@@ -369,6 +378,7 @@ public class GameEquService(ISqlSugarClient DbClient, IRedisCache redis) : IGame
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var opData = userEqu.Take(count).ToList();
|
var opData = userEqu.Take(count).ToList();
|
||||||
return await DeductUserEqu(userId, opData, remark);
|
return await DeductUserEqu(userId, opData, remark);
|
||||||
}
|
}
|
||||||
@@ -595,6 +605,7 @@ public class GameEquService(ISqlSugarClient DbClient, IRedisCache redis) : IGame
|
|||||||
result.AddRange(attr.AttrItem);
|
result.AddRange(attr.AttrItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await redis.SetAsync(key, result, 300);
|
await redis.SetAsync(key, result, 300);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -834,5 +845,90 @@ public class GameEquService(ISqlSugarClient DbClient, IRedisCache redis) : IGame
|
|||||||
return onMakeEqu;
|
return onMakeEqu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task RemoveUserOnEqu(string userId, string type, int count)
|
||||||
|
{
|
||||||
|
var userOnEqu = await GetUserOnEqu(userId);
|
||||||
|
userOnEqu = userOnEqu.FindAll(it => it.code == type);
|
||||||
|
if (userOnEqu.Count >= count)
|
||||||
|
{
|
||||||
|
var opEqu = userOnEqu.Take(count).ToList();
|
||||||
|
foreach (var item in opEqu)
|
||||||
|
{
|
||||||
|
await EquOnOrDown(item, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 耐久
|
||||||
|
|
||||||
|
private async Task<long> GetUserDurabilityTimer(string userId)
|
||||||
|
{
|
||||||
|
string key = string.Format(UserCache.BaseCacheKeys, "Timer", "Durability");
|
||||||
|
if (await redis.HExistsHashAsync(key, userId))
|
||||||
|
{
|
||||||
|
return await redis.GetHashAsync<long>(key, userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
long result = TimeExtend.GetTimeStampSeconds + 5 * 60;
|
||||||
|
await redis.AddHashAsync(key, userId, result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task SetUserDurabilityTimer(string userId, long endTime)
|
||||||
|
{
|
||||||
|
string key = string.Format(UserCache.BaseCacheKeys, "Timer", "Durability");
|
||||||
|
await redis.AddHashAsync(key, userId, endTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task UpdateUserOnEquDurability(string userId)
|
||||||
|
{
|
||||||
|
long onTime = TimeExtend.GetTimeStampSeconds;
|
||||||
|
long endTime = await GetUserDurabilityTimer(userId);
|
||||||
|
if (onTime > endTime) //进行耐久更新
|
||||||
|
{
|
||||||
|
await SetUserDurabilityTimer(userId, onTime + 5 * 60);
|
||||||
|
var onEquData = await GetUserOnEqu(userId);
|
||||||
|
List<string> noCode = new List<string>() { "Fashion", "Decorate" };
|
||||||
|
onEquData = onEquData.FindAll(it => it.durability > 0 && !noCode.Contains(it.code));
|
||||||
|
if (onEquData.Count > 0)
|
||||||
|
{
|
||||||
|
var attrService = App.GetService<IUnitUserAttrService>();
|
||||||
|
var stockDurability = await attrService.GetUserStock(userId, nameof(GameEnum.GameStockCode.Durability));
|
||||||
|
if (stockDurability.Count > 0)
|
||||||
|
{
|
||||||
|
if (stockDurability.Any(it => it.type == nameof(GameEnum.GameStockType.Time)))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var onStock = stockDurability.Find(it =>
|
||||||
|
it.type == nameof(GameEnum.GameStockType.Number) && it.sign >= onEquData.Count);
|
||||||
|
if (onStock != null)
|
||||||
|
{
|
||||||
|
onStock.sign = onStock.sign - onEquData.Count;
|
||||||
|
if (await attrService.UpdateUserStock(onStock))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var item in onEquData)
|
||||||
|
{
|
||||||
|
item.durability = item.durability - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
var db = DbClient.AsTenant().GetConnectionWithAttr<unit_user_equ>();
|
||||||
|
bool result = await db.Updateable(onEquData).ExecuteCommandAsync() > 0;
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
await ClearUserOnEqu(userId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -39,12 +39,6 @@ public class GameFightService(ISqlSugarClient DbClient, IRedisCache redis) : IGa
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task RemoveUserFight(string userId)
|
|
||||||
{
|
|
||||||
string key = string.Format(FightCache.FightCacheKey, "UserFight");
|
|
||||||
bool result = await redis.AddHashAsync(key, userId, new List<string>());
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 战斗信息
|
#region 战斗信息
|
||||||
@@ -167,7 +161,7 @@ public class GameFightService(ISqlSugarClient DbClient, IRedisCache redis) : IGa
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> SetFightWin(game_fight_data fightData, string winUser,bool setDefMap=true)
|
public async Task<bool> SetFightWin(game_fight_data fightData, string winUser, bool setDefMap = true)
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
long okTime = TimeExtend.GetTimeStampMilliseconds;
|
long okTime = TimeExtend.GetTimeStampMilliseconds;
|
||||||
@@ -215,7 +209,6 @@ public class GameFightService(ISqlSugarClient DbClient, IRedisCache redis) : IGa
|
|||||||
nameof(UserEnum.AttrCode.Monster), winUser, fightData.userId, okTime);
|
nameof(UserEnum.AttrCode.Monster), winUser, fightData.userId, okTime);
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
await RemoveUserFight(fightData.userId);
|
|
||||||
if (setDefMap)
|
if (setDefMap)
|
||||||
{
|
{
|
||||||
await UserStateTool.SetUserMapDefault(fightData.userId);
|
await UserStateTool.SetUserMapDefault(fightData.userId);
|
||||||
@@ -230,14 +223,26 @@ public class GameFightService(ISqlSugarClient DbClient, IRedisCache redis) : IGa
|
|||||||
nameof(UserEnum.AttrCode.Person), winUser, lowUser, okTime);
|
nameof(UserEnum.AttrCode.Person), winUser, lowUser, okTime);
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
await RemoveUserFight(lowUser);
|
|
||||||
if (setDefMap)
|
if (setDefMap)
|
||||||
{
|
{
|
||||||
await UserStateTool.SetUserMapDefault(lowUser);
|
await UserStateTool.SetUserMapDefault(lowUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fightData.state = 1;
|
||||||
|
fightData.winCode = nameof(UserEnum.AttrCode.Person);
|
||||||
|
fightData.winUser = winUser;
|
||||||
|
fightData.okTime = okTime;
|
||||||
|
//此处调用战斗结束相关
|
||||||
|
var _eventPublisher = App.GetService<IEventPublisher>();
|
||||||
|
await _eventPublisher.PublishAsync(new ChannelEventSource(BusEventsEnum.BusEventsName.PutFightAward,
|
||||||
|
fightData));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//更新耐久
|
||||||
|
var equService = App.GetService<IGameEquService>();
|
||||||
|
await equService.UpdateUserOnEquDurability(fightData.userId);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -290,6 +295,49 @@ public class GameFightService(ISqlSugarClient DbClient, IRedisCache redis) : IGa
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task HandleFightData()
|
||||||
|
{
|
||||||
|
long endTime = TimeExtend.GetTimeStampSeconds;
|
||||||
|
var db = DbClient.AsTenant().GetConnectionWithAttr<game_fight_data>();
|
||||||
|
var data = await db.Queryable<game_fight_data>()
|
||||||
|
.Where(it => it.state == 0 && it.endTime < endTime)
|
||||||
|
.ToListAsync();
|
||||||
|
List<string> dels = data.Select(it => it.fightId).ToList();
|
||||||
|
bool result = await db.Deleteable<game_fight_data>().Where(it => dels.Contains(it.fightId))
|
||||||
|
.ExecuteCommandAsync() > 0;
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
List<string> fightIdKeys = new List<string>();
|
||||||
|
List<string> monsterBloodKeys = new List<string>();
|
||||||
|
List<string> fightHarmKeys = new List<string>();
|
||||||
|
foreach (var item in data)
|
||||||
|
{
|
||||||
|
fightIdKeys.Add(string.Format(FightCache.FightCacheKeys, "FightData:Info", item.fightId));
|
||||||
|
fightHarmKeys.Add(string.Format(FightCache.FightCacheKeys, "FightData:Harm", item.fightId));
|
||||||
|
if (item.code == nameof(GameEnum.FightCode.PVE))
|
||||||
|
{
|
||||||
|
monsterBloodKeys.Add(string.Format(FightCache.FightCacheKeys, "FightData:Blood", item.keyId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fightIdKeys.Count > 0)
|
||||||
|
{
|
||||||
|
await redis.DelAsync(fightIdKeys.ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (monsterBloodKeys.Count > 0)
|
||||||
|
{
|
||||||
|
await redis.DelAsync(monsterBloodKeys.ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fightHarmKeys.Count > 0)
|
||||||
|
{
|
||||||
|
await redis.DelAsync(fightHarmKeys.ToArray());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 战斗相关
|
#region 战斗相关
|
||||||
@@ -303,7 +351,7 @@ public class GameFightService(ISqlSugarClient DbClient, IRedisCache redis) : IGa
|
|||||||
result = await redis.GetHashAsync<int>(key, userId);
|
result = await redis.GetHashAsync<int>(key, userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result > 0)
|
if (result != 0)
|
||||||
{
|
{
|
||||||
await redis.AddHashAsync(key, userId, 0);
|
await redis.AddHashAsync(key, userId, 0);
|
||||||
}
|
}
|
||||||
@@ -322,6 +370,7 @@ public class GameFightService(ISqlSugarClient DbClient, IRedisCache redis) : IGa
|
|||||||
public async Task HandleFight(game_fight_data fightData)
|
public async Task HandleFight(game_fight_data fightData)
|
||||||
{
|
{
|
||||||
string winUser = fightData.winUser;
|
string winUser = fightData.winUser;
|
||||||
|
string lowUser = fightData.userId == winUser ? fightData.mainId : fightData.userId;
|
||||||
|
|
||||||
#region 发放基础奖励
|
#region 发放基础奖励
|
||||||
|
|
||||||
@@ -347,6 +396,40 @@ public class GameFightService(ISqlSugarClient DbClient, IRedisCache redis) : IGa
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region 场景处理
|
||||||
|
|
||||||
|
if (fightData.code == nameof(GameEnum.FightCode.PVP))
|
||||||
|
{
|
||||||
|
var mapService = App.GetService<IGameMapService>();
|
||||||
|
var userService = App.GetService<IUnitUserService>();
|
||||||
|
var messageService = App.GetService<IMessageService>();
|
||||||
|
var mapInfo = await mapService.GetMapInfo(fightData.mapId);
|
||||||
|
var cityInfo = await mapService.GetCityInfo((int)mapInfo.cityId);
|
||||||
|
var winUserInfo = await userService.GetUserInfoByUserId(winUser);
|
||||||
|
var lowUserInfo = await userService.GetUserInfoByUserId(lowUser);
|
||||||
|
|
||||||
|
//系统广播
|
||||||
|
string boradMsg =
|
||||||
|
$"[{UbbTool.HomeUbb(winUserInfo.userNo, winUserInfo.nick)}]在{cityInfo.cityName}·{mapInfo.mapName}击杀了[{UbbTool.HomeUbb(lowUserInfo.userNo, lowUserInfo.nick)}]!";
|
||||||
|
await messageService.SendBroadcast("0", nameof(MessageEnum.BroadcastCode.Remind), boradMsg);
|
||||||
|
//个人通知
|
||||||
|
var chatService = App.GetService<IGameChatService>();
|
||||||
|
string noticeMsg =
|
||||||
|
$"您在{cityInfo.cityName}·{mapInfo.mapName}被[{UbbTool.HomeUbb(winUserInfo.userNo, winUserInfo.nick)}]击杀!";
|
||||||
|
await chatService.SendChat(lowUser, (int)lowUserInfo.areaId, nameof(GameChatEnum.Code.Notice), noticeMsg);
|
||||||
|
if (mapInfo.isPk == 1)
|
||||||
|
{
|
||||||
|
var relationService = App.GetService<IUnitUserRelationService>();
|
||||||
|
if (await relationService.CheckUserEnemy(winUser, lowUser) == false)
|
||||||
|
{
|
||||||
|
var accService = App.GetService<IUnitUserAccService>();
|
||||||
|
await accService.UpdateUserData(winUser, 1, nameof(AccEnum.AccType.enemy), 5, "击杀玩家"); //加罪恶
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task PutFightAwardGoods(game_fight_data fightData)
|
private async Task PutFightAwardGoods(game_fight_data fightData)
|
||||||
@@ -492,7 +575,7 @@ public class GameFightService(ISqlSugarClient DbClient, IRedisCache redis) : IGa
|
|||||||
if (config[0] == fight.code || config[0] == "ALL")
|
if (config[0] == fight.code || config[0] == "ALL")
|
||||||
{
|
{
|
||||||
decimal okLimit = Convert.ToDecimal(config[1]);
|
decimal okLimit = Convert.ToDecimal(config[1]);
|
||||||
if ((Convert.ToDecimal(addBlood) / Convert.ToDecimal(user.upBlood) ) > okLimit)
|
if ((Convert.ToDecimal(addBlood) / Convert.ToDecimal(user.upBlood)) > okLimit)
|
||||||
{
|
{
|
||||||
if (item.type == "Number")
|
if (item.type == "Number")
|
||||||
{
|
{
|
||||||
@@ -541,7 +624,7 @@ public class GameFightService(ISqlSugarClient DbClient, IRedisCache redis) : IGa
|
|||||||
}
|
}
|
||||||
|
|
||||||
//使用普通药品
|
//使用普通药品
|
||||||
if (addBlood > 0)
|
if (addBlood > 0 && (addBlood / user.upMorale / 1.0M) > 0.6M)
|
||||||
{
|
{
|
||||||
var unitDrug = myDrug.drug.Find(it => it.code == nameof(GoodsEnum.DrugCls.Blood) && it.count > 0);
|
var unitDrug = myDrug.drug.Find(it => it.code == nameof(GoodsEnum.DrugCls.Blood) && it.count > 0);
|
||||||
if (unitDrug != null)
|
if (unitDrug != null)
|
||||||
@@ -563,8 +646,18 @@ public class GameFightService(ISqlSugarClient DbClient, IRedisCache redis) : IGa
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public async Task HandelFightEnd(string userId, List<dynamic> data)
|
public async Task HandelFightEnd(string userId, List<FightRemoveData> data)
|
||||||
{
|
{
|
||||||
|
var equService = App.GetService<IGameEquService>();
|
||||||
|
foreach (var item in data)
|
||||||
|
{
|
||||||
|
if (item.code == "Equ")
|
||||||
|
{
|
||||||
|
await equService.RemoveUserOnEqu(userId, item.par, item.count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
await Task.CompletedTask;
|
await Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -183,7 +183,17 @@ public class GameMapService(ISqlSugarClient DbClient, IRedisCache redis) : IGame
|
|||||||
isOnline = isOnline
|
isOnline = isOnline
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
public async Task UpdateUserOnMap(string userId)
|
||||||
|
{
|
||||||
|
unit_user_online onLine = await GetUserOnMap(userId);
|
||||||
|
onLine.upTime = TimeExtend.GetTimeStampSeconds;
|
||||||
|
string key = string.Format(UserCache.BaseCacheKey, "UserOnline");
|
||||||
|
if (await redis.AddHashAsync(key, userId, onLine))
|
||||||
|
{
|
||||||
|
var db = DbClient.AsTenant().GetConnectionWithAttr<unit_user_online>();
|
||||||
|
await db.Updateable<unit_user_online>(onLine).ExecuteCommandAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
public async Task UpdateUserOnMap(string userId, string ip, string mapId)
|
public async Task UpdateUserOnMap(string userId, string ip, string mapId)
|
||||||
{
|
{
|
||||||
unit_user_online onLine = new unit_user_online();
|
unit_user_online onLine = new unit_user_online();
|
||||||
|
|||||||
@@ -124,6 +124,59 @@ public class GameMonsterService(ISqlSugarClient DbClient, IRedisCache redis) : I
|
|||||||
await redis.DelHashAsync(key, mapId);
|
await redis.DelHashAsync(key, mapId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<bool> RemoveCreateMonster(string umId)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
var data = await GetCreateMonsterInfo(umId);
|
||||||
|
if (data != null)
|
||||||
|
{
|
||||||
|
result = await RemoveCreateMonster(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> RemoveCreateMonster(unit_user_monster data)
|
||||||
|
{
|
||||||
|
var db = DbClient.AsTenant().GetConnectionWithAttr<unit_user_monster>();
|
||||||
|
bool result = await db.Deleteable<unit_user_monster>().Where(it => it.umId == data.umId).ExecuteCommandAsync()>0;
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
await ClearCreateMonster(data.mapId);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task HandleCreateMonster()
|
||||||
|
{
|
||||||
|
var endTime = TimeExtend.GetTimeStampSeconds;
|
||||||
|
var db = DbClient.AsTenant().GetConnectionWithAttr<unit_user_monster>();
|
||||||
|
var data = await db.Queryable<unit_user_monster>().Where(it => it.endTime < endTime).ToListAsync();
|
||||||
|
List<string> delIds = new List<string>();
|
||||||
|
List<string> mapIds = new List<string>();
|
||||||
|
foreach (var item in data)
|
||||||
|
{
|
||||||
|
delIds.Add(item.umId);
|
||||||
|
if (mapIds.Any(it => it == item.mapId) == false)
|
||||||
|
{
|
||||||
|
mapIds.Add(item.mapId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (delIds.Count > 0)
|
||||||
|
{
|
||||||
|
bool result = await db.Deleteable<unit_user_monster>().Where(it => delIds.Contains(it.umId))
|
||||||
|
.ExecuteCommandAsync() > 0;
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
string key = string.Format(BaseCache.BaseCacheKeys, "MonsterData", "CreateMonsterOnMap");
|
||||||
|
await redis.DelHashAsync(key, mapIds.ToArray());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<List<MapMonsterModel>> GetMapMonster(string userId, string mapId, string teamId)
|
public async Task<List<MapMonsterModel>> GetMapMonster(string userId, string mapId, string teamId)
|
||||||
{
|
{
|
||||||
string userKey = await UserKeyTool.GetUserKey(userId);
|
string userKey = await UserKeyTool.GetUserKey(userId);
|
||||||
|
|||||||
@@ -22,14 +22,24 @@ public class UnitUserAccService(ISqlSugarClient DbClient, IRedisCache redis) : I
|
|||||||
}
|
}
|
||||||
else if (accType == nameof(AccEnum.AccType.teach))
|
else if (accType == nameof(AccEnum.AccType.teach))
|
||||||
{
|
{
|
||||||
var info = await GetUserAccInfo(userId);
|
var info = await GetUserDataInfo(userId);
|
||||||
result = (long)info.teach;
|
result = (long)info.teach;
|
||||||
}
|
}
|
||||||
else if (accType == nameof(AccEnum.AccType.renown))
|
else if (accType == nameof(AccEnum.AccType.renown))
|
||||||
{
|
{
|
||||||
var info = await GetUserAccInfo(userId);
|
var info = await GetUserDataInfo(userId);
|
||||||
result = (long)info.renown;
|
result = (long)info.renown;
|
||||||
}
|
}
|
||||||
|
else if (accType == nameof(AccEnum.AccType.charm))
|
||||||
|
{
|
||||||
|
var info = await GetUserDataInfo(userId);
|
||||||
|
result = (long)info.charm;
|
||||||
|
}
|
||||||
|
else if (accType == nameof(AccEnum.AccType.enemy))
|
||||||
|
{
|
||||||
|
var info = await GetUserDataInfo(userId);
|
||||||
|
result = (long)info.enemy;
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -55,8 +65,6 @@ public class UnitUserAccService(ISqlSugarClient DbClient, IRedisCache redis) : I
|
|||||||
isOk = await db.Updateable<unit_user_acc>()
|
isOk = await db.Updateable<unit_user_acc>()
|
||||||
.SetColumnsIF(accType.Equals(nameof(AccEnum.AccType.cowry)), it => it.cowry == it.cowry + opCount)
|
.SetColumnsIF(accType.Equals(nameof(AccEnum.AccType.cowry)), it => it.cowry == it.cowry + opCount)
|
||||||
.SetColumnsIF(accType.Equals(nameof(AccEnum.AccType.gold)), it => it.gold == it.gold + opCount)
|
.SetColumnsIF(accType.Equals(nameof(AccEnum.AccType.gold)), it => it.gold == it.gold + opCount)
|
||||||
.SetColumnsIF(accType.Equals(nameof(AccEnum.AccType.teach)), it => it.teach == it.teach + opCount)
|
|
||||||
.SetColumnsIF(accType.Equals(nameof(AccEnum.AccType.renown)), it => it.renown == it.renown + opCount)
|
|
||||||
.Where(it => it.userId == userId).ExecuteCommandAsync() > 0;
|
.Where(it => it.userId == userId).ExecuteCommandAsync() > 0;
|
||||||
//生成日志
|
//生成日志
|
||||||
if (isOk)
|
if (isOk)
|
||||||
@@ -94,10 +102,14 @@ public class UnitUserAccService(ISqlSugarClient DbClient, IRedisCache redis) : I
|
|||||||
{
|
{
|
||||||
result = await UpdateUserCopper(userId, type, count, remark);
|
result = await UpdateUserCopper(userId, type, count, remark);
|
||||||
}
|
}
|
||||||
else
|
else if (accType == nameof(AccEnum.AccType.gold)||accType == nameof(AccEnum.AccType.cowry))
|
||||||
{
|
{
|
||||||
result = await UpdateUserAcc(userId, type, accType, count, name, remark);
|
result = await UpdateUserAcc(userId, type, accType, count, name, remark);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = await UpdateUserData(userId, type, accType, count, remark);
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -138,5 +150,38 @@ public class UnitUserAccService(ISqlSugarClient DbClient, IRedisCache redis) : I
|
|||||||
return isOk;
|
return isOk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<unit_user_data> GetUserDataInfo(string userId)
|
||||||
|
{
|
||||||
|
var db = DbClient.AsTenant().GetConnectionWithAttr<unit_user_data>();
|
||||||
|
return await db.Queryable<unit_user_data>().Where(i => i.userId == userId).SingleAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> UpdateUserData(string userId, int type, string accType, long count, string remark = "")
|
||||||
|
{
|
||||||
|
bool isOk = false;
|
||||||
|
decimal opCount = type == 0 ? (0 - count) : count;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var db = DbClient.AsTenant().GetConnectionWithAttr<unit_user_data>();
|
||||||
|
await DbClient.AsTenant().BeginTranAsync();
|
||||||
|
|
||||||
|
isOk = await db.Updateable<unit_user_data>()
|
||||||
|
.SetColumnsIF(accType.Equals(nameof(AccEnum.AccType.teach)), it => it.teach == it.teach + opCount)
|
||||||
|
.SetColumnsIF(accType.Equals(nameof(AccEnum.AccType.renown)), it => it.renown == it.renown + opCount)
|
||||||
|
.SetColumnsIF(accType.Equals(nameof(AccEnum.AccType.charm)), it => it.charm == it.charm + opCount)
|
||||||
|
.SetColumnsIF(accType.Equals(nameof(AccEnum.AccType.enemy)), it => it.enemy == it.enemy + opCount)
|
||||||
|
.Where(it => it.userId == userId).ExecuteCommandAsync() > 0;
|
||||||
|
|
||||||
|
await DbClient.AsTenant().CommitTranAsync();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
isOk = false;
|
||||||
|
await DbClient.AsTenant().RollbackTranAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
return isOk;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion 账户操作
|
#endregion 账户操作
|
||||||
}
|
}
|
||||||
@@ -18,6 +18,7 @@ public class UnitUserAttrService(ISqlSugarClient DbClient, IRedisCache redis) :
|
|||||||
result.code = nameof(UserEnum.AttrCode.Person);
|
result.code = nameof(UserEnum.AttrCode.Person);
|
||||||
var unitAttr = await GetUserAttr(userId);
|
var unitAttr = await GetUserAttr(userId);
|
||||||
result.lev = (int)unitAttr.lev;
|
result.lev = (int)unitAttr.lev;
|
||||||
|
result.upTime = (long)unitAttr.levUpdate;
|
||||||
result.minAtk = (int)unitAttr.minAtk;
|
result.minAtk = (int)unitAttr.minAtk;
|
||||||
result.maxAtk = (int)unitAttr.maxAtk;
|
result.maxAtk = (int)unitAttr.maxAtk;
|
||||||
result.defense = (int)unitAttr.defense;
|
result.defense = (int)unitAttr.defense;
|
||||||
@@ -489,6 +490,16 @@ public class UnitUserAttrService(ISqlSugarClient DbClient, IRedisCache redis) :
|
|||||||
|
|
||||||
public async Task<bool> UpdateOnLineTime(string userId, string code, int time)
|
public async Task<bool> UpdateOnLineTime(string userId, string code, int time)
|
||||||
{
|
{
|
||||||
|
if (code == "Default")
|
||||||
|
{
|
||||||
|
var hookService = App.GetService<IOnHookService>();
|
||||||
|
var hookInfo = await hookService.GetUserOnHook(userId);
|
||||||
|
if (hookInfo.status == 1)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var db = DbClient.AsTenant().GetConnectionWithAttr<unit_user_online_time>();
|
var db = DbClient.AsTenant().GetConnectionWithAttr<unit_user_online_time>();
|
||||||
bool result = await db.Updateable<unit_user_online_time>()
|
bool result = await db.Updateable<unit_user_online_time>()
|
||||||
.SetColumns(it => it.dayTime == it.dayTime + time)
|
.SetColumns(it => it.dayTime == it.dayTime + time)
|
||||||
@@ -498,6 +509,15 @@ public class UnitUserAttrService(ISqlSugarClient DbClient, IRedisCache redis) :
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task HandleOnLineTimeData()
|
||||||
|
{
|
||||||
|
int day = DateTime.Now.Day;
|
||||||
|
var db = DbClient.AsTenant().GetConnectionWithAttr<unit_user_online_time>();
|
||||||
|
await db.Updateable<unit_user_online_time>().SetColumns(it => it.dayTime == 0)
|
||||||
|
.WhereIF(day == 1, it => it.monthTime == 0)
|
||||||
|
.Where(it => true).ExecuteCommandAsync();
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 药品栏
|
#region 药品栏
|
||||||
@@ -657,6 +677,7 @@ public class UnitUserAttrService(ISqlSugarClient DbClient, IRedisCache redis) :
|
|||||||
{
|
{
|
||||||
result.AddRange(item.attr);
|
result.AddRange(item.attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
return GameAttrTool.GetAttrItemValue(nameof(GameEnum.AttrCode.AddExp), result, 0);
|
return GameAttrTool.GetAttrItemValue(nameof(GameEnum.AttrCode.AddExp), result, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -766,7 +787,7 @@ public class UnitUserAttrService(ISqlSugarClient DbClient, IRedisCache redis) :
|
|||||||
var result = await db.Updateable(data).ExecuteCommandAsync() > 0;
|
var result = await db.Updateable(data).ExecuteCommandAsync() > 0;
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
await ClearUserAttrCache(data.userId);
|
await ClearUserStockCache(data.userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -816,6 +837,7 @@ public class UnitUserAttrService(ISqlSugarClient DbClient, IRedisCache redis) :
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task AddUserLoadState(string userId, List<string> codes)
|
public async Task AddUserLoadState(string userId, List<string> codes)
|
||||||
{
|
{
|
||||||
foreach (var code in codes)
|
foreach (var code in codes)
|
||||||
@@ -851,9 +873,11 @@ public class UnitUserAttrService(ISqlSugarClient DbClient, IRedisCache redis) :
|
|||||||
name = "麻痹";
|
name = "麻痹";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
await AddUserLoadState(userId, name, code);
|
await AddUserLoadState(userId, name, code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> RandomRemoveUserLoadState(string userId, int count)
|
public async Task<bool> RandomRemoveUserLoadState(string userId, int count)
|
||||||
{
|
{
|
||||||
var data = await GetUserLoadState(userId);
|
var data = await GetUserLoadState(userId);
|
||||||
@@ -880,6 +904,5 @@ public class UnitUserAttrService(ISqlSugarClient DbClient, IRedisCache redis) :
|
|||||||
await redis.DelHashAsync(key, userId);
|
await redis.DelHashAsync(key, userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -185,9 +185,15 @@ public class UnitUserService(ISqlSugarClient DbClient, IRedisCache redis) : IUni
|
|||||||
acc.userId = userId;
|
acc.userId = userId;
|
||||||
acc.cowry = 0;
|
acc.cowry = 0;
|
||||||
acc.gold = 0;
|
acc.gold = 0;
|
||||||
acc.teach = 0;
|
|
||||||
acc.renown = 0;
|
|
||||||
db.Insertable(acc).AddQueue();
|
db.Insertable(acc).AddQueue();
|
||||||
|
|
||||||
|
unit_user_data userData = new unit_user_data();
|
||||||
|
userData.userId = userId;
|
||||||
|
userData.teach = 0;
|
||||||
|
userData.renown = 0;
|
||||||
|
userData.charm = 0;
|
||||||
|
userData.enemy = 0;
|
||||||
|
db.Insertable(userData).AddQueue();
|
||||||
//注册游戏货币
|
//注册游戏货币
|
||||||
unit_user_copper copper = new unit_user_copper();
|
unit_user_copper copper = new unit_user_copper();
|
||||||
copper.userId = userId;
|
copper.userId = userId;
|
||||||
|
|||||||
@@ -55,13 +55,13 @@ public static class GameBus
|
|||||||
else if (goodsType.Equals(nameof(GameEnum.PropCode.renown)))
|
else if (goodsType.Equals(nameof(GameEnum.PropCode.renown)))
|
||||||
{
|
{
|
||||||
var accService = App.GetService<IUnitUserAccService>();
|
var accService = App.GetService<IUnitUserAccService>();
|
||||||
isok = await accService.UpdateUserAcc(userId, operate, nameof(AccEnum.AccType.renown), count,
|
isok = await accService.UpdateUserAccBath(userId, operate, nameof(AccEnum.AccType.renown), count,
|
||||||
nameof(AccEnum.Name.其他), remark);
|
nameof(AccEnum.Name.其他), remark);
|
||||||
}
|
}
|
||||||
else if (goodsType.Equals(nameof(GameEnum.PropCode.teach)))
|
else if (goodsType.Equals(nameof(GameEnum.PropCode.teach)))
|
||||||
{
|
{
|
||||||
var accService = App.GetService<IUnitUserAccService>();
|
var accService = App.GetService<IUnitUserAccService>();
|
||||||
isok = await accService.UpdateUserAcc(userId, operate, nameof(AccEnum.AccType.teach), count,
|
isok = await accService.UpdateUserAccBath(userId, operate, nameof(AccEnum.AccType.teach), count,
|
||||||
nameof(AccEnum.Name.其他), remark);
|
nameof(AccEnum.Name.其他), remark);
|
||||||
}
|
}
|
||||||
else if (goodsType.Equals(nameof(GameEnum.PropCode.map)))
|
else if (goodsType.Equals(nameof(GameEnum.PropCode.map)))
|
||||||
|
|||||||
@@ -4,6 +4,31 @@ namespace Application.Domain;
|
|||||||
|
|
||||||
public class GameTool
|
public class GameTool
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 单位转换
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="glod"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string ConvertCopperName(long glod)
|
||||||
|
{
|
||||||
|
string result = string.Empty;
|
||||||
|
string glodStr = glod.ToString();
|
||||||
|
int yin = 0;
|
||||||
|
int t = 0;
|
||||||
|
if (glodStr.Length > 3)
|
||||||
|
{
|
||||||
|
yin = Convert.ToInt32(glodStr.Substring(0, glodStr.Length - 3));
|
||||||
|
t = Convert.ToInt32(glodStr.Substring(glodStr.Length - 3, 3));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
t = Convert.ToInt32(glod);
|
||||||
|
}
|
||||||
|
result += yin > 0 ? string.Format("{0}银", yin) : "";
|
||||||
|
result += t > 0 ? string.Format("{0}铜", t) : "";
|
||||||
|
result = string.IsNullOrEmpty(result) ? "0铜" : result;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取等级基础属性
|
/// 获取等级基础属性
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -14,4 +14,46 @@ public static class UserStateTool
|
|||||||
var mapService = App.GetService<IGameMapService>();
|
var mapService = App.GetService<IGameMapService>();
|
||||||
await mapService.SetUserMapDefault(userId);
|
await mapService.SetUserMapDefault(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async Task<bool> CheckPkState(string userId, string otId, bool isEnemy, bool isAtArea)
|
||||||
|
{
|
||||||
|
bool result = true;
|
||||||
|
var _mapService = App.GetService<IGameMapService>();
|
||||||
|
var onMapInfo = await _mapService.GetUserOnToMapInfo(userId);
|
||||||
|
if (onMapInfo.isPk == 0)
|
||||||
|
{
|
||||||
|
if (onMapInfo.retMap != onMapInfo.mapId)
|
||||||
|
{
|
||||||
|
if (isEnemy == false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var otUserOnMap = await _mapService.GetUserOnMapInfo(otId);
|
||||||
|
if (onMapInfo.mapId != otUserOnMap.mapId)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (otUserOnMap.isOnline == 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (onMapInfo.lookArea == 1)
|
||||||
|
{
|
||||||
|
if (isAtArea == false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.SignalR;
|
using Microsoft.AspNetCore.SignalR;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using Photon.Core.Redis;
|
||||||
|
|
||||||
namespace Application.Web.Controllers.Login
|
namespace Application.Web.Controllers.Login
|
||||||
{
|
{
|
||||||
@@ -19,7 +20,7 @@ namespace Application.Web.Controllers.Login
|
|||||||
private readonly IUnitUserAttrService _attrService;
|
private readonly IUnitUserAttrService _attrService;
|
||||||
|
|
||||||
public LoginController(IGameAccountService accountService, IAreaService areaService,
|
public LoginController(IGameAccountService accountService, IAreaService areaService,
|
||||||
IUnitUserService userService,IUnitUserAttrService attrService)
|
IUnitUserService userService, IUnitUserAttrService attrService)
|
||||||
{
|
{
|
||||||
_accountService = accountService;
|
_accountService = accountService;
|
||||||
_areaService = areaService;
|
_areaService = areaService;
|
||||||
@@ -27,6 +28,7 @@ namespace Application.Web.Controllers.Login
|
|||||||
_attrService = attrService;
|
_attrService = attrService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 登录接口
|
/// 登录接口
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -296,4 +296,61 @@ public class StoreController : ControllerBase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 批量出售装备
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="npcId"></param>
|
||||||
|
/// <param name="query"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet]
|
||||||
|
public async Task<IPoAction> BathSaleEqu(int npcId, string? query)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(query))
|
||||||
|
{
|
||||||
|
return PoAction.Message("需要筛选搜索后才可以一键出售!");
|
||||||
|
}
|
||||||
|
|
||||||
|
string userId = StateHelper.userId;
|
||||||
|
int areaId = StateHelper.areaId;
|
||||||
|
var npcInfo = await _mapService.GetNpcInfo(npcId);
|
||||||
|
if (npcInfo == null)
|
||||||
|
{
|
||||||
|
return PoAction.Message("Npc不存在!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (npcInfo.status != 1)
|
||||||
|
{
|
||||||
|
return PoAction.Message("Npc不存在!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GameTool.AreaVerify(areaId, npcInfo.areaId) == false)
|
||||||
|
{
|
||||||
|
return PoAction.Message("Npc不存在!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!npcInfo.bus.Any(it => it.code == nameof(GameEnum.NpcBusCode.Store)))
|
||||||
|
{
|
||||||
|
return PoAction.Message("业务不可用!");
|
||||||
|
}
|
||||||
|
|
||||||
|
var onMap = await _mapService.GetUserOnMapId(userId);
|
||||||
|
if (npcInfo.mapId != onMap)
|
||||||
|
{
|
||||||
|
return PoAction.Message("Npc不存在!");
|
||||||
|
}
|
||||||
|
|
||||||
|
var myEqu = await _equService.GetUserEquData(userId, query);
|
||||||
|
myEqu = myEqu.FindAll(it => it.isOn == 0 && it.isLock == 0 && it.intensifyLev == 0);
|
||||||
|
long getCopper = myEqu.Sum(it => (int)it.sysPrice);
|
||||||
|
if (await _equService.DeductUserEqu(userId, myEqu, "出售装备"))
|
||||||
|
{
|
||||||
|
await _accService.UpdateUserCopper(userId, 1, getCopper, "出售装备");
|
||||||
|
return PoAction.Ok(true, $"共出售{myEqu.Count}件装备,获得{getCopper}铜贝!");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return PoAction.Message("出售失败,请稍后尝试!");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -19,10 +19,12 @@ public class FightController : ControllerBase
|
|||||||
private readonly IGameGoodsService _goodsService;
|
private readonly IGameGoodsService _goodsService;
|
||||||
private readonly IUnitUserService _userService;
|
private readonly IUnitUserService _userService;
|
||||||
private readonly IOnHookService _hookService;
|
private readonly IOnHookService _hookService;
|
||||||
|
private readonly IUnitUserRelationService _relationService;
|
||||||
|
|
||||||
public FightController(IGameFightService fightService, IGameMonsterService monsterService,
|
public FightController(IGameFightService fightService, IGameMonsterService monsterService,
|
||||||
IUnitUserAttrService attrService, IGameMapService mapService, IUnitUserAccService accService,
|
IUnitUserAttrService attrService, IGameMapService mapService, IUnitUserAccService accService,
|
||||||
IGameGoodsService goodsService, IUnitUserService userService,IOnHookService hookService)
|
IGameGoodsService goodsService, IUnitUserService userService, IOnHookService hookService,
|
||||||
|
IUnitUserRelationService relationService)
|
||||||
{
|
{
|
||||||
_fightService = fightService;
|
_fightService = fightService;
|
||||||
_monsterService = monsterService;
|
_monsterService = monsterService;
|
||||||
@@ -32,6 +34,7 @@ public class FightController : ControllerBase
|
|||||||
_goodsService = goodsService;
|
_goodsService = goodsService;
|
||||||
_userService = userService;
|
_userService = userService;
|
||||||
_hookService = hookService;
|
_hookService = hookService;
|
||||||
|
_relationService = relationService;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -110,6 +113,77 @@ public class FightController : ControllerBase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 角色战斗生成
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="no"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet]
|
||||||
|
public async Task<IPoAction> FightPerson(string? no)
|
||||||
|
{
|
||||||
|
string userId = StateHelper.userId;
|
||||||
|
var onMapInfo = await _mapService.GetUserOnToMapInfo(userId);
|
||||||
|
var otUser = await _userService.GetUserInfoByUserNo(no);
|
||||||
|
if (otUser == null)
|
||||||
|
{
|
||||||
|
return PoAction.Message("玩家不存在!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (onMapInfo.isPk == 0)
|
||||||
|
{
|
||||||
|
if (onMapInfo.retMap != onMapInfo.mapId)
|
||||||
|
{
|
||||||
|
if (await _relationService.CheckUserEnemy(userId, otUser.userId) == false)
|
||||||
|
{
|
||||||
|
return PoAction.Message("该场景不允许PK!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return PoAction.Message("该场景不允许PK!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var otUserOnMap = await _mapService.GetUserOnMapInfo(otUser.userId);
|
||||||
|
if (onMapInfo.mapId != otUserOnMap.mapId)
|
||||||
|
{
|
||||||
|
return PoAction.Message("玩家不存在!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (otUserOnMap.isOnline == 0)
|
||||||
|
{
|
||||||
|
return PoAction.Message("玩家已下线!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (onMapInfo.lookArea == 1)
|
||||||
|
{
|
||||||
|
if (otUser.areaId != StateHelper.areaId)
|
||||||
|
{
|
||||||
|
return PoAction.Message("该地图不允许跨服战斗!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
string fightId = StringAssist.NewGuid;
|
||||||
|
string areaCode = nameof(GameEnum.AreaCode.Own);
|
||||||
|
string code = nameof(GameEnum.FightCode.PVP);
|
||||||
|
string keyId = StringAssist.GetSortKey(userId,otUser.userId);
|
||||||
|
long exp = 0;
|
||||||
|
long copper = 0;
|
||||||
|
long petExp = 0;
|
||||||
|
string award = string.Empty;
|
||||||
|
string pars = "";
|
||||||
|
bool result = await _fightService.AddFight(fightId, areaCode, keyId, otUser.userId, code, onMapInfo.code, onMapInfo.mapId, userId, exp,
|
||||||
|
copper, petExp, award, pars);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
await _hookService.StopOnHook(userId);
|
||||||
|
return PoAction.Ok(fightId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return PoAction.Message("战斗生成错误!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 战斗接口
|
/// 战斗接口
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -194,7 +268,6 @@ public class FightController : ControllerBase
|
|||||||
//结束战斗都此处直接返回
|
//结束战斗都此处直接返回
|
||||||
if (otAttr.blood < 1 || myAttr.blood < 1)
|
if (otAttr.blood < 1 || myAttr.blood < 1)
|
||||||
{
|
{
|
||||||
await _fightService.RemoveUserFight(userId, fightId);
|
|
||||||
if (otAttr.blood < 1)
|
if (otAttr.blood < 1)
|
||||||
{
|
{
|
||||||
await _fightService.SetFightWin(fight, userId);
|
await _fightService.SetFightWin(fight, userId);
|
||||||
@@ -343,13 +416,11 @@ public class FightController : ControllerBase
|
|||||||
var fight = await _fightService.GetFightInfo(fightId);
|
var fight = await _fightService.GetFightInfo(fightId);
|
||||||
if (fight == null)
|
if (fight == null)
|
||||||
{
|
{
|
||||||
await _fightService.RemoveUserFight(userId, fightId);
|
|
||||||
return PoAction.Message("战斗不存在!");
|
return PoAction.Message("战斗不存在!");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fight.state == 1)
|
if (fight.state == 1)
|
||||||
{
|
{
|
||||||
await _fightService.RemoveUserFight(userId, fightId);
|
|
||||||
return PoAction.Message("战斗结束!");
|
return PoAction.Message("战斗结束!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ public class GoodsController : ControllerBase
|
|||||||
int count = await _goodsService.GetUserGoodsCount(userId, goodsId);
|
int count = await _goodsService.GetUserGoodsCount(userId, goodsId);
|
||||||
int UseState = 0;
|
int UseState = 0;
|
||||||
string[] ShowViewNum = ["Pack", "Weight", "State"]; //显示带数量窗口
|
string[] ShowViewNum = ["Pack", "Weight", "State"]; //显示带数量窗口
|
||||||
string[] ShowView = ["Ship","Drug"]; //显示只能使用1个的窗口
|
string[] ShowView = ["Ship", "Drug", "Durability"]; //显示只能使用1个的窗口
|
||||||
if (ShowViewNum.Any(it => it == goodsInfo.code))
|
if (ShowViewNum.Any(it => it == goodsInfo.code))
|
||||||
{
|
{
|
||||||
UseState = 1;
|
UseState = 1;
|
||||||
@@ -168,11 +168,24 @@ public class GoodsController : ControllerBase
|
|||||||
await _weightService.AddUserShip(userId, name, goodsId, speed, weight, copper, sale, remark);
|
await _weightService.AddUserShip(userId, name, goodsId, speed, weight, copper, sale, remark);
|
||||||
message = $"使用[{goodsInfo.goodsName}],获得{name}+1";
|
message = $"使用[{goodsInfo.goodsName}],获得{name}+1";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (goodsInfo.code == nameof(GoodsEnum.Code.Drug))
|
if (goodsInfo.code == nameof(GoodsEnum.Code.Drug))
|
||||||
{
|
{
|
||||||
message = "使用成功!";
|
message = "使用成功!";
|
||||||
await _goodsService.UseDrug(userId, goodsId, goodsInfo.content);
|
await _goodsService.UseDrug(userId, goodsId, goodsInfo.content);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (goodsInfo.code == nameof(GoodsEnum.Code.Durability))
|
||||||
|
{
|
||||||
|
message = "使用成功!";
|
||||||
|
dynamic _drugConfig = JsonConvert.DeserializeObject<dynamic>(goodsInfo.content);
|
||||||
|
await _attrService.AddUserStock(userId, goodsId.ToString(), Convert.ToString(_drugConfig.name),
|
||||||
|
Convert.ToString(_drugConfig.type),
|
||||||
|
Convert.ToString(_drugConfig.code),
|
||||||
|
Convert.ToInt64(_drugConfig.num), Convert.ToString(_drugConfig.par),
|
||||||
|
Convert.ToInt32(_drugConfig.minute));
|
||||||
|
}
|
||||||
|
|
||||||
return PoAction.Ok(true, message);
|
return PoAction.Ok(true, message);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
50
Service/Application.Web/Controllers/Pub/RankController.cs
Normal file
50
Service/Application.Web/Controllers/Pub/RankController.cs
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace Application.Web.Controllers.Pub;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 排行接口
|
||||||
|
/// </summary>
|
||||||
|
[Route("[controller]/[action]")]
|
||||||
|
[ApiController]
|
||||||
|
[Authorize]
|
||||||
|
public class RankController : ControllerBase
|
||||||
|
{
|
||||||
|
private readonly IRankService _rankService;
|
||||||
|
|
||||||
|
public RankController(IRankService rankService)
|
||||||
|
{
|
||||||
|
_rankService = rankService;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取排名数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type"></param>
|
||||||
|
/// <param name="page"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet]
|
||||||
|
public async Task<IPoAction> GetRankData(int type, int page)
|
||||||
|
{
|
||||||
|
List<GameRankModel> data = new List<GameRankModel>();
|
||||||
|
RefAsync<int> total = 0;
|
||||||
|
string upTime = $"更新时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}";
|
||||||
|
int area = StateHelper.areaId;
|
||||||
|
if (type is >= 0 and < 8)
|
||||||
|
{
|
||||||
|
data = await _rankService.GetGameRank(type, area, page, 10, total);
|
||||||
|
upTime = await _rankService.GetRankUpdateTime();
|
||||||
|
}
|
||||||
|
else if (type == 8)
|
||||||
|
{
|
||||||
|
data = await _rankService.GetGameCopperRank(area, page, 10, total);
|
||||||
|
}
|
||||||
|
else if (type == 9 || type == 10 || type == 11)
|
||||||
|
{
|
||||||
|
data = await _rankService.GetGameTeachAndRenownRank(type, area, page, 10, total);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return PoAction.Ok(new { upTime, data, total = total.Value });
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -54,7 +54,8 @@ public class UserController : ControllerBase
|
|||||||
object exp = new { expInfo.exp, expInfo.upExp };
|
object exp = new { expInfo.exp, expInfo.upExp };
|
||||||
var vigourInfo = await _attrService.GetUserVigourInfo(userId);
|
var vigourInfo = await _attrService.GetUserVigourInfo(userId);
|
||||||
var accInfo = await _accService.GetUserAccInfo(userId);
|
var accInfo = await _accService.GetUserAccInfo(userId);
|
||||||
object acc = new { accInfo.gold, accInfo.cowry, accInfo.teach, accInfo.renown };
|
var userDataInfo = await _accService.GetUserDataInfo(userId);
|
||||||
|
object acc = new { accInfo.gold, accInfo.cowry, userDataInfo.teach, userDataInfo.renown,userDataInfo.enemy };
|
||||||
|
|
||||||
var buff = await _attrService.GetUserStateData(userId, "ALL");
|
var buff = await _attrService.GetUserStateData(userId, "ALL");
|
||||||
var stock = await _attrService.GetUserStock(userId);
|
var stock = await _attrService.GetUserStock(userId);
|
||||||
@@ -165,15 +166,17 @@ public class UserController : ControllerBase
|
|||||||
return PoAction.Message("用户本身!", 101);
|
return PoAction.Message("用户本身!", 101);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isAtArea = true;
|
||||||
if (userInfo.areaId != StateHelper.areaId)
|
if (userInfo.areaId != StateHelper.areaId)
|
||||||
{
|
{
|
||||||
|
isAtArea = false;
|
||||||
return PoAction.Message("玩家不存在!", 102);
|
return PoAction.Message("玩家不存在!", 102);
|
||||||
}
|
}
|
||||||
|
|
||||||
object user = new { userInfo.userNo, userInfo.nick, userInfo.sex, userInfo.sign };
|
object user = new { userInfo.userNo, userInfo.nick, userInfo.sex, userInfo.sign };
|
||||||
var attrInfo = await _attrService.GetUserAttrModel(userInfo.userId); //基础属性
|
var attrInfo = await _attrService.GetUserAttrModel(userInfo.userId); //基础属性
|
||||||
var accInfo = await _accService.GetUserAccInfo(userInfo.userId);
|
var accInfo = await _accService.GetUserDataInfo(userInfo.userId);
|
||||||
object acc = new { accInfo.teach };
|
object acc = new { accInfo.teach,accInfo.enemy };
|
||||||
|
|
||||||
var online = await _mapService.GetUserOnMap(userInfo.userId);
|
var online = await _mapService.GetUserOnMap(userInfo.userId);
|
||||||
int isOnline = online.upTime >
|
int isOnline = online.upTime >
|
||||||
@@ -189,9 +192,11 @@ public class UserController : ControllerBase
|
|||||||
|
|
||||||
var equ = await _equService.GetUserOnEqu(userInfo.userId);
|
var equ = await _equService.GetUserOnEqu(userInfo.userId);
|
||||||
var suit = await _equService.GetUserEquSuit(userInfo.userId);
|
var suit = await _equService.GetUserEquSuit(userInfo.userId);
|
||||||
|
|
||||||
|
var isPk = await UserStateTool.CheckPkState(userId, userInfo.userId, isEnemy, isAtArea);
|
||||||
object result = new
|
object result = new
|
||||||
{
|
{
|
||||||
user, attr = new { attrInfo.lev }, acc, isOnline, onMapName, isFriend, isEnemy, team, equ, suit
|
user, attr = new { attrInfo.lev }, acc, isOnline, onMapName, isFriend, isEnemy, team, equ, suit,isPk
|
||||||
};
|
};
|
||||||
return PoAction.Ok(result);
|
return PoAction.Ok(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,16 +46,15 @@ builder.Services.InjectJwt(builder.Configuration, new OpenApiInfo
|
|||||||
}, groups);
|
}, groups);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
//自动程序
|
//定时功能
|
||||||
|
builder.Services.InjectTimer(services =>
|
||||||
|
{
|
||||||
|
services.AddTransient<ITimerJobManager, TimerJobManager>();//注册管理器
|
||||||
|
services.AddSingleton<AutoJob>();
|
||||||
|
});
|
||||||
string autoConfig = builder.Configuration["AutoProgram"]!;
|
string autoConfig = builder.Configuration["AutoProgram"]!;
|
||||||
if (autoConfig == "1")
|
if (autoConfig == "1")
|
||||||
{
|
{
|
||||||
//定时功能
|
|
||||||
builder.Services.InjectTimer(services =>
|
|
||||||
{
|
|
||||||
services.AddTransient<ITimerJobManager, TimerJobManager>();//注册管理器
|
|
||||||
services.AddSingleton<AutoJob>();
|
|
||||||
});
|
|
||||||
builder.Services.AddHostedService<AppBackgroundService>();
|
builder.Services.AddHostedService<AppBackgroundService>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
{{ item.nick }}
|
{{ item.nick }}
|
||||||
</Abar>
|
</Abar>
|
||||||
</span>:
|
</span>:
|
||||||
<span v-html="item.msg"></span>
|
<span v-html="item.msg" @click="HtmlEvent"></span>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<span v-if="showUrl == false">
|
<span v-if="showUrl == false">
|
||||||
<span v-html="EquTool.ConvertEquName(equData,showLev)"></span>
|
<span v-html="EquTool.ConvertEquName(equData, showLev)"></span>
|
||||||
</span>
|
</span>
|
||||||
<router-link v-if="showUrl" :to='"/prop/equ?ue=" + equData.ueId'>
|
<Abar :href='"/prop/equ?ue=" + equData.ueId' v-if="showUrl"><span
|
||||||
<span v-html="EquTool.ConvertEquName(equData,showLev)"></span>
|
v-html="EquTool.ConvertEquName(equData, showLev)"></span> </Abar>
|
||||||
</router-link>
|
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
// 1. 定义接收父组件传来的参数 props
|
// 1. 定义接收父组件传来的参数 props
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
统一配置中心
|
统一配置中心
|
||||||
*/
|
*/
|
||||||
export class BaseConfig {
|
export class BaseConfig {
|
||||||
// public static BaseUrl: string = 'https://localhost:7198'
|
public static BaseUrl: string = 'https://localhost:7198'
|
||||||
// public static BaseMediaUrl: string = 'https://localhost:7198/'
|
public static BaseMediaUrl: string = 'https://localhost:7198/'
|
||||||
public static BaseUrl:string="http://kx.iyba.cn:5291";
|
// public static BaseUrl:string="http://kx.iyba.cn:5291";
|
||||||
public static BaseMediaUrl:string="http://kx.iyba.cn:5291";
|
// public static BaseMediaUrl:string="http://kx.iyba.cn:5291";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1,51 @@
|
|||||||
<template></template>
|
<template>
|
||||||
|
<div class="content">
|
||||||
|
【排行榜】
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<div class="common">
|
||||||
|
✧<Abar href="/rank/info?id=0">等级排行</Abar>
|
||||||
|
</div>
|
||||||
|
<div class="common">
|
||||||
|
✧<Abar href="/rank/info?id=8">铜贝排行</Abar>
|
||||||
|
</div>
|
||||||
|
<div class="common">
|
||||||
|
✧<Abar href="/rank/info?id=1">攻击排行</Abar>
|
||||||
|
</div>
|
||||||
|
<div class="common">
|
||||||
|
✧<Abar href="/rank/info?id=2">防御排行</Abar>
|
||||||
|
</div>
|
||||||
|
<div class="common">
|
||||||
|
✧<Abar href="/rank/info?id=3">敏捷排行</Abar>
|
||||||
|
</div>
|
||||||
|
<div class="common">
|
||||||
|
✧<Abar href="/rank/info?id=4">体力排行</Abar>
|
||||||
|
</div>
|
||||||
|
<div class="common">
|
||||||
|
✧<Abar href="/rank/info?id=5">士气排行</Abar>
|
||||||
|
</div>
|
||||||
|
<div class="common">
|
||||||
|
✧<Abar href="/rank/info?id=6">幸运排行</Abar>
|
||||||
|
</div>
|
||||||
|
<div class="common">
|
||||||
|
✧<Abar href="/rank/info?id=9">师德排行</Abar>
|
||||||
|
</div>
|
||||||
|
<div class="common">
|
||||||
|
✧<Abar href="/rank/info?id=10">声望排行</Abar>
|
||||||
|
</div>
|
||||||
|
<div class="common">
|
||||||
|
✧<Abar href="/rank/info?id=7">战力排行</Abar>
|
||||||
|
</div>
|
||||||
|
<div class="common">
|
||||||
|
✧<Abar href="/rank/info?id=11">魅力排行</Abar>
|
||||||
|
</div>
|
||||||
|
<div class="common">
|
||||||
|
✧<Abar href="/rank/info?id=12">亲密度排行</Abar>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
definePageMeta({
|
||||||
|
layout: layout.default
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|||||||
97
Web/src/pages/rank/info.vue
Normal file
97
Web/src/pages/rank/info.vue
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
<template>
|
||||||
|
<div class="content">
|
||||||
|
【{{ name }}】
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<div class="item" v-for="(item, index) in data" :key="index">
|
||||||
|
{{ PageExtend.GetPageIndex(currentPage, 10, index + 1) }}.
|
||||||
|
<GameUser :data="item.user"></GameUser>({{ item.sign }})
|
||||||
|
</div>
|
||||||
|
<span v-if="data.length == 0">
|
||||||
|
暂无排行.
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<Pagination :currentPage="currentPage" :limit="10" :total="total" @pageChange="handlePageChange" />
|
||||||
|
</div>
|
||||||
|
<div class="content" style="font-size: 14px;margin-top: 15px;">
|
||||||
|
*{{ timeTips }}
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
|
||||||
|
definePageMeta({
|
||||||
|
layout: layout.default,
|
||||||
|
middleware: 'page-loading'
|
||||||
|
})
|
||||||
|
|
||||||
|
const currentPage = ref<number>(1);
|
||||||
|
const total = ref<number>(0);
|
||||||
|
const data = ref<Array<any>>([]);
|
||||||
|
const timeTips = ref("");
|
||||||
|
const name = ref("");
|
||||||
|
let type = PageExtend.QueryString("id");
|
||||||
|
onMounted(async () => {
|
||||||
|
try {
|
||||||
|
name.value = GetRankName(Number(type));
|
||||||
|
await BindData();
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
PageLoading.Close();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const BindData = async (): Promise<void> => {
|
||||||
|
let result = await RankService.GetRankData(Number(type), currentPage.value);
|
||||||
|
if (result.code == 0) {
|
||||||
|
data.value = result.data.data;
|
||||||
|
total.value = result.data.total;
|
||||||
|
timeTips.value = result.data.upTime;
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
MessageExtend.ShowDialog("提示", result.msg);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**翻页 */
|
||||||
|
const handlePageChange = async (page: number): Promise<void> => {
|
||||||
|
currentPage.value = page;
|
||||||
|
await BindData();
|
||||||
|
};
|
||||||
|
|
||||||
|
const GetRankName = (type: number) => {
|
||||||
|
let result = '';
|
||||||
|
switch (type) {
|
||||||
|
case 0:
|
||||||
|
result = "等级排行榜"; break;
|
||||||
|
case 1:
|
||||||
|
result = "攻击排行榜"; break;
|
||||||
|
case 2:
|
||||||
|
result = "防御排行榜"; break;
|
||||||
|
case 3:
|
||||||
|
result = "敏捷排行榜"; break;
|
||||||
|
case 4:
|
||||||
|
result = "体力排行榜"; break;
|
||||||
|
case 5:
|
||||||
|
result = "士气排行榜"; break;
|
||||||
|
case 6:
|
||||||
|
result = "幸运排行榜"; break;
|
||||||
|
case 7:
|
||||||
|
result = "战力排行榜"; break;
|
||||||
|
case 8:
|
||||||
|
result = "铜贝排行榜"; break;
|
||||||
|
case 9:
|
||||||
|
result = "师德排行榜"; break;
|
||||||
|
case 10:
|
||||||
|
result = "声望排行榜"; break;
|
||||||
|
case 11:
|
||||||
|
result = "魅力排行榜"; break;
|
||||||
|
case 12:
|
||||||
|
result = "亲密排行榜"; break;
|
||||||
|
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
@@ -7,20 +7,20 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="common serch">
|
<div class="common serch">
|
||||||
搜索内容:<input type="text" class="search-ipt" v-model="serch">
|
搜索内容:<input type="text" class="search-ipt" v-model="serch">
|
||||||
<button class="ipt-btn" name="serch" @click="BindData">搜索</button>
|
<button class="ipt-btn" name="serch" @click="refData">搜索</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="common" v-if="type == '0'">
|
<div class="common" v-if="type == '0'">
|
||||||
<div class="item" v-for="(item, index) in data" :key="index">
|
<div class="item" v-for="(item, index) in data" :key="index">
|
||||||
{{ PageExtend.GetPageIndex(currentPage, 10, index + 1) }}.
|
{{ PageExtend.GetPageIndex(currentPage, 10, index + 1) }}.
|
||||||
<Abar :href='"/prop/goods?ue=" + item.ueId'>{{ item.equName }}({{ item.lev }}级)</Abar>
|
<Abar :href='"/prop/equ?ue=" + item.ueId'>{{ item.equName }}({{ item.lev }}级)</Abar>
|
||||||
[<Abutton @click="SaleView(item)">出售</Abutton>]
|
[<Abutton @click="SaleView(item)">出售</Abutton>]
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="common" v-if="type == '1'">
|
<div class="common" v-if="type == '1'">
|
||||||
<div class="item" v-for="(item, index) in data" :key="index">
|
<div class="item" v-for="(item, index) in data" :key="index">
|
||||||
{{ PageExtend.GetPageIndex(currentPage, 10, index + 1) }}.
|
{{ PageExtend.GetPageIndex(currentPage, 10, index + 1) }}.
|
||||||
<Abar :href='"/prop/goods?id=" + item.goodsId'>{{ item.goodsName }}({{item.count}})</Abar>
|
<Abar :href='"/prop/goods?id=" + item.goodsId'>{{ item.goodsName }}({{ item.count }})</Abar>
|
||||||
[<Abutton @click="SaleView(item)">出售</Abutton>]
|
[<Abutton @click="SaleView(item)">出售</Abutton>]
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -28,16 +28,19 @@
|
|||||||
<div class="item" v-for="(item, index) in data" :key="index">
|
<div class="item" v-for="(item, index) in data" :key="index">
|
||||||
{{ PageExtend.GetPageIndex(currentPage, 10, index + 1) }}.
|
{{ PageExtend.GetPageIndex(currentPage, 10, index + 1) }}.
|
||||||
<span v-if="item.code == 'Card'">
|
<span v-if="item.code == 'Card'">
|
||||||
<Abar :href='"/prop/goods?id=" + item.goodsId'>{{ item.goodsName }}({{item.count}})</Abar>
|
<Abar :href='"/prop/goods?id=" + item.goodsId'>{{ item.goodsName }}({{ item.count }})</Abar>
|
||||||
</span>
|
</span>
|
||||||
<span v-else>
|
<span v-else>
|
||||||
<Abar :href='"/prop/goods?id=" + item.goodsId'>{{ item.goodsName }}({{item.count}})</Abar>
|
<Abar :href='"/prop/goods?id=" + item.goodsId'>{{ item.goodsName }}({{ item.count }})</Abar>
|
||||||
</span>
|
</span>
|
||||||
[<Abutton @click="SaleView(item)">出售</Abutton>]
|
[<Abutton @click="SaleView(item)">出售</Abutton>]
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<span v-if="data.length == 0">暂无.</span>
|
<span v-if="data.length == 0">暂无.</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="content" v-if="type == '0'">
|
||||||
|
➣<Abutton @click="bathSale">一键出售装备</Abutton>
|
||||||
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<Pagination :currentPage="currentPage" :limit="10" :total="total" @pageChange="handlePageChange" />
|
<Pagination :currentPage="currentPage" :limit="10" :total="total" @pageChange="handlePageChange" />
|
||||||
</div>
|
</div>
|
||||||
@@ -92,6 +95,11 @@ const BindData = async (): Promise<void> => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const refData = async () => {
|
||||||
|
currentPage.value = 1;
|
||||||
|
await BindData();
|
||||||
|
}
|
||||||
|
|
||||||
/**翻页 */
|
/**翻页 */
|
||||||
const handlePageChange = async (page: number): Promise<void> => {
|
const handlePageChange = async (page: number): Promise<void> => {
|
||||||
currentPage.value = page;
|
currentPage.value = page;
|
||||||
@@ -131,11 +139,29 @@ const SaleOk = async (): Promise<void> => {
|
|||||||
MessageExtend.LoadingClose();
|
MessageExtend.LoadingClose();
|
||||||
if (result.code == 0) {
|
if (result.code == 0) {
|
||||||
showSale.value = false;
|
showSale.value = false;
|
||||||
MessageExtend.Notify(result.msg,"success");
|
MessageExtend.Notify(result.msg, "success");
|
||||||
await BindData();
|
await BindData();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
MessageExtend.ShowDialog("提示", result.msg);
|
MessageExtend.ShowDialog("提示", result.msg);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const bathSale = async () => {
|
||||||
|
if (type.value == '0') {
|
||||||
|
MessageExtend.ShowConfirmDialogAsyc("出售装备", `您确定要出售当前装备吗?`, async () => {
|
||||||
|
let npcId = LocalStorageHelper.GetOnNpc();
|
||||||
|
let result = await StoreService.BathSaleEqu(Number(npcId), serch.value);
|
||||||
|
if (result.code == 0) {
|
||||||
|
await BindData();
|
||||||
|
MessageExtend.Notify(result.msg, "success");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
MessageExtend.Notify(result.msg, "danger");
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
师德:{{ accData.teach }}<br>
|
师德:{{ accData.teach }}<br>
|
||||||
声望:{{ accData.renown }}<br>
|
声望:{{ accData.renown }}<br>
|
||||||
活力:{{ vitality }}<br>
|
活力:{{ vitality }}<br>
|
||||||
罪恶值:0<br>
|
罪恶值:{{ accData.enemy }}<br>
|
||||||
帮派:无<br>
|
帮派:无<br>
|
||||||
<div v-if="buff.length > 0">
|
<div v-if="buff.length > 0">
|
||||||
---◈BUFF状态◈---<br>
|
---◈BUFF状态◈---<br>
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
坐骑:无<br>
|
坐骑:无<br>
|
||||||
成就:<br>
|
成就:<br>
|
||||||
个性签名:{{ userData.sign }}<br>
|
个性签名:{{ userData.sign }}<br>
|
||||||
罪恶值:0<br>
|
罪恶值:{{ accData.enemy }}<br>
|
||||||
师德:{{ accData.teach }}<br>
|
师德:{{ accData.teach }}<br>
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
@@ -98,6 +98,9 @@
|
|||||||
<div class="content" v-if="team.state == 1">
|
<div class="content" v-if="team.state == 1">
|
||||||
队伍:<Abar :href='"/user/team/info?id=" + team.team.teamId'>{{ team.team.name }}</Abar>
|
队伍:<Abar :href='"/user/team/info?id=" + team.team.teamId'>{{ team.team.name }}</Abar>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="content" v-if="isPk">
|
||||||
|
<Abutton @click="FightAtk">攻击</Abutton>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
|
||||||
@@ -112,6 +115,7 @@ const online = ref(0);
|
|||||||
const onMap = ref('');
|
const onMap = ref('');
|
||||||
const isFriend = ref(false);
|
const isFriend = ref(false);
|
||||||
const isEnemy = ref(false);
|
const isEnemy = ref(false);
|
||||||
|
const isPk = ref(false);
|
||||||
const team = ref<any>({});
|
const team = ref<any>({});
|
||||||
/**装备定义 */
|
/**装备定义 */
|
||||||
const equ = ref<Array<any>>([]);
|
const equ = ref<Array<any>>([]);
|
||||||
@@ -150,7 +154,7 @@ const BindData = async (): Promise<void> => {
|
|||||||
isFriend.value = result.data.isFriend;
|
isFriend.value = result.data.isFriend;
|
||||||
isEnemy.value = result.data.isEnemy;
|
isEnemy.value = result.data.isEnemy;
|
||||||
team.value = result.data.team;
|
team.value = result.data.team;
|
||||||
|
isPk.value = result.data.isPk;
|
||||||
equ.value = result.data.equ;
|
equ.value = result.data.equ;
|
||||||
suit.value = result.data.suit;
|
suit.value = result.data.suit;
|
||||||
Hold.value = equ.value.filter(it => it.code == 'Hold');
|
Hold.value = equ.value.filter(it => it.code == 'Hold');
|
||||||
@@ -163,6 +167,7 @@ const BindData = async (): Promise<void> => {
|
|||||||
Fashion.value = equ.value.filter(it => it.code == 'Fashion');
|
Fashion.value = equ.value.filter(it => it.code == 'Fashion');
|
||||||
Wing.value = equ.value.filter(it => it.code == 'Wing');
|
Wing.value = equ.value.filter(it => it.code == 'Wing');
|
||||||
Decorate.value = equ.value.filter(it => it.code == 'Decorate');
|
Decorate.value = equ.value.filter(it => it.code == 'Decorate');
|
||||||
|
console.log(result);
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (result.code == 101) {
|
else if (result.code == 101) {
|
||||||
@@ -210,4 +215,17 @@ const AddEnemy = async (): Promise<void> => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const FightAtk = async () => {
|
||||||
|
let no = PageExtend.QueryString("no");
|
||||||
|
MessageExtend.LoadingToast("战斗初始化...");
|
||||||
|
let result = await FightService.FightPerson(no);
|
||||||
|
MessageExtend.LoadingClose();
|
||||||
|
if (result.code == 0) {
|
||||||
|
return PageExtend.Redirect("/fight?f=" + result.data);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
MessageExtend.ShowDialog("提示", result.msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@@ -10,6 +10,14 @@ export class FightService {
|
|||||||
return await ApiService.Request("post", "/Fight/FightMonster", { type, monsterId, sign });
|
return await ApiService.Request("post", "/Fight/FightMonster", { type, monsterId, sign });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色战斗生成
|
||||||
|
* GET /Fight/FightPerson
|
||||||
|
*/
|
||||||
|
static async FightPerson(no: string) {
|
||||||
|
return await ApiService.Request("get", "/Fight/FightPerson", { no });
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 战斗接口
|
* 战斗接口
|
||||||
* POST /Fight/Fight
|
* POST /Fight/Fight
|
||||||
|
|||||||
9
Web/src/services/Index/RankService.ts
Normal file
9
Web/src/services/Index/RankService.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
export class RankService {
|
||||||
|
/**
|
||||||
|
* 获取排名数据
|
||||||
|
* GET /Rank/GetRankData
|
||||||
|
*/
|
||||||
|
static async GetRankData(type: number, page: number) {
|
||||||
|
return await ApiService.Request("get", "/Rank/GetRankData", { type, page });
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -38,4 +38,12 @@ export class StoreService {
|
|||||||
static async Sale(npcId: number, count: number, search: string, type: number, id: string) {
|
static async Sale(npcId: number, count: number, search: string, type: number, id: string) {
|
||||||
return await ApiService.Request("post", "/Map/Store/Sale", { npcId, count, search, type, id });
|
return await ApiService.Request("post", "/Map/Store/Sale", { npcId, count, search, type, id });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量出售装备
|
||||||
|
* GET /Map/Store/BathSaleEqu
|
||||||
|
*/
|
||||||
|
static async BathSaleEqu(npcId: number, query: string) {
|
||||||
|
return await ApiService.Request("get", "/Map/Store/BathSaleEqu", { npcId, query });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -142,7 +142,7 @@ export class FightTool {
|
|||||||
if (this.randomTrigger(atkUser.del_Fashion)) {
|
if (this.randomTrigger(atkUser.del_Fashion)) {
|
||||||
if (defUser.code == 'Person') {
|
if (defUser.code == 'Person') {
|
||||||
remData.push({
|
remData.push({
|
||||||
"code": "equ",
|
"code": "Equ",
|
||||||
"par": "Fashion",
|
"par": "Fashion",
|
||||||
"count": 1
|
"count": 1
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user