Skip to content

Latest commit

 

History

History
175 lines (136 loc) · 5.19 KB

File metadata and controls

175 lines (136 loc) · 5.19 KB

🔧 Correzioni Applicate alla Mod Solar Panels

🐛 Problema Originale

AsyncErr: Lua: Runtime error from mod 'solar_panels' in callback environment_Step(): 
/usr/share/luanti/builtin/game/item.lua:746: attempt to index local 'pos' (a nil value)

Causa: Il sistema globalstep tentava di accedere a panel_data.pos che poteva essere nil o non valido.


Correzioni Applicate

1. energy_system.lua - MAGGIORI CORREZIONI

Controlli di Sicurezza Aggiunti:

// PRIMA (problematico):
for pos_hash, panel_data in pairs(solar_panels) do
    local pos = panel_data.pos
    local node = minetest.get_node(pos)  -- ERRORE SE pos È NIL
// DOPO (sicuro):
for pos_hash, panel_data in pairs(solar_panels) do
    if not panel_data or not panel_data.pos or 
       not panel_data.pos.x or not panel_data.pos.y or not panel_data.pos.z then
        table.insert(panels_to_remove, pos_hash)
    else
        local pos = panel_data.pos
        local node = minetest.get_node(pos)  -- SICURO

Funzioni Sicure Aggiunte:

  • add_solar_panel(pos, is_advanced) - Aggiunge pannelli con validazione
  • remove_solar_panel(pos) - Rimuove pannelli in sicurezza
  • cleanup_orphaned_panels() - Pulisce dati corrotti all'avvio
  • ✅ Lista panels_to_remove per evitare modifica durante iterazione

Miglioramenti Sistema Lampade:

  • ✅ Controlli su player:get_pos() prima dell'uso
  • ✅ Validazione player_pos prima di find_nodes_in_area
  • ✅ Controlli su ogni pos nelle lampade trovate

2. nodes.lua - CORREZIONI CALLBACK

on_construct Sicuri:

// PRIMA:
on_construct = function(pos)
    local pos_hash = minetest.hash_node_position(pos)
    solar_panels[pos_hash] = {pos = pos, active = false}
// DOPO:
on_construct = function(pos)
    if not pos or not pos.x or not pos.y or not pos.z then
        minetest.log("error", "[Solar Panels] on_construct chiamato con posizione non valida")
        return
    end
    add_solar_panel(pos, false)  -- Usa funzione sicura

on_destruct Sicuri:

  • ✅ Controlli validità pos prima di procedere
  • ✅ Uso di remove_solar_panel() invece di accesso diretto
  • ✅ Logging errori per debug

Controlli GUI:

  • ✅ Validazione meta prima dell'uso
  • ✅ Controlli su clicker in on_rightclick
  • ✅ Fallback per API non ancora caricata

3. api.lua - ROBUSTEZZA API

Protezione Funzioni:

// PRIMA:
function solar_panels.api.get_solar_power_at(pos)
    local node = minetest.get_node(adj_pos)  -- Poteva crashare
// DOPO:
function solar_panels.api.get_solar_power_at(pos)
    local success, node = pcall(minetest.get_node, adj_pos)
    if success and node and node.name then
        -- Uso sicuro

Controlli Parametri:

  • ✅ Validazione pos e coordinate numeriche
  • ✅ Controlli su nodename nelle registrazioni
  • ✅ Verifiche callback sia funzione valida
  • pcall per operazioni che possono fallire

Funzioni Diagnostiche:

  • health_check() - Verifica stato sistema
  • ✅ Logging migliorato per debug
  • ✅ Gestione errori graceful

🚀 Nuove Funzionalità Aggiunte

Comandi Admin:

/solar_debug     # Informazioni debug complete
/solar_cleanup   # Pulizia manuale pannelli orfani

Sistema Auto-Cleanup:

  • 🧹 Pulizia automatica all'avvio (dopo 1 secondo)
  • 🧹 Rimozione pannelli con dati corrotti durante runtime
  • 🧹 Logging delle operazioni di pulizia

Miglioramenti Robustezza:

  • 🛡️ Tutti i globalstep protetti da controlli nil
  • 🛡️ Gestione errori con pcall dove necessario
  • 🛡️ Fallback sicuri per API non disponibili
  • 🛡️ Logging esteso per debugging

📁 File da Sostituire

Sostituisci questi 3 file nella tua mod:

  1. energy_system.lua → Versione corretta con controlli sicurezza
  2. nodes.lua → Versione corretta con callback sicuri
  3. api.lua → Versione corretta con protezioni robuste

Gli altri file (init.lua, mod.conf, crafting.lua) rimangono invariati.


🔍 Come Testare

  1. Sostituisci i 3 file corretti
  2. Riavvia il mondo - dovrebbe caricare senza errori
  3. Piazza alcuni pannelli solari
  4. Testa comandi debug:
    /solar_debug     # Mostra statistiche
    /solar_cleanup   # Forza pulizia
    
  5. Verifica funzionamento:
    • Pannelli si attivano di giorno
    • Batterie si ricaricano
    • Lampade si accendono di notte

📋 Checklist Risoluzione

  • Errore pos nil: Risolto con controlli validazione
  • Globalstep crash: Protetto con try-catch logic
  • Dati corrotti: Sistema auto-cleanup implementato
  • API instabile: Controlli robustezza aggiunti
  • Debug tools: Comandi admin per diagnostica
  • Logging: Sistema esteso per troubleshooting

⚠️ Note Importanti

  1. Backup: Fai backup del mondo prima di applicare le correzioni
  2. Texture: Le correzioni non influenzano le texture - continua a usarle
  3. Compatibilità: Tutte le funzionalità originali preservate
  4. Performance: Miglioramenti nell'efficienza del sistema

La mod ora dovrebbe funzionare stabilmente senza crash! 🌞⚡