[[], CLISetup::ARGV_PARAM, 'Compiles data for type: Faction from dbc.'] ); protected $dbcSourceFiles = ['faction', 'factiontemplate']; public function generate(array $ids = []) : bool { DB::Aowow()->query('TRUNCATE ?_factions'); DB::Aowow()->query('TRUNCATE ?_factiontemplate'); DB::Aowow()->query( 'INSERT INTO ?_factions SELECT f.id, f.repIdx, baseRepRaceMask1, baseRepRaceMask2, baseRepRaceMask3, baseRepRaceMask4, baseRepClassMask1, baseRepClassMask2, baseRepClassMask3, baseRepClassMask4, baseRepValue1, baseRepValue2, baseRepValue3, baseRepValue4, IF(SUM(ft.ourMask & 0x6) / COUNT(1) = 0x4, 2, IF(SUM(ft.ourMask & 0x6) / COUNT(1) = 0x2, 1, 0)) as side, 0, -- expansion "", -- quartermasterNpcIds "", -- factionTemplateIds 0, -- cuFlags parentFaction, spilloverRateIn, spilloverRateOut, spilloverMaxRank, name_loc0, name_loc2, name_loc3, name_loc4, name_loc6, name_loc8 FROM dbc_faction f LEFT JOIN dbc_factiontemplate ft ON ft.factionid = f.id GROUP BY f.id' ); DB::Aowow()->query( 'INSERT INTO ?_factiontemplate SELECT id, factionId, IF(friendFactionId1 = 1 OR friendFactionId2 = 1 OR friendFactionId3 = 1 OR friendFactionId4 = 1 OR friendlyMask & 0x3, 1, IF(enemyFactionId1 = 1 OR enemyFactionId2 = 1 OR enemyFactionId3 = 1 OR enemyFactionId4 = 1 OR hostileMask & 0x3, -1, 0)), IF(friendFactionId1 = 2 OR friendFactionId2 = 2 OR friendFactionId3 = 2 OR friendFactionId4 = 2 OR friendlyMask & 0x5, 1, IF(enemyFactionId1 = 2 OR enemyFactionId2 = 2 OR enemyFactionId3 = 2 OR enemyFactionId4 = 2 OR hostileMask & 0x5, -1, 0)) FROM dbc_factiontemplate' ); DB::Aowow()->query( 'UPDATE ?_factions f JOIN (SELECT ft.factionId, GROUP_CONCAT(ft.id SEPARATOR " ") AS tplIds FROM dbc_factiontemplate ft GROUP BY ft.factionId) temp ON f.id = temp.factionId SET f.templateIds = temp.tplIds' ); DB::Aowow()->query( 'UPDATE ?_factions x JOIN dbc_faction f ON f.id = x.id LEFT JOIN dbc_factiontemplate ft ON f.id = ft.factionId SET cuFlags = cuFlags | ?d WHERE f.repIdx < 0 OR ( f.repIdx > 0 AND (f.repFlags1 & 0x8 OR ft.id IS NULL) AND (f.repFlags1 & 0x80) = 0 )', CUSTOM_EXCLUDE_FOR_LISTVIEW ); $pairs = array( [[980], ['expansion' => 1]], [[1097], ['expansion' => 2]], [[469, 891, 1037], ['side' => 1]], [[ 67, 892, 1052], ['side' => 2]], ); foreach ($pairs as $p) DB::Aowow()->query( 'UPDATE ?_factions top JOIN (SELECT id, parentFactionId FROM ?_factions) mid ON mid.parentFactionId IN (?a) LEFT JOIN (SELECT id, parentFactionId FROM ?_factions) low ON low.parentFactionId = mid.id SET ?a WHERE repIdx > 0 AND (top.id IN (?a) OR top.id = mid.id OR top.id = low.id)', $p[0], $p[1], $p[0] ); $this->reapplyCCFlags('factions', Type::FACTION); return true; } }); ?>