Full Code of NosCoreIO/NosCore for AI

master 20e599074479 cached
976 files
8.7 MB
2.3M tokens
5347 symbols
1 requests
Download .txt
Showing preview only (9,313K chars total). Download the full file or copy to clipboard to get everything.
Repository: NosCoreIO/NosCore
Branch: master
Commit: 20e599074479
Files: 976
Total size: 8.7 MB

Directory structure:
gitextract_crxs70bx/

├── .coderabbit.yaml
├── .editorconfig
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── dependabot.yml
│   └── workflows/
│       └── dotnet.yml
├── .gitignore
├── CONTRIBUTING.md
├── Directory.Build.props
├── Directory.Packages.props
├── LICENSE
├── NosCore.sln
├── NosCore.sln.DotSettings
├── NosCore.sln.startup.json
├── NuGet.config
├── README.md
├── build/
│   └── .gitkeep
├── build-exe.cmd
├── build.cmd
├── codecov.yml
├── configuration/
│   ├── api.yml
│   ├── database.yml
│   ├── logger.yml
│   ├── login.yml
│   ├── master.yml
│   ├── parser.yml
│   └── world.yml
├── deploy/
│   ├── Dockerfile-login
│   ├── Dockerfile-master
│   └── Dockerfile-world
├── docker-compose.yml
├── documentation/
│   ├── PostmanCollection/
│   │   └── NosCore.postman_collection.json
│   └── dat/
│       ├── Card.dat.md
│       ├── Item.dat.md
│       ├── Skill.dat.md
│       ├── monster.dat.md
│       └── quest.dat.md
├── lgtm.yml
├── scripts/
│   ├── Docker - All.cmd
│   ├── Docker - LoginServer.cmd
│   ├── Docker - MasterServer.cmd
│   ├── Docker - Postgres.cmd
│   ├── Docker - ReverseProxy.cmd
│   ├── Docker - Shutdown.cmd
│   ├── Docker - WorldServer.cmd
│   ├── LoginServer.cmd
│   ├── MasterServer.cmd
│   ├── Parser.cmd
│   ├── WorldServer.cmd
│   └── docker-publish.sh
├── src/
│   ├── NosCore.Core/
│   │   ├── AuthorizeRoleAttribute.cs
│   │   ├── Channel.cs
│   │   ├── ChannelInfo.cs
│   │   ├── Concurrency/
│   │   │   └── AsyncLock.cs
│   │   ├── Configuration/
│   │   │   ├── LoginConfiguration.cs
│   │   │   └── WorldConfiguration.cs
│   │   ├── ConfigureJwtBearerOptions.cs
│   │   ├── ConnectionInfo.cs
│   │   ├── Encryption/
│   │   │   ├── BcryptEncryption.cs
│   │   │   ├── Pbkdf2Hasher.cs
│   │   │   └── Sha512Hasher.cs
│   │   ├── Extensions/
│   │   │   └── TypeExtension.cs
│   │   ├── I18N/
│   │   │   ├── GameLanguageLocalizer.cs
│   │   │   └── IGameLanguageLocalizer.cs
│   │   ├── NosCore.Core.csproj
│   │   ├── Observability/
│   │   │   └── NosCoreTelemetry.cs
│   │   ├── Services/
│   │   │   └── IdService/
│   │   │       ├── IIdService.cs
│   │   │       └── IdService.cs
│   │   └── SessionFactory.cs
│   ├── NosCore.Data/
│   │   ├── CommandPackets/
│   │   │   ├── ChangeChannelPacket.cs
│   │   │   ├── ChangeClassPacket.cs
│   │   │   ├── ChangeGenderPacket.cs
│   │   │   ├── ClearInventoryPacket.cs
│   │   │   ├── CommandPacketHeaderAttribute.cs
│   │   │   ├── CreateItemPacket.cs
│   │   │   ├── EffectCommandPacket.cs
│   │   │   ├── EntryPointPacket.cs
│   │   │   ├── FlCommandPacket.cs
│   │   │   ├── GiftPacket.cs
│   │   │   ├── HelpPacket.cs
│   │   │   ├── ICommandPacket.cs
│   │   │   ├── InvisibleCommandPacket.cs
│   │   │   ├── KickPacket.cs
│   │   │   ├── KillPacket.cs
│   │   │   ├── PositionPacket.cs
│   │   │   ├── SetBankGoldPacket.cs
│   │   │   ├── SetGoldCommandPacket.cs
│   │   │   ├── SetHairColorPacket.cs
│   │   │   ├── SetHairStylePacket.cs
│   │   │   ├── SetHeroLevelCommandPacket.cs
│   │   │   ├── SetHeroXpPacket.cs
│   │   │   ├── SetJobLevelCommandPacket.cs
│   │   │   ├── SetJobLevelXpPacket.cs
│   │   │   ├── SetLevelCommandPacket.cs
│   │   │   ├── SetMaintenancePacket.cs
│   │   │   ├── SetReputationPacket.cs
│   │   │   ├── SetSpAdditionPointPacket.cs
│   │   │   ├── SetSpPointPacket.cs
│   │   │   ├── ShoutHerePacket.cs
│   │   │   ├── ShoutPacket.cs
│   │   │   ├── SizePacket.cs
│   │   │   ├── SpeedPacket.cs
│   │   │   └── TeleportPacket.cs
│   │   ├── DataAttributes/
│   │   │   └── StaticMetaDataAttribute.cs
│   │   ├── Dto/
│   │   │   ├── I18NFromAttribute.cs
│   │   │   ├── I18NString.cs
│   │   │   ├── IDTO.cs
│   │   │   ├── II18NDto.cs
│   │   │   ├── IItemInstanceDto.cs
│   │   │   ├── IStaticDto.cs
│   │   │   └── StaticDtoExtension.cs
│   │   ├── Enumerations/
│   │   │   ├── Audit/
│   │   │   │   └── AuditLogType.cs
│   │   │   ├── Battle/
│   │   │   │   └── TargetHitType.cs
│   │   │   ├── Bazaar/
│   │   │   │   ├── BazaarEquipmentType.cs
│   │   │   │   ├── BazaarJeweleryType.cs
│   │   │   │   ├── BazaarMainType.cs
│   │   │   │   └── BazaarUsableType.cs
│   │   │   ├── Buff/
│   │   │   │   ├── AdditionalTypes.cs
│   │   │   │   ├── BCardType.cs
│   │   │   │   ├── BuffType.cs
│   │   │   │   ├── MedalType.cs
│   │   │   │   ├── ShellOptionType.cs
│   │   │   │   └── StaticBonusType.cs
│   │   │   ├── Character/
│   │   │   │   ├── CharacterOption.cs
│   │   │   │   ├── CharacterState.cs
│   │   │   │   ├── FactionType.cs
│   │   │   │   └── MateType.cs
│   │   │   ├── Event/
│   │   │   │   ├── EventActionType.cs
│   │   │   │   └── EventType.cs
│   │   │   ├── Family/
│   │   │   │   ├── FamilyAuthority.cs
│   │   │   │   ├── FamilyLogType.cs
│   │   │   │   └── FamilyMemberRank.cs
│   │   │   ├── Group/
│   │   │   │   ├── GroupSharingType.cs
│   │   │   │   └── GroupType.cs
│   │   │   ├── HashingType.cs
│   │   │   ├── I18N/
│   │   │   │   └── LanguageKey.cs
│   │   │   ├── Interaction/
│   │   │   │   ├── Act4RaidType.cs
│   │   │   │   ├── ArenaTeamType.cs
│   │   │   │   ├── ChatType.cs
│   │   │   │   ├── GeneralLogType.cs
│   │   │   │   ├── InRespawnType.cs
│   │   │   │   ├── PenaltyType.cs
│   │   │   │   ├── ReceiverType.cs
│   │   │   │   ├── RespawnType.cs
│   │   │   │   ├── ScriptedInstanceType.cs
│   │   │   │   ├── TalentArenaOptionType.cs
│   │   │   │   └── TeleporterType.cs
│   │   │   ├── Items/
│   │   │   │   ├── CellonType.cs
│   │   │   │   ├── ItemEffectType.cs
│   │   │   │   ├── ItemType.cs
│   │   │   │   ├── JewelOptionType.cs
│   │   │   │   ├── RarifyMode.cs
│   │   │   │   ├── RarifyProtection.cs
│   │   │   │   ├── UpgradeMode.cs
│   │   │   │   └── UpgradeProtection.cs
│   │   │   ├── Map/
│   │   │   │   ├── MapInstanceEventType.cs
│   │   │   │   ├── MapInstanceType.cs
│   │   │   │   ├── MapTypeType.cs
│   │   │   │   └── MonsterType.cs
│   │   │   ├── Miniland/
│   │   │   │   └── WarehouseType.cs
│   │   │   ├── NoscorePocketType.cs
│   │   │   ├── Quest/
│   │   │   │   └── QuestRewardType.cs
│   │   │   ├── SaveResult.cs
│   │   │   └── UpdateStatActionType.cs
│   │   ├── GameObjectMapper.cs
│   │   ├── NosCore.Data.csproj
│   │   ├── Resource/
│   │   │   ├── LocalizedResources.Designer.cs
│   │   │   ├── LocalizedResources.cs.resx
│   │   │   ├── LocalizedResources.de.resx
│   │   │   ├── LocalizedResources.es.resx
│   │   │   ├── LocalizedResources.fr.resx
│   │   │   ├── LocalizedResources.it.resx
│   │   │   ├── LocalizedResources.pl.resx
│   │   │   ├── LocalizedResources.resx
│   │   │   ├── LocalizedResources.ru.resx
│   │   │   └── LocalizedResources.tr.resx
│   │   └── WebApi/
│   │       ├── AuthIntent.cs
│   │       ├── BazaarLink.cs
│   │       ├── BazaarRequest.cs
│   │       ├── BlacklistRequest.cs
│   │       ├── Character.cs
│   │       ├── CharacterRelationStatus.cs
│   │       ├── FriendShipRequest.cs
│   │       ├── MailRequest.cs
│   │       ├── Subscriber.cs
│   │       ├── WareHouseDepositRequest.cs
│   │       └── WarehouseLink.cs
│   ├── NosCore.Database/
│   │   ├── DesignTimeDbContextFactory.cs
│   │   ├── Entities/
│   │   │   ├── Account.cs
│   │   │   ├── Act.cs
│   │   │   ├── ActPart.cs
│   │   │   ├── AuditLog.cs
│   │   │   ├── BCard.cs
│   │   │   ├── Base/
│   │   │   │   ├── I18NStringAttribute.cs
│   │   │   │   ├── IEntity.cs
│   │   │   │   ├── IStaticEntity.cs
│   │   │   │   └── SynchronizableBaseEntity.cs
│   │   │   ├── BazaarItem.cs
│   │   │   ├── BoxInstance.cs
│   │   │   ├── Card.cs
│   │   │   ├── Character.cs
│   │   │   ├── CharacterActPart.cs
│   │   │   ├── CharacterQuest.cs
│   │   │   ├── CharacterQuestObjective.cs
│   │   │   ├── CharacterRelation.cs
│   │   │   ├── Characterskill.cs
│   │   │   ├── Combo.cs
│   │   │   ├── Drop.cs
│   │   │   ├── EquipmentOption.cs
│   │   │   ├── Family.cs
│   │   │   ├── FamilyCharacter.cs
│   │   │   ├── FamilyLog.cs
│   │   │   ├── I18NActDesc.cs
│   │   │   ├── I18NBCard.cs
│   │   │   ├── I18NCard.cs
│   │   │   ├── I18NItem.cs
│   │   │   ├── I18NMapIdData.cs
│   │   │   ├── I18NMapPointData.cs
│   │   │   ├── I18NNpcMonster.cs
│   │   │   ├── I18NNpcMonsterTalk.cs
│   │   │   ├── I18NQuest.cs
│   │   │   ├── I18NSkill.cs
│   │   │   ├── InventoryItemInstance.cs
│   │   │   ├── Item.cs
│   │   │   ├── ItemInstance.cs
│   │   │   ├── Mail.cs
│   │   │   ├── Map.cs
│   │   │   ├── MapMonster.cs
│   │   │   ├── MapNpc.cs
│   │   │   ├── MapType.cs
│   │   │   ├── MapTypeMap.cs
│   │   │   ├── Mate.cs
│   │   │   ├── Miniland.cs
│   │   │   ├── MinilandObject.cs
│   │   │   ├── NpcMonster.cs
│   │   │   ├── NpcMonsterskill.cs
│   │   │   ├── NpcTalk.cs
│   │   │   ├── PenaltyLog.cs
│   │   │   ├── Portal.cs
│   │   │   ├── Quest.cs
│   │   │   ├── QuestObjective.cs
│   │   │   ├── QuestQuestReward.cs
│   │   │   ├── QuestReward.cs
│   │   │   ├── QuicklistEntry.cs
│   │   │   ├── Recipe.cs
│   │   │   ├── RecipeItem.cs
│   │   │   ├── Respawn.cs
│   │   │   ├── RespawnMapType.cs
│   │   │   ├── RollGeneratedItem.cs
│   │   │   ├── Script.cs
│   │   │   ├── ScriptedInstance.cs
│   │   │   ├── Shop.cs
│   │   │   ├── ShopItem.cs
│   │   │   ├── Shopskill.cs
│   │   │   ├── Skill.cs
│   │   │   ├── SpecialistInstance.cs
│   │   │   ├── StaticBonus.cs
│   │   │   ├── StaticBuff.cs
│   │   │   ├── Teleporter.cs
│   │   │   ├── Title.cs
│   │   │   ├── UsableInstance.cs
│   │   │   ├── Warehouse.cs
│   │   │   ├── WarehouseItem.cs
│   │   │   └── WearableInstance.cs
│   │   ├── Hosting/
│   │   │   └── PersistenceModule.cs
│   │   ├── Migrations/
│   │   │   ├── 20220103074410_FirstMigration.Designer.cs
│   │   │   ├── 20220103074410_FirstMigration.cs
│   │   │   ├── 20231125092440_BumpToEf8.Designer.cs
│   │   │   ├── 20231125092440_BumpToEf8.cs
│   │   │   ├── 20260420121955_AddCharacterQuestObjective.Designer.cs
│   │   │   ├── 20260420121955_AddCharacterQuestObjective.cs
│   │   │   ├── 20260420231052_AddNpcMonsterCanWalk.Designer.cs
│   │   │   ├── 20260420231052_AddNpcMonsterCanWalk.cs
│   │   │   ├── 20260421034800_ParseMonsterDatExtras.Designer.cs
│   │   │   ├── 20260421034800_ParseMonsterDatExtras.cs
│   │   │   ├── 20260421054001_AddBCardSlot.Designer.cs
│   │   │   ├── 20260421054001_AddBCardSlot.cs
│   │   │   ├── 20260421070126_AddMountAndRaidPockets.Designer.cs
│   │   │   ├── 20260421070126_AddMountAndRaidPockets.cs
│   │   │   ├── 20260421105756_DropMapMonsterIsMoving.Designer.cs
│   │   │   ├── 20260421105756_DropMapMonsterIsMoving.cs
│   │   │   ├── 20260421112205_ParseExtraNpcMonsterColumns.Designer.cs
│   │   │   ├── 20260421112205_ParseExtraNpcMonsterColumns.cs
│   │   │   ├── 20260424144528_AddMateCaptureItemEffect.Designer.cs
│   │   │   ├── 20260424144528_AddMateCaptureItemEffect.cs
│   │   │   └── NosCoreContextModelSnapshot.cs
│   │   ├── NosCore.Database.csproj
│   │   └── NosCoreContext.cs
│   ├── NosCore.GameObject/
│   │   ├── Ecs/
│   │   │   ├── Attributes/
│   │   │   │   └── ComponentBundleAttribute.cs
│   │   │   ├── Components/
│   │   │   │   ├── AggroComponent.cs
│   │   │   │   ├── AppearanceComponent.cs
│   │   │   │   ├── BuffStateComponent.cs
│   │   │   │   ├── CombatComponent.cs
│   │   │   │   ├── EffectComponent.cs
│   │   │   │   ├── EntityIdentityComponent.cs
│   │   │   │   ├── ExperienceComponent.cs
│   │   │   │   ├── GoldComponent.cs
│   │   │   │   ├── HealthComponent.cs
│   │   │   │   ├── ManaComponent.cs
│   │   │   │   ├── MapItemDataComponent.cs
│   │   │   │   ├── NameComponent.cs
│   │   │   │   ├── NpcDataComponent.cs
│   │   │   │   ├── NpcMovementComponent.cs
│   │   │   │   ├── NpcStateComponent.cs
│   │   │   │   ├── PlayerComponent.cs
│   │   │   │   ├── PlayerContextComponent.cs
│   │   │   │   ├── PlayerFlagsComponent.cs
│   │   │   │   ├── PlayerInventoryComponent.cs
│   │   │   │   ├── PlayerNetworkComponent.cs
│   │   │   │   ├── PlayerRequestsComponent.cs
│   │   │   │   ├── PlayerSocialComponent.cs
│   │   │   │   ├── PlayerStateComponent.cs
│   │   │   │   ├── PositionComponent.cs
│   │   │   │   ├── ReputationComponent.cs
│   │   │   │   ├── SkillCooldownComponent.cs
│   │   │   │   ├── SpComponent.cs
│   │   │   │   ├── SpawnComponent.cs
│   │   │   │   ├── SpeedComponent.cs
│   │   │   │   ├── TimingComponent.cs
│   │   │   │   └── VisualComponent.cs
│   │   │   ├── DignityLevels.cs
│   │   │   ├── Extensions/
│   │   │   │   ├── AliveEntityExtension.cs
│   │   │   │   ├── CharacterEntityExtension.cs
│   │   │   │   ├── GroupExtension.cs
│   │   │   │   ├── ItemInstanceExtension.cs
│   │   │   │   ├── MapItemBundleExtensions.cs
│   │   │   │   ├── MonsterBundleExtensions.cs
│   │   │   │   ├── NonPlayableEntityExtension.cs
│   │   │   │   ├── NpcBundleExtensions.cs
│   │   │   │   ├── NpcInfoExtensions.cs
│   │   │   │   ├── PlayerBundleExtensions.cs
│   │   │   │   └── VisualEntityExtension.cs
│   │   │   ├── Interfaces/
│   │   │   │   ├── IAliveEntity.cs
│   │   │   │   ├── ICharacterEntity.cs
│   │   │   │   ├── INamedEntity.cs
│   │   │   │   ├── INonPlayableEntity.cs
│   │   │   │   └── IVisualEntity.cs
│   │   │   ├── MapItemComponentBundle.cs
│   │   │   ├── MapWorld.cs
│   │   │   ├── MonsterComponentBundle.cs
│   │   │   ├── NpcComponentBundle.cs
│   │   │   ├── PlayerComponentBundle.cs
│   │   │   ├── ReputationLevels.cs
│   │   │   └── Systems/
│   │   │       ├── MovementSystem.cs
│   │   │       └── VisibilitySystem.cs
│   │   ├── Hosting/
│   │   │   └── Modules/
│   │   │       └── NetworkingModule.cs
│   │   ├── Infastructure/
│   │   │   ├── IPacketHandler.cs
│   │   │   └── ISingletonService.cs
│   │   ├── InterChannelCommunication/
│   │   │   ├── HubConnectionFactory.cs
│   │   │   ├── Hubs/
│   │   │   │   ├── AuthHub/
│   │   │   │   │   ├── AuthHub.cs
│   │   │   │   │   ├── AuthHubClient.cs
│   │   │   │   │   └── IAuthHub.cs
│   │   │   │   ├── BaseHubClient.cs
│   │   │   │   ├── BazaarHub/
│   │   │   │   │   ├── BazaarHub.cs
│   │   │   │   │   ├── BazaarHubClient.cs
│   │   │   │   │   └── IBazaarHub.cs
│   │   │   │   ├── BlacklistHub/
│   │   │   │   │   ├── BlacklistHub.cs
│   │   │   │   │   ├── BlacklistHubClient.cs
│   │   │   │   │   └── IBlacklistHub.cs
│   │   │   │   ├── ChannelHub/
│   │   │   │   │   ├── ChannelHub.cs
│   │   │   │   │   ├── ChannelHubClient.cs
│   │   │   │   │   └── IChannelHub.cs
│   │   │   │   ├── FriendHub/
│   │   │   │   │   ├── FriendHub.cs
│   │   │   │   │   ├── FriendHubClient.cs
│   │   │   │   │   └── IFriendHub.cs
│   │   │   │   ├── MailHub/
│   │   │   │   │   ├── IMailHub.cs
│   │   │   │   │   ├── MailHub.cs
│   │   │   │   │   └── MailHubClient.cs
│   │   │   │   ├── PubSub/
│   │   │   │   │   ├── IPubSubHub.cs
│   │   │   │   │   ├── PubSubHub.cs
│   │   │   │   │   └── PubSubHubClient.cs
│   │   │   │   └── WarehouseHub/
│   │   │   │       ├── IWarehouseHub.cs
│   │   │   │       ├── WarehouseHub.cs
│   │   │   │       └── WarehouseHubClient.cs
│   │   │   ├── MasterClientList.cs
│   │   │   ├── Messages/
│   │   │   │   ├── DeleteMailData.cs
│   │   │   │   ├── DisconnectData.cs
│   │   │   │   ├── IMessage.cs
│   │   │   │   ├── MailData.cs
│   │   │   │   ├── PostedPacket.cs
│   │   │   │   └── StatData.cs
│   │   │   └── PolymorphicConverter.cs
│   │   ├── Map/
│   │   │   ├── Map.cs
│   │   │   └── Portal.cs
│   │   ├── Messaging/
│   │   │   ├── Events/
│   │   │   │   ├── CharacterMovedEvent.cs
│   │   │   │   ├── EntityCapturedEvent.cs
│   │   │   │   ├── EntityDamagedEvent.cs
│   │   │   │   ├── EntityDiedEvent.cs
│   │   │   │   ├── GuriPacketReceivedEvent.cs
│   │   │   │   ├── ItemUsedEvent.cs
│   │   │   │   ├── MapInstanceEnteredEvent.cs
│   │   │   │   ├── MapItemPickedUpEvent.cs
│   │   │   │   └── QuestCompletedEvent.cs
│   │   │   ├── Handlers/
│   │   │   │   ├── Battle/
│   │   │   │   │   ├── DeathBCardHandler.cs
│   │   │   │   │   ├── MonsterAggroHandler.cs
│   │   │   │   │   ├── MonsterRespawnHandler.cs
│   │   │   │   │   ├── PlayerRevivalHandler.cs
│   │   │   │   │   └── RewardDistributionHandler.cs
│   │   │   │   ├── Guri/
│   │   │   │   │   ├── EmoticonHandler.cs
│   │   │   │   │   ├── MfaHandler.cs
│   │   │   │   │   ├── SpeakerHandler.cs
│   │   │   │   │   └── TitleHandler.cs
│   │   │   │   ├── Map/
│   │   │   │   │   └── MinilandEntranceHandler.cs
│   │   │   │   ├── MapItem/
│   │   │   │   │   ├── DropHandler.cs
│   │   │   │   │   ├── GoldDropHandler.cs
│   │   │   │   │   └── SpChargerHandler.cs
│   │   │   │   ├── Nrun/
│   │   │   │   │   ├── BazaarHandler.cs
│   │   │   │   │   ├── CellonItemHandler.cs
│   │   │   │   │   ├── ChangeClassHandler.cs
│   │   │   │   │   ├── FinishedTsDialogHandler.cs
│   │   │   │   │   ├── INrunEventHandler.cs
│   │   │   │   │   ├── OpenProductionHandler.cs
│   │   │   │   │   ├── OpenShopHandler.cs
│   │   │   │   │   ├── SetPlaceOfRevivalHandler.cs
│   │   │   │   │   ├── TeleporterHandler.cs
│   │   │   │   │   └── UpgradeItemHandler.cs
│   │   │   │   ├── Quest/
│   │   │   │   │   ├── OnCharacterMovedHandler.cs
│   │   │   │   │   ├── OnEntityCapturedHandler.cs
│   │   │   │   │   ├── OnEntityDiedHandler.cs
│   │   │   │   │   └── OnQuestCompletedHandler.cs
│   │   │   │   └── UseItem/
│   │   │   │       ├── BackPackHandler.cs
│   │   │   │       ├── BazaarMedalsHandler.cs
│   │   │   │       ├── BoxEffectHandler.cs
│   │   │   │       ├── ChangeGenderHandler.cs
│   │   │   │       ├── HairDieHandler.cs
│   │   │   │       ├── MinilandBellHandler.cs
│   │   │   │       ├── PetBasketHandler.cs
│   │   │   │       ├── SealedTarotCardHandler.cs
│   │   │   │       ├── SpRechargerHandler.cs
│   │   │   │       ├── SpeakerHandler.cs
│   │   │   │       ├── TitleHandler.cs
│   │   │   │       ├── VehicleHandler.cs
│   │   │   │       └── WearHandler.cs
│   │   │   ├── RecurringMessagePublisher.cs
│   │   │   ├── ScheduledJobs/
│   │   │   │   ├── RemoveTimeoutStaticBonusesHandler.cs
│   │   │   │   ├── RemoveTimeoutStaticBonusesMessage.cs
│   │   │   │   ├── SaveAllSessionsHandler.cs
│   │   │   │   └── SaveAllSessionsMessage.cs
│   │   │   ├── WolverineDependencyRegistrar.cs
│   │   │   └── WolverineHostExtensions.cs
│   │   ├── Networking/
│   │   │   ├── Broadcaster.cs
│   │   │   └── ClientSession/
│   │   │       ├── ClientSession.cs
│   │   │       ├── DisconnectHandlers/
│   │   │       │   ├── ExchangeDisconnectHandler.cs
│   │   │       │   ├── FriendNotificationDisconnectHandler.cs
│   │   │       │   ├── MapDisconnectHandler.cs
│   │   │       │   ├── MinilandDisconnectHandler.cs
│   │   │       │   └── SaveDisconnectHandler.cs
│   │   │       ├── IPacketHandlingStrategy.cs
│   │   │       ├── ISessionDisconnectHandler.cs
│   │   │       ├── LoginPacketHandlingStrategy.cs
│   │   │       ├── NpcDialogRequestSubject.cs
│   │   │       ├── RequestData.cs
│   │   │       └── WorldPacketHandlingStrategy.cs
│   │   ├── NosCore.GameObject.csproj
│   │   └── Services/
│   │       ├── AuthService/
│   │       │   ├── AuthCodeService.cs
│   │       │   └── IAuthCodeService.cs
│   │       ├── BattleService/
│   │       │   ├── AggroService.cs
│   │       │   ├── BattleService.cs
│   │       │   ├── BattleStatsProvider.cs
│   │       │   ├── BuffService.cs
│   │       │   ├── CaptureService.cs
│   │       │   ├── CharacterSkill.cs
│   │       │   ├── DamageCalculator.cs
│   │       │   ├── DamageResult.cs
│   │       │   ├── HitArguments.cs
│   │       │   ├── HitQueue.cs
│   │       │   ├── IAggroService.cs
│   │       │   ├── IBattleService.cs
│   │       │   ├── IBattleStatsProvider.cs
│   │       │   ├── IBuffService.cs
│   │       │   ├── ICaptureService.cs
│   │       │   ├── IDamageCalculator.cs
│   │       │   ├── IHitQueue.cs
│   │       │   ├── IMonsterAi.cs
│   │       │   ├── INpcCombatCatalog.cs
│   │       │   ├── IRandomProvider.cs
│   │       │   ├── IRegenerationService.cs
│   │       │   ├── IRespawnService.cs
│   │       │   ├── IRewardService.cs
│   │       │   ├── ISkillResolver.cs
│   │       │   ├── ITargetResolver.cs
│   │       │   ├── Model/
│   │       │   │   ├── BuffInstance.cs
│   │       │   │   ├── CombatStats.cs
│   │       │   │   ├── HitOutcome.cs
│   │       │   │   ├── HitRequest.cs
│   │       │   │   └── SkillInfo.cs
│   │       │   ├── MonsterAi.cs
│   │       │   ├── NpcCombatCatalog.cs
│   │       │   ├── RegenerationService.cs
│   │       │   ├── RespawnService.cs
│   │       │   ├── RewardService.cs
│   │       │   ├── SkillResolver.cs
│   │       │   ├── SkillResult.cs
│   │       │   └── TargetResolver.cs
│   │       ├── BazaarService/
│   │       │   ├── BazaarRegistry.cs
│   │       │   ├── BazaarService.cs
│   │       │   ├── IBazaarRegistry.cs
│   │       │   └── IBazaarService.cs
│   │       ├── BlackListService/
│   │       │   ├── BlacklistService.cs
│   │       │   └── IBlacklistService.cs
│   │       ├── BroadcastService/
│   │       │   ├── IPacketBroadcaster.cs
│   │       │   ├── IPacketSender.cs
│   │       │   ├── IPacketTarget.cs
│   │       │   ├── ISessionRegistry.cs
│   │       │   ├── PacketBroadcaster.cs
│   │       │   └── SessionRegistry.cs
│   │       ├── ChannelCommunicationService/
│   │       │   ├── ChannelCommunicationRunner.cs
│   │       │   └── Handlers/
│   │       │       ├── DeleteMailDataMessageChannelCommunicationMessageHandler.cs
│   │       │       ├── DisconnectDataMessageChannelCommunicationMessageHandler.cs
│   │       │       ├── IChannelCommunicationMessageHandler.cs
│   │       │       ├── MailDataMessageChannelCommunicationMessageHandler.cs
│   │       │       ├── PostedPacketMessageChannelCommunicationMessageHandler.cs
│   │       │       └── StatDataMessageChannelCommunicationMessageHandler.cs
│   │       ├── ChannelService/
│   │       │   ├── ChannelService.cs
│   │       │   └── IChannelService.cs
│   │       ├── CharacterService/
│   │       │   ├── CharacterInitializationService.cs
│   │       │   └── ICharacterInitializationService.cs
│   │       ├── ExchangeService/
│   │       │   ├── ExchangeData.cs
│   │       │   ├── ExchangeRequestRegistry.cs
│   │       │   ├── ExchangeService.cs
│   │       │   ├── IExchangeRequestRegistry.cs
│   │       │   └── IExchangeService.cs
│   │       ├── ExperienceService/
│   │       │   ├── ExperienceProgressionService.cs
│   │       │   └── IExperienceProgressionService.cs
│   │       ├── FriendService/
│   │       │   ├── CharacterRelation.cs
│   │       │   ├── FriendRequestRegistry.cs
│   │       │   ├── FriendService.cs
│   │       │   ├── IFriendRequestRegistry.cs
│   │       │   └── IFriendService.cs
│   │       ├── GroupService/
│   │       │   ├── Group.cs
│   │       │   ├── GroupRegistry.cs
│   │       │   └── IGroupRegistry.cs
│   │       ├── InventoryService/
│   │       │   ├── IInventoryService.cs
│   │       │   ├── InventoryItemInstance.cs
│   │       │   └── InventoryService.cs
│   │       ├── ItemGenerationService/
│   │       │   ├── IItemGenerationService.cs
│   │       │   ├── Item/
│   │       │   │   ├── BoxInstance.cs
│   │       │   │   ├── IItemInstance.cs
│   │       │   │   ├── Item.cs
│   │       │   │   ├── ItemInstance.cs
│   │       │   │   ├── SpecialistInstance.cs
│   │       │   │   ├── UsableInstance.cs
│   │       │   │   └── WearableInstance.cs
│   │       │   └── ItemGenerationService.cs
│   │       ├── ItemStorage/
│   │       │   ├── ISlotBasedStorage.cs
│   │       │   ├── ISlotItem.cs
│   │       │   └── SlotStorageHelper.cs
│   │       ├── LoginService/
│   │       │   ├── ILoginService.cs
│   │       │   └── LoginService.cs
│   │       ├── MailService/
│   │       │   ├── Gift.cs
│   │       │   ├── GiftHelper.cs
│   │       │   ├── IMailService.cs
│   │       │   ├── IParcelRegistry.cs
│   │       │   ├── MailService.cs
│   │       │   └── ParcelRegistry.cs
│   │       ├── MapChangeService/
│   │       │   ├── IMapChangeService.cs
│   │       │   └── MapChangeService.cs
│   │       ├── MapInstanceAccessService/
│   │       │   ├── IMapInstanceAccessService.cs
│   │       │   └── MapInstanceAccessService.cs
│   │       ├── MapInstanceGenerationService/
│   │       │   ├── IMapInstanceGenerationService.cs
│   │       │   ├── IMapInstanceRegistry.cs
│   │       │   ├── MapInstance.cs
│   │       │   ├── MapInstanceGenerationService.cs
│   │       │   └── MapInstanceRegistry.cs
│   │       ├── MapItemGenerationService/
│   │       │   ├── IMapItemGenerationService.cs
│   │       │   └── MapItemGenerationService.cs
│   │       ├── MinilandService/
│   │       │   ├── IMinilandRegistry.cs
│   │       │   ├── IMinilandService.cs
│   │       │   ├── MapDesignObject.cs
│   │       │   ├── Miniland.cs
│   │       │   ├── MinilandHelper.cs
│   │       │   ├── MinilandRegistry.cs
│   │       │   └── MinilandService.cs
│   │       ├── PacketHandlerService/
│   │       │   ├── IPacketHandlerRegistry.cs
│   │       │   └── PacketHandlerRegistry.cs
│   │       ├── PathfindingService/
│   │       │   ├── IPathfindingService.cs
│   │       │   └── PathfindingService.cs
│   │       ├── QuestService/
│   │       │   ├── Handlers/
│   │       │   │   ├── GoToQuestHandler.cs
│   │       │   │   ├── HuntQuestHandler.cs
│   │       │   │   ├── KillQuestHandlerBase.cs
│   │       │   │   └── NumberOfKillQuestHandler.cs
│   │       │   ├── IQuestService.cs
│   │       │   ├── IQuestTypeHandler.cs
│   │       │   ├── Quest.cs
│   │       │   └── QuestService.cs
│   │       ├── SaveService/
│   │       │   ├── ISaveService.cs
│   │       │   └── SaveService.cs
│   │       ├── ShopService/
│   │       │   ├── IShopRegistry.cs
│   │       │   ├── Shop.cs
│   │       │   ├── ShopItem.cs
│   │       │   └── ShopRegistry.cs
│   │       ├── SkillService/
│   │       │   ├── ISkillService.cs
│   │       │   └── SkillService.cs
│   │       ├── SpeedCalculationService/
│   │       │   ├── ISpeedCalculationService.cs
│   │       │   └── SpeedCalculationService.cs
│   │       ├── TransformationService/
│   │       │   ├── ITransformationService.cs
│   │       │   └── TransformationService.cs
│   │       ├── UpgradeService/
│   │       │   ├── EquipmentUpgradeOperationBase.cs
│   │       │   ├── IRandomNumberSource.cs
│   │       │   ├── IUpgradeOperation.cs
│   │       │   ├── RarifyOperation.cs
│   │       │   ├── RarifyOperationBase.cs
│   │       │   ├── SumUpgradeOperation.cs
│   │       │   ├── UpgradeContext.cs
│   │       │   ├── UpgradeItemOperation.cs
│   │       │   ├── UpgradeOperation.cs
│   │       │   └── UpgradeOutcome.cs
│   │       └── WarehouseService/
│   │           ├── IWarehouseService.cs
│   │           ├── WarehouseItem.cs
│   │           └── WarehouseService.cs
│   ├── NosCore.LoginServer/
│   │   ├── LoginServer.cs
│   │   ├── LoginServerBootstrap.cs
│   │   └── NosCore.LoginServer.csproj
│   ├── NosCore.MasterServer/
│   │   ├── MasterConfiguration.cs
│   │   ├── MasterServer.cs
│   │   ├── MasterServerBootstrap.cs
│   │   └── NosCore.MasterServer.csproj
│   ├── NosCore.PacketHandlers/
│   │   ├── Battle/
│   │   │   ├── RevivalPacketHandler.cs
│   │   │   └── UseSkillPacketHandler.cs
│   │   ├── Bazaar/
│   │   │   ├── CBListPacketHandler.cs
│   │   │   ├── CBuyPacketHandler.cs
│   │   │   ├── CModPacketHandler.cs
│   │   │   ├── CRegPacketHandler.cs
│   │   │   ├── CSListPacketHandler.cs
│   │   │   ├── CScalcPacketHandler.cs
│   │   │   └── CSkillPacketHandler.cs
│   │   ├── CharacterScreen/
│   │   │   ├── CharNewJobPacketHandler.cs
│   │   │   ├── CharNewPacketHandler.cs
│   │   │   ├── CharRenPacketHandler.cs
│   │   │   ├── CharacterDeletePacketHandler.cs
│   │   │   ├── DacPacketHandler.cs
│   │   │   ├── EntryPointPacketHandler.cs
│   │   │   └── SelectPacketHandler.cs
│   │   ├── Chat/
│   │   │   ├── BtkPacketHandler.cs
│   │   │   ├── ClientSayPacketHandler.cs
│   │   │   └── WhisperPacketHandler.cs
│   │   ├── Command/
│   │   │   ├── ChangeChannelPacketHandler.cs
│   │   │   ├── ChangeClassPacketHandler.cs
│   │   │   ├── ChangeGenderPacketHandler.cs
│   │   │   ├── CreateItemPacketHandler.cs
│   │   │   ├── EffectCommandPacketHandler.cs
│   │   │   ├── GiftPacketHandler.cs
│   │   │   ├── HelpPacketHandler.cs
│   │   │   ├── InvisibleCommandPacketHandler.cs
│   │   │   ├── KickPacketHandler.cs
│   │   │   ├── KillCommandPacketHandler.cs
│   │   │   ├── PositionPacketHandler.cs
│   │   │   ├── SetBankGoldPacketHandler.cs
│   │   │   ├── SetGoldCommandPacketHandler.cs
│   │   │   ├── SetHairColorPacketHandler.cs
│   │   │   ├── SetHairStylePacketHandler.cs
│   │   │   ├── SetHeroLevelCommandPacketHandler.cs
│   │   │   ├── SetHeroXpPacketHandler.cs
│   │   │   ├── SetJobLevelCommandPacketHandler.cs
│   │   │   ├── SetJobLevelXpPacketHandler.cs
│   │   │   ├── SetLevelCommandPacketHandler.cs
│   │   │   ├── SetMaintenancePacketHandler.cs
│   │   │   ├── SetReputationPacketHandler.cs
│   │   │   ├── SetSpAdditionPointPacketHandler.cs
│   │   │   ├── SetSpPointPacketHandler.cs
│   │   │   ├── ShoutHerePacketHandler.cs
│   │   │   ├── ShoutPacketHandler.cs
│   │   │   ├── SizePacketHandler.cs
│   │   │   ├── SpeedPacketHandler.cs
│   │   │   └── TeleportPacketHandler.cs
│   │   ├── Exchange/
│   │   │   ├── ExcListPacketHandler.cs
│   │   │   └── ExchangeRequestPacketHandler.cs
│   │   ├── Friend/
│   │   │   ├── BlDelPacketHandler.cs
│   │   │   ├── BlInsPacketHandler.cs
│   │   │   ├── BlPacketHandler.cs
│   │   │   ├── FdelPacketHandler.cs
│   │   │   ├── FinsPacketHandler.cs
│   │   │   └── FlPacketHandler.cs
│   │   ├── Game/
│   │   │   ├── GameStartPacketHandler.cs
│   │   │   ├── GuriPacketHandler.cs
│   │   │   ├── NcifPacketHandler.cs
│   │   │   ├── NpinfoPacketHandler.cs
│   │   │   ├── PulsePacketHandler.cs
│   │   │   ├── QSetPacketHandler.cs
│   │   │   ├── ReqInfoPacketHandler.cs
│   │   │   ├── ScpCtsPacketHandler.cs
│   │   │   └── TitEqPacketHandler.cs
│   │   ├── Group/
│   │   │   ├── GroupTalkPacketHandler.cs
│   │   │   ├── PjoinPacketHandler.cs
│   │   │   └── PleavePacketHandler.cs
│   │   ├── Inventory/
│   │   │   ├── BiPacketHandler.cs
│   │   │   ├── GetPacketHandler.cs
│   │   │   ├── MvePacketHandler.cs
│   │   │   ├── MviPacketHandler.cs
│   │   │   ├── PutPacketHandler.cs
│   │   │   ├── RemovePacketHandler.cs
│   │   │   ├── SpTransformPacketHandler.cs
│   │   │   ├── UseItemPacketHandler.cs
│   │   │   └── WearPacketHandler.cs
│   │   ├── Login/
│   │   │   ├── NoS0575PacketHandler.cs
│   │   │   └── NoS0577PacketHandler.cs
│   │   ├── Miniland/
│   │   │   ├── AddobjPacketHandler.cs
│   │   │   ├── MJoinPacketHandler.cs
│   │   │   ├── MinilandObjects/
│   │   │   │   ├── MgPacketHandler.cs
│   │   │   │   └── UseobjPacketHandler.cs
│   │   │   ├── MlobjPacketHandler.cs
│   │   │   └── RmvobjPacketHandler.cs
│   │   ├── Movement/
│   │   │   ├── ClientDirPacketHandler.cs
│   │   │   ├── PreqPacketHandler.cs
│   │   │   ├── SitPacketHandler.cs
│   │   │   └── WalkPacketHandler.cs
│   │   ├── NoAction/
│   │   │   ├── BpClosePacketHandler.cs
│   │   │   ├── CClosePacketHandler.cs
│   │   │   ├── LbsPacketHandler.cs
│   │   │   ├── SnapPacketHandler.cs
│   │   │   ├── SortOpenPacketHandler.cs
│   │   │   └── ZeroPacketHandler.cs
│   │   ├── NosCore.PacketHandlers.csproj
│   │   ├── Parcel/
│   │   │   ├── PclPacketHandler.cs
│   │   │   └── PstClientPacketHandler.cs
│   │   ├── Quest/
│   │   │   ├── QTPacketHandler.cs
│   │   │   └── ScriptPacketHandler.cs
│   │   ├── Shops/
│   │   │   ├── BuyPacketHandler.cs
│   │   │   ├── MShopPacketHandler.cs
│   │   │   ├── NrunPacketHandler.cs
│   │   │   ├── RequestNpcPacketHandler.cs
│   │   │   ├── SellPacketHandler.cs
│   │   │   └── ShoppingPacketHandler.cs
│   │   ├── Upgrades/
│   │   │   └── UpgradePacketHandler.cs
│   │   └── Warehouse/
│   │       ├── DepositPacketHandler.cs
│   │       ├── FDepositPacketHandler.cs
│   │       ├── FReposPacketHandler.cs
│   │       ├── FStashEndPacketHandler.cs
│   │       ├── FWithdrawPacketHandler.cs
│   │       ├── ReposPacketHandler.cs
│   │       ├── StashEndPacketHandler.cs
│   │       └── WithdrawPacketHandler.cs
│   ├── NosCore.Parser/
│   │   ├── ImportFactory.cs
│   │   ├── NosCore.Parser.csproj
│   │   ├── Parser.cs
│   │   ├── ParserBootstrap.cs
│   │   ├── ParserCliOptions.cs
│   │   ├── ParserConfiguration.cs
│   │   └── Parsers/
│   │       ├── ActParser.cs
│   │       ├── CardParser.cs
│   │       ├── DropParser.cs
│   │       ├── Generic/
│   │       │   ├── DatDocumentationGenerator.cs
│   │       │   ├── DatFieldMetadata.cs
│   │       │   ├── FluentParserBuilder.cs
│   │       │   └── GenericParser.cs
│   │       ├── I18NParser.cs
│   │       ├── ItemParser.cs
│   │       ├── MapMonsterParser.cs
│   │       ├── MapNpcParser.cs
│   │       ├── MapParser.cs
│   │       ├── MapTypeMapParser.cs
│   │       ├── MapTypeParser.cs
│   │       ├── NpcMonsterParser.cs
│   │       ├── NpcTalkParser.cs
│   │       ├── PortalParser.cs
│   │       ├── QuestParser.cs
│   │       ├── QuestPrizeParser.cs
│   │       ├── RespawnMapTypeParser.cs
│   │       ├── ScriptParser.cs
│   │       ├── ShopItemParser.cs
│   │       ├── ShopParser.cs
│   │       └── SkillParser.cs
│   ├── NosCore.WebApi/
│   │   ├── ApiConfiguration.cs
│   │   ├── Controllers/
│   │   │   ├── AuthController.cs
│   │   │   └── NosmallController.cs
│   │   ├── NosCore.WebApi.csproj
│   │   └── WebApiBootstrap.cs
│   └── NosCore.WorldServer/
│       ├── NosCore.WorldServer.csproj
│       ├── WorldServer.cs
│       └── WorldServerBootstrap.cs
├── test/
│   ├── NosCore.Core.Tests/
│   │   ├── LogLanguageTests.cs
│   │   └── NosCore.Core.Tests.csproj
│   ├── NosCore.Database.Tests/
│   │   ├── DatabaseTests.cs
│   │   └── NosCore.Database.Tests.csproj
│   ├── NosCore.GameObject.Tests/
│   │   ├── BazaarTests.cs
│   │   ├── GroupTests.cs
│   │   ├── Messaging/
│   │   │   ├── Handlers/
│   │   │   │   ├── Battle/
│   │   │   │   │   ├── MonsterAggroHandlerTests.cs
│   │   │   │   │   ├── MonsterRespawnHandlerTests.cs
│   │   │   │   │   ├── PlayerRevivalHandlerTests.cs
│   │   │   │   │   └── RewardDistributionHandlerTests.cs
│   │   │   │   ├── Guri/
│   │   │   │   │   ├── EmoticonHandlerTests.cs
│   │   │   │   │   └── MfaHandlerTests.cs
│   │   │   │   ├── Map/
│   │   │   │   │   └── MinilandEntranceHandlerTests.cs
│   │   │   │   ├── Nrun/
│   │   │   │   │   ├── SetPlaceOfRevivalHandlerTests.cs
│   │   │   │   │   ├── TeleporterHandlerTests.cs
│   │   │   │   │   └── UpgradeItemHandlerTests.cs
│   │   │   │   └── UseItem/
│   │   │   │       ├── BackPackHandlerTests.cs
│   │   │   │       ├── BazaarMedalsHandlerTests.cs
│   │   │   │       ├── BoxEffectHandlerTests.cs
│   │   │   │       ├── ChangeGenderHandlerTests.cs
│   │   │   │       ├── HairDieHandlerTests.cs
│   │   │   │       ├── MinilandBellHandlerTests.cs
│   │   │   │       ├── PetBasketHandlerTests.cs
│   │   │   │       ├── SealedTarotCardHandlerTests.cs
│   │   │   │       ├── SpRechargerHandlerTests.cs
│   │   │   │       ├── SpeakerHandlerTests.cs
│   │   │   │       ├── TitleHandlerTests.cs
│   │   │   │       └── WearHandlerTests.cs
│   │   │   └── WolverineHandlerResolutionTests.cs
│   │   ├── NosCore.GameObject.Tests.csproj
│   │   ├── Services/
│   │   │   ├── AuthService/
│   │   │   │   └── AuthCodeServiceTests.cs
│   │   │   ├── BattleService/
│   │   │   │   ├── AggroServiceTests.cs
│   │   │   │   ├── BattleServiceTests.cs
│   │   │   │   ├── BuffServiceTests.cs
│   │   │   │   ├── DamageCalculatorTests.cs
│   │   │   │   ├── HitQueueTests.cs
│   │   │   │   ├── MonsterAiTests.cs
│   │   │   │   ├── NpcCombatCatalogTests.cs
│   │   │   │   └── SkillResolverTests.cs
│   │   │   ├── BazaarService/
│   │   │   │   └── BazaarRegistryTests.cs
│   │   │   ├── BlacklistService/
│   │   │   │   └── BlacklistServiceTests.cs
│   │   │   ├── BroadcastService/
│   │   │   │   └── SessionRegistryTests.cs
│   │   │   ├── ChannelCommunicationService/
│   │   │   │   └── Handlers/
│   │   │   │       ├── DeleteMailDataMessageHandlerTests.cs
│   │   │   │       ├── DisconnectDataMessageHandlerTests.cs
│   │   │   │       ├── MailDataMessageHandlerTests.cs
│   │   │   │       ├── PostedPacketMessageHandlerTests.cs
│   │   │   │       └── StatDataMessageHandlerTests.cs
│   │   │   ├── ChannelService/
│   │   │   │   └── ChannelServiceTests.cs
│   │   │   ├── CharacterService/
│   │   │   │   └── CharacterInitializationServiceTests.cs
│   │   │   ├── ExchangeService/
│   │   │   │   ├── ExchangeRequestRegistryTests.cs
│   │   │   │   └── ExchangeServiceTests.cs
│   │   │   ├── FriendService/
│   │   │   │   ├── FriendRequestRegistryTests.cs
│   │   │   │   └── FriendServiceTests.cs
│   │   │   ├── GroupService/
│   │   │   │   └── GroupRegistryTests.cs
│   │   │   ├── InventoryService/
│   │   │   │   └── InventoryServiceTests.cs
│   │   │   ├── LoginService/
│   │   │   │   └── LoginServiceTests.cs
│   │   │   ├── MailService/
│   │   │   │   └── MailServiceTests.cs
│   │   │   ├── MapChangeService/
│   │   │   │   └── MapChangeServiceTests.cs
│   │   │   ├── MapInstanceAccessService/
│   │   │   │   └── MapInstanceAccessServiceTests.cs
│   │   │   ├── MapInstanceGenerationService/
│   │   │   │   └── MapInstanceRegistryTests.cs
│   │   │   ├── MinilandService/
│   │   │   │   ├── MinilandRegistryTests.cs
│   │   │   │   └── MinilandServiceTests.cs
│   │   │   ├── PacketHandlerService/
│   │   │   │   └── PacketHandlerRegistryTests.cs
│   │   │   ├── PathfindingService/
│   │   │   │   └── PathfindingServiceTests.cs
│   │   │   ├── QuestService/
│   │   │   │   └── QuestServiceTests.cs
│   │   │   ├── SaveService/
│   │   │   │   └── SaveServiceTests.cs
│   │   │   ├── ShopService/
│   │   │   │   └── ShopRegistryTests.cs
│   │   │   ├── SkillService/
│   │   │   │   └── SkillServiceTests.cs
│   │   │   ├── SpeedCalculationService/
│   │   │   │   └── SpeedCalculationServiceTests.cs
│   │   │   ├── TransformationService/
│   │   │   │   └── TransformationServiceTests.cs
│   │   │   ├── UpgradeService/
│   │   │   │   ├── EquipmentUpgradeOperationTests.cs
│   │   │   │   ├── RarifyOperationTests.cs
│   │   │   │   └── SumUpgradeOperationTests.cs
│   │   │   └── WarehouseService/
│   │   │       └── WarehouseServiceTests.cs
│   │   ├── SetupAssemblyInitializer.cs
│   │   └── ShopTests.cs
│   ├── NosCore.PacketHandlers.Tests/
│   │   ├── Battle/
│   │   │   ├── RevivalPacketHandlerTests.cs
│   │   │   └── UseSkillPacketHandlerTests.cs
│   │   ├── Bazaar/
│   │   │   ├── CBListPacketHandlerTests.cs
│   │   │   ├── CBuyPacketHandlerTests.cs
│   │   │   ├── CModPacketHandlerTests.cs
│   │   │   ├── CRegPacketHandlerTests.cs
│   │   │   ├── CSListPacketHandlerTests.cs
│   │   │   ├── CScalcPacketHandlerTests.cs
│   │   │   └── CSkillPacketHandlerTests.cs
│   │   ├── CharacterScreen/
│   │   │   ├── CharNewJobPacketHandlerTests.cs
│   │   │   ├── CharNewPacketHandlerTests.cs
│   │   │   ├── CharRenPacketHandlerTests.cs
│   │   │   ├── CharacterDeletePacketHandlerTests.cs
│   │   │   ├── DacPacketHandlerTests.cs
│   │   │   ├── EntryPointPacketHandlerTests.cs
│   │   │   └── SelectPacketHandlerTests.cs
│   │   ├── Chat/
│   │   │   ├── BtkPacketHandlerTests.cs
│   │   │   ├── ClientSayPacketHandlerTests.cs
│   │   │   └── WhisperPacketHandlerTests.cs
│   │   ├── Command/
│   │   │   ├── ChangeChannelPacketHandlerTests.cs
│   │   │   ├── ChangeClassPacketHandlerTests.cs
│   │   │   ├── CreateItemPacketHandlerTests.cs
│   │   │   ├── EffectCommandPacketHandlerTests.cs
│   │   │   ├── GiftPacketHandlerTests.cs
│   │   │   ├── HelpPacketHandlerTests.cs
│   │   │   ├── InvisibleCommandPacketHandlerTests.cs
│   │   │   ├── KickPacketHandlerTests.cs
│   │   │   ├── PositionPacketHandlerTests.cs
│   │   │   ├── SetGoldCommandPacketHandlerTests.cs
│   │   │   ├── SetHeroLevelCommandPacketHandlerTests.cs
│   │   │   ├── SetJobLevelCommandPacketHandlerTests.cs
│   │   │   ├── SetLevelCommandPacketHandlerTests.cs
│   │   │   ├── SetMaintenancePacketHandlerTests.cs
│   │   │   ├── SetReputationPacketHandlerTests.cs
│   │   │   ├── ShoutPacketHandlerTests.cs
│   │   │   ├── SizePacketHandlerTests.cs
│   │   │   ├── SpeedPacketHandlerTests.cs
│   │   │   └── TeleportPacketHandlerTests.cs
│   │   ├── Exchange/
│   │   │   ├── ExcListPacketHandlerTests.cs
│   │   │   └── ExchangeRequestPacketHandlerTests.cs
│   │   ├── Friend/
│   │   │   ├── BlDelPacketHandlerTests.cs
│   │   │   ├── BlInsPacketHandlerTests.cs
│   │   │   ├── BlPacketHandlerTests.cs
│   │   │   ├── FinsPacketHandlerTests.cs
│   │   │   ├── FlPacketHandlerTests.cs
│   │   │   └── fDelPacketHandlerTests.cs
│   │   ├── Game/
│   │   │   ├── GameStartPacketHandlerTests.cs
│   │   │   ├── GuriPacketHandlerTests.cs
│   │   │   ├── NcifPacketHandlerTests.cs
│   │   │   ├── PulsePacketHandlerTests.cs
│   │   │   ├── QsetPacketHandlerTests.cs
│   │   │   ├── ReqInfoPacketHandlerTests.cs
│   │   │   └── TitEqPacketHandlerTests.cs
│   │   ├── Group/
│   │   │   ├── GroupTalkPacketHandlerTests.cs
│   │   │   ├── PJoinPacketHandlerTests.cs
│   │   │   └── PleavePacketHandlerTests.cs
│   │   ├── Inventory/
│   │   │   ├── BiPacketHandlerTests.cs
│   │   │   ├── MvePacketHandlerTests.cs
│   │   │   ├── MviPacketHandlerTests.cs
│   │   │   ├── PutPacketHandlerTests.cs
│   │   │   ├── RemovePacketHandlerTests.cs
│   │   │   └── SpTransformPacketHandlerTests.cs
│   │   ├── Login/
│   │   │   ├── NoS0575PacketHandlerTests.cs
│   │   │   └── NoS0577PacketHandlerTests.cs
│   │   ├── Miniland/
│   │   │   ├── AddobjPacketHandlerTests.cs
│   │   │   ├── MJoinPacketHandlerTests.cs
│   │   │   ├── MinilandObjects/
│   │   │   │   ├── MgPacketHandlerTests.cs
│   │   │   │   └── UseobjPacketHandlerTests.cs
│   │   │   ├── MlEditPacketHandlerTests.cs
│   │   │   └── RmvobjPacketHandlerTests.cs
│   │   ├── Movement/
│   │   │   ├── ClientDirPacketHandlerTests.cs
│   │   │   ├── PreqPacketHandlerTests.cs
│   │   │   ├── SitPacketHandlerTests.cs
│   │   │   └── WalkPacketHandlerTests.cs
│   │   ├── NosCore.PacketHandlers.Tests.csproj
│   │   ├── Parcel/
│   │   │   ├── PclPacketHandlerTests.cs
│   │   │   └── PstClientPacketHandlerTests.cs
│   │   ├── Quest/
│   │   │   ├── QtPacketHandlerTests.cs
│   │   │   └── ScriptPacketHandlerTests.cs
│   │   ├── SetupAssemblyInitializer.cs
│   │   ├── Shops/
│   │   │   ├── BuyPacketHandlerTests.cs
│   │   │   ├── MShopPacketHandlerTests.cs
│   │   │   ├── NrunPacketHandlerTests.cs
│   │   │   ├── RequestNpcPacketHandlerTests.cs
│   │   │   ├── SellPacketHandlerTests.cs
│   │   │   └── ShoppingPacketHandlerTests.cs
│   │   ├── Upgrades/
│   │   │   └── UpgradePacketHandlerTests.cs
│   │   └── Warehouse/
│   │       ├── DepositPacketHandlerTests.cs
│   │       ├── FDepositPacketHandlerTests.cs
│   │       ├── FReposPacketHandlerTests.cs
│   │       ├── FStashEndPacketHandlerTests.cs
│   │       ├── FWithdrawPacketHandlerTests.cs
│   │       ├── ReposPacketHandlerTests.cs
│   │       ├── StashEndPacketHandlerTests.cs
│   │       ├── WarehousePacketHandlerTests.cs
│   │       └── WithdrawPacketHandlerTests.cs
│   ├── NosCore.Parser.Tests/
│   │   ├── ActParserTests.cs
│   │   ├── CardParserTests.cs
│   │   ├── DatDocumentationGeneratorTests.cs
│   │   ├── DatDocumentationSnapshotTests.cs
│   │   ├── DropParserTests.cs
│   │   ├── FluentParserBuilderTests.cs
│   │   ├── GenericParserTests.cs
│   │   ├── ItemParserTests.cs
│   │   ├── MapMonsterParserTests.cs
│   │   ├── MapNpcParserTests.cs
│   │   ├── MapParserTests.cs
│   │   ├── NosCore.Parser.Tests.csproj
│   │   ├── NpcMonsterParserTests.cs
│   │   ├── PortalParserTests.cs
│   │   ├── QuestParserTests.cs
│   │   ├── QuestPrizeParserTests.cs
│   │   ├── ShopParserTests.cs
│   │   └── SkillParserTests.cs
│   ├── NosCore.Tests.Shared/
│   │   ├── AutoFixture/
│   │   │   └── NosCoreFixture.cs
│   │   ├── BDD/
│   │   │   ├── SpecBase.cs
│   │   │   └── Steps/
│   │   │       ├── InventorySteps.cs
│   │   │       ├── PacketSteps.cs
│   │   │       └── SessionSteps.cs
│   │   ├── NosCore.Tests.Shared.csproj
│   │   ├── TestHelpers.cs
│   │   └── tools/
│   │       └── coverage.opencover.xml
│   └── NosCore.WebApi.Tests/
│       ├── ApiTests/
│       │   └── AuthControllerTests.cs
│       ├── NosCore.WebApi.Tests.csproj
│       └── SetupAssemblyInitializer.cs
└── tools/
    ├── NosCore.DtoGenerator/
    │   ├── DtoGenerator.cs
    │   └── NosCore.DtoGenerator.csproj
    └── NosCore.EcsGenerator/
        ├── ComponentBundleGenerator.cs
        └── NosCore.EcsGenerator.csproj

================================================
FILE CONTENTS
================================================

================================================
FILE: .coderabbit.yaml
================================================
language: "en"
early_access: false
reviews:
  profile: "chill"
  request_changes_workflow: false
  high_level_summary: true
  poem: false
  review_status: true
  collapse_walkthrough: false
  auto_review:
    enabled: true
    drafts: false
  path_filters:
    - "!**/*.min.js"
    - "!**/bin/**"
    - "!**/obj/**"
    - "!**/TestResults/**"
    - "!**/*.Designer.cs"
chat:
  auto_reply: true


================================================
FILE: .editorconfig
================================================

[*.proto]
indent_style=tab
indent_size=tab
tab_width=4

[*.{asax,ascx,aspx,cs,cshtml,css,htm,html,js,jsx,master,razor,skin,ts,tsx,vb,xaml,xamlx,xoml}]
indent_style=space
indent_size=4
tab_width=4

[*.{appxmanifest,build,config,csproj,dbml,discomap,dtd,json,jsproj,lsproj,njsproj,nuspec,proj,props,resjson,resw,resx,StyleCop,targets,tasks,vbproj,xml,xsd}]
indent_style=space
indent_size=2
tab_width=2

[*]

# Microsoft .NET properties
csharp_new_line_before_members_in_object_initializers=false
csharp_new_line_between_query_expression_clauses=false
csharp_preferred_modifier_order=public, private, protected, internal, new, abstract, virtual, sealed, override, static, readonly, extern, unsafe, volatile, async:suggestion
csharp_style_var_elsewhere=true:hint
csharp_style_var_for_built_in_types=true:hint
csharp_style_var_when_type_is_apparent=true:hint
dotnet_style_predefined_type_for_locals_parameters_members=true:hint
dotnet_style_predefined_type_for_member_access=true:hint
dotnet_style_qualification_for_event=false:hint
dotnet_style_qualification_for_field=false:hint
dotnet_style_qualification_for_method=false:hint
dotnet_style_qualification_for_property=false:hint
dotnet_style_require_accessibility_modifiers=for_non_interface_members:hint

# ReSharper properties
resharper_align_multiline_binary_expressions_chain=false
resharper_braces_for_for=required
resharper_braces_for_foreach=required
resharper_braces_for_ifelse=required
resharper_braces_for_while=required
resharper_csharp_stick_comment=false
resharper_csharp_use_indent_from_vs=false
resharper_csharp_wrap_ternary_expr_style=wrap_if_long
resharper_indent_type_constraints=false
resharper_nested_ternary_style=simple_wrap
resharper_parentheses_non_obvious_operations=shift, bitwise_and, bitwise_exclusive_or, bitwise_inclusive_or, bitwise, conditional_and, conditional_or, conditional
resharper_place_accessorholder_attribute_on_same_line=False
resharper_place_expr_accessor_on_single_line=True
resharper_place_expr_method_on_single_line=True
resharper_place_expr_property_on_single_line=True

# ReSharper inspection severities
resharper_arrange_missing_parentheses_highlighting=hint
resharper_redundant_base_qualifier_highlighting=warning
resharper_virtual_member_call_in_constructor_highlighting=none


================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: 0Lucifer0
patreon: NosCore
ko_fi: noscoreio


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve

---

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: nuget
  directory: "/"
  schedule:
    interval: daily
  open-pull-requests-limit: 50


================================================
FILE: .github/workflows/dotnet.yml
================================================
name: .NET

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Setup .NET
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: 10.0.x

    - name: Run Unit Tests
      run: |
        dotnet --version
        dotnet restore
        dotnet build
        dotnet test --no-build --filter TestCategory!=OPTIONAL-TEST

    - name: Run Code Coverage
      run: |
        dotnet test test/NosCore.Core.Tests/NosCore.Core.Tests.csproj --no-build --filter TestCategory!=OPTIONAL-TEST /p:CollectCoverage=true /p:CoverletOutput="../TestResults/" /p:MergeWith="../TestResults/coverlet.json" /p:CoverletOutputFormat=opencover /p:ExcludeByAttribute='GeneratedCodeAttribute' /p:ExcludeByAttribute='Obsolete' /p:ExcludeByAttribute='CompilerGeneratedAttribute' /p:CoverletOutput='./tools/coverage.opencover.xml'
        dotnet test test/NosCore.Database.Tests/NosCore.Database.Tests.csproj --no-build --filter TestCategory!=OPTIONAL-TEST /p:CollectCoverage=true /p:CoverletOutput="../TestResults/" /p:MergeWith="../TestResults/coverlet.json" /p:CoverletOutputFormat=opencover /p:ExcludeByAttribute='GeneratedCodeAttribute' /p:ExcludeByAttribute='Obsolete' /p:ExcludeByAttribute='CompilerGeneratedAttribute' /p:CoverletOutput='./tools/coverage.opencover.xml'
        dotnet test test/NosCore.GameObject.Tests/NosCore.GameObject.Tests.csproj --no-build --filter TestCategory!=OPTIONAL-TEST /p:CollectCoverage=true /p:CoverletOutput="../TestResults/" /p:MergeWith="../TestResults/coverlet.json" /p:CoverletOutputFormat=opencover /p:ExcludeByAttribute='GeneratedCodeAttribute' /p:ExcludeByAttribute='Obsolete' /p:ExcludeByAttribute='CompilerGeneratedAttribute' /p:CoverletOutput='./tools/coverage.opencover.xml'
        dotnet test test/NosCore.PacketHandlers.Tests/NosCore.PacketHandlers.Tests.csproj --no-build --filter TestCategory!=OPTIONAL-TEST /p:CollectCoverage=true /p:CoverletOutput="../TestResults/" /p:MergeWith="../TestResults/coverlet.json" /p:CoverletOutputFormat=opencover /p:ExcludeByAttribute='GeneratedCodeAttribute' /p:ExcludeByAttribute='Obsolete' /p:ExcludeByAttribute='CompilerGeneratedAttribute' /p:CoverletOutput='./tools/coverage.opencover.xml'
        dotnet test test/NosCore.Tests.Shared/NosCore.Tests.Shared.csproj --no-build --filter TestCategory!=OPTIONAL-TEST /p:CollectCoverage=true /p:CoverletOutput="../TestResults/" /p:MergeWith="../TestResults/coverlet.json" /p:CoverletOutputFormat=opencover /p:ExcludeByAttribute='GeneratedCodeAttribute' /p:ExcludeByAttribute='Obsolete' /p:ExcludeByAttribute='CompilerGeneratedAttribute' /p:CoverletOutput='./tools/coverage.opencover.xml'
        dotnet test test/NosCore.WebApi.Tests/NosCore.WebApi.Tests.csproj --no-build --filter TestCategory!=OPTIONAL-TEST /p:CollectCoverage=true /p:CoverletOutput="../TestResults/" /p:MergeWith="../TestResults/coverlet.json" /p:CoverletOutputFormat=opencover /p:ExcludeByAttribute='GeneratedCodeAttribute' /p:ExcludeByAttribute='Obsolete' /p:ExcludeByAttribute='CompilerGeneratedAttribute' /p:CoverletOutput='./tools/coverage.opencover.xml'
        curl -s https://codecov.io/bash | bash -s -- -t $(CODECOV_TOKEN)

    - name: Login to DockerHub
      if: github.ref == 'refs/heads/master'
      uses: docker/login-action@v3
      with:
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}

    - run: dotnet test --runtime linux-musl-x64 --filter TestCategory=SomethingAsDotnetBuildDoesntWorkAnymore

    - name: Build, tag, and push image LoginServer
      if: github.ref == 'refs/heads/master'
      uses: docker/build-push-action@v6
      with:
        context: .
        file: ./deploy/Dockerfile-login
        push: true
        tags: |
          noscoreio/noscore.loginserver:latest
          noscoreio/noscore.loginserver:${{ github.sha }}

    - name: Build, tag, and push image MasterServer
      if: github.ref == 'refs/heads/master'
      uses: docker/build-push-action@v6
      with:
        context: .
        file: ./deploy/Dockerfile-master
        push: true
        tags: |
          noscoreio/noscore.masterserver:latest
          noscoreio/noscore.masterserver:${{ github.sha }}

    - name: Build, tag, and push image WorldServer
      if: github.ref == 'refs/heads/master'
      uses: docker/build-push-action@v6
      with:
        context: .
        file: ./deploy/Dockerfile-world
        push: true
        tags: |
          noscoreio/noscore.worldserver:latest
          noscoreio/noscore.worldserver:${{ github.sha }}


================================================
FILE: .gitignore
================================================

### Csharp ###
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/

# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
**/Properties/launchSettings.json

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Uncomment the next line to ignore your web deploy settings.
# By default, sensitive information, such as encrypted password
# should be stored in the .pubxml.user file.
#*.pubxml
*.pubxml.user
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Typescript v1 declaration files
typings/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

# CodeRush
.cr/

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs

### JetBrains+all ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

# User-specific stuff:
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/dictionaries

# Sensitive or high-churn files:
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.xml
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml

# Gradle:
.idea/**/gradle.xml
.idea/**/libraries

# CMake
cmake-build-debug/

# Mongo Explorer plugin:
.idea/**/mongoSettings.xml

## File-based project format:
*.iws

## Plugin-specific files:

# IntelliJ
/out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Cursive Clojure plugin
.idea/replstate.xml

# Ruby plugin and RubyMine
/.rakeTasks

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

### JetBrains+all Patch ###
# Ignores the whole idea folder
# See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360


### VisualStudioCode ###
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.history

### VisualStudio ###
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files

# User-specific files (MonoDevelop/Xamarin Studio)

# Build results

# Visual Studio 2015 cache/options directory
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# MSTest test Results

# NUNIT

# Build Results of an ATL Project

# .NET Core


# Chutzpah Test files

# Visual C++ cache files

# Visual Studio profiler

# TFS 2012 Local Workspace

# Guidance Automation Toolkit

# ReSharper is a .NET coding add-in

# JustCode is a .NET coding add-in

# TeamCity is a build add-in

# DotCover is a Code Coverage Tool

# Visual Studio code coverage results

# NCrunch

# MightyMoose

# Web workbench (sass)

# Installshield output folder

# DocProject is a documentation generator add-in

# Click-Once directory

# Publish Web Output
# TODO: Uncomment the next line to ignore your web deploy settings.
# By default, sensitive information, such as encrypted password
# should be stored in the .pubxml.user file.
#*.pubxml

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted

# NuGet Packages
# The packages folder can be ignored because of Package Restore
# except build/, which is used as an MSBuild target.
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignorable files

# Microsoft Azure Build Output

# Microsoft Azure Emulator

# Windows Store app package directories and files

# Visual Studio cache files
# files ending in .cache can be ignored
# but keep track of directories ending in .cache

# Others

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)

# SQL Server files

# Business Intelligence projects

# Microsoft Fakes

# GhostDoc plugin setting file

# Node.js Tools for Visual Studio

# Typescript v1 declaration files

# Visual Studio 6 build log

# Visual Studio 6 workspace options file

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)

# Visual Studio LightSwitch build output

# Paket dependency manager

# FAKE - F# Make

# JetBrains Rider

# CodeRush

# Python Tools for Visual Studio (PTVS)

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Telerik's JustMock configuration file

# BizTalk build output

### VisualStudio Patch ###
# By default, sensitive information, such as encrypted password
# should be stored in the .pubxml.user file.
Log.txt
/build/Configuration
/build/netcoreapp2.*
/build/netcoreapp3.*
/build/netcoreapp5.*
/build/net*.*
*.orig

/postgres

# Claude Code
.claude/


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to NosCore

## Concurrency & locking

NosCore intentionally uses **per-resource locks** rather than a global lock manager. Each lock has one job and lives on the resource it protects. When you add a new lock, follow the existing pattern below — do not introduce a centralised `LockManager`.

| Resource | Lock | Where it lives |
|---|---|---|
| Inbound packets for a session | `SemaphoreSlim _handlingPacketLock` | `ClientSession` |
| Damage application to a single entity | `SemaphoreSlim HitSemaphore` | `IAliveEntity` (player / monster / NPC) |
| SignalR hub connect/disconnect | `SemaphoreSlim _connectionLock` | `BaseHubClient` / `PubSubHubClient` |

### Rules

1. **One purpose per lock.** A lock guards exactly one mutable resource. Don't reuse an existing semaphore for unrelated state.
2. **Lock lives on the resource.** Put it as a field on the entity / session / client it protects, not in a static dictionary.
3. **Use `SemaphoreSlim(1, 1)` for serialization, `ConcurrentDictionary` for shared maps.** Don't reach for `lock(obj)` — async code can't `await` inside a `lock`.
4. **Always `try { ... } finally { _lock.Release(); }`** when acquiring a semaphore. Without `finally` an exception leaves the lock held.
5. **Never hold a lock across an external I/O call (DB, HTTP, SignalR).** If the call is slow, drop the lock first or use a more granular one.
6. **Don't acquire two locks at once** unless the order is documented at both call sites. Lock-ordering bugs surface at scale.

If a new feature needs cross-cutting coordination (e.g. "all map instances must agree on X"), prefer publishing a Wolverine message to a handler that owns the state — not adding a lock that spans subsystems.

## Background work & scheduled jobs

For "do X every N minutes" jobs, use the Wolverine pattern in `NosCore.GameObject.Messaging.ScheduledJobs/`:

1. Define a message record: `public sealed record FooJobMessage;`
2. Define a handler with a `Handle(FooJobMessage _)` method.
3. Register a `RecurringMessagePublisher<FooJobMessage>` as an `IHostedService` in the relevant `*Bootstrap.cs`.

For one-shot delayed work, publish via `IMessageBus.PublishAsync` with a `DeliveryOptions { ScheduledTime = ... }` — see Wolverine docs for details.

## Domain events

Cross-cutting reactions ("on monster killed → award XP, update quest progress, write family log") should be Wolverine messages, not direct calls between services. See `NosCore.GameObject.Messaging.Events/MonsterKilledEvent.cs` for the template.

### Conventions

- **Events** live in `NosCore.GameObject.Messaging.Events/` as `sealed record EventNameEvent(...)`. Use past tense — `XHappenedEvent` — to make it clear the event represents something that already occurred.
- **Handlers** live in `NosCore.GameObject.Messaging.Handlers/<Domain>/`, one folder per packet/feature area (e.g. `Guri/`, `Nrun/`, `UseItem/`, `MapItem/`, `Map/`). Class names always end with `Handler`, never `EventHandler`. Handlers are plain classes — Wolverine discovers them by convention via the `Handle`/`HandleAsync` method.
- **One handler per file.** Multiple handlers can subscribe to the same event; each filters internally with an early `return` if the event isn't relevant.
- **Publishing**: inject `Wolverine.IMessageBus` and call `messageBus.PublishAsync(new XEvent(...))`. Don't introduce per-domain "runner" services — the bus is the runner.

### Recurring & scheduled work

Recurring jobs (e.g. periodic save) are registered as `RecurringMessagePublisher<TMessage>` hosted services in the relevant `*Bootstrap.cs`. The publisher fires a fresh message every interval; the Wolverine handler does the work. See `Messaging/ScheduledJobs/` for examples.

For one-shot delayed work (e.g. "expire this buff in 30s"), publish via `IMessageBus.PublishAsync` with `DeliveryOptions { ScheduledTime = ... }`.


================================================
FILE: Directory.Build.props
================================================
<Project>
  <PropertyGroup>
    <LangVersion>latest</LangVersion>
    <Nullable>enable</Nullable>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
  </PropertyGroup>
  <PropertyGroup Condition="'$(NOSCORE_LOCAL_PACKAGES)' != ''">
    <RestoreAdditionalProjectSources>$(RestoreAdditionalProjectSources);$(NOSCORE_LOCAL_PACKAGES)</RestoreAdditionalProjectSources>
  </PropertyGroup>
</Project>


================================================
FILE: Directory.Packages.props
================================================
<Project>
  <PropertyGroup>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
  </PropertyGroup>
  <ItemGroup>
    <PackageVersion Include="Arch" Version="2.1.0" />
    <PackageVersion Include="Autofac" Version="9.1.0" />
    <PackageVersion Include="Autofac.Extensions.DependencyInjection" Version="11.0.0" />
    <PackageVersion Include="AutoFixture" Version="4.18.1" />
    <PackageVersion Include="AutoFixture.AutoMoq" Version="4.18.1" />
    <PackageVersion Include="BCrypt.Net-Core" Version="1.6.0" />
    <PackageVersion Include="coverlet.msbuild" Version="10.0.0" />
    <PackageVersion Include="FastExpressionCompiler" Version="5.4.1" />
    <PackageVersion Include="JetBrains.Annotations" Version="2025.2.4" />
    <PackageVersion Include="JsonPatch.Net" Version="5.0.2" />
    <PackageVersion Include="Mapster" Version="10.0.7" />
    <PackageVersion Include="Mapster.JsonNet" Version="10.0.7" />
    <PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.7" />
    <PackageVersion Include="Microsoft.AspNetCore.Authorization" Version="10.0.7" />
    <PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="10.0.7" />
    <PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="5.3.0-2.25625.1" />
    <PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="5.3.0" />
    <PackageVersion Include="Microsoft.EntityFrameworkCore" Version="10.0.7" />
    <PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.7" />
    <PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="10.0.7" />
    <PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.7" />
    <PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.7" />
    <PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="10.0.7" />
    <PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.7" />
    <PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="10.0.7" />
    <PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.7" />
    <PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.7" />
    <PackageVersion Include="Microsoft.Extensions.Http" Version="10.0.7" />
    <PackageVersion Include="Microsoft.Extensions.Logging" Version="10.0.7" />
    <PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="10.0.7" />
    <PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.5.1" />
    <PackageVersion Include="Moq" Version="4.20.72" />
    <PackageVersion Include="MSTest.TestAdapter" Version="4.2.2" />
    <PackageVersion Include="MSTest.TestFramework" Version="4.2.2" />
    <PackageVersion Include="NodaTime" Version="3.3.2" />
    <PackageVersion Include="NodaTime.Serialization.SystemTextJson" Version="1.3.1" />
    <PackageVersion Include="NodaTime.Testing" Version="3.3.2" />
    <PackageVersion Include="NosCore.Algorithm" Version="2.0.0" />
    <PackageVersion Include="NosCore.Analyzers" Version="2.0.0" />
    <PackageVersion Include="NosCore.Dao" Version="5.0.0" />
    <PackageVersion Include="NosCore.FastMember" Version="1.5.0" />
    <PackageVersion Include="NosCore.Networking" Version="8.0.0" />
    <PackageVersion Include="NosCore.Packets" Version="20.0.3" />
    <PackageVersion Include="NosCore.PathFinder" Version="2.1.0" />
    <PackageVersion Include="NosCore.Shared" Version="6.0.0" />
    <PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.1" />
    <PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime" Version="10.0.1" />
    <PackageVersion Include="Npgsql.NodaTime" Version="10.0.2" />
    <PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.3" />
    <PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.15.3" />
    <PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.15.2" />
    <PackageVersion Include="OpenTelemetry.Instrumentation.EntityFrameworkCore" Version="1.15.1-beta.1" />
    <PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.15.1" />
    <PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.15.1" />
    <PackageVersion Include="Polly" Version="8.6.6" />
    <PackageVersion Include="Serilog" Version="4.3.1" />
    <PackageVersion Include="Serilog.Extensions.Hosting" Version="10.0.0" />
    <PackageVersion Include="Serilog.Extensions.Logging" Version="10.0.0" />
    <PackageVersion Include="Serilog.Settings.Configuration" Version="10.0.0" />
    <PackageVersion Include="Serilog.Sinks.Console" Version="6.1.1" />
    <PackageVersion Include="SpecLight" Version="1.0.71" />
    <PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="8.18.0" />
    <PackageVersion Include="System.Reactive" Version="6.1.0" />
    <PackageVersion Include="TwoFactorAuth.Net" Version="1.4.0" />
    <PackageVersion Include="WolverineFx" Version="5.37.0" />
  </ItemGroup>
</Project>


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2026 NosCoreIO

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: NosCore.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 18
VisualStudioVersion = 18.2.11408.102
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NosCore.LoginServer", "src\NosCore.LoginServer\NosCore.LoginServer.csproj", "{40663D90-0B3E-48A7-800E-CB5E1BED27B6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NosCore.WorldServer", "src\NosCore.WorldServer\NosCore.WorldServer.csproj", "{4EFCF709-5899-4C49-A368-E556AFA3931F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NosCore.Parser", "src\NosCore.Parser\NosCore.Parser.csproj", "{BBAF31CA-9D4F-4786-81B8-7FD56633C7B7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NosCore.MasterServer", "src\NosCore.MasterServer\NosCore.MasterServer.csproj", "{756A8A86-A7EE-475D-B2E4-E98D79049F6B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NosCore.Core", "src\NosCore.Core\NosCore.Core.csproj", "{83F1DAD2-9E07-4D0B-B548-DEB03105F874}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NosCore.Database", "src\NosCore.Database\NosCore.Database.csproj", "{93487BBB-589C-4315-9E52-1279C9434B3C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NosCore.GameObject", "src\NosCore.GameObject\NosCore.GameObject.csproj", "{77D6E5F6-9A08-436D-8A9D-7F5832322FAE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NosCore.Data", "src\NosCore.Data\NosCore.Data.csproj", "{AEDAAE2C-D615-4241-8006-240BB7FF1446}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NosCore.PacketHandlers", "src\NosCore.PacketHandlers\NosCore.PacketHandlers.csproj", "{8DD33CE5-B9B4-4CCA-B3D7-55DA387AB4AA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NosCore.Tests.Shared", "test\NosCore.Tests.Shared\NosCore.Tests.Shared.csproj", "{B22C7ABE-2B56-42AF-8CF2-46058A5B6543}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Infrastructure", "Infrastructure", "{975CF226-2297-4B1B-88C6-5783C5359D18}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Executables", "Executables", "{D4E0F6CD-9F21-4140-AC42-CD021D98B980}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{EFA0F8A7-CBF2-4542-82A9-931BB0111FED}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NosCore.Core.Tests", "test\NosCore.Core.Tests\NosCore.Core.Tests.csproj", "{A4B32710-06C8-4222-BC2B-2341EF514D9C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NosCore.GameObject.Tests", "test\NosCore.GameObject.Tests\NosCore.GameObject.Tests.csproj", "{DCD71941-444F-4A8B-B2CF-AF1C95BAB824}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NosCore.PacketHandlers.Tests", "test\NosCore.PacketHandlers.Tests\NosCore.PacketHandlers.Tests.csproj", "{07506CBB-A1CE-4FFA-B2C7-AC34FD9E5676}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NosCore.Database.Tests", "test\NosCore.Database.Tests\NosCore.Database.Tests.csproj", "{DCE80DB0-6530-4599-9433-5601F55E4270}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NosCore.WebApi.Tests", "test\NosCore.WebApi.Tests\NosCore.WebApi.Tests.csproj", "{5C60F99A-1BA8-4A82-9973-7150D4BE57A3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NosCore.DtoGenerator", "tools\NosCore.DtoGenerator\NosCore.DtoGenerator.csproj", "{3F7C2822-BF7B-4BC9-8AA3-3ED2E2F0351C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NosCore.WebApi", "src\NosCore.WebApi\NosCore.WebApi.csproj", "{4A4D1876-74CC-46B7-BB93-B3E0E4D25AE5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NosCore.Parser.Tests", "test\NosCore.Parser.Tests\NosCore.Parser.Tests.csproj", "{4E68313F-69F8-4125-B87E-665D6F7DFD5D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{07C2787E-EAC7-C090-1BA3-A61EC2A24D84}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NosCore.EcsGenerator", "tools\NosCore.EcsGenerator\NosCore.EcsGenerator.csproj", "{78731E48-C6CA-4614-B617-65B55A85CAE0}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Debug|x64 = Debug|x64
		Debug|x86 = Debug|x86
		Release|Any CPU = Release|Any CPU
		Release|x64 = Release|x64
		Release|x86 = Release|x86
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{40663D90-0B3E-48A7-800E-CB5E1BED27B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{40663D90-0B3E-48A7-800E-CB5E1BED27B6}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{40663D90-0B3E-48A7-800E-CB5E1BED27B6}.Debug|x64.ActiveCfg = Debug|Any CPU
		{40663D90-0B3E-48A7-800E-CB5E1BED27B6}.Debug|x64.Build.0 = Debug|Any CPU
		{40663D90-0B3E-48A7-800E-CB5E1BED27B6}.Debug|x86.ActiveCfg = Debug|Any CPU
		{40663D90-0B3E-48A7-800E-CB5E1BED27B6}.Debug|x86.Build.0 = Debug|Any CPU
		{40663D90-0B3E-48A7-800E-CB5E1BED27B6}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{40663D90-0B3E-48A7-800E-CB5E1BED27B6}.Release|Any CPU.Build.0 = Release|Any CPU
		{40663D90-0B3E-48A7-800E-CB5E1BED27B6}.Release|x64.ActiveCfg = Release|Any CPU
		{40663D90-0B3E-48A7-800E-CB5E1BED27B6}.Release|x64.Build.0 = Release|Any CPU
		{40663D90-0B3E-48A7-800E-CB5E1BED27B6}.Release|x86.ActiveCfg = Release|Any CPU
		{40663D90-0B3E-48A7-800E-CB5E1BED27B6}.Release|x86.Build.0 = Release|Any CPU
		{4EFCF709-5899-4C49-A368-E556AFA3931F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{4EFCF709-5899-4C49-A368-E556AFA3931F}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{4EFCF709-5899-4C49-A368-E556AFA3931F}.Debug|x64.ActiveCfg = Debug|Any CPU
		{4EFCF709-5899-4C49-A368-E556AFA3931F}.Debug|x64.Build.0 = Debug|Any CPU
		{4EFCF709-5899-4C49-A368-E556AFA3931F}.Debug|x86.ActiveCfg = Debug|Any CPU
		{4EFCF709-5899-4C49-A368-E556AFA3931F}.Debug|x86.Build.0 = Debug|Any CPU
		{4EFCF709-5899-4C49-A368-E556AFA3931F}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{4EFCF709-5899-4C49-A368-E556AFA3931F}.Release|Any CPU.Build.0 = Release|Any CPU
		{4EFCF709-5899-4C49-A368-E556AFA3931F}.Release|x64.ActiveCfg = Release|Any CPU
		{4EFCF709-5899-4C49-A368-E556AFA3931F}.Release|x64.Build.0 = Release|Any CPU
		{4EFCF709-5899-4C49-A368-E556AFA3931F}.Release|x86.ActiveCfg = Release|Any CPU
		{4EFCF709-5899-4C49-A368-E556AFA3931F}.Release|x86.Build.0 = Release|Any CPU
		{BBAF31CA-9D4F-4786-81B8-7FD56633C7B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{BBAF31CA-9D4F-4786-81B8-7FD56633C7B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{BBAF31CA-9D4F-4786-81B8-7FD56633C7B7}.Debug|x64.ActiveCfg = Debug|Any CPU
		{BBAF31CA-9D4F-4786-81B8-7FD56633C7B7}.Debug|x64.Build.0 = Debug|Any CPU
		{BBAF31CA-9D4F-4786-81B8-7FD56633C7B7}.Debug|x86.ActiveCfg = Debug|Any CPU
		{BBAF31CA-9D4F-4786-81B8-7FD56633C7B7}.Debug|x86.Build.0 = Debug|Any CPU
		{BBAF31CA-9D4F-4786-81B8-7FD56633C7B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{BBAF31CA-9D4F-4786-81B8-7FD56633C7B7}.Release|Any CPU.Build.0 = Release|Any CPU
		{BBAF31CA-9D4F-4786-81B8-7FD56633C7B7}.Release|x64.ActiveCfg = Release|Any CPU
		{BBAF31CA-9D4F-4786-81B8-7FD56633C7B7}.Release|x64.Build.0 = Release|Any CPU
		{BBAF31CA-9D4F-4786-81B8-7FD56633C7B7}.Release|x86.ActiveCfg = Release|Any CPU
		{BBAF31CA-9D4F-4786-81B8-7FD56633C7B7}.Release|x86.Build.0 = Release|Any CPU
		{756A8A86-A7EE-475D-B2E4-E98D79049F6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{756A8A86-A7EE-475D-B2E4-E98D79049F6B}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{756A8A86-A7EE-475D-B2E4-E98D79049F6B}.Debug|x64.ActiveCfg = Debug|Any CPU
		{756A8A86-A7EE-475D-B2E4-E98D79049F6B}.Debug|x64.Build.0 = Debug|Any CPU
		{756A8A86-A7EE-475D-B2E4-E98D79049F6B}.Debug|x86.ActiveCfg = Debug|Any CPU
		{756A8A86-A7EE-475D-B2E4-E98D79049F6B}.Debug|x86.Build.0 = Debug|Any CPU
		{756A8A86-A7EE-475D-B2E4-E98D79049F6B}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{756A8A86-A7EE-475D-B2E4-E98D79049F6B}.Release|Any CPU.Build.0 = Release|Any CPU
		{756A8A86-A7EE-475D-B2E4-E98D79049F6B}.Release|x64.ActiveCfg = Release|Any CPU
		{756A8A86-A7EE-475D-B2E4-E98D79049F6B}.Release|x64.Build.0 = Release|Any CPU
		{756A8A86-A7EE-475D-B2E4-E98D79049F6B}.Release|x86.ActiveCfg = Release|Any CPU
		{756A8A86-A7EE-475D-B2E4-E98D79049F6B}.Release|x86.Build.0 = Release|Any CPU
		{83F1DAD2-9E07-4D0B-B548-DEB03105F874}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{83F1DAD2-9E07-4D0B-B548-DEB03105F874}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{83F1DAD2-9E07-4D0B-B548-DEB03105F874}.Debug|x64.ActiveCfg = Debug|Any CPU
		{83F1DAD2-9E07-4D0B-B548-DEB03105F874}.Debug|x64.Build.0 = Debug|Any CPU
		{83F1DAD2-9E07-4D0B-B548-DEB03105F874}.Debug|x86.ActiveCfg = Debug|Any CPU
		{83F1DAD2-9E07-4D0B-B548-DEB03105F874}.Debug|x86.Build.0 = Debug|Any CPU
		{83F1DAD2-9E07-4D0B-B548-DEB03105F874}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{83F1DAD2-9E07-4D0B-B548-DEB03105F874}.Release|Any CPU.Build.0 = Release|Any CPU
		{83F1DAD2-9E07-4D0B-B548-DEB03105F874}.Release|x64.ActiveCfg = Release|Any CPU
		{83F1DAD2-9E07-4D0B-B548-DEB03105F874}.Release|x64.Build.0 = Release|Any CPU
		{83F1DAD2-9E07-4D0B-B548-DEB03105F874}.Release|x86.ActiveCfg = Release|Any CPU
		{83F1DAD2-9E07-4D0B-B548-DEB03105F874}.Release|x86.Build.0 = Release|Any CPU
		{93487BBB-589C-4315-9E52-1279C9434B3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{93487BBB-589C-4315-9E52-1279C9434B3C}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{93487BBB-589C-4315-9E52-1279C9434B3C}.Debug|x64.ActiveCfg = Debug|Any CPU
		{93487BBB-589C-4315-9E52-1279C9434B3C}.Debug|x64.Build.0 = Debug|Any CPU
		{93487BBB-589C-4315-9E52-1279C9434B3C}.Debug|x86.ActiveCfg = Debug|Any CPU
		{93487BBB-589C-4315-9E52-1279C9434B3C}.Debug|x86.Build.0 = Debug|Any CPU
		{93487BBB-589C-4315-9E52-1279C9434B3C}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{93487BBB-589C-4315-9E52-1279C9434B3C}.Release|Any CPU.Build.0 = Release|Any CPU
		{93487BBB-589C-4315-9E52-1279C9434B3C}.Release|x64.ActiveCfg = Release|Any CPU
		{93487BBB-589C-4315-9E52-1279C9434B3C}.Release|x64.Build.0 = Release|Any CPU
		{93487BBB-589C-4315-9E52-1279C9434B3C}.Release|x86.ActiveCfg = Release|Any CPU
		{93487BBB-589C-4315-9E52-1279C9434B3C}.Release|x86.Build.0 = Release|Any CPU
		{77D6E5F6-9A08-436D-8A9D-7F5832322FAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{77D6E5F6-9A08-436D-8A9D-7F5832322FAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{77D6E5F6-9A08-436D-8A9D-7F5832322FAE}.Debug|x64.ActiveCfg = Debug|Any CPU
		{77D6E5F6-9A08-436D-8A9D-7F5832322FAE}.Debug|x64.Build.0 = Debug|Any CPU
		{77D6E5F6-9A08-436D-8A9D-7F5832322FAE}.Debug|x86.ActiveCfg = Debug|Any CPU
		{77D6E5F6-9A08-436D-8A9D-7F5832322FAE}.Debug|x86.Build.0 = Debug|Any CPU
		{77D6E5F6-9A08-436D-8A9D-7F5832322FAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{77D6E5F6-9A08-436D-8A9D-7F5832322FAE}.Release|Any CPU.Build.0 = Release|Any CPU
		{77D6E5F6-9A08-436D-8A9D-7F5832322FAE}.Release|x64.ActiveCfg = Release|Any CPU
		{77D6E5F6-9A08-436D-8A9D-7F5832322FAE}.Release|x64.Build.0 = Release|Any CPU
		{77D6E5F6-9A08-436D-8A9D-7F5832322FAE}.Release|x86.ActiveCfg = Release|Any CPU
		{77D6E5F6-9A08-436D-8A9D-7F5832322FAE}.Release|x86.Build.0 = Release|Any CPU
		{AEDAAE2C-D615-4241-8006-240BB7FF1446}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{AEDAAE2C-D615-4241-8006-240BB7FF1446}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{AEDAAE2C-D615-4241-8006-240BB7FF1446}.Debug|x64.ActiveCfg = Debug|Any CPU
		{AEDAAE2C-D615-4241-8006-240BB7FF1446}.Debug|x64.Build.0 = Debug|Any CPU
		{AEDAAE2C-D615-4241-8006-240BB7FF1446}.Debug|x86.ActiveCfg = Debug|Any CPU
		{AEDAAE2C-D615-4241-8006-240BB7FF1446}.Debug|x86.Build.0 = Debug|Any CPU
		{AEDAAE2C-D615-4241-8006-240BB7FF1446}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{AEDAAE2C-D615-4241-8006-240BB7FF1446}.Release|Any CPU.Build.0 = Release|Any CPU
		{AEDAAE2C-D615-4241-8006-240BB7FF1446}.Release|x64.ActiveCfg = Release|Any CPU
		{AEDAAE2C-D615-4241-8006-240BB7FF1446}.Release|x64.Build.0 = Release|Any CPU
		{AEDAAE2C-D615-4241-8006-240BB7FF1446}.Release|x86.ActiveCfg = Release|Any CPU
		{AEDAAE2C-D615-4241-8006-240BB7FF1446}.Release|x86.Build.0 = Release|Any CPU
		{8DD33CE5-B9B4-4CCA-B3D7-55DA387AB4AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{8DD33CE5-B9B4-4CCA-B3D7-55DA387AB4AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{8DD33CE5-B9B4-4CCA-B3D7-55DA387AB4AA}.Debug|x64.ActiveCfg = Debug|Any CPU
		{8DD33CE5-B9B4-4CCA-B3D7-55DA387AB4AA}.Debug|x64.Build.0 = Debug|Any CPU
		{8DD33CE5-B9B4-4CCA-B3D7-55DA387AB4AA}.Debug|x86.ActiveCfg = Debug|Any CPU
		{8DD33CE5-B9B4-4CCA-B3D7-55DA387AB4AA}.Debug|x86.Build.0 = Debug|Any CPU
		{8DD33CE5-B9B4-4CCA-B3D7-55DA387AB4AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{8DD33CE5-B9B4-4CCA-B3D7-55DA387AB4AA}.Release|Any CPU.Build.0 = Release|Any CPU
		{8DD33CE5-B9B4-4CCA-B3D7-55DA387AB4AA}.Release|x64.ActiveCfg = Release|Any CPU
		{8DD33CE5-B9B4-4CCA-B3D7-55DA387AB4AA}.Release|x64.Build.0 = Release|Any CPU
		{8DD33CE5-B9B4-4CCA-B3D7-55DA387AB4AA}.Release|x86.ActiveCfg = Release|Any CPU
		{8DD33CE5-B9B4-4CCA-B3D7-55DA387AB4AA}.Release|x86.Build.0 = Release|Any CPU
		{B22C7ABE-2B56-42AF-8CF2-46058A5B6543}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{B22C7ABE-2B56-42AF-8CF2-46058A5B6543}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{B22C7ABE-2B56-42AF-8CF2-46058A5B6543}.Debug|x64.ActiveCfg = Debug|Any CPU
		{B22C7ABE-2B56-42AF-8CF2-46058A5B6543}.Debug|x64.Build.0 = Debug|Any CPU
		{B22C7ABE-2B56-42AF-8CF2-46058A5B6543}.Debug|x86.ActiveCfg = Debug|Any CPU
		{B22C7ABE-2B56-42AF-8CF2-46058A5B6543}.Debug|x86.Build.0 = Debug|Any CPU
		{B22C7ABE-2B56-42AF-8CF2-46058A5B6543}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{B22C7ABE-2B56-42AF-8CF2-46058A5B6543}.Release|Any CPU.Build.0 = Release|Any CPU
		{B22C7ABE-2B56-42AF-8CF2-46058A5B6543}.Release|x64.ActiveCfg = Release|Any CPU
		{B22C7ABE-2B56-42AF-8CF2-46058A5B6543}.Release|x64.Build.0 = Release|Any CPU
		{B22C7ABE-2B56-42AF-8CF2-46058A5B6543}.Release|x86.ActiveCfg = Release|Any CPU
		{B22C7ABE-2B56-42AF-8CF2-46058A5B6543}.Release|x86.Build.0 = Release|Any CPU
		{A4B32710-06C8-4222-BC2B-2341EF514D9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{A4B32710-06C8-4222-BC2B-2341EF514D9C}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{A4B32710-06C8-4222-BC2B-2341EF514D9C}.Debug|x64.ActiveCfg = Debug|Any CPU
		{A4B32710-06C8-4222-BC2B-2341EF514D9C}.Debug|x64.Build.0 = Debug|Any CPU
		{A4B32710-06C8-4222-BC2B-2341EF514D9C}.Debug|x86.ActiveCfg = Debug|Any CPU
		{A4B32710-06C8-4222-BC2B-2341EF514D9C}.Debug|x86.Build.0 = Debug|Any CPU
		{A4B32710-06C8-4222-BC2B-2341EF514D9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{A4B32710-06C8-4222-BC2B-2341EF514D9C}.Release|Any CPU.Build.0 = Release|Any CPU
		{A4B32710-06C8-4222-BC2B-2341EF514D9C}.Release|x64.ActiveCfg = Release|Any CPU
		{A4B32710-06C8-4222-BC2B-2341EF514D9C}.Release|x64.Build.0 = Release|Any CPU
		{A4B32710-06C8-4222-BC2B-2341EF514D9C}.Release|x86.ActiveCfg = Release|Any CPU
		{A4B32710-06C8-4222-BC2B-2341EF514D9C}.Release|x86.Build.0 = Release|Any CPU
		{DCD71941-444F-4A8B-B2CF-AF1C95BAB824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{DCD71941-444F-4A8B-B2CF-AF1C95BAB824}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{DCD71941-444F-4A8B-B2CF-AF1C95BAB824}.Debug|x64.ActiveCfg = Debug|Any CPU
		{DCD71941-444F-4A8B-B2CF-AF1C95BAB824}.Debug|x64.Build.0 = Debug|Any CPU
		{DCD71941-444F-4A8B-B2CF-AF1C95BAB824}.Debug|x86.ActiveCfg = Debug|Any CPU
		{DCD71941-444F-4A8B-B2CF-AF1C95BAB824}.Debug|x86.Build.0 = Debug|Any CPU
		{DCD71941-444F-4A8B-B2CF-AF1C95BAB824}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{DCD71941-444F-4A8B-B2CF-AF1C95BAB824}.Release|Any CPU.Build.0 = Release|Any CPU
		{DCD71941-444F-4A8B-B2CF-AF1C95BAB824}.Release|x64.ActiveCfg = Release|Any CPU
		{DCD71941-444F-4A8B-B2CF-AF1C95BAB824}.Release|x64.Build.0 = Release|Any CPU
		{DCD71941-444F-4A8B-B2CF-AF1C95BAB824}.Release|x86.ActiveCfg = Release|Any CPU
		{DCD71941-444F-4A8B-B2CF-AF1C95BAB824}.Release|x86.Build.0 = Release|Any CPU
		{07506CBB-A1CE-4FFA-B2C7-AC34FD9E5676}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{07506CBB-A1CE-4FFA-B2C7-AC34FD9E5676}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{07506CBB-A1CE-4FFA-B2C7-AC34FD9E5676}.Debug|x64.ActiveCfg = Debug|Any CPU
		{07506CBB-A1CE-4FFA-B2C7-AC34FD9E5676}.Debug|x64.Build.0 = Debug|Any CPU
		{07506CBB-A1CE-4FFA-B2C7-AC34FD9E5676}.Debug|x86.ActiveCfg = Debug|Any CPU
		{07506CBB-A1CE-4FFA-B2C7-AC34FD9E5676}.Debug|x86.Build.0 = Debug|Any CPU
		{07506CBB-A1CE-4FFA-B2C7-AC34FD9E5676}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{07506CBB-A1CE-4FFA-B2C7-AC34FD9E5676}.Release|Any CPU.Build.0 = Release|Any CPU
		{07506CBB-A1CE-4FFA-B2C7-AC34FD9E5676}.Release|x64.ActiveCfg = Release|Any CPU
		{07506CBB-A1CE-4FFA-B2C7-AC34FD9E5676}.Release|x64.Build.0 = Release|Any CPU
		{07506CBB-A1CE-4FFA-B2C7-AC34FD9E5676}.Release|x86.ActiveCfg = Release|Any CPU
		{07506CBB-A1CE-4FFA-B2C7-AC34FD9E5676}.Release|x86.Build.0 = Release|Any CPU
		{DCE80DB0-6530-4599-9433-5601F55E4270}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{DCE80DB0-6530-4599-9433-5601F55E4270}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{DCE80DB0-6530-4599-9433-5601F55E4270}.Debug|x64.ActiveCfg = Debug|Any CPU
		{DCE80DB0-6530-4599-9433-5601F55E4270}.Debug|x64.Build.0 = Debug|Any CPU
		{DCE80DB0-6530-4599-9433-5601F55E4270}.Debug|x86.ActiveCfg = Debug|Any CPU
		{DCE80DB0-6530-4599-9433-5601F55E4270}.Debug|x86.Build.0 = Debug|Any CPU
		{DCE80DB0-6530-4599-9433-5601F55E4270}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{DCE80DB0-6530-4599-9433-5601F55E4270}.Release|Any CPU.Build.0 = Release|Any CPU
		{DCE80DB0-6530-4599-9433-5601F55E4270}.Release|x64.ActiveCfg = Release|Any CPU
		{DCE80DB0-6530-4599-9433-5601F55E4270}.Release|x64.Build.0 = Release|Any CPU
		{DCE80DB0-6530-4599-9433-5601F55E4270}.Release|x86.ActiveCfg = Release|Any CPU
		{DCE80DB0-6530-4599-9433-5601F55E4270}.Release|x86.Build.0 = Release|Any CPU
		{5C60F99A-1BA8-4A82-9973-7150D4BE57A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{5C60F99A-1BA8-4A82-9973-7150D4BE57A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{5C60F99A-1BA8-4A82-9973-7150D4BE57A3}.Debug|x64.ActiveCfg = Debug|Any CPU
		{5C60F99A-1BA8-4A82-9973-7150D4BE57A3}.Debug|x64.Build.0 = Debug|Any CPU
		{5C60F99A-1BA8-4A82-9973-7150D4BE57A3}.Debug|x86.ActiveCfg = Debug|Any CPU
		{5C60F99A-1BA8-4A82-9973-7150D4BE57A3}.Debug|x86.Build.0 = Debug|Any CPU
		{5C60F99A-1BA8-4A82-9973-7150D4BE57A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{5C60F99A-1BA8-4A82-9973-7150D4BE57A3}.Release|Any CPU.Build.0 = Release|Any CPU
		{5C60F99A-1BA8-4A82-9973-7150D4BE57A3}.Release|x64.ActiveCfg = Release|Any CPU
		{5C60F99A-1BA8-4A82-9973-7150D4BE57A3}.Release|x64.Build.0 = Release|Any CPU
		{5C60F99A-1BA8-4A82-9973-7150D4BE57A3}.Release|x86.ActiveCfg = Release|Any CPU
		{5C60F99A-1BA8-4A82-9973-7150D4BE57A3}.Release|x86.Build.0 = Release|Any CPU
		{3F7C2822-BF7B-4BC9-8AA3-3ED2E2F0351C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{3F7C2822-BF7B-4BC9-8AA3-3ED2E2F0351C}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{3F7C2822-BF7B-4BC9-8AA3-3ED2E2F0351C}.Debug|x64.ActiveCfg = Debug|Any CPU
		{3F7C2822-BF7B-4BC9-8AA3-3ED2E2F0351C}.Debug|x64.Build.0 = Debug|Any CPU
		{3F7C2822-BF7B-4BC9-8AA3-3ED2E2F0351C}.Debug|x86.ActiveCfg = Debug|Any CPU
		{3F7C2822-BF7B-4BC9-8AA3-3ED2E2F0351C}.Debug|x86.Build.0 = Debug|Any CPU
		{3F7C2822-BF7B-4BC9-8AA3-3ED2E2F0351C}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{3F7C2822-BF7B-4BC9-8AA3-3ED2E2F0351C}.Release|Any CPU.Build.0 = Release|Any CPU
		{3F7C2822-BF7B-4BC9-8AA3-3ED2E2F0351C}.Release|x64.ActiveCfg = Release|Any CPU
		{3F7C2822-BF7B-4BC9-8AA3-3ED2E2F0351C}.Release|x64.Build.0 = Release|Any CPU
		{3F7C2822-BF7B-4BC9-8AA3-3ED2E2F0351C}.Release|x86.ActiveCfg = Release|Any CPU
		{3F7C2822-BF7B-4BC9-8AA3-3ED2E2F0351C}.Release|x86.Build.0 = Release|Any CPU
		{4A4D1876-74CC-46B7-BB93-B3E0E4D25AE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{4A4D1876-74CC-46B7-BB93-B3E0E4D25AE5}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{4A4D1876-74CC-46B7-BB93-B3E0E4D25AE5}.Debug|x64.ActiveCfg = Debug|Any CPU
		{4A4D1876-74CC-46B7-BB93-B3E0E4D25AE5}.Debug|x64.Build.0 = Debug|Any CPU
		{4A4D1876-74CC-46B7-BB93-B3E0E4D25AE5}.Debug|x86.ActiveCfg = Debug|Any CPU
		{4A4D1876-74CC-46B7-BB93-B3E0E4D25AE5}.Debug|x86.Build.0 = Debug|Any CPU
		{4A4D1876-74CC-46B7-BB93-B3E0E4D25AE5}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{4A4D1876-74CC-46B7-BB93-B3E0E4D25AE5}.Release|Any CPU.Build.0 = Release|Any CPU
		{4A4D1876-74CC-46B7-BB93-B3E0E4D25AE5}.Release|x64.ActiveCfg = Release|Any CPU
		{4A4D1876-74CC-46B7-BB93-B3E0E4D25AE5}.Release|x64.Build.0 = Release|Any CPU
		{4A4D1876-74CC-46B7-BB93-B3E0E4D25AE5}.Release|x86.ActiveCfg = Release|Any CPU
		{4A4D1876-74CC-46B7-BB93-B3E0E4D25AE5}.Release|x86.Build.0 = Release|Any CPU
		{4E68313F-69F8-4125-B87E-665D6F7DFD5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{4E68313F-69F8-4125-B87E-665D6F7DFD5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{4E68313F-69F8-4125-B87E-665D6F7DFD5D}.Debug|x64.ActiveCfg = Debug|Any CPU
		{4E68313F-69F8-4125-B87E-665D6F7DFD5D}.Debug|x64.Build.0 = Debug|Any CPU
		{4E68313F-69F8-4125-B87E-665D6F7DFD5D}.Debug|x86.ActiveCfg = Debug|Any CPU
		{4E68313F-69F8-4125-B87E-665D6F7DFD5D}.Debug|x86.Build.0 = Debug|Any CPU
		{4E68313F-69F8-4125-B87E-665D6F7DFD5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{4E68313F-69F8-4125-B87E-665D6F7DFD5D}.Release|Any CPU.Build.0 = Release|Any CPU
		{4E68313F-69F8-4125-B87E-665D6F7DFD5D}.Release|x64.ActiveCfg = Release|Any CPU
		{4E68313F-69F8-4125-B87E-665D6F7DFD5D}.Release|x64.Build.0 = Release|Any CPU
		{4E68313F-69F8-4125-B87E-665D6F7DFD5D}.Release|x86.ActiveCfg = Release|Any CPU
		{4E68313F-69F8-4125-B87E-665D6F7DFD5D}.Release|x86.Build.0 = Release|Any CPU
		{78731E48-C6CA-4614-B617-65B55A85CAE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{78731E48-C6CA-4614-B617-65B55A85CAE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{78731E48-C6CA-4614-B617-65B55A85CAE0}.Debug|x64.ActiveCfg = Debug|Any CPU
		{78731E48-C6CA-4614-B617-65B55A85CAE0}.Debug|x64.Build.0 = Debug|Any CPU
		{78731E48-C6CA-4614-B617-65B55A85CAE0}.Debug|x86.ActiveCfg = Debug|Any CPU
		{78731E48-C6CA-4614-B617-65B55A85CAE0}.Debug|x86.Build.0 = Debug|Any CPU
		{78731E48-C6CA-4614-B617-65B55A85CAE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{78731E48-C6CA-4614-B617-65B55A85CAE0}.Release|Any CPU.Build.0 = Release|Any CPU
		{78731E48-C6CA-4614-B617-65B55A85CAE0}.Release|x64.ActiveCfg = Release|Any CPU
		{78731E48-C6CA-4614-B617-65B55A85CAE0}.Release|x64.Build.0 = Release|Any CPU
		{78731E48-C6CA-4614-B617-65B55A85CAE0}.Release|x86.ActiveCfg = Release|Any CPU
		{78731E48-C6CA-4614-B617-65B55A85CAE0}.Release|x86.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(NestedProjects) = preSolution
		{40663D90-0B3E-48A7-800E-CB5E1BED27B6} = {D4E0F6CD-9F21-4140-AC42-CD021D98B980}
		{4EFCF709-5899-4C49-A368-E556AFA3931F} = {D4E0F6CD-9F21-4140-AC42-CD021D98B980}
		{BBAF31CA-9D4F-4786-81B8-7FD56633C7B7} = {D4E0F6CD-9F21-4140-AC42-CD021D98B980}
		{756A8A86-A7EE-475D-B2E4-E98D79049F6B} = {D4E0F6CD-9F21-4140-AC42-CD021D98B980}
		{83F1DAD2-9E07-4D0B-B548-DEB03105F874} = {975CF226-2297-4B1B-88C6-5783C5359D18}
		{93487BBB-589C-4315-9E52-1279C9434B3C} = {975CF226-2297-4B1B-88C6-5783C5359D18}
		{77D6E5F6-9A08-436D-8A9D-7F5832322FAE} = {975CF226-2297-4B1B-88C6-5783C5359D18}
		{AEDAAE2C-D615-4241-8006-240BB7FF1446} = {975CF226-2297-4B1B-88C6-5783C5359D18}
		{8DD33CE5-B9B4-4CCA-B3D7-55DA387AB4AA} = {975CF226-2297-4B1B-88C6-5783C5359D18}
		{B22C7ABE-2B56-42AF-8CF2-46058A5B6543} = {EFA0F8A7-CBF2-4542-82A9-931BB0111FED}
		{A4B32710-06C8-4222-BC2B-2341EF514D9C} = {EFA0F8A7-CBF2-4542-82A9-931BB0111FED}
		{DCD71941-444F-4A8B-B2CF-AF1C95BAB824} = {EFA0F8A7-CBF2-4542-82A9-931BB0111FED}
		{07506CBB-A1CE-4FFA-B2C7-AC34FD9E5676} = {EFA0F8A7-CBF2-4542-82A9-931BB0111FED}
		{DCE80DB0-6530-4599-9433-5601F55E4270} = {EFA0F8A7-CBF2-4542-82A9-931BB0111FED}
		{5C60F99A-1BA8-4A82-9973-7150D4BE57A3} = {EFA0F8A7-CBF2-4542-82A9-931BB0111FED}
		{3F7C2822-BF7B-4BC9-8AA3-3ED2E2F0351C} = {975CF226-2297-4B1B-88C6-5783C5359D18}
		{4A4D1876-74CC-46B7-BB93-B3E0E4D25AE5} = {D4E0F6CD-9F21-4140-AC42-CD021D98B980}
		{4E68313F-69F8-4125-B87E-665D6F7DFD5D} = {EFA0F8A7-CBF2-4542-82A9-931BB0111FED}
		{78731E48-C6CA-4614-B617-65B55A85CAE0} = {07C2787E-EAC7-C090-1BA3-A61EC2A24D84}
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {4B673C11-52EF-455B-BFC6-8CFEBC340972}
	EndGlobalSection
EndGlobal


================================================
FILE: NosCore.sln.DotSettings
================================================
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
	<s:String x:Key="/Default/CodeStyle/CodeCleanup/Profiles/=Update_0020file_0020header/@EntryIndexedValue">&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;Profile name="Update file header"&gt;&lt;CSCodeStyleAttributes ArrangeTypeAccessModifier="False" ArrangeTypeMemberAccessModifier="False" SortModifiers="False" RemoveRedundantParentheses="False" AddMissingParentheses="False" ArrangeBraces="False" ArrangeAttributes="False" ArrangeArgumentsStyle="False" ArrangeCodeBodyStyle="False" ArrangeVarStyle="False" /&gt;&lt;CSOptimizeUsings&gt;&lt;OptimizeUsings&gt;False&lt;/OptimizeUsings&gt;&lt;EmbraceInRegion&gt;False&lt;/EmbraceInRegion&gt;&lt;RegionName&gt;&lt;/RegionName&gt;&lt;/CSOptimizeUsings&gt;&lt;CSUpdateFileHeader&gt;True&lt;/CSUpdateFileHeader&gt;&lt;XAMLCollapseEmptyTags&gt;False&lt;/XAMLCollapseEmptyTags&gt;&lt;/Profile&gt;</s:String>
	<s:String x:Key="/Default/CodeStyle/FileHeader/FileHeaderText/@EntryValue"> __  _  __    __   ___ __  ___ ___&#xD;
|  \| |/__\ /' _/ / _//__\| _ \ __|&#xD;
| | ' | \/ |`._`.| \_| \/ | v / _|&#xD;
|_|\__|\__/ |___/ \__/\__/|_|_\___|&#xD;
&#xD;
Copyright (C) 2019 - NosCore&#xD;
&#xD;
NosCore is a free software: you can redistribute it and/or modify&#xD;
it under the terms of the GNU General Public License as published by&#xD;
the Free Software Foundation, either version 3 of the License, or any later version.&#xD;
&#xD;
This program is distributed in the hope that it will be useful,&#xD;
but WITHOUT ANY WARRANTY; without even the implied warranty of&#xD;
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&#xD;
GNU General Public License for more details.&#xD;
&#xD;
You should have received a copy of the GNU General Public License&#xD;
along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.&#xD;
</s:String>
	<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=Antivirus/@EntryIndexedValue">LIVE_MONITOR</s:String>
	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EFeature_002EServices_002ECodeCleanup_002EFileHeader_002EFileHeaderSettingsMigrate/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

================================================
FILE: NosCore.sln.startup.json
================================================
/*
    This is a configuration file for the SwitchStartupProject Visual Studio Extension
    See https://bitbucket.org/thirteen/switchstartupproject/src/tip/Configuration.md
*/
{
  /*  Configuration File Version  */
  "Version": 3,

  /*  Create an item in the dropdown list for each project in the solution?  */
  "ListAllProjects": false,

  "MultiProjectConfigurations": {
    "Login + Master": {
      "Projects": {
        "NosCore.LoginServer": {},
        "NosCore.MasterServer": {}
      }
    },
    "World + Login + Master": {
      "Projects": {
        "NosCore.WorldServer": {},
        "NosCore.LoginServer": {},
        "NosCore.MasterServer": {}
      }
    },
    "World + Login + Master + WebApi": {
      "Projects": {
        "NosCore.WorldServer": {},
        "NosCore.LoginServer": {},
        "NosCore.MasterServer": {},
        "NosCore.WebApi": {}
      }
    },
    "All": {
      "Projects": {
        "NosCore.WorldServer": {},
        "NosCore.LoginServer": {},
        "NosCore.MasterServer": {},
        "NosCore.Parser": {},
        "NosCore.WebApi": {}
      }
    },
    "LoginServer": {
      "Projects": {
        "NosCore.LoginServer": {}
      }
    },
    "MasterServer": {
      "Projects": {
        "NosCore.MasterServer": {}
      }
    },
    "WorldServer": {
      "Projects": {
        "NosCore.WorldServer": {}
      }
    },
    "Parser": {
      "Projects": {
        "NosCore.Parser": {}
      }
    },
    "WebApi": {
      "Projects": {
        "NosCore.WebApi": {}
      }
    }
  }
}

================================================
FILE: NuGet.config
================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <packageSources>
        <clear />
        <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    </packageSources>
</configuration>


================================================
FILE: README.md
================================================
<p align="center">
  <img src="https://github.com/NosCoreIO/NosCore.Packets/blob/15.0.1/icon.png"/>
</p>

# NosCore #
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/643fd3df0ce742ec9b2ac3dab95bdc44)](https://www.codacy.com/gh/NosCoreIO/NosCore/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=NosCoreIO/NosCore&amp;utm_campaign=Badge_Grade)
[![.NET](https://github.com/NosCoreIO/NosCore/actions/workflows/dotnet.yml/badge.svg?branch=master)](https://github.com/NosCoreIO/NosCore/actions/workflows/dotnet.yml)

# Special Thanks for Contributions #
<p align="left">
<a href="https://www.navicat.com"><img height="100px" src="https://user-images.githubusercontent.com/35202750/207230064-dcf23adc-9e96-4481-9a53-cd212f5bd60e.png"/></a>
</p>

## You want to contribute ? ##
[![Discord](https://i.gyazo.com/2115a3ecb258220f5b1a8ebd8c50eb8f.png)](https://discord.gg/Eu3ETSw)

## You like our work ? ##
<a href='https://github.com/sponsors/0Lucifer0' target='_blank'><img height='48' style='border:0px;height:46px;' src='https://i.gyazo.com/47b2ca2eb6e1ce38d02b04c410e1c82a.png' border='0' alt='Sponsor me!' /></a>
[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/A3562BQV) 
<a href='https://www.patreon.com/bePatron?u=6503887' target='_blank'><img height='46' style='border:0px;height:46px;' src='https://c5.patreon.com/external/logo/become_a_patron_button@2x.png' border='0' alt='Become a Patron!' /></a>

## Warning! ##
We are not responsible of any damages caused by bad usage of our source. Please before asking questions or installing this source read this readme and also do a research, google is your friend. If you mess up when installing our source because you didnt follow it, we will laugh at you. A lot.

## Instructions to contribute ##

### Disclaimer ###
This project is a community project not for commercial use. The emulator itself is proof of concept of our idea to try out anything what's not possible on original servers. The result is to learn and program together for prove the study.

### Legal ###
This Website and Project is in no way affiliated with, authorized, maintained, sponsored or endorsed by Gameforge or any of its affiliates or subsidiaries. This is an independent and unofficial server for educational use ONLY. Using the Project might be against the TOS.

### Contribution is only possible with Visual Studio 2026 ###
We recommend usage of : 
* [Roslynator extension](https://github.com/JosefPihrt/Roslynator).
* [Resharper](https://www.jetbrains.com/resharper/)
* [SwitchStartupProject extension](https://marketplace.visualstudio.com/items?itemName=vs-publisher-141975.SwitchStartupProjectForVS2022)


# Building the code #

## 1. Install .Net 10 ##
- https://dotnet.microsoft.com/download/dotnet/10.0
- Visual Studio > Tools > Options > Preview Features > Use previews of the .NET CORE SDK
- Restart

## 2. Install or Configure PostgreSQL ##
- PostgreSQL: https://www.postgresql.org/
- Use update-database
- Parse all

## 3. Use the NuGet Package Manager to Update the Database ##
- Go to Tools -> NuGet Package Manager -> Package Manager Console
- Choose Project NosCore.Database
- Type 'update-database' and update the Database

## 4. Start services ##
- script to start services are in .\scripts 

## 5. (Optional) Local NuGet packages ##
Every NosCore repo ships a `Directory.Build.props` that adds a NuGet source when the `NOSCORE_LOCAL_PACKAGES` environment variable is set — useful for testing an un-released `NosCore.Packets` / `NosCore.Dao` / `NosCore.Shared` build without publishing it.

One-time setup (run once per machine):
```
setx NOSCORE_LOCAL_PACKAGES C:\LocalPackages
mkdir C:\LocalPackages
```
Restart Visual Studio / your shell so the new variable is picked up.

Drop any `.nupkg` file into that folder, then restore as usual. If the variable is unset the property group is skipped and only nuget.org is used — no action needed for contributors who don't want local packages.



================================================
FILE: build/.gitkeep
================================================


================================================
FILE: build-exe.cmd
================================================
dotnet build -r win-x64 || exit /b 1
dotnet build -r linux-x64 || exit /b 1
dotnet build -r linux-musl-x64 || exit /b 1
mkdir .\build\Configuration || exit /b 1
cd Configuration || exit /b 1
copy *.* ..\build\Configuration\ || exit /b 1


================================================
FILE: build.cmd
================================================
dotnet build

================================================
FILE: codecov.yml
================================================
coverage:
  range: 35..100 #upgrade when code coverage is up
  round: down
  precision: 2
ignore:
  - "src/NosCore.WorldServer/*"
  - "src/NosCore.MasterServer/*"
  - "src/NosCore.LoginServer/*"
  - "src/NosCore.WebApi/*"
  - "src/NosCore.Database/**/*"
  - "src/NosCore.Data/**/*"
  - "test/**/*"

================================================
FILE: configuration/api.yml
================================================
MasterCommunication:
  Password: NosCorePassword
  Host: ${MASTER_HOST,http://localhost}
  Port: 5000
Host: ${HOST,127.0.0.1}
Port: ${API_PORT,8080}
Language: en
Database:
  Host: ${DB_HOST,localhost}
  Port: 5432
  Database: noscore
  Username: postgres
  Password: password


================================================
FILE: configuration/database.yml
================================================
Host: localhost
Port: 5432
Database: noscore
Username: postgres
Password: password


================================================
FILE: configuration/logger.yml
================================================
Serilog:
  MinimumLevel:
    Default: Debug
    Override:
      Microsoft: Warning
  WriteTo:
  - Name: Console
    Args:
      outputTemplate: "{Level:u4} {Timestamp:HH:mm:ss} -- {Message:lj}{NewLine}{Exception}"
      theme: Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Literate, Serilog.Sinks.Console


================================================
FILE: configuration/login.yml
================================================
MasterCommunication:
  Password: NosCorePassword
  Host: ${MASTER_HOST,http://localhost}
  Port: 5000
Host: ${HOST,127.0.0.1}
Port: ${LOGIN_PORT,4000}
Language: en
Database:
  Host: ${DB_HOST,localhost}
  Port: 5432
  Database: noscore
  Username: postgres
  Password: password


================================================
FILE: configuration/master.yml
================================================
WebApi:
  Host: ${WEBAPI_HOST,http://localhost}
  Port: 5000
  Password: NosCorePassword
Language: en
Database:
  Host: ${DB_HOST,localhost}
  Port: 5432
  Database: noscore
  Username: postgres
  Password: password

================================================
FILE: configuration/parser.yml
================================================
Language: en
Database:
  Host: 127.0.0.1
  Port: 5432
  Database: noscore
  Username: postgres
  Password: password


================================================
FILE: configuration/world.yml
================================================
MasterCommunication:
  Password: NosCorePassword
  Host: ${MASTER_HOST,http://localhost}
  Port: 5000
ServerName: S1-NosCore
Host: ${HOST,127.0.0.1}
Port: ${WORLD_PORT,1337}
DisplayHost: 127.0.0.1
DisplayPort: 1337
ConnectedAccountLimit: 100
SceneOnCreate: false
StartInMaintenance: false
#0-3 English / International
#4-7 German
#8-11 French
#12-15 Italian
#16-19 Polish
#20-23 Spanish
ServerId: 0
WorldInformation: true
WebApi:
  Host: ${WEBAPI_HOST,http://localhost}
  Port: 5001
  Password: NosCorePassword
Language: en
Database:
  Host: ${DB_HOST,localhost}
  Port: 5432
  Database: noscore
  Username: postgres
  Password: password
BackpackSize: 48
MaxItemAmount: 999
MaxGoldAmount: 1000000000
MaxBankGoldAmount: 100000000000
MaxSpPoints: 10000
MaxAdditionalSpPoints: 1000000
AllClassAvailableOnCreate: false
# BasicEquipments / BasicSkills are keyed first by class name, then by starter origin:
#   CreateAndUpgrade : Adventurer creation (lvl 1) and Adventurer -> specialist upgrade
#   Create56         : specialist direct-create on normal server
#   Create80         : any class direct-create when AllClassAvailableOnCreate=true
BasicEquipments:
  Adventurer:
    CreateAndUpgrade:
    - VNum: 1
      Amount: 1
      NoscorePocketType: 8
    - VNum: 8
      Amount: 1
      NoscorePocketType: 8
    - VNum: 12
      Amount: 1
      NoscorePocketType: 8
    - VNum: 2024
      Amount: 10
      NoscorePocketType: 2
    - VNum: 2081
      Amount: 1
      NoscorePocketType: 2
  Swordsman:
    CreateAndUpgrade: []
    Create56:
    - VNum: 901
      Amount: 1
      NoscorePocketType: 0
      Upgrade: 5
    - VNum: 902
      Amount: 1
      NoscorePocketType: 0
      Upgrade: 5
    - VNum: 884
      Amount: 1
      NoscorePocketType: 0
    - VNum: 885
      Amount: 1
      NoscorePocketType: 0
    - VNum: 886
      Amount: 1
      NoscorePocketType: 0
    - VNum: 887
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4833
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4834
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4870
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4989
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4995
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4996
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4997
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4998
      Amount: 1
      NoscorePocketType: 0
    - VNum: 2082
      Amount: 100
      NoscorePocketType: 2
    Create80: []
  Archer:
    CreateAndUpgrade: []
    Create56:
    - VNum: 903
      Amount: 1
      NoscorePocketType: 0
      Upgrade: 5
    - VNum: 904
      Amount: 1
      NoscorePocketType: 0
      Upgrade: 5
    - VNum: 884
      Amount: 1
      NoscorePocketType: 0
    - VNum: 885
      Amount: 1
      NoscorePocketType: 0
    - VNum: 886
      Amount: 1
      NoscorePocketType: 0
    - VNum: 887
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4833
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4834
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4870
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4989
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4995
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4996
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4997
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4998
      Amount: 1
      NoscorePocketType: 0
    - VNum: 2083
      Amount: 100
      NoscorePocketType: 2
    Create80: []
  Mage:
    CreateAndUpgrade: []
    Create56:
    - VNum: 905
      Amount: 1
      NoscorePocketType: 0
      Upgrade: 5
    - VNum: 906
      Amount: 1
      NoscorePocketType: 0
      Upgrade: 5
    - VNum: 884
      Amount: 1
      NoscorePocketType: 0
    - VNum: 885
      Amount: 1
      NoscorePocketType: 0
    - VNum: 886
      Amount: 1
      NoscorePocketType: 0
    - VNum: 887
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4833
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4834
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4870
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4989
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4995
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4996
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4997
      Amount: 1
      NoscorePocketType: 0
    - VNum: 4998
      Amount: 1
      NoscorePocketType: 0
    Create80: []
  MartialArtist:
    Create80: []
BasicSkills:
  # 200 / 201 / 209 (Adventurer primary / secondary / Pet Catcher) are seeded
  # unconditionally for every new character in CharNewPacketHandler — matches
  # vanosilla's hard-coded BaseSkill list — and must not live here, otherwise
  # a JSON misedit could create characters without the capture slot working.
  Adventurer:
    CreateAndUpgrade: []
  Swordsman:
    CreateAndUpgrade: []
    Create56:
    - 220
    - 221
    - 222
    - 223
    - 224
    - 225
    - 226
    - 227
    - 228
    - 229
    - 230
    - 231
    - 232
    - 233
    - 234
    - 235
    - 22
    - 25
    - 29
    - 38
    - 41
    - 46
    - 50
    - 53
    - 57
    Create80: []
  Archer:
    CreateAndUpgrade: []
    Create56:
    - 240
    - 241
    - 242
    - 243
    - 244
    - 245
    - 246
    - 247
    - 248
    - 249
    - 250
    - 251
    - 252
    - 253
    - 254
    - 255
    - 256
    - 236
    - 21
    - 26
    - 29
    - 37
    - 41
    - 46
    - 50
    - 53
    - 57
    - 60
    Create80: []
  Mage:
    CreateAndUpgrade: []
    Create56:
    - 260
    - 261
    - 262
    - 263
    - 264
    - 265
    - 266
    - 267
    - 268
    - 269
    - 270
    - 271
    - 272
    - 273
    - 274
    - 275
    - 276
    - 277
    - 237
    - 30
    - 37
    - 42
    - 46
    - 50
    - 53
    - 58
    Create80: []
  MartialArtist:
    Create80: []


================================================
FILE: deploy/Dockerfile-login
================================================
# cf https://github.com/dotnet/dotnet-docker/blob/main/src/aspnet/10.0/alpine3.21/amd64/Dockerfile

ARG REPO=mcr.microsoft.com/dotnet/runtime
FROM $REPO:10.0.1-alpine3.21-amd64

# .NET globalization APIs will use invariant mode by default because DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=true is set
# by the base runtime-deps image. See https://aka.ms/dotnet-globalization-alpine-containers for more information.

# ASP.NET Core version
ENV ASPNET_VERSION=10.0.1
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false

# Install ASP.NET Core
RUN wget -O aspnetcore.tar.gz https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/$ASPNET_VERSION/aspnetcore-runtime-$ASPNET_VERSION-linux-musl-x64.tar.gz \
    && aspnetcore_sha512='ef84b8bcfb323a11acc57e54068e1ff7daa400bd5c8aeb89c65fb13fb2ad9e302986647495561a0c4fda5eb4c0836a67e5e7e591d58661f20cd6ddff97d6d4c9' \
    && echo "$aspnetcore_sha512  aspnetcore.tar.gz" | sha512sum -c - \
    && tar -oxzf aspnetcore.tar.gz -C /usr/share/dotnet ./shared/Microsoft.AspNetCore.App \
    && rm aspnetcore.tar.gz

# Update package list and install libicu (ICU libraries) for Alpine
RUN apk update \
    && apk add --no-cache icu-libs

COPY ./build/net10.0 /app/build/net10.0
COPY ./configuration /app/configuration

WORKDIR /app/build/net10.0

EXPOSE 4002

ENTRYPOINT ["dotnet", "NosCore.LoginServer.dll"]


================================================
FILE: deploy/Dockerfile-master
================================================
# cf https://github.com/dotnet/dotnet-docker/blob/main/src/aspnet/10.0/alpine3.21/amd64/Dockerfile

ARG REPO=mcr.microsoft.com/dotnet/runtime
FROM $REPO:10.0.1-alpine3.21-amd64

# .NET globalization APIs will use invariant mode by default because DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=true is set
# by the base runtime-deps image. See https://aka.ms/dotnet-globalization-alpine-containers for more information.

# ASP.NET Core version
ENV ASPNET_VERSION=10.0.1
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false

# Install ASP.NET Core
RUN wget -O aspnetcore.tar.gz https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/$ASPNET_VERSION/aspnetcore-runtime-$ASPNET_VERSION-linux-musl-x64.tar.gz \
    && aspnetcore_sha512='ef84b8bcfb323a11acc57e54068e1ff7daa400bd5c8aeb89c65fb13fb2ad9e302986647495561a0c4fda5eb4c0836a67e5e7e591d58661f20cd6ddff97d6d4c9' \
    && echo "$aspnetcore_sha512  aspnetcore.tar.gz" | sha512sum -c - \
    && tar -oxzf aspnetcore.tar.gz -C /usr/share/dotnet ./shared/Microsoft.AspNetCore.App \
    && rm aspnetcore.tar.gz

# Update package list and install libicu (ICU libraries) for Alpine
RUN apk update \
    && apk add --no-cache icu-libs

COPY ./build/net10.0 /app/build/net10.0
COPY ./configuration /app/configuration

WORKDIR /app/build/net10.0

EXPOSE 5000 6969

ENTRYPOINT ["dotnet", "NosCore.MasterServer.dll"]


================================================
FILE: deploy/Dockerfile-world
================================================
# cf https://github.com/dotnet/dotnet-docker/blob/main/src/aspnet/10.0/alpine3.21/amd64/Dockerfile

ARG REPO=mcr.microsoft.com/dotnet/runtime
FROM $REPO:10.0.1-alpine3.21-amd64

# .NET globalization APIs will use invariant mode by default because DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=true is set
# by the base runtime-deps image. See https://aka.ms/dotnet-globalization-alpine-containers for more information.

# ASP.NET Core version
ENV ASPNET_VERSION=10.0.1
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false

# Install ASP.NET Core
RUN wget -O aspnetcore.tar.gz https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/$ASPNET_VERSION/aspnetcore-runtime-$ASPNET_VERSION-linux-musl-x64.tar.gz \
    && aspnetcore_sha512='ef84b8bcfb323a11acc57e54068e1ff7daa400bd5c8aeb89c65fb13fb2ad9e302986647495561a0c4fda5eb4c0836a67e5e7e591d58661f20cd6ddff97d6d4c9' \
    && echo "$aspnetcore_sha512  aspnetcore.tar.gz" | sha512sum -c - \
    && tar -oxzf aspnetcore.tar.gz -C /usr/share/dotnet ./shared/Microsoft.AspNetCore.App \
    && rm aspnetcore.tar.gz

# Update package list and install libicu (ICU libraries) for Alpine
RUN apk update \
    && apk add --no-cache icu-libs

COPY ./build/net10.0 /app/build/net10.0
COPY ./configuration /app/configuration

WORKDIR /app/build/net10.0

EXPOSE 1337 5001

# RUN dotnet help

ENTRYPOINT ["dotnet", "NosCore.WorldServer.dll"]


================================================
FILE: docker-compose.yml
================================================
services:
  db:
    container_name: noscore-db
    image: postgres:17.2-alpine3.21
    restart: unless-stopped
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=noscore
    ports:
      - 5432:5432
    # PG17 cannot read a PG12 data directory. A dedicated path forces a clean
    # init on upgrade — existing developers just rename ./postgres out of the
    # way (or dump+restore) and let PG17 initialise ./postgres17 from scratch.
    volumes:
      - ./postgres17:/var/lib/postgresql/data
    networks:
      - noscore-network

  reverse-proxy:
    container_name: noscore-reverse-proxy
    image: noscoreio/noscore.reverseproxy:latest
    restart: unless-stopped
    ports:
      - 4000:4000
      - 1337:1337
    expose:
      - 4000
      - 1337
    networks:
      - noscore-network

  master:
    container_name: noscore-master
    environment:
      - PORT=5000
      - DB_HOST=db
      - WEBAPI_HOST=http://master
    build:
      context: ./
      dockerfile: deploy/Dockerfile-master
    restart: unless-stopped
    ports:
      - 5000:5000
    expose:
      - 5432
    networks:
      - noscore-network
    volumes:
      - ./build/net10.0/linux-musl-x64:/app/build/net10.0
      - ./configuration/:/app/build/configuration

  world:
    container_name: noscore-world
    environment:
      - WEBAPI_PORT=5001
      - WEBAPI_HOST=http://world
      - WORLD_PORT=1337
      - MASTER_HOST=http://master
      - DB_HOST=db
      - HOST=127.0.0.1
    build:
      context: ./
      dockerfile: deploy/Dockerfile-world
    restart: unless-stopped
    ports:
      - 5001:5001
      - 1337:1337
    expose:
      - 5432
    networks:
      - noscore-network
    volumes:
      - ./build/net10.0/linux-musl-x64:/app/build/net10.0
      - ./configuration/:/app/build/configuration

  login:
    container_name: noscore-login
    environment:
      - LOGIN_PORT=4000
      - MASTER_HOST=http://master
      - DB_HOST=db
      - HOST=127.0.0.1
    build:
      context: ./
      dockerfile: deploy/Dockerfile-login
    restart: unless-stopped
    ports:
      - 4000:4000
    expose:
      - 5432
    networks:
      - noscore-network
    volumes:
      - ./build/net10.0/linux-musl-x64:/app/build/net10.0
      - ./configuration/:/app/build/configuration

networks:
  noscore-network:
    driver: bridge


================================================
FILE: documentation/PostmanCollection/NosCore.postman_collection.json
================================================
{
	"info": {
		"_postman_id": "2a1742ee-c773-4210-90b1-2f6f07ceec39",
		"name": "NosCore",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"item": [
		{
			"name": "Get Bearer Token",
			"event": [
				{
					"listen": "test",
					"script": {
						"id": "55bf7691-9fc9-4eba-8271-f2b32d83ae2a",
						"type": "text/javascript",
						"exec": [
							"postman.setEnvironmentVariable(\"Token\", responseBody);"
						]
					}
				}
			],
			"request": {
				"auth": {
					"type": "noauth"
				},
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\r\n\t\"ServerToken\": \"NosCorePassword\"\r\n}"
				},
				"url": {
					"raw": "http://localhost:5000/api/token/connectServer",
					"protocol": "http",
					"host": [
						"localhost"
					],
					"port": "5000",
					"path": [
						"api",
						"token",
						"connectServer"
					]
				},
				"description": "Post on NosCore API"
			},
			"response": []
		},
		{
			"name": "Get Channel List",
			"request": {
				"auth": {
					"type": "bearer",
					"bearer": [
						{
							"key": "token",
							"value": "{{Token}}",
							"type": "string"
						}
					]
				},
				"method": "GET",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": ""
				},
				"url": {
					"raw": "http://localhost:5000/api/channels",
					"protocol": "http",
					"host": [
						"localhost"
					],
					"port": "5000",
					"path": [
						"api",
						"channels"
					]
				},
				"description": "Post on NosCore API"
			},
			"response": []
		},
		{
			"name": "Post Packet",
			"request": {
				"auth": {
					"type": "bearer",
					"bearer": [
						{
							"key": "token",
							"value": "{{Token}}",
							"type": "string"
						}
					]
				},
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{  \r\n   \"Packet\":\"finfo 6 1\",\r\n   \"ReceiverType\": 4,\r\n   \"SenderCharacter\":{\"Name\":\"test\",\"Id\":6},\r\n   \"ReceiverCharacter\":{\"Name\":\"Elendan\",\"Id\":5},\r\n   \"OriginWorldId\":0\r\n}"
				},
				"url": {
					"raw": "http://localhost:5001/api/packet",
					"protocol": "http",
					"host": [
						"localhost"
					],
					"port": "5001",
					"path": [
						"api",
						"packet"
					]
				},
				"description": "Post on NosCore API"
			},
			"response": []
		}
	]
}

================================================
FILE: documentation/dat/Card.dat.md
================================================
# Card.dat

```text
	EFFECT	{EffectId}
	GROUP	0	{Level}
	LAST	{TimeoutBuff}	{TimeoutBuffChance}
	NAME	{NameI18NKey}
	STYLE	0	{BuffType}
	TIME	{Duration}	{Delay}
	VNUM	{CardId}
```

## EFFECT

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | EffectId | Int32 | Visual effect id |

## GROUP

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Unknown |  |  |  |
| 3 | Parsed | Level | Byte | Card level tier |

## LAST

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | TimeoutBuff | Int16 | Follow-up buff id when card expires |
| 3 | Parsed | TimeoutBuffChance | Byte | % chance the follow-up buff fires |

## NAME

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | NameI18NKey | String | Localization key (zts##e) |

## STYLE

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Unknown |  |  |  |
| 3 | Parsed | BuffType | CardType | Buff type from STYLE column 3 |

## TIME

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | Duration | Int32 | Duration in deciseconds |
| 3 | Parsed | Delay | Int32 | Activation delay |

## VNUM

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | CardId | Int16 | Card vnum |

## Computed / multi-section fields

| DTO property | Type | Source | Description |
|---|---|---|---|
| BCards | ICollection`1 | 1ST + 2ST (5 groups of 6) | Up to 5 BCards, first 3 from 1ST then 2 from 2ST |



================================================
FILE: documentation/dat/Item.dat.md
================================================
# Item.dat

```text
	FLAG	0	0	0	{IsSoldable}	{IsDroppable}	{IsTradable}	{IsMinilandActionable}	{IsWarehouse}	{Flag9}	{Flag1}	{Flag2}	{Flag3}	{Flag4}	{RequireBinding}	{IsColored}	{FemaleOnly}	{MaleOnly}	0	{Flag6}	0	{IsHeroic}	{Flag7}	{Flag8}	{RaidItem}	{UnknownLastBit}
	INDEX	0	0	{ItemSubType}
	NAME	{NameI18NKey}
	VNUM	{VNum}	{Price}
```

## FLAG

25 boolean bits. FLAG[25] identifies raid-inventory items (seals, boxes, chests, drops).

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Unknown |  |  |  |
| 3 | Unknown |  |  |  |
| 4 | Unknown |  |  |  |
| 5 | Parsed | IsSoldable | Boolean | Inverted: dat=0 -> soldable |
| 6 | Parsed | IsDroppable | Boolean | Inverted: dat=0 -> droppable |
| 7 | Parsed | IsTradable | Boolean | Inverted: dat=0 -> tradable |
| 8 | Parsed | IsMinilandActionable | Boolean | Miniland-actionable object |
| 9 | Parsed | IsWarehouse | Boolean | Can be stored in the account warehouse |
| 10 | Parsed | Flag9 | Boolean | FLAG bit 9 (appears on beads, medals, raid seals) |
| 11 | Parsed | Flag1 | Boolean | FLAG bit 10 (unknown) |
| 12 | Parsed | Flag2 | Boolean | FLAG bit 11 (set on mounts + raid items + partner equipment) |
| 13 | Parsed | Flag3 | Boolean | FLAG bit 12 (unknown) |
| 14 | Parsed | Flag4 | Boolean | FLAG bit 13 (unknown) |
| 15 | Parsed | RequireBinding | Boolean | Binds to character on use/equip |
| 16 | Parsed | IsColored | Boolean | Uses design slot for color |
| 17 | NonParsed | FemaleOnly |  | Set together with FLAG[18]=0 to mark a female-only item; rolled up into Sex. |
| 18 | NonParsed | MaleOnly |  | Set together with FLAG[17]=0 to mark a male-only item; rolled up into Sex. |
| 19 | Unknown |  |  |  |
| 20 | Parsed | Flag6 | Boolean | FLAG bit 19 (unknown) |
| 21 | Unknown |  |  |  |
| 22 | Parsed | IsHeroic | Boolean | Heroic item |
| 23 | Parsed | Flag7 | Boolean | FLAG bit 22 (unknown) |
| 24 | Parsed | Flag8 | Boolean | FLAG bit 23 (unknown) |
| 25 | NonParsed | RaidItem |  | Set on raid seals, raid boxes, chests and drops — routed to the Raid pocket. |
| 26 | NonParsed | UnknownLastBit |  |  |

## INDEX

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Unknown |  |  |  |
| 3 | Unknown |  |  |  |
| 4 | Parsed | ItemSubType | Byte | Subtype within item category |

## NAME

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | NameI18NKey | String | Localization key (zts##e) |

## VNUM

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | VNum | Int16 | Item vnum |
| 3 | Parsed | Price | Int64 | NPC shop sell price |

## Computed / multi-section fields

| DTO property | Type | Source | Description |
|---|---|---|---|
| BasicUpgrade | Byte | DATA[varies] | Base upgrade level |
| BCards | ICollection`1 | BUFF[0..24] | Up to 5 BCard groups (5 fields each) |
| Class | Byte | TYPE[1] (fairy override: 15) | Class restriction bitmask |
| CloseDefence | Int16 | DATA[varies] | Melee defence |
| CriticalLuckRate | Byte | DATA[varies] | Critical luck multiplier |
| CriticalRate | Int16 | DATA[varies] | Critical hit chance |
| DamageMaximum | Int16 | DATA[varies] | Max weapon damage |
| DamageMinimum | Int16 | DATA[varies] | Min weapon damage |
| DarkResistance | Int16 | DATA[11] or DATA[18] | Dark resistance; SP uses DATA[18] |
| DefenceDodge | Int16 | DATA[varies] | Dodge chance |
| DistanceDefence | Int16 | DATA[varies] | Ranged defence |
| DistanceDefenceDodge | Int16 | DATA[varies] | Ranged dodge chance |
| Effect | ItemEffectType | DATA[varies] per ItemType | ItemEffectType enum |
| EffectValue | Int32 | DATA[varies] per ItemType | Effect numeric argument |
| Element | ElementType | DATA[varies] | Primary elemental alignment |
| ElementRate | Int16 | DATA[varies] | Element rate % |
| EquipmentSlot | EquipmentType | INDEX[3] | Equipment slot |
| FireResistance | Int16 | DATA[7] or DATA[15] | Fire resistance; SP uses DATA[15], others DATA[7] |
| Height | Byte | DATA[4] (miniland only) | Miniland object footprint height |
| HitRate | Int16 | DATA[varies] | Hit rate |
| Hp | Int16 | DATA[varies] | Hp bonus on equip |
| ItemType | ItemType | INDEX[0,1] | ItemType composite enum |
| ItemValidTime | Int64 | DATA[varies] | Expiration duration in seconds |
| LevelJobMinimum | Byte | DATA[varies] | Minimum job level to use/equip |
| LevelMinimum | Byte | DATA[varies] | Minimum level to equip/use, per-ItemType |
| LightResistance | Int16 | DATA[9] or DATA[17] | Light resistance; SP uses DATA[17] |
| MagicDefence | Int16 | DATA[varies] | Magic defence |
| MaxCellon | Byte | DATA[varies] | Max cellons slotted |
| MaxCellonLvl | Byte | DATA[varies] | Max cellon level |
| MaximumAmmo | Byte | DATA[varies] | Max ammo |
| MinilandObjectPoint | Int32 | DATA[2] (miniland only) | Miniland point value |
| Morph | Int16 | INDEX[3] + INDEX[5] | Morph id (partner skin) or effect value |
| Mp | Int16 | DATA[varies] | Mp bonus on equip |
| ReputationMinimum | Byte | DATA[varies] | Minimum reputation tier |
| ReputPrice | Int64 | FLAG[20] + VNUM[1] | Reputation price when FLAG[20] is set |
| Sex | Byte | FLAG[16] + FLAG[17] | Gender restriction: 1=female, 2=male, 0=any |
| Speed | Byte | DATA[varies] | Movement speed bonus / vehicle speed |
| SpType | Byte | DATA[varies] (SP only) | SP transformation type |
| Type | NoscorePocketType | FLAG[25] + DATA[0] + INDEX[0,1] | Pocket type: FLAG[25]==1 -> Raid, DATA[0]==1000 && INDEX[1]==4 -> Mount, else legacy INDEX[0] map |
| WaitDelay | Int16 | DATA[varies] | Cooldown / use delay |
| WaterResistance | Int16 | DATA[8] or DATA[16] | Water resistance; SP uses DATA[16] |
| Width | Byte | DATA[3] (miniland only) | Miniland object footprint width |



================================================
FILE: documentation/dat/Skill.dat.md
================================================
# Skill.dat

```text
```

## Computed / multi-section fields

| DTO property | Type | Source | Description |
|---|---|---|---|
| AttackAnimation | Int16 |  |  |
| BCards | ICollection`1 |  |  |
| CastAnimation | Int16 |  |  |
| CastEffect | Int16 |  |  |
| CastId | Int16 |  |  |
| CastTime | Int16 |  |  |
| Class | Byte |  |  |
| Combo | ICollection`1 |  |  |
| Cooldown | Int16 |  |  |
| CpCost | Byte |  |  |
| Effect | Int16 |  |  |
| Element | Byte |  |  |
| HitType | Byte |  |  |
| ItemVNum | Int16 |  |  |
| LevelMinimum | Byte |  |  |
| MinimumAdventurerLevel | Byte |  |  |
| MinimumArcherLevel | Byte |  |  |
| MinimumMagicianLevel | Byte |  |  |
| MinimumSwordmanLevel | Byte |  |  |
| MpCost | Int16 |  |  |
| NameI18NKey | String |  |  |
| Price | Int32 |  |  |
| Range | Byte |  |  |
| SkillType | Byte |  |  |
| SkillVNum | Int16 |  |  |
| TargetRange | Byte |  |  |
| TargetType | Byte |  |  |
| Type | Byte |  |  |
| UpgradeSkill | Int16 |  |  |
| UpgradeType | Int16 |  |  |



================================================
FILE: documentation/dat/monster.dat.md
================================================
# monster.dat

```text
	AINFO	{ainfoDefType}	{DefenceUpgrade}
	ARMOR	{CloseDefence}	{meleeDef}	{rangedDef}	{magicDef}	{dodge}
	ATTRIB	{Element}	{ElementRate}	{FireResistance}	{WaterResistance}	{LightResistance}	{DarkResistance}
	BASIC	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}
	CARD	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}	{BCards}
	EFF	{BasicSkill}	{EffectIdConstantly}	{EffectIdOnDeath}
	ETC	{CanWalk}	{unknown1}	{IsPercentileDmg}	{CanOnlyBeDmgedByJajamaruLastSkill}	{unknown2}	{VisibleOnMinimapAsGreenDot}	{unknown3}	{IsValhallaPartner}
	EXP	{HeroXp}	{JobXp}
	HP/MP	{MaxHp}	{MaxMp}
	ITEM	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}	{Drop}
	LEVEL	{Level}
	MODE	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	{AlwaysActive}	{Limiter}	{HpThreshold}	{RangeThreshold}	{CModeVNum}	{CellMinRange}	{Midgard}
	NAME	{NameI18NKey}
	PARTNER	{partnerUnused}
	PETINFO	{PetInfoVal1}	{PetInfoVal2}	{PetInfoVal3}	{PetInfoVal4}
	PREATT	{IsHostile}	{GroupAttack}	{NoticeRange}	{Speed}	{RespawnTime}
	RACE	{Race}	{RaceType}
	SETTING	{IconId}	{SpawnMobOrColor}	{VNumRequired}	{SpriteSize}	{CellSize}	{unknown0}
	SKILL	{NpcMonsterSkill}	{NpcMonsterSkill}	{NpcMonsterSkill}	{NpcMonsterSkill}	{NpcMonsterSkill}	{NpcMonsterSkill}	{NpcMonsterSkill}	{NpcMonsterSkill}	{NpcMonsterSkill}	{NpcMonsterSkill}	{NpcMonsterSkill}	{NpcMonsterSkill}	{NpcMonsterSkill}	{NpcMonsterSkill}	{NpcMonsterSkill}
	VNUM	{NpcMonsterVNum}
	WEAPON	{DamageMinimum}	{DamageMinimum}	{DamageMinimum}	{DamageMaximum}	{Concentrate}	{CriticalChance}	{CriticalRate}
	WINFO	{AttackUpgrade}	{unknown5}	{AttackUpgrade}
	ZSKILL	{AttackClass}	{BasicRange}	{BasicHitChance}	{BasicArea}	{BasicCooldown}	{DashSpeed}	{unknown4}
```

## AINFO

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | NonParsed | ainfoDefType |  | Defence-type override for ARMOR derivation. |
| 3 | Parsed | DefenceUpgrade | Byte | Armor upgrade level |

## ARMOR

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | CloseDefence | Int16 | (armorLvl-1)*2 + 18 |
| 2 | Parsed | DefenceDodge | Int16 | (armorLvl-1)*5 + 31 |
| 2 | Parsed | DistanceDefence | Int16 | (armorLvl-1)*3 + 17 |
| 2 | Parsed | DistanceDefenceDodge | Int16 | (armorLvl-1)*5 + 31 |
| 2 | Parsed | MagicDefence | Int16 | (armorLvl-1)*2 + 13 |
| 3 | NonParsed | meleeDef |  | Stored in .dat but we recompute from armorLvl. |
| 4 | NonParsed | rangedDef |  | Stored in .dat but we recompute from armorLvl. |
| 5 | NonParsed | magicDef |  | Stored in .dat but we recompute from armorLvl. |
| 6 | NonParsed | dodge |  | Stored in .dat but we recompute from armorLvl. |

## ATTRIB

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | Element | Byte | Primary elemental alignment |
| 3 | Parsed | ElementRate | Int16 | Element rate % |
| 4 | Parsed | FireResistance | Int16 | Fire resistance |
| 5 | Parsed | WaterResistance | Int16 | Water resistance |
| 6 | Parsed | LightResistance | Int16 | Light resistance |
| 7 | Parsed | DarkResistance | Int16 | Dark resistance |

## BASIC

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 3 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 4 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 5 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 6 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 7 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 8 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 9 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 10 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 11 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 12 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 13 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 14 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 15 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 16 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 17 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 18 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 19 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 20 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 21 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 22 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 23 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 24 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 25 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 26 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 27 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 28 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 29 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 30 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 31 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 32 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 33 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 34 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 35 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 36 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 37 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 38 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 39 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 40 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 41 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 42 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 43 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 44 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 45 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 46 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 47 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 48 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 49 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 50 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 51 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |

## CARD

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 3 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 4 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 5 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 6 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 7 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 8 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 9 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 10 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 11 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 12 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 13 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 14 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 15 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 16 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 17 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 18 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 19 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 20 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 21 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |

## EFF

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | BasicSkill | Int16 | Basic on-attack effect id |
| 3 | Parsed | EffectIdConstantly | Int16 | Constantly-running aura effect id |
| 4 | Parsed | EffectIdOnDeath | Int16 | Effect id played on death |

## ETC

32-bit flag word stored as a decimal integer. Each bit flips a named gameplay behaviour; only a subset is documented in NSgtd.

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | AmountRequired | Byte | Amount of the required item |
| 2 | Parsed | AttackUpgrade | Byte | Weapon upgrade level |
| 2 | Parsed | CanCatch | Boolean | ETC bit 3 -> catchable (mate) |
| 2 | Parsed | CanCollect | Boolean | ETC bit 1 -> harvestable |
| 2 | Parsed | CantDebuff | Boolean | ETC bit 2 -> immune to debuffs |
| 2 | Parsed | CantTargetInfo | Boolean | ETC bit 31 -> hidden from target-info UI |
| 2 | Parsed | CantVoke | Boolean | ETC bit 11 -> immune to voke |
| 2 | Parsed | CanWalk | Boolean | ETC bit 0 clear -> can walk |
| 2 | Parsed | DefenceUpgrade | Byte | Armor upgrade level |
| 2 | Parsed | DisappearAfterHitting | Boolean | ETC bit 5 -> despawns after a hit |
| 2 | Parsed | DisappearAfterSeconds | Boolean | ETC bit 4 -> despawns on a timer |
| 2 | Parsed | DisappearAfterSecondsMana | Boolean | ETC bit 7 -> despawns when mana empties |
| 2 | Parsed | DontDrainHpAfterSeconds | Boolean | ETC bit 28 -> skips HP drain over time |
| 2 | Parsed | HasDash | Boolean | ETC bit 9 -> has a dash skill |
| 2 | Parsed | HasMode | Boolean | ETC bit 6 -> uses a MODE |
| 2 | Parsed | MonsterType | MonsterType | Categorisation (Mate/Normal/Trap/Unknown) |
| 2 | Parsed | NoAggresiveIcon | Boolean | Talkable / trap entities: suppress the aggressive icon |
| 2 | Parsed | OnDefenseOnlyOnce | Boolean | ETC bit 8 -> defensive AI fires once |
| 2 | Parsed | RegenerateHpOverTime | Boolean | ETC bit 10 -> passive HP regen |
| 2 | Parsed | VNumRequired | Int16 | VNum of the item required to tame/interact |
| 3 | NonParsed | unknown1 |  |  |
| 4 | Parsed | IsPercentileDmg | Boolean | Damage output is expressed as % of target max HP (boss mechanic) |
| 5 | Parsed | CanOnlyBeDmgedByJajamaruLastSkill | Boolean | Only damageable by Jajamaru's final skill (Namaju) |
| 6 | NonParsed | unknown2 |  | Always 0. |
| 7 | Parsed | VisibleOnMinimapAsGreenDot | Boolean | Renders as a green dot on the minimap |
| 8 | NonParsed | unknown3 |  |  |
| 9 | Parsed | IsValhallaPartner | Boolean | Marks Valhalla raid partner mobs |

## EXP

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | HeroXp | Int32 | Hero-level XP award, scaled down from XP |
| 2 | Parsed | Xp | Int32 | Base XP award |
| 3 | Parsed | JobXp | Int32 | Base job XP award |

## HP/MP

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | MaxHp | Int32 | Override HP plus level-based baseline |
| 3 | Parsed | MaxMp | Int32 | Override MP plus level-based baseline, branch on Race |

## ITEM

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 3 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 4 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 5 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 6 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 7 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 8 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 9 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 10 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 11 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 12 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 13 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 14 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 15 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 16 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 17 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 18 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 19 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 20 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 21 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 22 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 23 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 24 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 25 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 26 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 27 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 28 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 29 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 30 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 31 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 32 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 33 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 34 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 35 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 36 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 37 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 38 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 39 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 40 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 41 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 42 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 43 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 44 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 45 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 46 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 47 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 48 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 49 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 50 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 51 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 52 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 53 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 54 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 55 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 56 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 57 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 58 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 59 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 60 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 61 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |

## LEVEL

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | DamageMaximum | Int16 | Max attack damage |
| 2 | Parsed | DamageMinimum | Int16 | Min attack damage |
| 2 | Parsed | HeroXp | Int32 | Hero-level XP award, scaled down from XP |
| 2 | Parsed | JobXp | Int32 | Base job XP award |
| 2 | Parsed | Level | Byte | Parsed by Level(chunk) helper |
| 2 | Parsed | MaxHp | Int32 | Override HP plus level-based baseline |
| 2 | Parsed | MaxMp | Int32 | Override MP plus level-based baseline, branch on Race |
| 2 | Parsed | Xp | Int32 | Base XP award |

## MODE

4 BCard groups of 5 + 7 mode-meta columns; AlwaysActive onwards is meta.

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Unknown |  |  |  |
| 3 | Unknown |  |  |  |
| 4 | Unknown |  |  |  |
| 5 | Unknown |  |  |  |
| 6 | Unknown |  |  |  |
| 7 | Unknown |  |  |  |
| 8 | Unknown |  |  |  |
| 9 | Unknown |  |  |  |
| 10 | Unknown |  |  |  |
| 11 | Unknown |  |  |  |
| 12 | Unknown |  |  |  |
| 13 | Unknown |  |  |  |
| 14 | Unknown |  |  |  |
| 15 | Unknown |  |  |  |
| 16 | Unknown |  |  |  |
| 17 | Unknown |  |  |  |
| 18 | Unknown |  |  |  |
| 19 | Unknown |  |  |  |
| 20 | Unknown |  |  |  |
| 21 | Unknown |  |  |  |
| 22 | Unknown |  |  |  |
| 23 | Unknown |  |  |  |
| 24 | Unknown |  |  |  |
| 25 | Unknown |  |  |  |
| 26 | Parsed | AlwaysActive | Boolean | Mode always active when non-zero |
| 27 | Parsed | Limiter | Byte | Mode limiter |
| 28 | Parsed | HpThreshold | Int16 | HP% threshold that swaps the mode / item vnum |
| 29 | Parsed | RangeThreshold | Int16 | Range threshold for mode swap |
| 30 | Parsed | CModeVNum | Int16 | c_mode vnum (transform target) |
| 31 | Parsed | CellMinRange | Byte | Minimum cells before the mode engages |
| 32 | Parsed | Midgard | Int32 | Midgard-specific data |

## NAME

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | NameI18NKey | String | Localization key (zts##e) |

## PARTNER

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | NonParsed | partnerUnused |  | PARTNER block is always 20 zeros in vanilla; unused. |

## PETINFO

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | PetInfoVal1 | Int32 | Pet stat factor 1 (collectable: tries; teleporter: itemVnum; mate: HP/melee factor) |
| 2 | Parsed | VNumRequired | Int16 | VNum of the item required to tame/interact |
| 3 | Parsed | AmountRequired | Byte | Amount of the required item |
| 3 | Parsed | PetInfoVal2 | Int32 | Pet stat factor 2 (collectable: cooldown; teleporter: amount; mate: ranged/dodge factor) |
| 4 | Parsed | PetInfoVal3 | Int32 | Pet stat factor 3 (collectable: needItem flag; teleporter: removeItem; mate: magic/MP factor) |
| 5 | Parsed | PetInfoVal4 | Int32 | Pet stat factor 4 (collectable: dance duration; mate: level threshold) |

## PREATT

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | IsHostile | Boolean | Non-zero means the mob aggroes on sight |
| 3 | Parsed | GroupAttack | Byte | Group-aggro mode (1 = with allies, 5 = with group) |
| 4 | Parsed | NoticeRange | Byte | Aggro radius in cells |
| 5 | Parsed | Speed | Byte | Movement speed |
| 6 | Parsed | RespawnTime | Int32 | Respawn delay, deciseconds |

## RACE

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | MaxMp | Int32 | Override MP plus level-based baseline, branch on Race |
| 2 | Parsed | MonsterType | MonsterType | Categorisation (Mate/Normal/Trap/Unknown) |
| 2 | Parsed | NoAggresiveIcon | Boolean | Talkable / trap entities: suppress the aggressive icon |
| 2 | Parsed | Race | Byte | Race group (plant, animal, monster, dragon, …) |
| 3 | Parsed | MonsterType | MonsterType | Categorisation (Mate/Normal/Trap/Unknown) |
| 3 | Parsed | NoAggresiveIcon | Boolean | Talkable / trap entities: suppress the aggressive icon |
| 3 | Parsed | RaceType | Byte | Subtype within the race group |

## SETTING

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | IconId | Int16 | Target-info avatar index (NSip) |
| 3 | Parsed | SpawnMobOrColor | Int32 | When hostility>20000: spawn-mob vnum, else packed RGBA color |
| 4 | Parsed | AmountRequired | Byte | Amount of the required item |
| 4 | Parsed | VNumRequired | Int16 | VNum of the item required to tame/interact |
| 5 | Parsed | SpriteSize | SByte | Sprite scale bonus % (negative shrinks, positive grows) |
| 6 | Parsed | CellSize | Byte | Collision cell footprint (used for big-boss AOE math) |
| 7 | NonParsed | unknown0 |  | Always 0. |

## SKILL

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | NpcMonsterSkill | ICollection`1 | Up to 5 NpcMonsterSkill entries (vnum/chance/force triples) |
| 3 | Parsed | NpcMonsterSkill | ICollection`1 | Up to 5 NpcMonsterSkill entries (vnum/chance/force triples) |
| 4 | Parsed | NpcMonsterSkill | ICollection`1 | Up to 5 NpcMonsterSkill entries (vnum/chance/force triples) |
| 5 | Parsed | NpcMonsterSkill | ICollection`1 | Up to 5 NpcMonsterSkill entries (vnum/chance/force triples) |
| 6 | Parsed | NpcMonsterSkill | ICollection`1 | Up to 5 NpcMonsterSkill entries (vnum/chance/force triples) |
| 7 | Parsed | NpcMonsterSkill | ICollection`1 | Up to 5 NpcMonsterSkill entries (vnum/chance/force triples) |
| 8 | Parsed | NpcMonsterSkill | ICollection`1 | Up to 5 NpcMonsterSkill entries (vnum/chance/force triples) |
| 9 | Parsed | NpcMonsterSkill | ICollection`1 | Up to 5 NpcMonsterSkill entries (vnum/chance/force triples) |
| 10 | Parsed | NpcMonsterSkill | ICollection`1 | Up to 5 NpcMonsterSkill entries (vnum/chance/force triples) |
| 11 | Parsed | NpcMonsterSkill | ICollection`1 | Up to 5 NpcMonsterSkill entries (vnum/chance/force triples) |
| 12 | Parsed | NpcMonsterSkill | ICollection`1 | Up to 5 NpcMonsterSkill entries (vnum/chance/force triples) |
| 13 | Parsed | NpcMonsterSkill | ICollection`1 | Up to 5 NpcMonsterSkill entries (vnum/chance/force triples) |
| 14 | Parsed | NpcMonsterSkill | ICollection`1 | Up to 5 NpcMonsterSkill entries (vnum/chance/force triples) |
| 15 | Parsed | NpcMonsterSkill | ICollection`1 | Up to 5 NpcMonsterSkill entries (vnum/chance/force triples) |
| 16 | Parsed | NpcMonsterSkill | ICollection`1 | Up to 5 NpcMonsterSkill entries (vnum/chance/force triples) |

## VNUM

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | BCards | ICollection`1 | BCards from BASIC (10 groups of 5) and CARD (4 groups of 5) |
| 2 | Parsed | Drop | ICollection`1 | 20 group drops, vnum/chance/amount triples, merged with the per-monster drop DAO |
| 2 | Parsed | MonsterType | MonsterType | Categorisation (Mate/Normal/Trap/Unknown) |
| 2 | Parsed | NpcMonsterSkill | ICollection`1 | Up to 5 NpcMonsterSkill entries (vnum/chance/force triples) |
| 2 | Parsed | NpcMonsterVNum | Int16 | Monster vnum |

## WEAPON

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | Concentrate | Int16 | Hit rate |
| 2 | Parsed | DamageMaximum | Int16 | Max attack damage |
| 2 | Parsed | DamageMinimum | Int16 | Min attack damage |
| 3 | Parsed | Concentrate | Int16 | Hit rate |
| 3 | Parsed | CriticalChance | Byte | Critical hit chance |
| 3 | Parsed | CriticalRate | Int16 | Critical hit damage multiplier |
| 3 | Parsed | DamageMaximum | Int16 | Max attack damage |
| 3 | Parsed | DamageMinimum | Int16 | Min attack damage |
| 4 | Parsed | DamageMaximum | Int16 | Max attack damage |
| 4 | Parsed | DamageMinimum | Int16 | Min attack damage |
| 5 | Parsed | DamageMaximum | Int16 | Max attack damage |
| 6 | Parsed | Concentrate | Int16 | Hit rate |
| 7 | Parsed | CriticalChance | Byte | Critical hit chance |
| 8 | Parsed | CriticalRate | Int16 | Critical hit damage multiplier |

## WINFO

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | AttackUpgrade | Byte | Weapon upgrade level |
| 2 | Parsed | DefenceUpgrade | Byte | Armor upgrade level |
| 3 | NonParsed | unknown5 |  |  |
| 4 | Parsed | AttackUpgrade | Byte | Weapon upgrade level |

## ZSKILL

| Column | Status | Name | Type | Description |
|---:|---|---|---|---|
| 2 | Parsed | AttackClass | Byte | Attack class (melee/ranged/magic) |
| 3 | Parsed | BasicRange | Byte | Basic attack range in cells |
| 4 | Parsed | BasicHitChance | Byte | Basic-attack hit chance (each tick rolls hitChance*20%) |
| 5 | Parsed | BasicArea | Byte | Basic attack area-of-effect radius |
| 6 | Parsed | BasicCooldown | Int16 | Basic attack cooldown, deciseconds |
| 7 | Parsed | DashSpeed | Byte | Dash visual speed |
| 8 | NonParsed | unknown4 |  |  |



================================================
FILE: documentation/dat/quest.dat.md
================================================
# quest.dat

```text
```

## Computed / multi-section fields

| DTO property | Type | Source | Description |
|---|---|---|---|
| AutoFinish | Boolean |  |  |
| DescI18NKey | String |  |  |
| EndDialogId | Nullable`1 |  |  |
| IsDaily | Boolean |  |  |
| IsSecondary | Boolean |  |  |
| LevelMax | Byte |  |  |
| LevelMin | Byte |  |  |
| NextQuestId | Nullable`1 |  |  |
| QuestId | Int16 |  |  |
| QuestObjective | ICollection`1 |  |  |
| QuestQuestReward | ICollection`1 |  |  |
| QuestType | QuestType |  |  |
| RequiredQuestId | Nullable`1 |  |  |
| StartDialogId | Nullable`1 |  |  |
| TargetMap | Nullable`1 |  |  |
| TargetX | Nullable`1 |  |  |
| TargetY | Nullable`1 |  |  |
| TitleI18NKey | String |  |  |



================================================
FILE: lgtm.yml
================================================
extraction:
  csharp:
    index:
      dotnet:
        version: "8.0.100"


================================================
FILE: scripts/Docker - All.cmd
================================================
cd ..

dotnet build --nologo -p:TargetArch=linux-musl-x64
docker-compose up --force-recreate --build login master world
PAUSE

================================================
FILE: scripts/Docker - LoginServer.cmd
================================================
cd ..

dotnet build --nologo -p:TargetArch=linux-musl-x64
docker-compose up --force-recreate --build login
PAUSE

================================================
FILE: scripts/Docker - MasterServer.cmd
================================================
cd ..

dotnet build --nologo -p:TargetArch=linux-musl-x64
docker-compose up --force-recreate --build master
PAUSE

================================================
FILE: scripts/Docker - Postgres.cmd
================================================
cd ..

docker-compose up db
PAUSE

================================================
FILE: scripts/Docker - ReverseProxy.cmd
================================================
cd ..

docker-compose pull
dotnet build --nologo -p:TargetArch=linux-musl-x64
docker-compose up --force-recreate --build reverse-proxy
PAUSE

================================================
FILE: scripts/Docker - Shutdown.cmd
================================================
cd ..

docker-compose down
PAUSE

================================================
FILE: scripts/Docker - WorldServer.cmd
================================================
cd ..

dotnet build --nologo -p:TargetArch=linux-musl-x64
docker-compose up --force-recreate --build world
PAUSE

================================================
FILE: scripts/LoginServer.cmd
================================================
cd ..\build\net8.0\
start /d "." dotnet NosCore.LoginServer.dll

================================================
FILE: scripts/MasterServer.cmd
================================================
cd ..\build\net8.0\
start /d "." dotnet NosCore.MasterServer.dll

================================================
FILE: scripts/Parser.cmd
================================================
cd ..\build\net8.0\
start /d "." dotnet NosCore.Parser.dll

================================================
FILE: scripts/WorldServer.cmd
================================================
cd ..\build\net8.0\
start /d "." dotnet NosCore.WorldServer.dll

================================================
FILE: scripts/docker-publish.sh
================================================
#!/usr/bin/env bash

echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
dotnet test --runtime linux-musl-x64 --filter TestCategory=SomethingAsDotnetBuildDoesntWorkAnymore

DOCKER_ENV=''
DOCKER_TAG=''
export PATH=$PATH:$HOME/.local/bin

case "$TRAVIS_BRANCH" in
  "master")
    DOCKER_ENV=production
    DOCKER_TAG=latest
    ;;  
esac

docker build -f ./deploy/Dockerfile-world -t noscore.worldserver:$DOCKER_TAG --no-cache .
docker tag noscore.worldserver:$DOCKER_TAG noscoreio/noscore.worldserver:$DOCKER_TAG
docker push noscoreio/noscore.worldserver:$DOCKER_TAG

docker build -f ./deploy/Dockerfile-login -t noscore.loginserver:$DOCKER_TAG --no-cache .
docker tag noscore.loginserver:$DOCKER_TAG noscoreio/noscore.loginserver:$DOCKER_TAG
docker push noscoreio/noscore.loginserver:$DOCKER_TAG

docker build -f ./deploy/Dockerfile-master -t noscore.masterserver:$DOCKER_TAG --no-cache .
docker tag noscore.masterserver:$DOCKER_TAG noscoreio/noscore.masterserver:$DOCKER_TAG
docker push noscoreio/noscore.masterserver:$DOCKER_TAG


================================================
FILE: src/NosCore.Core/AuthorizeRoleAttribute.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using Microsoft.AspNetCore.Authorization;
using NosCore.Shared.Enumerations;
using System;
using System.Linq;

namespace NosCore.Core
{
    public class AuthorizeRoleAttribute : AuthorizeAttribute
    {
        public AuthorizeRoleAttribute(AuthorityType allowedRole)
        {
            var enums = Enum.GetValues(typeof(AuthorityType)).Cast<AuthorityType>().ToList()
                .Where(s => s >= allowedRole);
            Roles = string.Join(",", enums.ToArray());
        }
    }
}


================================================
FILE: src/NosCore.Core/Channel.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Shared.Configuration;
using NosCore.Shared.Enumerations;

namespace NosCore.Core
{
    public class Channel
    {
        public WebApiConfiguration? MasterCommunication { get; set; }

        public required string ClientName { get; set; }

        public ServerType ClientType { get; set; }

        public ushort Port { get; set; }

        public byte ServerId { get; set; }

        public long ChannelId { get; set; }

        public string? DisplayHost { get; set; }

        public int? DisplayPort { get; set; }

        public bool StartInMaintenance { get; set; }

        public required string Host { get; set; }

        public int ConnectedAccountLimit { get; set; }
    }
}


================================================
FILE: src/NosCore.Core/ChannelInfo.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NodaTime;
using NosCore.Shared.Enumerations;

namespace NosCore.Core
{
    public class ChannelInfo
    {
        public long Id { get; set; }
        public string? Name { get; set; }
        public string Host { get; set; } = null!;
        public ushort Port { get; set; }
        public string? DisplayHost { get; set; }
        public ushort? DisplayPort { get; set; }
        public int ConnectedAccountLimit { get; set; }

        public Instant LastPing { get; set; }

        public ServerType Type { get; set; }
        public bool IsMaintenance { get; set; }
        public byte ServerId { get; set; }
    }
}


================================================
FILE: src/NosCore.Core/Concurrency/AsyncLock.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using System;
using System.Threading;
using System.Threading.Tasks;

namespace NosCore.Core.Concurrency
{
    // Thin async-disposable wrapper around SemaphoreSlim(1, 1). Use with `await using`
    // so the lock is always released, even on exception. Replaces the manual
    // WaitAsync()/Release() pattern that requires a try/finally at every call site.
    public sealed class AsyncLock : IDisposable
    {
        private readonly SemaphoreSlim _semaphore = new(1, 1);

        public async ValueTask<Releaser> AcquireAsync(CancellationToken cancellationToken = default)
        {
            await _semaphore.WaitAsync(cancellationToken).ConfigureAwait(false);
            return new Releaser(_semaphore);
        }

        public void Dispose() => _semaphore.Dispose();

        public readonly struct Releaser(SemaphoreSlim semaphore) : IDisposable
        {
            public void Dispose() => semaphore.Release();
        }
    }
}


================================================
FILE: src/NosCore.Core/Configuration/LoginConfiguration.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.ClientPackets.Login;
using NosCore.Shared.Configuration;
using System.ComponentModel.DataAnnotations;

namespace NosCore.Core.Configuration
{
    public class LoginConfiguration : ServerConfiguration
    {
        [Required]
        public WebApiConfiguration MasterCommunication { get; set; } = null!;

        [Required]
        public SqlConnectionConfiguration Database { get; set; } = null!;

        public ClientVersionSubPacket? ClientVersion { get; set; }
        public string? Md5String { get; set; }
        public bool EnforceNewAuth { get; set; }
    }
}


================================================
FILE: src/NosCore.Core/Configuration/WorldConfiguration.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Data.Enumerations;
using NosCore.Shared.Configuration;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace NosCore.Core.Configuration
{
    public class WorldConfiguration : ServerConfiguration
    {
        [Required]
        public WebApiConfiguration MasterCommunication { get; set; } = null!;

        [Required]
        public SqlConnectionConfiguration Database { get; set; } = null!;

        [Range(1, short.MaxValue)]
        public short ConnectedAccountLimit { get; set; }

        public byte ServerId { get; set; }

        public bool WorldInformation { get; set; }

        public bool SceneOnCreate { get; set; }

        public string? DisplayHost { get; set; }

        public int? DisplayPort { get; set; }

        public bool StartInMaintenance { get; set; }

        [Required]
        public string? ServerName { get; set; }

#pragma warning disable CA2227 // Collection properties should be read only
        public FeatureFlags FeatureFlags { get; set; } = new();
#pragma warning restore CA2227 // Collection properties should be read only

        public short MaxItemAmount { get; set; }

        public byte BackpackSize { get; set; }

        public long MaxGoldAmount { get; set; }

        public long MaxBankGoldAmount { get; set; }

        public int MaxSpPoints { get; set; }

        public int MaxAdditionalSpPoints { get; set; }

        public bool AllClassAvailableOnCreate { get; set; }

#pragma warning disable CA2227 // Collection properties should be read only
        public Dictionary<string, Dictionary<StarterOrigin, List<BasicEquipment>>> BasicEquipments { get; set; } = new();

        public Dictionary<string, Dictionary<StarterOrigin, List<short>>> BasicSkills { get; set; } = new();

#pragma warning restore CA2227 // Collection properties should be read only
    }

    public enum StarterOrigin : byte
    {
        CreateAndUpgrade,
        Create56,
        Create80
    }

    public class BasicEquipment
    {
        public short VNum { get; set; }

        public short Amount { get; set; }

        public NoscorePocketType NoscorePocketType { get; set; }

        public sbyte Rare { get; set; }

        public byte Upgrade { get; set; }
    }
}


================================================
FILE: src/NosCore.Core/ConfigureJwtBearerOptions.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Extensions.Options;
using Microsoft.IdentityModel.Tokens;
using NosCore.Shared.Authentication;
using NosCore.Shared.Configuration;
using System;
using System.Text;

namespace NosCore.Core
{
    public class ConfigureJwtBearerOptions(IOptions<WebApiConfiguration> webApiConfiguration, IHasher hasher)
        : IConfigureNamedOptions<JwtBearerOptions>
    {
        public void Configure(string? name, JwtBearerOptions options)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            var password = hasher.Hash(webApiConfiguration.Value.Password!, webApiConfiguration.Value.Salt);
            if (name == JwtBearerDefaults.AuthenticationScheme)
            {
                options.RequireHttpsMetadata = false;
                options.SaveToken = true;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    IssuerSigningKey = new SymmetricSecurityKey(
                        Encoding.Default.GetBytes(password)),
                    ValidAudience = "Audience",
                    ValidIssuer = "Issuer",
                    ValidateIssuerSigningKey = true,
                    ValidateLifetime = true
                };
            }
        }

        public void Configure(JwtBearerOptions options)
        {
            Configure(JwtBearerDefaults.AuthenticationScheme, options);
        }
    }
}


================================================
FILE: src/NosCore.Core/ConnectionInfo.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

namespace NosCore.Core
{
    public class ConnectionInfo
    {
        public string? Token { get; set; }
        public Channel? ChannelInfo { get; set; }
    }
}


================================================
FILE: src/NosCore.Core/Encryption/BcryptEncryption.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Shared.Authentication;
using System;

namespace NosCore.Core.Encryption
{
    public class BcryptHasher : IHasher
    {
        public string Hash(string password, string? salt)
        {
            return BCrypt.Net.BCrypt.HashPassword(password, salt);
        }

        public string Hash(string password) => throw new NotImplementedException();
    }
}


================================================
FILE: src/NosCore.Core/Encryption/Pbkdf2Hasher.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Shared.Authentication;
using System;
using System.Globalization;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

namespace NosCore.Core.Encryption
{
    public class Pbkdf2Hasher : IHasher
    {
        public string Hash(string inputString, string? salt)
        {
            var saltBytes = Convert.FromBase64String(Convert.ToBase64String(Encoding.Default.GetBytes(salt ?? "")));

            var hashBytes = Rfc2898DeriveBytes.Pbkdf2(
                Encoding.Default.GetBytes(inputString),
                saltBytes,
                150000,
                HashAlgorithmName.SHA512,
                64);
            return string.Concat(hashBytes.Select(item => item.ToString("x2", CultureInfo.CurrentCulture)));
        }

        public string Hash(string password) => throw new NotImplementedException();
    }
}


================================================
FILE: src/NosCore.Core/Encryption/Sha512Hasher.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Shared.Authentication;
using System.Globalization;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

namespace NosCore.Core.Encryption
{
    public class Sha512Hasher : IHasher
    {
        public string Hash(string password, string? salt)
        {
            using var hash = SHA512.Create();
            return string.Concat(hash.ComputeHash(Encoding.Default.GetBytes(salt ?? "" + password))
                .Select(item => item.ToString("x2", CultureInfo.CurrentCulture)));
        }

        public string Hash(string password) => Hash(password, null);
    }
}


================================================
FILE: src/NosCore.Core/Extensions/TypeExtension.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using System;
using System.Collections.Concurrent;
using System.Linq;
using System.Reflection.Emit;

namespace NosCore.Core.Extensions
{
    public static class TypeExtension
    {
        private static readonly ConcurrentDictionary<Type, Func<object>> Constructors = new();

        public static Func<TBase> GetConstructorDelegate<TBase>(this Type type)
        {
            return (Func<TBase>)GetConstructorDelegate(type, typeof(Func<TBase>));
        }

        public static Func<object> GetConstructorDelegate(this Type type)
        {
            return (Func<object>)GetConstructorDelegate(type, typeof(Func<object>));
        }

        public static Delegate GetConstructorDelegate(this Type type, Type delegateType)
        {
            if (type == null)
            {
                throw new ArgumentNullException(nameof(type));
            }

            if (delegateType == null)
            {
                throw new ArgumentNullException(nameof(delegateType));
            }

            var genericArguments = delegateType.GetGenericArguments();
            var argTypes = genericArguments.Length > 1 ? genericArguments.Take(genericArguments.Length - 1).ToArray()
                : Type.EmptyTypes;

            var constructor = type.GetConstructor(argTypes);
            if (constructor == null)
            {
                if (argTypes.Length == 0)
                {
                    throw new InvalidProgramException(
                        $"Type '{type.Name}' doesn't have a parameterless constructor.");
                }

                throw new InvalidProgramException($"Type '{type.Name}' doesn't have the requested constructor.");
            }

            var dynamicMethod = new DynamicMethod("DM$_" + type.Name, type, argTypes, type);
            var ilGen = dynamicMethod.GetILGenerator();
            for (var i = 0; i < argTypes.Length; i++)
            {
                ilGen.Emit(OpCodes.Ldarg, i);
            }

            ilGen.Emit(OpCodes.Newobj, constructor);
            ilGen.Emit(OpCodes.Ret);
            return dynamicMethod.CreateDelegate(delegateType);
        }

        public static T CreateInstance<T>(this Type type)
        {
            if (Constructors.TryGetValue(type, out var constructor))
            {
                return (T)constructor();
            }

            constructor = type.GetConstructorDelegate();
            Constructors.TryAdd(type, constructor);

            return (T)constructor();
        }
    }
}


================================================
FILE: src/NosCore.Core/I18N/GameLanguageLocalizer.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using Microsoft.Extensions.Localization;
using NosCore.Data.Enumerations.I18N;
using NosCore.Shared.Enumerations;
using NosCore.Shared.I18N;
using System.Collections.Generic;
using System.Globalization;

namespace NosCore.Core.I18N
{
    public class GameLanguageLocalizer(ILogLanguageLocalizer<LanguageKey> stringLocalizer) : IGameLanguageLocalizer
    {
        public LocalizedString this[LanguageKey key, RegionType region]
        {
            get
            {
                var currentUi = CultureInfo.CurrentUICulture;
                var current = CultureInfo.CurrentCulture;
                CultureInfo.CurrentUICulture = new CultureInfo(region.ToString());
                CultureInfo.CurrentCulture = new CultureInfo(region.ToString());

                var result = stringLocalizer[key];

                CultureInfo.CurrentUICulture = currentUi;
                CultureInfo.CurrentCulture = current;
                return result;
            }
        }

        public LocalizedString this[LanguageKey key, RegionType region, params object[] arguments]
        {
            get
            {
                var currentUi = CultureInfo.CurrentUICulture;
                var current = CultureInfo.CurrentCulture;
                CultureInfo.CurrentUICulture = new CultureInfo(region.ToString());
                CultureInfo.CurrentCulture = new CultureInfo(region.ToString());

                var result = stringLocalizer[key, arguments];

                CultureInfo.CurrentUICulture = currentUi;
                CultureInfo.CurrentCulture = current;
                return result;
            }
        }

        public IEnumerable<LocalizedString> GetAllStrings() => stringLocalizer.GetAllStrings();
    }
}


================================================
FILE: src/NosCore.Core/I18N/IGameLanguageLocalizer.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using Microsoft.Extensions.Localization;
using NosCore.Data.Enumerations.I18N;
using NosCore.Shared.Enumerations;
using NosCore.Shared.I18N;

namespace NosCore.Core.I18N;

public interface IGameLanguageLocalizer : ILogLanguageLocalizer
{
    LocalizedString this[LanguageKey key, RegionType region, params object[] arguments] { get; }
    LocalizedString this[LanguageKey key, RegionType region] { get; }
}


================================================
FILE: src/NosCore.Core/NosCore.Core.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <TieredCompilation>true</TieredCompilation>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <OutputPath>..\..\build\</OutputPath>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <OutputPath>..\..\build\</OutputPath>
  </PropertyGroup>

  <ItemGroup>
    <Compile Remove="HttpClients\**" />
    <EmbeddedResource Remove="HttpClients\**" />
    <None Remove="HttpClients\**" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Autofac" />
    <PackageReference Include="BCrypt.Net-Core" />
    <PackageReference Include="FastExpressionCompiler" />
    <PackageReference Include="JsonPatch.Net" />
    <PackageReference Include="Mapster" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" />
    <PackageReference Include="Microsoft.AspNetCore.SignalR.Client" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" />
    <PackageReference Include="Microsoft.Extensions.Http" />
    <PackageReference Include="NodaTime.Serialization.SystemTextJson" />
    <PackageReference Include="OpenTelemetry.Extensions.Hosting" />
    <PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" />
    <PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" />
    <PackageReference Include="OpenTelemetry.Instrumentation.Http" />
    <PackageReference Include="OpenTelemetry.Instrumentation.EntityFrameworkCore" />
    <PackageReference Include="OpenTelemetry.Instrumentation.Runtime" />
    <PackageReference Include="NosCore.Dao" />
    <PackageReference Include="NosCore.Networking" />
    <PackageReference Include="NosCore.PathFinder" />
    <PackageReference Include="NosCore.Shared" />
    <PackageReference Include="Serilog" />
    <PackageReference Include="Polly" />
    <PackageReference Include="Serilog.Extensions.Hosting" />
    <PackageReference Include="Serilog.Settings.Configuration" />
    <PackageReference Include="Serilog.Sinks.Console" />
    <PackageReference Include="System.IdentityModel.Tokens.Jwt" />
    <PackageReference Include="Microsoft.Extensions.Caching.Memory" />
    <PackageReference Include="TwoFactorAuth.Net" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="NosCore.Analyzers">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\NosCore.Data\NosCore.Data.csproj" />
  </ItemGroup>
</Project>


================================================
FILE: src/NosCore.Core/Observability/NosCoreTelemetry.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using System.Diagnostics;
using System.Diagnostics.Metrics;
using Microsoft.Extensions.DependencyInjection;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;

namespace NosCore.Core.Observability
{
    public static class NosCoreTelemetry
    {
        public const string ActivitySourceName = "NosCore";
        public const string MeterName = "NosCore";

        public static readonly ActivitySource ActivitySource = new(ActivitySourceName);
        public static readonly Meter Meter = new(MeterName);

        // Configured via standard OTEL env vars: OTEL_SERVICE_NAME,
        // OTEL_RESOURCE_ATTRIBUTES, OTEL_EXPORTER_OTLP_ENDPOINT,
        // OTEL_EXPORTER_OTLP_PROTOCOL.
        public static IServiceCollection AddNosCoreTelemetry(this IServiceCollection services, string defaultServiceName, bool includeAspNetCore = false)
        {
            services.AddOpenTelemetry()
                .ConfigureResource(rb => rb.AddService(defaultServiceName))
                .WithTracing(t =>
                {
                    t.AddSource(ActivitySourceName);
                    t.AddHttpClientInstrumentation();
                    t.AddEntityFrameworkCoreInstrumentation();
                    if (includeAspNetCore)
                    {
                        t.AddAspNetCoreInstrumentation();
                    }
                    t.AddOtlpExporter();
                })
                .WithMetrics(m =>
                {
                    m.AddMeter(MeterName);
                    m.AddRuntimeInstrumentation();
                    m.AddHttpClientInstrumentation();
                    if (includeAspNetCore)
                    {
                        m.AddAspNetCoreInstrumentation();
                    }
                    m.AddOtlpExporter();
                });

            return services;
        }
    }
}


================================================
FILE: src/NosCore.Core/Services/IdService/IIdService.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using System.Collections.Concurrent;

namespace NosCore.Core.Services.IdService
{
    public interface IIdService<T>
    {
        ConcurrentDictionary<long, T> Items { get; }

        long GetNextId();
    }
}


================================================
FILE: src/NosCore.Core/Services/IdService/IdService.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using System.Collections.Concurrent;

namespace NosCore.Core.Services.IdService
{
    public class IdService<T>(long firstId) : IIdService<T>
    {
        public ConcurrentDictionary<long, T> Items { get; } = new();

        public long GetNextId()
        {
            return ++firstId;
        }
    }
}


================================================
FILE: src/NosCore.Core/SessionFactory.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using System;
using System.Collections.Concurrent;

namespace NosCore.Core
{
    public sealed class SessionFactory
    {
        private static readonly Lazy<SessionFactory> Lazy = new(() => new SessionFactory());

        private SessionFactory()
        {
            AuthCodes = new ConcurrentDictionary<string, string>();
            ReadyForAuth = new ConcurrentDictionary<string, long>();
        }

        public static SessionFactory Instance => Lazy.Value;

        public ConcurrentDictionary<string, string> AuthCodes { get; }
        public ConcurrentDictionary<string, long> ReadyForAuth { get; }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/ChangeChannelPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$ChangeChannel", AuthorityType.GameMaster)]
    public class ChangeChannelPacket : CommandPacket
    {
        [PacketIndex(0)]
        public int ChannelId { get; set; }

        public override string Help()
        {
            return "$ChangeChannel ChannelId";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/ChangeClassPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$ChangeClass", AuthorityType.GameMaster)]
    public class ChangeClassPacket : CommandPacket
    {
        [PacketIndex(0)]
        public CharacterClassType ClassType { get; set; }

        [PacketIndex(1)]
        public string? Name { get; set; }

        public override string Help()
        {
            return "$ChangeClass ClassType [Name]";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/ChangeGenderPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$ChangeGender", AuthorityType.GameMaster)]
    public class ChangeGenderPacket : CommandPacket
    {
        public override string Help()
        {
            return "$ChangeGender";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/ClearInventoryPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$ClearInventory", AuthorityType.Moderator)]
    public class ClearInventoryPacket : CommandPacket
    {
        public override string Help()
        {
            return "$ClearInventory";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/CommandPacketHeaderAttribute.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Packets.Enumerations;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    public class CommandPacketHeaderAttribute(string identification, AuthorityType authority) : PacketHeaderAttribute(identification, Scope.InGame)
    {
        public AuthorityType Authority { get; } = authority;
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/CreateItemPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$CreateItem", AuthorityType.GameMaster)]
    public class CreateItemPacket : CommandPacket
    {
        [PacketIndex(0)]
        public short VNum { get; set; }

        [PacketIndex(1)]
        public short? DesignOrAmount { get; set; }

        [PacketIndex(2)]
        public byte? Upgrade { get; set; }

        public override string Help()
        {
            return "$CreateItem VNum [DesignOrAmount] [Upgrade]";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/EffectCommandPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$Effect", AuthorityType.GameMaster)]
    public class EffectCommandPacket : CommandPacket
    {
        [PacketIndex(0)]
        public int EffectId { get; set; }

        public override string Help()
        {
            return "$Effect EffectId";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/EntryPointPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets;
using NosCore.Packets.Attributes;
using NosCore.Packets.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [PacketHeader("EntryPoint", Scope.OnCharacterScreen)]
    public class EntryPointPacket : PacketBase
    {
        [PacketIndex(1)]
        public required string Name { get; set; }

        [PacketIndex(2)]
        public string? Password { get; set; }
    }

}


================================================
FILE: src/NosCore.Data/CommandPackets/FlCommandPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Packets.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [PacketHeader("$fl", Scope.InTrade | Scope.InGame)]
    public class FlCommandPacket : CommandPacket
    {
        [PacketIndex(0)]
        public string? CharacterName { get; set; }

        public override string Help()
        {
            return "$fl [CharacterName]";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/GiftPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$Gift", AuthorityType.GameMaster)]
    public class GiftPacket : CommandPacket
    {
        [PacketIndex(0)]
        public short VNum { get; set; }

        [PacketIndex(1)]
        public byte Amount { get; set; }

        [PacketIndex(2)]
        public sbyte Rare { get; set; }

        [PacketIndex(3)]
        public byte Upgrade { get; set; }

        [PacketIndex(4)]
        public string? CharacterName { get; set; }

        public override string Help()
        {
            return "$Gift VNum Amount Rare Upgrade [CharacterName]";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/HelpPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$Help", AuthorityType.GameMaster)]
    public class HelpPacket : CommandPacket
    {
        public override string Help()
        {
            return "$Help";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/ICommandPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using JetBrains.Annotations;
using NosCore.Packets;
using NosCore.Packets.Interfaces;

namespace NosCore.Data.CommandPackets
{
    public interface ICommandPacket : IPacket
    {
        [UsedImplicitly]
        string Help();
    }

    public abstract class CommandPacket : PacketBase, ICommandPacket
    {
        public abstract string Help();
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/InvisibleCommandPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$Invisible", AuthorityType.GameMaster)]
    public class InvisibleCommandPacket : CommandPacket
    {
        public override string Help()
        {
            return "$Invisible";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/KickPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$Kick", AuthorityType.Moderator)]
    public class KickPacket : CommandPacket
    {
        [PacketIndex(0)]
        public string? Name { get; set; }

        public override string Help()
        {
            return "$Kick [Name]";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/KillPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$Kill", AuthorityType.GameMaster)]
    public class KillPacket : CommandPacket
    {
        public override string Help()
        {
            return "$Kill";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/PositionPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$Position", AuthorityType.GameMaster)]
    public class PositionPacket : CommandPacket
    {
        public override string Help()
        {
            return "$Position";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/SetBankGoldPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$SetBankGold", AuthorityType.GameMaster)]
    public class SetBankGoldPacket : CommandPacket
    {
        [PacketIndex(0)]
        public long BankGold { get; set; }

        public override string Help()
        {
            return "$SetBankGold Amount";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/SetGoldCommandPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;
using System.ComponentModel.DataAnnotations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$SetGold", AuthorityType.GameMaster)]
    [PacketHeaderAlias("$Gold")]
    public class SetGoldCommandPacket : CommandPacket
    {
        [PacketIndex(0)]
        [Range(1, 1000000000)]
        public long Gold { get; set; }

        [PacketIndex(1)]
        public string? Name { get; set; }

        public override string Help()
        {
            return "$Gold Gold [Name]";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/SetHairColorPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$SetHairColor", AuthorityType.GameMaster)]
    public class SetHairColorPacket : CommandPacket
    {
        [PacketIndex(0)]
        public byte Color { get; set; }

        public override string Help()
        {
            return "$SetHairColor Color";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/SetHairStylePacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$SetHairStyle", AuthorityType.GameMaster)]
    public class SetHairStylePacket : CommandPacket
    {
        [PacketIndex(0)]
        public byte Style { get; set; }

        public override string Help()
        {
            return "$SetHairStyle Style";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/SetHeroLevelCommandPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;
using System.ComponentModel.DataAnnotations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$SetHeroLevel", AuthorityType.GameMaster)]
    [PacketHeaderAlias("$HeroLvl")]
    public class SetHeroLevelCommandPacket : CommandPacket
    {
        [PacketIndex(0)]
        [Range(1, byte.MaxValue)]
        public byte Level { get; set; }

        [PacketIndex(1)]
        public string? Name { get; set; }

        public override string Help()
        {
            return "$SetHeroLevel Level [Name]";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/SetHeroXpPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$SetHeroXp", AuthorityType.GameMaster)]
    public class SetHeroXpPacket : CommandPacket
    {
        [PacketIndex(0)]
        public long HeroXp { get; set; }

        public override string Help()
        {
            return "$SetHeroXp Amount";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/SetJobLevelCommandPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;
using System.ComponentModel.DataAnnotations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$SetJobLevel", AuthorityType.GameMaster)]
    [PacketHeaderAlias("$JLvl")]
    public class SetJobLevelCommandPacket : CommandPacket
    {
        [PacketIndex(0)]
        [Range(1, byte.MaxValue)]
        public byte Level { get; set; }

        [PacketIndex(1)]
        public string? Name { get; set; }

        public override string Help()
        {
            return "$SetJobLevel Level [Name]";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/SetJobLevelXpPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$SetJobLevelXp", AuthorityType.GameMaster)]
    public class SetJobLevelXpPacket : CommandPacket
    {
        [PacketIndex(0)]
        public long JobLevelXp { get; set; }

        public override string Help()
        {
            return "$SetJobLevelXp Amount";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/SetLevelCommandPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;
using System.ComponentModel.DataAnnotations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$SetLevel", AuthorityType.GameMaster)]
    [PacketHeaderAlias("$Lvl")]
    public class SetLevelCommandPacket : CommandPacket
    {
        [PacketIndex(0)]
        [Range(1, byte.MaxValue)]
        public byte Level { get; set; }

        [PacketIndex(1)]
        public string? Name { get; set; }

        public override string Help()
        {
            return "$SetLevel Level [Name]";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/SetMaintenancePacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$SetMaintenance", AuthorityType.GameMaster)]
    public class SetMaintenancePacket : CommandPacket
    {
        [PacketIndex(0)]
        public bool IsGlobal { get; set; }

        [PacketIndex(1)]
        public bool MaintenanceMode { get; set; }

        public override string Help()
        {
            return "$SetMaintenance IsGlobal MaintenanceMode";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/SetReputationPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;
using System.ComponentModel.DataAnnotations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$SetReputation", AuthorityType.GameMaster)]
    [PacketHeaderAlias("$Reputation")]
    public class SetReputationPacket : CommandPacket
    {
        [PacketIndex(0)]
        [Range(0, long.MaxValue)]
        public long Reputation { get; set; }

        [PacketIndex(1)]
        public string? Name { get; set; }

        public override string Help()
        {
            return "$SetReputation Reputation [Name]";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/SetSpAdditionPointPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$SetSpAdditionPoint", AuthorityType.GameMaster)]
    public class SetSpAdditionPointPacket : CommandPacket
    {
        [PacketIndex(0)]
        public int SpAdditionPoint { get; set; }

        public override string Help()
        {
            return "$SetSpAdditionPoint Value";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/SetSpPointPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$SetSpPoint", AuthorityType.GameMaster)]
    public class SetSpPointPacket : CommandPacket
    {
        [PacketIndex(0)]
        public int SpPoint { get; set; }

        public override string Help()
        {
            return "$SetSpPoint Value";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/ShoutHerePacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$ShoutHere", AuthorityType.Moderator)]
    public class ShoutHerePacket : CommandPacket
    {
        [PacketIndex(0)]
        public string? Message { get; set; }

        public override string Help()
        {
            return "$ShoutHere Message";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/ShoutPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$Shout", AuthorityType.Moderator)]
    public class ShoutPacket : CommandPacket
    {
        [PacketIndex(0)]
        public string? Message { get; set; }

        public override string Help()
        {
            return "$Shout Message";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/SizePacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$Size", AuthorityType.GameMaster)]
    public class SizePacket : CommandPacket
    {
        [PacketIndex(0)]
        public VisualType VisualType { get; set; }

        [PacketIndex(1)]
        public long VisualId { get; set; }

        [PacketIndex(2)]
        public byte Size { get; set; }

        public override string Help()
        {
            return "$Size VisualType VisualId Size";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/SpeedPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$Speed", AuthorityType.GameMaster)]
    public class SpeedPacket : CommandPacket
    {
        [PacketIndex(0)]
        public byte Speed { get; set; }

        public override string Help()
        {
            return "$Speed Speed";
        }
    }
}


================================================
FILE: src/NosCore.Data/CommandPackets/TeleportPacket.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Packets.Attributes;
using NosCore.Shared.Enumerations;

namespace NosCore.Data.CommandPackets
{
    [CommandPacketHeader("$Teleport", AuthorityType.GameMaster)]
    public class TeleportPacket : CommandPacket
    {
        [PacketIndex(0)]
        public string? TeleportArgument { get; set; }

        [PacketIndex(1)]
        public short? MapX { get; set; }

        [PacketIndex(2)]
        public short? MapY { get; set; }

        public override string Help()
        {
            return "$Teleport TeleportArgument [X] [Y]";
        }
    }
}


================================================
FILE: src/NosCore.Data/DataAttributes/StaticMetaDataAttribute.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Data.Enumerations.I18N;
using System;

namespace NosCore.Data.DataAttributes
{
    public class StaticMetaDataAttribute : Attribute
    {
        public LogLanguageKey LoadedMessage { get; set; }

        public LogLanguageKey EmptyMessage { get; set; }
    }
}


================================================
FILE: src/NosCore.Data/Dto/I18NFromAttribute.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using System;

namespace NosCore.Data.Dto
{
    public class I18NFromAttribute(Type type) : Attribute
    {
        public Type Type { get; set; } = type;
    }
}


================================================
FILE: src/NosCore.Data/Dto/I18NString.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Shared.Enumerations;
using System.Collections.Generic;

namespace NosCore.Data.Dto
{
    public class I18NString : Dictionary<RegionType, string>
    {
        public I18NString()
        {
            Add(RegionType.EN, "NONAME");
            Add(RegionType.DE, "NONAME");
            Add(RegionType.FR, "NONAME");
            Add(RegionType.IT, "NONAME");
            Add(RegionType.PL, "NONAME");
            Add(RegionType.ES, "NONAME");
            Add(RegionType.CS, "NONAME");
            Add(RegionType.TR, "NONAME");
            Add(RegionType.RU, "NONAME");
        }
    }
}


================================================
FILE: src/NosCore.Data/Dto/IDTO.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

namespace NosCore.Data.Dto
{
    public interface IDto
    {
    }
}


================================================
FILE: src/NosCore.Data/Dto/II18NDto.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Shared.Enumerations;

namespace NosCore.Data.Dto
{
    public interface II18NDto : IDto
    {
        string Key { get; set; }
        RegionType RegionType { get; set; }
        string Text { get; set; }
    }
}


================================================
FILE: src/NosCore.Data/Dto/IItemInstanceDto.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NodaTime;
using System;
using System.ComponentModel.DataAnnotations;

namespace NosCore.Data.Dto
{
    public interface IItemInstanceDto : IDto
    {
        [Key]
        Guid Id { get; set; }

        short Amount { get; set; }

        long? BoundCharacterId { get; set; }

        short Design { get; set; }

        int DurabilityPoint { get; set; }

        Instant? ItemDeleteTime { get; set; }

        short ItemVNum { get; set; }

        short Rare { get; set; }

        byte Upgrade { get; set; }
    }
}


================================================
FILE: src/NosCore.Data/Dto/IStaticDto.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

namespace NosCore.Data.Dto
{
    public interface IStaticDto : IDto
    {
    }
}


================================================
FILE: src/NosCore.Data/Dto/StaticDtoExtension.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using FastMember;
using NosCore.Shared.Enumerations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;

namespace NosCore.Data.Dto
{
    public static class StaticDtoExtension
    {
        public static IDictionary<PropertyInfo, Tuple<PropertyInfo, Type>> GetI18NProperties(Type staticDto)
        {
            var dic = new Dictionary<PropertyInfo, Tuple<PropertyInfo, Type>>();
            var properties = staticDto.GetProperties();
            foreach (var prop in properties.Where(p => typeof(I18NString).IsAssignableFrom(p.PropertyType)))
            {
                var key = properties.FirstOrDefault(s => s.Name == $"{prop.Name}I18NKey");
                if (key == null)
                {
                    continue;
                }
                dic.Add(prop,
                    new Tuple<PropertyInfo, Type>(key,
                        prop.GetCustomAttribute<I18NFromAttribute>()!.Type));
            }

            return dic;
        }

        public static void InjectI18N(this IStaticDto staticDto,
            IDictionary<PropertyInfo, Tuple<PropertyInfo, Type>> propertyInfos,
            IDictionary<Type, Dictionary<string, Dictionary<RegionType, II18NDto>>> langDictionary, Array regions,
            TypeAccessor accessor)
        {
            foreach (var prop in propertyInfos)
            {
                var key = accessor[staticDto, prop.Value.Item1.Name]?.ToString() ?? "NONAME";
                var dic = new I18NString();
                foreach (var region in regions)
                {
                    if (!langDictionary[prop.Value.Item2].ContainsKey(key))
                    {
                        continue;
                    }

                    if (langDictionary[prop.Value.Item2][key].ContainsKey((RegionType)region!))
                    {
                        dic[(RegionType)region] = langDictionary[prop.Value.Item2][key][(RegionType)region].Text;
                    }
                }

                accessor[staticDto, prop.Key.Name] = dic;
            }
        }
    }
}


================================================
FILE: src/NosCore.Data/Enumerations/Audit/AuditLogType.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

namespace NosCore.Data.Enumerations.Audit
{
    public enum AuditLogType
    {
        AccountCreation,
        CharacterCreation,
        EmailUpdate
    }
}


================================================
FILE: src/NosCore.Data/Enumerations/Battle/TargetHitType.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

namespace NosCore.Data.Enumerations.Battle
{
    public enum TargetHitType : byte
    {
        SingleTargetHit = 0,
        SingleTargetHitCombo = 1,
        SingleAoeTargetHit = 2,
        AoeTargetHit = 3,
        ZoneHit = 4,
        SpecialZoneHit = 5
    }
}


================================================
FILE: src/NosCore.Data/Enumerations/Bazaar/BazaarEquipmentType.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

namespace NosCore.Data.Enumerations.Bazaar
{
    public enum BazaarEquipmentType
    {
        Mask = 2,
        Hat = 1,
        CostumeHat = 6,
        CostumeSuit = 5,
        Gloves = 3,
        Boots = 4
    }
}


================================================
FILE: src/NosCore.Data/Enumerations/Bazaar/BazaarJeweleryType.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

namespace NosCore.Data.Enumerations.Bazaar
{
    public enum BazaarJeweleryType
    {
        Ring = 2,
        Necklace = 1,
        Amulet = 5,
        Bracelet = 3,
        Fairy = 4,
        Box = 5
    }
}


================================================
FILE: src/NosCore.Data/Enumerations/Bazaar/BazaarMainType.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

namespace NosCore.Data.Enumerations.Bazaar
{
    public enum BazaarMainType
    {
        Main = 1,
        Upgrade = 2,
        Production = 3,
        Special = 4,
        Potion = 5,
        Event = 6
    }
}


================================================
FILE: src/NosCore.Data/Enumerations/Bazaar/BazaarUsableType.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

namespace NosCore.Data.Enumerations.Bazaar
{
    public enum BazaarUsableType
    {
        Food = 1,
        Snack = 2,
        Magical = 3,
        Part = 4,
        Teacher = 5,
        Sell = 6
    }
}


================================================
FILE: src/NosCore.Data/Enumerations/Buff/AdditionalTypes.cs
================================================
//  __  _  __    __   ___ __  ___ ___
// |  \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using System.Diagnostics.CodeAnalysis;

namespace NosCore.Data.Enumerations.Buff
{
    [SuppressMessage("ReSharper", "UnusedMember.Global")]
    public class AdditionalTypes : BCardType
    {
        // 81-??
        public enum AbsorbedSpirit : byte
        {
            ApplyEffectIfPresent = 11,
            ApplyEffectIfNotPresent = 12,
            ResistForcedMovement = 21,
            ResistForcedMovementNegated = 22,
            MagicCooldownIncreased = 31,
            MagicCooldownDecreased = 32
        }

        public enum Absorption : byte
        {
            AllAttackIncreased = 11,
            AllAttackDecreased = 12,
            MeleeAttackIncreased = 21,
            MeleeAttacklDecreased = 22,
            RangedAttackIncreased = 31,
            RangedAttackDecreased = 32,
            MagicalAttackIncreased = 41,
            MagicalAttacksDecreased = 42
        }

        public enum AbsorptionAndPowerSkill : byte
        {
            AddDamageToHp = 11,
            RemoveDamnageFromHp = 12,

            // Unknown = 21, Unknown2 = 22, Unknown3 = 31, Unknown4 = 32,
            DamageIncreasedSkill = 41,

            DamageDecreasedSkill = 42,
            CriticalIncreasedSkill = 51,
            CriticalDecreasedSkill = 52
        }

        public enum AngerSkill : byte
        {
            AttackInRangeNotLocation = 11,
            AttackInRangeNotLocationNegated = 12,
            ReduceEnemyHpChance = 21,
            ReduceEnemyHpByDamageChance = 22,
            BlockGoodEffect = 31,
            BlockGoodEffectNegated = 32,
            OnlyNormalAttacks = 41,
            OnlyNormalAttacksNegated = 42
        }

        public enum ArenaCamera : byte
        {
            CallParticipant1 = 11,

            CallParticipant2 =
                12, // propably we will need to fix "Their" Mistake soo CallParticipant1 = 11 and 12, CallParticipant2 = 21 and 22 :D

            CallParticipant2Negated = 21,
            CallParticipant2NegatedNegated = 22,
            CallParticipant3 = 31,
            CallParticipant3Negated = 32,
            SwitchView = 41,
            SwitchViewNegated = 42,
            SeeHiddenAllies = 51,
            SeeHiddenAlliesNegated = 52
        }

        public enum AttackPower : byte
        {
            AllAttacksIncreased = 11,
            AllAttacksDecreased = 12,
            MeleeAttacksIncreased = 21,
            MeleeAttacksDecreased = 22,
            RangedAttacksIncreased = 31,
            RangedAttacksDecreased = 32,
            MagicalAttacksIncreased = 41,
            MagicalAttacksDecreased = 42,
            AttackLevelIncreased = 51,
            AttackLevelDecreased = 52
        }

        public enum BearSpirit : byte
        {
            IncreaseMaximumMp = 11,
            DecreaseMaximumMp = 12,

            // Unknown = 21, Unknown2 = 22,
            IncreaseMaximumHp = 31,

            DecreaseMaximumHp = 32
        }

        public enum Block : byte
        {
            ChanceAllIncreased = 11,
            ChanceAllDecreased = 12,
            ChanceMeleeIncreased = 21,
            ChanceMeleeDecreased = 22,
            ChanceRangedIncreased = 31,
            ChanceRangedDecreased = 32,
            ChanceMagicalIncreased = 41,
            ChanceMagicalDecreased = 42
        }

        public enum BossMonstersSkill : byte
        {
            InflictDamageAfter = 11,
            InflictDamageAfterNegated = 12
        }

        public enum Buff : byte
        {
            ChanceCausing = 11,
            ChanceRemoving = 12,
            PreventingBadEffect = 21,
            PreventingBadEffectNegated = 22,
            NearbyObjectsAboveLevel = 31,
            NearbyObjectsBelowLevel = 32,
            EffectResistance = 41,
            EffectResistanceNegated = 42,
            CancelGroupOfEffects = 51,
            CounteractPoison = 52
        }

        public enum CalculatingLevel : byte
        {
            CalculatedAttackLevel = 11,
            CalculatedAttackLevelNegated = 12,
            CalculatedDefenceLevel = 21,
            CalculatedDefenceLevelNegated = 22
        }

        public enum Capture : byte
        {
            CaptureAnimal = 11,
            CaptureAnimalNegated = 12
        }

        public enum Casting : byte
        {
            EffectDurationIncreased = 11,
            EffectDurationDecreased = 12,
            ManaForSkillsIncreased = 21,
            ManaForSkillsDecreased = 22,
            AttackSpeedIncreased = 31,
            AttackSpeedDecreased = 32,
            CastingSkillFailed = 41,
            CastingSkillFailedNegated = 42,
            InterruptCasting = 51,
            InterruptCastingNegated = 52
        }

        public enum Count : byte
        {
            Summon = 11,
            SummonChance = 12
        }

        public enum Critical : byte
        {
            InflictingIncreased = 11,
            InflictingReduced = 12,
            DamageIncreased = 21,
            DamageIncreasedInflictingReduced = 22,
            DamageIncreasingPropability = 31,
            DamageReducingPropability = 32,
            ReceivingIncreased = 41,
            ReceivingDecreased = 42,
            DamageFromCriticalIncreased = 51,
            DamageFromCriticalDecreased = 52
        }

        public enum Damage : byte
        {
            DamageIncreased = 11,
            DamageDecreased = 12,
            MeleeIncreased = 21,
            MeleeDecreased = 22,
            RangedIncreased = 31,
            RangedDecreased = 32,
            MagicalIncreased = 41,
            MagicalDecreased = 42
        }

        public enum DamageConvertingSkill : byte
        {
            TransferInflictedDamage = 11,
            TransferInflictedDamageNegated = 12,
            IncreaseDamageTransfered = 21,
            DecreaseDamageTransfered = 22,
            HpRecoveryIncreased = 31,
            HpRecoveryDecreased = 32,
            AdditionalDamageCombo = 41,
            AdditionalDamageComboNegated = 42,
            ReflectMaximumReceivedDamage = 51,
            ReflectMaximumReceivedDamageNegated = 52
        }

        public enum DarkCloneSummon : byte
        {
            SummonDarkCloneChance = 11,
            SummonDarkCloneChanceNegated = 12,
            ConvertRecoveryToDamage = 21,
            ConvertRecoveryToDamageNegated = 22,
            ConvertDamageToHpChance = 31,
            ConvertDamageToHpChanceNegated = 32,
            IncreaseEnemyCooldownChance = 41,
            IncreaseEnemyCooldownChanceNegated = 42,
            DarkElementDamageIncreaseChance = 51,
            DarkElementDamageDecreaseChance = 52
        }

        public enum DebuffResistance : byte
        {
            IncreaseBadEffectChance = 11,
            NeverBadEffectChance = 12,
            IncreaseBadGeneralEffectChance = 21,
            NeverBadGeneralEffectChance = 22,
            IncreaseBadMagicEffectChance = 31,
            NeverBadMagicEffectChance = 32,
            IncreaseBadToxicEffectChance = 41,
            NeverBadToxicEffectChance = 42,
            IncreaseBadDiseaseEffectChance = 51,
            NeverBadDiseaseEffectChance = 52
        }

        public enum Defence : byte
        {
            AllIncreased = 11,
            AllDecreased = 12,
            MeleeIncreased = 21,
            MeleeDecreased = 22,
            RangedIncreased = 31,
            RangedDecreased = 32,
            MagicalIncreased = 41,
            MagicalDecreased = 42,
            DefenceLevelIncreased = 51,
            DefenceLevelDecreased = 52
        }

        public enum DodgeAndDefencePercent : byte
        {
            DodgeIncreased = 11,
            DodgeDecreased = 12,
            DodgingMeleeIncreased = 21,
            DodgingMeleeDecreased = 22,
            DodgingRangedIncreased = 31,
            DodgingRangedDecreased = 32,
            DefenceIncreased = 41,
            DefenceReduced = 42
        }

        public enum Drain : byte
        {
            CastDrain = 11,
            CastDrainNegated = 12,
            TransferEnemyHp = 21,
            TransferEnemyHpNegated = 22
        }

        // 21-40
        public enum DrainAndSteal : byte
        {
            ReceiveHpFromMp = 11,
            ReceiveHpFromMpNegated = 12,
            ReceiveMpFromHp = 21,
            ReceiveMpFromHpNegated = 22,
            GiveEnemyHp = 31,
            LeechEnemyHp = 32,
            GiveEnemyMp = 41,
            LeechEnemyMp = 42,
            ConvertEnemyMptoHp = 51,
            ConvertEnemyHptoMp = 52
        }

        public enum Element : byte
        {
            FireIncreased = 11,
            FireDecreased = 12,
            WaterIncreased = 21,
            WaterDecreased = 22,
            LightIncreased = 31,
            LightDecreased = 32,
            DarkIncreased = 41,
            DarkDecreased = 42,
            AllIncreased = 51,
            AllDecreased = 52
        }

        public enum ElementResistance : byte
        {
            AllIncreased = 11,
            AllDecreased = 12,
            FireIncreased = 21,
            FireDecreased = 22,
            WaterIncreased = 31,
            WaterDecreased = 32,
            LightIncreased = 41,
            LightDecreased = 42,
            DarkIncreased = 51,
            DarkDecreased = 52
        }

        public enum EnemyElementResistance : byte
        {
            AllIncreased = 11,
            AllDecreased = 12,
            FireIncreased = 21,
            FireDecreased = 22,
            WaterIncreased = 31,
            WaterDecreased = 32,
            LightIncreased = 41,
            LightDecreased = 42,
            DarkIncreased = 51,
            DarkDecreased = 52
        }

        public enum FairyXpIncrease : byte
        {
            TeleportToLocation = 11,
            TeleportToLocationNegated = 12,
            IncreaseFairyXpPoints = 21,
            IncreaseFairyXpPointsNegated = 22
        }

        public enum FalconSkill : byte
        {
            CausingChanceLocation = 11,
            RemovingChanceLocation = 12,
            Hide = 21,
            HideNegated = 22,
            Ambush = 31,
            AmbushNegated = 32,
            FalconFollowing = 41,
            FalconFollowingNegated = 42,
            FalconFocusLowestHp = 51,
            FalconFocusLowestHpNegated = 52
        }

        public enum FearSkill : byte
        {
            RestoreRemainingEnemyHp = 11,
            DecreaseRemainingEnemyHp = 12,
            TimesUsed = 21,
            TimesUsedNegated = 22,
            AttackRangedIncreased = 31,
            AttackRangedDecreased = 32,
            MoveAgainstWill = 41,
            MoveAgainstWillNegated = 42,
            ProduceWhenAmbushe = 51,
            ProduceWhenAmbushNegated = 52
        }

        public enum FireCannoneerRangeBuff : byte
        {
            AoeIncreased = 11,
            AoeDecreased = 12,
            Flinch = 21,
            FlinchNegated = 22
        }

        public enum FocusEnemyAttentionSkill : byte
        {
            FocusEnemyAttention = 11

            // Unknown = 12, Unknown2 = 21, Unknown3 = 22,
        }

        public enum FourthGlacernonFamilyRaid : byte
        {
            AllInFieldReceiveDamage = 11, // Look nearly the same as 12
            AllInFieldsReceiveDamage = 12 // Look nearly the same as 11
        }

        public enum FrozenDebuff : byte
        {
            MovementLocked = 11,
            MovementLockedNegated = 12

            // Unknown = 21, Unknown2 = 22
        }

        public enum GuarantedDodgeRangedAttack : byte
        {
            AttackHitChance = 11,
            AttackHitChanceNegated = 12,
            AlwaysDodgePropability = 21,
            AlwaysDodgePropabilityNegated = 22,
            NoPenatly = 41,
            DistanceDamageIncreasing = 41,
            NoPenatlyNegated = 42,
            DistanceDamageIncreasingNegated = 42
        }

        public enum HealingBurningAndCasting : byte
        {
            RestoreHp = 11,
            DecreaseHp = 12,
            RestoreMp = 21,
            DecreaseMp = 22,
            RestoreHpWhenCasting = 31,
            DecreaseHpWhenCasting = 32,
            RestoreHpWhenCastingInterrupted = 41,
            DecreaseHpWhenCastingInterrupted = 42,
            HpIncreasedByConsumingMp = 51,
            HpDecreasedByConsumingMp = 52
        }

        // 61-80
        /*public enum Missingno : byte
        {
            Unknown = 11,
            Unknown2 = 12
        }*/

        public enum HideBarrelSkill : byte
        {
            NoHpConsumption = 11,
            NoHpRecovery = 12
        }

        public enum Hpmp : byte
        {
            RestoreDecreasedHp = 11,
            DecreaseRemainingHp = 12,
            RestoreDecreasedMp = 21,
            DecreaseRemainingMp = 22,
            HpRestored = 31,
            HpReduced = 32,
            MpRestored = 41,
            MpReduced = 42,
            ReceiveAdditionalHp = 51,
            ReceiveAdditionalMp = 52
        }

        public enum HugeSnowman : byte
        {
            SnowStorm = 11,
     
Download .txt
gitextract_crxs70bx/

├── .coderabbit.yaml
├── .editorconfig
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── dependabot.yml
│   └── workflows/
│       └── dotnet.yml
├── .gitignore
├── CONTRIBUTING.md
├── Directory.Build.props
├── Directory.Packages.props
├── LICENSE
├── NosCore.sln
├── NosCore.sln.DotSettings
├── NosCore.sln.startup.json
├── NuGet.config
├── README.md
├── build/
│   └── .gitkeep
├── build-exe.cmd
├── build.cmd
├── codecov.yml
├── configuration/
│   ├── api.yml
│   ├── database.yml
│   ├── logger.yml
│   ├── login.yml
│   ├── master.yml
│   ├── parser.yml
│   └── world.yml
├── deploy/
│   ├── Dockerfile-login
│   ├── Dockerfile-master
│   └── Dockerfile-world
├── docker-compose.yml
├── documentation/
│   ├── PostmanCollection/
│   │   └── NosCore.postman_collection.json
│   └── dat/
│       ├── Card.dat.md
│       ├── Item.dat.md
│       ├── Skill.dat.md
│       ├── monster.dat.md
│       └── quest.dat.md
├── lgtm.yml
├── scripts/
│   ├── Docker - All.cmd
│   ├── Docker - LoginServer.cmd
│   ├── Docker - MasterServer.cmd
│   ├── Docker - Postgres.cmd
│   ├── Docker - ReverseProxy.cmd
│   ├── Docker - Shutdown.cmd
│   ├── Docker - WorldServer.cmd
│   ├── LoginServer.cmd
│   ├── MasterServer.cmd
│   ├── Parser.cmd
│   ├── WorldServer.cmd
│   └── docker-publish.sh
├── src/
│   ├── NosCore.Core/
│   │   ├── AuthorizeRoleAttribute.cs
│   │   ├── Channel.cs
│   │   ├── ChannelInfo.cs
│   │   ├── Concurrency/
│   │   │   └── AsyncLock.cs
│   │   ├── Configuration/
│   │   │   ├── LoginConfiguration.cs
│   │   │   └── WorldConfiguration.cs
│   │   ├── ConfigureJwtBearerOptions.cs
│   │   ├── ConnectionInfo.cs
│   │   ├── Encryption/
│   │   │   ├── BcryptEncryption.cs
│   │   │   ├── Pbkdf2Hasher.cs
│   │   │   └── Sha512Hasher.cs
│   │   ├── Extensions/
│   │   │   └── TypeExtension.cs
│   │   ├── I18N/
│   │   │   ├── GameLanguageLocalizer.cs
│   │   │   └── IGameLanguageLocalizer.cs
│   │   ├── NosCore.Core.csproj
│   │   ├── Observability/
│   │   │   └── NosCoreTelemetry.cs
│   │   ├── Services/
│   │   │   └── IdService/
│   │   │       ├── IIdService.cs
│   │   │       └── IdService.cs
│   │   └── SessionFactory.cs
│   ├── NosCore.Data/
│   │   ├── CommandPackets/
│   │   │   ├── ChangeChannelPacket.cs
│   │   │   ├── ChangeClassPacket.cs
│   │   │   ├── ChangeGenderPacket.cs
│   │   │   ├── ClearInventoryPacket.cs
│   │   │   ├── CommandPacketHeaderAttribute.cs
│   │   │   ├── CreateItemPacket.cs
│   │   │   ├── EffectCommandPacket.cs
│   │   │   ├── EntryPointPacket.cs
│   │   │   ├── FlCommandPacket.cs
│   │   │   ├── GiftPacket.cs
│   │   │   ├── HelpPacket.cs
│   │   │   ├── ICommandPacket.cs
│   │   │   ├── InvisibleCommandPacket.cs
│   │   │   ├── KickPacket.cs
│   │   │   ├── KillPacket.cs
│   │   │   ├── PositionPacket.cs
│   │   │   ├── SetBankGoldPacket.cs
│   │   │   ├── SetGoldCommandPacket.cs
│   │   │   ├── SetHairColorPacket.cs
│   │   │   ├── SetHairStylePacket.cs
│   │   │   ├── SetHeroLevelCommandPacket.cs
│   │   │   ├── SetHeroXpPacket.cs
│   │   │   ├── SetJobLevelCommandPacket.cs
│   │   │   ├── SetJobLevelXpPacket.cs
│   │   │   ├── SetLevelCommandPacket.cs
│   │   │   ├── SetMaintenancePacket.cs
│   │   │   ├── SetReputationPacket.cs
│   │   │   ├── SetSpAdditionPointPacket.cs
│   │   │   ├── SetSpPointPacket.cs
│   │   │   ├── ShoutHerePacket.cs
│   │   │   ├── ShoutPacket.cs
│   │   │   ├── SizePacket.cs
│   │   │   ├── SpeedPacket.cs
│   │   │   └── TeleportPacket.cs
│   │   ├── DataAttributes/
│   │   │   └── StaticMetaDataAttribute.cs
│   │   ├── Dto/
│   │   │   ├── I18NFromAttribute.cs
│   │   │   ├── I18NString.cs
│   │   │   ├── IDTO.cs
│   │   │   ├── II18NDto.cs
│   │   │   ├── IItemInstanceDto.cs
│   │   │   ├── IStaticDto.cs
│   │   │   └── StaticDtoExtension.cs
│   │   ├── Enumerations/
│   │   │   ├── Audit/
│   │   │   │   └── AuditLogType.cs
│   │   │   ├── Battle/
│   │   │   │   └── TargetHitType.cs
│   │   │   ├── Bazaar/
│   │   │   │   ├── BazaarEquipmentType.cs
│   │   │   │   ├── BazaarJeweleryType.cs
│   │   │   │   ├── BazaarMainType.cs
│   │   │   │   └── BazaarUsableType.cs
│   │   │   ├── Buff/
│   │   │   │   ├── AdditionalTypes.cs
│   │   │   │   ├── BCardType.cs
│   │   │   │   ├── BuffType.cs
│   │   │   │   ├── MedalType.cs
│   │   │   │   ├── ShellOptionType.cs
│   │   │   │   └── StaticBonusType.cs
│   │   │   ├── Character/
│   │   │   │   ├── CharacterOption.cs
│   │   │   │   ├── CharacterState.cs
│   │   │   │   ├── FactionType.cs
│   │   │   │   └── MateType.cs
│   │   │   ├── Event/
│   │   │   │   ├── EventActionType.cs
│   │   │   │   └── EventType.cs
│   │   │   ├── Family/
│   │   │   │   ├── FamilyAuthority.cs
│   │   │   │   ├── FamilyLogType.cs
│   │   │   │   └── FamilyMemberRank.cs
│   │   │   ├── Group/
│   │   │   │   ├── GroupSharingType.cs
│   │   │   │   └── GroupType.cs
│   │   │   ├── HashingType.cs
│   │   │   ├── I18N/
│   │   │   │   └── LanguageKey.cs
│   │   │   ├── Interaction/
│   │   │   │   ├── Act4RaidType.cs
│   │   │   │   ├── ArenaTeamType.cs
│   │   │   │   ├── ChatType.cs
│   │   │   │   ├── GeneralLogType.cs
│   │   │   │   ├── InRespawnType.cs
│   │   │   │   ├── PenaltyType.cs
│   │   │   │   ├── ReceiverType.cs
│   │   │   │   ├── RespawnType.cs
│   │   │   │   ├── ScriptedInstanceType.cs
│   │   │   │   ├── TalentArenaOptionType.cs
│   │   │   │   └── TeleporterType.cs
│   │   │   ├── Items/
│   │   │   │   ├── CellonType.cs
│   │   │   │   ├── ItemEffectType.cs
│   │   │   │   ├── ItemType.cs
│   │   │   │   ├── JewelOptionType.cs
│   │   │   │   ├── RarifyMode.cs
│   │   │   │   ├── RarifyProtection.cs
│   │   │   │   ├── UpgradeMode.cs
│   │   │   │   └── UpgradeProtection.cs
│   │   │   ├── Map/
│   │   │   │   ├── MapInstanceEventType.cs
│   │   │   │   ├── MapInstanceType.cs
│   │   │   │   ├── MapTypeType.cs
│   │   │   │   └── MonsterType.cs
│   │   │   ├── Miniland/
│   │   │   │   └── WarehouseType.cs
│   │   │   ├── NoscorePocketType.cs
│   │   │   ├── Quest/
│   │   │   │   └── QuestRewardType.cs
│   │   │   ├── SaveResult.cs
│   │   │   └── UpdateStatActionType.cs
│   │   ├── GameObjectMapper.cs
│   │   ├── NosCore.Data.csproj
│   │   ├── Resource/
│   │   │   ├── LocalizedResources.Designer.cs
│   │   │   ├── LocalizedResources.cs.resx
│   │   │   ├── LocalizedResources.de.resx
│   │   │   ├── LocalizedResources.es.resx
│   │   │   ├── LocalizedResources.fr.resx
│   │   │   ├── LocalizedResources.it.resx
│   │   │   ├── LocalizedResources.pl.resx
│   │   │   ├── LocalizedResources.resx
│   │   │   ├── LocalizedResources.ru.resx
│   │   │   └── LocalizedResources.tr.resx
│   │   └── WebApi/
│   │       ├── AuthIntent.cs
│   │       ├── BazaarLink.cs
│   │       ├── BazaarRequest.cs
│   │       ├── BlacklistRequest.cs
│   │       ├── Character.cs
│   │       ├── CharacterRelationStatus.cs
│   │       ├── FriendShipRequest.cs
│   │       ├── MailRequest.cs
│   │       ├── Subscriber.cs
│   │       ├── WareHouseDepositRequest.cs
│   │       └── WarehouseLink.cs
│   ├── NosCore.Database/
│   │   ├── DesignTimeDbContextFactory.cs
│   │   ├── Entities/
│   │   │   ├── Account.cs
│   │   │   ├── Act.cs
│   │   │   ├── ActPart.cs
│   │   │   ├── AuditLog.cs
│   │   │   ├── BCard.cs
│   │   │   ├── Base/
│   │   │   │   ├── I18NStringAttribute.cs
│   │   │   │   ├── IEntity.cs
│   │   │   │   ├── IStaticEntity.cs
│   │   │   │   └── SynchronizableBaseEntity.cs
│   │   │   ├── BazaarItem.cs
│   │   │   ├── BoxInstance.cs
│   │   │   ├── Card.cs
│   │   │   ├── Character.cs
│   │   │   ├── CharacterActPart.cs
│   │   │   ├── CharacterQuest.cs
│   │   │   ├── CharacterQuestObjective.cs
│   │   │   ├── CharacterRelation.cs
│   │   │   ├── Characterskill.cs
│   │   │   ├── Combo.cs
│   │   │   ├── Drop.cs
│   │   │   ├── EquipmentOption.cs
│   │   │   ├── Family.cs
│   │   │   ├── FamilyCharacter.cs
│   │   │   ├── FamilyLog.cs
│   │   │   ├── I18NActDesc.cs
│   │   │   ├── I18NBCard.cs
│   │   │   ├── I18NCard.cs
│   │   │   ├── I18NItem.cs
│   │   │   ├── I18NMapIdData.cs
│   │   │   ├── I18NMapPointData.cs
│   │   │   ├── I18NNpcMonster.cs
│   │   │   ├── I18NNpcMonsterTalk.cs
│   │   │   ├── I18NQuest.cs
│   │   │   ├── I18NSkill.cs
│   │   │   ├── InventoryItemInstance.cs
│   │   │   ├── Item.cs
│   │   │   ├── ItemInstance.cs
│   │   │   ├── Mail.cs
│   │   │   ├── Map.cs
│   │   │   ├── MapMonster.cs
│   │   │   ├── MapNpc.cs
│   │   │   ├── MapType.cs
│   │   │   ├── MapTypeMap.cs
│   │   │   ├── Mate.cs
│   │   │   ├── Miniland.cs
│   │   │   ├── MinilandObject.cs
│   │   │   ├── NpcMonster.cs
│   │   │   ├── NpcMonsterskill.cs
│   │   │   ├── NpcTalk.cs
│   │   │   ├── PenaltyLog.cs
│   │   │   ├── Portal.cs
│   │   │   ├── Quest.cs
│   │   │   ├── QuestObjective.cs
│   │   │   ├── QuestQuestReward.cs
│   │   │   ├── QuestReward.cs
│   │   │   ├── QuicklistEntry.cs
│   │   │   ├── Recipe.cs
│   │   │   ├── RecipeItem.cs
│   │   │   ├── Respawn.cs
│   │   │   ├── RespawnMapType.cs
│   │   │   ├── RollGeneratedItem.cs
│   │   │   ├── Script.cs
│   │   │   ├── ScriptedInstance.cs
│   │   │   ├── Shop.cs
│   │   │   ├── ShopItem.cs
│   │   │   ├── Shopskill.cs
│   │   │   ├── Skill.cs
│   │   │   ├── SpecialistInstance.cs
│   │   │   ├── StaticBonus.cs
│   │   │   ├── StaticBuff.cs
│   │   │   ├── Teleporter.cs
│   │   │   ├── Title.cs
│   │   │   ├── UsableInstance.cs
│   │   │   ├── Warehouse.cs
│   │   │   ├── WarehouseItem.cs
│   │   │   └── WearableInstance.cs
│   │   ├── Hosting/
│   │   │   └── PersistenceModule.cs
│   │   ├── Migrations/
│   │   │   ├── 20220103074410_FirstMigration.Designer.cs
│   │   │   ├── 20220103074410_FirstMigration.cs
│   │   │   ├── 20231125092440_BumpToEf8.Designer.cs
│   │   │   ├── 20231125092440_BumpToEf8.cs
│   │   │   ├── 20260420121955_AddCharacterQuestObjective.Designer.cs
│   │   │   ├── 20260420121955_AddCharacterQuestObjective.cs
│   │   │   ├── 20260420231052_AddNpcMonsterCanWalk.Designer.cs
│   │   │   ├── 20260420231052_AddNpcMonsterCanWalk.cs
│   │   │   ├── 20260421034800_ParseMonsterDatExtras.Designer.cs
│   │   │   ├── 20260421034800_ParseMonsterDatExtras.cs
│   │   │   ├── 20260421054001_AddBCardSlot.Designer.cs
│   │   │   ├── 20260421054001_AddBCardSlot.cs
│   │   │   ├── 20260421070126_AddMountAndRaidPockets.Designer.cs
│   │   │   ├── 20260421070126_AddMountAndRaidPockets.cs
│   │   │   ├── 20260421105756_DropMapMonsterIsMoving.Designer.cs
│   │   │   ├── 20260421105756_DropMapMonsterIsMoving.cs
│   │   │   ├── 20260421112205_ParseExtraNpcMonsterColumns.Designer.cs
│   │   │   ├── 20260421112205_ParseExtraNpcMonsterColumns.cs
│   │   │   ├── 20260424144528_AddMateCaptureItemEffect.Designer.cs
│   │   │   ├── 20260424144528_AddMateCaptureItemEffect.cs
│   │   │   └── NosCoreContextModelSnapshot.cs
│   │   ├── NosCore.Database.csproj
│   │   └── NosCoreContext.cs
│   ├── NosCore.GameObject/
│   │   ├── Ecs/
│   │   │   ├── Attributes/
│   │   │   │   └── ComponentBundleAttribute.cs
│   │   │   ├── Components/
│   │   │   │   ├── AggroComponent.cs
│   │   │   │   ├── AppearanceComponent.cs
│   │   │   │   ├── BuffStateComponent.cs
│   │   │   │   ├── CombatComponent.cs
│   │   │   │   ├── EffectComponent.cs
│   │   │   │   ├── EntityIdentityComponent.cs
│   │   │   │   ├── ExperienceComponent.cs
│   │   │   │   ├── GoldComponent.cs
│   │   │   │   ├── HealthComponent.cs
│   │   │   │   ├── ManaComponent.cs
│   │   │   │   ├── MapItemDataComponent.cs
│   │   │   │   ├── NameComponent.cs
│   │   │   │   ├── NpcDataComponent.cs
│   │   │   │   ├── NpcMovementComponent.cs
│   │   │   │   ├── NpcStateComponent.cs
│   │   │   │   ├── PlayerComponent.cs
│   │   │   │   ├── PlayerContextComponent.cs
│   │   │   │   ├── PlayerFlagsComponent.cs
│   │   │   │   ├── PlayerInventoryComponent.cs
│   │   │   │   ├── PlayerNetworkComponent.cs
│   │   │   │   ├── PlayerRequestsComponent.cs
│   │   │   │   ├── PlayerSocialComponent.cs
│   │   │   │   ├── PlayerStateComponent.cs
│   │   │   │   ├── PositionComponent.cs
│   │   │   │   ├── ReputationComponent.cs
│   │   │   │   ├── SkillCooldownComponent.cs
│   │   │   │   ├── SpComponent.cs
│   │   │   │   ├── SpawnComponent.cs
│   │   │   │   ├── SpeedComponent.cs
│   │   │   │   ├── TimingComponent.cs
│   │   │   │   └── VisualComponent.cs
│   │   │   ├── DignityLevels.cs
│   │   │   ├── Extensions/
│   │   │   │   ├── AliveEntityExtension.cs
│   │   │   │   ├── CharacterEntityExtension.cs
│   │   │   │   ├── GroupExtension.cs
│   │   │   │   ├── ItemInstanceExtension.cs
│   │   │   │   ├── MapItemBundleExtensions.cs
│   │   │   │   ├── MonsterBundleExtensions.cs
│   │   │   │   ├── NonPlayableEntityExtension.cs
│   │   │   │   ├── NpcBundleExtensions.cs
│   │   │   │   ├── NpcInfoExtensions.cs
│   │   │   │   ├── PlayerBundleExtensions.cs
│   │   │   │   └── VisualEntityExtension.cs
│   │   │   ├── Interfaces/
│   │   │   │   ├── IAliveEntity.cs
│   │   │   │   ├── ICharacterEntity.cs
│   │   │   │   ├── INamedEntity.cs
│   │   │   │   ├── INonPlayableEntity.cs
│   │   │   │   └── IVisualEntity.cs
│   │   │   ├── MapItemComponentBundle.cs
│   │   │   ├── MapWorld.cs
│   │   │   ├── MonsterComponentBundle.cs
│   │   │   ├── NpcComponentBundle.cs
│   │   │   ├── PlayerComponentBundle.cs
│   │   │   ├── ReputationLevels.cs
│   │   │   └── Systems/
│   │   │       ├── MovementSystem.cs
│   │   │       └── VisibilitySystem.cs
│   │   ├── Hosting/
│   │   │   └── Modules/
│   │   │       └── NetworkingModule.cs
│   │   ├── Infastructure/
│   │   │   ├── IPacketHandler.cs
│   │   │   └── ISingletonService.cs
│   │   ├── InterChannelCommunication/
│   │   │   ├── HubConnectionFactory.cs
│   │   │   ├── Hubs/
│   │   │   │   ├── AuthHub/
│   │   │   │   │   ├── AuthHub.cs
│   │   │   │   │   ├── AuthHubClient.cs
│   │   │   │   │   └── IAuthHub.cs
│   │   │   │   ├── BaseHubClient.cs
│   │   │   │   ├── BazaarHub/
│   │   │   │   │   ├── BazaarHub.cs
│   │   │   │   │   ├── BazaarHubClient.cs
│   │   │   │   │   └── IBazaarHub.cs
│   │   │   │   ├── BlacklistHub/
│   │   │   │   │   ├── BlacklistHub.cs
│   │   │   │   │   ├── BlacklistHubClient.cs
│   │   │   │   │   └── IBlacklistHub.cs
│   │   │   │   ├── ChannelHub/
│   │   │   │   │   ├── ChannelHub.cs
│   │   │   │   │   ├── ChannelHubClient.cs
│   │   │   │   │   └── IChannelHub.cs
│   │   │   │   ├── FriendHub/
│   │   │   │   │   ├── FriendHub.cs
│   │   │   │   │   ├── FriendHubClient.cs
│   │   │   │   │   └── IFriendHub.cs
│   │   │   │   ├── MailHub/
│   │   │   │   │   ├── IMailHub.cs
│   │   │   │   │   ├── MailHub.cs
│   │   │   │   │   └── MailHubClient.cs
│   │   │   │   ├── PubSub/
│   │   │   │   │   ├── IPubSubHub.cs
│   │   │   │   │   ├── PubSubHub.cs
│   │   │   │   │   └── PubSubHubClient.cs
│   │   │   │   └── WarehouseHub/
│   │   │   │       ├── IWarehouseHub.cs
│   │   │   │       ├── WarehouseHub.cs
│   │   │   │       └── WarehouseHubClient.cs
│   │   │   ├── MasterClientList.cs
│   │   │   ├── Messages/
│   │   │   │   ├── DeleteMailData.cs
│   │   │   │   ├── DisconnectData.cs
│   │   │   │   ├── IMessage.cs
│   │   │   │   ├── MailData.cs
│   │   │   │   ├── PostedPacket.cs
│   │   │   │   └── StatData.cs
│   │   │   └── PolymorphicConverter.cs
│   │   ├── Map/
│   │   │   ├── Map.cs
│   │   │   └── Portal.cs
│   │   ├── Messaging/
│   │   │   ├── Events/
│   │   │   │   ├── CharacterMovedEvent.cs
│   │   │   │   ├── EntityCapturedEvent.cs
│   │   │   │   ├── EntityDamagedEvent.cs
│   │   │   │   ├── EntityDiedEvent.cs
│   │   │   │   ├── GuriPacketReceivedEvent.cs
│   │   │   │   ├── ItemUsedEvent.cs
│   │   │   │   ├── MapInstanceEnteredEvent.cs
│   │   │   │   ├── MapItemPickedUpEvent.cs
│   │   │   │   └── QuestCompletedEvent.cs
│   │   │   ├── Handlers/
│   │   │   │   ├── Battle/
│   │   │   │   │   ├── DeathBCardHandler.cs
│   │   │   │   │   ├── MonsterAggroHandler.cs
│   │   │   │   │   ├── MonsterRespawnHandler.cs
│   │   │   │   │   ├── PlayerRevivalHandler.cs
│   │   │   │   │   └── RewardDistributionHandler.cs
│   │   │   │   ├── Guri/
│   │   │   │   │   ├── EmoticonHandler.cs
│   │   │   │   │   ├── MfaHandler.cs
│   │   │   │   │   ├── SpeakerHandler.cs
│   │   │   │   │   └── TitleHandler.cs
│   │   │   │   ├── Map/
│   │   │   │   │   └── MinilandEntranceHandler.cs
│   │   │   │   ├── MapItem/
│   │   │   │   │   ├── DropHandler.cs
│   │   │   │   │   ├── GoldDropHandler.cs
│   │   │   │   │   └── SpChargerHandler.cs
│   │   │   │   ├── Nrun/
│   │   │   │   │   ├── BazaarHandler.cs
│   │   │   │   │   ├── CellonItemHandler.cs
│   │   │   │   │   ├── ChangeClassHandler.cs
│   │   │   │   │   ├── FinishedTsDialogHandler.cs
│   │   │   │   │   ├── INrunEventHandler.cs
│   │   │   │   │   ├── OpenProductionHandler.cs
│   │   │   │   │   ├── OpenShopHandler.cs
│   │   │   │   │   ├── SetPlaceOfRevivalHandler.cs
│   │   │   │   │   ├── TeleporterHandler.cs
│   │   │   │   │   └── UpgradeItemHandler.cs
│   │   │   │   ├── Quest/
│   │   │   │   │   ├── OnCharacterMovedHandler.cs
│   │   │   │   │   ├── OnEntityCapturedHandler.cs
│   │   │   │   │   ├── OnEntityDiedHandler.cs
│   │   │   │   │   └── OnQuestCompletedHandler.cs
│   │   │   │   └── UseItem/
│   │   │   │       ├── BackPackHandler.cs
│   │   │   │       ├── BazaarMedalsHandler.cs
│   │   │   │       ├── BoxEffectHandler.cs
│   │   │   │       ├── ChangeGenderHandler.cs
│   │   │   │       ├── HairDieHandler.cs
│   │   │   │       ├── MinilandBellHandler.cs
│   │   │   │       ├── PetBasketHandler.cs
│   │   │   │       ├── SealedTarotCardHandler.cs
│   │   │   │       ├── SpRechargerHandler.cs
│   │   │   │       ├── SpeakerHandler.cs
│   │   │   │       ├── TitleHandler.cs
│   │   │   │       ├── VehicleHandler.cs
│   │   │   │       └── WearHandler.cs
│   │   │   ├── RecurringMessagePublisher.cs
│   │   │   ├── ScheduledJobs/
│   │   │   │   ├── RemoveTimeoutStaticBonusesHandler.cs
│   │   │   │   ├── RemoveTimeoutStaticBonusesMessage.cs
│   │   │   │   ├── SaveAllSessionsHandler.cs
│   │   │   │   └── SaveAllSessionsMessage.cs
│   │   │   ├── WolverineDependencyRegistrar.cs
│   │   │   └── WolverineHostExtensions.cs
│   │   ├── Networking/
│   │   │   ├── Broadcaster.cs
│   │   │   └── ClientSession/
│   │   │       ├── ClientSession.cs
│   │   │       ├── DisconnectHandlers/
│   │   │       │   ├── ExchangeDisconnectHandler.cs
│   │   │       │   ├── FriendNotificationDisconnectHandler.cs
│   │   │       │   ├── MapDisconnectHandler.cs
│   │   │       │   ├── MinilandDisconnectHandler.cs
│   │   │       │   └── SaveDisconnectHandler.cs
│   │   │       ├── IPacketHandlingStrategy.cs
│   │   │       ├── ISessionDisconnectHandler.cs
│   │   │       ├── LoginPacketHandlingStrategy.cs
│   │   │       ├── NpcDialogRequestSubject.cs
│   │   │       ├── RequestData.cs
│   │   │       └── WorldPacketHandlingStrategy.cs
│   │   ├── NosCore.GameObject.csproj
│   │   └── Services/
│   │       ├── AuthService/
│   │       │   ├── AuthCodeService.cs
│   │       │   └── IAuthCodeService.cs
│   │       ├── BattleService/
│   │       │   ├── AggroService.cs
│   │       │   ├── BattleService.cs
│   │       │   ├── BattleStatsProvider.cs
│   │       │   ├── BuffService.cs
│   │       │   ├── CaptureService.cs
│   │       │   ├── CharacterSkill.cs
│   │       │   ├── DamageCalculator.cs
│   │       │   ├── DamageResult.cs
│   │       │   ├── HitArguments.cs
│   │       │   ├── HitQueue.cs
│   │       │   ├── IAggroService.cs
│   │       │   ├── IBattleService.cs
│   │       │   ├── IBattleStatsProvider.cs
│   │       │   ├── IBuffService.cs
│   │       │   ├── ICaptureService.cs
│   │       │   ├── IDamageCalculator.cs
│   │       │   ├── IHitQueue.cs
│   │       │   ├── IMonsterAi.cs
│   │       │   ├── INpcCombatCatalog.cs
│   │       │   ├── IRandomProvider.cs
│   │       │   ├── IRegenerationService.cs
│   │       │   ├── IRespawnService.cs
│   │       │   ├── IRewardService.cs
│   │       │   ├── ISkillResolver.cs
│   │       │   ├── ITargetResolver.cs
│   │       │   ├── Model/
│   │       │   │   ├── BuffInstance.cs
│   │       │   │   ├── CombatStats.cs
│   │       │   │   ├── HitOutcome.cs
│   │       │   │   ├── HitRequest.cs
│   │       │   │   └── SkillInfo.cs
│   │       │   ├── MonsterAi.cs
│   │       │   ├── NpcCombatCatalog.cs
│   │       │   ├── RegenerationService.cs
│   │       │   ├── RespawnService.cs
│   │       │   ├── RewardService.cs
│   │       │   ├── SkillResolver.cs
│   │       │   ├── SkillResult.cs
│   │       │   └── TargetResolver.cs
│   │       ├── BazaarService/
│   │       │   ├── BazaarRegistry.cs
│   │       │   ├── BazaarService.cs
│   │       │   ├── IBazaarRegistry.cs
│   │       │   └── IBazaarService.cs
│   │       ├── BlackListService/
│   │       │   ├── BlacklistService.cs
│   │       │   └── IBlacklistService.cs
│   │       ├── BroadcastService/
│   │       │   ├── IPacketBroadcaster.cs
│   │       │   ├── IPacketSender.cs
│   │       │   ├── IPacketTarget.cs
│   │       │   ├── ISessionRegistry.cs
│   │       │   ├── PacketBroadcaster.cs
│   │       │   └── SessionRegistry.cs
│   │       ├── ChannelCommunicationService/
│   │       │   ├── ChannelCommunicationRunner.cs
│   │       │   └── Handlers/
│   │       │       ├── DeleteMailDataMessageChannelCommunicationMessageHandler.cs
│   │       │       ├── DisconnectDataMessageChannelCommunicationMessageHandler.cs
│   │       │       ├── IChannelCommunicationMessageHandler.cs
│   │       │       ├── MailDataMessageChannelCommunicationMessageHandler.cs
│   │       │       ├── PostedPacketMessageChannelCommunicationMessageHandler.cs
│   │       │       └── StatDataMessageChannelCommunicationMessageHandler.cs
│   │       ├── ChannelService/
│   │       │   ├── ChannelService.cs
│   │       │   └── IChannelService.cs
│   │       ├── CharacterService/
│   │       │   ├── CharacterInitializationService.cs
│   │       │   └── ICharacterInitializationService.cs
│   │       ├── ExchangeService/
│   │       │   ├── ExchangeData.cs
│   │       │   ├── ExchangeRequestRegistry.cs
│   │       │   ├── ExchangeService.cs
│   │       │   ├── IExchangeRequestRegistry.cs
│   │       │   └── IExchangeService.cs
│   │       ├── ExperienceService/
│   │       │   ├── ExperienceProgressionService.cs
│   │       │   └── IExperienceProgressionService.cs
│   │       ├── FriendService/
│   │       │   ├── CharacterRelation.cs
│   │       │   ├── FriendRequestRegistry.cs
│   │       │   ├── FriendService.cs
│   │       │   ├── IFriendRequestRegistry.cs
│   │       │   └── IFriendService.cs
│   │       ├── GroupService/
│   │       │   ├── Group.cs
│   │       │   ├── GroupRegistry.cs
│   │       │   └── IGroupRegistry.cs
│   │       ├── InventoryService/
│   │       │   ├── IInventoryService.cs
│   │       │   ├── InventoryItemInstance.cs
│   │       │   └── InventoryService.cs
│   │       ├── ItemGenerationService/
│   │       │   ├── IItemGenerationService.cs
│   │       │   ├── Item/
│   │       │   │   ├── BoxInstance.cs
│   │       │   │   ├── IItemInstance.cs
│   │       │   │   ├── Item.cs
│   │       │   │   ├── ItemInstance.cs
│   │       │   │   ├── SpecialistInstance.cs
│   │       │   │   ├── UsableInstance.cs
│   │       │   │   └── WearableInstance.cs
│   │       │   └── ItemGenerationService.cs
│   │       ├── ItemStorage/
│   │       │   ├── ISlotBasedStorage.cs
│   │       │   ├── ISlotItem.cs
│   │       │   └── SlotStorageHelper.cs
│   │       ├── LoginService/
│   │       │   ├── ILoginService.cs
│   │       │   └── LoginService.cs
│   │       ├── MailService/
│   │       │   ├── Gift.cs
│   │       │   ├── GiftHelper.cs
│   │       │   ├── IMailService.cs
│   │       │   ├── IParcelRegistry.cs
│   │       │   ├── MailService.cs
│   │       │   └── ParcelRegistry.cs
│   │       ├── MapChangeService/
│   │       │   ├── IMapChangeService.cs
│   │       │   └── MapChangeService.cs
│   │       ├── MapInstanceAccessService/
│   │       │   ├── IMapInstanceAccessService.cs
│   │       │   └── MapInstanceAccessService.cs
│   │       ├── MapInstanceGenerationService/
│   │       │   ├── IMapInstanceGenerationService.cs
│   │       │   ├── IMapInstanceRegistry.cs
│   │       │   ├── MapInstance.cs
│   │       │   ├── MapInstanceGenerationService.cs
│   │       │   └── MapInstanceRegistry.cs
│   │       ├── MapItemGenerationService/
│   │       │   ├── IMapItemGenerationService.cs
│   │       │   └── MapItemGenerationService.cs
│   │       ├── MinilandService/
│   │       │   ├── IMinilandRegistry.cs
│   │       │   ├── IMinilandService.cs
│   │       │   ├── MapDesignObject.cs
│   │       │   ├── Miniland.cs
│   │       │   ├── MinilandHelper.cs
│   │       │   ├── MinilandRegistry.cs
│   │       │   └── MinilandService.cs
│   │       ├── PacketHandlerService/
│   │       │   ├── IPacketHandlerRegistry.cs
│   │       │   └── PacketHandlerRegistry.cs
│   │       ├── PathfindingService/
│   │       │   ├── IPathfindingService.cs
│   │       │   └── PathfindingService.cs
│   │       ├── QuestService/
│   │       │   ├── Handlers/
│   │       │   │   ├── GoToQuestHandler.cs
│   │       │   │   ├── HuntQuestHandler.cs
│   │       │   │   ├── KillQuestHandlerBase.cs
│   │       │   │   └── NumberOfKillQuestHandler.cs
│   │       │   ├── IQuestService.cs
│   │       │   ├── IQuestTypeHandler.cs
│   │       │   ├── Quest.cs
│   │       │   └── QuestService.cs
│   │       ├── SaveService/
│   │       │   ├── ISaveService.cs
│   │       │   └── SaveService.cs
│   │       ├── ShopService/
│   │       │   ├── IShopRegistry.cs
│   │       │   ├── Shop.cs
│   │       │   ├── ShopItem.cs
│   │       │   └── ShopRegistry.cs
│   │       ├── SkillService/
│   │       │   ├── ISkillService.cs
│   │       │   └── SkillService.cs
│   │       ├── SpeedCalculationService/
│   │       │   ├── ISpeedCalculationService.cs
│   │       │   └── SpeedCalculationService.cs
│   │       ├── TransformationService/
│   │       │   ├── ITransformationService.cs
│   │       │   └── TransformationService.cs
│   │       ├── UpgradeService/
│   │       │   ├── EquipmentUpgradeOperationBase.cs
│   │       │   ├── IRandomNumberSource.cs
│   │       │   ├── IUpgradeOperation.cs
│   │       │   ├── RarifyOperation.cs
│   │       │   ├── RarifyOperationBase.cs
│   │       │   ├── SumUpgradeOperation.cs
│   │       │   ├── UpgradeContext.cs
│   │       │   ├── UpgradeItemOperation.cs
│   │       │   ├── UpgradeOperation.cs
│   │       │   └── UpgradeOutcome.cs
│   │       └── WarehouseService/
│   │           ├── IWarehouseService.cs
│   │           ├── WarehouseItem.cs
│   │           └── WarehouseService.cs
│   ├── NosCore.LoginServer/
│   │   ├── LoginServer.cs
│   │   ├── LoginServerBootstrap.cs
│   │   └── NosCore.LoginServer.csproj
│   ├── NosCore.MasterServer/
│   │   ├── MasterConfiguration.cs
│   │   ├── MasterServer.cs
│   │   ├── MasterServerBootstrap.cs
│   │   └── NosCore.MasterServer.csproj
│   ├── NosCore.PacketHandlers/
│   │   ├── Battle/
│   │   │   ├── RevivalPacketHandler.cs
│   │   │   └── UseSkillPacketHandler.cs
│   │   ├── Bazaar/
│   │   │   ├── CBListPacketHandler.cs
│   │   │   ├── CBuyPacketHandler.cs
│   │   │   ├── CModPacketHandler.cs
│   │   │   ├── CRegPacketHandler.cs
│   │   │   ├── CSListPacketHandler.cs
│   │   │   ├── CScalcPacketHandler.cs
│   │   │   └── CSkillPacketHandler.cs
│   │   ├── CharacterScreen/
│   │   │   ├── CharNewJobPacketHandler.cs
│   │   │   ├── CharNewPacketHandler.cs
│   │   │   ├── CharRenPacketHandler.cs
│   │   │   ├── CharacterDeletePacketHandler.cs
│   │   │   ├── DacPacketHandler.cs
│   │   │   ├── EntryPointPacketHandler.cs
│   │   │   └── SelectPacketHandler.cs
│   │   ├── Chat/
│   │   │   ├── BtkPacketHandler.cs
│   │   │   ├── ClientSayPacketHandler.cs
│   │   │   └── WhisperPacketHandler.cs
│   │   ├── Command/
│   │   │   ├── ChangeChannelPacketHandler.cs
│   │   │   ├── ChangeClassPacketHandler.cs
│   │   │   ├── ChangeGenderPacketHandler.cs
│   │   │   ├── CreateItemPacketHandler.cs
│   │   │   ├── EffectCommandPacketHandler.cs
│   │   │   ├── GiftPacketHandler.cs
│   │   │   ├── HelpPacketHandler.cs
│   │   │   ├── InvisibleCommandPacketHandler.cs
│   │   │   ├── KickPacketHandler.cs
│   │   │   ├── KillCommandPacketHandler.cs
│   │   │   ├── PositionPacketHandler.cs
│   │   │   ├── SetBankGoldPacketHandler.cs
│   │   │   ├── SetGoldCommandPacketHandler.cs
│   │   │   ├── SetHairColorPacketHandler.cs
│   │   │   ├── SetHairStylePacketHandler.cs
│   │   │   ├── SetHeroLevelCommandPacketHandler.cs
│   │   │   ├── SetHeroXpPacketHandler.cs
│   │   │   ├── SetJobLevelCommandPacketHandler.cs
│   │   │   ├── SetJobLevelXpPacketHandler.cs
│   │   │   ├── SetLevelCommandPacketHandler.cs
│   │   │   ├── SetMaintenancePacketHandler.cs
│   │   │   ├── SetReputationPacketHandler.cs
│   │   │   ├── SetSpAdditionPointPacketHandler.cs
│   │   │   ├── SetSpPointPacketHandler.cs
│   │   │   ├── ShoutHerePacketHandler.cs
│   │   │   ├── ShoutPacketHandler.cs
│   │   │   ├── SizePacketHandler.cs
│   │   │   ├── SpeedPacketHandler.cs
│   │   │   └── TeleportPacketHandler.cs
│   │   ├── Exchange/
│   │   │   ├── ExcListPacketHandler.cs
│   │   │   └── ExchangeRequestPacketHandler.cs
│   │   ├── Friend/
│   │   │   ├── BlDelPacketHandler.cs
│   │   │   ├── BlInsPacketHandler.cs
│   │   │   ├── BlPacketHandler.cs
│   │   │   ├── FdelPacketHandler.cs
│   │   │   ├── FinsPacketHandler.cs
│   │   │   └── FlPacketHandler.cs
│   │   ├── Game/
│   │   │   ├── GameStartPacketHandler.cs
│   │   │   ├── GuriPacketHandler.cs
│   │   │   ├── NcifPacketHandler.cs
│   │   │   ├── NpinfoPacketHandler.cs
│   │   │   ├── PulsePacketHandler.cs
│   │   │   ├── QSetPacketHandler.cs
│   │   │   ├── ReqInfoPacketHandler.cs
│   │   │   ├── ScpCtsPacketHandler.cs
│   │   │   └── TitEqPacketHandler.cs
│   │   ├── Group/
│   │   │   ├── GroupTalkPacketHandler.cs
│   │   │   ├── PjoinPacketHandler.cs
│   │   │   └── PleavePacketHandler.cs
│   │   ├── Inventory/
│   │   │   ├── BiPacketHandler.cs
│   │   │   ├── GetPacketHandler.cs
│   │   │   ├── MvePacketHandler.cs
│   │   │   ├── MviPacketHandler.cs
│   │   │   ├── PutPacketHandler.cs
│   │   │   ├── RemovePacketHandler.cs
│   │   │   ├── SpTransformPacketHandler.cs
│   │   │   ├── UseItemPacketHandler.cs
│   │   │   └── WearPacketHandler.cs
│   │   ├── Login/
│   │   │   ├── NoS0575PacketHandler.cs
│   │   │   └── NoS0577PacketHandler.cs
│   │   ├── Miniland/
│   │   │   ├── AddobjPacketHandler.cs
│   │   │   ├── MJoinPacketHandler.cs
│   │   │   ├── MinilandObjects/
│   │   │   │   ├── MgPacketHandler.cs
│   │   │   │   └── UseobjPacketHandler.cs
│   │   │   ├── MlobjPacketHandler.cs
│   │   │   └── RmvobjPacketHandler.cs
│   │   ├── Movement/
│   │   │   ├── ClientDirPacketHandler.cs
│   │   │   ├── PreqPacketHandler.cs
│   │   │   ├── SitPacketHandler.cs
│   │   │   └── WalkPacketHandler.cs
│   │   ├── NoAction/
│   │   │   ├── BpClosePacketHandler.cs
│   │   │   ├── CClosePacketHandler.cs
│   │   │   ├── LbsPacketHandler.cs
│   │   │   ├── SnapPacketHandler.cs
│   │   │   ├── SortOpenPacketHandler.cs
│   │   │   └── ZeroPacketHandler.cs
│   │   ├── NosCore.PacketHandlers.csproj
│   │   ├── Parcel/
│   │   │   ├── PclPacketHandler.cs
│   │   │   └── PstClientPacketHandler.cs
│   │   ├── Quest/
│   │   │   ├── QTPacketHandler.cs
│   │   │   └── ScriptPacketHandler.cs
│   │   ├── Shops/
│   │   │   ├── BuyPacketHandler.cs
│   │   │   ├── MShopPacketHandler.cs
│   │   │   ├── NrunPacketHandler.cs
│   │   │   ├── RequestNpcPacketHandler.cs
│   │   │   ├── SellPacketHandler.cs
│   │   │   └── ShoppingPacketHandler.cs
│   │   ├── Upgrades/
│   │   │   └── UpgradePacketHandler.cs
│   │   └── Warehouse/
│   │       ├── DepositPacketHandler.cs
│   │       ├── FDepositPacketHandler.cs
│   │       ├── FReposPacketHandler.cs
│   │       ├── FStashEndPacketHandler.cs
│   │       ├── FWithdrawPacketHandler.cs
│   │       ├── ReposPacketHandler.cs
│   │       ├── StashEndPacketHandler.cs
│   │       └── WithdrawPacketHandler.cs
│   ├── NosCore.Parser/
│   │   ├── ImportFactory.cs
│   │   ├── NosCore.Parser.csproj
│   │   ├── Parser.cs
│   │   ├── ParserBootstrap.cs
│   │   ├── ParserCliOptions.cs
│   │   ├── ParserConfiguration.cs
│   │   └── Parsers/
│   │       ├── ActParser.cs
│   │       ├── CardParser.cs
│   │       ├── DropParser.cs
│   │       ├── Generic/
│   │       │   ├── DatDocumentationGenerator.cs
│   │       │   ├── DatFieldMetadata.cs
│   │       │   ├── FluentParserBuilder.cs
│   │       │   └── GenericParser.cs
│   │       ├── I18NParser.cs
│   │       ├── ItemParser.cs
│   │       ├── MapMonsterParser.cs
│   │       ├── MapNpcParser.cs
│   │       ├── MapParser.cs
│   │       ├── MapTypeMapParser.cs
│   │       ├── MapTypeParser.cs
│   │       ├── NpcMonsterParser.cs
│   │       ├── NpcTalkParser.cs
│   │       ├── PortalParser.cs
│   │       ├── QuestParser.cs
│   │       ├── QuestPrizeParser.cs
│   │       ├── RespawnMapTypeParser.cs
│   │       ├── ScriptParser.cs
│   │       ├── ShopItemParser.cs
│   │       ├── ShopParser.cs
│   │       └── SkillParser.cs
│   ├── NosCore.WebApi/
│   │   ├── ApiConfiguration.cs
│   │   ├── Controllers/
│   │   │   ├── AuthController.cs
│   │   │   └── NosmallController.cs
│   │   ├── NosCore.WebApi.csproj
│   │   └── WebApiBootstrap.cs
│   └── NosCore.WorldServer/
│       ├── NosCore.WorldServer.csproj
│       ├── WorldServer.cs
│       └── WorldServerBootstrap.cs
├── test/
│   ├── NosCore.Core.Tests/
│   │   ├── LogLanguageTests.cs
│   │   └── NosCore.Core.Tests.csproj
│   ├── NosCore.Database.Tests/
│   │   ├── DatabaseTests.cs
│   │   └── NosCore.Database.Tests.csproj
│   ├── NosCore.GameObject.Tests/
│   │   ├── BazaarTests.cs
│   │   ├── GroupTests.cs
│   │   ├── Messaging/
│   │   │   ├── Handlers/
│   │   │   │   ├── Battle/
│   │   │   │   │   ├── MonsterAggroHandlerTests.cs
│   │   │   │   │   ├── MonsterRespawnHandlerTests.cs
│   │   │   │   │   ├── PlayerRevivalHandlerTests.cs
│   │   │   │   │   └── RewardDistributionHandlerTests.cs
│   │   │   │   ├── Guri/
│   │   │   │   │   ├── EmoticonHandlerTests.cs
│   │   │   │   │   └── MfaHandlerTests.cs
│   │   │   │   ├── Map/
│   │   │   │   │   └── MinilandEntranceHandlerTests.cs
│   │   │   │   ├── Nrun/
│   │   │   │   │   ├── SetPlaceOfRevivalHandlerTests.cs
│   │   │   │   │   ├── TeleporterHandlerTests.cs
│   │   │   │   │   └── UpgradeItemHandlerTests.cs
│   │   │   │   └── UseItem/
│   │   │   │       ├── BackPackHandlerTests.cs
│   │   │   │       ├── BazaarMedalsHandlerTests.cs
│   │   │   │       ├── BoxEffectHandlerTests.cs
│   │   │   │       ├── ChangeGenderHandlerTests.cs
│   │   │   │       ├── HairDieHandlerTests.cs
│   │   │   │       ├── MinilandBellHandlerTests.cs
│   │   │   │       ├── PetBasketHandlerTests.cs
│   │   │   │       ├── SealedTarotCardHandlerTests.cs
│   │   │   │       ├── SpRechargerHandlerTests.cs
│   │   │   │       ├── SpeakerHandlerTests.cs
│   │   │   │       ├── TitleHandlerTests.cs
│   │   │   │       └── WearHandlerTests.cs
│   │   │   └── WolverineHandlerResolutionTests.cs
│   │   ├── NosCore.GameObject.Tests.csproj
│   │   ├── Services/
│   │   │   ├── AuthService/
│   │   │   │   └── AuthCodeServiceTests.cs
│   │   │   ├── BattleService/
│   │   │   │   ├── AggroServiceTests.cs
│   │   │   │   ├── BattleServiceTests.cs
│   │   │   │   ├── BuffServiceTests.cs
│   │   │   │   ├── DamageCalculatorTests.cs
│   │   │   │   ├── HitQueueTests.cs
│   │   │   │   ├── MonsterAiTests.cs
│   │   │   │   ├── NpcCombatCatalogTests.cs
│   │   │   │   └── SkillResolverTests.cs
│   │   │   ├── BazaarService/
│   │   │   │   └── BazaarRegistryTests.cs
│   │   │   ├── BlacklistService/
│   │   │   │   └── BlacklistServiceTests.cs
│   │   │   ├── BroadcastService/
│   │   │   │   └── SessionRegistryTests.cs
│   │   │   ├── ChannelCommunicationService/
│   │   │   │   └── Handlers/
│   │   │   │       ├── DeleteMailDataMessageHandlerTests.cs
│   │   │   │       ├── DisconnectDataMessageHandlerTests.cs
│   │   │   │       ├── MailDataMessageHandlerTests.cs
│   │   │   │       ├── PostedPacketMessageHandlerTests.cs
│   │   │   │       └── StatDataMessageHandlerTests.cs
│   │   │   ├── ChannelService/
│   │   │   │   └── ChannelServiceTests.cs
│   │   │   ├── CharacterService/
│   │   │   │   └── CharacterInitializationServiceTests.cs
│   │   │   ├── ExchangeService/
│   │   │   │   ├── ExchangeRequestRegistryTests.cs
│   │   │   │   └── ExchangeServiceTests.cs
│   │   │   ├── FriendService/
│   │   │   │   ├── FriendRequestRegistryTests.cs
│   │   │   │   └── FriendServiceTests.cs
│   │   │   ├── GroupService/
│   │   │   │   └── GroupRegistryTests.cs
│   │   │   ├── InventoryService/
│   │   │   │   └── InventoryServiceTests.cs
│   │   │   ├── LoginService/
│   │   │   │   └── LoginServiceTests.cs
│   │   │   ├── MailService/
│   │   │   │   └── MailServiceTests.cs
│   │   │   ├── MapChangeService/
│   │   │   │   └── MapChangeServiceTests.cs
│   │   │   ├── MapInstanceAccessService/
│   │   │   │   └── MapInstanceAccessServiceTests.cs
│   │   │   ├── MapInstanceGenerationService/
│   │   │   │   └── MapInstanceRegistryTests.cs
│   │   │   ├── MinilandService/
│   │   │   │   ├── MinilandRegistryTests.cs
│   │   │   │   └── MinilandServiceTests.cs
│   │   │   ├── PacketHandlerService/
│   │   │   │   └── PacketHandlerRegistryTests.cs
│   │   │   ├── PathfindingService/
│   │   │   │   └── PathfindingServiceTests.cs
│   │   │   ├── QuestService/
│   │   │   │   └── QuestServiceTests.cs
│   │   │   ├── SaveService/
│   │   │   │   └── SaveServiceTests.cs
│   │   │   ├── ShopService/
│   │   │   │   └── ShopRegistryTests.cs
│   │   │   ├── SkillService/
│   │   │   │   └── SkillServiceTests.cs
│   │   │   ├── SpeedCalculationService/
│   │   │   │   └── SpeedCalculationServiceTests.cs
│   │   │   ├── TransformationService/
│   │   │   │   └── TransformationServiceTests.cs
│   │   │   ├── UpgradeService/
│   │   │   │   ├── EquipmentUpgradeOperationTests.cs
│   │   │   │   ├── RarifyOperationTests.cs
│   │   │   │   └── SumUpgradeOperationTests.cs
│   │   │   └── WarehouseService/
│   │   │       └── WarehouseServiceTests.cs
│   │   ├── SetupAssemblyInitializer.cs
│   │   └── ShopTests.cs
│   ├── NosCore.PacketHandlers.Tests/
│   │   ├── Battle/
│   │   │   ├── RevivalPacketHandlerTests.cs
│   │   │   └── UseSkillPacketHandlerTests.cs
│   │   ├── Bazaar/
│   │   │   ├── CBListPacketHandlerTests.cs
│   │   │   ├── CBuyPacketHandlerTests.cs
│   │   │   ├── CModPacketHandlerTests.cs
│   │   │   ├── CRegPacketHandlerTests.cs
│   │   │   ├── CSListPacketHandlerTests.cs
│   │   │   ├── CScalcPacketHandlerTests.cs
│   │   │   └── CSkillPacketHandlerTests.cs
│   │   ├── CharacterScreen/
│   │   │   ├── CharNewJobPacketHandlerTests.cs
│   │   │   ├── CharNewPacketHandlerTests.cs
│   │   │   ├── CharRenPacketHandlerTests.cs
│   │   │   ├── CharacterDeletePacketHandlerTests.cs
│   │   │   ├── DacPacketHandlerTests.cs
│   │   │   ├── EntryPointPacketHandlerTests.cs
│   │   │   └── SelectPacketHandlerTests.cs
│   │   ├── Chat/
│   │   │   ├── BtkPacketHandlerTests.cs
│   │   │   ├── ClientSayPacketHandlerTests.cs
│   │   │   └── WhisperPacketHandlerTests.cs
│   │   ├── Command/
│   │   │   ├── ChangeChannelPacketHandlerTests.cs
│   │   │   ├── ChangeClassPacketHandlerTests.cs
│   │   │   ├── CreateItemPacketHandlerTests.cs
│   │   │   ├── EffectCommandPacketHandlerTests.cs
│   │   │   ├── GiftPacketHandlerTests.cs
│   │   │   ├── HelpPacketHandlerTests.cs
│   │   │   ├── InvisibleCommandPacketHandlerTests.cs
│   │   │   ├── KickPacketHandlerTests.cs
│   │   │   ├── PositionPacketHandlerTests.cs
│   │   │   ├── SetGoldCommandPacketHandlerTests.cs
│   │   │   ├── SetHeroLevelCommandPacketHandlerTests.cs
│   │   │   ├── SetJobLevelCommandPacketHandlerTests.cs
│   │   │   ├── SetLevelCommandPacketHandlerTests.cs
│   │   │   ├── SetMaintenancePacketHandlerTests.cs
│   │   │   ├── SetReputationPacketHandlerTests.cs
│   │   │   ├── ShoutPacketHandlerTests.cs
│   │   │   ├── SizePacketHandlerTests.cs
│   │   │   ├── SpeedPacketHandlerTests.cs
│   │   │   └── TeleportPacketHandlerTests.cs
│   │   ├── Exchange/
│   │   │   ├── ExcListPacketHandlerTests.cs
│   │   │   └── ExchangeRequestPacketHandlerTests.cs
│   │   ├── Friend/
│   │   │   ├── BlDelPacketHandlerTests.cs
│   │   │   ├── BlInsPacketHandlerTests.cs
│   │   │   ├── BlPacketHandlerTests.cs
│   │   │   ├── FinsPacketHandlerTests.cs
│   │   │   ├── FlPacketHandlerTests.cs
│   │   │   └── fDelPacketHandlerTests.cs
│   │   ├── Game/
│   │   │   ├── GameStartPacketHandlerTests.cs
│   │   │   ├── GuriPacketHandlerTests.cs
│   │   │   ├── NcifPacketHandlerTests.cs
│   │   │   ├── PulsePacketHandlerTests.cs
│   │   │   ├── QsetPacketHandlerTests.cs
│   │   │   ├── ReqInfoPacketHandlerTests.cs
│   │   │   └── TitEqPacketHandlerTests.cs
│   │   ├── Group/
│   │   │   ├── GroupTalkPacketHandlerTests.cs
│   │   │   ├── PJoinPacketHandlerTests.cs
│   │   │   └── PleavePacketHandlerTests.cs
│   │   ├── Inventory/
│   │   │   ├── BiPacketHandlerTests.cs
│   │   │   ├── MvePacketHandlerTests.cs
│   │   │   ├── MviPacketHandlerTests.cs
│   │   │   ├── PutPacketHandlerTests.cs
│   │   │   ├── RemovePacketHandlerTests.cs
│   │   │   └── SpTransformPacketHandlerTests.cs
│   │   ├── Login/
│   │   │   ├── NoS0575PacketHandlerTests.cs
│   │   │   └── NoS0577PacketHandlerTests.cs
│   │   ├── Miniland/
│   │   │   ├── AddobjPacketHandlerTests.cs
│   │   │   ├── MJoinPacketHandlerTests.cs
│   │   │   ├── MinilandObjects/
│   │   │   │   ├── MgPacketHandlerTests.cs
│   │   │   │   └── UseobjPacketHandlerTests.cs
│   │   │   ├── MlEditPacketHandlerTests.cs
│   │   │   └── RmvobjPacketHandlerTests.cs
│   │   ├── Movement/
│   │   │   ├── ClientDirPacketHandlerTests.cs
│   │   │   ├── PreqPacketHandlerTests.cs
│   │   │   ├── SitPacketHandlerTests.cs
│   │   │   └── WalkPacketHandlerTests.cs
│   │   ├── NosCore.PacketHandlers.Tests.csproj
│   │   ├── Parcel/
│   │   │   ├── PclPacketHandlerTests.cs
│   │   │   └── PstClientPacketHandlerTests.cs
│   │   ├── Quest/
│   │   │   ├── QtPacketHandlerTests.cs
│   │   │   └── ScriptPacketHandlerTests.cs
│   │   ├── SetupAssemblyInitializer.cs
│   │   ├── Shops/
│   │   │   ├── BuyPacketHandlerTests.cs
│   │   │   ├── MShopPacketHandlerTests.cs
│   │   │   ├── NrunPacketHandlerTests.cs
│   │   │   ├── RequestNpcPacketHandlerTests.cs
│   │   │   ├── SellPacketHandlerTests.cs
│   │   │   └── ShoppingPacketHandlerTests.cs
│   │   ├── Upgrades/
│   │   │   └── UpgradePacketHandlerTests.cs
│   │   └── Warehouse/
│   │       ├── DepositPacketHandlerTests.cs
│   │       ├── FDepositPacketHandlerTests.cs
│   │       ├── FReposPacketHandlerTests.cs
│   │       ├── FStashEndPacketHandlerTests.cs
│   │       ├── FWithdrawPacketHandlerTests.cs
│   │       ├── ReposPacketHandlerTests.cs
│   │       ├── StashEndPacketHandlerTests.cs
│   │       ├── WarehousePacketHandlerTests.cs
│   │       └── WithdrawPacketHandlerTests.cs
│   ├── NosCore.Parser.Tests/
│   │   ├── ActParserTests.cs
│   │   ├── CardParserTests.cs
│   │   ├── DatDocumentationGeneratorTests.cs
│   │   ├── DatDocumentationSnapshotTests.cs
│   │   ├── DropParserTests.cs
│   │   ├── FluentParserBuilderTests.cs
│   │   ├── GenericParserTests.cs
│   │   ├── ItemParserTests.cs
│   │   ├── MapMonsterParserTests.cs
│   │   ├── MapNpcParserTests.cs
│   │   ├── MapParserTests.cs
│   │   ├── NosCore.Parser.Tests.csproj
│   │   ├── NpcMonsterParserTests.cs
│   │   ├── PortalParserTests.cs
│   │   ├── QuestParserTests.cs
│   │   ├── QuestPrizeParserTests.cs
│   │   ├── ShopParserTests.cs
│   │   └── SkillParserTests.cs
│   ├── NosCore.Tests.Shared/
│   │   ├── AutoFixture/
│   │   │   └── NosCoreFixture.cs
│   │   ├── BDD/
│   │   │   ├── SpecBase.cs
│   │   │   └── Steps/
│   │   │       ├── InventorySteps.cs
│   │   │       ├── PacketSteps.cs
│   │   │       └── SessionSteps.cs
│   │   ├── NosCore.Tests.Shared.csproj
│   │   ├── TestHelpers.cs
│   │   └── tools/
│   │       └── coverage.opencover.xml
│   └── NosCore.WebApi.Tests/
│       ├── ApiTests/
│       │   └── AuthControllerTests.cs
│       ├── NosCore.WebApi.Tests.csproj
│       └── SetupAssemblyInitializer.cs
└── tools/
    ├── NosCore.DtoGenerator/
    │   ├── DtoGenerator.cs
    │   └── NosCore.DtoGenerator.csproj
    └── NosCore.EcsGenerator/
        ├── ComponentBundleGenerator.cs
        └── NosCore.EcsGenerator.csproj
Download .txt
Showing preview only (532K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5347 symbols across 895 files)

FILE: src/NosCore.Core/AuthorizeRoleAttribute.cs
  class AuthorizeRoleAttribute (line 14) | public class AuthorizeRoleAttribute : AuthorizeAttribute
    method AuthorizeRoleAttribute (line 16) | public AuthorizeRoleAttribute(AuthorityType allowedRole)

FILE: src/NosCore.Core/Channel.cs
  class Channel (line 12) | public class Channel

FILE: src/NosCore.Core/ChannelInfo.cs
  class ChannelInfo (line 12) | public class ChannelInfo

FILE: src/NosCore.Core/Concurrency/AsyncLock.cs
  class AsyncLock (line 16) | public sealed class AsyncLock : IDisposable
    method AcquireAsync (line 20) | public async ValueTask<Releaser> AcquireAsync(CancellationToken cancel...
    method Dispose (line 26) | public void Dispose() => _semaphore.Dispose();
    type Releaser (line 28) | public readonly struct Releaser(SemaphoreSlim semaphore) : IDisposable
      method Dispose (line 30) | public void Dispose() => semaphore.Release();

FILE: src/NosCore.Core/Configuration/LoginConfiguration.cs
  class LoginConfiguration (line 13) | public class LoginConfiguration : ServerConfiguration

FILE: src/NosCore.Core/Configuration/WorldConfiguration.cs
  class WorldConfiguration (line 14) | public class WorldConfiguration : ServerConfiguration
  type StarterOrigin (line 66) | public enum StarterOrigin : byte
  class BasicEquipment (line 73) | public class BasicEquipment

FILE: src/NosCore.Core/ConfigureJwtBearerOptions.cs
  class ConfigureJwtBearerOptions (line 17) | public class ConfigureJwtBearerOptions(IOptions<WebApiConfiguration> web...
    method Configure (line 20) | public void Configure(string? name, JwtBearerOptions options)
    method Configure (line 44) | public void Configure(JwtBearerOptions options)

FILE: src/NosCore.Core/ConnectionInfo.cs
  class ConnectionInfo (line 9) | public class ConnectionInfo

FILE: src/NosCore.Core/Encryption/BcryptEncryption.cs
  class BcryptHasher (line 12) | public class BcryptHasher : IHasher
    method Hash (line 14) | public string Hash(string password, string? salt)
    method Hash (line 19) | public string Hash(string password) => throw new NotImplementedExcepti...

FILE: src/NosCore.Core/Encryption/Pbkdf2Hasher.cs
  class Pbkdf2Hasher (line 16) | public class Pbkdf2Hasher : IHasher
    method Hash (line 18) | public string Hash(string inputString, string? salt)
    method Hash (line 31) | public string Hash(string password) => throw new NotImplementedExcepti...

FILE: src/NosCore.Core/Encryption/Sha512Hasher.cs
  class Sha512Hasher (line 15) | public class Sha512Hasher : IHasher
    method Hash (line 17) | public string Hash(string password, string? salt)
    method Hash (line 24) | public string Hash(string password) => Hash(password, null);

FILE: src/NosCore.Core/Extensions/TypeExtension.cs
  class TypeExtension (line 14) | public static class TypeExtension
    method GetConstructorDelegate (line 18) | public static Func<TBase> GetConstructorDelegate<TBase>(this Type type)
    method GetConstructorDelegate (line 23) | public static Func<object> GetConstructorDelegate(this Type type)
    method GetConstructorDelegate (line 28) | public static Delegate GetConstructorDelegate(this Type type, Type del...
    method CreateInstance (line 68) | public static T CreateInstance<T>(this Type type)

FILE: src/NosCore.Core/I18N/GameLanguageLocalizer.cs
  class GameLanguageLocalizer (line 16) | public class GameLanguageLocalizer(ILogLanguageLocalizer<LanguageKey> st...
    method GetAllStrings (line 52) | public IEnumerable<LocalizedString> GetAllStrings() => stringLocalizer...

FILE: src/NosCore.Core/I18N/IGameLanguageLocalizer.cs
  type IGameLanguageLocalizer (line 14) | public interface IGameLanguageLocalizer : ILogLanguageLocalizer

FILE: src/NosCore.Core/Observability/NosCoreTelemetry.cs
  class NosCoreTelemetry (line 16) | public static class NosCoreTelemetry
    method AddNosCoreTelemetry (line 27) | public static IServiceCollection AddNosCoreTelemetry(this IServiceColl...

FILE: src/NosCore.Core/Services/IdService/IIdService.cs
  type IIdService (line 11) | public interface IIdService<T>
    method GetNextId (line 15) | long GetNextId();

FILE: src/NosCore.Core/Services/IdService/IdService.cs
  class IdService (line 11) | public class IdService<T>(long firstId) : IIdService<T>
    method GetNextId (line 15) | public long GetNextId()

FILE: src/NosCore.Core/SessionFactory.cs
  class SessionFactory (line 12) | public sealed class SessionFactory
    method SessionFactory (line 16) | private SessionFactory()

FILE: src/NosCore.Data/CommandPackets/ChangeChannelPacket.cs
  class ChangeChannelPacket (line 12) | [CommandPacketHeader("$ChangeChannel", AuthorityType.GameMaster)]
    method Help (line 18) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/ChangeClassPacket.cs
  class ChangeClassPacket (line 12) | [CommandPacketHeader("$ChangeClass", AuthorityType.GameMaster)]
    method Help (line 21) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/ChangeGenderPacket.cs
  class ChangeGenderPacket (line 11) | [CommandPacketHeader("$ChangeGender", AuthorityType.GameMaster)]
    method Help (line 14) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/ClearInventoryPacket.cs
  class ClearInventoryPacket (line 11) | [CommandPacketHeader("$ClearInventory", AuthorityType.Moderator)]
    method Help (line 14) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/CommandPacketHeaderAttribute.cs
  class CommandPacketHeaderAttribute (line 13) | public class CommandPacketHeaderAttribute(string identification, Authori...

FILE: src/NosCore.Data/CommandPackets/CreateItemPacket.cs
  class CreateItemPacket (line 12) | [CommandPacketHeader("$CreateItem", AuthorityType.GameMaster)]
    method Help (line 24) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/EffectCommandPacket.cs
  class EffectCommandPacket (line 12) | [CommandPacketHeader("$Effect", AuthorityType.GameMaster)]
    method Help (line 18) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/EntryPointPacket.cs
  class EntryPointPacket (line 13) | [PacketHeader("EntryPoint", Scope.OnCharacterScreen)]

FILE: src/NosCore.Data/CommandPackets/FlCommandPacket.cs
  class FlCommandPacket (line 12) | [PacketHeader("$fl", Scope.InTrade | Scope.InGame)]
    method Help (line 18) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/GiftPacket.cs
  class GiftPacket (line 12) | [CommandPacketHeader("$Gift", AuthorityType.GameMaster)]
    method Help (line 30) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/HelpPacket.cs
  class HelpPacket (line 11) | [CommandPacketHeader("$Help", AuthorityType.GameMaster)]
    method Help (line 14) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/ICommandPacket.cs
  type ICommandPacket (line 13) | public interface ICommandPacket : IPacket
    method Help (line 15) | [UsedImplicitly]
  class CommandPacket (line 19) | public abstract class CommandPacket : PacketBase, ICommandPacket
    method Help (line 21) | public abstract string Help();

FILE: src/NosCore.Data/CommandPackets/InvisibleCommandPacket.cs
  class InvisibleCommandPacket (line 11) | [CommandPacketHeader("$Invisible", AuthorityType.GameMaster)]
    method Help (line 14) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/KickPacket.cs
  class KickPacket (line 12) | [CommandPacketHeader("$Kick", AuthorityType.Moderator)]
    method Help (line 18) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/KillPacket.cs
  class KillPacket (line 11) | [CommandPacketHeader("$Kill", AuthorityType.GameMaster)]
    method Help (line 14) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/PositionPacket.cs
  class PositionPacket (line 11) | [CommandPacketHeader("$Position", AuthorityType.GameMaster)]
    method Help (line 14) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/SetBankGoldPacket.cs
  class SetBankGoldPacket (line 12) | [CommandPacketHeader("$SetBankGold", AuthorityType.GameMaster)]
    method Help (line 18) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/SetGoldCommandPacket.cs
  class SetGoldCommandPacket (line 13) | [CommandPacketHeader("$SetGold", AuthorityType.GameMaster)]
    method Help (line 24) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/SetHairColorPacket.cs
  class SetHairColorPacket (line 12) | [CommandPacketHeader("$SetHairColor", AuthorityType.GameMaster)]
    method Help (line 18) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/SetHairStylePacket.cs
  class SetHairStylePacket (line 12) | [CommandPacketHeader("$SetHairStyle", AuthorityType.GameMaster)]
    method Help (line 18) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/SetHeroLevelCommandPacket.cs
  class SetHeroLevelCommandPacket (line 13) | [CommandPacketHeader("$SetHeroLevel", AuthorityType.GameMaster)]
    method Help (line 24) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/SetHeroXpPacket.cs
  class SetHeroXpPacket (line 12) | [CommandPacketHeader("$SetHeroXp", AuthorityType.GameMaster)]
    method Help (line 18) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/SetJobLevelCommandPacket.cs
  class SetJobLevelCommandPacket (line 13) | [CommandPacketHeader("$SetJobLevel", AuthorityType.GameMaster)]
    method Help (line 24) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/SetJobLevelXpPacket.cs
  class SetJobLevelXpPacket (line 12) | [CommandPacketHeader("$SetJobLevelXp", AuthorityType.GameMaster)]
    method Help (line 18) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/SetLevelCommandPacket.cs
  class SetLevelCommandPacket (line 13) | [CommandPacketHeader("$SetLevel", AuthorityType.GameMaster)]
    method Help (line 24) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/SetMaintenancePacket.cs
  class SetMaintenancePacket (line 12) | [CommandPacketHeader("$SetMaintenance", AuthorityType.GameMaster)]
    method Help (line 21) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/SetReputationPacket.cs
  class SetReputationPacket (line 13) | [CommandPacketHeader("$SetReputation", AuthorityType.GameMaster)]
    method Help (line 24) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/SetSpAdditionPointPacket.cs
  class SetSpAdditionPointPacket (line 12) | [CommandPacketHeader("$SetSpAdditionPoint", AuthorityType.GameMaster)]
    method Help (line 18) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/SetSpPointPacket.cs
  class SetSpPointPacket (line 12) | [CommandPacketHeader("$SetSpPoint", AuthorityType.GameMaster)]
    method Help (line 18) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/ShoutHerePacket.cs
  class ShoutHerePacket (line 12) | [CommandPacketHeader("$ShoutHere", AuthorityType.Moderator)]
    method Help (line 18) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/ShoutPacket.cs
  class ShoutPacket (line 12) | [CommandPacketHeader("$Shout", AuthorityType.Moderator)]
    method Help (line 18) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/SizePacket.cs
  class SizePacket (line 12) | [CommandPacketHeader("$Size", AuthorityType.GameMaster)]
    method Help (line 24) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/SpeedPacket.cs
  class SpeedPacket (line 12) | [CommandPacketHeader("$Speed", AuthorityType.GameMaster)]
    method Help (line 18) | public override string Help()

FILE: src/NosCore.Data/CommandPackets/TeleportPacket.cs
  class TeleportPacket (line 12) | [CommandPacketHeader("$Teleport", AuthorityType.GameMaster)]
    method Help (line 24) | public override string Help()

FILE: src/NosCore.Data/DataAttributes/StaticMetaDataAttribute.cs
  class StaticMetaDataAttribute (line 12) | public class StaticMetaDataAttribute : Attribute

FILE: src/NosCore.Data/Dto/I18NFromAttribute.cs
  class I18NFromAttribute (line 11) | public class I18NFromAttribute(Type type) : Attribute

FILE: src/NosCore.Data/Dto/I18NString.cs
  class I18NString (line 12) | public class I18NString : Dictionary<RegionType, string>
    method I18NString (line 14) | public I18NString()

FILE: src/NosCore.Data/Dto/IDTO.cs
  type IDto (line 9) | public interface IDto

FILE: src/NosCore.Data/Dto/II18NDto.cs
  type II18NDto (line 11) | public interface II18NDto : IDto

FILE: src/NosCore.Data/Dto/IItemInstanceDto.cs
  type IItemInstanceDto (line 13) | public interface IItemInstanceDto : IDto

FILE: src/NosCore.Data/Dto/IStaticDto.cs
  type IStaticDto (line 9) | public interface IStaticDto : IDto

FILE: src/NosCore.Data/Dto/StaticDtoExtension.cs
  class StaticDtoExtension (line 16) | public static class StaticDtoExtension
    method GetI18NProperties (line 18) | public static IDictionary<PropertyInfo, Tuple<PropertyInfo, Type>> Get...
    method InjectI18N (line 37) | public static void InjectI18N(this IStaticDto staticDto,

FILE: src/NosCore.Data/Enumerations/Audit/AuditLogType.cs
  type AuditLogType (line 9) | public enum AuditLogType

FILE: src/NosCore.Data/Enumerations/Battle/TargetHitType.cs
  type TargetHitType (line 9) | public enum TargetHitType : byte

FILE: src/NosCore.Data/Enumerations/Bazaar/BazaarEquipmentType.cs
  type BazaarEquipmentType (line 9) | public enum BazaarEquipmentType

FILE: src/NosCore.Data/Enumerations/Bazaar/BazaarJeweleryType.cs
  type BazaarJeweleryType (line 9) | public enum BazaarJeweleryType

FILE: src/NosCore.Data/Enumerations/Bazaar/BazaarMainType.cs
  type BazaarMainType (line 9) | public enum BazaarMainType

FILE: src/NosCore.Data/Enumerations/Bazaar/BazaarUsableType.cs
  type BazaarUsableType (line 9) | public enum BazaarUsableType

FILE: src/NosCore.Data/Enumerations/Buff/AdditionalTypes.cs
  class AdditionalTypes (line 11) | [SuppressMessage("ReSharper", "UnusedMember.Global")]
    type AbsorbedSpirit (line 15) | public enum AbsorbedSpirit : byte
    type Absorption (line 25) | public enum Absorption : byte
    type AbsorptionAndPowerSkill (line 37) | public enum AbsorptionAndPowerSkill : byte
    type AngerSkill (line 50) | public enum AngerSkill : byte
    type ArenaCamera (line 62) | public enum ArenaCamera : byte
    type AttackPower (line 79) | public enum AttackPower : byte
    type BearSpirit (line 93) | public enum BearSpirit : byte
    type Block (line 104) | public enum Block : byte
    type BossMonstersSkill (line 116) | public enum BossMonstersSkill : byte
    type Buff (line 122) | public enum Buff : byte
    type CalculatingLevel (line 136) | public enum CalculatingLevel : byte
    type Capture (line 144) | public enum Capture : byte
    type Casting (line 150) | public enum Casting : byte
    type Count (line 164) | public enum Count : byte
    type Critical (line 170) | public enum Critical : byte
    type Damage (line 184) | public enum Damage : byte
    type DamageConvertingSkill (line 196) | public enum DamageConvertingSkill : byte
    type DarkCloneSummon (line 210) | public enum DarkCloneSummon : byte
    type DebuffResistance (line 224) | public enum DebuffResistance : byte
    type Defence (line 238) | public enum Defence : byte
    type DodgeAndDefencePercent (line 252) | public enum DodgeAndDefencePercent : byte
    type Drain (line 264) | public enum Drain : byte
    type DrainAndSteal (line 273) | public enum DrainAndSteal : byte
    type Element (line 287) | public enum Element : byte
    type ElementResistance (line 301) | public enum ElementResistance : byte
    type EnemyElementResistance (line 315) | public enum EnemyElementResistance : byte
    type FairyXpIncrease (line 329) | public enum FairyXpIncrease : byte
    type FalconSkill (line 337) | public enum FalconSkill : byte
    type FearSkill (line 351) | public enum FearSkill : byte
    type FireCannoneerRangeBuff (line 365) | public enum FireCannoneerRangeBuff : byte
    type FocusEnemyAttentionSkill (line 373) | public enum FocusEnemyAttentionSkill : byte
    type FourthGlacernonFamilyRaid (line 380) | public enum FourthGlacernonFamilyRaid : byte
    type FrozenDebuff (line 386) | public enum FrozenDebuff : byte
    type GuarantedDodgeRangedAttack (line 394) | public enum GuarantedDodgeRangedAttack : byte
    type HealingBurningAndCasting (line 406) | public enum HealingBurningAndCasting : byte
    type HideBarrelSkill (line 427) | public enum HideBarrelSkill : byte
    type Hpmp (line 433) | public enum Hpmp : byte
    type HugeSnowman (line 447) | public enum HugeSnowman : byte
    type IncreaseDamage (line 455) | public enum IncreaseDamage : byte
    type InflictSkill (line 469) | public enum InflictSkill : byte
    type Item (line 475) | public enum Item : byte
    type JumpBackPush (line 489) | public enum JumpBackPush : byte
    type LeonaPassiveSkill (line 505) | public enum LeonaPassiveSkill : byte
    type LightAndShadow (line 519) | public enum LightAndShadow : byte
    type LordCalvinas (line 531) | public enum LordCalvinas : byte
    type LordHatus (line 537) | public enum LordHatus : byte
    type MaxHpmp (line 543) | public enum MaxHpmp : byte
    type MeditationSkill (line 557) | public enum MeditationSkill : byte
    type MeteoriteTeleport (line 571) | public enum MeteoriteTeleport : byte
    type Mode (line 586) | public enum Mode : byte
    type Morale (line 600) | public enum Morale : byte
    type Move (line 614) | public enum Move : byte
    type MultAttack (line 628) | public enum MultAttack : byte
    type MultDefence (line 640) | public enum MultDefence : byte
    type NoCharacteristicValue (line 652) | public enum NoCharacteristicValue : byte
    type NoDefeatAndNoDamage (line 666) | public enum NoDefeatAndNoDamage : byte
    type Quest (line 676) | public enum Quest : byte
    type Recovery (line 682) | public enum Recovery : byte
    type RecoveryAndDamagePercent (line 690) | public enum RecoveryAndDamagePercent : byte
    type Reflection (line 700) | public enum Reflection : byte
    type SecondSpCard (line 712) | public enum SecondSpCard : byte
    type SeSpecialist (line 724) | public enum SeSpecialist : byte
    type SniperAttack (line 734) | public enum SniperAttack : byte
    type SpCardUpgrade (line 748) | public enum SpCardUpgrade : byte
    type SpecialActions (line 756) | public enum SpecialActions : byte
    type SpecialAttack (line 771) | public enum SpecialAttack : byte
    type SpecialBehaviour (line 785) | public enum SpecialBehaviour : byte
    type SpecialCritical (line 797) | public enum SpecialCritical : byte
    type SpecialDamageAndExplosions (line 811) | public enum SpecialDamageAndExplosions : byte
    type SpecialDefence (line 821) | public enum SpecialDefence : byte
    type SpecialEffects (line 835) | public enum SpecialEffects : byte
    type SpecialEffects2 (line 849) | public enum SpecialEffects2 : byte
    type SpecialisationBuffResistance (line 863) | public enum SpecialisationBuffResistance : byte
    type Spsl (line 876) | public enum Spsl : byte
    type StealBuff (line 885) | public enum StealBuff : byte
    type SummonAndRecoverHp (line 897) | public enum SummonAndRecoverHp : byte
    type SummonedMonsterAttack (line 905) | public enum SummonedMonsterAttack : byte
    type Summons (line 911) | public enum Summons : byte
    type SummonSkill (line 925) | public enum SummonSkill : byte
    type Target (line 933) | public enum Target : byte
    type TauntSkill (line 945) | public enum TauntSkill : byte
    type TeamArenaBuff (line 959) | public enum TeamArenaBuff : byte
    type TimeCircleSkills (line 967) | public enum TimeCircleSkills : byte
    type VulcanoElementBuff (line 981) | public enum VulcanoElementBuff : byte
    type Type85 (line 993) | public enum Type85 : byte
    type Type86 (line 1006) | public enum Type86 : byte
    type Type87 (line 1017) | public enum Type87 : byte
    type Type88 (line 1028) | public enum Type88 : byte
    type Type89 (line 1039) | public enum Type89 : byte
    type Type90 (line 1049) | public enum Type90 : byte
    type Type91 (line 1060) | public enum Type91 : byte
    type Type92 (line 1070) | public enum Type92 : byte
    type Type93 (line 1078) | public enum Type93 : byte
    type Type94 (line 1092) | public enum Type94 : byte
    type Type95 (line 1105) | public enum Type95 : byte
    type Type96 (line 1113) | public enum Type96 : byte
    type Type97 (line 1123) | public enum Type97 : byte
    type Type98 (line 1134) | public enum Type98 : byte
    type Type99 (line 1144) | public enum Type99 : byte
    type Type100 (line 1158) | public enum Type100 : byte
    type Type101 (line 1172) | public enum Type101 : byte
    type Type102 (line 1186) | public enum Type102 : byte
    type Type103 (line 1200) | public enum Type103 : byte
    type Type104 (line 1214) | public enum Type104 : byte
    type Type107 (line 1223) | public enum Type107 : byte
    type Type108 (line 1236) | public enum Type108 : byte
    type Type109 (line 1248) | public enum Type109 : byte
    type Type110 (line 1259) | public enum Type110 : byte

FILE: src/NosCore.Data/Enumerations/Buff/BCardType.cs
  class BCardType (line 9) | public class BCardType
    type CardType (line 11) | public enum CardType : byte

FILE: src/NosCore.Data/Enumerations/Buff/BuffType.cs
  type BuffType (line 9) | public enum BuffType : byte

FILE: src/NosCore.Data/Enumerations/Buff/MedalType.cs
  type MedalType (line 9) | public enum MedalType : byte

FILE: src/NosCore.Data/Enumerations/Buff/ShellOptionType.cs
  type ShellOptionType (line 9) | public enum ShellOptionType

FILE: src/NosCore.Data/Enumerations/Buff/StaticBonusType.cs
  type StaticBonusType (line 9) | public enum StaticBonusType : byte

FILE: src/NosCore.Data/Enumerations/Character/CharacterOption.cs
  type CharacterOption (line 9) | public enum CharacterOption

FILE: src/NosCore.Data/Enumerations/Character/CharacterState.cs
  type CharacterState (line 9) | public enum CharacterState : byte

FILE: src/NosCore.Data/Enumerations/Character/FactionType.cs
  type FactionType (line 11) | [SuppressMessage("ReSharper", "UnusedMember.Global")]

FILE: src/NosCore.Data/Enumerations/Character/MateType.cs
  type MateType (line 11) | [SuppressMessage("ReSharper", "UnusedMember.Global")]

FILE: src/NosCore.Data/Enumerations/Event/EventActionType.cs
  type EventActionType (line 9) | public enum EventActionType

FILE: src/NosCore.Data/Enumerations/Event/EventType.cs
  type EventType (line 11) | [SuppressMessage("ReSharper", "UnusedMember.Global")]

FILE: src/NosCore.Data/Enumerations/Family/FamilyAuthority.cs
  type FamilyAuthority (line 11) | [SuppressMessage("ReSharper", "UnusedMember.Global")]

FILE: src/NosCore.Data/Enumerations/Family/FamilyLogType.cs
  type FamilyLogType (line 11) | [SuppressMessage("ReSharper", "UnusedMember.Global")]

FILE: src/NosCore.Data/Enumerations/Family/FamilyMemberRank.cs
  type FamilyMemberRank (line 11) | [SuppressMessage("ReSharper", "UnusedMember.Global")]

FILE: src/NosCore.Data/Enumerations/Group/GroupSharingType.cs
  type GroupSharingType (line 9) | public enum GroupSharingType : byte

FILE: src/NosCore.Data/Enumerations/Group/GroupType.cs
  type GroupType (line 9) | public enum GroupType : byte

FILE: src/NosCore.Data/Enumerations/HashingType.cs
  type HashingType (line 9) | public enum HashingType

FILE: src/NosCore.Data/Enumerations/I18N/LanguageKey.cs
  type LogLanguageKey (line 11) | [SuppressMessage("ReSharper", "InconsistentNaming")]
  type LanguageKey (line 160) | [SuppressMessage("ReSharper", "InconsistentNaming")]

FILE: src/NosCore.Data/Enumerations/Interaction/Act4RaidType.cs
  type Act4RaidType (line 9) | public enum Act4RaidType : byte

FILE: src/NosCore.Data/Enumerations/Interaction/ArenaTeamType.cs
  type ArenaTeamType (line 9) | public enum ArenaTeamType : byte

FILE: src/NosCore.Data/Enumerations/Interaction/ChatType.cs
  type ChatType (line 9) | public enum ChatType : byte

FILE: src/NosCore.Data/Enumerations/Interaction/GeneralLogType.cs
  type GeneralLogType (line 9) | public enum GeneralLogType

FILE: src/NosCore.Data/Enumerations/Interaction/InRespawnType.cs
  type InRespawnType (line 9) | public enum InRespawnType : byte

FILE: src/NosCore.Data/Enumerations/Interaction/PenaltyType.cs
  type PenaltyType (line 9) | public enum PenaltyType : byte

FILE: src/NosCore.Data/Enumerations/Interaction/ReceiverType.cs
  type ReceiverType (line 9) | public enum ReceiverType : byte

FILE: src/NosCore.Data/Enumerations/Interaction/RespawnType.cs
  type RespawnType (line 11) | [SuppressMessage("ReSharper", "UnusedMember.Global")]

FILE: src/NosCore.Data/Enumerations/Interaction/ScriptedInstanceType.cs
  type ScriptedInstanceType (line 11) | [SuppressMessage("ReSharper", "UnusedMember.Global")]

FILE: src/NosCore.Data/Enumerations/Interaction/TalentArenaOptionType.cs
  type TalentArenaOptionType (line 11) | [SuppressMessage("ReSharper", "UnusedMember.Global")]

FILE: src/NosCore.Data/Enumerations/Interaction/TeleporterType.cs
  type TeleporterType (line 9) | public enum TeleporterType : byte

FILE: src/NosCore.Data/Enumerations/Items/CellonType.cs
  type CellonType (line 9) | public enum CellonType : byte

FILE: src/NosCore.Data/Enumerations/Items/ItemEffectType.cs
  type ItemEffectType (line 9) | public enum ItemEffectType : ushort

FILE: src/NosCore.Data/Enumerations/Items/ItemType.cs
  type ItemType (line 9) | public enum ItemType : byte

FILE: src/NosCore.Data/Enumerations/Items/JewelOptionType.cs
  type JewelOptionType (line 9) | public enum JewelOptionType : byte

FILE: src/NosCore.Data/Enumerations/Items/RarifyMode.cs
  type RarifyMode (line 11) | [SuppressMessage("ReSharper", "UnusedMember.Global")]

FILE: src/NosCore.Data/Enumerations/Items/RarifyProtection.cs
  type RarifyProtection (line 9) | public enum RarifyProtection

FILE: src/NosCore.Data/Enumerations/Items/UpgradeMode.cs
  type UpgradeMode (line 9) | public enum UpgradeMode

FILE: src/NosCore.Data/Enumerations/Items/UpgradeProtection.cs
  type UpgradeProtection (line 11) | [SuppressMessage("ReSharper", "UnusedMember.Global")]

FILE: src/NosCore.Data/Enumerations/Map/MapInstanceEventType.cs
  type MapInstanceEventType (line 9) | public enum MapInstanceEventType

FILE: src/NosCore.Data/Enumerations/Map/MapInstanceType.cs
  type MapInstanceType (line 11) | [SuppressMessage("ReSharper", "UnusedMember.Global")]

FILE: src/NosCore.Data/Enumerations/Map/MapTypeType.cs
  type MapTypeType (line 9) | public enum MapTypeType : short

FILE: src/NosCore.Data/Enumerations/Map/MonsterType.cs
  type MonsterType (line 9) | public enum MonsterType : byte

FILE: src/NosCore.Data/Enumerations/Miniland/WarehouseType.cs
  type WarehouseType (line 9) | public enum WarehouseType : byte

FILE: src/NosCore.Data/Enumerations/NoscorePocketType.cs
  type NoscorePocketType (line 11) | public enum NoscorePocketType : byte

FILE: src/NosCore.Data/Enumerations/Quest/QuestRewardType.cs
  type QuestRewardType (line 11) | [SuppressMessage("ReSharper", "UnusedMember.Global")]

FILE: src/NosCore.Data/Enumerations/SaveResult.cs
  type SaveResult (line 9) | public enum SaveResult : byte

FILE: src/NosCore.Data/Enumerations/UpdateStatActionType.cs
  type UpdateStatActionType (line 9) | public enum UpdateStatActionType : byte

FILE: src/NosCore.Data/GameObjectMapper.cs
  class GameObjectMapper (line 12) | public class GameObjectMapper<TDto, TGameObject> : IGameObjectMapper<TDto>
    method GameObjectMapper (line 14) | public GameObjectMapper(Func<TGameObject> resolve)
  type IGameObjectMapper (line 20) | public interface IGameObjectMapper<TDto>

FILE: src/NosCore.Data/Resource/LocalizedResources.Designer.cs
  class LocalizedResources (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
    method LocalizedResources (line 31) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...

FILE: src/NosCore.Data/WebApi/AuthIntent.cs
  class AuthIntent (line 9) | public class AuthIntent

FILE: src/NosCore.Data/WebApi/BazaarLink.cs
  class BazaarLink (line 11) | public class BazaarLink

FILE: src/NosCore.Data/WebApi/BazaarRequest.cs
  class BazaarRequest (line 11) | public class BazaarRequest

FILE: src/NosCore.Data/WebApi/BlacklistRequest.cs
  class BlacklistRequest (line 11) | public class BlacklistRequest

FILE: src/NosCore.Data/WebApi/Character.cs
  class Character (line 9) | public class Character

FILE: src/NosCore.Data/WebApi/CharacterRelationStatus.cs
  class CharacterRelationStatus (line 12) | public class CharacterRelationStatus

FILE: src/NosCore.Data/WebApi/FriendShipRequest.cs
  class FriendShipRequest (line 11) | public class FriendShipRequest

FILE: src/NosCore.Data/WebApi/MailRequest.cs
  class MailRequest (line 12) | public class MailRequest

FILE: src/NosCore.Data/WebApi/Subscriber.cs
  class Subscriber (line 11) | public class Subscriber

FILE: src/NosCore.Data/WebApi/WareHouseDepositRequest.cs
  class WareHouseDepositRequest (line 12) | public class WareHouseDepositRequest

FILE: src/NosCore.Data/WebApi/WarehouseLink.cs
  class WarehouseLink (line 11) | public class WarehouseLink

FILE: src/NosCore.Database/DesignTimeDbContextFactory.cs
  class DesignTimeDbContextFactory (line 14) | public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<No...
    method CreateDbContext (line 16) | public NosCoreContext CreateDbContext(string[] args)

FILE: src/NosCore.Database/Entities/Account.cs
  class Account (line 14) | public class Account : IEntity
    method Account (line 16) | public Account()

FILE: src/NosCore.Database/Entities/Act.cs
  class Act (line 14) | public class Act : IStaticEntity
    method Act (line 16) | public Act()

FILE: src/NosCore.Database/Entities/ActPart.cs
  class ActPart (line 14) | public class ActPart : IStaticEntity
    method ActPart (line 16) | public ActPart()

FILE: src/NosCore.Database/Entities/AuditLog.cs
  class AuditLog (line 14) | public class AuditLog

FILE: src/NosCore.Database/Entities/BCard.cs
  class BCard (line 12) | public class BCard : IStaticEntity

FILE: src/NosCore.Database/Entities/Base/I18NStringAttribute.cs
  class I18NStringAttribute (line 11) | public class I18NStringAttribute(Type type) : Attribute

FILE: src/NosCore.Database/Entities/Base/IEntity.cs
  type IEntity (line 9) | public interface IEntity

FILE: src/NosCore.Database/Entities/Base/IStaticEntity.cs
  type IStaticEntity (line 9) | public interface IStaticEntity : IEntity

FILE: src/NosCore.Database/Entities/Base/SynchronizableBaseEntity.cs
  class SynchronizableBaseEntity (line 13) | public abstract class SynchronizableBaseEntity : IEntity

FILE: src/NosCore.Database/Entities/BazaarItem.cs
  class BazaarItem (line 14) | public class BazaarItem : IEntity

FILE: src/NosCore.Database/Entities/BoxInstance.cs
  class BoxInstance (line 9) | public class BoxInstance : SpecialistInstance

FILE: src/NosCore.Database/Entities/Card.cs
  class Card (line 15) | public class Card : IStaticEntity
    method Card (line 17) | public Card()

FILE: src/NosCore.Database/Entities/Character.cs
  class Character (line 17) | public class Character : IEntity
    method Character (line 19) | public Character()

FILE: src/NosCore.Database/Entities/CharacterActPart.cs
  class CharacterActPart (line 11) | public class CharacterActPart : SynchronizableBaseEntity

FILE: src/NosCore.Database/Entities/CharacterQuest.cs
  class CharacterQuest (line 13) | public class CharacterQuest : SynchronizableBaseEntity
    method CharacterQuest (line 15) | public CharacterQuest()

FILE: src/NosCore.Database/Entities/CharacterQuestObjective.cs
  class CharacterQuestObjective (line 12) | public class CharacterQuestObjective : SynchronizableBaseEntity

FILE: src/NosCore.Database/Entities/CharacterRelation.cs
  class CharacterRelation (line 14) | public class CharacterRelation : IEntity

FILE: src/NosCore.Database/Entities/Characterskill.cs
  class CharacterSkill (line 11) | public class CharacterSkill : SynchronizableBaseEntity

FILE: src/NosCore.Database/Entities/Combo.cs
  class Combo (line 12) | public class Combo : IStaticEntity

FILE: src/NosCore.Database/Entities/Drop.cs
  class Drop (line 12) | public class Drop : IStaticEntity

FILE: src/NosCore.Database/Entities/EquipmentOption.cs
  class EquipmentOption (line 13) | public class EquipmentOption : SynchronizableBaseEntity

FILE: src/NosCore.Database/Entities/Family.cs
  class Family (line 14) | public class Family : IEntity
    method Family (line 16) | public Family()

FILE: src/NosCore.Database/Entities/FamilyCharacter.cs
  class FamilyCharacter (line 13) | public class FamilyCharacter : IEntity

FILE: src/NosCore.Database/Entities/FamilyLog.cs
  class FamilyLog (line 14) | public class FamilyLog : IEntity

FILE: src/NosCore.Database/Entities/I18NActDesc.cs
  class I18NActDesc (line 13) | public class I18NActDesc : IEntity

FILE: src/NosCore.Database/Entities/I18NBCard.cs
  class I18NBCard (line 13) | public class I18NBCard : IEntity

FILE: src/NosCore.Database/Entities/I18NCard.cs
  class I18NCard (line 13) | public class I18NCard : IEntity

FILE: src/NosCore.Database/Entities/I18NItem.cs
  class I18NItem (line 13) | public class I18NItem : IEntity

FILE: src/NosCore.Database/Entities/I18NMapIdData.cs
  class I18NMapIdData (line 13) | public class I18NMapIdData : IEntity

FILE: src/NosCore.Database/Entities/I18NMapPointData.cs
  class I18NMapPointData (line 13) | public class I18NMapPointData : IEntity

FILE: src/NosCore.Database/Entities/I18NNpcMonster.cs
  class I18NNpcMonster (line 13) | public class I18NNpcMonster : IEntity

FILE: src/NosCore.Database/Entities/I18NNpcMonsterTalk.cs
  class I18NNpcMonsterTalk (line 13) | public class I18NNpcMonsterTalk : IEntity

FILE: src/NosCore.Database/Entities/I18NQuest.cs
  class I18NQuest (line 13) | public class I18NQuest : IEntity

FILE: src/NosCore.Database/Entities/I18NSkill.cs
  class I18NSkill (line 13) | public class I18NSkill : IEntity

FILE: src/NosCore.Database/Entities/InventoryItemInstance.cs
  class InventoryItemInstance (line 14) | public class InventoryItemInstance : SynchronizableBaseEntity
    method InventoryItemInstance (line 16) | public InventoryItemInstance()

FILE: src/NosCore.Database/Entities/Item.cs
  class Item (line 19) | [StaticMetaData(LoadedMessage = LogLanguageKey.ITEMS_LOADED)]
    method Item (line 22) | public Item()

FILE: src/NosCore.Database/Entities/ItemInstance.cs
  class ItemInstance (line 14) | public class ItemInstance : SynchronizableBaseEntity
    method ItemInstance (line 16) | public ItemInstance()

FILE: src/NosCore.Database/Entities/Mail.cs
  class Mail (line 16) | public class Mail : IEntity

FILE: src/NosCore.Database/Entities/Map.cs
  class Map (line 16) | [StaticMetaData(LoadedMessage = LogLanguageKey.MAPS_LOADED, EmptyMessage...
    method Map (line 19) | public Map()

FILE: src/NosCore.Database/Entities/MapMonster.cs
  class MapMonster (line 15) | [StaticMetaData(LoadedMessage = LogLanguageKey.MAPMONSTERS_LOADED)]

FILE: src/NosCore.Database/Entities/MapNpc.cs
  class MapNpc (line 16) | [StaticMetaData(LoadedMessage = LogLanguageKey.MAPNPCS_LOADED)]
    method MapNpc (line 19) | public MapNpc()

FILE: src/NosCore.Database/Entities/MapType.cs
  class MapType (line 14) | public class MapType : IStaticEntity
    method MapType (line 16) | public MapType()

FILE: src/NosCore.Database/Entities/MapTypeMap.cs
  class MapTypeMap (line 12) | public class MapTypeMap : IStaticEntity

FILE: src/NosCore.Database/Entities/Mate.cs
  class Mate (line 13) | public class Mate : IEntity

FILE: src/NosCore.Database/Entities/Miniland.cs
  class Miniland (line 14) | public class Miniland : IEntity

FILE: src/NosCore.Database/Entities/MinilandObject.cs
  class MinilandObject (line 13) | public class MinilandObject : IEntity

FILE: src/NosCore.Database/Entities/NpcMonster.cs
  class NpcMonster (line 17) | [StaticMetaData(LoadedMessage = LogLanguageKey.NPCMONSTERS_LOADED)]
    method NpcMonster (line 20) | public NpcMonster()

FILE: src/NosCore.Database/Entities/NpcMonsterskill.cs
  class NpcMonsterSkill (line 12) | public class NpcMonsterSkill : IStaticEntity

FILE: src/NosCore.Database/Entities/NpcTalk.cs
  class NpcTalk (line 15) | [StaticMetaData(LoadedMessage = LogLanguageKey.NPCMONSTERSTALKS_LOADED)]
    method NpcTalk (line 18) | public NpcTalk()

FILE: src/NosCore.Database/Entities/PenaltyLog.cs
  class PenaltyLog (line 14) | public class PenaltyLog : IEntity

FILE: src/NosCore.Database/Entities/Portal.cs
  class Portal (line 13) | public class Portal : IStaticEntity

FILE: src/NosCore.Database/Entities/Quest.cs
  class Quest (line 17) | [StaticMetaData(LoadedMessage = LogLanguageKey.QUESTS_LOADED)]
    method Quest (line 20) | public Quest()

FILE: src/NosCore.Database/Entities/QuestObjective.cs
  class QuestObjective (line 16) | [StaticMetaData(LoadedMessage = LogLanguageKey.QUESTOBJECTIVES_LOADED)]
    method QuestObjective (line 19) | public QuestObjective()

FILE: src/NosCore.Database/Entities/QuestQuestReward.cs
  class QuestQuestReward (line 14) | public class QuestQuestReward : IStaticEntity

FILE: src/NosCore.Database/Entities/QuestReward.cs
  class QuestReward (line 15) | [StaticMetaData(LoadedMessage = LogLanguageKey.QUESTREWARDS_LOADED)]
    method QuestReward (line 18) | public QuestReward()

FILE: src/NosCore.Database/Entities/QuicklistEntry.cs
  class QuicklistEntry (line 11) | public class QuicklistEntry : SynchronizableBaseEntity

FILE: src/NosCore.Database/Entities/Recipe.cs
  class Recipe (line 13) | public class Recipe : IStaticEntity
    method Recipe (line 15) | public Recipe()

FILE: src/NosCore.Database/Entities/RecipeItem.cs
  class RecipeItem (line 12) | public class RecipeItem : IEntity

FILE: src/NosCore.Database/Entities/Respawn.cs
  class Respawn (line 12) | public class Respawn : IEntity

FILE: src/NosCore.Database/Entities/RespawnMapType.cs
  class RespawnMapType (line 14) | public class RespawnMapType : IStaticEntity
    method RespawnMapType (line 16) | public RespawnMapType()

FILE: src/NosCore.Database/Entities/RollGeneratedItem.cs
  class RollGeneratedItem (line 12) | public class RollGeneratedItem : IEntity

FILE: src/NosCore.Database/Entities/Script.cs
  class Script (line 15) | [StaticMetaData(LoadedMessage = LogLanguageKey.SCRIPTS_LOADED)]
    method Script (line 18) | public Script()

FILE: src/NosCore.Database/Entities/ScriptedInstance.cs
  class ScriptedInstance (line 13) | public class ScriptedInstance : IEntity

FILE: src/NosCore.Database/Entities/Shop.cs
  class Shop (line 15) | [StaticMetaData(LoadedMessage = LogLanguageKey.SHOPS_LOADED)]
    method Shop (line 18) | public Shop()

FILE: src/NosCore.Database/Entities/ShopItem.cs
  class ShopItem (line 14) | [StaticMetaData(LoadedMessage = LogLanguageKey.SHOPITEMS_LOADED)]

FILE: src/NosCore.Database/Entities/Shopskill.cs
  class ShopSkill (line 14) | [StaticMetaData(LoadedMessage = LogLanguageKey.SHOPSKILLS_LOADED)]

FILE: src/NosCore.Database/Entities/Skill.cs
  class Skill (line 14) | public class Skill : IStaticEntity
    method Skill (line 16) | public Skill()

FILE: src/NosCore.Database/Entities/SpecialistInstance.cs
  class SpecialistInstance (line 9) | public class SpecialistInstance : WearableInstance

FILE: src/NosCore.Database/Entities/StaticBonus.cs
  class StaticBonus (line 14) | public class StaticBonus : IEntity

FILE: src/NosCore.Database/Entities/StaticBuff.cs
  class StaticBuff (line 12) | public class StaticBuff : IEntity

FILE: src/NosCore.Database/Entities/Teleporter.cs
  class Teleporter (line 13) | public class Teleporter : IStaticEntity

FILE: src/NosCore.Database/Entities/Title.cs
  class Title (line 11) | public class Title : SynchronizableBaseEntity

FILE: src/NosCore.Database/Entities/UsableInstance.cs
  class UsableInstance (line 9) | public class UsableInstance : ItemInstance

FILE: src/NosCore.Database/Entities/Warehouse.cs
  class Warehouse (line 13) | public class Warehouse : SynchronizableBaseEntity
    method Warehouse (line 15) | public Warehouse()

FILE: src/NosCore.Database/Entities/WarehouseItem.cs
  class WarehouseItem (line 13) | public class WarehouseItem : SynchronizableBaseEntity

FILE: src/NosCore.Database/Entities/WearableInstance.cs
  class WearableInstance (line 9) | public class WearableInstance : ItemInstance

FILE: src/NosCore.Database/Hosting/PersistenceModule.cs
  class PersistenceModule (line 30) | public sealed class PersistenceModule : Autofac.Module
    method PersistenceModule (line 34) | public PersistenceModule(Action<ContainerBuilder, Type>? onDtoTypeRegi...
    method Load (line 39) | protected override void Load(ContainerBuilder builder)
    method MirrorTo (line 84) | public static void MirrorTo(IServiceCollection services)
    method DiscoverDaoMappings (line 106) | public static IEnumerable<DaoMapping> DiscoverDaoMappings()
    method RegisterDatabaseObject (line 134) | public static void RegisterDatabaseObject<TDto, TDb, TPk>(ContainerBui...
    type DaoMapping (line 181) | public sealed record DaoMapping(Type DtoType, Type DbType, Type PkType...

FILE: src/NosCore.Database/Migrations/20220103074410_FirstMigration.Designer.cs
  class FirstMigration (line 15) | [DbContext(typeof(NosCoreContext))]
    method BuildTargetModel (line 19) | protected override void BuildTargetModel(ModelBuilder modelBuilder)

FILE: src/NosCore.Database/Migrations/20220103074410_FirstMigration.cs
  class FirstMigration (line 10) | public partial class FirstMigration : Migration
    method Up (line 12) | protected override void Up(MigrationBuilder migrationBuilder)
    method Down (line 2393) | protected override void Down(MigrationBuilder migrationBuilder)

FILE: src/NosCore.Database/Migrations/20231125092440_BumpToEf8.Designer.cs
  class BumpToEf8 (line 15) | [DbContext(typeof(NosCoreContext))]
    method BuildTargetModel (line 20) | protected override void BuildTargetModel(ModelBuilder modelBuilder)

FILE: src/NosCore.Database/Migrations/20231125092440_BumpToEf8.cs
  class BumpToEf8 (line 8) | public partial class BumpToEf8 : Migration
    method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder)
    method Down (line 34) | protected override void Down(MigrationBuilder migrationBuilder)

FILE: src/NosCore.Database/Migrations/20260420121955_AddCharacterQuestObjective.Designer.cs
  class AddCharacterQuestObjective (line 15) | [DbContext(typeof(NosCoreContext))]
    method BuildTargetModel (line 20) | protected override void BuildTargetModel(ModelBuilder modelBuilder)

FILE: src/NosCore.Database/Migrations/20260420121955_AddCharacterQuestObjective.cs
  class AddCharacterQuestObjective (line 9) | public partial class AddCharacterQuestObjective : Migration
    method Up (line 12) | protected override void Up(MigrationBuilder migrationBuilder)
    method Down (line 53) | protected override void Down(MigrationBuilder migrationBuilder)

FILE: src/NosCore.Database/Migrations/20260420231052_AddNpcMonsterCanWalk.Designer.cs
  class AddNpcMonsterCanWalk (line 15) | [DbContext(typeof(NosCoreContext))]
    method BuildTargetModel (line 20) | protected override void BuildTargetModel(ModelBuilder modelBuilder)

FILE: src/NosCore.Database/Migrations/20260420231052_AddNpcMonsterCanWalk.cs
  class AddNpcMonsterCanWalk (line 8) | public partial class AddNpcMonsterCanWalk : Migration
    method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder)
    method Down (line 22) | protected override void Down(MigrationBuilder migrationBuilder)

FILE: src/NosCore.Database/Migrations/20260421034800_ParseMonsterDatExtras.Designer.cs
  class ParseMonsterDatExtras (line 15) | [DbContext(typeof(NosCoreContext))]
    method BuildTargetModel (line 20) | protected override void BuildTargetModel(ModelBuilder modelBuilder)

FILE: src/NosCore.Database/Migrations/20260421034800_ParseMonsterDatExtras.cs
  class ParseMonsterDatExtras (line 8) | public partial class ParseMonsterDatExtras : Migration
    method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder)
    method Down (line 163) | protected override void Down(MigrationBuilder migrationBuilder)

FILE: src/NosCore.Database/Migrations/20260421054001_AddBCardSlot.Designer.cs
  class AddBCardSlot (line 15) | [DbContext(typeof(NosCoreContext))]
    method BuildTargetModel (line 20) | protected override void BuildTargetModel(ModelBuilder modelBuilder)

FILE: src/NosCore.Database/Migrations/20260421054001_AddBCardSlot.cs
  class AddBCardSlot (line 8) | public partial class AddBCardSlot : Migration
    method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder)
    method Down (line 22) | protected override void Down(MigrationBuilder migrationBuilder)

FILE: src/NosCore.Database/Migrations/20260421070126_AddMountAndRaidPockets.Designer.cs
  class AddMountAndRaidPockets (line 15) | [DbContext(typeof(NosCoreContext))]
    method BuildTargetModel (line 20) | protected override void BuildTargetModel(ModelBuilder modelBuilder)

FILE: src/NosCore.Database/Migrations/20260421070126_AddMountAndRaidPockets.cs
  class AddMountAndRaidPockets (line 8) | public partial class AddMountAndRaidPockets : Migration
    method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder)
    method Down (line 73) | protected override void Down(MigrationBuilder migrationBuilder)

FILE: src/NosCore.Database/Migrations/20260421105756_DropMapMonsterIsMoving.Designer.cs
  class DropMapMonsterIsMoving (line 15) | [DbContext(typeof(NosCoreContext))]
    method BuildTargetModel (line 20) | protected override void BuildTargetModel(ModelBuilder modelBuilder)

FILE: src/NosCore.Database/Migrations/20260421105756_DropMapMonsterIsMoving.cs
  class DropMapMonsterIsMoving (line 8) | public partial class DropMapMonsterIsMoving : Migration
    method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder)
    method Down (line 19) | protected override void Down(MigrationBuilder migrationBuilder)

FILE: src/NosCore.Database/Migrations/20260421112205_ParseExtraNpcMonsterColumns.Designer.cs
  class ParseExtraNpcMonsterColumns (line 15) | [DbContext(typeof(NosCoreContext))]
    method BuildTargetModel (line 20) | protected override void BuildTargetModel(ModelBuilder modelBuilder)

FILE: src/NosCore.Database/Migrations/20260421112205_ParseExtraNpcMonsterColumns.cs
  class ParseExtraNpcMonsterColumns (line 8) | public partial class ParseExtraNpcMonsterColumns : Migration
    method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder)
    method Down (line 134) | protected override void Down(MigrationBuilder migrationBuilder)

FILE: src/NosCore.Database/Migrations/20260424144528_AddMateCaptureItemEffect.Designer.cs
  class AddMateCaptureItemEffect (line 15) | [DbContext(typeof(NosCoreContext))]
    method BuildTargetModel (line 20) | protected override void BuildTargetModel(ModelBuilder modelBuilder)

FILE: src/NosCore.Database/Migrations/20260424144528_AddMateCaptureItemEffect.cs
  class AddMateCaptureItemEffect (line 8) | public partial class AddMateCaptureItemEffect : Migration
    method Up (line 11) | protected override void Up(MigrationBuilder migrationBuilder)
    method Down (line 73) | protected override void Down(MigrationBuilder migrationBuilder)

FILE: src/NosCore.Database/Migrations/NosCoreContextModelSnapshot.cs
  class NosCoreContextModelSnapshot (line 14) | [DbContext(typeof(NosCoreContext))]
    method BuildModel (line 17) | protected override void BuildModel(ModelBuilder modelBuilder)

FILE: src/NosCore.Database/NosCoreContext.cs
  class NosCoreContext (line 16) | public class NosCoreContext : DbContext
    method NosCoreContext (line 18) | public NosCoreContext(DbContextOptions options) : base(options)
    method HasPostgresEnum (line 159) | static void HasPostgresEnum(ModelBuilder modelBuilder, Type type)
    method OnModelCreating (line 168) | protected override void OnModelCreating(ModelBuilder modelBuilder)

FILE: src/NosCore.GameObject/Ecs/Attributes/ComponentBundleAttribute.cs
  class ComponentBundleAttribute (line 5) | [AttributeUsage(AttributeTargets.Struct)]
    method ComponentBundleAttribute (line 10) | public ComponentBundleAttribute(params Type[] components)

FILE: src/NosCore.GameObject/Ecs/Components/AggroComponent.cs
  type AggroComponent (line 15) | public record struct AggroComponent(

FILE: src/NosCore.GameObject/Ecs/Components/AppearanceComponent.cs
  type AppearanceComponent (line 6) | public record struct AppearanceComponent(

FILE: src/NosCore.GameObject/Ecs/Components/BuffStateComponent.cs
  type BuffStateComponent (line 14) | public record struct BuffStateComponent(ConcurrentDictionary<short, Buff...

FILE: src/NosCore.GameObject/Ecs/Components/CombatComponent.cs
  type CombatComponent (line 7) | public record struct CombatComponent(

FILE: src/NosCore.GameObject/Ecs/Components/EffectComponent.cs
  type EffectComponent (line 3) | public record struct EffectComponent(short Effect, short EffectDelay);

FILE: src/NosCore.GameObject/Ecs/Components/EntityIdentityComponent.cs
  type EntityIdentityComponent (line 5) | public record struct EntityIdentityComponent(long VisualId, VisualType V...

FILE: src/NosCore.GameObject/Ecs/Components/ExperienceComponent.cs
  type ExperienceComponent (line 3) | public record struct ExperienceComponent(byte Level, long LevelXp, byte ...

FILE: src/NosCore.GameObject/Ecs/Components/GoldComponent.cs
  type GoldComponent (line 9) | public record struct GoldComponent(long Gold);

FILE: src/NosCore.GameObject/Ecs/Components/HealthComponent.cs
  type HealthComponent (line 3) | public record struct HealthComponent(int Hp, int MaxHp, bool IsAlive);

FILE: src/NosCore.GameObject/Ecs/Components/ManaComponent.cs
  type ManaComponent (line 3) | public record struct ManaComponent(int Mp, int MaxMp);

FILE: src/NosCore.GameObject/Ecs/Components/MapItemDataComponent.cs
  type MapItemDataComponent (line 7) | public record struct MapItemDataComponent(short VNum, short Amount, long...

FILE: src/NosCore.GameObject/Ecs/Components/NameComponent.cs
  type NameComponent (line 3) | public record struct NameComponent(string Name);

FILE: src/NosCore.GameObject/Ecs/Components/NpcDataComponent.cs
  type NpcDataComponent (line 3) | public record struct NpcDataComponent(short VNum, short Race, byte Level...

FILE: src/NosCore.GameObject/Ecs/Components/NpcMovementComponent.cs
  type NpcMovementComponent (line 3) | public record struct NpcMovementComponent(short FirstX, short FirstY, bo...

FILE: src/NosCore.GameObject/Ecs/Components/NpcStateComponent.cs
  type NpcStateComponent (line 14) | public record struct NpcStateComponent(

FILE: src/NosCore.GameObject/Ecs/Components/PlayerComponent.cs
  type PlayerComponent (line 3) | public record struct PlayerComponent(long AccountId, long CharacterId, b...

FILE: src/NosCore.GameObject/Ecs/Components/PlayerContextComponent.cs
  type PlayerContextComponent (line 13) | public record struct PlayerContextComponent(

FILE: src/NosCore.GameObject/Ecs/Components/PlayerFlagsComponent.cs
  type PlayerFlagsComponent (line 5) | public record struct PlayerFlagsComponent(

FILE: src/NosCore.GameObject/Ecs/Components/PlayerInventoryComponent.cs
  type PlayerInventoryComponent (line 17) | public record struct PlayerInventoryComponent(

FILE: src/NosCore.GameObject/Ecs/Components/PlayerNetworkComponent.cs
  type PlayerNetworkComponent (line 12) | public record struct PlayerNetworkComponent(IPacketSender? Sender, IChan...

FILE: src/NosCore.GameObject/Ecs/Components/PlayerRequestsComponent.cs
  type PlayerRequestsComponent (line 14) | public record struct PlayerRequestsComponent(

FILE: src/NosCore.GameObject/Ecs/Components/PlayerSocialComponent.cs
  type PlayerSocialComponent (line 12) | public record struct PlayerSocialComponent(

FILE: src/NosCore.GameObject/Ecs/Components/PlayerStateComponent.cs
  type PlayerStateComponent (line 7) | public record struct PlayerStateComponent(

FILE: src/NosCore.GameObject/Ecs/Components/PositionComponent.cs
  type PositionComponent (line 5) | public record struct PositionComponent(short PositionX, short PositionY,...

FILE: src/NosCore.GameObject/Ecs/Components/ReputationComponent.cs
  type ReputationComponent (line 3) | public record struct ReputationComponent(long Reputation, short Dignity,...

FILE: src/NosCore.GameObject/Ecs/Components/SkillCooldownComponent.cs
  type SkillCooldownComponent (line 14) | public record struct SkillCooldownComponent(ConcurrentDictionary<short, ...

FILE: src/NosCore.GameObject/Ecs/Components/SpComponent.cs
  type SpComponent (line 3) | public record struct SpComponent(short SpCooldown, int SpPoint, int SpAd...

FILE: src/NosCore.GameObject/Ecs/Components/SpawnComponent.cs
  type SpawnComponent (line 3) | public record struct SpawnComponent(short FirstX, short FirstY, bool IsM...

FILE: src/NosCore.GameObject/Ecs/Components/SpeedComponent.cs
  type SpeedComponent (line 3) | public record struct SpeedComponent(byte Speed);

FILE: src/NosCore.GameObject/Ecs/Components/TimingComponent.cs
  type TimingComponent (line 5) | public record struct TimingComponent(Instant LastMove, Instant LastAttack);

FILE: src/NosCore.GameObject/Ecs/Components/VisualComponent.cs
  type VisualComponent (line 3) | public record struct VisualComponent(short Morph, byte MorphUpgrade, sho...

FILE: src/NosCore.GameObject/Ecs/DignityLevels.cs
  class DignityLevels (line 11) | public static class DignityLevels
    method FromDignity (line 13) | public static DignityType FromDignity(short dignity) => dignity switch

FILE: src/NosCore.GameObject/Ecs/Extensions/AliveEntityExtension.cs
  class AliveEntityExtension (line 35) | public static class AliveEntityExtension
    method ChangeDirAsync (line 37) | public static Task ChangeDirAsync(this IAliveEntity aliveEntity, byte ...
    method GenerateChangeDir (line 44) | public static DirPacket GenerateChangeDir(this IAliveEntity namedEntity)
    method GenerateNpcReq (line 54) | public static RequestNpcPacket GenerateNpcReq(this IAliveEntity namedE...
    method GenerateSubPinit (line 64) | public static PinitSubPacket GenerateSubPinit(this INamedEntity namedE...
    method GenerateSubPidx (line 80) | public static PidxSubPacket GenerateSubPidx(this IAliveEntity playable...
    method GenerateSubPidx (line 85) | public static PidxSubPacket GenerateSubPidx(this IAliveEntity playable...
    method GenerateStatInfo (line 94) | public static StPacket GenerateStatInfo(this IAliveEntity aliveEntity)
    method MoveAsync (line 116) | public static Task MoveAsync(this INonPlayableEntity nonPlayableEntity...
    method RestAsync (line 159) | public static Task RestAsync(this IAliveEntity aliveEntity)
    method GenerateCond (line 166) | public static CondPacket GenerateCond(this IAliveEntity aliveEntity)
    method GenerateSay (line 178) | public static SayPacket GenerateSay(this IAliveEntity aliveEntity, str...
    method GenerateSayItem (line 189) | public static SayItemPacket GenerateSayItem(this IAliveEntity aliveEnt...
    method GenerateShop (line 207) | public static ShopPacket GenerateShop(this IAliveEntity visualEntity, ...
    method GenerateUseItem (line 220) | public static UseItemPacket GenerateUseItem(this IAliveEntity aliveEnt...
    method GeneratePairy (line 234) | public static PairyPacket GeneratePairy(this IAliveEntity aliveEntity,...
    method GenerateCMode (line 248) | public static CModePacket GenerateCMode(this IAliveEntity aliveEntity)
    method GenerateCharSc (line 262) | public static CharScPacket GenerateCharSc(this IAliveEntity aliveEntity)
    method GenerateMove (line 272) | public static MovePacket GenerateMove(this IAliveEntity aliveEntity)
    method GenerateMove (line 277) | public static MovePacket GenerateMove(this IAliveEntity aliveEntity, s...
    method GenerateEff (line 289) | public static EffectPacket GenerateEff(this IAliveEntity aliveEntity, ...
    method GenerateSay (line 299) | public static SayPacket GenerateSay(this IAliveEntity aliveEntity, Say...
    method GenerateRest (line 310) | public static RestPacket GenerateRest(this IAliveEntity aliveEntity)
    method GeneratePFlag (line 320) | public static PflagPacket GeneratePFlag(this IAliveEntity aliveEntity)
    method SetLevel (line 330) | public static void SetLevel(this INamedEntity experiencedEntity, byte ...
    method GenerateNInv (line 338) | public static NInvPacket GenerateNInv(this IAliveEntity aliveEntity, d...

FILE: src/NosCore.GameObject/Ecs/Extensions/CharacterEntityExtension.cs
  class CharacterEntityExtension (line 55) | public static class CharacterEntityExtension
    method GenerateInv (line 57) | [Obsolete(
    method GenerateSki (line 187) | public static SkiPacket GenerateSki(this ICharacterEntity characterEnt...
    method GenerateQuicklist (line 199) | public static IEnumerable<QSlotPacket> GenerateQuicklist(this ICharact...
    method GenerateRsfi (line 228) | public static NosCore.Packets.ServerPackets.Player.RsfiPacket Generate...
    method GenerateServerExcListPacket (line 241) | public static ServerExcListPacket GenerateServerExcListPacket(this ICh...
    method GenerateInvisible (line 254) | public static ClPacket GenerateInvisible(this ICharacterEntity visualE...
    method SendFinfoAsync (line 264) | public static async Task SendFinfoAsync(this ICharacterEntity visualEn...
    method GenerateQuestPacket (line 295) | public static QstlistPacket GenerateQuestPacket(this ICharacterEntity ...
    method GetEquipmentSubPacket (line 301) | public static InEquipmentSubPacket GetEquipmentSubPacket(this ICharact...
    method GenerateGoldPacket (line 325) | private static GoldPacket GenerateGoldPacket(ICharacterEntity characte...
    method GenerateLevPacket (line 327) | private static LevPacket GenerateLevPacket(ICharacterEntity characterE...
    method GenerateStatPacket (line 343) | private static StatPacket GenerateStatPacket(ICharacterEntity characte...
    method GenerateFdPacket (line 353) | private static FdPacket GenerateFdPacket(ICharacterEntity characterEnt...
    method AddGoldAsync (line 361) | public static Task AddGoldAsync(this ICharacterEntity characterEntity)
    method AddGoldAsync (line 366) | public static async Task AddGoldAsync(this ICharacterEntity characterE...
    method RemoveGoldAsync (line 373) | public static async Task RemoveGoldAsync(this ICharacterEntity charact...
    method GenerateUpdateGoldSayPacket (line 380) | private static SayPacket GenerateUpdateGoldSayPacket(ICharacterEntity ...
    method SetJobLevelAsync (line 391) | public static async Task SetJobLevelAsync(this ICharacterEntity charac...
    method SetHeroLevelAsync (line 404) | public static async Task SetHeroLevelAsync(this ICharacterEntity chara...
    method JoinGroup (line 419) | public static void JoinGroup(this ICharacterEntity characterEntity, Gr...
    method LeaveGroupAsync (line 425) | public static async Task LeaveGroupAsync(this ICharacterEntity charact...
    method AddBankGold (line 456) | public static void AddBankGold(this ICharacterEntity characterEntity, ...
    method RemoveBankGold (line 461) | public static void RemoveBankGold(this ICharacterEntity characterEntit...
    method CloseShopAsync (line 466) | public static async Task CloseShopAsync(this ICharacterEntity characte...
    method BuyAsync (line 478) | public static async Task BuyAsync(this ICharacterEntity characterEntit...
    method BuyFromOwnerAsync (line 618) | private static async Task<NInvPacket?> BuyFromOwnerAsync(ICharacterEnt...

FILE: src/NosCore.GameObject/Ecs/Extensions/GroupExtension.cs
  class GroupExtension (line 17) | public static class GroupExtension
    method GeneratePidx (line 19) | public static PidxPacket GeneratePidx(this Group group, INamedEntity e...
    method GeneratePidx (line 29) | public static PidxPacket GeneratePidx(this Group group, PlayerComponen...

FILE: src/NosCore.GameObject/Ecs/Extensions/ItemInstanceExtension.cs
  class IItemInstanceExtension (line 17) | public static class IItemInstanceExtension
    method GenerateIvnSubPacket (line 19) | public static IvnSubPacket GenerateIvnSubPacket(this IItemInstance? it...
    method GeneratePocketChange (line 41) | public static IvnPacket GeneratePocketChange(this InventoryItemInstanc...
    method GeneratePocketChange (line 72) | public static IvnPacket? GeneratePocketChange(this List<InventoryItemI...

FILE: src/NosCore.GameObject/Ecs/Extensions/MapItemBundleExtensions.cs
  class MapItemBundleExtensions (line 13) | public static class MapItemBundleExtensions
    method GenerateIn (line 15) | public static InPacket GenerateIn(this MapItemComponentBundle item)
    method GenerateDrop (line 33) | public static DropPacket GenerateDrop(this MapItemComponentBundle item)

FILE: src/NosCore.GameObject/Ecs/Extensions/MonsterBundleExtensions.cs
  class MonsterBundleExtensions (line 16) | public static class MonsterBundleExtensions
    method GenerateIn (line 18) | public static InPacket GenerateIn(this MonsterComponentBundle monster)
    method GenerateCond (line 42) | public static CondPacket GenerateCond(this MonsterComponentBundle mons...
    method GenerateMove (line 54) | public static MovePacket GenerateMove(this MonsterComponentBundle mons...
    method GenerateCharSc (line 66) | public static CharScPacket GenerateCharSc(this MonsterComponentBundle ...

FILE: src/NosCore.GameObject/Ecs/Extensions/NonPlayableEntityExtension.cs
  class NonPlayableEntityExtension (line 33) | public static class NonPlayableEntityExtension
    method InitializeShopAndDialog (line 35) | public static void InitializeShopAndDialog(this NpcComponentBundle bun...
    method StopLife (line 92) | public static void StopLife(this INonPlayableEntity entity)
    method StartLifeAsync (line 98) | public static Task StartLifeAsync(this INonPlayableEntity entity, IHeu...
    method StartLifeAsync (line 107) | public static Task StartLifeAsync(this INonPlayableEntity entity, IMon...
    method ShowDialogAsync (line 137) | public static Task ShowDialogAsync(this INonPlayableEntity entity, Req...

FILE: src/NosCore.GameObject/Ecs/Extensions/NpcBundleExtensions.cs
  class NpcBundleExtensions (line 16) | public static class NpcBundleExtensions
    method GenerateIn (line 18) | public static InPacket GenerateIn(this NpcComponentBundle npc, short? ...
    method GenerateCond (line 42) | public static CondPacket GenerateCond(this NpcComponentBundle npc)
    method GenerateMove (line 54) | public static MovePacket GenerateMove(this NpcComponentBundle npc, sho...
    method GenerateCharSc (line 66) | public static CharScPacket GenerateCharSc(this NpcComponentBundle npc)

FILE: src/NosCore.GameObject/Ecs/Extensions/NpcInfoExtensions.cs
  class NpcInfoExtensions (line 14) | public static class NpcInfoExtensions
    method GenerateNpcInfo (line 25) | public static EInfoNpcMonsterPacket GenerateNpcInfo(this NpcMonsterDto...
    method GenerateMateInfo (line 56) | public static EInfoNpcMonsterPacket GenerateMateInfo(this MateDto mate...

FILE: src/NosCore.GameObject/Ecs/Extensions/PlayerBundleExtensions.cs
  class PlayerBundleExtensions (line 57) | public static class PlayerBundleExtensions
    method SendPacketAsync (line 59) | public static Task SendPacketAsync(this PlayerComponentBundle player, ...
    method SendPacketsAsync (line 64) | public static Task SendPacketsAsync(this PlayerComponentBundle player,...
    method RestAsync (line 69) | public static async Task RestAsync(this PlayerComponentBundle player)
    method GenerateTalk (line 75) | public static TalkPacket GenerateTalk(this PlayerComponentBundle playe...
    method GenerateSpk (line 84) | public static SpeakPacket GenerateSpk(this PlayerComponentBundle playe...
    method GenerateSay (line 96) | public static SayPacket GenerateSay(this PlayerComponentBundle player,...
    method GenerateFinitAsync (line 107) | public static async Task<FinitPacket> GenerateFinitAsync(this PlayerCo...
    method GenerateBlinitAsync (line 132) | public static async Task<BlinitPacket> GenerateBlinitAsync(this Player...
    method SetReputationAsync (line 147) | public static async Task SetReputationAsync(this PlayerComponentBundle...
    method SetLevelAsync (line 158) | public static async Task SetLevelAsync(this PlayerComponentBundle play...
    method GenerateIn (line 218) | public static InPacket GenerateIn(this PlayerComponentBundle player, s...
    method GetEquipmentSubPacket (line 269) | public static InEquipmentSubPacket GetEquipmentSubPacket(this PlayerCo...
    method GetWeaponUpgradeRareSubPacket (line 287) | public static UpgradeRareSubPacket GetWeaponUpgradeRareSubPacket(this ...
    method GetArmorUpgradeRareSubPacket (line 297) | public static UpgradeRareSubPacket GetArmorUpgradeRareSubPacket(this P...
    method GenerateStat (line 307) | public static StatPacket GenerateStat(this PlayerComponentBundle player)
    method GenerateGold (line 320) | public static GoldPacket GenerateGold(this PlayerComponentBundle player)
    method GenerateLev (line 325) | public static LevPacket GenerateLev(this PlayerComponentBundle player,
    method GenerateFd (line 346) | public static FdPacket GenerateFd(this PlayerComponentBundle player)
    method GenerateReqInfo (line 362) | public static TcInfoPacket GenerateReqInfo(this PlayerComponentBundle ...
    method GenerateAt (line 413) | public static AtPacket GenerateAt(this PlayerComponentBundle player, s...
    method GenerateCInfo (line 429) | public static CInfoPacket GenerateCInfo(this PlayerComponentBundle pla...
    method GenerateCond (line 455) | public static CondPacket GenerateCond(this PlayerComponentBundle player)
    method GenerateCMode (line 467) | public static CModePacket GenerateCMode(this PlayerComponentBundle pla...
    method GenerateOut (line 481) | public static OutPacket GenerateOut(this PlayerComponentBundle player)
    method GenerateRest (line 490) | public static RestPacket GenerateRest(this PlayerComponentBundle player)
    method GetReputationIcon (line 500) | private static int GetReputationIcon(long reputation)
    method GetDignityIcon (line 524) | private static int GetDignityIcon(int dignity)
    method GenerateEff (line 537) | public static EffectPacket GenerateEff(this PlayerComponentBundle play...
    method GenerateSay (line 547) | public static SayPacket GenerateSay(this PlayerComponentBundle player,...
    method GenerateUseItem (line 558) | public static UseItemPacket GenerateUseItem(this PlayerComponentBundle...
    method GenerateEq (line 571) | public static EqPacket GenerateEq(this PlayerComponentBundle player)
    method GenerateEquipment (line 588) | public static EquipPacket GenerateEquipment(this PlayerComponentBundle...
    method GenerateSpPoint (line 635) | public static SpPacket GenerateSpPoint(this PlayerComponentBundle play...
    method GenerateTitInfo (line 646) | public static TitleInfoPacket GenerateTitInfo(this PlayerComponentBund...
    method GeneratePairy (line 659) | public static PairyPacket GeneratePairy(this PlayerComponentBundle pla...
    method GenerateTitle (line 680) | public static TitlePacket GenerateTitle(this PlayerComponentBundle pla...
    method GenerateIcon (line 693) | public static IconPacket GenerateIcon(this PlayerComponentBundle playe...
    method GenerateGet (line 704) | public static ServerGetPacket GenerateGet(this PlayerComponentBundle p...
    method GenerateMlobjlst (line 714) | public static MlobjlstPacket GenerateMlobjlst(this PlayerComponentBund...
    method GenerateSayItem (line 747) | public static SayItemPacket GenerateSayItem(this PlayerComponentBundle...
    method GenerateStatInfo (line 765) | public static StPacket GenerateStatInfo(this PlayerComponentBundle pla...
    method GeneratePFlag (line 783) | public static PflagPacket GeneratePFlag(this PlayerComponentBundle pla...
    method GenerateShop (line 793) | public static ShopPacket GenerateShop(this PlayerComponentBundle playe...
    method GenerateChangeDir (line 806) | public static DirPacket GenerateChangeDir(this PlayerComponentBundle p...
    method GenerateMove (line 816) | public static MovePacket GenerateMove(this PlayerComponentBundle player)
    method GenerateMove (line 821) | public static MovePacket GenerateMove(this PlayerComponentBundle playe...
    method GenerateSubPidx (line 833) | public static PidxSubPacket GenerateSubPidx(this PlayerComponentBundle...
    method GenerateSubPidx (line 838) | public static PidxSubPacket GenerateSubPidx(this PlayerComponentBundle...
    method GenerateSubPinit (line 847) | public static PinitSubPacket GenerateSubPinit(this PlayerComponentBund...
    method LoadExpensions (line 863) | public static void LoadExpensions(this PlayerComponentBundle player)
    method GenerateExts (line 874) | public static ExtsPacket GenerateExts(this PlayerComponentBundle playe...
    method AddSpPoints (line 884) | public static void AddSpPoints(this PlayerComponentBundle player, int ...
    method AddAdditionalSpPoints (line 891) | public static void AddAdditionalSpPoints(this PlayerComponentBundle pl...
    method RemoveGold (line 898) | public static void RemoveGold(this PlayerComponentBundle player, long ...
    method GenerateTit (line 903) | public static TitPacket GenerateTit(this PlayerComponentBundle player)
  class ClientSessionMailExtensions (line 913) | public static class ClientSessionMailExtensions
    method GenerateMailAsync (line 915) | public static async Task GenerateMailAsync(this ClientSession session,...
    method ChangeClassAsync (line 945) | public static async Task ChangeClassAsync(this ClientSession session, ...

FILE: src/NosCore.GameObject/Ecs/Extensions/VisualEntityExtension.cs
  class VisualEntityExtension (line 16) | public static class VisualEntityExtension
    method GenerateIn (line 19) | public static InPacket GenerateIn(this INonPlayableEntity visualEntity)
    method GenerateSpk (line 45) | public static SpeakPacket GenerateSpk(this INamedEntity visualEntity, ...

FILE: src/NosCore.GameObject/Ecs/Interfaces/IAliveEntity.cs
  type IAliveEntity (line 14) | public interface IAliveEntity : IVisualEntity

FILE: src/NosCore.GameObject/Ecs/Interfaces/ICharacterEntity.cs
  type ICharacterEntity (line 27) | public interface ICharacterEntity : INamedEntity
    method SendPacketAsync (line 99) | Task SendPacketAsync(IPacket packetDefinition);
    method SendPacketsAsync (line 101) | Task SendPacketsAsync(IEnumerable<IPacket> packetDefinitions);

FILE: src/NosCore.GameObject/Ecs/Interfaces/INamedEntity.cs
  type INamedEntity (line 11) | public interface INamedEntity : IAliveEntity

FILE: src/NosCore.GameObject/Ecs/Interfaces/INonPlayableEntity.cs
  type INonPlayableEntity (line 13) | public interface INonPlayableEntity : IAliveEntity

FILE: src/NosCore.GameObject/Ecs/Interfaces/IVisualEntity.cs
  type IVisualEntity (line 13) | public interface IVisualEntity

FILE: src/NosCore.GameObject/Ecs/MapItemComponentBundle.cs
  type MapItemComponentBundle (line 6) | [ComponentBundle(

FILE: src/NosCore.GameObject/Ecs/MapWorld.cs
  class MapWorld (line 27) | public class MapWorld : IDisposable
    method MapWorld (line 31) | public MapWorld()
    method TryGetComponent (line 36) | public T? TryGetComponent<T>(Entity entity) where T : struct
    method SetComponent (line 49) | public void SetComponent<T>(Entity entity, T component) where T : struct
    method HasComponent (line 54) | public bool HasComponent<T>(Entity entity) where T : struct
    method AddComponent (line 59) | public void AddComponent<T>(Entity entity, T component) where T : struct
    method RemoveComponent (line 64) | public void RemoveComponent<T>(Entity entity) where T : struct
    method CreateMonster (line 69) | public Entity CreateMonster(
    method CreateNpc (line 101) | public Entity CreateNpc(
    method CreateMapItem (line 140) | public Entity CreateMapItem(
    method CreatePlayer (line 160) | public Entity CreatePlayer(
    method ClonePlayer (line 216) | public Entity ClonePlayer(
    method DestroyEntity (line 246) | public void DestroyEntity(Entity entity)
    method Dispose (line 251) | public void Dispose()

FILE: src/NosCore.GameObject/Ecs/MonsterComponentBundle.cs
  type MonsterComponentBundle (line 7) | [ComponentBundle(

FILE: src/NosCore.GameObject/Ecs/NpcComponentBundle.cs
  type NpcComponentBundle (line 7) | [ComponentBundle(

FILE: src/NosCore.GameObject/Ecs/PlayerComponentBundle.cs
  type PlayerComponentBundle (line 12) | [ComponentBundle(
    method SendPacketAsync (line 102) | public Task SendPacketAsync(IPacket? packet)
    method SendPacketsAsync (line 107) | public Task SendPacketsAsync(IEnumerable<IPacket?> packets)

FILE: src/NosCore.GameObject/Ecs/ReputationLevels.cs
  class ReputationLevels (line 11) | public static class ReputationLevels
    method FromReputation (line 13) | public static ReputationType FromReputation(long reputation) => reputa...

FILE: src/NosCore.GameObject/Ecs/Systems/MovementSystem.cs
  class MovementSystem (line 16) | public class MovementSystem
    method MovementSystem (line 22) | public MovementSystem(IClock clock, IHeuristic distanceCalculator)
    method Update (line 30) | public void Update(MapWorld world, Map.Map map, Action<Entity, MoveDat...
  type MoveData (line 71) | public readonly record struct MoveData(short MapX, short MapY, byte Speed);

FILE: src/NosCore.GameObject/Ecs/Systems/VisibilitySystem.cs
  class VisibilitySystem (line 15) | public class VisibilitySystem
    method VisibilitySystem (line 21) | public VisibilitySystem()
    method GetMonsterEntities (line 32) | public IEnumerable<Entity> GetMonsterEntities(MapWorld world)
    method GetNpcEntities (line 46) | public IEnumerable<Entity> GetNpcEntities(MapWorld world)
    method GetMapItemEntities (line 60) | public IEnumerable<Entity> GetMapItemEntities(MapWorld world)
    method GetEntitiesInRange (line 70) | public IEnumerable<Entity> GetEntitiesInRange(MapWorld world, short ce...

FILE: src/NosCore.GameObject/Hosting/Modules/NetworkingModule.cs
  class NetworkingModule (line 27) | public sealed class NetworkingModule : Module
    method Load (line 29) | protected override void Load(ContainerBuilder builder)
    method DispatchPacketAsync (line 63) | private static async Task DispatchPacketAsync(ClientSession session, N...
    method DispatchDisconnectAsync (line 75) | private static async Task DispatchDisconnectAsync(ClientSession sessio...

FILE: src/NosCore.GameObject/Infastructure/IPacketHandler.cs
  type IPacketHandler (line 13) | public interface IPacketHandler
    method ExecuteAsync (line 15) | Task ExecuteAsync(IPacket packet, ClientSession clientSession);
    method ExecuteAsync (line 28) | Task ExecuteAsync(TPacket packet, ClientSession clientSession);
  type ILoginPacketHandler (line 18) | public interface ILoginPacketHandler
  type IWorldPacketHandler (line 22) | public interface IWorldPacketHandler
  type IPacketHandler (line 26) | public interface IPacketHandler<in TPacket> : IPacketHandler where TPack...
    method ExecuteAsync (line 15) | Task ExecuteAsync(IPacket packet, ClientSession clientSession);
    method ExecuteAsync (line 28) | Task ExecuteAsync(TPacket packet, ClientSession clientSession);
  class PacketHandler (line 31) | public abstract class PacketHandler<TPacket> : IPacketHandler<TPacket> w...
    method ExecuteAsync (line 33) | public abstract Task ExecuteAsync(TPacket packet, ClientSession client...
    method ExecuteAsync (line 35) | public Task ExecuteAsync(IPacket packet, ClientSession clientSession)

FILE: src/NosCore.GameObject/Infastructure/ISingletonService.cs
  type ISingletonService (line 16) | public interface ISingletonService { }

FILE: src/NosCore.GameObject/InterChannelCommunication/HubConnectionFactory.cs
  class HubConnectionFactory (line 22) | public class HubConnectionFactory(IOptions<ServerConfiguration> serverCo...
    method Create (line 24) | public HubConnection Create(string name)

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/AuthHub/AuthHub.cs
  class AuthHub (line 17) | [Authorize]
    method AuthHub (line 22) | public AuthHub(IAuthCodeService authCodeService)
    method GetAwaitingConnectionAsync (line 27) | public Task<string?> GetAwaitingConnectionAsync(string? id, string? to...
    method HexStringToString (line 55) | private static string HexStringToString(string hexString)
    method SetAwaitingConnectionAsync (line 73) | public Task SetAwaitingConnectionAsync(long sessionId, string accountN...
    method StoreAuthCodeAsync (line 79) | public Task StoreAuthCodeAsync(string authCode, string accountName)
    method RegisterSessionIpAsync (line 85) | public Task RegisterSessionIpAsync(string accountName, string ipAddress)
    method UnregisterSessionIpAsync (line 91) | public Task UnregisterSessionIpAsync(string accountName)
    method GetSessionIpAsync (line 97) | public Task<string?> GetSessionIpAsync(string accountName)

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/AuthHub/AuthHubClient.cs
  class AuthHubClient (line 13) | public class AuthHubClient(HubConnectionFactory hubConnectionFactory) : ...
    method DisposeAsync (line 17) | public ValueTask DisposeAsync() => _hubConnection.DisposeAsync();
    method GetAwaitingConnectionAsync (line 19) | public async Task<string?> GetAwaitingConnectionAsync(string? name, st...
    method SetAwaitingConnectionAsync (line 32) | public async Task SetAwaitingConnectionAsync(long sessionId, string ac...
    method StoreAuthCodeAsync (line 45) | public async Task StoreAuthCodeAsync(string authCode, string accountName)
    method RegisterSessionIpAsync (line 58) | public async Task RegisterSessionIpAsync(string accountName, string ip...
    method UnregisterSessionIpAsync (line 71) | public async Task UnregisterSessionIpAsync(string accountName)
    method GetSessionIpAsync (line 84) | public async Task<string?> GetSessionIpAsync(string accountName)

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/AuthHub/IAuthHub.cs
  type IAuthHub (line 11) | public interface IAuthHub
    method GetAwaitingConnectionAsync (line 13) | Task<string?> GetAwaitingConnectionAsync(string? name, string? packetP...
    method SetAwaitingConnectionAsync (line 15) | Task SetAwaitingConnectionAsync(long sessionId, string accountName);
    method StoreAuthCodeAsync (line 22) | Task StoreAuthCodeAsync(string authCode, string accountName);
    method RegisterSessionIpAsync (line 24) | Task RegisterSessionIpAsync(string accountName, string ipAddress);
    method UnregisterSessionIpAsync (line 25) | Task UnregisterSessionIpAsync(string accountName);
    method GetSessionIpAsync (line 26) | Task<string?> GetSessionIpAsync(string accountName);

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/BaseHubClient.cs
  class BaseHubClient (line 17) | public abstract class BaseHubClient : IAsyncDisposable
    method BaseHubClient (line 25) | protected BaseHubClient(HubConnectionFactory hubConnectionFactory, str...
    method EnsureConnectedAsync (line 59) | protected async Task EnsureConnectedAsync()
    method InvokeAsync (line 81) | protected async Task<T> InvokeAsync<T>(string methodName, params objec...
    method InvokeAsync (line 90) | protected async Task InvokeAsync(string methodName, params object?[] a...
    method DisposeAsync (line 99) | public async ValueTask DisposeAsync()

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/BazaarHub/BazaarHub.cs
  class BazaarHub (line 17) | public class BazaarHub(IBazaarService bazaarService) : Hub, IBazaarHub
    method GetBazaar (line 19) | public Task<List<BazaarLink>> GetBazaar(long id, byte? index, byte? pa...
    method DeleteBazaarAsync (line 23) | public Task<bool> DeleteBazaarAsync(long id, short count, string reque...
    method AddBazaarAsync (line 25) | public Task<LanguageKey> AddBazaarAsync(BazaarRequest bazaarRequest) =...
    method ModifyBazaarAsync (line 28) | public Task<BazaarLink?> ModifyBazaarAsync(long id, Json.Patch.JsonPat...

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/BazaarHub/BazaarHubClient.cs
  class BazaarHubClient (line 16) | public class BazaarHubClient(HubConnectionFactory hubConnectionFactory, ...
    method GetBazaar (line 19) | public Task<List<BazaarLink>> GetBazaar(long id, byte? index, byte? pa...
    method DeleteBazaarAsync (line 24) | public Task<bool> DeleteBazaarAsync(long id, short count, string reque...
    method AddBazaarAsync (line 27) | public Task<LanguageKey> AddBazaarAsync(BazaarRequest bazaarRequest) =>
    method ModifyBazaarAsync (line 30) | public Task<BazaarLink?> ModifyBazaarAsync(long id, Json.Patch.JsonPat...

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/BazaarHub/IBazaarHub.cs
  type IBazaarHub (line 15) | public interface IBazaarHub
    method GetBazaar (line 17) | Task<List<BazaarLink>> GetBazaar(long id, byte? index, byte? pageSize,...
    method DeleteBazaarAsync (line 19) | Task<bool> DeleteBazaarAsync(long id, short count, string requestChara...
    method AddBazaarAsync (line 20) | Task<LanguageKey> AddBazaarAsync(BazaarRequest bazaarRequest);
    method ModifyBazaarAsync (line 21) | Task<BazaarLink?> ModifyBazaarAsync(long id, Json.Patch.JsonPatch bzMod);

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/BlacklistHub/BlacklistHub.cs
  class BlacklistHub (line 17) | public class BlacklistHub(IBlacklistService blacklistService) : Hub, IBl...
    method AddBlacklistAsync (line 19) | public Task<LanguageKey> AddBlacklistAsync(BlacklistRequest blacklistR...
    method GetBlacklistedAsync (line 21) | public Task<List<CharacterRelationStatus>> GetBlacklistedAsync(long id...
    method DeleteAsync (line 23) | public async Task<bool> DeleteAsync(Guid id) => await blacklistService...

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/BlacklistHub/BlacklistHubClient.cs
  class BlacklistHubClient (line 16) | public class BlacklistHubClient(HubConnectionFactory hubConnectionFactor...
    method AddBlacklistAsync (line 19) | public Task<LanguageKey> AddBlacklistAsync(BlacklistRequest blacklistR...
    method GetBlacklistedAsync (line 22) | public Task<List<CharacterRelationStatus>> GetBlacklistedAsync(long id...
    method DeleteAsync (line 25) | public Task<bool> DeleteAsync(Guid id) =>

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/BlacklistHub/IBlacklistHub.cs
  type IBlacklistHub (line 15) | public interface IBlacklistHub
    method AddBlacklistAsync (line 17) | Task<LanguageKey> AddBlacklistAsync(BlacklistRequest blacklistRequest);
    method GetBlacklistedAsync (line 18) | Task<List<CharacterRelationStatus>> GetBlacklistedAsync(long id);
    method DeleteAsync (line 19) | Task<bool> DeleteAsync(Guid id);

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/ChannelHub/ChannelHub.cs
  class ChannelHub (line 23) | public class ChannelHub(ILogger<PubSubHub> logger, MasterClientList mast...
    method OnDisconnectedAsync (line 26) | public override async Task OnDisconnectedAsync(Exception? exception)
    method Bind (line 42) | public Task Bind(Channel data)
    method GetCommunicationChannels (line 66) | public Task<List<ChannelInfo>> GetCommunicationChannels()
    method Ping (line 71) | public Task<bool> Ping() => Task.FromResult(true);
    method SetMaintenance (line 73) | public Task SetMaintenance(bool isGlobal, bool value)

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/ChannelHub/ChannelHubClient.cs
  class ChannelHubClient (line 13) | public class ChannelHubClient(HubConnectionFactory hubConnectionFactory,...
    method Bind (line 17) | public async Task Bind(Channel data)
    method GetCommunicationChannels (line 35) | public Task<List<ChannelInfo>> GetCommunicationChannels()
    method Ping (line 40) | public Task<bool> Ping()
    method SetMaintenance (line 45) | public Task SetMaintenance(bool isGlobal, bool value)

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/ChannelHub/IChannelHub.cs
  type IChannelHub (line 13) | public interface IChannelHub
    method Bind (line 15) | Task Bind(Channel data);
    method GetCommunicationChannels (line 17) | Task<List<ChannelInfo>> GetCommunicationChannels();
    method SetMaintenance (line 18) | Task SetMaintenance(bool isGlobal, bool value);
    method Ping (line 20) | Task<bool> Ping();

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/FriendHub/FriendHub.cs
  class FriendHub (line 17) | public class FriendHub(IFriendService friendService) : Hub, IFriendHub
    method AddFriendAsync (line 19) | public Task<LanguageKey> AddFriendAsync(FriendShipRequest friendPacket...
    method GetFriendsAsync (line 21) | public Task<List<CharacterRelationStatus>> GetFriendsAsync(long id) =>...
    method DeleteAsync (line 23) | public async Task<bool> DeleteAsync(Guid id) => await friendService.De...

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/FriendHub/FriendHubClient.cs
  class FriendHubClient (line 16) | public class FriendHubClient(HubConnectionFactory hubConnectionFactory, ...
    method AddFriendAsync (line 19) | public Task<LanguageKey> AddFriendAsync(FriendShipRequest friendPacket...
    method GetFriendsAsync (line 22) | public Task<List<CharacterRelationStatus>> GetFriendsAsync(long id) =>
    method DeleteAsync (line 25) | public Task<bool> DeleteAsync(Guid id) =>

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/FriendHub/IFriendHub.cs
  type IFriendHub (line 15) | public interface IFriendHub
    method AddFriendAsync (line 17) | Task<LanguageKey> AddFriendAsync(FriendShipRequest friendPacket);
    method GetFriendsAsync (line 18) | Task<List<CharacterRelationStatus>> GetFriendsAsync(long id);
    method DeleteAsync (line 19) | Task<bool> DeleteAsync(Guid id);

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/MailHub/IMailHub.cs
  type IMailHub (line 15) | public interface IMailHub
    method GetMails (line 17) | Task<List<MailData>> GetMails(long id, long characterId, bool senderCo...
    method DeleteMailAsync (line 18) | Task<bool> DeleteMailAsync(long id, long characterId, bool senderCopy);
    method ViewMailAsync (line 19) | Task<MailData?> ViewMailAsync(long id, JsonPatch mailData);
    method SendMailAsync (line 20) | Task<bool> SendMailAsync(MailRequest mail);

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/MailHub/MailHub.cs
  class MailHub (line 17) | public class MailHub(IMailService mailService) : Hub, IMailHub
    method GetMails (line 19) | public Task<List<MailData>> GetMails(long id, long characterId, bool s...
    method DeleteMailAsync (line 21) | public Task<bool> DeleteMailAsync(long id, long characterId, bool send...
    method ViewMailAsync (line 23) | public Task<MailData?> ViewMailAsync(long id, JsonPatch mailData) => m...
    method SendMailAsync (line 25) | public Task<bool> SendMailAsync(MailRequest mail) => mailService.SendM...

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/MailHub/MailHubClient.cs
  class MailHubClient (line 16) | public class MailHubClient(HubConnectionFactory hubConnectionFactory, IL...
    method GetMails (line 19) | public Task<List<MailData>> GetMails(long id, long characterId, bool s...
    method DeleteMailAsync (line 22) | public Task<bool> DeleteMailAsync(long id, long characterId, bool send...
    method ViewMailAsync (line 25) | public Task<MailData?> ViewMailAsync(long id, JsonPatch mailData) =>
    method SendMailAsync (line 28) | public Task<bool> SendMailAsync(MailRequest mail) =>

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/PubSub/IPubSubHub.cs
  type IPubSubHub (line 15) | public interface IPubSubHub
    method SendMessageAsync (line 17) | Task<bool> SendMessageAsync(IMessage message);
    method SendMessagesAsync (line 19) | Task<bool> SendMessagesAsync(List<IMessage> messages);
    method GetSubscribersAsync (line 21) | Task<List<Subscriber>> GetSubscribersAsync();
    method SubscribeAsync (line 23) | Task<bool> SubscribeAsync(Subscriber subscriber);
    method UnsubscribeAsync (line 25) | Task<bool> UnsubscribeAsync(long id);
  type IPubSubHubClient (line 28) | public interface IPubSubHubClient : IPubSubHub
    method StartAsync (line 32) | Task StartAsync();
    method StopAsync (line 34) | Task StopAsync();

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/PubSub/PubSubHub.cs
  class PubSubHub (line 17) | public class PubSubHub(MasterClientList masterClientList)
    method SendMessageAsync (line 20) | public async Task<bool> SendMessageAsync(IMessage message)
    method SendMessagesAsync (line 26) | public async Task<bool> SendMessagesAsync(List<IMessage> messages)
    method GetSubscribersAsync (line 35) | public Task<List<Subscriber>> GetSubscribersAsync()
    method SubscribeAsync (line 40) | public Task<bool> SubscribeAsync(Subscriber subscriber)
    method UnsubscribeAsync (line 52) | public Task<bool> UnsubscribeAsync(long id)

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/PubSub/PubSubHubClient.cs
  class PubSubHubClient (line 14) | public class PubSubHubClient : IPubSubHubClient, IAsyncDisposable
    method PubSubHubClient (line 26) | public PubSubHubClient(HubConnectionFactory hubConnectionFactory, ILog...
    method StartAsync (line 56) | public async Task StartAsync()
    method StopAsync (line 79) | public async Task StopAsync()
    method EnsureConnectedAsync (line 97) | private async Task EnsureConnectedAsync()
    method SendMessageAsync (line 105) | public async Task<bool> SendMessageAsync(IMessage message)
    method SendMessagesAsync (line 111) | public async Task<bool> SendMessagesAsync(List<IMessage> messages)
    method GetSubscribersAsync (line 117) | public async Task<List<Subscriber>> GetSubscribersAsync()
    method SubscribeAsync (line 123) | public async Task<bool> SubscribeAsync(Subscriber subscriber)
    method UnsubscribeAsync (line 129) | public async Task<bool> UnsubscribeAsync(long id)
    method DisposeAsync (line 135) | public async ValueTask DisposeAsync()

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/WarehouseHub/IWarehouseHub.cs
  type IWarehouseHub (line 15) | public interface IWarehouseHub
    method GetWarehouseItems (line 17) | Task<List<WarehouseLink>> GetWarehouseItems(Guid? id, long? ownerId, W...
    method DeleteWarehouseItemAsync (line 18) | Task<bool> DeleteWarehouseItemAsync(Guid id);
    method AddWarehouseItemAsync (line 19) | Task<bool> AddWarehouseItemAsync(WareHouseDepositRequest depositRequest);

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/WarehouseHub/WarehouseHub.cs
  class WarehouseHub (line 17) | public class WarehouseHub(IWarehouseService warehouseService) : Hub, IWa...
    method GetWarehouseItems (line 19) | public Task<List<WarehouseLink>> GetWarehouseItems(Guid? id, long? own...
    method DeleteWarehouseItemAsync (line 21) | public Task<bool> DeleteWarehouseItemAsync(Guid id) => warehouseServic...
    method AddWarehouseItemAsync (line 23) | public Task<bool> AddWarehouseItemAsync(WareHouseDepositRequest deposi...

FILE: src/NosCore.GameObject/InterChannelCommunication/Hubs/WarehouseHub/WarehouseHubClient.cs
  class WarehouseHubClient (line 16) | public class WarehouseHubClient(HubConnectionFactory hubConnectionFactor...
    method GetWarehouseItems (line 19) | public Task<List<WarehouseLink>> GetWarehouseItems(Guid? id, long? own...
    method DeleteWarehouseItemAsync (line 22) | public Task<bool> DeleteWarehouseItemAsync(Guid id) =>
    method AddWarehouseItemAsync (line 25) | public Task<bool> AddWarehouseItemAsync(WareHouseDepositRequest deposi...

FILE: src/NosCore.GameObject/InterChannelCommunication/MasterClientList.cs
  class MasterClientList (line 13) | public class MasterClientList

FILE: src/NosCore.GameObject/InterChannelCommunication/Messages/DeleteMailData.cs
  class DeleteMailData (line 5) | public class DeleteMailData : IMessage

FILE: src/NosCore.GameObject/InterChannelCommunication/Messages/DisconnectData.cs
  class DisconnectData (line 5) | public class DisconnectData : IMessage

FILE: src/NosCore.GameObject/InterChannelCommunication/Messages/IMessage.cs
  type IMessage (line 11) | public interface IMessage

FILE: src/NosCore.GameObject/InterChannelCommunication/Messages/MailData.cs
  class MailData (line 18) | public class MailData : IMessage
    method GeneratePostMessage (line 27) | public PostPacket GeneratePostMessage(int type)
    method GeneratePost (line 62) | public IPacket? GeneratePost(byte type)

FILE: src/NosCore.GameObject/InterChannelCommunication/Messages/PostedPacket.cs
  class PostedPacket (line 12) | public class PostedPacket : IMessage

FILE: src/NosCore.GameObject/InterChannelCommunication/Messages/StatData.cs
  class StatData (line 12) | public class StatData : IMessage

FILE: src/NosCore.GameObject/InterChannelCommunication/PolymorphicConverter.cs
  class PolymorphicJsonConverter (line 13) | public class PolymorphicJsonConverter<T> : JsonConverter<T>
    method CanConvert (line 16) | public override bool CanConvert(Type typeToConvert)
    method Read (line 21) | public override T? Read(ref Utf8JsonReader reader, Type typeToConvert,...
    method Write (line 73) | public override void Write(Utf8JsonWriter writer, T value, JsonSeriali...

FILE: src/NosCore.GameObject/Map/Map.cs
  class Map (line 16) | public class Map : MapDto, IMapGrid
    method GetFreePosition (line 50) | internal bool GetFreePosition(ref short firstX, ref short firstY, byte...
    method IsBlockedZone (line 85) | public bool IsBlockedZone(short firstX, short firstY, short mapX, shor...
    method IsWalkable (line 112) | public bool IsWalkable(short mapX, short mapY)
    method IsWalkable (line 122) | private static bool IsWalkable(byte value)

FILE: src/NosCore.GameObject/Map/Portal.cs
  class Portal (line 13) | public class Portal : PortalDto
    method GenerateGp (line 18) | public GpPacket GenerateGp()

FILE: src/NosCore.GameObject/Messaging/Events/CharacterMovedEvent.cs
  type CharacterMovedEvent (line 15) | public sealed record CharacterMovedEvent(ICharacterEntity Character, sho...

FILE: src/NosCore.GameObject/Messaging/Events/EntityCapturedEvent.cs
  type EntityCapturedEvent (line 16) | public sealed record EntityCapturedEvent(IAliveEntity Victim, IAliveEnti...

FILE: src/NosCore.GameObject/Messaging/Events/EntityDamagedEvent.cs
  type EntityDamagedEvent (line 13) | public sealed record EntityDamagedEvent(IAliveEntity Attacker, IAliveEnt...

FILE: src/NosCore.GameObject/Messaging/Events/EntityDiedEvent.cs
  type EntityDiedEvent (line 14) | public sealed record EntityDiedEvent(
  type RevivalMode (line 35) | public enum RevivalMode

FILE: src/NosCore.GameObject/Messaging/Events/GuriPacketReceivedEvent.cs
  type GuriPacketReceivedEvent (line 15) | public sealed record GuriPacketReceivedEvent(ClientSession ClientSession...

FILE: src/NosCore.GameObject/Messaging/Events/ItemUsedEvent.cs
  type ItemUsedEvent (line 16) | public sealed record ItemUsedEvent(ClientSession ClientSession, Inventor...

FILE: src/NosCore.GameObject/Messaging/Events/MapInstanceEnteredEvent.cs
  type MapInstanceEnteredEvent (line 15) | public sealed record MapInstanceEnteredEvent(ClientSession ClientSession...

FILE: src/NosCore.GameObject/Messaging/Events/MapItemPickedUpEvent.cs
  type MapItemPickedUpEvent (line 17) | public sealed record MapItemPickedUpEvent(

FILE: src/NosCore.GameObject/Messaging/Events/QuestCompletedEvent.cs
  type QuestCompletedEvent (line 17) | public sealed record QuestCompletedEvent(ICharacterEntity Character, Cha...

FILE: src/NosCore.GameObject/Messaging/Handlers/Battle/DeathBCardHandler.cs
  class DeathBCardHandler (line 21) | [UsedImplicitly]
    method Handle (line 24) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/Battle/MonsterAggroHandler.cs
  class MonsterAggroHandler (line 18) | [UsedImplicitly]
    method Handle (line 21) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/Battle/MonsterRespawnHandler.cs
  class MonsterRespawnHandler (line 22) | [UsedImplicitly]
    method Handle (line 25) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/Battle/PlayerRevivalHandler.cs
  class PlayerRevivalHandler (line 33) | [UsedImplicitly]
    method Handle (line 40) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/Battle/RewardDistributionHandler.cs
  class RewardDistributionHandler (line 17) | [UsedImplicitly]
    method Handle (line 20) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/Guri/EmoticonHandler.cs
  class EmoticonHandler (line 18) | [UsedImplicitly]
    method Handle (line 21) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/Guri/MfaHandler.cs
  class MfaHandler (line 17) | [UsedImplicitly]
    method Handle (line 20) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/Guri/SpeakerHandler.cs
  class SpeakerHandler (line 25) | [UsedImplicitly]
    method CraftMessage (line 32) | private static string CraftMessage(string message, string[] valueSplit)
    method Handle (line 42) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/Guri/TitleHandler.cs
  class TitleHandler (line 22) | [UsedImplicitly]
    method Handle (line 25) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/Map/MinilandEntranceHandler.cs
  class MinilandEntranceHandler (line 21) | [UsedImplicitly]
    method Handle (line 24) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/MapItem/DropHandler.cs
  class DropHandler (line 23) | [UsedImplicitly]
    method Handle (line 26) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/MapItem/GoldDropHandler.cs
  class GoldDropHandler (line 26) | [UsedImplicitly]
    method Handle (line 29) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/MapItem/SpChargerHandler.cs
  class SpChargerHandler (line 18) | [UsedImplicitly]
    method Handle (line 21) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/Nrun/BazaarHandler.cs
  class BazaarHandler (line 21) | [UsedImplicitly]
    method HandleAsync (line 26) | public Task HandleAsync(ClientSession session, IAliveEntity? target, N...

FILE: src/NosCore.GameObject/Messaging/Handlers/Nrun/CellonItemHandler.cs
  class CellonItemHandler (line 17) | [UsedImplicitly]
    method HandleAsync (line 22) | public Task HandleAsync(ClientSession session, IAliveEntity? target, N...

FILE: src/NosCore.GameObject/Messaging/Handlers/Nrun/ChangeClassHandler.cs
  class ChangeClassHandler (line 28) | [UsedImplicitly]
    method HandleAsync (line 40) | public async Task HandleAsync(ClientSession session, IAliveEntity? tar...

FILE: src/NosCore.GameObject/Messaging/Handlers/Nrun/FinishedTsDialogHandler.cs
  class TsDialogAdvance (line 18) | internal static class TsDialogAdvance
    method AdvanceAsync (line 20) | public static Task AdvanceAsync(IQuestService questService, ClientSess...
  class FinishedTsDialogHandler (line 36) | [UsedImplicitly]
    method HandleAsync (line 41) | public Task HandleAsync(ClientSession session, IAliveEntity? target, N...
  class FinishedTsDialog2Handler (line 45) | [UsedImplicitly]
    method HandleAsync (line 50) | public Task HandleAsync(ClientSession session, IAliveEntity? target, N...
  class FinishedTsHandler (line 54) | [UsedImplicitly]
    method HandleAsync (line 59) | public Task HandleAsync(ClientSession session, IAliveEntity? target, N...
  class FinishedTs2Handler (line 63) | [UsedImplicitly]
    method HandleAsync (line 68) | public Task HandleAsync(ClientSession session, IAliveEntity? target, N...

FILE: src/NosCore.GameObject/Messaging/Handlers/Nrun/INrunEventHandler.cs
  type INrunEventHandler (line 15) | public interface INrunEventHandler
    method HandleAsync (line 19) | Task HandleAsync(ClientSession session, IAliveEntity? target, NrunPack...

FILE: src/NosCore.GameObject/Messaging/Handlers/Nrun/OpenProductionHandler.cs
  class OpenProductionHandler (line 18) | [UsedImplicitly]
    method HandleAsync (line 23) | public Task HandleAsync(ClientSession session, IAliveEntity? target, N...

FILE: src/NosCore.GameObject/Messaging/Handlers/Nrun/OpenShopHandler.cs
  class OpenShopHandler (line 20) | [UsedImplicitly]
    method HandleAsync (line 25) | public Task HandleAsync(ClientSession session, IAliveEntity? target, N...

FILE: src/NosCore.GameObject/Messaging/Handlers/Nrun/SetPlaceOfRevivalHandler.cs
  class SetPlaceOfRevivalHandler (line 20) | [UsedImplicitly]
    method HandleAsync (line 25) | public async Task HandleAsync(ClientSession session, IAliveEntity? tar...

FILE: src/NosCore.GameObject/Messaging/Handlers/Nrun/TeleporterHandler.cs
  class TeleporterHandler (line 22) | [UsedImplicitly]
    method HandleAsync (line 27) | public Task HandleAsync(ClientSession session, IAliveEntity? target, N...
    method RemoveGoldAndTeleportAsync (line 44) | private async Task RemoveGoldAndTeleportAsync(ClientSession session, s...

FILE: src/NosCore.GameObject/Messaging/Handlers/Nrun/UpgradeItemHandler.cs
  class UpgradeItemHandler (line 18) | [UsedImplicitly]
    method HandleAsync (line 23) | public Task HandleAsync(ClientSession session, IAliveEntity? target, N...

FILE: src/NosCore.GameObject/Messaging/Handlers/Quest/OnCharacterMovedHandler.cs
  class OnCharacterMovedHandler (line 22) | [UsedImplicitly]
    method Handle (line 27) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/Quest/OnEntityCapturedHandler.cs
  class OnEntityCapturedHandler (line 20) | [UsedImplicitly]
    method Handle (line 23) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/Quest/OnEntityDiedHandler.cs
  class OnEntityDiedHandler (line 25) | [UsedImplicitly]
    method Handle (line 28) | [UsedImplicitly]
    method TryFindCharacter (line 57) | private static bool TryFindCharacter(IAliveEntity victim, Entity handl...

FILE: src/NosCore.GameObject/Messaging/Handlers/Quest/OnQuestCompletedHandler.cs
  class OnQuestCompletedHandler (line 15) | [UsedImplicitly]
    method Handle (line 18) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/UseItem/BackPackHandler.cs
  class BackPackHandler (line 25) | [UsedImplicitly]
    method Handle (line 28) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/UseItem/BazaarMedalsHandler.cs
  class BazaarMedalsHandler (line 23) | [UsedImplicitly]
    method Handle (line 26) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/UseItem/BoxEffectHandler.cs
  class BoxEffectHandler (line 25) | [UsedImplicitly]
    method Handle (line 30) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/UseItem/ChangeGenderHandler.cs
  class ChangeGenderHandler (line 20) | [UsedImplicitly]
    method Handle (line 23) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/UseItem/HairDieHandler.cs
  class HairDieHandler (line 20) | [UsedImplicitly]
    method Handle (line 23) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/UseItem/MinilandBellHandler.cs
  class MinilandBellHandler (line 22) | [UsedImplicitly]
    method Handle (line 25) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/UseItem/PetBasketHandler.cs
  class PetBasketHandler (line 25) | [UsedImplicitly]
    method Handle (line 28) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/UseItem/SealedTarotCardHandler.cs
  class SealedTarotCardHandler (line 21) | [UsedImplicitly]
    method Handle (line 24) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/UseItem/SpRechargerHandler.cs
  class SpRechargerHandler (line 19) | [UsedImplicitly]
    method Handle (line 22) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/UseItem/SpeakerHandler.cs
  class SpeakerHandler (line 16) | [UsedImplicitly]
    method Handle (line 19) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/UseItem/TitleHandler.cs
  class TitleHandler (line 16) | [UsedImplicitly]
    method Handle (line 19) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/UseItem/VehicleHandler.cs
  class VehicleHandler (line 21) | [UsedImplicitly]
    method Handle (line 27) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/Handlers/UseItem/WearHandler.cs
  class WearHandler (line 30) | [UsedImplicitly]
    method Handle (line 37) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/RecurringMessagePublisher.cs
  class RecurringMessagePublisher (line 18) | public sealed class RecurringMessagePublisher<TMessage>(
    method ExecuteAsync (line 23) | protected override async Task ExecuteAsync(CancellationToken stoppingT...

FILE: src/NosCore.GameObject/Messaging/ScheduledJobs/RemoveTimeoutStaticBonusesHandler.cs
  class RemoveTimeoutStaticBonusesHandler (line 16) | [UsedImplicitly]
    method Handle (line 21) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/ScheduledJobs/RemoveTimeoutStaticBonusesMessage.cs
  type RemoveTimeoutStaticBonusesMessage (line 9) | public sealed record RemoveTimeoutStaticBonusesMessage;

FILE: src/NosCore.GameObject/Messaging/ScheduledJobs/SaveAllSessionsHandler.cs
  class SaveAllSessionsHandler (line 18) | [UsedImplicitly]
    method Handle (line 25) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Messaging/ScheduledJobs/SaveAllSessionsMessage.cs
  type SaveAllSessionsMessage (line 9) | public sealed record SaveAllSessionsMessage;

FILE: src/NosCore.GameObject/Messaging/WolverineDependencyRegistrar.cs
  class WolverineDependencyRegistrar (line 40) | public static class WolverineDependencyRegistrar
    method RegisterDependencies (line 42) | public static void RegisterDependencies(IServiceCollection services)
    method IsSystemInterface (line 124) | private static bool IsSystemInterface(Type iface)

FILE: src/NosCore.GameObject/Messaging/WolverineHostExtensions.cs
  class WolverineHostExtensions (line 13) | public static class WolverineHostExtensions
    method UseNosCoreWolverine (line 24) | public static IHostBuilder UseNosCoreWolverine(this IHostBuilder build...

FILE: src/NosCore.GameObject/Networking/Broadcaster.cs
  class Broadcaster (line 17) | public class Broadcaster : IBroadcastable
    method Broadcaster (line 23) | private Broadcaster(ISessionGroupFactory sessionGroupFactory)
    method Initialize (line 30) | public static void Initialize(ISessionGroupFactory sessionGroupFactory)
    method UnregisterSession (line 42) | public void UnregisterSession(ClientSession.ClientSession clientSession)
    method RegisterSession (line 52) | public void RegisterSession(ClientSession.ClientSession clientSession)
    method GetSessions (line 62) | public IEnumerable<ClientSession.ClientSession> GetSessions()
    method GetSessions (line 67) | public IEnumerable<ClientSession.ClientSession> GetSessions(Func<Clien...
    method GetSession (line 73) | public ClientSession.ClientSession? GetSession(Func<ClientSession.Clie...
    method Reset (line 79) | public static void Reset()
    method ConnectedAccounts (line 84) | public List<Subscriber> ConnectedAccounts()

FILE: src/NosCore.GameObject/Networking/ClientSession/ClientSession.cs
  class ClientSession (line 32) | public class ClientSession(
    method GetHandler (line 93) | public IPacketHandler? GetHandler(Type packetType)
    method GetPacketAttribute (line 98) | public PacketHeaderAttribute? GetPacketAttribute(Type packetType)
    method AcquirePacketLockAsync (line 103) | public ValueTask<AsyncLock.Releaser> AcquirePacketLockAsync(Cancellati...
    method InitializeAccount (line 106) | public void InitializeAccount(AccountDto accountDto)
    method SetPlayerEntity (line 129) | public void SetPlayerEntity(Entity entity, MapWorld world)
    method ClearPlayerEntity (line 140) | public void ClearPlayerEntity()
    method HandlePacketAsync (line 150) | public async Task HandlePacketAsync(NosPackageInfo package)
    method OnDisconnectedAsync (line 164) | public async Task OnDisconnectedAsync()
    method GetMessageFromKey (line 214) | public string GetMessageFromKey(LanguageKey languageKey)
    method HandlePacketsAsync (line 224) | public Task HandlePacketsAsync(IEnumerable<IPacket> packetConcatenated...

FILE: src/NosCore.GameObject/Networking/ClientSession/DisconnectHandlers/ExchangeDisconnectHandler.cs
  class ExchangeDisconnectHandler (line 14) | public class ExchangeDisconnectHandler(IExchangeService exchangeService,...
    method HandleDisconnectAsync (line 16) | public async Task HandleDisconnectAsync(ClientSession session)

FILE: src/NosCore.GameObject/Networking/ClientSession/DisconnectHandlers/FriendNotificationDisconnectHandler.cs
  class FriendNotificationDisconnectHandler (line 19) | public class FriendNotificationDisconnectHandler(IFriendHub friendHub, I...
    method HandleDisconnectAsync (line 21) | public async Task HandleDisconnectAsync(ClientSession session)

FILE: src/NosCore.GameObject/Networking/ClientSession/DisconnectHandlers/MapDisconnectHandler.cs
  class MapDisconnectHandler (line 13) | public class MapDisconnectHandler : ISessionDisconnectHandler
    method HandleDisconnectAsync (line 15) | public async Task HandleDisconnectAsync(ClientSession session)

FILE: src/NosCore.GameObject/Networking/ClientSession/DisconnectHandlers/MinilandDisconnectHandler.cs
  class MinilandDisconnectHandler (line 14) | public class MinilandDisconnectHandler(IMinilandService minilandService,...
    method HandleDisconnectAsync (line 18) | public async Task HandleDisconnectAsync(ClientSession session)

FILE: src/NosCore.GameObject/Networking/ClientSession/DisconnectHandlers/SaveDisconnectHandler.cs
  class SaveDisconnectHandler (line 12) | public class SaveDisconnectHandler(ISaveService saveService) : ISessionD...
    method HandleDisconnectAsync (line 16) | public async Task HandleDisconnectAsync(ClientSession session)

FILE: src/NosCore.GameObject/Networking/ClientSession/IPacketHandlingStrategy.cs
  type IPacketHandlingStrategy (line 12) | public interface IPacketHandlingStrategy
    method HandlePacketAsync (line 14) | Task HandlePacketAsync(IPacket packet, ClientSession session, bool isF...

FILE: src/NosCore.GameObject/Networking/ClientSession/ISessionDisconnectHandler.cs
  type ISessionDisconnectHandler (line 11) | public interface ISessionDisconnectHandler
    method HandleDisconnectAsync (line 15) | Task HandleDisconnectAsync(ClientSession session);

FILE: src/NosCore.GameObject/Networking/ClientSession/LoginPacketHandlingStrategy.cs
  class LoginPacketHandlingStrategy (line 16) | public class LoginPacketHandlingStrategy(ILogger<LoginPacketHandlingStra...
    method HandlePacketAsync (line 19) | public async Task HandlePacketAsync(IPacket packet, ClientSession sess...

FILE: src/NosCore.GameObject/Networking/ClientSession/NpcDialogRequestSubject.cs
  class NpcDialogRequestSubject (line 13) | public sealed class NpcDialogRequestSubject;

FILE: src/NosCore.GameObject/Networking/ClientSession/RequestData.cs
  class RequestData (line 9) | public class RequestData<T> : RequestData
    method RequestData (line 11) | public RequestData(T data)
    method RequestData (line 16) | public RequestData(ClientSession clientSession, T data) : base(clientS...
    method RequestData (line 26) | public RequestData() : this(null!)
  class RequestData (line 24) | public class RequestData(ClientSession clientSession) : IRequestData
    method RequestData (line 11) | public RequestData(T data)
    method RequestData (line 16) | public RequestData(ClientSession clientSession, T data) : base(clientS...
    method RequestData (line 26) | public RequestData() : this(null!)
  type IRequestData (line 33) | public interface IRequestData

FILE: src/NosCore.GameObject/Networking/ClientSession/WorldPacketHandlingStrategy.cs
  class WorldPacketHandlingStrategy (line 22) | public class WorldPacketHandlingStrategy(ILogger<WorldPacketHandlingStra...
    method HandlePacketAsync (line 25) | public async Task HandlePacketAsync(IPacket packet, ClientSession sess...
    method ValidateKeepAliveAsync (line 80) | private async Task<bool> ValidateKeepAliveAsync(IPacket packet, Client...
    method HandleInitialConnectionAsync (line 100) | private Task<bool> HandleInitialConnectionAsync(IPacket packet, Client...
    method HandleEntryPointSequenceAsync (line 113) | private Task<IPacket?> HandleEntryPointSequenceAsync(IPacket packet, C...
    method ValidateScope (line 149) | private bool ValidateScope(IPacket packet, ClientSession session, Pack...
    method ValidateAuthority (line 178) | private bool ValidateAuthority(ClientSession session, PacketHeaderAttr...
    method ExecuteHandlerAsync (line 189) | private async Task ExecuteHandlerAsync(IPacketHandler handler, IPacket...

FILE: src/NosCore.GameObject/Services/AuthService/AuthCodeService.cs
  class AuthCodeService (line 11) | public class AuthCodeService : IAuthCodeService
    method StoreAuthCode (line 17) | public void StoreAuthCode(string authCode, string accountName)
    method GetAccountByAuthCode (line 22) | public string? GetAccountByAuthCode(string authCode)
    method TryRemoveAuthCode (line 27) | public bool TryRemoveAuthCode(string authCode, out string? accountName)
    method MarkReadyForAuth (line 32) | public void MarkReadyForAuth(string accountName, long sessionId)
    method IsReadyForAuth (line 37) | public bool IsReadyForAuth(string accountName, long sessionId)
    method ClearReadyForAuth (line 42) | public void ClearReadyForAuth(string accountName)
    method RegisterSessionIp (line 47) | public void RegisterSessionIp(string accountName, string ipAddress)
    method UnregisterSessionIp (line 52) | public void UnregisterSessionIp(string accountName)
    method GetSessionIp (line 57) | public string? GetSessionIp(string accountName)

FILE: src/NosCore.GameObject/Services/AuthService/IAuthCodeService.cs
  type IAuthCodeService (line 9) | public interface IAuthCodeService
    method StoreAuthCode (line 11) | void StoreAuthCode(string authCode, string accountName);
    method GetAccountByAuthCode (line 12) | string? GetAccountByAuthCode(string authCode);
    method TryRemoveAuthCode (line 13) | bool TryRemoveAuthCode(string authCode, out string? accountName);
    method MarkReadyForAuth (line 15) | void MarkReadyForAuth(string accountName, long sessionId);
    method IsReadyForAuth (line 16) | bool IsReadyForAuth(string accountName, long sessionId);
    method ClearReadyForAuth (line 17) | void ClearReadyForAuth(string accountName);
    method RegisterSessionIp (line 19) | void RegisterSessionIp(string accountName, string ipAddress);
    method UnregisterSessionIp (line 20) | void UnregisterSessionIp(string accountName);
    method GetSessionIp (line 21) | string? GetSessionIp(string accountName);

FILE: src/NosCore.GameObject/Services/BattleService/AggroService.cs
  class AggroService (line 19) | public sealed class AggroService(IClock clock) : IAggroService
    method Current (line 24) | public AggroSnapshot Current(IAliveEntity entity)
    method AddThreat (line 39) | public void AddThreat(IAliveEntity mob, IAliveEntity attacker, int dam...
    method Clear (line 76) | public void Clear(IAliveEntity mob)
    method TryReadAggro (line 82) | private static bool TryReadAggro(IAliveEntity entity, out AggroCompone...

FILE: src/NosCore.GameObject/Services/BattleService/BattleService.cs
  class BattleService (line 33) | public sealed class BattleService(
    method Hit (line 47) | public async Task Hit(IAliveEntity origin, IAliveEntity target, HitArg...
    method ProcessHitAsync (line 103) | private async Task ProcessHitAsync(IAliveEntity origin, IAliveEntity t...
    method SendTargetStatAsync (line 163) | private static Task SendTargetStatAsync(IAliveEntity target)
    method BroadcastTargetInfoAsync (line 177) | private static Task BroadcastTargetInfoAsync(IAliveEntity target)
    method BroadcastHitAsync (line 183) | private static Task BroadcastHitAsync(IAliveEntity origin, IAliveEntit...
    method ScheduleCooldownReset (line 213) | private void ScheduleCooldownReset(IAliveEntity origin, SkillInfo skill)
    method TickCooldownResetsAsync (line 222) | public async Task TickCooldownResetsAsync(MapInstance mapInstance)
    method UpdateAttackerPosition (line 248) | private static void UpdateAttackerPosition(IAliveEntity origin, HitArg...
    method CanAttack (line 262) | private static bool CanAttack(IAliveEntity origin, IAliveEntity target)
    method AreAllies (line 271) | private static bool AreAllies(IAliveEntity a, IAliveEntity b)
    method CancelAsync (line 278) | private static async Task CancelAsync(IAliveEntity origin, IAliveEntit...

FILE: src/NosCore.GameObject/Services/BattleService/BattleStatsProvider.cs
  class BattleStatsProvider (line 24) | public sealed class BattleStatsProvider(IBuffService buffService) : IBat...
    method GetStats (line 26) | public CombatStats GetStats(IAliveEntity entity)
    method ResolveBaseStats (line 34) | private static CombatStats ResolveBaseStats(IAliveEntity entity) => en...
    method FromMonster (line 41) | private static CombatStats FromMonster(NpcMonsterDto mob, byte level, ...
    method FromCharacter (line 74) | private static CombatStats FromCharacter(ICharacterEntity character)
    method ReadCombat (line 150) | private static CombatComponent ReadCombat(IAliveEntity entity)
    method ApplyBuffs (line 164) | private static CombatStats ApplyBuffs(CombatStats stats, IReadOnlyColl...
    method ScaleByLevel (line 283) | private static int ScaleByLevel(BCardDto card, int level)

FILE: src/NosCore.GameObject/Services/BattleService/BuffService.cs
  class BuffService (line 28) | public sealed class BuffService(IClock clock) : IBuffService
    method ApplyAsync (line 33) | public async Task ApplyAsync(IAliveEntity target, CardDto card, IReadO...
    method ApplySkillBuffAsync (line 74) | public Task ApplySkillBuffAsync(IAliveEntity target, short skillVnum, ...
    method RemoveAsync (line 108) | public Task RemoveAsync(IAliveEntity target, short cardId)
    method GetActiveBuffs (line 115) | public IReadOnlyCollection<BuffInstance> GetActiveBuffs(IAliveEntity t...
    method HasBuff (line 121) | public bool HasBuff(IAliveEntity target, short cardId)
    method TickAsync (line 127) | public async Task<IReadOnlyList<BuffInstance>> TickAsync(IAliveEntity ...
    method ResolveState (line 167) | private static ConcurrentDictionary<short, BuffInstance>? ResolveState...
    method ClassifyBuffType (line 180) | private static BuffType ClassifyBuffType(CardDto card) => card.Propabi...

FILE: src/NosCore.GameObject/Services/BattleService/CaptureService.cs
  class CaptureService (line 35) | public sealed class CaptureService(IDao<MateDto, long> mateDao, IMessage...
    method IsCaptureSkill (line 43) | public bool IsCaptureSkill(SkillInfo skill) =>
    method TryCaptureAsync (line 46) | public async Task TryCaptureAsync(IAliveEntity caster, IAliveEntity ta...
    method HasCaptureBCard (line 122) | private static bool HasCaptureBCard(SkillInfo skill) =>

FILE: src/NosCore.GameObject/Services/BattleService/CharacterSkill.cs
  class CharacterSkill (line 7) | public class CharacterSkill : CharacterSkillDto
    method CharacterSkill (line 9) | public CharacterSkill()
    method CanBeUsed (line 21) | public bool CanBeUsed()

FILE: src/NosCore.GameObject/Services/BattleService/DamageCalculator.cs
  class DamageCalculator (line 18) | public sealed class DamageCalculator(IRandomProvider random) : IDamageCa...
    method Calculate (line 32) | public DamageResult Calculate(CombatStats attacker, CombatStats defend...
    method SelectAttackContext (line 119) | private static AttackContext SelectAttackContext(CombatStats attacker,...
    method RollBaseDamage (line 183) | private int RollBaseDamage(int min, int max)
    method Chebyshev (line 189) | private static int Chebyshev(CombatStats a, CombatStats b)
    method NegativeUpgradeDefenceBonus (line 201) | private static double NegativeUpgradeDefenceBonus(int upgrade) => upgr...
    method PositiveUpgradeDamageBonus (line 216) | private static double PositiveUpgradeDamageBonus(int upgrade) => upgra...
    method ComputeElementalDamage (line 231) | private static int ComputeElementalDamage(CombatStats attacker, Combat...
    type AttackContext (line 259) | private struct AttackContext

FILE: src/NosCore.GameObject/Services/BattleService/DamageResult.cs
  type DamageResult (line 11) | public record DamageResult(int Damage, SuPacketHitMode HitMode);

FILE: src/NosCore.GameObject/Services/BattleService/HitArguments.cs
  type HitArguments (line 9) | public record HitArguments()

FILE: src/NosCore.GameObject/Services/BattleService/HitQueue.cs
  class HitQueue (line 28) | public sealed class HitQueue(
    method EnqueueAsync (line 37) | public Task<HitOutcome> EnqueueAsync(HitRequest request)
    method CreateChannel (line 57) | private Channel<HitRequest> CreateChannel(IAliveEntity target)
    method ProcessAsync (line 69) | private async Task ProcessAsync(IAliveEntity target, Channel<HitReques...
    method TryApplyHit (line 101) | private Task TryApplyHit(HitRequest request)
    method FlipIsAlive (line 179) | private static void FlipIsAlive(IAliveEntity entity, bool alive)
    method DrainAsCancelled (line 189) | private static void DrainAsCancelled(Channel<HitRequest> channel)

FILE: src/NosCore.GameObject/Services/BattleService/IAggroService.cs
  type IAggroService (line 15) | public interface IAggroService
    method Current (line 17) | AggroSnapshot Current(IAliveEntity entity);
    method AddThreat (line 19) | void AddThreat(IAliveEntity mob, IAliveEntity attacker, int damage);
    method Clear (line 21) | void Clear(IAliveEntity mob);
  type AggroSnapshot (line 24) | public readonly record struct AggroSnapshot(long TargetVisualId, int Thr...

FILE: src/NosCore.GameObject/Services/BattleService/IBattleService.cs
  type IBattleService (line 17) | public interface IBattleService
    method Hit (line 19) | Task Hit(IAliveEntity origin, IAliveEntity target, HitArguments argume...
    method TickCooldownResetsAsync (line 24) | Task TickCooldownResetsAsync(MapInstance mapInstance);

FILE: src/NosCore.GameObject/Services/BattleService/IBattleStatsProvider.cs
  type IBattleStatsProvider (line 15) | public interface IBattleStatsProvider
    method GetStats (line 17) | CombatStats GetStats(IAliveEntity entity);

FILE: src/NosCore.GameObject/Services/BattleService/IBuffService.cs
  type IBuffService (line 18) | public interface IBuffService
    method ApplyAsync (line 20) | Task ApplyAsync(IAliveEntity target, CardDto card, IReadOnlyList<BCard...
    method ApplySkillBuffAsync (line 26) | Task ApplySkillBuffAsync(IAliveEntity target, short skillVnum, short s...
    method RemoveAsync (line 28) | Task RemoveAsync(IAliveEntity target, short cardId);
    method GetActiveBuffs (line 30) | IReadOnlyCollection<BuffInstance> GetActiveBuffs(IAliveEntity target);
    method HasBuff (line 32) | bool HasBuff(IAliveEntity target, short cardId);
    method TickAsync (line 36) | Task<IReadOnlyList<BuffInstance>> TickAsync(IAliveEntity target);

FILE: src/NosCore.GameObject/Services/BattleService/ICaptureService.cs
  type ICaptureService (line 16) | public interface ICaptureService
    method IsCaptureSkill (line 20) | bool IsCaptureSkill(SkillInfo skill);
    method TryCaptureAsync (line 26) | Task TryCaptureAsync(IAliveEntity caster, IAliveEntity target, SkillIn...

FILE: src/NosCore.GameObject/Services/BattleService/IDamageCalculator.cs
  type IDamageCalculator (line 14) | public interface IDamageCalculator
    method Calculate (line 16) | DamageResult Calculate(CombatStats attacker, CombatStats defender, Ski...

FILE: src/NosCore.GameObject/Services/BattleService/IHitQueue.cs
  type IHitQueue (line 17) | public interface IHitQueue
    method EnqueueAsync (line 19) | Task<HitOutcome> EnqueueAsync(HitRequest request);

FILE: src/NosCore.GameObject/Services/BattleService/IMonsterAi.cs
  type IMonsterAi (line 17) | public interface IMonsterAi
    method TickAsync (line 22) | Task<bool> TickAsync(INonPlayableEntity entity);

FILE: src/NosCore.GameObject/Services/BattleService/INpcCombatCatalog.cs
  type INpcCombatCatalog (line 16) | public interface INpcCombatCatalog
    method GetSkills (line 18) | IReadOnlyList<NpcMonsterSkillDto> GetSkills(short npcMonsterVnum);
    method GetDrops (line 20) | IReadOnlyList<DropDto> GetDrops(short npcMonsterVnum);
    method GetNpcBCards (line 22) | IReadOnlyList<BCardDto> GetNpcBCards(short npcMonsterVnum);
    method GetDeathBCards (line 24) | IReadOnlyList<BCardDto> GetDeathBCards(short npcMonsterVnum);
    method GetSkillBCards (line 26) | IReadOnlyList<BCardDto> GetSkillBCards(short skillVnum);

FILE: src/NosCore.GameObject/Services/BattleService/IRandomProvider.cs
  type IRandomProvider (line 13) | public interface IRandomProvider
    method Next (line 15) | int Next(int minInclusive, int maxExclusive);
    method NextDouble (line 17) | double NextDouble();
  class RandomProvider (line 20) | public sealed class RandomProvider : IRandomProvider
    method Next (line 22) | public int Next(int minInclusive, int maxExclusive) => Random.Shared.N...
    method NextDouble (line 24) | public double NextDouble() => Random.Shared.NextDouble();

FILE: src/NosCore.GameObject/Services/BattleService/IRegenerationService.cs
  type IRegenerationService (line 15) | public interface IRegenerationService
    method TickAsync (line 17) | Task TickAsync(MapInstance mapInstance);
    method NotifyDamaged (line 23) | void NotifyDamaged(long characterId);

FILE: src/NosCore.GameObject/Services/BattleService/IRespawnService.cs
  type IRespawnService (line 11) | public interface IRespawnService
    method ResolveRespawnMapTypeId (line 16) | long? ResolveRespawnMapTypeId(short mapId);
    method GetRespawnLocation (line 20) | (short MapId, short X, short Y) GetRespawnLocation(ICharacterEntity ch...
    method SetRespawnPoint (line 24) | void SetRespawnPoint(ICharacterEntity character, short mapId, short x,...

FILE: src/NosCore.GameObject/Services/BattleService/IRewardService.cs
  type IRewardService (line 14) | public interface IRewardService
    method DistributeAsync (line 16) | Task DistributeAsync(IAliveEntity victim, IAliveEntity? killer, IReadO...

FILE: src/NosCore.GameObject/Services/BattleService/ISkillResolver.cs
  type ISkillResolver (line 15) | public interface ISkillResolver
    method Resolve (line 17) | SkillInfo? Resolve(IAliveEntity caster, long castId);

FILE: src/NosCore.GameObject/Services/BattleService/ITargetResolver.cs
  type ITargetResolver (line 17) | public interface ITargetResolver
    method Resolve (line 19) | IReadOnlyList<IAliveEntity> Resolve(IAliveEntity attacker, IAliveEntit...

FILE: src/NosCore.GameObject/Services/BattleService/Model/BuffInstance.cs
  type BuffInstance (line 17) | public sealed record BuffInstance(

FILE: src/NosCore.GameObject/Services/BattleService/Model/CombatStats.cs
  type CombatStats (line 16) | public readonly record struct CombatStats(

FILE: src/NosCore.GameObject/Services/BattleService/Model/HitOutcome.cs
  type HitStatus (line 11) | public enum HitStatus
  type HitOutcome (line 20) | public sealed record HitOutcome(

FILE: src/NosCore.GameObject/Services/BattleService/Model/HitRequest.cs
  type HitRequest (line 15) | public sealed record HitRequest(

FILE: src/NosCore.GameObject/Services/BattleService/Model/SkillInfo.cs
  type SkillInfo (line 15) | public sealed record SkillInfo(

FILE: src/NosCore.GameObject/Services/BattleService/MonsterAi.cs
  class MonsterAi (line 45) | public sealed class MonsterAi : IMonsterAi, ISingletonService
    method MonsterAi (line 58) | public MonsterAi(
    method MonsterAi (line 74) | public MonsterAi(
    method TickAsync (line 102) | public async Task<bool> TickAsync(INonPlayableEntity entity)
    method DetectNearbyEnemy (line 168) | private IAliveEntity? DetectNearbyEnemy(INonPlayableEntity entity)
    method ResolveTarget (line 228) | private IAliveEntity? ResolveTarget(INonPlayableEntity entity, long vi...
    method PickSkill (line 254) | private ChosenSkill? PickSkill(INonPlayableEntity entity)
    method AttackAsync (line 286) | private async Task AttackAsync(INonPlayableEntity entity, IAliveEntity...
    method StepTowardAsync (line 312) | private async Task StepTowardAsync(INonPlayableEntity entity, IAliveEn...
    method TryReturnHomeAsync (line 351) | private async Task<bool> TryReturnHomeAsync(INonPlayableEntity entity)
    type CachedPath (line 383) | private sealed record CachedPath(short TargetX, short TargetY, List<(s...
    type ChosenSkill (line 385) | private sealed record ChosenSkill(short SkillVnum, long CastId, int Sk...

FILE: src/NosCore.GameObject/Services/BattleService/NpcCombatCatalog.cs
  class NpcCombatCatalog (line 18) | public sealed class NpcCombatCatalog : INpcCombatCatalog, ISingletonService
    method NpcCombatCatalog (line 30) | public NpcCombatCatalog(
    method GetSkills (line 60) | public IReadOnlyList<NpcMonsterSkillDto> GetSkills(short npcMonsterVnum)
    method GetDrops (line 63) | public IReadOnlyList<DropDto> GetDrops(short npcMonsterVnum)
    method GetNpcBCards (line 66) | public IReadOnlyList<BCardDto> GetNpcBCards(short npcMonsterVnum)
    method GetDeathBCards (line 69) | public IReadOnlyList<BCardDto> GetDeathBCards(short npcMonsterVnum)
    method GetSkillBCards (line 72) | public IReadOnlyList<BCardDto> GetSkillBCards(short skillVnum)

FILE: src/NosCore.GameObject/Services/BattleService/RegenerationService.cs
  class RegenerationService (line 27) | public sealed class RegenerationService(
    method NotifyDamaged (line 47) | public void NotifyDamaged(long characterId)
    method TickAsync (line 52) | public async Task TickAsync(MapInstance mapInstance)

FILE: src/NosCore.GameObject/Services/BattleService/RespawnService.cs
  class RespawnService (line 19) | public sealed class RespawnService(
    method ResolveRespawnMapTypeId (line 26) | public long? ResolveRespawnMapTypeId(short mapId)
    method GetRespawnLocation (line 35) | public (short MapId, short X, short Y) GetRespawnLocation(ICharacterEn...
    method SetRespawnPoint (line 61) | public void SetRespawnPoint(ICharacterEntity character, short mapId, s...

FILE: src/NosCore.GameObject/Services/BattleService/RewardService.cs
  class RewardService (line 37) | public sealed class RewardService(
    method DistributeAsync (line 51) | public async Task DistributeAsync(IAliveEntity victim, IAliveEntity? k...
    method AwardExperienceAsync (line 89) | private async Task AwardExperienceAsync(IAliveEntity victim, NpcMonste...
    method AwardReputationAsync (line 136) | private static async Task AwardReputationAsync(PlayerComponentBundle p...
    method AwardDignityAsync (line 146) | private static async Task AwardDignityAsync(PlayerComponentBundle play...
    method SpawnDropsAsync (line 160) | private async Task SpawnDropsAsync(IAliveEntity victim, NpcMonsterDto ...
    method SpawnGoldAsync (line 183) | private async Task SpawnGoldAsync(IAliveEntity victim, NpcMonsterDto m...
    method TryFindPlayer (line 210) | private static bool TryFindPlayer(IAliveEntity victim, Entity handle, ...

FILE: src/NosCore.GameObject/Services/BattleService/SkillResolver.cs
  class SkillResolver (line 20) | public sealed class SkillResolver : ISkillResolver
    method SkillResolver (line 27) | public SkillResolver(List<SkillDto> skills, INpcCombatCatalog catalog)
    method SkillResolver (line 32) | public SkillResolver(IReadOnlyDictionary<short, SkillDto> skillsByVnum...
    method Resolve (line 38) | public SkillInfo? Resolve(IAliveEntity caster, long castId)
    method ResolveCharacter (line 48) | private SkillInfo? ResolveCharacter(ICharacterEntity character, long c...
    method ResolveNpc (line 66) | private SkillInfo? ResolveNpc(INonPlayableEntity npc, long castId)
    method ResolveNpcSkill (line 102) | private SkillDto? ResolveNpcSkill(NpcMonsterDto mob, long castId)
    method BuildInfo (line 121) | private SkillInfo BuildInfo(SkillDto main, SkillDto? upgrade, long cas...

FILE: src/NosCore.GameObject/Services/BattleService/SkillResult.cs
  type SkillResult (line 9) | public record SkillResult

FILE: src/NosCore.GameObject/Services/BattleService/TargetResolver.cs
  class TargetResolver (line 22) | public sealed class TargetResolver(ISessionRegistry sessionRegistry) : I...
    method Resolve (line 24) | public IReadOnlyList<IAliveEntity> Resolve(IAliveEntity attacker, IAli...
    method IsEnemy (line 76) | private static bool IsEnemy(IAliveEntity attacker, IAliveEntity candid...
    method WithinRange (line 89) | private static bool WithinRange(short cx, short cy, short x, short y, ...

FILE: src/NosCore.GameObject/Services/BazaarService/BazaarRegistry.cs
  class BazaarRegistry (line 17) | public class BazaarRegistry : IBazaarRegistry
    method BazaarRegistry (line 21) | public BazaarRegistry(IDao<BazaarItemDto, long> bazaarItemDao,
    method GetAll (line 39) | public IEnumerable<BazaarLink> GetAll() => _bazaarItems.Values;
    method GetById (line 41) | public BazaarLink? GetById(long bazaarItemId) =>
    method GetBySellerId (line 44) | public IEnumerable<BazaarLink> GetBySellerId(long sellerId) =>
    method Register (line 47) | public void Register(long bazaarItemId, BazaarLink bazaarLink) =>
    method Unregister (line 50) | public bool Unregister(long bazaarItemId) =>
    method Update (line 53) | public void Update(long bazaarItemId, BazaarLink bazaarLink) =>
    method CountBySellerId (line 56) | public int CountBySellerId(long sellerId) =>

FILE: src/NosCore.GameObject/Services/BazaarService/BazaarService.cs
  class BazaarService (line 25) | public class BazaarService(IBazaarRegistry bazaarRegistry, IDao<BazaarIt...
    method GetBazaar (line 29) | public List<BazaarLink> GetBazaar(long id, byte? index, byte? pageSize...
    method DeleteBazaarAsync (line 155) | public async Task<bool> DeleteBazaarAsync(long id, short count, string...
    method AddBazaarAsync (line 191) | public async Task<LanguageKey> AddBazaarAsync(Guid itemInstanceId, lon...
    method ModifyBazaarAsync (line 244) | public async Task<BazaarLink?> ModifyBazaarAsync(long id, Json.Patch.J...

FILE: src/NosCore.GameObject/Services/BazaarService/IBazaarRegistry.cs
  type IBazaarRegistry (line 12) | public interface IBazaarRegistry
    method GetAll (line 14) | IEnumerable<BazaarLink> GetAll();
    method GetById (line 15) | BazaarLink? GetById(long bazaarItemId);
    method GetBySellerId (line 16) | IEnumerable<BazaarLink> GetBySellerId(long sellerId);
    method Register (line 17) | void Register(long bazaarItemId, BazaarLink bazaarLink);
    method Unregister (line 18) | bool Unregister(long bazaarItemId);
    method Update (line 19) | void Update(long bazaarItemId, BazaarLink bazaarLink);
    method CountBySellerId (line 20) | int CountBySellerId(long sellerId);

FILE: src/NosCore.GameObject/Services/BazaarService/IBazaarService.cs
  type IBazaarService (line 16) | public interface IBazaarService
    method GetBazaar (line 18) | List<BazaarLink> GetBazaar(long id, byte? index, byte? pageSize, Bazaa...
    method DeleteBazaarAsync (line 21) | Task<bool> DeleteBazaarAsync(long id, short count, string requestChara...
    method AddBazaarAsync (line 23) | Task<LanguageKey> AddBazaarAsync(Guid itemInstanceId, long characterId...
    method ModifyBazaarAsync (line 25) | Task<BazaarLink?> ModifyBazaarAsync(long id, Json.Patch.JsonPatch bzMod);

FILE: src/NosCore.GameObject/Services/BlackListService/BlacklistService.cs
  class BlacklistService (line 23) | public class BlacklistService(IPubSubHub pubSubHub, IChannelHub channelHub,
    method BlacklistPlayerAsync (line 27) | public async Task<LanguageKey> BlacklistPlayerAsync(long characterId, ...
    method GetBlacklistedListAsync (line 68) | public async Task<List<CharacterRelationStatus>> GetBlacklistedListAsy...
    method UnblacklistAsync (line 98) | public async Task<bool> UnblacklistAsync(Guid id)

FILE: src/NosCore.GameObject/Services/BlackListService/IBlacklistService.cs
  type IBlacklistService (line 15) | public interface IBlacklistService
    method BlacklistPlayerAsync (line 17) | Task<LanguageKey> BlacklistPlayerAsync(long characterId, long secondCh...
    method GetBlacklistedListAsync (line 18) | Task<List<CharacterRelationStatus>> GetBlacklistedListAsync(long id);
    method UnblacklistAsync (line 19) | Task<bool> UnblacklistAsync(Guid id);

FILE: src/NosCore.GameObject/Services/BroadcastService/IPacketBroadcaster.cs
  type IPacketBroadcaster (line 13) | public interface IPacketBroadcaster
    method SendToAsync (line 15) | Task SendToAsync(IPacketTarget target, IPacket packet);
    method SendToAsync (line 16) | Task SendToAsync(IPacketTarget target, IEnumerable<IPacket> packets);

FILE: src/NosCore.GameObject/Services/BroadcastService/IPacketSender.cs
  type IPacketSender (line 13) | public interface IPacketSender
    method SendPacketAsync (line 15) | Task SendPacketAsync(IPacket? packet);
    method SendPacketsAsync (line 16) | Task SendPacketsAsync(IEnumerable<IPacket?> packets);

FILE: src/NosCore.GameObject/Services/BroadcastService/IPacketTarget.cs
  type IPacketTarget (line 11) | public interface IPacketTarget { }
  type SessionTarget (line 13) | public record SessionTarget(string ChannelId) : IPacketTarget;
  type CharacterTarget (line 15) | public record CharacterTarget(long CharacterId) : IPacketTarget;
  type MapTarget (line 17) | public record MapTarget(Guid MapInstanceId, Func<long, bool>? ExcludeFil...
  type GroupTarget (line 19) | public record GroupTarget(long GroupId) : IPacketTarget;
  type EveryoneTarget (line 21) | public record EveryoneTarget(Func<long, bool>? ExcludeFilter = null) : I...
  class Targets (line 23) | public static class Targets
    method Session (line 25) | public static SessionTarget Session(string channelId) => new(channelId);
    method Character (line 26) | public static CharacterTarget Character(long characterId) => new(chara...
    method Map (line 27) | public static MapTarget Map(Guid mapInstanceId, Func<long, bool>? excl...
    method MapExcept (line 28) | public static MapTarget MapExcept(Guid mapInstanceId, long excludeChar...
    method Group (line 29) | public static GroupTarget Group(long groupId) => new(groupId);
    method Everyone (line 30) | public static EveryoneTarget Everyone(Func<long, bool>? excludeFilter ...

FILE: src/NosCore.GameObject/Services/BroadcastService/ISessionRegistry.cs
  type ISessionRegistry (line 17) | public interface ISessionRegistry
    method Register (line 19) | void Register(SessionInfo sessionInfo);
    method Unregister (line 20) | void Unregister(string channelId);
    method UpdateCharacter (line 21) | void UpdateCharacter(string channelId, long characterId, Guid? mapInst...
    method GetSenderByChannelId (line 23) | IPacketSender? GetSenderByChannelId(string channelId);
    method GetSenderByCharacterId (line 24) | IPacketSender? GetSenderByCharacterId(long characterId);
    method GetSessionByCharacterId (line 25) | ClientSession? GetSessionByCharacterId(long characterId);
    method GetSession (line 26) | ClientSession? GetSession(Func<ClientSession, bool> predicate);
    method GetSessions (line 27) | IEnumerable<ClientSession> GetSessions(Func<ClientSession, bool>? pred...
    method GetSessionsByMapInstance (line 28) | IEnumerable<SessionInfo> GetSessionsByMapInstance(Guid mapInstanceId);
    method GetSessionsByGroup (line 29) | IEnumerable<SessionInfo> GetSessionsByGroup(long groupId);
    method GetAllSessions (line 30) | IEnumerable<SessionInfo> GetAllSessions();
    method GetClientSessionsByMapInstance (line 31) | IEnumerable<ClientSession> GetClientSessionsByMapInstance(Guid mapInst...
    method GetCharacter (line 32) | PlayerComponentBundle GetCharacter(Func<PlayerComponentBundle, bool> p...
    method TryGetCharacter (line 33) | bool TryGetCharacter(Func<PlayerComponentBundle, bool> predicate, out ...
    method GetCharacters (line 34) | IEnumerable<PlayerComponentBundle> GetCharacters(Func<PlayerComponentB...
    method BroadcastPacketAsync (line 36) | Task BroadcastPacketAsync(IPacket packet);
    method BroadcastPacketAsync (line 37) | Task BroadcastPacketAsync(IPacket packet, string excludeChannelId);
    method DisconnectByCharacterIdAsync (line 38) | Task DisconnectByCharacterIdAsync(long characterId);
    method GetConnectedAccounts (line 40) | List<Subscriber> GetConnectedAccounts();
  class SessionInfo (line 43) | public class SessionInfo

FILE: src/NosCore.GameObject/Services/BroadcastService/PacketBroadcaster.cs
  class PacketBroadcaster (line 14) | public class PacketBroadcaster(ISessionRegistry sessionRegistry) : IPack...
    method SendToAsync (line 16) | public async Task SendToAsync(IPacketTarget target, IPacket packet)
    method SendToAsync (line 21) | public async Task SendToAsync(IPacketTarget target, IEnumerable<IPacke...
    method GetTargetSessions (line 30) | private IEnumerable<SessionInfo> GetTargetSessions(IPacketTarget target)
    method GetSessionByChannelId (line 53) | private IEnumerable<SessionInfo> GetSessionByChannelId(string channelId)
    method GetSessionByCharacterId (line 66) | private IEnumerable<SessionInfo> GetSessionByCharacterId(long characte...
    method FilterSessions (line 75) | private static IEnumerable<SessionInfo> FilterSessions(IEnumerable<Ses...

FILE: src/NosCore.GameObject/Services/BroadcastService/SessionRegistry.cs
  class SessionRegistry (line 20) | public class SessionRegistry(ILogger<SessionRegistry> logger) : ISession...
    method Register (line 25) | public void Register(SessionInfo sessionInfo)
    method Unregister (line 30) | public void Unregister(string channelId)
    method UpdateCharacter (line 38) | public void UpdateCharacter(string channelId, long characterId, Guid? ...
    method GetSenderByChannelId (line 53) | public IPacketSender? GetSenderByChannelId(string channelId)
    method GetSenderByCharacterId (line 58) | public IPacketSender? GetSenderByCharacterId(long characterId)
    method GetSessionByCharacterId (line 67) | public ClientSession? GetSessionByCharacterId(long characterId)
    method GetSession (line 77) | public ClientSession? GetSession(Func<ClientSession, bool> predicate)
    method GetSessions (line 85) | public IEnumerable<ClientSession> GetSessions(Func<ClientSession, bool...
    method GetSessionsByMapInstance (line 95) | public IEnumerable<SessionInfo> GetSessionsByMapInstance(Guid mapInsta...
    method GetClientSessionsByMapInstance (line 100) | public IEnumerable<ClientSession> GetClientSessionsByMapInstance(Guid ...
    method GetCharacter (line 109) | public PlayerComponentBundle GetCharacter(Func<PlayerComponentBundle, ...
    method TryGetCharacter (line 118) | public bool TryGetCharacter(Func<PlayerComponentBundle, bool> predicat...
    method GetCharacters (line 136) | public IEnumerable<PlayerComponentBundle> GetCharacters(Func<PlayerCom...
    method GetSessionsByGroup (line 146) | public IEnumerable<SessionInfo> GetSessionsByGroup(long groupId)
    method GetAllSessions (line 151) | public IEnumerable<SessionInfo> GetAllSessions()
    method BroadcastPacketAsync (line 156) | public async Task BroadcastPacketAsync(IPacket packet)
    method BroadcastPacketAsync (line 172) | public async Task BroadcastPacketAsync(IPacket packet, string excludeC...
    method DisconnectByCharacterIdAsync (line 190) | public async Task DisconnectByCharacterIdAsync(long characterId)
    method GetConnectedAccounts (line 199) | public List<Subscriber> GetConnectedAccounts()

FILE: src/NosCore.GameObject/Services/ChannelCommunicationService/ChannelCommunicationRunner.cs
  class ChannelCommunicationRunner (line 23) | [UsedImplicitly]
    method ChannelCommunicationRunner (line 31) | public ChannelCommunicationRunner(
    method OnMessageReceived (line 47) | private void OnMessageReceived(IMessage message)
    method StartAsync (line 69) | public async Task StartAsync(CancellationToken cancellationToken)
    method StopAsync (line 74) | public async Task StopAsync(CancellationToken cancellationToken)

FILE: src/NosCore.GameObject/Services/ChannelCommunicationService/Handlers/DeleteMailDataMessageChannelCommunicationMessageHandler.cs
  class DeleteMailDataMessageChannelCommunicationMessageHandler (line 14) | public class DeleteMailDataMessageChannelCommunicationMessageHandler(ISe...
    method Handle (line 16) | public override async Task Handle(DeleteMailData data)

FILE: src/NosCore.GameObject/Services/ChannelCommunicationService/Handlers/DisconnectDataMessageChannelCommunicationMessageHandler.cs
  class DisconnectDataMessageChannelCommunicationMessageHandler (line 13) | public class DisconnectDataMessageChannelCommunicationMessageHandler(ISe...
    method Handle (line 15) | public override async Task Handle(DisconnectData data)

FILE: src/NosCore.GameObject/Services/ChannelCommunicationService/Handlers/IChannelCommunicationMessageHandler.cs
  type IChannelCommunicationMessageHandler (line 12) | public interface IChannelCommunicationMessageHandler<in T> where T : IMe...
    method Handle (line 14) | Task Handle(T message);
  class ChannelCommunicationMessageHandler (line 17) | public abstract class ChannelCommunicationMessageHandler<T> : IChannelCo...
    method Handle (line 19) | public abstract Task Handle(T message);
    method Handle (line 21) | public Task Handle(IMessage message)

FILE: src/NosCore.GameObject/Services/ChannelCommunicationService/Handlers/MailDataMessageChannelCommunicationMessageHandler.cs
  class MailDataMessageChannelCommunicationMessageHandler (line 17) | public class MailDataMessageChannelCommunicationMessageHandler(IGameLang...
    method Handle (line 19) | public override async Task Handle(MailData data)

FILE: src/NosCore.GameObject/Services/ChannelCommunicationService/Handlers/PostedPacketMessageChannelCommunicationMessageHandler.cs
  class PostedPacketMessageChannelCommunicationMessageHandler (line 19) | public class PostedPacketMessageChannelCommunicationMessageHandler(ILogg...
    method Handle (line 22) | public override async Task Handle(PostedPacket postedPacket)

FILE: src/NosCore.GameObject/Services/ChannelCommunicationService/Handlers/StatDataMessageChannelCommunicationMessageHandler.cs
  class StatDataMessageChannelCommunicationMessageHandler (line 30) | public class StatDataMessageChannelCommunicationMessageHandler(ILogger<S...
    method Handle (line 34) | public override async Task Handle(StatData data)

FILE: src/NosCore.GameObject/Services/ChannelService/ChannelService.cs
  class ChannelService (line 17) | public class ChannelService(IAuthHub authHttpClient,
    method MoveChannelAsync (line 21) | public async Task MoveChannelAsync(Networking.ClientSession.ClientSess...

FILE: src/NosCore.GameObject/Services/ChannelService/IChannelService.cs
  type IChannelService (line 11) | public interface IChannelService
    method MoveChannelAsync (line 13) | Task MoveChannelAsync(Networking.ClientSession.ClientSession clientSes...

FILE: src/NosCore.GameObject/Services/CharacterService/CharacterInitializationService.cs
  class CharacterInitializationService (line 14) | public class CharacterInitializationService : ICharacterInitializationSe...
    method CharacterInitializationService (line 19) | public CharacterInitializationService(
    method InitializeAsync (line 27) | public Task InitializeAsync(PlayerComponentBundle player)

FILE: src/NosCore.GameObject/Services/CharacterService/ICharacterInitializationService.cs
  type ICharacterInitializationService (line 12) | public interface ICharacterInitializationService
    method InitializeAsync (line 14) | Task InitializeAsync(PlayerComponentBundle player);

FILE: src/NosCore.GameObject/Services/ExchangeService/ExchangeData.cs
  class ExchangeData (line 12) | public class ExchangeData

FILE: src/NosCore.GameObject/Services/ExchangeService/ExchangeRequestRegistry.cs
  class ExchangeRequestRegistry (line 12) | public class ExchangeRequestRegistry : IExchangeRequestRegistry
    method GetExchangeData (line 18) | public ExchangeData? GetExchangeData(long characterId) =>
    method SetExchangeData (line 21) | public void SetExchangeData(long characterId, ExchangeData data) =>
    method RemoveExchangeData (line 24) | public bool RemoveExchangeData(long characterId) =>
    method GetExchangeRequest (line 27) | public long? GetExchangeRequest(long characterId) =>
    method GetExchangeRequestPair (line 30) | public KeyValuePair<long, long>? GetExchangeRequestPair(long characterId)
    method SetExchangeRequest (line 45) | public void SetExchangeRequest(long characterId, long targetCharacterId)
    method RemoveExchangeRequest (line 51) | public bool RemoveExchangeRequest(long characterId)
    method HasExchange (line 68) | public bool HasExchange(long characterId) =>

FILE: src/NosCore.GameObject/Services/ExchangeService/ExchangeService.cs
  class ExchangeService (line 29) | public class ExchangeService(IItemGenerationService itemBuilderService,
    method SetGold (line 34) | public void SetGold(long visualId, long gold, long bankGold)
    method ValidateExchange (line 44) | public Tuple<ExchangeResultType, Dictionary<long, IPacket>?> ValidateE...
    method ConfirmExchange (line 131) | public void ConfirmExchange(long visualId)
    method IsExchangeConfirmed (line 140) | public bool IsExchangeConfirmed(long visualId)
    method GetData (line 145) | public ExchangeData GetData(long visualId)
    method AddItems (line 150) | public void AddItems(long visualId, InventoryItemInstance item, short ...
    method CheckExchange (line 163) | public bool CheckExchange(long visualId)
    method GetTargetId (line 168) | public long? GetTargetId(long visualId)
    method CheckExchange (line 179) | public bool CheckExchange(long visualId, long targetId)
    method CloseExchange (line 187) | public ExcClosePacket? CloseExchange(long visualId, ExchangeResultType...
    method OpenExchange (line 213) | public bool OpenExchange(long visualId, long targetVisualId)
    method ProcessExchange (line 228) | public List<KeyValuePair<long, IvnPacket>> ProcessExchange(long firstU...

FILE: src/NosCore.GameObject/Services/ExchangeService/IExchangeRequestRegistry.cs
  type IExchangeRequestRegistry (line 11) | public interface IExchangeRequestRegistry
    method GetExchangeData (line 13) | ExchangeData? GetExchangeData(long characterId);
    method SetExchangeData (line 14) | void SetExchangeData(long characterId, ExchangeData data);
    method RemoveExchangeData (line 15) | bool RemoveExchangeData(long characterId);
    method GetExchangeRequest (line 17) | long? GetExchangeRequest(long characterId);
    method GetExchangeRequestPair (line 18) | KeyValuePair<long, long>? GetExchangeRequestPair(long characterId);
    method SetExchangeRequest (line 19) | void SetExchangeRequest(long characterId, long targetCharacterId);
    method RemoveExchangeRequest (line 20) | bool RemoveExchangeRequest(long characterId);
    method HasExchange (line 21) | bool HasExchange(long characterId);

FILE: src/NosCore.GameObject/Services/ExchangeService/IExchangeService.cs
  type IExchangeService (line 19) | public interface IExchangeService
    method SetGold (line 21) | void SetGold(long visualId, long gold, long bankGold);
    method ValidateExchange (line 23) | Tuple<ExchangeResultType, Dictionary<long, IPacket>?> ValidateExchange...
    method ConfirmExchange (line 26) | void ConfirmExchange(long visualId);
    method IsExchangeConfirmed (line 27) | bool IsExchangeConfirmed(long visualId);
    method GetData (line 28) | ExchangeData GetData(long visualId);
    method AddItems (line 29) | void AddItems(long visualId, InventoryItemInstance item, short amount);
    method CheckExchange (line 30) | bool CheckExchange(long visualId);
    method GetTargetId (line 31) | long? GetTargetId(long visualId);
    method CheckExchange (line 32) | bool CheckExchange(long visualId, long targetId);
    method CloseExchange (line 33) | ExcClosePacket? CloseExchange(long visualId, ExchangeResultType result...
    method OpenExchange (line 34) | bool OpenExchange(long visualId, long targetVisualId);
    method ProcessExchange (line 36) | List<KeyValuePair<long, IvnPacket>> ProcessExchange(long firstUser, lo...

FILE: src/NosCore.GameObject/Services/ExperienceService/ExperienceProgressionService.cs
  class ExperienceProgressionService (line 36) | public sealed class ExperienceProgressionService(
    method AddExperienceAsync (line 50) | public async Task AddExperienceAsync(PlayerComponentBundle player,

FILE: src/NosCore.GameObject/Services/ExperienceService/IExperienceProgressionService.cs
  type IExperienceProgressionService (line 12) | public interface IExperienceProgressionService
    method AddExperienceAsync (line 14) | Task AddExperienceAsync(PlayerComponentBundle player,

FILE: src/NosCore.GameObject/Services/FriendService/CharacterRelation.cs
  class CharacterRelation (line 11) | public class CharacterRelation : CharacterRelationDto

FILE: src/NosCore.GameObject/Services/FriendService/FriendRequestRegistry.cs
  class FriendRequestRegistry (line 14) | public class FriendRequestRegistry : IFriendRequestRegistry
    method GetRequestsForCharacter (line 18) | public IEnumerable<KeyValuePair<Guid, (long SenderId, long ReceiverId)...
    method RegisterRequest (line 21) | public void RegisterRequest(Guid requestId, long senderId, long receiv...
    method UnregisterRequest (line 24) | public bool UnregisterRequest(Guid requestId) =>

FILE: src/NosCore.GameObject/Services/FriendService/FriendService.cs
  class FriendService (line 25) | public class FriendService(ILogger<FriendService> logger, IDao<Character...
    method AddFriendAsync (line 30) | public async Task<LanguageKey> AddFriendAsync(long characterId, long s...
    method GetFriendsAsync (line 116) | public async Task<List<CharacterRelationStatus>> GetFriendsAsync(long id)
    method DeleteAsync (line 144) | public async Task<bool> DeleteAsync(Guid id)

FILE: src/NosCore.GameObject/Services/FriendService/IFriendRequestRegistry.cs
  type IFriendRequestRegistry (line 12) | public interface IFriendRequestRegistry
    method GetRequestsForCharacter (line 14) | IEnumerable<KeyValuePair<Guid, (long SenderId, long ReceiverId)>> GetR...
    method RegisterRequest (line 15) | void RegisterRequest(Guid requestId, long senderId, long receiverId);
    method UnregisterRequest (line 16) | bool UnregisterRequest(Guid requestId);

FILE: src/NosCore.GameObject/Services/FriendService/IFriendService.cs
  type IFriendService (line 16) | public interface IFriendService
    method AddFriendAsync (line 18) | Task<LanguageKey> AddFriendAsync(long characterId, long secondCharacte...
    method GetFriendsAsync (line 20) | Task<List<CharacterRelationStatus>> GetFriendsAsync(long id);
    method DeleteAsync (line 22) | Task<bool> DeleteAsync(Guid id);

FILE: src/NosCore.GameObject/Services/GroupService/Group.cs
  class Group (line 24) | public class Group(GroupType type, ISessionGroupFactory sessionGroupFact...
    method GeneratePinit (line 45) | public PinitPacket GeneratePinit()
    method GeneratePst (line 56) | public List<PstPacket> GeneratePst()
    method IsGroupLeader (line 76) | public bool IsGroupLeader(long visualId)
    method JoinGroup (line 82) | public void JoinGroup(INamedEntity namedEntity)
    method LeaveGroup (line 93) | public void LeaveGroup(INamedEntity namedEntity)

FILE: src/NosCore.GameObject/Services/GroupService/GroupRegistry.cs
  class GroupRegistry (line 12) | public class GroupRegistry : IGroupRegistry
    method GetById (line 18) | public Group? GetById(long groupId)
    method Register (line 24) | public void Register(Group group)
    method Unregister (line 29) | public void Unregister(long groupId)
    method RegisterMember (line 34) | public void RegisterMember(long characterId, long groupId)
    method UnregisterMember (line 39) | public void UnregisterMember(long characterId)
    method GetNextGroupId (line 44) | public long GetNextGroupId()

FILE: src/NosCore.GameObject/Services/GroupService/IGroupRegistry.cs
  type IGroupRegistry (line 9) | public interface IGroupRegistry
    method GetById (line 11) | Group? GetById(long groupId);
    method Register (line 12) | void Register(Group group);
    method Unregister (line 13) | void Unregister(long groupId);
    method RegisterMember (line 14) | void RegisterMember(long characterId, long groupId);
    method UnregisterMember (line 15) | void UnregisterMember(long characterId);
    method GetNextGroupId (line 16) | long GetNextGroupId();

FILE: src/NosCore.GameObject/Services/InventoryService/IInventoryService.cs
  type IInventoryService (line 14) | public interface IInventoryService : IDictionary<Guid, InventoryItemInst...
    method AddItemToPocket (line 19) | List<InventoryItemInstance>? AddItemToPocket(InventoryItemInstance new...
    method AddItemToPocket (line 20) | List<InventoryItemInstance>? AddItemToPocket(InventoryItemInstance new...
    method AddItemToPocket (line 22) | List<InventoryItemInstance>?
    method CanAddItem (line 25) | bool CanAddItem(short itemVnum);
    method CountItemInAnPocket (line 26) | int CountItemInAnPocket(NoscorePocketType inv);
    method DeleteById (line 27) | InventoryItemInstance? DeleteById(Guid id);
    method DeleteFromTypeAndSlot (line 28) | InventoryItemInstance? DeleteFromTypeAndSlot(NoscorePocketType type, s...
    method LoadByItemInstanceId (line 29) | InventoryItemInstance? LoadByItemInstanceId(Guid id);
    method LoadBySlotAndType (line 30) | InventoryItemInstance? LoadBySlotAndType(short slot, NoscorePocketType...
    method MoveInPocket (line 32) | InventoryItemInstance? MoveInPocket(short sourceSlot, NoscorePocketTyp...
    method MoveInPocket (line 35) | InventoryItemInstance? MoveInPocket(short sourceSlot, NoscorePocketTyp...
    method RemoveItemAmountFromInventory (line 38) | InventoryItemInstance? RemoveItemAmountFromInventory(short amount, Gui...

FILE: src/NosCore.GameObject/Services/InventoryService/InventoryItemInstance.cs
  class InventoryItemInstance (line 15) | public class InventoryItemInstance : InventoryItemInstanceDto, ISlotItem...
    method InventoryItemInstance (line 17) | public InventoryItemInstance(IItemInstance itemInstance)
    method Create (line 33) | public static InventoryItemInstance Create(IItemInstance it, long char...
    method Create (line 38) | public static InventoryItemInstance Create(IItemInstance it, long char...

FILE: src/NosCore.GameObject/Services/InventoryService/InventoryService.cs
  class InventoryService (line 22) | public class InventoryService(List<ItemDto> items, IOptions<WorldConfigu...
    method GetMaxSlots (line 25) | public int GetMaxSlots(NoscorePocketType pocket)
    method LoadBySlotAndType (line 53) | public InventoryItemInstance? LoadBySlotAndType(short slot, NoscorePoc...
    method CanAddItem (line 69) | public bool CanAddItem(short itemVnum)
    method CountItem (line 75) | public int CountItem(int itemVNum)
    method CountItemInAnPocket (line 81) | public int CountItemInAnPocket(NoscorePocketType inv)
    method AddItemToPocket (line 86) | public List<InventoryItemInstance>? AddItemToPocket(InventoryItemInsta...
    method AddItemToPocket (line 91) | public List<InventoryItemInstance>? AddItemToPocket(InventoryItemInsta...
    method AddItemToPocket (line 96) | public List<InventoryItemInstance>? AddItemToPocket(InventoryItemInsta...
    method DeleteById (line 190) | public InventoryItemInstance? DeleteById(Guid id)
    method LoadByItemInstanceId (line 208) | public InventoryItemInstance LoadByItemInstanceId(Guid id)
    method DeleteFromTypeAndSlot (line 213) | public InventoryItemInstance? DeleteFromTypeAndSlot(NoscorePocketType ...
    method MoveInPocket (line 232) | public InventoryItemInstance? MoveInPocket(short sourceSlot, NoscorePo...
    method MoveInPocket (line 238) | public InventoryItemInstance? MoveInPocket(short sourceSlot, NoscorePo...
    method TryMoveItem (line 329) | public bool TryMoveItem(NoscorePocketType sourcetype, short sourceSlot...
    method EnoughPlace (line 428) | public bool EnoughPlace(List<IItemInstance> itemInstances, NoscorePock...
    method RemoveItemAmountFromInventory (line 455) | public InventoryItemInstance? RemoveItemAmountFromInventory(short amou...
    method GetFreeSlot (line 479) | public short? GetFreeSlot(NoscorePocketType type)
    method HasFreeSlot (line 496) | public bool HasFreeSlot(NoscorePocketType slotType) => GetFreeSlot(slo...
    method GetAllBySlotType (line 498) | public IEnumerable<InventoryItemInstance> GetAllBySlotType(NoscorePock...
    method GetAll (line 501) | public IEnumerable<InventoryItemInstance> GetAll() => this.Select(s =>...
    method GetBySlot (line 503) | InventoryItemInstance? ISlotBasedStorage<InventoryItemInstance, Noscor...
    method GetById (line 506) | InventoryItemInstance? ISlotBasedStorage<InventoryItemInstance, Noscor...
    method CountBySlotType (line 509) | int ISlotBasedStorage<InventoryItemInstance, NoscorePocketType>.CountB...
    method AddItem (line 512) | List<InventoryItemInstance>? IMutableSlotBasedStorage<InventoryItemIns...
    method RemoveBySlot (line 516) | InventoryItemInstance? IMutableSlotBasedStorage<InventoryItemInstance,...
    method RemoveById (line 520) | InventoryItemInstance? IMutableSlotBasedStorage<InventoryItemInstance,...
    method RemoveItemAmount (line 523) | InventoryItemInstance? IMutableSlotBasedStorage<InventoryItemInstance,...
    method MoveItem (line 527) | InventoryItemInstance? IMutableSlotBasedStorage<InventoryItemInstance,...
    method TakeItem (line 531) | private InventoryItemInstance? TakeItem(short slot, NoscorePocketType ...

FILE: src/NosCore.GameObject/Services/ItemGenerationService/IItemGenerationService.cs
  type IItemGenerationService (line 12) | public interface IItemGenerationService
    method Create (line 14) | IItemInstance Create(short itemToCreateVNum);
    method Create (line 15) | IItemInstance Create(short itemToCreateVNum, short amount);
    method Create (line 16) | IItemInstance Create(short itemToCreateVNum, short amount, sbyte rare);
    method Create (line 17) | IItemInstance Create(short itemToCreateVNum, short amount, sbyte rare,...
    method Create (line 19) | IItemInstance Create(short itemToCreateVNum, short amount, sbyte rare,...
    method Convert (line 21) | IItemInstance Convert(IItemInstanceDto k);

FILE: src/NosCore.GameObject/Services/ItemGenerationService/Item/BoxInstance.cs
  class BoxInstance (line 12) | public class BoxInstance : BoxInstanceDto, IItemInstance
    method BoxInstance (line 14) | public BoxInstance(Item item)
    method BoxInstance (line 21) | [Obsolete]
    method Clone (line 28) | public object Clone()

FILE: src/NosCore.GameObject/Services/ItemGenerationService/Item/IItemInstance.cs
  type IItemInstance (line 11) | public interface IItemInstance : IItemInstanceDto
    method Clone (line 14) | object Clone();

FILE: src/NosCore.GameObject/Services/ItemGenerationService/Item/Item.cs
  class Item (line 11) | public class Item : ItemDto

FILE: src/NosCore.GameObject/Services/ItemGenerationService/Item/ItemInstance.cs
  class ItemInstance (line 12) | public class ItemInstance : ItemInstanceDto, IItemInstance
    method ItemInstance (line 14) | public ItemInstance(Item item)
    method ItemInstance (line 21) | [Obsolete]
    method Clone (line 28) | public object Clone()

FILE: src/NosCore.GameObject/Services/ItemGenerationService/Item/SpecialistInstance.cs
  class SpecialistInstance (line 12) | public class SpecialistInstance : SpecialistInstanceDto, IItemInstance
    method SpecialistInstance (line 14) | public SpecialistInstance(Item item)
    method SpecialistInstance (line 21) | [Obsolete]
    method Clone (line 28) | public object Clone()

FILE: src/NosCore.GameObject/Services/ItemGenerationService/Item/UsableInstance.cs
  class UsableInstance (line 12) | public class UsableInstance : UsableInstanceDto, IItemInstance
    method UsableInstance (line 14) | public UsableInstance(Item item)
    method UsableInstance (line 20) | [Obsolete]
    method Clone (line 26) | public object Clone()

FILE: src/NosCore.GameObject/Services/ItemGenerationService/Item/WearableInstance.cs
  class WearableInstance (line 18) | public class WearableInstance : WearableInstanceDto, IItemInstance
    method WearableInstance (line 23) | public WearableInstance(Item item, ILogger<WearableInstance> logger, I...
    method WearableInstance (line 32) | [Obsolete]
    method Clone (line 41) | public object Clone()
    method SetRarityPoint (line 46) | public void SetRarityPoint()

FILE: src/NosCore.GameObject/Services/ItemGenerationService/ItemGenerationService.cs
  class ItemGenerationService (line 22) | public class ItemGenerationService(
    method Convert (line 27) | public IItemInstance Convert(IItemInstanceDto k)
    method Create (line 46) | public IItemInstance Create(short itemToCreateVNum) => Create(itemToCr...
    method Create (line 48) | public IItemInstance Create(short itemToCreateVNum, short amount) => C...
    method Create (line 50) | public IItemInstance Create(short itemToCreateVNum, short amount, sbyt...
    method Create (line 52) | public IItemInstance Create(short itemToCreateVNum, short amount, sbyt...
    method Create (line 55) | public IItemInstance Create(short itemToCreateVNum, short amount, sbyt...
    method Generate (line 58) | public IItemInstance Generate(short itemToCreateVNum, short amount, sb...

FILE: src/NosCore.GameObject/Services/ItemStorage/ISlotBasedStorage.cs
  type ISlotBasedStorage (line 13) | public interface ISlotBasedStorage<TItem, TSlotType>
    method GetMaxSlots (line 17) | int GetMaxSlots(TSlotType slotType);
    method GetBySlot (line 19) | TItem? GetBySlot(short slot, TSlotType slotType);
    method GetById (line 21) | TItem? GetById(Guid id);
    method GetAllBySlotType (line 23) | IEnumerable<TItem> GetAllBySlotType(TSlotType slotType);
    method GetAll (line 25) | IEnumerable<TItem> GetAll();
    method GetFreeSlot (line 27) | short? GetFreeSlot(TSlotType slotType);
    method HasFreeSlot (line 29) | bool HasFreeSlot(TSlotType slotType);
    method CountBySlotType (line 31) | int CountBySlotType(TSlotType slotType);
    method CountItem (line 33) | int CountItem(int itemVNum);
  type IMutableSlotBasedStorage (line 36) | public interface IMutableSlotBasedStorage<TItem, TSlotType> : ISlotBased...
    method AddItem (line 40) | List<TItem>? AddItem(TItem item, TSlotType? slotType = null, short? sl...
    method RemoveBySlot (line 42) | TItem? RemoveBySlot(short slot, TSlotType slotType);
    method RemoveById (line 44) | TItem? RemoveById(Guid id);
    method RemoveItemAmount (line 46) | TItem? RemoveItemAmount(short amount, Guid id);
    method MoveItem (line 48) | TItem? MoveItem(short sourceSlot, TSlotType sourceType, TSlotType targ...
    method TryMoveItem (line 50) | bool TryMoveItem(TSlotType slotType, short sourceSlot, short amount, s...
    method EnoughPlace (line 53) | bool EnoughPlace(List<IItemInstance> items, TSlotType slotType);

FILE: src/NosCore.GameObject/Services/ItemStorage/ISlotItem.cs
  type ISlotItem (line 12) | public interface ISlotItem
  type ISlotItem (line 19) | public interface ISlotItem<TSlotType> : ISlotItem

FILE: src/NosCore.GameObject/Services/ItemStorage/SlotStorageHelper.cs
  class SlotStorageHelper (line 14) | public static class SlotStorageHelper
    method FindFreeSlot (line 16) | public static short? FindFreeSlot<TItem>(
    method StackItems (line 40) | public static List<TItem> StackItems<TItem>(
    method CanStack (line 98) | public static bool CanStack(IItemInstance? itemInstance)
    method ValidateEnoughPlace (line 110) | public static bool ValidateEnoughPlace<TItem>(
    method SwapItems (line 154) | public static (TItem? Source, TItem? Destination) SwapItems<TItem>(
    method SplitItem (line 169) | public static TItem? SplitItem<TItem>(
    method TryStackOntoExisting (line 190) | public static bool TryStackOntoExisting<TItem>(

FILE: src/NosCore.GameObject/Services/LoginService/ILoginService.cs
  type ILoginService (line 13) | public interface ILoginService
    method LoginAsync (line 15) | Task LoginAsync(string? username, string md5String, ClientVersionSubPa...

FILE: src/NosCore.GameObject/Services/LoginService/LoginService.cs
  class LoginService (line 28) | public class LoginService(IOptions<LoginConfiguration> loginConfiguratio...
    method LoginAsync (line 34) | public async Task LoginAsync(string? username, string md5String, Clien...

FILE: src/NosCore.GameObject/Services/MailService/Gift.cs
  class Gift (line 9) | public class Gift
    method Gift (line 11) | public Gift()
    method Gift (line 15) | public Gift(short vnum, byte amount, short design = 0, bool isRareRand...

FILE: src/NosCore.GameObject/Services/MailService/GiftHelper.cs
  class GiftHelper (line 15) | public static class GiftHelper
    method GenerateMailRequest (line 17) | public static MailRequest GenerateMailRequest(IClock clock, ICharacter...

FILE: src/NosCore.GameObject/Services/MailService/IMailService.cs
  type IMailService (line 15) | public interface IMailService
    method GetMails (line 17) | List<MailData> GetMails(long id, long characterId, bool senderCopy);
    method DeleteMailAsync (line 19) | Task<bool> DeleteMailAsync(long id, long characterId, bool senderCopy);
    method EditMailAsync (line 21) | Task<MailData?> EditMailAsync(long id, JsonPatch mailData);
    method SendMailAsync (line 23) | Task<bool> SendMailAsync(MailDto mail, short? vNum, short? amount, sby...

FILE: src/NosCore.GameObject/Services/MailService/IParcelRegistry.cs
  type IParcelRegistry (line 12) | public interface IParcelRegistry
    method GetMails (line 14) | ConcurrentDictionary<long, MailData> GetMails(long characterId, bool i...
    method GetMail (line 15) | MailData? GetMail(long characterId, bool isSenderCopy, long mailId);
    method AddMail (line 16) | void AddMail(long characterId, bool isSenderCopy, long mailId, MailDat...
    method RemoveMail (line 17) | bool RemoveMail(long characterId, bool isSenderCopy, long mailId, out ...
    method UpdateMail (line 18) | void UpdateMail(long characterId, bool isSenderCopy, long mailId, Mail...
    method GetNextMailId (line 19) | long GetNextMailId(long characterId, bool isSenderCopy);

FILE: src/NosCore.GameObject/Services/MailService/MailService.cs
  class MailService (line 30) | public class MailService(IDao<MailDto, long> mailDao, IDao<IItemInstance...
    method GetMails (line 37) | public List<MailData> GetMails(long id, long characterId, bool senderC...
    method DeleteMailAsync (line 58) | public async Task<bool> DeleteMailAsync(long id, long characterId, boo...
    method EditMailAsync (line 84) | public async Task<MailData?> EditMailAsync(long id, JsonPatch mailData)
    method SendMailAsync (line 110) | public async Task<bool> SendMailAsync(MailDto mail, short? vNum, short...
    method GenerateMailDataAsync (line 198) | private async Task<MailData> GenerateMailDataAsync(MailDto mailref, sh...
    method NotifyAsync (line 215) | private async Task NotifyAsync(byte notifyType, Subscriber? receiver, ...

FILE: src/NosCore.GameObject/Services/MailService/ParcelRegistry.cs
  class ParcelRegistry (line 19) | public class ParcelRegistry : IParcelRegistry
    method ParcelRegistry (line 27) | public ParcelRegistry(IDao<CharacterDto, long> characterDao, IDao<Mail...
    method GetMails (line 37) | public ConcurrentDictionary<long, MailData> GetMails(long characterId,...
    method GetMail (line 43) | public MailData? GetMail(long characterId, bool isSenderCopy, long mai...
    method AddMail (line 49) | public void AddMail(long characterId, bool isSenderCopy, long mailId, ...
    method RemoveMail (line 55) | public bool RemoveMail(long characterId, bool isSenderCopy, long mailI...
    method UpdateMail (line 61) | public void UpdateMail(long characterId, bool isSenderCopy, long mailI...
    method GetNextMailId (line 67) | public long GetNextMailId(long characterId, bool isSenderCopy)
    method EnsureCharacterExists (line 73) | private void EnsureCharacterExists(long characterId)
    method InitializeAsync (line 85) | private async Task InitializeAsync()

FILE: src/NosCore.GameObject/Services/MapChangeService/IMapChangeService.cs
  type IMapChangeService (line 7) | public interface IMapChangeService
    method ChangeMapInstanceAsync (line 9) | Task ChangeMapInstanceAsync(ClientSession session, Guid mapInstanceId,...
    method ChangeMapAsync (line 10) | Task ChangeMapAsync(ClientSession session, short? mapId = null, short?...
    method ChangeMapByCharacterIdAsync (line 11) | Task ChangeMapByCharacterIdAsync(long characterId, short mapId, short ...

FILE: src/NosCore.GameObject/Services/MapChangeService/MapChangeService.cs
  class MapChangeService (line 33) | public class MapChangeService(IExperienceService experienceService, IJob...
    method ChangeMapAsync (line 41) | public async Task ChangeMapAsync(ClientSession session, short? mapId =...
    method ChangeMapInstanceAsync (line 70) | public async Task ChangeMapInstanceAsync(ClientSession session, Guid m...
    method ChangeMapByCharacterIdAsync (line 267) | public async Task ChangeMapByCharacterIdAsync(long characterId, short ...
    method LeaveMapAsync (line 276) | private async Task LeaveMapAsync(ClientSession session)

FILE: src/NosCore.GameObject/Services/MapInstanceAccessService/IMapInstanceAccessService.cs
  type IMapInstanceAccessorService (line 12) | public interface IMapInstanceAccessorService
    method GetMapInstance (line 14) | MapInstance? GetMapInstance(Guid id);
    method GetBaseMapById (line 16) | MapInstance? GetBaseMapById(short mapId);

FILE: src/NosCore.GameObject/Services/MapInstanceAccessService/MapInstanceAccessService.cs
  class MapInstanceAccessorService (line 12) | public class MapInstanceAccessorService(IMapInstanceRegistry mapInstance...
    method GetMapInstance (line 14) | public MapInstance? GetMapInstance(Guid id) => mapInstanceRegistry.Get...
    method GetBaseMapById (line 16) | public MapInstance? GetBaseMapById(short mapId) => mapInstanceRegistry...

FILE: src/NosCore.GameObject/Services/MapInstanceGenerationService/IMapInstanceGenerationService.cs
  type IMapInstanceGeneratorService (line 13) | public interface IMapInstanceGeneratorService
    method AddMapInstanceAsync (line 15) | Task AddMapInstanceAsync(MapInstance mapInstance);
    method InitializeAsync (line 16) | Task InitializeAsync();
    method RemoveMapAsync (line 17) | Task RemoveMapAsync(Guid guid);
    method CreateMapInstance (line 18) | MapInstance CreateMapInstance(Map.Map map, Guid guid, bool shopAllowed...

FILE: src/NosCore.GameObject/Services/MapInstanceGenerationService/IMapInstanceRegistry.cs
  type IMapInstanceRegistry (line 12) | public interface IMapInstanceRegistry
    method GetById (line 14) | MapInstance? GetById(Guid mapInstanceId);
    method GetBaseMapById (line 15) | MapInstance? GetBaseMapById(short mapId);
    method GetAll (line 16) | IEnumerable<MapInstance> GetAll();
    method Register (line 17) | void Register(Guid mapInstanceId, MapInstance mapInstance);
    method Unregister (line 18) | bool Unregister(Guid mapInstanceId, out MapInstance? mapInstance);
    method SetAll (line 19) | void SetAll(IDictionary<Guid, MapInstance> mapInstances);

FILE: src/NosCore.GameObject/Services/MapInstanceGenerationService/MapInstance.cs
  class MapInstance (line 43) | public class MapInstance : IBroadcastable, IDisposable
    method MapInstance (line 71) | public MapInstance(Map.Map map, Guid guid, bool shopAllowed, MapInstan...
    method GetMapItemBundles (line 108) | public IEnumerable<MapItemComponentBundle> GetMapItemBundles()
    method TryGetMapItem (line 114) | public MapItemComponentBundle? TryGetMapItem(long visualId)
    method TryRemoveMapItem (line 126) | public bool TryRemoveMapItem(long visualId)
    method Dispose (line 200) | public void Dispose()
    method KickAsync (line 206) | public Task KickAsync()
    method KickAsync (line 211) | public async Task KickAsync(Func<ClientSession, bool> filter)
    method PutItem (line 224) | public MapItemComponentBundle? PutItem(short amount, IItemInstance inv...
    method LoadMonsters (line 276) | public void LoadMonsters(List<MapMonsterDto> monsters, List<NpcMonster...
    method LoadNpcs (line 299) | public void LoadNpcs(List<MapNpcDto> npcs, List<NpcMonsterDto> npcMons...
    method GetNpcById (line 323) | public NpcComponentBundle? GetNpcById(int mapNpcId) =>
    method GetMonsterById (line 326) | public MonsterComponentBundle? GetMonsterById(int mapMonsterId) =>
    method FindNpc (line 329) | public NpcComponentBundle? FindNpc(Func<NpcComponentBundle, bool> pred...
    method FindMonster (line 338) | public MonsterComponentBundle? FindMonster(Func<MonsterComponentBundle...
    method GetMapItems (line 347) | public List<IPacket> GetMapItems(RegionType language)
    method GenerateCMap (line 385) | public CMapPacket GenerateCMap(bool enter)
    method StartLifeAsync (line 395) | public Task StartLifeAsync()
    method ScheduleRespawn (line 452) | public void ScheduleRespawn(MonsterComponentBundle monster, Instant re...
    method SweepPendingRespawnsAsync (line 457) | private async Task SweepPendingRespawnsAsync()
    method Dispose (line 479) | protected virtual void Dispose(bool disposing)

FILE: src/NosCore.GameObject/Services/MapInstanceGenerationService/MapInstanceGenerationService.cs
  class MapInstanceGeneratorService (line 33) | public class MapInstanceGeneratorService(List<MapDto> maps, List<NpcMons...
    method AddMapInstanceAsync (line 47) | public Task AddMapInstanceAsync(MapInstance mapInstance)
    method RemoveMapAsync (line 53) | public async Task RemoveMapAsync(Guid mapInstanceId)
    method InitializeAsync (line 63) | public async Task InitializeAsync()
    method CreateMapInstance (line 128) | public MapInstance CreateMapInstance(Map.Map map, Guid guid, bool shop...
    method LoadPortalsAsync (line 135) | private async Task LoadPortalsAsync(MapInstance mapInstance, List<Port...

FILE: src/NosCore.GameObject/Services/MapInstanceGenerationService/MapInstanceRegistry.cs
  class MapInstanceRegistry (line 15) | public class MapInstanceRegistry : IMapInstanceRegistry
    method GetById (line 19) | public MapInstance? GetById(Guid mapInstanceId) =>
    method GetBaseMapById (line 22) | public MapInstance? GetBaseMapById(short mapId) =>
    method GetAll (line 25) | public IEnumerable<MapInstance> GetAll() => _mapInstances.Values;
    method Register (line 27) | public void Register(Guid mapInstanceId, MapInstance mapInstance) =>
    method Unregister (line 30) | public bool Unregister(Guid mapInstanceId, out MapInstance? mapInstanc...
    method SetAll (line 33) | public void SetAll(IDictionary<Guid, MapInstance> mapInstances) =>

FILE: src/NosCore.GameObject/Services/MapItemGenerationService/IMapItemGenerationService.cs
  type IMapItemGenerationService (line 13) | public interface IMapItemGenerationService
    method Create (line 15) | MapItemComponentBundle Create(MapInstance mapInstance, IItemInstance i...

FILE: src/NosCore.GameObject/Services/MapItemGenerationService/MapItemGenerationService.cs
  class MapItemGenerationService (line 15) | public class MapItemGenerationService(IIdService<MapItemComponentBundle>...
    method Create (line 18) | public MapItemComponentBundle Create(MapInstance mapInstance, IItemIns...

FILE: src/NosCore.GameObject/Services/MinilandService/IMinilandRegistry.cs
  type IMinilandRegistry (line 12) | public interface IMinilandRegistry
    method GetByCharacterId (line 14) | Miniland? GetByCharacterId(long characterId);
    method GetByMapInstanceId (line 15) | Miniland? GetByMapInstanceId(Guid mapInstanceId);
    method GetAll (line 16) | IEnumerable<Miniland> GetAll();
    method ContainsCharacter (line 17) | bool ContainsCharacter(long characterId);
    method Register (line 18) | void Register(long characterId, Miniland miniland);
    method Unregister (line 19) | bool Unregister(long characterId, out Miniland? miniland);

FILE: src/NosCore.GameObject/Services/MinilandService/IMinilandService.cs
  type IMinilandService (line 18) | public interface IMinilandService
    method GetMiniland (line 20) | Miniland GetMiniland(long character);
    method DeleteMinilandAsync (line 21) | Task<Guid?> DeleteMinilandAsync(long characterId);
    method InitializeAsync (line 22) | Task<Miniland> InitializeAsync(PlayerComponentBundle player, IMapInsta...
    method GetMinilandPortals (line 23) | List<Portal> GetMinilandPortals(long characterId);
    method GetMinilandFromMapInstanceId (line 24) | Miniland? GetMinilandFromMapInstanceId(Guid mapInstanceId);
    method AddMinilandObject (line 25) | void AddMinilandObject(MapDesignObject mapObject, long characterId, In...
    method SetStateAsync (line 26) | Task SetStateAsync(long characterId, MinilandState state);

FILE: src/NosCore.GameObject/Services/MinilandService/MapDesignObject.cs
  class MapDesignObject (line 14) | public class MapDesignObject : MinilandObjectDto
    method GenerateEffect (line 30) | public GroundEffectPacket GenerateEffect()
    method GenerateEffect (line 35) | public GroundEffectPacket GenerateEffect(bool isRemoval)
    method GenerateMapDesignObject (line 47) | public MlobjPacket GenerateMapDesignObject()
    method GenerateMapDesignObject (line 52) | public MlobjPacket GenerateMapDesignObject(bool isRemoval)

FILE: src/NosCore.GameObject/Services/MinilandService/Miniland.cs
  class Miniland (line 13) | public class Miniland : MinilandDto
    method GenerateMlinfobr (line 20) | public MlInfoBrPacket GenerateMlinfobr()
    method GenerateMlinfo (line 33) | public MlinfoPacket GenerateMlinfo()

FILE: src/NosCore.GameObject/Services/MinilandService/MinilandHelper.cs
  class MinilandHelper (line 14) | public sealed class MinilandHelper
    method MinilandHelper (line 240) | private MinilandHelper()
    method GetMinilandGift (line 246) | public Gift? GetMinilandGift(short game, int point)

FILE: src/NosCore.GameObject/Services/MinilandService/MinilandRegistry.cs
  class MinilandRegistry (line 14) | public class MinilandRegistry : IMinilandRegistry
    method GetByCharacterId (line 18) | public Miniland? GetByCharacterId(long characterId) =>
    method GetByMapInstanceId (line 21) | public Miniland? GetByMapInstanceId(Guid mapInstanceId) =>
    method GetAll (line 24) | public IEnumerable<Miniland> GetAll() => _minilands.Values;
    method ContainsCharacter (line 26) | public bool ContainsCharacter(long characterId) => _minilands.Contains...
    method Register (line 28) | public void Register(long characterId, Miniland miniland) =>
    method Unregister (line 31) | public bool Unregister(long characterId, out Miniland? miniland) =>

FILE: src/NosCore.GameObject/Services/MinilandService/MinilandService.cs
  class MinilandService (line 28) | public class MinilandService(IMapInstanceAccessorService mapInstanceAcce...
    method GetMinilandPortals (line 34) | public List<Portal> GetMinilandPortals(long characterId)
    method GetMiniland (line 69) | public Miniland GetMiniland(long characterId)
    method DeleteMinilandAsync (line 81) | public async Task<Guid?> DeleteMinilandAsync(long characterId)
    method InitializeAsync (line 103) | public async Task<Miniland> InitializeAsync(PlayerComponentBundle play...
    method SetStateAsync (line 150) | public async Task SetStateAsync(long characterId, MinilandState state)
    method GetMinilandFromMapInstanceId (line 179) | public Miniland? GetMinilandFromMapInstanceId(Guid mapInstanceId)
    method AddMinilandObject (line 184) | public void AddMinilandObject(MapDesignObject mapObject, long characte...

FILE: src/NosCore.GameObject/Services/PacketHandlerService/IPacketHandlerRegistry.cs
  type IPacketHandlerRegistry (line 13) | public interface IPacketHandlerRegistry
    method GetHandler (line 15) | IPacketHandler? GetHandler(Type packetType);
    method GetPacketAttribute (line 16) | PacketHeaderAttribute? GetPacketAttribute(Type packetType);

FILE: src/NosCore.GameObject/Services/PacketHandlerService/PacketHandlerRegistry.cs
  class PacketHandlerRegistry (line 15) | public class PacketHandlerRegistry : IPacketHandlerRegistry
    method PacketHandlerRegistry (line 20) | public PacketHandlerRegistry(IEnumerable<IPacketHandler> packetsHandlers)
    method GetHandler (line 46) | public IPacketHandler? GetHandler(Type packetType)
    method GetPacketAttribute (line 52) | public PacketHeaderAttribute? GetPacketAttribute(Type packetType)

FILE: src/NosCore.GameObject/Services/PathfindingService/IPathfindingService.cs
  type IPathfindingService (line 14) | public interface IPathfindingService
    method ForMap (line 16) | IPathfinder ForMap(Map.Map map);

FILE: src/NosCore.GameObject/Services/PathfindingService/PathfindingService.cs
  class PathfindingService (line 17) | public sealed class PathfindingService(IHeuristic heuristic) : IPathfind...
    method ForMap (line 21) | public IPathfinder ForMap(Map.Map map)

FILE: src/NosCore.GameObject/Services/QuestService/Handlers/GoToQuestHandler.cs
  class GoToQuestHandler (line 14) | [UsedImplicitly]
    method ValidateAsync (line 19) | public async Task<bool> ValidateAsync(ICharacterEntity character, Char...

FILE: src/NosCore.GameObject/Services/QuestService/Handlers/HuntQuestHandler.cs
  class HuntQuestHandler (line 13) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Services/QuestService/Handlers/KillQuestHandlerBase.cs
  class KillQuestHandlerBase (line 21) | public abstract class KillQuestHandlerBase(ILogger logger) : IQuestTypeH...
    method OnMonsterKilledAsync (line 25) | public async Task OnMonsterKilledAsync(ICharacterEntity character, Npc...

FILE: src/NosCore.GameObject/Services/QuestService/Handlers/NumberOfKillQuestHandler.cs
  class NumberOfKillQuestHandler (line 13) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Services/QuestService/IQuestService.cs
  type IQuestService (line 15) | public interface IQuestService
    method RunScriptAsync (line 17) | Task RunScriptAsync(ICharacterEntity character);
    method RunScriptAsync (line 18) | Task RunScriptAsync(ICharacterEntity character, ScriptClientPacket? pa...
    method OnMonsterKilledAsync (line 19) | Task OnMonsterKilledAsync(ICharacterEntity character, NpcMonsterDto mob);
    method OnMonsterCapturedAsync (line 24) | Task OnMonsterCapturedAsync(ICharacterEntity character, NpcMonsterDto ...
    method AddQuestAsync (line 26) | Task<bool> AddQuestAsync(ICharacterEntity character, QuestActionType t...
    method CompleteQuestAsync (line 33) | Task CompleteQuestAsync(ICharacterEntity character, CharacterQuest que...

FILE: src/NosCore.GameObject/Services/QuestService/IQuestTypeHandler.cs
  type IQuestTypeHandler (line 14) | public interface IQuestTypeHandler
    method ValidateAsync (line 18) | Task<bool> ValidateAsync(ICharacterEntity character, CharacterQuest qu...
    method OnMonsterKilledAsync (line 20) | Task OnMonsterKilledAsync(ICharacterEntity character, NpcMonsterDto mo...

FILE: src/NosCore.GameObject/Services/QuestService/Quest.cs
  class CharacterQuest (line 16) | public class CharacterQuest : CharacterQuestDto
    method GenerateQstiPacket (line 24) | public QstiPacket GenerateQstiPacket(bool showDialog)
    method AreObjectivesComplete (line 29) | public bool AreObjectivesComplete()
    method GenerateQuestSubPacket (line 43) | public QuestSubPacket GenerateQuestSubPacket(bool showDialog)
    method IsCountableObjective (line 78) | private static bool IsCountableObjective(Packets.Enumerations.QuestTyp...
  class Quest (line 96) | public class Quest : QuestDto
    method GenerateTargetPacket (line 98) | public TargetPacket GenerateTargetPacket()
    method GenerateTargetOffPacket (line 107) | public TargetOffPacket GenerateTargetOffPacket()

FILE: src/NosCore.GameObject/Services/QuestService/QuestService.cs
  class QuestService (line 33) | public class QuestService(List<ScriptDto> scripts,
    method RunScriptAsync (line 45) | public Task RunScriptAsync(ICharacterEntity character) => RunScriptAsy...
    method RunScriptAsync (line 46) | public async Task RunScriptAsync(ICharacterEntity character, ScriptCli...
    method CheckScriptStateAsync (line 87) | private async Task<bool> CheckScriptStateAsync(ScriptClientPacket pack...
    method IsValidScriptAsync (line 120) | private async Task<bool> IsValidScriptAsync(ICharacterEntity character...
    method QPayAsync (line 147) | private async Task<bool> QPayAsync(ICharacterEntity character, short q...
    method ApplyRewardAsync (line 201) | private async Task ApplyRewardAsync(ICharacterEntity character, QuestR...
    method TimeAsync (line 263) | private async Task<bool> TimeAsync(short delay)
    method TargetOffPacketAsync (line 269) | private async Task<bool> TargetOffPacketAsync(short questId, ICharacte...
    method AddQuestAsync (line 281) | public async Task<bool> AddQuestAsync(ICharacterEntity character, Ques...
    method ValidateQuestAsync (line 375) | public Task<bool> ValidateQuestAsync(ICharacterEntity character, short...
    method OnMonsterKilledAsync (line 387) | public async Task OnMonsterKilledAsync(ICharacterEntity character, Npc...
    method OnMonsterCapturedAsync (line 410) | public Task OnMonsterCapturedAsync(ICharacterEntity character, NpcMons...
    method CompleteQuestAsync (line 415) | public async Task CompleteQuestAsync(ICharacterEntity character, Chara...

FILE: src/NosCore.GameObject/Services/SaveService/ISaveService.cs
  type ISaveService (line 12) | public interface ISaveService
    method SaveAsync (line 14) | Task SaveAsync(ClientSession session);

FILE: src/NosCore.GameObject/Services/SaveService/SaveService.cs
  class SaveService (line 22) | public class SaveService(IDao<CharacterDto, long> characterDao, IDao<IIt...
    method SaveAsync (line 33) | public async Task SaveAsync(ClientSession session)

FILE: src/NosCore.GameObject/Services/ShopService/IShopRegistry.cs
  type IShopRegistry (line 11) | public interface IShopRegistry
    method RegisterPlayerShop (line 13) | void RegisterPlayerShop(long characterId, Shop shop);
    method UnregisterPlayerShop (line 14) | void UnregisterPlayerShop(long characterId);
    method GetPlayerShop (line 15) | Shop? GetPlayerShop(long characterId);
    method GetAllPlayerShops (line 16) | IEnumerable<Shop> GetAllPlayerShops();

FILE: src/NosCore.GameObject/Services/ShopService/Shop.cs
  class Shop (line 15) | public class Shop : ShopDto

FILE: src/NosCore.GameObject/Services/ShopService/ShopItem.cs
  class ShopItem (line 12) | public class ShopItem : ShopItemDto

FILE: src/NosCore.GameObject/Services/ShopService/ShopRegistry.cs
  class ShopRegistry (line 12) | public class ShopRegistry : IShopRegistry
    method RegisterPlayerShop (line 16) | public void RegisterPlayerShop(long characterId, Shop shop)
    method UnregisterPlayerShop (line 21) | public void UnregisterPlayerShop(long characterId)
    method GetPlayerShop (line 26) | public Shop? GetPlayerShop(long characterId)
    method GetAllPlayerShops (line 32) | public IEnumerable<Shop> GetAllPlayerShops()

FILE: src/NosCore.GameObject/Services/SkillService/ISkillService.cs
  type ISkillService (line 6) | public interface ISkillService
    method LoadSkill (line 8) | Task LoadSkill(ICharacterEntity character);
    method LearnClassSkillsAsync (line 10) | Task<bool> LearnClassSkillsAsync(ICharacterEntity character);

FILE: src/NosCore.GameObject/Services/SkillService/SkillService.cs
  class SkillService (line 17) | public class SkillService(IDao<CharacterSkillDto, Guid> characterSkillDa...
    method LoadSkill (line 19) | public async Task LoadSkill(ICharacterEntity character)
    method LearnClassSkillsAsync (line 51) | public async Task<bool> LearnClassSkillsAsync(ICharacterEntity character)

FILE: src/NosCore.GameObject/Services/SpeedCalculationService/ISpeedCalculationService.cs
  type ISpeedCalculationService (line 11) | public interface ISpeedCalculationService
    method CalculateSpeed (line 13) | byte CalculateSpeed(INonPlayableEntity nonPlayableEntity);
    method CalculateSpeed (line 15) | byte CalculateSpeed(ICharacterEntity visualEntity);

FILE: src/NosCore.GameObject/Services/SpeedCalculationService/SpeedCalculationService.cs
  class SpeedCalculationService (line 12) | public class SpeedCalculationService(ISpeedService speedService) : ISpee...
    method CalculateSpeed (line 14) | private byte CalculateSpeed(IAliveEntity aliveEntity, byte defaultSpeed)
    method CalculateSpeed (line 31) | public byte CalculateSpeed(INonPlayableEntity nonPlayableEntity)
    method CalculateSpeed (line 36) | public byte CalculateSpeed(ICharacterEntity characterEntity)

FILE: src/NosCore.GameObject/Services/TransformationService/ITransformationService.cs
  type ITransformationService (line 13) | public interface ITransformationService
    method RemoveSpAsync (line 15) | Task RemoveSpAsync(ClientSession session);
    method ChangeSpAsync (line 17) | Task ChangeSpAsync(ClientSession session);
    method ChangeVehicleAsync (line 19) | Task ChangeVehicleAsync(ClientSession session, Item item);
    method RemoveVehicleAsync (line 21) | Task RemoveVehicleAsync(ClientSession session);

FILE: src/NosCore.GameObject/Services/TransformationService/TransformationService.cs
  class TransformationService (line 32) | public class TransformationService(IClock clock, IExperienceService expe...
    method RemoveSpAsync (line 37) | public async Task RemoveSpAsync(ClientSession session)
    method ChangeSpAsync (line 90) | public async Task ChangeSpAsync(ClientSession session)
    method ChangeVehicleAsync (line 157) | public async Task ChangeVehicleAsync(ClientSession session, Item item)
    method RemoveVehicleAsync (line 180) | public async Task RemoveVehicleAsync(ClientSession session)

FILE: src/NosCore.GameObject/Services/UpgradeService/EquipmentUpgradeOperationBase.cs
  class EquipmentUpgradeOperationBase (line 46) | public abstract class EquipmentUpgradeOperationBase(IRandomNumberSource ...
    method SayMessageFor (line 89) | protected override Game18NConstString SayMessageFor(UpgradeOutcome out...
    method TryReject (line 96) | protected override IReadOnlyList<IPacket>? TryReject(ClientSession ses...
    method TryPrepareContext (line 117) | protected override UpgradeContext? TryPrepareContext(ClientSession ses...
    method DetermineOutcome (line 163) | protected override UpgradeOutcome DetermineOutcome(double roll, Upgrad...
    method ApplySuccess (line 193) | protected override void ApplySuccess(UpgradeContext ctx)
    method ApplyFailure (line 199) | protected override void ApplyFailure(ClientSession session, UpgradeCon...
    method ApplyFixed (line 205) | protected override void ApplyFixed(ClientSession session, UpgradeConte...
    method EmitOutcomeEffectsAsync (line 216) | protected override async Task EmitOutcomeEffectsAsync(ClientSession se...
    method BuildPocketRefresh (line 234) | protected override IEnumerable<IPacket> BuildPocketRefresh(UpgradeCont...
    type EquipmentUpgradeRollData (line 247) | private sealed record EquipmentUpgradeRollData(int Level, bool IsHighR...

FILE: src/NosCore.GameObject/Services/UpgradeService/IRandomNumberSource.cs
  type IRandomNumberSource (line 11) | public interface IRandomNumberSource
    method NextDouble (line 13) | double NextDouble();
  class RandomNumberSource (line 16) | public sealed class RandomNumberSource : IRandomNumberSource
    method NextDouble (line 18) | public double NextDouble() => System.Random.Shared.NextDouble();

FILE: src/NosCore.GameObject/Services/UpgradeService/IUpgradeOperation.cs
  type IUpgradeOperation (line 16) | public interface IUpgradeOperation
    method ExecuteAsync (line 20) | Task<IReadOnlyList<IPacket>> ExecuteAsync(ClientSession session, Upgra...

FILE: src/NosCore.GameObject/Services/UpgradeService/RarifyOperation.cs
  class RarifyOperation (line 13) | [UsedImplicitly]
  class RarifyProtectedOperation (line 22) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Services/UpgradeService/RarifyOperationBase.cs
  class RarifyOperationBase (line 38) | public abstract class RarifyOperationBase(IRandomNumberSource random, IG...
    method SayMessageFor (line 84) | protected override Game18NConstString SayMessageFor(UpgradeOutcome out...
    method TryPrepareContext (line 89) | protected override UpgradeContext? TryPrepareContext(ClientSession ses...
    method DetermineOutcome (line 123) | protected override UpgradeOutcome DetermineOutcome(double roll, Upgrad...
    method ApplySuccess (line 146) | protected override void ApplySuccess(UpgradeContext ctx)
    method ApplyFailure (line 155) | protected override void ApplyFailure(ClientSession session, UpgradeCon...
    method BuildPocketRefresh (line 161) | protected override IEnumerable<IPacket> BuildPocketRefresh(UpgradeCont...
    method EmitOutcomeEffectsAsync (line 176) | protected override async Task EmitOutcomeEffectsAsync(ClientSession se...
    method BuildMsgi (line 195) | protected override MsgiPacket BuildMsgi(UpgradeContext ctx, UpgradeOut...
    class RarifyRollState (line 211) | private sealed class RarifyRollState
      method RarifyRollState (line 213) | public RarifyRollState(sbyte originalRare) => OriginalRare = origina...

FILE: src/NosCore.GameObject/Services/UpgradeService/SumUpgradeOperation.cs
  class SumUpgradeOperation (line 42) | [UsedImplicitly]
    method TryPrepareContext (line 58) | protected override UpgradeContext? TryPrepareContext(ClientSession ses...
    method GetSuccessRate (line 106) | protected override double GetSuccessRate(UpgradeContext ctx) =>
    method ApplySuccess (line 112) | protected override void ApplySuccess(UpgradeContext ctx)
    method ApplyFailure (line 124) | protected override void ApplyFailure(ClientSession session, UpgradeCon...
    method ConsumeFixedSlots (line 129) | protected override void ConsumeFixedSlots(ClientSession session, Upgra...
    method EmitOutcomeEffectsAsync (line 138) | protected override async Task EmitOutcomeEffectsAsync(ClientSession se...
    method BuildPocketRefresh (line 158) | protected override IEnumerable<IPacket> BuildPocketRefresh(UpgradeCont...

FILE: src/NosCore.GameObject/Services/UpgradeService/UpgradeContext.cs
  type UpgradeContext (line 14) | public sealed record UpgradeContext(
  type MaterialCost (line 21) | public sealed record MaterialCost(short VNum, short Amount);

FILE: src/NosCore.GameObject/Services/UpgradeService/UpgradeItemOperation.cs
  class UpgradeItemOperation (line 13) | [UsedImplicitly]
  class UpgradeItemProtectedOperation (line 22) | [UsedImplicitly]

FILE: src/NosCore.GameObject/Services/UpgradeService/UpgradeOperation.cs
  class UpgradeOperation (line 41) | public abstract class UpgradeOperation(IRandomNumberSource random, IGame...
    method ExecuteAsync (line 46) | public async Task<IReadOnlyList<IPacket>> ExecuteAsync(ClientSession s...
    method TryReject (line 104) | protected virtual IReadOnlyList<IPacket>? TryReject(ClientSession sess...
    method TryPrepareContext (line 106) | protected abstract UpgradeContext? TryPrepareContext(ClientSession ses...
    method ApplySuccess (line 108) | protected abstract void ApplySuccess(UpgradeContext ctx);
    method ApplyFailure (line 110) | protected ab
Condensed preview — 976 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (9,968K chars).
[
  {
    "path": ".coderabbit.yaml",
    "chars": 394,
    "preview": "language: \"en\"\nearly_access: false\nreviews:\n  profile: \"chill\"\n  request_changes_workflow: false\n  high_level_summary: t"
  },
  {
    "path": ".editorconfig",
    "chars": 2276,
    "preview": "\n[*.proto]\nindent_style=tab\nindent_size=tab\ntab_width=4\n\n[*.{asax,ascx,aspx,cs,cshtml,css,htm,html,js,jsx,master,razor,s"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 99,
    "preview": "# These are supported funding model platforms\n\ngithub: 0Lucifer0\npatreon: NosCore\nko_fi: noscoreio\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 500,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\n\n---\n\n**Describe the bug**\nA clear and concise descriptio"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 560,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\n\n---\n\n**Is your feature request related to a problem? "
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 127,
    "preview": "version: 2\nupdates:\n- package-ecosystem: nuget\n  directory: \"/\"\n  schedule:\n    interval: daily\n  open-pull-requests-lim"
  },
  {
    "path": ".github/workflows/dotnet.yml",
    "chars": 4626,
    "preview": "name: .NET\n\non:\n  push:\n    branches: [ master ]\n  pull_request:\n    branches: [ master ]\n\njobs:\n  build:\n    runs-on: u"
  },
  {
    "path": ".gitignore",
    "chars": 9481,
    "preview": "\n### Csharp ###\n## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio "
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 3862,
    "preview": "# Contributing to NosCore\n\n## Concurrency & locking\n\nNosCore intentionally uses **per-resource locks** rather than a glo"
  },
  {
    "path": "Directory.Build.props",
    "chars": 399,
    "preview": "<Project>\n  <PropertyGroup>\n    <LangVersion>latest</LangVersion>\n    <Nullable>enable</Nullable>\n    <TreatWarningsAsEr"
  },
  {
    "path": "Directory.Packages.props",
    "chars": 5110,
    "preview": "<Project>\n  <PropertyGroup>\n    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>\n  </PropertyGroup>"
  },
  {
    "path": "LICENSE",
    "chars": 1066,
    "preview": "MIT License\n\nCopyright (c) 2026 NosCoreIO\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\n"
  },
  {
    "path": "NosCore.sln",
    "chars": 24403,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 18\nVisualStudioVersion = 18.2.1140"
  },
  {
    "path": "NosCore.sln.DotSettings",
    "chars": 2455,
    "preview": "<wpf:ResourceDictionary xml:space=\"preserve\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:s=\"clr-namesp"
  },
  {
    "path": "NosCore.sln.startup.json",
    "chars": 1537,
    "preview": "/*\n    This is a configuration file for the SwitchStartupProject Visual Studio Extension\n    See https://bitbucket.org/t"
  },
  {
    "path": "NuGet.config",
    "chars": 209,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n    <packageSources>\n        <clear />\n        <add key=\"nuget.or"
  },
  {
    "path": "README.md",
    "chars": 3991,
    "preview": "<p align=\"center\">\n  <img src=\"https://github.com/NosCoreIO/NosCore.Packets/blob/15.0.1/icon.png\"/>\n</p>\n\n# NosCore #\n[!"
  },
  {
    "path": "build/.gitkeep",
    "chars": 1,
    "preview": ""
  },
  {
    "path": "build-exe.cmd",
    "chars": 237,
    "preview": "dotnet build -r win-x64 || exit /b 1\ndotnet build -r linux-x64 || exit /b 1\ndotnet build -r linux-musl-x64 || exit /b 1\n"
  },
  {
    "path": "build.cmd",
    "chars": 12,
    "preview": "dotnet build"
  },
  {
    "path": "codecov.yml",
    "chars": 297,
    "preview": "coverage:\n  range: 35..100 #upgrade when code coverage is up\n  round: down\n  precision: 2\nignore:\n  - \"src/NosCore.World"
  },
  {
    "path": "configuration/api.yml",
    "chars": 276,
    "preview": "MasterCommunication:\n  Password: NosCorePassword\n  Host: ${MASTER_HOST,http://localhost}\n  Port: 5000\nHost: ${HOST,127.0"
  },
  {
    "path": "configuration/database.yml",
    "chars": 83,
    "preview": "Host: localhost\nPort: 5432\nDatabase: noscore\nUsername: postgres\nPassword: password\n"
  },
  {
    "path": "configuration/logger.yml",
    "chars": 313,
    "preview": "Serilog:\n  MinimumLevel:\n    Default: Debug\n    Override:\n      Microsoft: Warning\n  WriteTo:\n  - Name: Console\n    Arg"
  },
  {
    "path": "configuration/login.yml",
    "chars": 278,
    "preview": "MasterCommunication:\n  Password: NosCorePassword\n  Host: ${MASTER_HOST,http://localhost}\n  Port: 5000\nHost: ${HOST,127.0"
  },
  {
    "path": "configuration/master.yml",
    "chars": 215,
    "preview": "WebApi:\n  Host: ${WEBAPI_HOST,http://localhost}\n  Port: 5000\n  Password: NosCorePassword\nLanguage: en\nDatabase:\n  Host: "
  },
  {
    "path": "configuration/parser.yml",
    "chars": 116,
    "preview": "Language: en\nDatabase:\n  Host: 127.0.0.1\n  Port: 5432\n  Database: noscore\n  Username: postgres\n  Password: password\n"
  },
  {
    "path": "configuration/world.yml",
    "chars": 5805,
    "preview": "MasterCommunication:\n  Password: NosCorePassword\n  Host: ${MASTER_HOST,http://localhost}\n  Port: 5000\nServerName: S1-Nos"
  },
  {
    "path": "deploy/Dockerfile-login",
    "chars": 1342,
    "preview": "# cf https://github.com/dotnet/dotnet-docker/blob/main/src/aspnet/10.0/alpine3.21/amd64/Dockerfile\n\nARG REPO=mcr.microso"
  },
  {
    "path": "deploy/Dockerfile-master",
    "chars": 1348,
    "preview": "# cf https://github.com/dotnet/dotnet-docker/blob/main/src/aspnet/10.0/alpine3.21/amd64/Dockerfile\n\nARG REPO=mcr.microso"
  },
  {
    "path": "deploy/Dockerfile-world",
    "chars": 1366,
    "preview": "# cf https://github.com/dotnet/dotnet-docker/blob/main/src/aspnet/10.0/alpine3.21/amd64/Dockerfile\n\nARG REPO=mcr.microso"
  },
  {
    "path": "docker-compose.yml",
    "chars": 2361,
    "preview": "services:\n  db:\n    container_name: noscore-db\n    image: postgres:17.2-alpine3.21\n    restart: unless-stopped\n    envir"
  },
  {
    "path": "documentation/PostmanCollection/NosCore.postman_collection.json",
    "chars": 2612,
    "preview": "{\n\t\"info\": {\n\t\t\"_postman_id\": \"2a1742ee-c773-4210-90b1-2f6f07ceec39\",\n\t\t\"name\": \"NosCore\",\n\t\t\"schema\": \"https://schema.g"
  },
  {
    "path": "documentation/dat/Card.dat.md",
    "chars": 1553,
    "preview": "# Card.dat\n\n```text\n\tEFFECT\t{EffectId}\n\tGROUP\t0\t{Level}\n\tLAST\t{TimeoutBuff}\t{TimeoutBuffChance}\n\tNAME\t{NameI18NKey}\n\tSTY"
  },
  {
    "path": "documentation/dat/Item.dat.md",
    "chars": 5725,
    "preview": "# Item.dat\n\n```text\n\tFLAG\t0\t0\t0\t{IsSoldable}\t{IsDroppable}\t{IsTradable}\t{IsMinilandActionable}\t{IsWarehouse}\t{Flag9}\t{Fl"
  },
  {
    "path": "documentation/dat/Skill.dat.md",
    "chars": 996,
    "preview": "# Skill.dat\n\n```text\n```\n\n## Computed / multi-section fields\n\n| DTO property | Type | Source | Description |\n|---|---|--"
  },
  {
    "path": "documentation/dat/monster.dat.md",
    "chars": 30450,
    "preview": "# monster.dat\n\n```text\n\tAINFO\t{ainfoDefType}\t{DefenceUpgrade}\n\tARMOR\t{CloseDefence}\t{meleeDef}\t{rangedDef}\t{magicDef}\t{d"
  },
  {
    "path": "documentation/dat/quest.dat.md",
    "chars": 717,
    "preview": "# quest.dat\n\n```text\n```\n\n## Computed / multi-section fields\n\n| DTO property | Type | Source | Description |\n|---|---|--"
  },
  {
    "path": "lgtm.yml",
    "chars": 74,
    "preview": "extraction:\n  csharp:\n    index:\n      dotnet:\n        version: \"8.0.100\"\n"
  },
  {
    "path": "scripts/Docker - All.cmd",
    "chars": 125,
    "preview": "cd ..\n\ndotnet build --nologo -p:TargetArch=linux-musl-x64\ndocker-compose up --force-recreate --build login master world\n"
  },
  {
    "path": "scripts/Docker - LoginServer.cmd",
    "chars": 112,
    "preview": "cd ..\n\ndotnet build --nologo -p:TargetArch=linux-musl-x64\ndocker-compose up --force-recreate --build login\nPAUSE"
  },
  {
    "path": "scripts/Docker - MasterServer.cmd",
    "chars": 113,
    "preview": "cd ..\n\ndotnet build --nologo -p:TargetArch=linux-musl-x64\ndocker-compose up --force-recreate --build master\nPAUSE"
  },
  {
    "path": "scripts/Docker - Postgres.cmd",
    "chars": 33,
    "preview": "cd ..\n\ndocker-compose up db\nPAUSE"
  },
  {
    "path": "scripts/Docker - ReverseProxy.cmd",
    "chars": 140,
    "preview": "cd ..\n\ndocker-compose pull\ndotnet build --nologo -p:TargetArch=linux-musl-x64\ndocker-compose up --force-recreate --build"
  },
  {
    "path": "scripts/Docker - Shutdown.cmd",
    "chars": 32,
    "preview": "cd ..\n\ndocker-compose down\nPAUSE"
  },
  {
    "path": "scripts/Docker - WorldServer.cmd",
    "chars": 112,
    "preview": "cd ..\n\ndotnet build --nologo -p:TargetArch=linux-musl-x64\ndocker-compose up --force-recreate --build world\nPAUSE"
  },
  {
    "path": "scripts/LoginServer.cmd",
    "chars": 63,
    "preview": "cd ..\\build\\net8.0\\\nstart /d \".\" dotnet NosCore.LoginServer.dll"
  },
  {
    "path": "scripts/MasterServer.cmd",
    "chars": 64,
    "preview": "cd ..\\build\\net8.0\\\nstart /d \".\" dotnet NosCore.MasterServer.dll"
  },
  {
    "path": "scripts/Parser.cmd",
    "chars": 58,
    "preview": "cd ..\\build\\net8.0\\\nstart /d \".\" dotnet NosCore.Parser.dll"
  },
  {
    "path": "scripts/WorldServer.cmd",
    "chars": 63,
    "preview": "cd ..\\build\\net8.0\\\nstart /d \".\" dotnet NosCore.WorldServer.dll"
  },
  {
    "path": "scripts/docker-publish.sh",
    "chars": 1057,
    "preview": "#!/usr/bin/env bash\n\necho \"$DOCKER_PASSWORD\" | docker login -u \"$DOCKER_USERNAME\" --password-stdin\ndotnet test --runtime"
  },
  {
    "path": "src/NosCore.Core/AuthorizeRoleAttribute.cs",
    "chars": 649,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Core/Channel.cs",
    "chars": 862,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Core/ChannelInfo.cs",
    "chars": 785,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Core/Concurrency/AsyncLock.cs",
    "chars": 1102,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Core/Configuration/LoginConfiguration.cs",
    "chars": 749,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Core/Configuration/WorldConfiguration.cs",
    "chars": 2421,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Core/ConfigureJwtBearerOptions.cs",
    "chars": 1691,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Core/ConnectionInfo.cs",
    "chars": 322,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Core/Encryption/BcryptEncryption.cs",
    "chars": 530,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Core/Encryption/Pbkdf2Hasher.cs",
    "chars": 1020,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Core/Encryption/Sha512Hasher.cs",
    "chars": 765,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Core/Extensions/TypeExtension.cs",
    "chars": 2662,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Core/I18N/GameLanguageLocalizer.cs",
    "chars": 1890,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Core/I18N/IGameLanguageLocalizer.cs",
    "chars": 565,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Core/NosCore.Core.csproj",
    "chars": 2715,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <TieredCompilati"
  },
  {
    "path": "src/NosCore.Core/Observability/NosCoreTelemetry.cs",
    "chars": 2038,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Core/Services/IdService/IIdService.cs",
    "chars": 369,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Core/Services/IdService/IdService.cs",
    "chars": 466,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Core/SessionFactory.cs",
    "chars": 778,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/ChangeChannelPacket.cs",
    "chars": 579,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/ChangeClassPacket.cs",
    "chars": 663,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/ChangeGenderPacket.cs",
    "chars": 463,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/ClearInventoryPacket.cs",
    "chars": 468,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/CommandPacketHeaderAttribute.cs",
    "chars": 527,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/CreateItemPacket.cs",
    "chars": 735,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/EffectCommandPacket.cs",
    "chars": 563,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/EntryPointPacket.cs",
    "chars": 559,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/FlCommandPacket.cs",
    "chars": 565,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/GiftPacket.cs",
    "chars": 858,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/HelpPacket.cs",
    "chars": 439,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/ICommandPacket.cs",
    "chars": 514,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/InvisibleCommandPacket.cs",
    "chars": 461,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/KickPacket.cs",
    "chars": 547,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/KillPacket.cs",
    "chars": 439,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/PositionPacket.cs",
    "chars": 451,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/SetBankGoldPacket.cs",
    "chars": 570,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/SetGoldCommandPacket.cs",
    "chars": 740,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/SetHairColorPacket.cs",
    "chars": 569,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/SetHairStylePacket.cs",
    "chars": 569,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/SetHeroLevelCommandPacket.cs",
    "chars": 766,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/SetHeroXpPacket.cs",
    "chars": 562,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/SetJobLevelCommandPacket.cs",
    "chars": 760,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/SetJobLevelXpPacket.cs",
    "chars": 578,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/SetLevelCommandPacket.cs",
    "chars": 750,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/SetMaintenancePacket.cs",
    "chars": 673,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/SetReputationPacket.cs",
    "chars": 775,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/SetSpAdditionPointPacket.cs",
    "chars": 596,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/SetSpPointPacket.cs",
    "chars": 564,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/ShoutHerePacket.cs",
    "chars": 566,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/ShoutPacket.cs",
    "chars": 554,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/SizePacket.cs",
    "chars": 709,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/SpeedPacket.cs",
    "chars": 548,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/CommandPackets/TeleportPacket.cs",
    "chars": 724,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/DataAttributes/StaticMetaDataAttribute.cs",
    "chars": 434,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Dto/I18NFromAttribute.cs",
    "chars": 321,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Dto/I18NString.cs",
    "chars": 758,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Dto/IDTO.cs",
    "chars": 227,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Dto/II18NDto.cs",
    "chars": 385,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Dto/IItemInstanceDto.cs",
    "chars": 682,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Dto/IStaticDto.cs",
    "chars": 240,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Dto/StaticDtoExtension.cs",
    "chars": 2253,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Audit/AuditLogType.cs",
    "chars": 317,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Battle/TargetHitType.cs",
    "chars": 423,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Bazaar/BazaarEquipmentType.cs",
    "chars": 375,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Bazaar/BazaarJeweleryType.cs",
    "chars": 369,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Bazaar/BazaarMainType.cs",
    "chars": 370,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Bazaar/BazaarUsableType.cs",
    "chars": 364,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Buff/AdditionalTypes.cs",
    "chars": 37861,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Buff/BCardType.cs",
    "chars": 3753,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Buff/BuffType.cs",
    "chars": 302,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Buff/MedalType.cs",
    "chars": 303,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Buff/ShellOptionType.cs",
    "chars": 4038,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Buff/StaticBonusType.cs",
    "chars": 419,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Character/CharacterOption.cs",
    "chars": 746,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Character/CharacterState.cs",
    "chars": 299,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Character/FactionType.cs",
    "chars": 411,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Character/MateType.cs",
    "chars": 387,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Event/EventActionType.cs",
    "chars": 1044,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Event/EventType.cs",
    "chars": 519,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Family/FamilyAuthority.cs",
    "chars": 435,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Family/FamilyLogType.cs",
    "chars": 691,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Family/FamilyMemberRank.cs",
    "chars": 926,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Group/GroupSharingType.cs",
    "chars": 298,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Group/GroupType.cs",
    "chars": 332,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/HashingType.cs",
    "chars": 419,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/I18N/LanguageKey.cs",
    "chars": 5091,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Interaction/Act4RaidType.cs",
    "chars": 321,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Interaction/ArenaTeamType.cs",
    "chars": 297,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Interaction/ChatType.cs",
    "chars": 375,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Interaction/GeneralLogType.cs",
    "chars": 309,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Interaction/InRespawnType.cs",
    "chars": 338,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Interaction/PenaltyType.cs",
    "chars": 383,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Interaction/ReceiverType.cs",
    "chars": 493,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Interaction/RespawnType.cs",
    "chars": 554,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Interaction/ScriptedInstanceType.cs",
    "chars": 426,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Interaction/TalentArenaOptionType.cs",
    "chars": 448,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Interaction/TeleporterType.cs",
    "chars": 312,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Items/CellonType.cs",
    "chars": 368,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Items/ItemEffectType.cs",
    "chars": 1352,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Items/ItemType.cs",
    "chars": 852,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Items/JewelOptionType.cs",
    "chars": 455,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Items/RarifyMode.cs",
    "chars": 418,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Items/RarifyProtection.cs",
    "chars": 317,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Items/UpgradeMode.cs",
    "chars": 290,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Items/UpgradeProtection.cs",
    "chars": 380,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Map/MapInstanceEventType.cs",
    "chars": 268,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Map/MapInstanceType.cs",
    "chars": 626,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Map/MapTypeType.cs",
    "chars": 805,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Map/MonsterType.cs",
    "chars": 449,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Miniland/WarehouseType.cs",
    "chars": 333,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/NoscorePocketType.cs",
    "chars": 570,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/Quest/QuestRewardType.cs",
    "chars": 791,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/SaveResult.cs",
    "chars": 302,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/Enumerations/UpdateStatActionType.cs",
    "chars": 390,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/GameObjectMapper.cs",
    "chars": 536,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/NosCore.Data.csproj",
    "chars": 2976,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <TieredCompilati"
  },
  {
    "path": "src/NosCore.Data/Resource/LocalizedResources.Designer.cs",
    "chars": 40573,
    "preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code w"
  },
  {
    "path": "src/NosCore.Data/Resource/LocalizedResources.cs.resx",
    "chars": 21061,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "src/NosCore.Data/Resource/LocalizedResources.de.resx",
    "chars": 22807,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "src/NosCore.Data/Resource/LocalizedResources.es.resx",
    "chars": 19810,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prima"
  },
  {
    "path": "src/NosCore.Data/Resource/LocalizedResources.fr.resx",
    "chars": 22154,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prima"
  },
  {
    "path": "src/NosCore.Data/Resource/LocalizedResources.it.resx",
    "chars": 23628,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "src/NosCore.Data/Resource/LocalizedResources.pl.resx",
    "chars": 19936,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "src/NosCore.Data/Resource/LocalizedResources.resx",
    "chars": 24218,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "src/NosCore.Data/Resource/LocalizedResources.ru.resx",
    "chars": 23170,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "src/NosCore.Data/Resource/LocalizedResources.tr.resx",
    "chars": 22410,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "src/NosCore.Data/WebApi/AuthIntent.cs",
    "chars": 333,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/WebApi/BazaarLink.cs",
    "chars": 488,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/WebApi/BazaarRequest.cs",
    "chars": 609,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/WebApi/BlacklistRequest.cs",
    "chars": 386,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/WebApi/Character.cs",
    "chars": 366,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/WebApi/CharacterRelationStatus.cs",
    "chars": 557,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/WebApi/FriendShipRequest.cs",
    "chars": 385,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/WebApi/MailRequest.cs",
    "chars": 533,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/WebApi/Subscriber.cs",
    "chars": 499,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/WebApi/WareHouseDepositRequest.cs",
    "chars": 510,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Data/WebApi/WarehouseLink.cs",
    "chars": 482,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Database/DesignTimeDbContextFactory.cs",
    "chars": 983,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Database/Entities/Account.cs",
    "chars": 1604,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Database/Entities/Act.cs",
    "chars": 859,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Database/Entities/ActPart.cs",
    "chars": 915,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Database/Entities/AuditLog.cs",
    "chars": 800,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Database/Entities/BCard.cs",
    "chars": 1188,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Database/Entities/Base/I18NStringAttribute.cs",
    "chars": 337,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Database/Entities/Base/IEntity.cs",
    "chars": 244,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Database/Entities/Base/IStaticEntity.cs",
    "chars": 260,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Database/Entities/Base/SynchronizableBaseEntity.cs",
    "chars": 497,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Database/Entities/BazaarItem.cs",
    "chars": 921,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  },
  {
    "path": "src/NosCore.Database/Entities/BoxInstance.cs",
    "chars": 308,
    "preview": "//  __  _  __    __   ___ __  ___ ___\n// |  \\| |/__\\ /' _/ / _//__\\| _ \\ __|\n// | | ' | \\/ |`._`.| \\_| \\/ | v / _|\n// |_"
  }
]

// ... and 776 more files (download for full content)

About this extraction

This page contains the full source code of the NosCoreIO/NosCore GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 976 files (8.7 MB), approximately 2.3M tokens, and a symbol index with 5347 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!