The generic EventChipRegistrationRequest/EventChipExitDialog/EventChip
RegistrationResult packets predate this feature and are reused by other
NPCs; renaming them to GoldenArcher* broke the public packet API and
docs filenames for no benefit. Also reverts unrelated BOM removal,
blank-line and escaping churn (GameConfiguration.cs, Character.cs,
Directory.Packages.props, Startup.csproj) and ~3900 lines of
trailing-whitespace-only diff noise in ServerToClientPacketTests.cs,
keeping only the one genuinely new test for EventChipRegistrationResult.
Squashed from the feature/golden-archer branch history (62 iterative
commits) into a single commit for reviewability. Adds a generic
item-registration engine (IItemRegistrationStrategy + feature plug-in +
NPC-configurable rules) with a concrete Golden Archer / Rena strategy,
the EventChip* packets it uses, and supporting EF migrations.
The QuestProgressExtended packet (F6 0C) has a declared length of 272 bytes.
A C1 packet header only supports a 1-byte length field (max 255 bytes), so
the correct header type is C2, which uses a 2-byte length field.
- Rename C1-F6-0C-QuestProgressExtended_by-server.md to C2-F6-0C-...
- Fix the packet type byte (0xC1 -> 0xC2) and length field width (1 -> 2 bytes)
- Fix field offsets: C2 header is 4 bytes (not 3), shifting all fields by 1
- Update the link in ServerToClient.md
Now we can transmit values of Health, Shield, Mana, AG, Damage, Experience above 65k. I widened all to 32 bit.
Additionally, I added a message to add more than one statpoint at a time.
These changes will be added to my MuMain sources soon as well.
It kinda works now, but doesn't handle all edge cases yet.
TODO:
* before start:
* Check if > 1 player
* allow buff in safezone
* on enter:
* leave party
* remove buffs of skills
* remove fenrir, horse(?), raven
* on end:
* Ranking
* Other:
* Handle relogin when player was in CC before
* Fixed an issue in the model generator code
When an inherited base class has a collection with a standalone type which would cause the generation of a join-class for a many-to-many-relationship, it didn't create the required join class. It created the join class for the inherited class twice. Instead of taking names from the declared type (the base class), we must use the reflected type (the actual, inheriting class).
* Extension of the data model
* Extension of the drop logic
* Allow more than one ItemDropItemGroup per item and money drops
* Extended packet definitions by some item drop effects
* Added view plugins to show effects
* Added chat commands to test effects
* Added data initialization for box of luck and similar
* Adapted logic to consider effects
* fixed data initialization
* Fixed duplicate drops at 'Blue Ribbon Box'
* Sorted items to spot duplicates easier
* removed some empty lines
* Added Rings of Warrior to new characters
* Removed unused parameter
* Added packet definitions
* Added plugin to show level up effects to other players
* Added Stats.MasterPointsPerLevelUp
* Extended the GameConfiguration
* Adapted the experience gain logic
* Adapted the view plugin
* Fixed experience calculation
It's now more closer to the original server.
* current state of 0.95d integration
notes:
* initialization data is not complete - it was just copied from 0.75 by now
* there is some kind of bug, so that the client doesn't show the character when entering the game. couldn't find out what's wrong yet
* added missing packet changes
* fixed invisible character
thanks @fos83 for the hints
* Fixed hit messages which were sent with false header code
The character moved on the map instead
* Fixed skill animations
* Fixed skill usage
* Fixed consumption of items
* fixed guild creation
* fixed gate entering and teleport skill
* fixed adding/removing skills
* fixed closing chaos machine dialog
* Adapted data initialization to actual 0.95d config
* Devil Square - current state
My current state of implementing the devil square event.
Still some things to do - i didn't do any tests yet, too.
* Fixed missing ticket removing when entering event
* Fixed entering devil square event
* the result message had the wrong size
* fixed intepreting the level of the devil square and the inventory slot index
* Fixed selecting the correct map definition
* fixed att files for devil square
* Added missing player limit
* Added missing max item level for event tickets
* Set Noria as safe zone for devil square
* Use DevilSquareInitializer of Season 6 for Season 6
* Improvements for Devil Square (etc.)
* fixed state change notifications, as they're sent 30 seconds in advance
* changed locking to use a SemaphoreSlim to prevent locking threads of the thread pool
* Current state of the devil square development
New stuff:
* Rewards
* Ranking
Changes:
* Cleaned up the item drop generator a bit
* Optimized money distribution within a party
What's missing:
* Different monsters should spawn at different times. The monsters get harder over time. At the end, there is a one-time spawn of 5 boss monsters.
* I'm also not sure, if the packet for the result is correct, because in my tests, the client showed nothing.
* Another thing is, that when a client leaves the game while in devil square, he will respawn there, too. Instead, he has to be moved back to the noria map when he leaves the game.
* Fixed that a player respawns at event maps after reconnection
Also fixed, that the player kept getting logged in the game even if it already disconnected. Exceptions happened when the server was trying to send some packets after it was disconnected.
* Update ConnectionExtensions.cs
* Implemented wave based spawns for mini games
* fixed namespace
* fixed regex replacement for resistancies
* updated todos
* Fixed item extension method CanHaveSkill
When an item can not be equipped, it can't have skill. Because of this bug, scrolls and orbs dropped with skill, because they have a skill defined in the ItemDefinition. But this skill is meant to be learned, not meant to be equipped.
* added missing comment
* Fixed versioning of the packet handler for normal hits
* Fixed sending of MiniGameScoreTable
When not using the constructor, the header code is not set.
* Fixed item serialization
* Added check for the ticket item level
* Some code fixes according to codacy
* Event ticket ingredients should drop
* added missing ConfigureAwait(false)
* more missing ConfigureAwait(false) ...
* Character is not moving back to its spawn point after attacking a target. Reason was the attack animation packet, which should not be sent back to the attacking player.
* Character walking packets
* Money drops
* Quest packets should not be sent, because this version doesn't have quests
* Map change packet was corrected
Jekyll (more precisely: jekyll-relative-links) has problems when there are any escaped characters or unescaped brackets in the links.
As I don't expect any improvements in this direction, I change the naming scheme in my project.