Open Zetrith opened 1 year ago
A point I missed: there's potential for conflict in mods overwriting each other's overrides when multiple are requested on the same method.
Amendments:
[PrepatcherOverride]
will just request the existence of a virtual method calling base.I feel the example should (for extra clarity) show the methods for the class A
being called along the classes B
and C
. For a moment, I got slightly confused by what PrepatcherOverride
does - thinking it replaces the method in class A
instead of adding the overrides in B
and C
.
Example
Implementation
A static override template method is copied into the the target class becoming a new instance method within it.
call
IL instructions with it as an operand in all game and mod assemblies get turned intocallvirt
instructions and the process is done.For an instance override template method, the process is the same but (*) results in an error because it doesn't make sense to use Prepatcher there - you can just override as usual using the C# keyword (unless the method was turned virtual by Prepatcher).
Compatibility
Poses some incompatibility risk with transpilers because
call
instructions to methods made virtual need to be turned intocallvirt
instructions.