1- // GameFrameX 组织下的以及组织衍生的项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
2- //
3- // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE 文件。
4- //
5- // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
6-
7- using GameFrameX . Apps . Common . Session ;
8- using GameFrameX . Apps . Player . Bag . Entity ;
9- using GameFrameX . Config ;
10- using GameFrameX . Config . Tables ;
11- using GameFrameX . DataBase ;
12- using GameFrameX . Hotfix . Logic . Player . Bag ;
13-
14- namespace GameFrameX . Hotfix . Logic . Http . Bag ;
15-
16- /// <summary>
17- /// 请求给玩家发送道具
18- /// </summary>
19- [ HttpMessageMapping ( typeof ( ReqPlayerSendItemHttpHandler ) ) ]
20- [ HttpMessageRequest ( typeof ( ReqPlayerSendItemRequest ) ) ]
21- [ HttpMessageResponse ( typeof ( ReqPlayerSendItemResponse ) ) ]
22- [ Description ( "请求给玩家发送道具" ) ]
23- public sealed class ReqPlayerSendItemHttpHandler : BaseHttpHandler
24- {
25- public override async Task < string > Action ( string ip , string url , HttpMessageRequestBase requestBase )
26- {
27- var request = ( ReqPlayerSendItemRequest ) requestBase ;
28- var playerSession = SessionManager . GetByRoleId ( request . RoleId ) ;
29- Dictionary < int , long > itemDic = new Dictionary < int , long > ( ) ;
30-
31- var tbItemConfig = ConfigComponent . Instance . GetConfig < TbItemConfig > ( ) ;
32- if ( tbItemConfig != null )
33- {
34- foreach ( var item in request . Items )
35- {
36- if ( tbItemConfig . Get ( item . Key ) . IsNull ( ) )
37- {
38- continue ;
39- }
40-
41- itemDic [ item . Key ] = item . Value ;
42- }
43- }
44-
45- if ( playerSession . IsNotNull ( ) )
46- {
47- // 玩家在线
48- var bagComponentAgent = await ActorManager . GetComponentAgent < BagComponentAgent > ( request . RoleId ) ;
49- await bagComponentAgent . UpdateChanged ( playerSession . WorkChannel , itemDic ) ;
50- }
51- else
52- {
53- // 玩家不在线
54- var bagState = await GameDb . FindAsync < BagState > ( request . RoleId ) ;
55-
56- foreach ( var item in itemDic )
57- {
58- if ( bagState . List . TryGetValue ( item . Key , out var value ) )
59- {
60- value . Count += item . Value ;
61- if ( value . Count <= 0 )
62- {
63- bagState . List . Remove ( item . Key ) ;
64- }
65- }
66- else
67- {
68- var bagItem = new BagItemState
69- {
70- Count = item . Value ,
71- ItemId = item . Key ,
72- } ;
73- bagState . List [ item . Key ] = bagItem ;
74- }
75- }
76-
77- await GameDb . SaveOneAsync ( bagState ) ;
78- }
79-
80- return HttpJsonResult . SuccessString ( new ReqPlayerSendItemResponse { Items = itemDic , } ) ;
81- }
82- }
83-
84- public sealed class ReqPlayerSendItemRequest : HttpMessageRequestBase
85- {
86- [ Required ]
87- [ Description ( "角色ID" ) ]
88- [ Range ( 1 , long . MaxValue ) ]
89- public long RoleId { get ; set ; }
90-
91- [ Required ] [ Description ( "道具列表" ) ] public Dictionary < int , long > Items { get ; set ; } = new Dictionary < int , long > ( ) ;
92- }
93-
94- public sealed class ReqPlayerSendItemResponse : HttpMessageResponseBase
95- {
96- [ Description ( "成功的道具列表" ) ] public Dictionary < int , long > Items { get ; set ; } = new Dictionary < int , long > ( ) ;
1+ // GameFrameX 组织下的以及组织衍生的项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
2+ //
3+ // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE 文件。
4+ //
5+ // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
6+
7+ using GameFrameX . Apps . Common . Event ;
8+ using GameFrameX . Apps . Common . EventData ;
9+ using GameFrameX . Apps . Common . Session ;
10+ using GameFrameX . Apps . Player . Bag . Entity ;
11+ using GameFrameX . Hotfix . Logic . Player . Bag ;
12+
13+ namespace GameFrameX . Hotfix . Logic . Http . Bag ;
14+
15+ /// <summary>
16+ /// 请求给玩家发送道具
17+ /// </summary>
18+ [ HttpMessageMapping ( typeof ( ReqPlayerSendItemHttpHandler ) ) ]
19+ [ HttpMessageRequest ( typeof ( ReqPlayerSendItemRequest ) ) ]
20+ [ HttpMessageResponse ( typeof ( ReqPlayerSendItemResponse ) ) ]
21+ [ Description ( "请求给玩家发送道具" ) ]
22+ public sealed class ReqPlayerSendItemHttpHandler : BaseHttpHandler
23+ {
24+ public override async Task < string > Action ( string ip , string url , HttpMessageRequestBase requestBase )
25+ {
26+ var request = ( ReqPlayerSendItemRequest ) requestBase ;
27+ var playerSession = SessionManager . GetByRoleId ( request . RoleId ) ;
28+ Dictionary < int , long > itemDic = new Dictionary < int , long > ( ) ;
29+
30+ var tbItemConfig = ConfigComponent . Instance . GetConfig < TbItemConfig > ( ) ;
31+ if ( tbItemConfig != null )
32+ {
33+ foreach ( var item in request . Items )
34+ {
35+ if ( tbItemConfig . Get ( item . Key ) . IsNull ( ) )
36+ {
37+ continue ;
38+ }
39+
40+ itemDic [ item . Key ] = item . Value ;
41+ }
42+ }
43+
44+ // 发送道具事件
45+ var playerSendItemEventData = new OneParam < PlayerSendItemEventData > ( new PlayerSendItemEventData ( request . RoleId , itemDic ) ) ;
46+ EventDispatcher . Dispatch ( request . RoleId , ( int ) EventId . PlayerSendItem , playerSendItemEventData ) ;
47+ if ( playerSession . IsNotNull ( ) )
48+ {
49+ // 玩家在线
50+ var bagComponentAgent = await ActorManager . GetComponentAgent < BagComponentAgent > ( request . RoleId ) ;
51+ await bagComponentAgent . UpdateChanged ( playerSession . WorkChannel , itemDic ) ;
52+ }
53+ else
54+ {
55+ // 玩家不在线
56+ var bagState = await GameDb . FindAsync < BagState > ( request . RoleId ) ;
57+
58+ foreach ( var item in itemDic )
59+ {
60+ if ( bagState . List . TryGetValue ( item . Key , out var value ) )
61+ {
62+ value . Count += item . Value ;
63+ if ( value . Count <= 0 )
64+ {
65+ bagState . List . Remove ( item . Key ) ;
66+ }
67+ }
68+ else
69+ {
70+ var bagItem = new BagItemState
71+ {
72+ Count = item . Value ,
73+ ItemId = item . Key ,
74+ } ;
75+ bagState . List [ item . Key ] = bagItem ;
76+ }
77+ }
78+
79+ await GameDb . SaveOneAsync ( bagState ) ;
80+ }
81+
82+ return HttpJsonResult . SuccessString ( new ReqPlayerSendItemResponse { Items = itemDic , } ) ;
83+ }
84+ }
85+
86+ public sealed class ReqPlayerSendItemRequest : HttpMessageRequestBase
87+ {
88+ [ Required ]
89+ [ Description ( "角色ID" ) ]
90+ [ Range ( 1 , long . MaxValue ) ]
91+ public long RoleId { get ; set ; }
92+
93+ [ Required ] [ Description ( "道具列表" ) ] public Dictionary < int , long > Items { get ; set ; } = new Dictionary < int , long > ( ) ;
94+ }
95+
96+ public sealed class ReqPlayerSendItemResponse : HttpMessageResponseBase
97+ {
98+ [ Description ( "成功的道具列表" ) ] public Dictionary < int , long > Items { get ; set ; } = new Dictionary < int , long > ( ) ;
9799}
0 commit comments