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
}
// 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...)
}
// 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...)
}
// 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...)
}
@ -174,7 +173,7 @@ func NewMySQL(dsn string) (*Database, error) {
}
// 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(`
SELECT id, name, file, description, motd, min_level, max_level,
min_version, xp_modifier, city_zone, weather_allowed,
@ -187,10 +186,10 @@ func (d *Database) GetZones() ([]map[string]interface{}, error) {
}
defer rows.Close()
var zones []map[string]interface{}
var zones []map[string]any
for rows.Next() {
zone := make(map[string]interface{})
zone := make(map[string]any)
var id, minLevel, maxLevel, minVersion int
var name, file, description, motd string
var xpModifier, safeX, safeY, safeZ, safeHeading float64

View File

@ -43,8 +43,8 @@ type WorldInterface interface {
// DatabaseInterface defines database operations needed by packet handlers
type DatabaseInterface interface {
GetCharacter(characterID int32) (map[string]interface{}, error)
SaveCharacter(characterID int32, data map[string]interface{}) error
GetCharacter(characterID int32) (map[string]any, error)
SaveCharacter(characterID int32, data map[string]any) error
// 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)
// Zone management
func (d *Database) GetZones() ([]map[string]interface{}, error)
func (d *Database) GetZones() ([]map[string]any, error)
// Character persistence (planned)
func (d *Database) SaveCharacter(character *Character) error

View File

@ -80,7 +80,7 @@ const (
type AchievementEvent struct {
Type AchievementEventType
CharacterID int32
Data map[string]interface{}
Data map[string]any
Timestamp int64
}
@ -355,7 +355,7 @@ func (aeh *AchievementEventHandler) handleGenericEvent(event *AchievementEvent,
}
// 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 {
return // Achievement system not initialized
}
@ -379,7 +379,7 @@ func (w *World) TriggerAchievementEvent(eventType AchievementEventType, characte
// OnNPCKill triggers an NPC kill achievement event
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,
"level": npcLevel,
})
@ -387,21 +387,21 @@ func (w *World) OnNPCKill(characterID int32, npcID int32, npcLevel int32) {
// OnQuestComplete triggers a quest completion achievement event
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,
})
}
// OnLevelGain triggers a level gain achievement event
func (w *World) OnLevelGain(characterID int32, newLevel int32) {
w.TriggerAchievementEvent(EventLevelGain, characterID, map[string]interface{}{
w.TriggerAchievementEvent(EventLevelGain, characterID, map[string]any{
"level": newLevel,
})
}
// OnItemDiscovered triggers an item discovery achievement event
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,
"rarity": rarity,
})
@ -409,7 +409,7 @@ func (w *World) OnItemDiscovered(characterID int32, itemID int32, rarity string)
// OnZoneDiscovered triggers a zone discovery achievement event
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,
})
}

View File

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

View File

@ -25,7 +25,7 @@ type Client struct {
Player *entity.Entity
// Connection information
Connection interface{} // TODO: Will be *udp.Connection
Connection any // TODO: Will be *udp.Connection
IPAddress string
ConnectedTime 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
func (im *ItemManager) GetStatistics() map[string]interface{} {
func (im *ItemManager) GetStatistics() map[string]any {
im.mutex.RLock()
defer im.mutex.RUnlock()
@ -284,7 +284,7 @@ func (im *ItemManager) GetStatistics() map[string]interface{} {
totalWorldDrops += len(drops)
}
result := make(map[string]interface{})
result := make(map[string]any)
for k, v := range systemStats {
result[k] = v
}

View File

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

View File

@ -304,14 +304,14 @@ func (w *World) SendCharacterAchievements(client *Client) {
// Get all achievements with player progress
allAchievements := w.achievementMgr.masterList.GetAllAchievements()
characterData := make(map[string]interface{})
characterData := make(map[string]any)
for achievementID, achievement := range allAchievements {
progress := w.achievementMgr.GetPlayerProgress(characterID, achievementID)
completed := w.achievementMgr.IsPlayerCompleted(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,
"title": achievement.Title,
"description": achievement.UncompletedText,
@ -564,7 +564,7 @@ func (w *World) SendNPCInfo(client *Client, npcID int32) {
}
// 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
// This would send updates to all clients in range of the NPC
@ -604,13 +604,13 @@ type WorldDatabaseAdapter struct {
}
// 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
return nil, fmt.Errorf("character loading not yet implemented")
}
// 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
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
func (w *World) SendItemDetails(client *Client, item interface{}) {
func (w *World) SendItemDetails(client *Client, item any) {
if w.itemMgr == nil {
return
}
@ -947,7 +947,7 @@ func (w *World) SendPlayerInventory(client *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 {
return
}
@ -961,7 +961,7 @@ func (w *World) SendItemUpdate(client *Client, updateType string, itemData map[s
}
// 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)
fmt.Printf("Broadcasting item update from player %d: %s - %v\n",

View File

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

View File

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