Hooks
static bool BeforeCustomMods_getOption_with_string_int(CustomMods* self, string sOption, int defValue, int& result);static void AfterCustomMods_getOption_with_string_int(CustomMods* self, string sOption, int defValue, int& result);static int ReplaceCustomMods_getOption_with_string_int(int (*original)(CustomMods*, string, int), CustomMods* self, string sOption, int defValue);CivRegisterBefore<CivHooks::CustomMods_getOption_with_string_int>(host, &BeforeCustomMods_getOption_with_string_int);CivRegisterAfter<CivHooks::CustomMods_getOption_with_string_int>(host, &AfterCustomMods_getOption_with_string_int);CivRegisterReplace<CivHooks::CustomMods_getOption_with_string_int>(host, &ReplaceCustomMods_getOption_with_string_int);
Code
221int CustomMods::getOption(string sOption, int defValue) {222 if (!m_bInit) {223 const char* szBadPrefix = "MOD_";224225 Database::Results kResults;226 DB.SelectAll(kResults, MOD_DB_TABLE);227228 while (kResults.Step()) {229 const char* szName = kResults.GetText(MOD_DB_COL_NAME);230 const int iDbUpdates = kResults.GetInt(MOD_DB_COL_DBUPDATES);231 int iValue = kResults.GetInt(MOD_DB_COL_VALUE);232233 bool bPrefixError = (strncmp(szName, szBadPrefix, strlen(szBadPrefix)) == 0);234235 if (iValue && iDbUpdates) {236 Database::Results kUpdates;237 char szQuery[512] = {0};238239 // Did the required mods to the database occur? We'll assume they didn't, unless proven otherwise!240 bool bOK = false;241242 sprintf_s(szQuery, "Name='%s' AND Value=1", szName);243 if (DB.SelectWhere(kUpdates, MOD_DB_UPDATES, szQuery)) {244 if (kUpdates.Step()) {245 // BINGO! We have our updates246 bOK = true;247 } else {248 // All is not lost as there could be BOTH xml and sql updates249 sprintf_s(szQuery, "Name='%s_SQL' AND Value=1", szName);250 if (DB.SelectWhere(kUpdates, MOD_DB_UPDATES, szQuery)) {251 if (kUpdates.Step()) {252 sprintf_s(szQuery, "Name='%s_XML' AND Value=1", szName);253 if (DB.SelectWhere(kUpdates, MOD_DB_UPDATES, szQuery)) {254 if (kUpdates.Step()) {255 // BINGO! We have BOTH our updates256 bOK = true;257 }258 }259 }260 }261 }262 }263264 if (bOK) {265 CUSTOMLOG("%s: %s appears to have the required database updates", (bPrefixError ? "PREFIX ERROR" : "Cache"), szName);266 } else {267 CUSTOMLOG("%s: %s has missing database updates!", (bPrefixError ? "PREFIX ERROR" : "Cache"), szName);268 iValue = 0;269 }270 }271272 CUSTOMLOG("%s: %s = %d", (bPrefixError ? "PREFIX ERROR" : "Cache"), szName, iValue);273 m_options[string(szName)] = iValue;274 }275276 MOD_OPT_CACHE(GLOBAL_EARLY_COOP_WAR_LOCK);277 MOD_OPT_CACHE(GLOBAL_STACKING_RULES);278 MOD_OPT_CACHE(GLOBAL_BREAK_CIVILIAN_1UPT);279 MOD_OPT_CACHE(GLOBAL_BREAK_CIVILIAN_RESTRICTIONS);280 MOD_OPT_CACHE(GLOBAL_LOCAL_GENERALS);281 MOD_OPT_CACHE(GLOBAL_SEPARATE_GREAT_ADMIRAL);282 MOD_OPT_CACHE(GLOBAL_PROMOTION_CLASSES);283 MOD_OPT_CACHE(GLOBAL_PASSABLE_FORTS);284 MOD_OPT_CACHE(GLOBAL_PASSABLE_FORTS_ANY);285 MOD_OPT_CACHE(GLOBAL_ANYTIME_GOODY_GOLD);286 MOD_OPT_CACHE(GLOBAL_CITY_FOREST_BONUS);287 MOD_OPT_CACHE(GLOBAL_CITY_JUNGLE_BONUS);288 MOD_OPT_CACHE(GLOBAL_CITY_WORKING);289 MOD_OPT_CACHE(GLOBAL_CITY_AUTOMATON_WORKERS);290 MOD_OPT_CACHE(GLOBAL_RELOCATION);291 MOD_OPT_CACHE(GLOBAL_ALPINE_PASSES);292 MOD_OPT_CACHE(GLOBAL_CS_GIFT_SHIPS);293 MOD_OPT_CACHE(GLOBAL_CS_UPGRADES);294 MOD_OPT_CACHE(GLOBAL_CS_RAZE_RARELY);295 MOD_OPT_CACHE(GLOBAL_CS_LIBERATE_AFTER_BUYOUT);296 MOD_OPT_CACHE(GLOBAL_CS_GIFTS);297 MOD_OPT_CACHE(GLOBAL_CS_GIFTS_LOCAL_XP);298 MOD_OPT_CACHE(GLOBAL_CS_OVERSEAS_TERRITORY);299 MOD_OPT_CACHE(GLOBAL_CS_NO_ALLIED_SKIRMISHES);300 MOD_OPT_CACHE(GLOBAL_VENICE_KEEPS_RESOURCES);301 MOD_OPT_CACHE(GLOBAL_CS_MARRIAGE_KEEPS_RESOURCES);302 MOD_OPT_CACHE(GLOBAL_NO_FOLLOWUP);303 MOD_OPT_CACHE(GLOBAL_NO_FOLLOWUP_FROM_CITIES);304 MOD_OPT_CACHE(GLOBAL_CAPTURE_AFTER_ATTACKING);305 MOD_OPT_CACHE(GLOBAL_NO_OCEAN_PLUNDERING);306 MOD_OPT_CACHE(GLOBAL_NO_CONQUERED_SPACESHIPS);307 MOD_OPT_CACHE(GLOBAL_ADJACENT_BLOCKADES);308 MOD_OPT_CACHE(GLOBAL_ALLIES_BLOCK_BLOCKADES);309 MOD_OPT_CACHE(GLOBAL_SHORT_EMBARKED_BLOCKADES);310 MOD_OPT_CACHE(GLOBAL_GRATEFUL_SETTLERS);311 MOD_OPT_CACHE(GLOBAL_RELIGIOUS_SETTLERS);312 MOD_OPT_CACHE(GLOBAL_QUICK_ROUTES);313 MOD_OPT_CACHE(GLOBAL_SUBS_UNDER_ICE_IMMUNITY);314 MOD_OPT_CACHE(GLOBAL_PARATROOPS_MOVEMENT);315 MOD_OPT_CACHE(GLOBAL_PARATROOPS_AA_DAMAGE);316 MOD_OPT_CACHE(GLOBAL_NUKES_MELT_ICE); 317 MOD_OPT_CACHE(GLOBAL_GREATWORK_YIELDTYPES); 318 MOD_OPT_CACHE(GLOBAL_NO_LOST_GREATWORKS); 319 MOD_OPT_CACHE(GLOBAL_EXCLUDE_FROM_GIFTS);320 MOD_OPT_CACHE(GLOBAL_MOVE_AFTER_UPGRADE);321 MOD_OPT_CACHE(GLOBAL_CANNOT_EMBARK);322 MOD_OPT_CACHE(GLOBAL_SEPARATE_GP_COUNTERS);323 MOD_OPT_CACHE(GLOBAL_TRULY_FREE_GP);324 325 MOD_OPT_CACHE(DIPLOMACY_BY_NUMBERS);326 MOD_OPT_CACHE(DIPLOMACY_TECH_BONUSES);327 MOD_OPT_CACHE(DIPLOMACY_AUTO_DENOUNCE);328 MOD_OPT_CACHE(DIPLOMACY_STFU);329 MOD_OPT_CACHE(DIPLOMACY_NO_LEADERHEADS);330 331 MOD_OPT_CACHE(TRAITS_GG_FROM_BARBARIANS);332 MOD_OPT_CACHE(TRAITS_CROSSES_ICE);333 MOD_OPT_CACHE(TRAITS_CITY_WORKING);334 MOD_OPT_CACHE(TRAITS_CITY_AUTOMATON_WORKERS);335 MOD_OPT_CACHE(TRAITS_OTHER_PREREQS);336 MOD_OPT_CACHE(TRAITS_ANY_BELIEF);337 MOD_OPT_CACHE(TRAITS_TRADE_ROUTE_BONUSES);338 MOD_OPT_CACHE(TRAITS_EXTRA_SUPPLY);339340 MOD_OPT_CACHE(POLICIES_CITY_WORKING);341 MOD_OPT_CACHE(POLICIES_CITY_AUTOMATON_WORKERS);342343 MOD_OPT_CACHE(TECHS_CITY_WORKING);344 MOD_OPT_CACHE(TECHS_CITY_AUTOMATON_WORKERS);345346 MOD_OPT_CACHE(PROMOTIONS_AURA_CHANGE);347 MOD_OPT_CACHE(PROMOTIONS_GG_FROM_BARBARIANS);348 MOD_OPT_CACHE(PROMOTIONS_VARIABLE_RECON);349 MOD_OPT_CACHE(PROMOTIONS_CROSS_MOUNTAINS);350 MOD_OPT_CACHE(PROMOTIONS_CROSS_OCEANS);351 MOD_OPT_CACHE(PROMOTIONS_CROSS_ICE);352 MOD_OPT_CACHE(PROMOTIONS_HALF_MOVE);353 MOD_OPT_CACHE(PROMOTIONS_DEEP_WATER_EMBARKATION);354 MOD_OPT_CACHE(PROMOTIONS_FLAGSHIP);355 MOD_OPT_CACHE(PROMOTIONS_UNIT_NAMING);356 MOD_OPT_CACHE(PROMOTIONS_IMPROVEMENT_BONUS);357358 MOD_OPT_CACHE(UI_CITY_PRODUCTION);359 MOD_OPT_CACHE(UI_CITY_EXPANSION);360361 MOD_OPT_CACHE(BUILDINGS_NW_EXCLUDE_RAZING);362 MOD_OPT_CACHE(BUILDINGS_PRO_RATA_PURCHASE);363 MOD_OPT_CACHE(BUILDINGS_CITY_WORKING);364 MOD_OPT_CACHE(BUILDINGS_CITY_AUTOMATON_WORKERS);365366 MOD_OPT_CACHE(TRADE_ROUTE_SCALING);367 MOD_OPT_CACHE(TRADE_WONDER_RESOURCE_ROUTES);368369 MOD_OPT_CACHE(UNITS_NO_SUPPLY);370 MOD_OPT_CACHE(UNITS_MAX_HP);371 MOD_OPT_CACHE(UNITS_XP_TIMES_100);372 MOD_OPT_CACHE(UNITS_LOCAL_WORKERS);373 MOD_OPT_CACHE(UNITS_HOVERING_LAND_ONLY_HEAL);374 MOD_OPT_CACHE(UNITS_HOVERING_COASTAL_ATTACKS);375376 MOD_OPT_CACHE(RELIGION_NO_PREFERRENCES);377 MOD_OPT_CACHE(RELIGION_RANDOMISE);378 MOD_OPT_CACHE(RELIGION_CONVERSION_MODIFIERS);379 MOD_OPT_CACHE(RELIGION_KEEP_PROPHET_OVERFLOW);380 MOD_OPT_CACHE(RELIGION_ALLIED_INQUISITORS);381 MOD_OPT_CACHE(RELIGION_RECURRING_PURCHASE_NOTIFIY);382 MOD_OPT_CACHE(RELIGION_PLOT_YIELDS);383 MOD_OPT_CACHE(RELIGION_POLICY_BRANCH_FAITH_GP);384 MOD_OPT_CACHE(RELIGION_LOCAL_RELIGIONS);385386 MOD_OPT_CACHE(PROCESS_STOCKPILE);387388 MOD_OPT_CACHE(AI_NO_ZERO_VALUE_TRADE_ITEMS);389 MOD_OPT_CACHE(AI_SECONDARY_WORKERS);390 MOD_OPT_CACHE(AI_SECONDARY_SETTLERS);391 MOD_OPT_CACHE(AI_GREAT_PEOPLE_CHOICES);392 MOD_OPT_CACHE(AI_MP_DIPLOMACY);393 MOD_OPT_CACHE(AI_SMART_V3);394 395 MOD_OPT_CACHE(EVENTS_TERRAFORMING);396 MOD_OPT_CACHE(EVENTS_TILE_IMPROVEMENTS);397 MOD_OPT_CACHE(EVENTS_TILE_REVEALED);398 MOD_OPT_CACHE(EVENTS_CIRCUMNAVIGATION);399 MOD_OPT_CACHE(EVENTS_NEW_ERA);400 MOD_OPT_CACHE(EVENTS_NW_DISCOVERY);401 MOD_OPT_CACHE(EVENTS_DIPLO_EVENTS);402 MOD_OPT_CACHE(EVENTS_DIPLO_MODIFIERS);403 MOD_OPT_CACHE(EVENTS_MINORS);404 MOD_OPT_CACHE(EVENTS_MINORS_GIFTS);405 MOD_OPT_CACHE(EVENTS_MINORS_INTERACTION);406 MOD_OPT_CACHE(EVENTS_QUESTS);407 MOD_OPT_CACHE(EVENTS_BARBARIANS);408 MOD_OPT_CACHE(EVENTS_GOODY_CHOICE);409 MOD_OPT_CACHE(EVENTS_GOODY_TECH);410 MOD_OPT_CACHE(EVENTS_AI_OVERRIDE_TECH);411 MOD_OPT_CACHE(EVENTS_GREAT_PEOPLE);412 MOD_OPT_CACHE(EVENTS_FOUND_RELIGION);413 MOD_OPT_CACHE(EVENTS_ACQUIRE_BELIEFS);414 MOD_OPT_CACHE(EVENTS_RELIGION);415 MOD_OPT_CACHE(EVENTS_ESPIONAGE);416 MOD_OPT_CACHE(EVENTS_PLOT);417 MOD_OPT_CACHE(EVENTS_PLAYER_TURN);418 MOD_OPT_CACHE(EVENTS_GOLDEN_AGE);419 MOD_OPT_CACHE(EVENTS_CITY);420 MOD_OPT_CACHE(EVENTS_CITY_CAPITAL);421 MOD_OPT_CACHE(EVENTS_CITY_BORDERS);422 MOD_OPT_CACHE(EVENTS_CITY_FOUNDING);423 MOD_OPT_CACHE(EVENTS_LIBERATION);424 MOD_OPT_CACHE(EVENTS_CITY_RAZING);425 MOD_OPT_CACHE(EVENTS_CITY_AIRLIFT);426 MOD_OPT_CACHE(EVENTS_CITY_BOMBARD);427 MOD_OPT_CACHE(EVENTS_CITY_CONNECTIONS);428 MOD_OPT_CACHE(EVENTS_AREA_RESOURCES);429 MOD_OPT_CACHE(EVENTS_PARADROPS);430 MOD_OPT_CACHE(EVENTS_UNIT_RANGEATTACK);431 MOD_OPT_CACHE(EVENTS_UNIT_CREATED);432 MOD_OPT_CACHE(EVENTS_UNIT_FOUNDED);433 MOD_OPT_CACHE(EVENTS_UNIT_PREKILL);434 MOD_OPT_CACHE(EVENTS_UNIT_CAPTURE);435 MOD_OPT_CACHE(EVENTS_CAN_MOVE_INTO);436 MOD_OPT_CACHE(EVENTS_UNIT_ACTIONS);437 MOD_OPT_CACHE(EVENTS_UNIT_UPGRADES);438 MOD_OPT_CACHE(EVENTS_UNIT_DATA);439 MOD_OPT_CACHE(EVENTS_WAR_AND_PEACE);440 MOD_OPT_CACHE(EVENTS_TRADE_ROUTES);441 MOD_OPT_CACHE(EVENTS_TRADE_ROUTE_PLUNDERED);442 MOD_OPT_CACHE(EVENTS_RESOLUTIONS);443 MOD_OPT_CACHE(EVENTS_IDEOLOGIES);444 MOD_OPT_CACHE(EVENTS_NUCLEAR_DETONATION);445 MOD_OPT_CACHE(EVENTS_AIRLIFT);446 MOD_OPT_CACHE(EVENTS_REBASE);447 MOD_OPT_CACHE(EVENTS_COMMAND);448 MOD_OPT_CACHE(EVENTS_CUSTOM_MISSIONS);449 MOD_OPT_CACHE(EVENTS_BATTLES);450 MOD_OPT_CACHE(EVENTS_BATTLES_DAMAGE);451452 MOD_OPT_CACHE(API_PLAYER_LOGS);453 MOD_OPT_CACHE(API_ESPIONAGE);454 MOD_OPT_CACHE(API_TRADEROUTES);455 MOD_OPT_CACHE(API_RELIGION);456 MOD_OPT_CACHE(API_PLOT_BASED_DAMAGE);457 MOD_OPT_CACHE(API_PLOT_YIELDS);458 MOD_OPT_CACHE(API_ACHIEVEMENTS);459 MOD_OPT_CACHE(API_EXTENSIONS);460 MOD_OPT_CACHE(API_LUA_EXTENSIONS);461462 MOD_OPT_CACHE(CONFIG_GAME_IN_XML);463 MOD_OPT_CACHE(CONFIG_AI_IN_XML);464465 MOD_OPT_CACHE(BUGFIX_DUMMY_POLICIES);466 MOD_OPT_CACHE(BUGFIX_RADARING);467 MOD_OPT_CACHE(BUGFIX_RESEARCH_OVERFLOW);468 MOD_OPT_CACHE(BUGFIX_LUA_CHANGE_VISIBILITY_COUNT);469 MOD_OPT_CACHE(BUGFIX_RELIGIOUS_SPY_PRESSURE);470 MOD_OPT_CACHE(BUGFIX_MOVE_AFTER_PURCHASE);471 MOD_OPT_CACHE(BUGFIX_UNITCLASS_NOT_UNIT);472 MOD_OPT_CACHE(BUGFIX_BUILDINGCLASS_NOT_BUILDING);473 MOD_OPT_CACHE(BUGFIX_FREE_FOOD_BUILDING);474 MOD_OPT_CACHE(BUGFIX_NAVAL_FREE_UNITS);475 MOD_OPT_CACHE(BUGFIX_NAVAL_NEAREST_WATER);476 MOD_OPT_CACHE(BUGFIX_CITY_STACKING);477 MOD_OPT_CACHE(BUGFIX_BARB_CAMP_TERRAINS);478 MOD_OPT_CACHE(BUGFIX_BARB_CAMP_SPAWNING);479 MOD_OPT_CACHE(BUGFIX_BARB_GP_XP);480 MOD_OPT_CACHE(BUGFIX_REMOVE_GHOST_ROUTES);481 MOD_OPT_CACHE(BUGFIX_UNITS_AWAKE_IN_DANGER);482 MOD_OPT_CACHE(BUGFIX_WORKERS_VISIBLE_DANGER);483 MOD_OPT_CACHE(BUGFIX_FEATURE_REMOVAL);484 MOD_OPT_CACHE(BUGFIX_INTERCEPTOR_STRENGTH);485 MOD_OPT_CACHE(BUGFIX_UNIT_POWER_CALC);486 MOD_OPT_CACHE(BUGFIX_UNIT_POWER_BONUS_VS_DOMAIN_ONLY);487 MOD_OPT_CACHE(BUGFIX_UNIT_POWER_NAVAL_CONSISTENCY);488 MOD_OPT_CACHE(BUGFIX_UNIT_PREREQ_PROJECT);489 MOD_OPT_CACHE(BUGFIX_NO_HOVERING_REBELS);490 MOD_OPT_CACHE(BUGFIX_HOVERING_PATHFINDER);491 MOD_OPT_CACHE(BUGFIX_EMBARKING_PATHFINDER);492493 m_bInit = true;494 }495496 if (m_options.find(sOption) == m_options.end()) {497 return defValue;498 }499500 return m_options[sOption];501}