interface to any

This commit is contained in:
Sky Johnson 2025-08-07 11:21:56 -05:00
parent 41f80008c9
commit 5cb4b5b56c
11 changed files with 808 additions and 809 deletions

View File

@ -101,19 +101,18 @@ func (d *Database) GetPool() *sqlitex.Pool {
return d.pool return d.pool
} }
// Query executes a query that returns rows // Query executes a query that returns rows
func (d *Database) Query(query string, args ...interface{}) (*sql.Rows, error) { func (d *Database) Query(query string, args ...any) (*sql.Rows, error) {
return d.db.Query(query, args...) return d.db.Query(query, args...)
} }
// QueryRow executes a query that returns a single row // QueryRow executes a query that returns a single row
func (d *Database) QueryRow(query string, args ...interface{}) *sql.Row { func (d *Database) QueryRow(query string, args ...any) *sql.Row {
return d.db.QueryRow(query, args...) return d.db.QueryRow(query, args...)
} }
// Exec executes a query that doesn't return rows // Exec executes a query that doesn't return rows
func (d *Database) Exec(query string, args ...interface{}) (sql.Result, error) { func (d *Database) Exec(query string, args ...any) (sql.Result, error) {
return d.db.Exec(query, args...) return d.db.Exec(query, args...)
} }
@ -174,7 +173,7 @@ func NewMySQL(dsn string) (*Database, error) {
} }
// GetZones retrieves all zones from the database // GetZones retrieves all zones from the database
func (d *Database) GetZones() ([]map[string]interface{}, error) { func (d *Database) GetZones() ([]map[string]any, error) {
rows, err := d.Query(` rows, err := d.Query(`
SELECT id, name, file, description, motd, min_level, max_level, SELECT id, name, file, description, motd, min_level, max_level,
min_version, xp_modifier, city_zone, weather_allowed, min_version, xp_modifier, city_zone, weather_allowed,
@ -187,10 +186,10 @@ func (d *Database) GetZones() ([]map[string]interface{}, error) {
} }
defer rows.Close() defer rows.Close()
var zones []map[string]interface{} var zones []map[string]any
for rows.Next() { for rows.Next() {
zone := make(map[string]interface{}) zone := make(map[string]any)
var id, minLevel, maxLevel, minVersion int var id, minLevel, maxLevel, minVersion int
var name, file, description, motd string var name, file, description, motd string
var xpModifier, safeX, safeY, safeZ, safeHeading float64 var xpModifier, safeX, safeY, safeZ, safeHeading float64

View File

@ -43,8 +43,8 @@ type WorldInterface interface {
// DatabaseInterface defines database operations needed by packet handlers // DatabaseInterface defines database operations needed by packet handlers
type DatabaseInterface interface { type DatabaseInterface interface {
GetCharacter(characterID int32) (map[string]interface{}, error) GetCharacter(characterID int32) (map[string]any, error)
SaveCharacter(characterID int32, data map[string]interface{}) error SaveCharacter(characterID int32, data map[string]any) error
// Add more database methods as needed // Add more database methods as needed
} }

View File

@ -212,7 +212,7 @@ All server data is persisted to SQLite:
func (d *Database) LoadRules() (map[string]map[string]string, error) func (d *Database) LoadRules() (map[string]map[string]string, error)
// Zone management // Zone management
func (d *Database) GetZones() ([]map[string]interface{}, error) func (d *Database) GetZones() ([]map[string]any, error)
// Character persistence (planned) // Character persistence (planned)
func (d *Database) SaveCharacter(character *Character) error func (d *Database) SaveCharacter(character *Character) error

View File

@ -80,7 +80,7 @@ const (
type AchievementEvent struct { type AchievementEvent struct {
Type AchievementEventType Type AchievementEventType
CharacterID int32 CharacterID int32
Data map[string]interface{} Data map[string]any
Timestamp int64 Timestamp int64
} }
@ -355,7 +355,7 @@ func (aeh *AchievementEventHandler) handleGenericEvent(event *AchievementEvent,
} }
// TriggerEvent is a convenience method for triggering achievement events // TriggerEvent is a convenience method for triggering achievement events
func (w *World) TriggerAchievementEvent(eventType AchievementEventType, characterID int32, data map[string]interface{}) { func (w *World) TriggerAchievementEvent(eventType AchievementEventType, characterID int32, data map[string]any) {
if w.achievementMgr == nil { if w.achievementMgr == nil {
return // Achievement system not initialized return // Achievement system not initialized
} }
@ -379,7 +379,7 @@ func (w *World) TriggerAchievementEvent(eventType AchievementEventType, characte
// OnNPCKill triggers an NPC kill achievement event // OnNPCKill triggers an NPC kill achievement event
func (w *World) OnNPCKill(characterID int32, npcID int32, npcLevel int32) { func (w *World) OnNPCKill(characterID int32, npcID int32, npcLevel int32) {
w.TriggerAchievementEvent(EventNPCKill, characterID, map[string]interface{}{ w.TriggerAchievementEvent(EventNPCKill, characterID, map[string]any{
"npc_id": npcID, "npc_id": npcID,
"level": npcLevel, "level": npcLevel,
}) })
@ -387,21 +387,21 @@ func (w *World) OnNPCKill(characterID int32, npcID int32, npcLevel int32) {
// OnQuestComplete triggers a quest completion achievement event // OnQuestComplete triggers a quest completion achievement event
func (w *World) OnQuestComplete(characterID int32, questID int32) { func (w *World) OnQuestComplete(characterID int32, questID int32) {
w.TriggerAchievementEvent(EventQuestCompleted, characterID, map[string]interface{}{ w.TriggerAchievementEvent(EventQuestCompleted, characterID, map[string]any{
"quest_id": questID, "quest_id": questID,
}) })
} }
// OnLevelGain triggers a level gain achievement event // OnLevelGain triggers a level gain achievement event
func (w *World) OnLevelGain(characterID int32, newLevel int32) { func (w *World) OnLevelGain(characterID int32, newLevel int32) {
w.TriggerAchievementEvent(EventLevelGain, characterID, map[string]interface{}{ w.TriggerAchievementEvent(EventLevelGain, characterID, map[string]any{
"level": newLevel, "level": newLevel,
}) })
} }
// OnItemDiscovered triggers an item discovery achievement event // OnItemDiscovered triggers an item discovery achievement event
func (w *World) OnItemDiscovered(characterID int32, itemID int32, rarity string) { func (w *World) OnItemDiscovered(characterID int32, itemID int32, rarity string) {
w.TriggerAchievementEvent(EventItemDiscovered, characterID, map[string]interface{}{ w.TriggerAchievementEvent(EventItemDiscovered, characterID, map[string]any{
"item_id": itemID, "item_id": itemID,
"rarity": rarity, "rarity": rarity,
}) })
@ -409,7 +409,7 @@ func (w *World) OnItemDiscovered(characterID int32, itemID int32, rarity string)
// OnZoneDiscovered triggers a zone discovery achievement event // OnZoneDiscovered triggers a zone discovery achievement event
func (w *World) OnZoneDiscovered(characterID int32, zoneID int32) { func (w *World) OnZoneDiscovered(characterID int32, zoneID int32) {
w.TriggerAchievementEvent(EventZoneDiscovered, characterID, map[string]interface{}{ w.TriggerAchievementEvent(EventZoneDiscovered, characterID, map[string]any{
"zone_id": zoneID, "zone_id": zoneID,
}) })
} }

View File

@ -289,11 +289,11 @@ func (am *AchievementManager) RemovePlayerManager(characterID int32) {
} }
// GetStatistics returns achievement system statistics // GetStatistics returns achievement system statistics
func (am *AchievementManager) GetStatistics() map[string]interface{} { func (am *AchievementManager) GetStatistics() map[string]any {
am.mutex.RLock() am.mutex.RLock()
defer am.mutex.RUnlock() defer am.mutex.RUnlock()
stats := map[string]interface{}{ stats := map[string]any{
"total_achievements": am.masterList.Size(), "total_achievements": am.masterList.Size(),
"online_players": len(am.playerManagers), "online_players": len(am.playerManagers),
"categories": am.masterList.GetCategories(), "categories": am.masterList.GetCategories(),

View File

@ -25,7 +25,7 @@ type Client struct {
Player *entity.Entity Player *entity.Entity
// Connection information // Connection information
Connection interface{} // TODO: Will be *udp.Connection Connection any // TODO: Will be *udp.Connection
IPAddress string IPAddress string
ConnectedTime time.Time ConnectedTime time.Time
LastActivity time.Time LastActivity time.Time

View File

@ -272,7 +272,7 @@ func (im *ItemManager) SearchItems(name string, maxResults int32) []*items.Item
} }
// GetStatistics returns item system statistics // GetStatistics returns item system statistics
func (im *ItemManager) GetStatistics() map[string]interface{} { func (im *ItemManager) GetStatistics() map[string]any {
im.mutex.RLock() im.mutex.RLock()
defer im.mutex.RUnlock() defer im.mutex.RUnlock()
@ -284,7 +284,7 @@ func (im *ItemManager) GetStatistics() map[string]interface{} {
totalWorldDrops += len(drops) totalWorldDrops += len(drops)
} }
result := make(map[string]interface{}) result := make(map[string]any)
for k, v := range systemStats { for k, v := range systemStats {
result[k] = v result[k] = v
} }

View File

@ -4,9 +4,9 @@ import (
"fmt" "fmt"
"sync" "sync"
"eq2emu/internal/database"
"eq2emu/internal/npc" "eq2emu/internal/npc"
"eq2emu/internal/npc/ai" "eq2emu/internal/npc/ai"
"eq2emu/internal/database"
) )
// NPCManager manages NPCs for the world server // NPCManager manages NPCs for the world server
@ -412,7 +412,7 @@ func (nm *NPCManager) RemoveNPCFromZone(zoneID int32, npcID int32) {
} }
// GetStatistics returns NPC system statistics // GetStatistics returns NPC system statistics
func (nm *NPCManager) GetStatistics() map[string]interface{} { func (nm *NPCManager) GetStatistics() map[string]any {
nm.mutex.RLock() nm.mutex.RLock()
defer nm.mutex.RUnlock() defer nm.mutex.RUnlock()
@ -423,7 +423,7 @@ func (nm *NPCManager) GetStatistics() map[string]interface{} {
totalZones := len(nm.npcsByZone) totalZones := len(nm.npcsByZone)
totalInCombat := len(nm.activeCombat) totalInCombat := len(nm.activeCombat)
result := map[string]interface{}{ result := map[string]any{
"total_npcs": stats.TotalNPCs, "total_npcs": stats.TotalNPCs,
"npcs_in_combat": stats.NPCsInCombat, "npcs_in_combat": stats.NPCsInCombat,
"npcs_with_spells": stats.NPCsWithSpells, "npcs_with_spells": stats.NPCsWithSpells,

View File

@ -304,14 +304,14 @@ func (w *World) SendCharacterAchievements(client *Client) {
// Get all achievements with player progress // Get all achievements with player progress
allAchievements := w.achievementMgr.masterList.GetAllAchievements() allAchievements := w.achievementMgr.masterList.GetAllAchievements()
characterData := make(map[string]interface{}) characterData := make(map[string]any)
for achievementID, achievement := range allAchievements { for achievementID, achievement := range allAchievements {
progress := w.achievementMgr.GetPlayerProgress(characterID, achievementID) progress := w.achievementMgr.GetPlayerProgress(characterID, achievementID)
completed := w.achievementMgr.IsPlayerCompleted(characterID, achievementID) completed := w.achievementMgr.IsPlayerCompleted(characterID, achievementID)
percentage := w.achievementMgr.GetCompletionPercentage(characterID, achievementID) percentage := w.achievementMgr.GetCompletionPercentage(characterID, achievementID)
characterData[fmt.Sprintf("achievement_%d", achievementID)] = map[string]interface{}{ characterData[fmt.Sprintf("achievement_%d", achievementID)] = map[string]any{
"id": achievementID, "id": achievementID,
"title": achievement.Title, "title": achievement.Title,
"description": achievement.UncompletedText, "description": achievement.UncompletedText,
@ -564,7 +564,7 @@ func (w *World) SendNPCInfo(client *Client, npcID int32) {
} }
// SendNPCUpdate sends NPC update to clients in range // SendNPCUpdate sends NPC update to clients in range
func (w *World) SendNPCUpdate(npcID int32, updateType string, data map[string]interface{}) { func (w *World) SendNPCUpdate(npcID int32, updateType string, data map[string]any) {
// TODO: Implement NPC update broadcasting // TODO: Implement NPC update broadcasting
// This would send updates to all clients in range of the NPC // This would send updates to all clients in range of the NPC
@ -604,13 +604,13 @@ type WorldDatabaseAdapter struct {
} }
// GetCharacter implements packets.DatabaseInterface // GetCharacter implements packets.DatabaseInterface
func (wda *WorldDatabaseAdapter) GetCharacter(characterID int32) (map[string]interface{}, error) { func (wda *WorldDatabaseAdapter) GetCharacter(characterID int32) (map[string]any, error) {
// TODO: Implement character loading from database // TODO: Implement character loading from database
return nil, fmt.Errorf("character loading not yet implemented") return nil, fmt.Errorf("character loading not yet implemented")
} }
// SaveCharacter implements packets.DatabaseInterface // SaveCharacter implements packets.DatabaseInterface
func (wda *WorldDatabaseAdapter) SaveCharacter(characterID int32, data map[string]interface{}) error { func (wda *WorldDatabaseAdapter) SaveCharacter(characterID int32, data map[string]any) error {
// TODO: Implement character saving to database // TODO: Implement character saving to database
return fmt.Errorf("character saving not yet implemented") return fmt.Errorf("character saving not yet implemented")
} }
@ -902,7 +902,7 @@ func (w *World) HandleItemUpdate(ctx *packets.PacketContext, packet *packets.Pac
} }
// SendItemDetails sends detailed item information to a client // SendItemDetails sends detailed item information to a client
func (w *World) SendItemDetails(client *Client, item interface{}) { func (w *World) SendItemDetails(client *Client, item any) {
if w.itemMgr == nil { if w.itemMgr == nil {
return return
} }
@ -947,7 +947,7 @@ func (w *World) SendPlayerInventory(client *Client) {
} }
// SendItemUpdate sends item update to client // SendItemUpdate sends item update to client
func (w *World) SendItemUpdate(client *Client, updateType string, itemData map[string]interface{}) { func (w *World) SendItemUpdate(client *Client, updateType string, itemData map[string]any) {
if w.itemMgr == nil { if w.itemMgr == nil {
return return
} }
@ -961,7 +961,7 @@ func (w *World) SendItemUpdate(client *Client, updateType string, itemData map[s
} }
// BroadcastItemUpdate broadcasts item updates to nearby players // BroadcastItemUpdate broadcasts item updates to nearby players
func (w *World) BroadcastItemUpdate(sourcePlayerID uint32, updateType string, itemData map[string]interface{}) { func (w *World) BroadcastItemUpdate(sourcePlayerID uint32, updateType string, itemData map[string]any) {
// TODO: Implement item update broadcasting (for things like equipment changes visible to others) // TODO: Implement item update broadcasting (for things like equipment changes visible to others)
fmt.Printf("Broadcasting item update from player %d: %s - %v\n", fmt.Printf("Broadcasting item update from player %d: %s - %v\n",

View File

@ -4,8 +4,8 @@ import (
"fmt" "fmt"
"sync" "sync"
"eq2emu/internal/titles"
"eq2emu/internal/database" "eq2emu/internal/database"
"eq2emu/internal/titles"
) )
// TitleManager manages titles for the world server // TitleManager manages titles for the world server
@ -198,7 +198,7 @@ func (tm *TitleManager) ProcessAchievementCompletion(playerID int32, achievement
} }
// GetStatistics returns title system statistics // GetStatistics returns title system statistics
func (tm *TitleManager) GetStatistics() map[string]interface{} { func (tm *TitleManager) GetStatistics() map[string]any {
tm.mutex.RLock() tm.mutex.RLock()
defer tm.mutex.RUnlock() defer tm.mutex.RUnlock()
@ -206,7 +206,7 @@ func (tm *TitleManager) GetStatistics() map[string]interface{} {
titleManagerStats := tm.titleManager.GetStatistics() titleManagerStats := tm.titleManager.GetStatistics()
// Combine with our own statistics // Combine with our own statistics
stats := map[string]interface{}{ stats := map[string]any{
"total_titles": tm.titleManager.GetMasterList().GetTitleCount(), "total_titles": tm.titleManager.GetMasterList().GetTitleCount(),
} }

View File

@ -49,10 +49,10 @@ type World struct {
itemMgr *ItemManager itemMgr *ItemManager
// Master lists (singletons) // Master lists (singletons)
masterSpells interface{} // TODO: implement spell manager masterSpells any // TODO: implement spell manager
masterQuests interface{} // TODO: implement quest manager masterQuests any // TODO: implement quest manager
masterSkills interface{} // TODO: implement skill manager masterSkills any // TODO: implement skill manager
masterFactions interface{} // TODO: implement faction manager masterFactions any // TODO: implement faction manager
// Server statistics // Server statistics
stats *ServerStatistics stats *ServerStatistics