05-30-2024, 03:45 PM
Hi guys!
Since i seen the t_magic system doesn't use the lod file, i was thinking about dynamically load the data from the db when is needed by using a gm command. I've tested many stuff without any result ... the last thing i tried was to reload everything in a temp struct and then just overwrite the original one. Someone have a better idea about how to handle this
```C++
bool CMagicProtoList::ReloadFromDB() {
CDBCmd cmd1;
CDBCmd cmd2;
cmd1.Init(&gserver->m_dbdata);
cmd2.Init(&gserver->m_dbdata);
cmd1.SetQuery("SELECT * FROM t_magic ORDER BY a_index");
if (!cmd1.Open())
return false;
int new_count = cmd1.m_nrecords;
if (new_count) {
// Create a temporary array to hold the new CMagicProto objects
CMagicProto** temp_list = new CMagicProto * [new_count];
int i = 0;
while (cmd1.MoveNext()) {
int index;
char maxlevel;
char type;
char subtype;
char damagetype;
char hittype;
char attribute;
int psp;
int ptp;
int hsp;
int htp;
int bTogel;
cmd1.GetRec("a_index", index);
cmd1.GetRec("a_maxlevel", maxlevel);
cmd1.GetRec("a_type", type);
cmd1.GetRec("a_subtype", subtype);
cmd1.GetRec("a_damagetype", damagetype);
cmd1.GetRec("a_hittype", hittype);
cmd1.GetRec("a_attribute", attribute);
cmd1.GetRec("a_psp", psp);
cmd1.GetRec("a_ptp", ptp);
cmd1.GetRec("a_hsp", hsp);
cmd1.GetRec("a_htp", htp);
cmd1.GetRec("a_togle", bTogel);
std:
tring select_magiclevel_query = boost:
tr(boost::format("SELECT * FROM t_magiclevel WHERE a_index=%d ORDER BY a_level") % index);
cmd2.SetQuery(select_magiclevel_query);
if (!cmd2.Open()) {
for (int k = 0; k < i; ++k) {
delete temp_list[k];
}
delete[] temp_list;
return false;
}
CMagicLevelProto** levelproto = new CMagicLevelProto * [maxlevel];
memset(levelproto, 0, sizeof(*levelproto) * maxlevel);
int j = 0;
while (cmd2.MoveNext()) {
int power;
int hitrate;
cmd2.GetRec("a_power", power);
cmd2.GetRec("a_hitrate", hitrate);
levelproto[j] = new CMagicLevelProto(power, hitrate);
j++;
}
// Create CMagicProto object with provided constructor
temp_list[i] = new CMagicProto(index, maxlevel, type, subtype,
damagetype, hittype, attribute,
psp, ptp, hsp, htp, bTogel,
levelproto);
// Increment i
i++;
}
// No need to delete old CMagicProto objects here
// Just update m_list with the new data
if (m_list)
{
m_list = temp_list;
m_count = new_count;
}
}
else
LOG_ERROR("new_count is null");
return true;
}
```

