From 693dde04e34a9c415802a056e6e6ff93fbd836df Mon Sep 17 00:00:00 2001 From: Arthur Ice Date: Wed, 20 Aug 2014 17:16:30 -0700 Subject: [PATCH] GetZoneCFG converted to QueryDatabase --- zone/zonedb.cpp | 182 +++++++++++++++++++++++------------------------- 1 file changed, 88 insertions(+), 94 deletions(-) diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index d2fd1f8e5..cba20fdcc 100644 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -93,103 +93,97 @@ bool ZoneDatabase::SaveZoneCFG(uint32 zoneid, uint16 instance_id, NewZone_Struct } bool ZoneDatabase::GetZoneCFG(uint32 zoneid, uint16 instance_id, NewZone_Struct *zone_data, bool &can_bind, bool &can_combat, bool &can_levitate, bool &can_castoutdoor, bool &is_city, bool &is_hotzone, bool &allow_mercs, uint8 &zone_type, int &ruleset, char **map_filename) { - char errbuf[MYSQL_ERRMSG_SIZE]; - char *query = 0; - MYSQL_RES *result; - MYSQL_ROW row; - int i=0; - int b=0; - bool good = false; + *map_filename = new char[100]; - if (RunQuery(query, MakeAnyLenString(&query, "SELECT ztype," - "fog_red,fog_green,fog_blue,fog_minclip,fog_maxclip," - "fog_red2,fog_green2,fog_blue2,fog_minclip2,fog_maxclip2," - "fog_red3,fog_green3,fog_blue3,fog_minclip3,fog_maxclip3," - "fog_red4,fog_green4,fog_blue4,fog_minclip4,fog_maxclip4,fog_density," - "sky,zone_exp_multiplier,safe_x,safe_y,safe_z,underworld," - "minclip,maxclip,time_type,canbind,cancombat,canlevitate," - "castoutdoor,hotzone,ruleset,suspendbuffs,map_file_name,short_name," - "rain_chance1,rain_chance2,rain_chance3,rain_chance4," - "rain_duration1,rain_duration2,rain_duration3,rain_duration4," - "snow_chance1,snow_chance2,snow_chance3,snow_chance4," - "snow_duration1,snow_duration2,snow_duration3,snow_duration4" - " from zone where zoneidnumber=%i and version=%i",zoneid, instance_id), errbuf, &result)) { - safe_delete_array(query); - row = mysql_fetch_row(result); - if(row) - { - int r = 0; - memset(zone_data,0,sizeof(NewZone_Struct)); - zone_data->ztype=atoi(row[r++]); - - for(i=0;i<4;i++){ - zone_data->fog_red[i]=atoi(row[r++]); - zone_data->fog_green[i]=atoi(row[r++]); - zone_data->fog_blue[i]=atoi(row[r++]); - zone_data->fog_minclip[i]=atof(row[r++]); - zone_data->fog_maxclip[i]=atof(row[r++]); - } - - zone_data->fog_density = atof(row[r++]);; - zone_data->sky=atoi(row[r++]); - zone_data->zone_exp_multiplier=atof(row[r++]); - zone_data->safe_x=atof(row[r++]); - zone_data->safe_y=atof(row[r++]); - zone_data->safe_z=atof(row[r++]); - zone_data->underworld=atof(row[r++]); - zone_data->minclip=atof(row[r++]); - zone_data->maxclip=atof(row[r++]); - - zone_data->time_type=atoi(row[r++]); -//not in the DB yet: - zone_data->gravity = 0.4; - - b = atoi(row[r++]); - can_bind = b==0?false:true; - is_city = b==2?true:false; - can_combat = atoi(row[r++])==0?false:true; - can_levitate = atoi(row[r++])==0?false:true; - can_castoutdoor = atoi(row[r++])==0?false:true; - is_hotzone = atoi(row[r++])==0?false:true; - allow_mercs = true; - zone_type = zone_data->ztype; - ruleset = atoi(row[r++]); - zone_data->SuspendBuffs = atoi(row[r++]); - char *file = row[r++]; - if(file) - { - strcpy(*map_filename, file); - } - else - { - strcpy(*map_filename, row[r++]); - } - for(i=0;i<4;i++){ - zone_data->rain_chance[i]=atoi(row[r++]); - } - for(i=0;i<4;i++){ - zone_data->rain_duration[i]=atoi(row[r++]); - } - for(i=0;i<4;i++){ - zone_data->snow_chance[i]=atoi(row[r++]); - } - for(i=0;i<4;i++){ - zone_data->snow_duration[i]=atof(row[r++]); - } - good = true; - } - mysql_free_result(result); - } - else - { - LogFile->write(EQEMuLog::Error, "Error in GetZoneCFG query %s: %s", query, errbuf); - strcpy(*map_filename, "default"); - } - safe_delete_array(query); - zone_data->zone_id = zoneid; - return(good); + std::string query = StringFormat("SELECT ztype, fog_red, fog_green, fog_blue, fog_minclip, fog_maxclip, " // 5 + "fog_red2, fog_green2, fog_blue2, fog_minclip2, fog_maxclip2, " // 5 + "fog_red3, fog_green3, fog_blue3, fog_minclip3, fog_maxclip3, " // 5 + "fog_red4, fog_green4, fog_blue4, fog_minclip4, fog_maxclip4, " // 5 + "fog_density, sky, zone_exp_multiplier, safe_x, safe_y, safe_z, underworld, " // 7 + "minclip, maxclip, time_type, canbind, cancombat, canlevitate, " // 6 + "castoutdoor, hotzone, ruleset, suspendbuffs, map_file_name, short_name, " // 6 + "rain_chance1, rain_chance2, rain_chance3, rain_chance4, " // 4 + "rain_duration1, rain_duration2, rain_duration3, rain_duration4, " // 4 + "snow_chance1, snow_chance2, snow_chance3, snow_chance4, " // 4 + "snow_duration1, snow_duration2, snow_duration3, snow_duration4 " // 4 + "FROM zone WHERE zoneidnumber = %i AND version = %i", zoneid, instance_id); + auto results = QueryDatabase(query); + if (!results.Success()) { + LogFile->write(EQEMuLog::Error, "Error in GetZoneCFG query %s: %s", query.c_str(), results.ErrorMessage().c_str()); + strcpy(*map_filename, "default"); + return false; + } + + if (results.RowCount() == 0) { + strcpy(*map_filename, "default"); + return false; + } + + auto row = results.begin(); + + memset(zone_data, 0, sizeof(NewZone_Struct)); + zone_data->ztype = atoi(row[0]); + zone_type = zone_data->ztype; + + int index; + for(index = 0; index < 4; index++) { + zone_data->fog_red[index]=atoi(row[1 + index * 5]); + zone_data->fog_green[index]=atoi(row[2 + index * 5]); + zone_data->fog_blue[index]=atoi(row[3 + index * 5]); + zone_data->fog_minclip[index]=atof(row[4 + index * 5]); + zone_data->fog_maxclip[index]=atof(row[5 + index * 5]); + } + + zone_data->fog_density = atof(row[22]); + zone_data->sky=atoi(row[23]); + zone_data->zone_exp_multiplier=atof(row[24]); + zone_data->safe_x=atof(row[25]); + zone_data->safe_y=atof(row[26]); + zone_data->safe_z=atof(row[27]); + zone_data->underworld=atof(row[28]); + zone_data->minclip=atof(row[29]); + zone_data->maxclip=atof(row[30]); + zone_data->time_type=atoi(row[31]); + + //not in the DB yet: + zone_data->gravity = 0.4; + allow_mercs = true; + + int bindable = 0; + bindable = atoi(row[32]); + + can_bind = bindable == 0? false: true; + is_city = bindable == 2? true: false; + can_combat = atoi(row[33]) == 0? false: true; + can_levitate = atoi(row[34]) == 0? false: true; + can_castoutdoor = atoi(row[35]) == 0? false: true; + is_hotzone = atoi(row[36]) == 0? false: true; + + + ruleset = atoi(row[36]); + zone_data->SuspendBuffs = atoi(row[37]); + + char *file = row[38]; + if(file) + strcpy(*map_filename, file); + else + strcpy(*map_filename, row[39]); + + for(index = 0; index < 4; index++) + zone_data->rain_chance[index]=atoi(row[40 + index]); + + for(index = 0; index < 4; index++) + zone_data->rain_duration[index]=atoi(row[44 + index]); + + for(index = 0; index < 4; index++) + zone_data->snow_chance[index]=atoi(row[49 + index]); + + for(index = 0; index < 4; index++) + zone_data->snow_duration[index]=atof(row[53 + index]); + + return true; } //updates or clears the respawn time in the database for the current spawn id