Thank you for your support , also i might consider creating a discord channel but i didn't use it before so i have no knowledge in it 😅 but i would update the thread with thr links once its one right now I'm refining the emulator and i made a huge process by collecting almost 614 opcodes and packets that the emulator use also im seeing a lot of improvements in the systemsQuote:
Following. Wishing you good luck in your project! You should create a discord so we can follow along :)
I need some expert opinion on this please since I'm kinda confused this is my project setup but i have a few problems choosing the right project setup and tools and framework
Ather-Emulator/
├── Ather-emulator.sln
├── src/
│ ├── Ather.Server/ ← Main host (Ather-emulator.exe entry point)
│ │ ├── Program.cs ← Main entry, starts all servers
│ │ ├── Ather-emulator.csproj ← .exe project
│ │ └── app.ini ← Main config might be changed to sql table one i think this will be better
│ │
│ ├── Ather.Core/ ← Shared foundation
│ │ ├── Security/
│ │ │ ├── Security.cs ← Handshake, encryption, security bytes
│ │ │ ├── Blowfish.cs ← Real Blowfish with correct S-boxes
│ │ │ ├── Packet.cs ← Packet read/write API
│ │ │ ├── PacketReader.cs
│ │ │ ├── PacketWriter.cs
│ │ │ ├── TransferBuffer.cs
│ │ │ └── Utility.cs
│ │ ├── Network/ ← TCP networking
│ │ │ ├── TcpServer.cs ← Async TCP listener
│ │ │ ├── Session.cs ← Per-connection session
│ │ │ └── PacketHandler.cs ← Base handler class
│ │ ├── Protocol/ ← Opcode definitions
│ │ │ ├── Opcodes.cs ← All 600+ opcodes
│ │ │ ├── PacketIds.cs ← Opcode constants
│ │ │ └── HandlerRegistry.cs ← Opcode → handler mapping
│ │ ├── ECS/ ← Entity Component System
│ │ │ ├── Components/ ← Position, Health, Combat, etc.
│ │ │ ├── Systems/ ← Movement, Combat, Spawn systems
│ │ │ └── World.cs ← Entity world manager
│ │ ├── Math/ ← Vector3, Region, geometry
│ │ ├── Configuration/ ← INI config loader might be changed to sql table
│ │ ├── Logging/ ← Serilog setup need help should i use this method for logging or should i chamge it to reduce the load and prevent lagging and bugs
│ │ └── Extensions/ ← Helper extensions
│ │
│ ├── Ather.Database/ ← Database layer
│ │ ├── Entities/ ← EF Core entities (need an expert opinion on this should i use EF or another method
│ │ │ ├── Ather_Account/ ← TB_User, TB_UserLog, etc.
│ │ │ ├── Ather_Shard/ ← _Char, _Items, _Inventory, etc.
│ │ │ └── Ather_Log/ ← _LogEventChar, etc.
│ │ ├── Contexts/ ← DbContext classes
│ │ │ ├── AccountContext.cs
│ │ │ ├── ShardContext.cs
│ │ │ └── LogContext.cs
│ │ ├── Repositories/ ← Dapper repositories for hot paths
│ │ ├── Migrations/ ← EF Core migrations
│ │ └── StoredProcedures/ ← Wrap vSRO stored procedures
│ │
│ ├── Ather.Gateway/ ← Login server
│ │ ├── GatewayServer.cs ← TCP server on port 15779
│ │ ├── Handlers/
│ │ │ ├── PatchHandler.cs ←
│ │ │ ├── NoticeHandler.cs ←
│ │ │ ├── ShardListHandler.cs←
│ │ │ ├── LoginHandler.cs ←
│ │ │ └── PingHandler.cs ←
│ │ └── Packets/ ← Gateway packet structures
│ │
│ ├── Ather.Agent/ ← In-game auth + character server
│ │ ├── AgentServer.cs ← TCP server on port 15884
│ │ ├── Handlers/
│ │ │ ├── AuthHandler.cs
│ │ │ ├── CharacterListHandler.cs ←
│ │ │ ├── CharacterCreateHandler.cs ←
│ │ │ ├── CharacterDeleteHandler.cs
│ │ │ ├── EnterWorldHandler.cs ←
│ │ │ └── LogoutHandler.cs ←
│ │ └── Packets/
│ │
│ ├── Ather.Game/ ← Game world server
│ │ ├── GameServer.cs ← Game logic (runs in AgentServer process)
│ │ ├── World/ ← World management
│ │ │ ├── WorldManager.cs ← All zones, entities
│ │ │ ├── Zone.cs ← Single zone (region)
│ │ │ └── SectorGrid.cs ← vSRO region/sector system
│ │ ├── Systems/ ← ECS systems
│ │ │ ├── MovementSystem.cs ← movement
│ │ │ ├── SpawnSystem.cs ← entity spawn
│ │ │ ├── CombatSystem.cs ← combat
│ │ │ ├── InventorySystem.cs ← items
│ │ │ ├── SkillSystem.cs ← skills
│ │ │ ├── ChatSystem.cs ← chat
│ │ │ ├── NpcShopSystem.cs ← shops
│ │ │ ├── QuestSystem.cs ← quests
│ │ │ └── GuildSystem.cs ← guilds
│ │ ├── Handlers/ ← Game packet handlers
│ │ └── Data/ ← Game data loaders
│ │ ├── ItemDataLoader.cs ← Parse ItemData_*.txt
│ │ ├── CharacterDataLoader.cs ← Parse CharacterData_*.txt
│ │ ├── SkillDataLoader.cs ← Parse SkillData_*.txt
│ │ └── RefDataLoader.cs ← Parse reference data
│ │
│ ├── Ather.Certification/ ← Module certification server
│ │ ├── CertificationServer.cs ← TCP server
│ │ └── Handlers/
│ │ ├── IdentificationHandler.cs ←
│ │ └── CertRequestHandler.cs ←
│ │
│ ├── Ather.GlobalManager/ ← Internal coordination
│ │ └── GlobalManagerServer.cs
│ │
│ ├── Ather.DownloadServer/ ← Patch file server
│ │ └── DownloadServer.cs
│ │
│ ├── Ather.SMC/ ← Web admin panel
│ │ ├── Controllers/
│ │ │ ├── AccountController.cs ← Manage accounts
│ │ │ ├── PlayerController.cs ← View/manage players
│ │ │ ├── ServerController.cs ← Start/stop servers
│ │ │ └── StatsController.cs ← Live statistics
│ │ ├── Views/ ← Razor views
│ │ └── Ather.SMC.csproj
│ │
│ ├── Ather.Security/ ← Anti-cheat
│ │ ├── PacketValidator.cs ← Size/rate validation
│ │ ├── SpeedHackDetector.cs ← Movement validation
│ │ ├── CheatToolDetector.cs ← Known cheat signatures
│ │ └── IpLimiter.cs ← Connection limiting
│ │
│ └── Ather.GmCommands/ ← GM command system
│ ├── CommandProcessor.cs ← Parse /commands from chat
│ └── Commands/
│ ├── SpawnCommand.cs ← /spawn <mobId> <count>
│ ├── ItemCommand.cs ← /item <itemId> <qty>
│ ├── LevelCommand.cs ← /level <level>
│ ├── TeleportCommand.cs ← /teleport <x> <y> <z>
│ ├── BanCommand.cs ← /ban <player>
│ └── AnnounceCommand.cs ← /announce <message>
│
├── tests/
│ ├── Ather.Tests.Unit/ ← Unit tests
│ │ ├── Security/ ← Handshake, Blowfish tests
│ │ ├── Packets/ ← Packet format tests
│ │ └── Handlers/ ← Handler logic tests
│ │
│ └── Ather.Tests.Integration/ ← Integration tests
│ └── ClientlessBot/ ← Automated client that connects + plays
│
├── tools/
│ ├── PacketCapture/ ← Log all packets for analysis
│ ├── DatabaseImporter/ ← Import .bak files to SQLite/SQL Server
│ └── RefDataParser/ ← Parse .txt reference data
│
├── data/ ← Game data files
│ ├── SR_GameRefData/ ← From TestIn (103 .txt files)
│ ├── config/ ← INI config files
│ │ ├── server.ini ← Server topology
│ │ ├── common.ini ← Game settings (rates, caps)
│ │ ├── sql.ini ← Database connection
│ │ └── smc.ini ← Admin panel