diff --git a/includes/components/Conditions/Conditions.class.php b/includes/components/Conditions/Conditions.class.php index 175f6cf7..4848063c 100644 --- a/includes/components/Conditions/Conditions.class.php +++ b/includes/components/Conditions/Conditions.class.php @@ -118,6 +118,9 @@ class Conditions // public const SCENARIO_STEP = 54; // ❌ reserved for TC master // public const SCENE_IN_PROGRESS = 55; // ❌ reserved for TC master // public const PLAYER_CONDITION = 56; // ❌ reserved for TC master +// public const PRIVATE_OBJECT = 57; // ❌ reserved for TC master + public const STRING_ID = 58; // go or npc has StringId NULL, NULL, NULL +// public const LABEL = 59; // ❌ reserved for TC master private const IDX_SRC_GROUP = 0; private const IDX_SRC_ENTRY = 1; @@ -208,7 +211,8 @@ class Conditions self::QUESTSTATE => [Type::QUEST, true, null, null], self::QUEST_OBJECTIVE_PROGRESS => [Type::QUEST, true, true, null], self::DIFFICULTY_ID => [true, null, null, null], - self::GAMEMASTER => [true, null, null, null] + self::GAMEMASTER => [true, null, null, null], + self::STRING_ID => [true, null, null, null] ); private $jsGlobals = []; @@ -236,7 +240,7 @@ class Conditions $this->rows = array_merge($this->rows, DB::World()->select( 'SELECT `SourceTypeOrReferenceId`, `SourceEntry`, `SourceGroup`, `SourceId`, `ElseGroup`, - `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition` + `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ConditionStringValue1`, `NegativeCondition` FROM conditions WHERE `SourceTypeOrReferenceId` IN (?a){ AND `SourceGroup` IN (?a)}{ AND `SourceEntry` IN (?a)}{ AND `SourceId` IN (?a)} ORDER BY `SourceTypeOrReferenceId`, `SourceEntry`, `SourceGroup`, `ElseGroup` ASC', @@ -263,7 +267,7 @@ class Conditions $this->rows = array_merge($this->rows, DB::World()->select(sprintf( 'SELECT c1.`SourceTypeOrReferenceId`, c1.`SourceEntry`, c1.`SourceGroup`, c1.`SourceId`, c1.`ElseGroup`, - c1.`ConditionTypeOrReference`, c1.`ConditionTarget`, c1.`ConditionValue1`, c1.`ConditionValue2`, c1.`ConditionValue3`, c1.`NegativeCondition` + c1.`ConditionTypeOrReference`, c1.`ConditionTarget`, c1.`ConditionValue1`, c1.`ConditionValue2`, c1.`ConditionValue3`, c1.`ConditionStringValue1`, c1.`NegativeCondition` FROM conditions c1 JOIN conditions c2 ON c1.SourceTypeOrReferenceId = c2.SourceTypeOrReferenceId AND c1.SourceEntry = c2.SourceEntry AND c1.SourceGroup = c2.SourceGroup AND c1.SourceId = c2.SourceId WHERE %s @@ -280,7 +284,7 @@ class Conditions if (!isset(self::$source[$srcType])) return; - [$cId, $cVal1, $cVal2, $cVal3] = array_pad($condition, 5, 0); + [$cId, $cVal1, $cVal2, $cVal3, $cString] = array_pad(array_pad($condition, 5, 0), 6, ''); if (!isset(self::$conditions[abs($cId)])) return; @@ -290,7 +294,7 @@ class Conditions if (!$this->prepareSource($srcType, ...explode(':', $groupKey))) return; - if ($c = $this->prepareCondition($cId, $cVal1, $cVal2, $cVal3)) + if ($c = $this->prepareCondition($cId, $cVal1, $cVal2, $cVal3, $cString)) { if ($orGroup) $this->result[$srcType][$groupKey][] = [$c]; @@ -426,14 +430,14 @@ class Conditions if (!isset(self::$source[$srcType])) return false; - [$cId, $cVal1, $cVal2, $cVal3] = array_pad($condition, 5, 0); + [$cId, $cVal1, $cVal2, $cVal3, $cString1] = array_pad(array_pad($condition, 5, 0), 6, ''); if (!isset(self::$conditions[abs($cId)])) return false; while (substr_count($groupKey, ':') < 3) $groupKey .= ':0'; // pad with missing srcEntry, SrcId, cndTarget to group key - if ($c = (new self())->prepareCondition($cId, $cVal1, $cVal2, $cVal3)) + if ($c = (new self())->prepareCondition($cId, $cVal1, $cVal2, $cVal3, $cString1)) $lvRow['condition'][$srcType][$groupKey][] = [$c]; return true; @@ -467,7 +471,8 @@ class Conditions $r['NegativeCondition'] ? -$r['ConditionTypeOrReference'] : $r['ConditionTypeOrReference'], $r['ConditionValue1'], $r['ConditionValue2'], - $r['ConditionValue3'] + $r['ConditionValue3'], + $r['ConditionStringValue1'] ); if (!$cnd) continue; @@ -501,10 +506,10 @@ class Conditions return [$sType, $sGroup, $sEntry, $sId, $cTarget]; } - private function prepareCondition($cId, $cVal1, $cVal2, $cVal3) : array + private function prepareCondition($cId, $cVal1, $cVal2, $cVal3, $cString1) : array { if ($fn = self::$conditions[abs($cId)][self::IDX_CND_FN]) - if (!$this->$fn(abs($cId), $cVal1, $cVal2, $cVal3)) + if (!$this->$fn(abs($cId), $cVal1, $cVal2, $cVal3, $cString1)) return []; $result = [$cId]; @@ -519,10 +524,16 @@ class Conditions $result[] = ${'cVal'.($i+1)}; // variable amount of condition values } + if ($cString1) + { + $result = array_pad($result, 4, null); + $result[4] = $cString1; + } + return $result; } - private function factionToSide($cndId, &$cVal1, $cVal2, $cVal3) : bool + private function factionToSide($cndId, &$cVal1, $cVal2, $cVal3, $cString1) : bool { if ($cVal1 == 469) $cVal1 = SIDE_ALLIANCE; @@ -534,7 +545,7 @@ class Conditions return true; } - private function mapToZone($cndId, &$cVal1, &$cVal2, $cVal3) : bool + private function mapToZone($cndId, &$cVal1, &$cVal2, $cVal3, $cString1) : bool { // use g_zone_categories id if ($cVal1 == 530) // outland @@ -559,7 +570,7 @@ class Conditions return true; } - private function maskToBits($cndId, &$cVal1, $cVal2, $cVal3) : bool + private function maskToBits($cndId, &$cVal1, $cVal2, $cVal3, $cString1) : bool { if ($cndId == self::CHR_CLASS) { @@ -578,7 +589,7 @@ class Conditions return true; } - private function typeidToId($cndId, $cVal1, &$cVal2, &$cVal3) : bool + private function typeidToId($cndId, $cVal1, &$cVal2, &$cVal3, $cString1) : bool { if ($cVal1 == self::TYPEID_UNIT) { diff --git a/setup/sql/updates/1767034443_01.sql b/setup/sql/updates/1767034443_01.sql new file mode 100644 index 00000000..03adf418 --- /dev/null +++ b/setup/sql/updates/1767034443_01.sql @@ -0,0 +1 @@ +UPDATE `aowow_dbversion` SET `build` = CONCAT(IFNULL(`build`, ''), ' globaljs'); diff --git a/setup/tools/filegen/templates/global.js/conditionList.js b/setup/tools/filegen/templates/global.js/conditionList.js index c788c24c..f899593f 100644 --- a/setup/tools/filegen/templates/global.js/conditionList.js +++ b/setup/tools/filegen/templates/global.js/conditionList.js @@ -194,13 +194,11 @@ var ConditionList = new function() { str = g_conditions[strIdx]; // fill in params - str = $WH.sprintfa(str, param[0], param[1], param[2]); - + return $WH.sprintfa(str, param[0], param[1], param[2], param[3]) // resolve NegativeCondition - str = str.replace(/\$N([^:]*):([^;]*);/g, '$' + (negate > 0 ? 2 : 1)); - + .replace(/\$N([^:]*):([^;]*);/g, '$' + (negate > 0 ? 2 : 1)) // resolve vars - return str.replace(/\$C(\d+)([^:]*):([^;]*);/g, (_, i, y, n) => (i > 0 ? y : n)); + .replace(/\$C(\d+)([^:]*):([^;]*);/g, (_, i, y, n) => (i > 0 ? y : n)); } function _createTab() diff --git a/static/js/locale_dede.js b/static/js/locale_dede.js index a7d4cbda..deecf7a8 100644 --- a/static/js/locale_dede.js +++ b/static/js/locale_dede.js @@ -2520,7 +2520,8 @@ var g_conditions = { 47: 'Der Spieler hat [quest=$1]$N: nicht; $2', 48: 'Der Questfortschritt für Ziel #$2 von [quest=$1] ist$N: nicht; $3', 49: 'Der aktuelle Schwierigkeitsgrad für diese Instanz ist #$1', - 50: 'Der Spieler $C$1kann$N: nicht; Gamemaster sein:ist $Nein:kein; Gamemaster;' + 50: 'Der Spieler $C$1kann$N: nicht; Gamemaster sein:ist $Nein:kein; Gamemaster;', + 58: 'Die StringID dieser Entität ist$N: nicht; $4' }; /* end aowow custom */ diff --git a/static/js/locale_enus.js b/static/js/locale_enus.js index 98c12ce1..e63774ec 100644 --- a/static/js/locale_enus.js +++ b/static/js/locale_enus.js @@ -2568,7 +2568,8 @@ var g_conditions = { 47: 'The Player has$N: not; $2 [quest=$1]', 48: 'The Player has$N: not; collected $3 towards objective #$2 of [quest=$1]', 49: 'The current map difficulty is #$1', - 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster' + 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster', + 58: 'The StringID of this entity is$N: not; $4' }; /* end aowow custom */ diff --git a/static/js/locale_eses.js b/static/js/locale_eses.js index c1cda5f7..def2aa9d 100644 --- a/static/js/locale_eses.js +++ b/static/js/locale_eses.js @@ -2520,7 +2520,8 @@ var g_conditions = { 47: 'El Jugador $Nha: no ha; $2 [quest=$1]', 48: 'El Jugador $Nha: no ha; recolectado $3 para el objetivo #$2 de [quest=$1]', 49: 'La dificultad actual del mapa es #$1', - 50: 'El Jugador $C$1$Npuede:no puede; ser:es$N: no es;; un Maestro de Juego' + 50: 'El Jugador $C$1$Npuede:no puede; ser:es$N: no es;; un Maestro de Juego', + 58: 'El StringID de esta entidad es$N: no es; $4' }; /* end aowow custom */ diff --git a/static/js/locale_frfr.js b/static/js/locale_frfr.js index 7c8375ed..fc51fa89 100644 --- a/static/js/locale_frfr.js +++ b/static/js/locale_frfr.js @@ -2520,7 +2520,8 @@ var g_conditions = { 47: 'The Player has$N: not; $2 [quest=$1]', 48: 'The Player has$N: not; collected $3 towards objective #$2 of [quest=$1]', 49: 'The current map difficulty is #$1', - 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster' + 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster', + 58: 'The StringID of this entity is$N: not; $4' }; /* end aowow custom */ diff --git a/static/js/locale_ruru.js b/static/js/locale_ruru.js index a5ab2b2c..12622b1b 100644 --- a/static/js/locale_ruru.js +++ b/static/js/locale_ruru.js @@ -2520,7 +2520,8 @@ var g_conditions = { 47: 'The Player has$N: not; $2 [quest=$1]', 48: 'The Player has$N: not; collected $3 towards objective #$2 of [quest=$1]', 49: 'The current map difficulty is #$1', - 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster' + 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster', + 58: 'The StringID of this entity is$N: not; $4' }; /* end aowow custom */ diff --git a/static/js/locale_zhcn.js b/static/js/locale_zhcn.js index 2c4c609b..08ff9df4 100644 --- a/static/js/locale_zhcn.js +++ b/static/js/locale_zhcn.js @@ -2567,7 +2567,8 @@ var g_conditions = { 47: 'The Player has$N: not; $2 [quest=$1]', 48: 'The Player has$N: not; collected $3 towards objective #$2 of [quest=$1]', 49: 'The current map difficulty is #$1', - 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster' + 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster', + 58: 'The StringID of this entity is$N: not; $4' }; /* end aowow custom */