@@ -73,7 +73,7 @@ sealed class WorldStateGameSync : IDisposable
73
73
74
74
private readonly unsafe delegate * unmanaged< ContainerInterface * , float > _calculateMoveSpeedMulti ;
75
75
76
- private unsafe delegate void ProcessMapEffectDelegate ( byte * data ) ;
76
+ private unsafe delegate void ProcessMapEffectDelegate ( ContentDirector * director , byte * packet ) ;
77
77
78
78
private readonly Hook < ProcessMapEffectDelegate > _processMapEffect1Hook ;
79
79
private readonly Hook < ProcessMapEffectDelegate > _processMapEffect2Hook ;
@@ -143,12 +143,15 @@ public unsafe WorldStateGameSync(WorldState ws, ActionManagerEx amex)
143
143
_calculateMoveSpeedMulti = ( delegate * unmanaged< ContainerInterface * , float > ) Service . SigScanner . ScanText ( "E8 ?? ?? ?? ?? 44 0F 28 D8 45 0F 57 D2" ) ;
144
144
Service . Log ( $ "[WSG] CalculateMovementSpeedMultiplier address = 0x{ ( nint ) _calculateMoveSpeedMulti : X} ") ;
145
145
146
- var processMapEffectAddr = Service . SigScanner . ScanText ( "E8 ?? ?? ?? ?? E9 ?? ?? ?? ?? 4C 8D 47 10 8B D6 48 8D 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 8D 4F 10 E8 ?? ?? ?? ?? E9 ?? ?? ?? ?? 4C 8D 47 10 8B D6 48 8D 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 8D 4F 10 E8 ?? ?? ?? ?? E9 ?? ?? ?? ?? 48 8D 4F 10 BA" ) ;
147
- _processMapEffect1Hook = Service . Hook . HookFromAddress < ProcessMapEffectDelegate > ( processMapEffectAddr , ProcessMapEffect1Detour ) ;
146
+ var mapEffectAddrs = Service . SigScanner . ScanAllText ( "40 55 41 57 48 83 EC ?? 48 83 B9" ) ;
147
+ if ( mapEffectAddrs . Length != 3 )
148
+ throw new InvalidOperationException ( $ "expected 3 matches for multi-MapEffect handlers, but got { mapEffectAddrs . Length } ") ;
149
+
150
+ _processMapEffect1Hook = Service . Hook . HookFromAddress < ProcessMapEffectDelegate > ( mapEffectAddrs [ 0 ] , ProcessMapEffect1Detour ) ;
148
151
_processMapEffect1Hook . Enable ( ) ;
149
- _processMapEffect2Hook = Service . Hook . HookFromAddress < ProcessMapEffectDelegate > ( processMapEffectAddr + 0x40 , ProcessMapEffect2Detour ) ;
152
+ _processMapEffect2Hook = Service . Hook . HookFromAddress < ProcessMapEffectDelegate > ( mapEffectAddrs [ 1 ] , ProcessMapEffect2Detour ) ;
150
153
_processMapEffect2Hook . Enable ( ) ;
151
- _processMapEffect3Hook = Service . Hook . HookFromAddress < ProcessMapEffectDelegate > ( processMapEffectAddr + 0x80 , ProcessMapEffect3Detour ) ;
154
+ _processMapEffect3Hook = Service . Hook . HookFromAddress < ProcessMapEffectDelegate > ( mapEffectAddrs [ 2 ] , ProcessMapEffect3Detour ) ;
152
155
_processMapEffect3Hook . Enable ( ) ;
153
156
Service . Log ( $ "[WSG] MapEffect addresses = 0x{ _processMapEffect1Hook . Address : X} , 0x{ _processMapEffect2Hook . Address : X} , 0x{ _processMapEffect3Hook . Address : X} ") ;
154
157
}
@@ -1026,27 +1029,28 @@ private unsafe void ProcessPacketOpenTreasureDetour(uint playerID, byte* packet)
1026
1029
return res;
1027
1030
}
1028
1031
1029
- private unsafe void ProcessMapEffect1Detour( byte * data )
1032
+ private unsafe void ProcessMapEffect1Detour( ContentDirector * director , byte * packet )
1030
1033
{
1031
- _processMapEffect1Hook. Original ( data ) ;
1032
- ProcessMapEffect( data , 10 , 18 ) ;
1034
+ _processMapEffect1Hook. Original ( director , packet ) ;
1035
+ ProcessMapEffect( packet , 10 , 18 ) ;
1033
1036
}
1034
1037
1035
- private unsafe void ProcessMapEffect2Detour( byte * data )
1038
+ private unsafe void ProcessMapEffect2Detour( ContentDirector * director , byte * packet )
1036
1039
{
1037
- _processMapEffect2Hook. Original ( data ) ;
1038
- ProcessMapEffect( data , 18 , 34 ) ;
1040
+ _processMapEffect2Hook. Original ( director , packet ) ;
1041
+ ProcessMapEffect( packet , 18 , 34 ) ;
1039
1042
}
1040
1043
1041
- private unsafe void ProcessMapEffect3Detour( byte * data )
1044
+ private unsafe void ProcessMapEffect3Detour( ContentDirector * director , byte * packet )
1042
1045
{
1043
- _processMapEffect3Hook. Original ( data ) ;
1044
- ProcessMapEffect( data , 26 , 50 ) ;
1046
+ _processMapEffect3Hook. Original ( director , packet ) ;
1047
+ ProcessMapEffect( packet , 26 , 50 ) ;
1045
1048
}
1046
1049
1047
1050
private unsafe void ProcessMapEffect( byte * data , byte offLow , byte offIndex )
1048
1051
{
1049
- for ( var i = 0 ; i < * data ; ++ i)
1052
+ var count = * data ;
1053
+ for ( var i = 0 ; i < count ; ++ i)
1050
1054
{
1051
1055
var low = * ( ushort * ) ( data + 2 * i + offLow) ;
1052
1056
var high = * ( ushort * ) ( data + 2 * i + 2 ) ;
0 commit comments