44
55namespace MUnique . OpenMU . GameLogic . PlayerActions . Guild ;
66
7+ using MUnique . OpenMU . GameLogic . Views ;
78using MUnique . OpenMU . GameLogic . Views . Guild ;
89using MUnique . OpenMU . Interfaces ;
910
@@ -25,15 +26,13 @@ public async ValueTask RequestAsync(Player player, ushort targetPlayerId, GuildR
2526 if ( player . GuildStatus is not { } guildStatus
2627 || player . GameContext is not IGameServerContext serverContext )
2728 {
28- await player . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > (
29- p => p . ShowResultAsync ( relationshipType , requestType , false ) ) . ConfigureAwait ( false ) ;
29+ await player . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > ( p => p . ShowResultAsync ( relationshipType , requestType , GuildRelationshipChangeResultType . Failed , targetPlayerId ) ) . ConfigureAwait ( false ) ;
3030 return ;
3131 }
3232
3333 if ( guildStatus . Position != GuildPosition . GuildMaster )
3434 {
35- await player . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > (
36- p => p . ShowResultAsync ( relationshipType , requestType , false ) ) . ConfigureAwait ( false ) ;
35+ await player . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > ( p => p . ShowResultAsync ( relationshipType , requestType , GuildRelationshipChangeResultType . NoAuthorization , targetPlayerId ) ) . ConfigureAwait ( false ) ;
3736 return ;
3837 }
3938
@@ -42,8 +41,7 @@ await player.InvokeViewPlugInAsync<IGuildRelationshipChangeResultPlugIn>(
4241 {
4342 // When clearing hostility, targetGuildId is not used (the current hostility target is removed)
4443 await serverContext . GuildServer . SetHostilityAsync ( guildStatus . GuildId , 0 , false ) . ConfigureAwait ( false ) ;
45- await player . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > (
46- p => p . ShowResultAsync ( relationshipType , requestType , true ) ) . ConfigureAwait ( false ) ;
44+ await player . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > ( p => p . ShowResultAsync ( relationshipType , requestType , GuildRelationshipChangeResultType . Success , targetPlayerId ) ) . ConfigureAwait ( false ) ;
4745 return ;
4846 }
4947
@@ -52,44 +50,37 @@ await player.InvokeViewPlugInAsync<IGuildRelationshipChangeResultPlugIn>(
5250 if ( targetPlayer ? . GuildStatus is not { } targetGuildStatus
5351 || await serverContext . GuildServer . GetGuildAsync ( targetGuildStatus . GuildId ) . ConfigureAwait ( false ) is not { Name : not null } targetGuild )
5452 {
55- await player . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > (
56- p => p . ShowResultAsync ( relationshipType , requestType , false ) ) . ConfigureAwait ( false ) ;
53+ await player . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > ( p => p . ShowResultAsync ( relationshipType , requestType , GuildRelationshipChangeResultType . Failed , targetPlayerId ) ) . ConfigureAwait ( false ) ;
5754 return ;
5855 }
5956
6057 if ( targetGuildStatus . Position != GuildPosition . GuildMaster )
6158 {
62- await player . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > (
63- p => p . ShowResultAsync ( relationshipType , requestType , false ) ) . ConfigureAwait ( false ) ;
59+ await player . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > ( p => p . ShowResultAsync ( relationshipType , requestType , GuildRelationshipChangeResultType . Failed , targetPlayerId ) ) . ConfigureAwait ( false ) ;
6460 return ;
6561 }
6662
6763 if ( relationshipType == GuildRelationshipType . Hostility && requestType == GuildRelationshipRequestType . Join )
6864 {
6965 // Hostility is set unilaterally (no consent from target needed)
70- var success = await serverContext . GuildServer . SetHostilityAsync (
71- guildStatus . GuildId , targetGuildStatus . GuildId , true ) . ConfigureAwait ( false ) ;
72- await player . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > (
73- p => p . ShowResultAsync ( relationshipType , requestType , success ) ) . ConfigureAwait ( false ) ;
66+ // TODO: Maybe return GuildRelationshipChangeResult from the guild server to be more specific about the failure reason
67+ var success = await serverContext . GuildServer . SetHostilityAsync ( guildStatus . GuildId , targetGuildStatus . GuildId , true ) . ConfigureAwait ( false ) ;
68+ await player . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > ( p => p . ShowResultAsync ( relationshipType , requestType , success ? GuildRelationshipChangeResultType . Success : GuildRelationshipChangeResultType . Failed , targetPlayerId ) ) . ConfigureAwait ( false ) ;
7469 return ;
7570 }
7671
7772 if ( relationshipType == GuildRelationshipType . Alliance && requestType == GuildRelationshipRequestType . Join )
7873 {
7974 // Store the pending request on the target player and ask for consent
8075 targetPlayer . PendingAllianceRequest = player ;
81- var requestingGuild = await serverContext . GuildServer . GetGuildAsync ( guildStatus . GuildId ) . ConfigureAwait ( false ) ;
82- var requestingGuildName = requestingGuild ? . Name ?? string . Empty ;
83- await targetPlayer . InvokeViewPlugInAsync < IShowGuildRelationshipRequestPlugIn > (
84- p => p . ShowRequestAsync (
85- requestingGuildName ,
86- relationshipType ,
87- requestType ) ) . ConfigureAwait ( false ) ;
76+ await targetPlayer . InvokeViewPlugInAsync < IShowGuildRelationshipRequestPlugIn > ( p => p . ShowRequestAsync (
77+ player ,
78+ relationshipType ,
79+ requestType ) ) . ConfigureAwait ( false ) ;
8880 return ;
8981 }
9082
91- await player . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > (
92- p => p . ShowResultAsync ( relationshipType , requestType , false ) ) . ConfigureAwait ( false ) ;
83+ await player . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > ( p => p . ShowResultAsync ( relationshipType , requestType , GuildRelationshipChangeResultType . Failed , targetPlayerId ) ) . ConfigureAwait ( false ) ;
9384 }
9485
9586 /// <summary>
@@ -112,22 +103,22 @@ public async ValueTask ProcessResponseAsync(Player player, GuildRelationshipType
112103 return ;
113104 }
114105
106+ var guildMasterId = player . GetId ( requester ) ;
115107 if ( ! accepted )
116108 {
117- await requester . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > (
118- p => p . ShowResultAsync ( relationshipType , requestType , false ) ) . ConfigureAwait ( false ) ;
109+ await requester . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > ( p => p . ShowResultAsync ( relationshipType , requestType , GuildRelationshipChangeResultType . RequestCancelled , guildMasterId ) ) . ConfigureAwait ( false ) ;
119110 return ;
120111 }
121112
122113 if ( relationshipType == GuildRelationshipType . Alliance && requestType == GuildRelationshipRequestType . Join )
123114 {
124- var success = await serverContext . GuildServer . CreateAllianceAsync (
125- requesterGuildStatus . GuildId , responderGuildStatus . GuildId ) . ConfigureAwait ( false ) ;
115+ // TODO: Maybe return GuildRelationshipChangeResult from the guild server to be more specific about the failure reason
116+ var success = await serverContext . GuildServer . CreateAllianceAsync ( requesterGuildStatus . GuildId , responderGuildStatus . GuildId ) . ConfigureAwait ( false )
117+ ? GuildRelationshipChangeResultType . Success
118+ : GuildRelationshipChangeResultType . Failed ;
126119
127- await requester . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > (
128- p => p . ShowResultAsync ( relationshipType , requestType , success ) ) . ConfigureAwait ( false ) ;
129- await player . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > (
130- p => p . ShowResultAsync ( relationshipType , requestType , success ) ) . ConfigureAwait ( false ) ;
120+ await requester . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > ( p => p . ShowResultAsync ( relationshipType , requestType , success , guildMasterId ) ) . ConfigureAwait ( false ) ;
121+ await player . InvokeViewPlugInAsync < IGuildRelationshipChangeResultPlugIn > ( p => p . ShowResultAsync ( relationshipType , requestType , success , guildMasterId ) ) . ConfigureAwait ( false ) ;
131122 }
132123 }
133124}
0 commit comments