ModernUO/Projects/UOContent/Engines/ExileHunterBestiary/INSTALLATION_GUIDE.txt

278 lines
No EOL
6 KiB
Text

===============================================
EXILE HUNTER'S BESTIARY - ModernUO EDITION
Final stable version
Author: Imagine
Refactored: Expa
===============================================
INSTALL
1. Copy the ExileHunterBestiary folder to:
Projects/UOContent/Custom/ExileHunterBestiary/
2. Make sure the generated death-event file exists:
HunterCreatureDeathEvent.cs
3. Build the project:
dotnet build
4. Start the server.
IMPORTANT:
The final version does not require any changes to BaseCreature.cs.
Do not add:
- EventSink.CreatureDeath
- a custom Kill() override
- a custom OnDeath() override
- a BaseCreature damage patch
Do not keep this legacy file:
BaseCreature.ExileHunterBestiary.cs
Do not keep old patch files such as:
PATCH_BaseCreature.txt
ACTIVE DEATH HANDLER
Creature deaths are handled by the generated ModernUO event:
BaseCreature.CreatureDeathEvent
The handler is located in:
HunterCreatureDeathEvent.cs
This is not an EventSink event. Do not use:
EventSink.CreatureDeath
COMBAT TRACKING
HunterCombatTracker receives player combat activity through:
EventSink.AggressiveAction
The tracker stores:
- the last player attacker;
- the player's pet owner when applicable;
- the creature serial;
- the creature location;
- the creature map;
- the time of the last hit.
The stored location is used because ModernUO can remove the creature
before the generated death event is handled.
CORPSE DROPS
The treatise is placed into the creature's corpse.
If the corpse is not available immediately, the system retries for a
short period.
The system does not intentionally place the treatise on the ground.
If no corpse can be found after the retry period, the drop is canceled.
CONFIGURATION
Add these values inside the "settings" object in modernuo.json:
"exileBestiary.enabled": "True",
"exileBestiary.debug": "False",
"exileBestiary.damage.mode": "Mark",
"exileBestiary.damage.perCreatureBonus": "0.10",
"exileBestiary.damage.categoryMilestoneBonus": "0.20",
"exileBestiary.damage.totalCap": "0.25",
"exileBestiary.damage.markDuration": "00:00:10",
"exileBestiary.damage.markTickSeconds": "00:00:02",
"exileBestiary.damage.markTickPercent": "0.01",
"exileBestiary.drop.chance": "-1.0",
"exileBestiary.drop.pityThreshold": "40"
Drop chance values:
-1.0 Use the creature's registered chance
1.0 100% chance
0.5 50% chance
0.02 2% chance
0.0 No random drops
Example for guaranteed drops:
"exileBestiary.drop.chance": "1.0"
The configuration must be inside:
{
"settings": {
...
}
}
DAMAGE MODE
The recommended mode is:
"exileBestiary.damage.mode": "Mark"
Mark mode is patch-free and does not require BaseCreature.cs changes.
The mark system uses:
- EventSink.AggressiveAction
- a timer
- public ModernUO APIs
It applies periodic bonus damage while the hunter remains near
the marked creature.
COMMANDS
[Bestiary
Opens the Hunter's Bestiary.
[Bestiario
Alias for [Bestiary.
[BestiaryTest
Game Master command that runs the treatise pipeline against the nearest
registered creature.
The command uses the configured chance and is intended for testing.
[BestiaryDiag
Game Master diagnostic command that displays combat-tracker counters.
STARTUP CHECK
The server should report a bestiary initialization message similar to:
Initialized with N creatures across 8 categories.
When Mark mode is enabled, it should also report:
Hunter's Mark enabled ...
TROUBLESHOOTING
No treatise appears:
1. Confirm the creature exists in BestiaryData.cs.
2. Confirm the creature type was registered at startup.
3. Confirm exileBestiary.enabled is True.
4. Confirm the player actually damaged the creature.
5. Confirm EventSink.AggressiveAction is receiving events.
6. Confirm the generated event file exists.
7. Confirm no old BaseCreature patch file remains.
8. Set exileBestiary.drop.chance to 1.0.
9. Temporarily set exileBestiary.debug to True.
No combat events are tracked:
Run:
[BestiaryDiag
The AggressiveAction counter should increase after attacking a creature.
Log says "killer not resolved":
The system did not receive LastKiller and did not find a valid player
in HunterCombatTracker.
Log says "killer is not a player":
The kill was credited to an NPC, an uncontrolled creature, or another
non-player source.
Log says "creature not registered":
The creature type is not present in BestiaryData.cs or could not be
resolved by AssemblyHandler.FindTypeByName.
Treatise is already learned:
A player receives only one treatise for a creature that has already
been mastered. Additional drops are blocked for that player.
Treatise is not visible:
Open the creature corpse and check its contents. The treatise is not
automatically placed into the player's backpack.
SAVE DATA
Profiles are stored at:
Data/ExileHunterProfiles.xml
Saved data includes:
- learned creature IDs;
- pity counters;
- player serials.
Invalid creature IDs are ignored during loading.
FILES TO KEEP
BestiaryCategory.cs
BestiaryData.cs
BestiaryRegistry.cs
DamageMode.cs
HunterBestiaryEngine.cs
HunterCombatTracker.cs
HunterCreatureDeathEvent.cs
HunterCreatureEntry.cs
HunterProfile.cs
HunterProfileStore.cs
HunterBestiaryGump.cs
HunterDamageHook.cs
HunterDeathHook.cs
HunterMarkHook.cs
HunterBestiary.cs
HunterTreatise.cs
LEGACY FILES TO REMOVE
BaseCreature.ExileHunterBestiary.cs
PATCH_BaseCreature.txt
Also remove any legacy bestiary file that overrides:
BaseCreature.Kill()
BaseCreature.OnBeforeDeath()
BaseCreature.OnDeath()
PRODUCTION SETTINGS
After confirming the system works, use:
"exileBestiary.debug": "False"
Keep debug enabled only while diagnosing the drop pipeline.