Dynamically T_Magic
#1

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:Confusedtring select_magiclevel_query = boost:Confusedtr(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;
}
```

 



Messages In This Thread
[No subject] - by Scura - 05-30-2024, 03:45 PM
[No subject] - by Scura - 05-30-2024, 05:14 PM
[No subject] - by Scura - 05-30-2024, 05:33 PM
[No subject] - by CyberClaus - 05-30-2024, 06:42 PM
[No subject] - by Scura - 05-30-2024, 08:42 PM
[No subject] - by CyberClaus - 05-31-2024, 02:11 PM

Forum Jump:


Users browsing this thread: 1 Guest(s)