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.
// 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- ✅
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_removeper evitare modifica durante iterazione
- ✅ Controlli su
player:get_pos()prima dell'uso - ✅ Validazione
player_posprima difind_nodes_in_area - ✅ Controlli su ogni
posnelle lampade trovate
// 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- ✅ Controlli validità
posprima di procedere - ✅ Uso di
remove_solar_panel()invece di accesso diretto - ✅ Logging errori per debug
- ✅ Validazione
metaprima dell'uso - ✅ Controlli su
clickerinon_rightclick - ✅ Fallback per API non ancora caricata
// 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- ✅ Validazione
pose coordinate numeriche - ✅ Controlli su
nodenamenelle registrazioni - ✅ Verifiche
callbacksia funzione valida - ✅
pcallper operazioni che possono fallire
- ✅
health_check()- Verifica stato sistema - ✅ Logging migliorato per debug
- ✅ Gestione errori graceful
/solar_debug # Informazioni debug complete
/solar_cleanup # Pulizia manuale pannelli orfani- 🧹 Pulizia automatica all'avvio (dopo 1 secondo)
- 🧹 Rimozione pannelli con dati corrotti durante runtime
- 🧹 Logging delle operazioni di pulizia
- 🛡️ Tutti i globalstep protetti da controlli nil
- 🛡️ Gestione errori con
pcalldove necessario - 🛡️ Fallback sicuri per API non disponibili
- 🛡️ Logging esteso per debugging
Sostituisci questi 3 file nella tua mod:
energy_system.lua→ Versione corretta con controlli sicurezzanodes.lua→ Versione corretta con callback sicuriapi.lua→ Versione corretta con protezioni robuste
Gli altri file (init.lua, mod.conf, crafting.lua) rimangono invariati.
- Sostituisci i 3 file corretti
- Riavvia il mondo - dovrebbe caricare senza errori
- Piazza alcuni pannelli solari
- Testa comandi debug:
/solar_debug # Mostra statistiche /solar_cleanup # Forza pulizia - Verifica funzionamento:
- Pannelli si attivano di giorno
- Batterie si ricaricano
- Lampade si accendono di notte
- ✅ 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
- Backup: Fai backup del mondo prima di applicare le correzioni
- Texture: Le correzioni non influenzano le texture - continua a usarle
- Compatibilità: Tutte le funzionalità originali preservate
- Performance: Miglioramenti nell'efficienza del sistema
La mod ora dovrebbe funzionare stabilmente senza crash! 🌞⚡