Profiler/Reputation

* add missing base values for each race/class
This commit is contained in:
Sarjuuk
2018-04-02 14:54:52 +02:00
parent d46a78b3cb
commit 81335ad6dc
6 changed files with 78 additions and 8 deletions

View File

@@ -292,6 +292,8 @@ class Profiler
CLI::write('fetching char #'.$charGuid.' from realm #'.$realmId);
CLI::write('writing...');
$ra = (1 << ($char['race'] - 1));
$cl = (1 << ($char['class'] - 1));
/*************/
/* equipment */
@@ -478,7 +480,7 @@ class Profiler
/* hunter pets */
/***************/
if ((1 << ($char['class'] - 1)) == CLASS_HUNTER)
if ($cl == CLASS_HUNTER)
{
DB::Aowow()->query('DELETE FROM ?_profiler_pets WHERE owner = ?d', $profileId);
$pets = DB::Characters($realmId)->select('SELECT id AS ARRAY_KEY, id, entry, modelId, name FROM character_pet WHERE owner = ?d', $charGuid);
@@ -557,7 +559,42 @@ class Profiler
// reputation
if ($reputation = DB::Characters($realmId)->select('SELECT ?d AS id, ?d AS `type`, faction AS typeId, standing AS cur FROM character_reputation WHERE guid = ?d AND (flags & 0xC) = 0', $profileId, TYPE_FACTION, $char['guid']))
// get base values for this race/class
$reputation = [];
$baseRep = DB::Aowow()->selectCol('
SELECT id AS ARRAY_KEY, baseRepValue1 FROM aowow_factions WHERE baseRepValue1 && (baseRepRaceMask1 & ?d || (!baseRepRaceMask1 AND baseRepClassMask1)) &&
((baseRepClassMask1 & ?d) || !baseRepClassMask1) UNION
SELECT id AS ARRAY_KEY, baseRepValue2 FROM aowow_factions WHERE baseRepValue2 && (baseRepRaceMask2 & ?d || (!baseRepRaceMask2 AND baseRepClassMask2)) &&
((baseRepClassMask2 & ?d) || !baseRepClassMask2) UNION
SELECT id AS ARRAY_KEY, baseRepValue3 FROM aowow_factions WHERE baseRepValue3 && (baseRepRaceMask3 & ?d || (!baseRepRaceMask3 AND baseRepClassMask3)) &&
((baseRepClassMask3 & ?d) || !baseRepClassMask3) UNION
SELECT id AS ARRAY_KEY, baseRepValue4 FROM aowow_factions WHERE baseRepValue4 && (baseRepRaceMask4 & ?d || (!baseRepRaceMask4 AND baseRepClassMask4)) &&
((baseRepClassMask4 & ?d) || !baseRepClassMask4)
', $ra, $cl, $ra, $cl, $ra, $cl, $ra, $cl);
if ($reputation = DB::Characters($realmId)->select('SELECT ?d AS id, ?d AS `type`, faction AS typeId, standing AS cur FROM character_reputation WHERE guid = ?d AND (flags & 0x4) = 0', $profileId, TYPE_FACTION, $char['guid']))
{
// merge back base values for encountered factions
foreach ($reputation as &$set)
{
if (empty($baseRep[$set['typeId']]))
continue;
$set['cur'] += $baseRep[$set['typeId']];
unset($baseRep[$set['typeId']]);
}
}
// insert base values for not yet encountered factions
foreach ($baseRep as $id => $val)
$reputation[] = array(
'id' => $profileId,
'type' => TYPE_FACTION,
'typeId' => $id,
'cur' => $val
);
foreach (Util::createSqlBatchInsert($reputation) as $rep)
DB::Aowow()->query('INSERT INTO ?_profiler_completion (?#) VALUES '.$rep, array_keys($reputation[0]));

View File

@@ -108,7 +108,12 @@ switch ($pageCall)
catch (Exception $e) // no, apparently not..
{
$class = $cleanName.'Page';
if (is_callable([$class, 'display']))
(new $class($pageCall, $pageParam))->display();
else if (isset($_GET['power']))
die('$WowheadPower.register(0, '.User::$localeId.', {})');
else // in conjunction with a proper rewriteRule in .htaccess...
(new GenericPage($pageCall))->error();
}
break;

View File

@@ -769,6 +769,18 @@ DROP TABLE IF EXISTS `aowow_factions`;
CREATE TABLE `aowow_factions` (
`id` smallint(5) unsigned NOT NULL,
`repIdx` smallint(5) unsigned NOT NULL,
`baseRepRaceMask1` smallint(5) unsigned NOT NULL,
`baseRepRaceMask2` smallint(5) unsigned NOT NULL,
`baseRepRaceMask3` smallint(5) unsigned NOT NULL,
`baseRepRaceMask4` smallint(5) unsigned NOT NULL,
`baseRepClassMask1` smallint(5) unsigned NOT NULL,
`baseRepClassMask2` smallint(5) unsigned NOT NULL,
`baseRepClassMask3` smallint(5) unsigned NOT NULL,
`baseRepClassMask4` smallint(5) unsigned NOT NULL,
`baseRepValue1` mediumint(8) NOT NULL,
`baseRepValue2` mediumint(8) NOT NULL,
`baseRepValue4` mediumint(8) NOT NULL,
`baseRepValue3` mediumint(8) NOT NULL,
`side` tinyint(1) unsigned NOT NULL,
`expansion` tinyint(1) unsigned NOT NULL,
`qmNpcIds` varchar(12) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'space separated',
@@ -3021,7 +3033,7 @@ UNLOCK TABLES;
LOCK TABLES `aowow_dbversion` WRITE;
/*!40000 ALTER TABLE `aowow_dbversion` DISABLE KEYS */;
INSERT INTO `aowow_dbversion` VALUES (1522499481,0,NULL,NULL);
INSERT INTO `aowow_dbversion` VALUES (1522673572,0,NULL,NULL);
/*!40000 ALTER TABLE `aowow_dbversion` ENABLE KEYS */;
UNLOCK TABLES;

View File

@@ -65,7 +65,7 @@ class DBC
'emotestext' => 'nsiixxxixixxxxxxxxx',
'emotestextdata' => 'nsxssxxsxsxxxxxxxx',
'emotestextsound' => 'niiii',
'faction' => 'nixxxxxxxxxxxxixxxiffixsxssxxsxsxxxxxxxxxxxxxxxxxxxxxxxxx',
'faction' => 'niiiiiiiiiiiiiixxxiffixsxssxxsxsxxxxxxxxxxxxxxxxxxxxxxxxx',
'factiontemplate' => 'nixiiiiiiiiiii',
'gemproperties' => 'nixxi',
'glyphproperties' => 'niii',
@@ -166,7 +166,7 @@ class DBC
'emotestext' => 'id,command,emoteId,targetId,noTargetId,selfId',
'emotestextsound' => 'id,emotesTextId,raceId,gender,soundId',
'emotestextdata' => 'id,text_loc0,text_loc2,text_loc3,text_loc6,text_loc8',
'faction' => 'id,repIdx,repFlags1,parentFaction,spilloverRateIn,spilloverRateOut,spilloverMaxRank,name_loc0,name_loc2,name_loc3,name_loc6,name_loc8',
'faction' => 'id,repIdx,baseRepRaceMask1,baseRepRaceMask2,baseRepRaceMask3,baseRepRaceMask4,baseRepClassMask1,baseRepClassMask2,baseRepClassMask3,baseRepClassMask4,baseRepValue1,baseRepValue2,baseRepValue3,baseRepValue4,repFlags1,parentFaction,spilloverRateIn,spilloverRateOut,spilloverMaxRank,name_loc0,name_loc2,name_loc3,name_loc6,name_loc8',
'factiontemplate' => 'id,factionId,ourMask,friendlyMask,hostileMask,enemyFactionId1,enemyFactionId2,enemyFactionId3,enemyFactionId4,friendFactionId1,friendFactionId2,friendFactionId3,friendFactionId4',
'gemproperties' => 'id,enchantmentId,colorMask',
'glyphproperties' => 'id,spellId,typeFlags,iconId',

View File

@@ -53,6 +53,9 @@ function 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

View File

@@ -0,0 +1,13 @@
ALTER TABLE `aowow_factions`
ADD COLUMN `baseRepRaceMask1` SMALLINT(5) UNSIGNED NOT NULL AFTER `repIdx`,
ADD COLUMN `baseRepRaceMask2` SMALLINT(5) UNSIGNED NOT NULL AFTER `baseRepRaceMask1`,
ADD COLUMN `baseRepRaceMask3` SMALLINT(5) UNSIGNED NOT NULL AFTER `baseRepRaceMask2`,
ADD COLUMN `baseRepRaceMask4` SMALLINT(5) UNSIGNED NOT NULL AFTER `baseRepRaceMask3`,
ADD COLUMN `baseRepClassMask1` SMALLINT(5) UNSIGNED NOT NULL AFTER `baseRepRaceMask4`,
ADD COLUMN `baseRepClassMask2` SMALLINT(5) UNSIGNED NOT NULL AFTER `baseRepClassMask1`,
ADD COLUMN `baseRepClassMask3` SMALLINT(5) UNSIGNED NOT NULL AFTER `baseRepClassMask2`,
ADD COLUMN `baseRepClassMask4` SMALLINT(5) UNSIGNED NOT NULL AFTER `baseRepClassMask3`,
ADD COLUMN `baseRepValue1` MEDIUMINT NOT NULL AFTER `baseRepClassMask4`,
ADD COLUMN `baseRepValue2` MEDIUMINT NOT NULL AFTER `baseRepValue1`,
ADD COLUMN `baseRepValue3` MEDIUMINT NOT NULL AFTER `baseRepValue2`,
ADD COLUMN `baseRepValue4` MEDIUMINT NOT NULL AFTER `baseRepValue3`;