From 13643682c3b30c4141a1475520509985f1e572c1 Mon Sep 17 00:00:00 2001 From: Ivor Barhansky Date: Mon, 19 May 2025 12:11:51 +0000 Subject: [PATCH] Add Understanding Priem Execution Variables --- Understanding-Priem-Execution-Variables.md | 203 +++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 Understanding-Priem-Execution-Variables.md diff --git a/Understanding-Priem-Execution-Variables.md b/Understanding-Priem-Execution-Variables.md new file mode 100644 index 0000000..7e2428f --- /dev/null +++ b/Understanding-Priem-Execution-Variables.md @@ -0,0 +1,203 @@ +# Understanding Priem Execution Variables + +## Overview + +In the battle system, there are three key variables that control the execution flow of priems (techniques): + +1. `$pr_momental_this` +2. `$pr_tested_this` +3. `$pr_used_this` + +These variables are used to determine which code block in a priem file should be executed and to pass the user ID to the priem file. + +## Detailed Explanation + +### `$pr_momental_this` + +**Purpose**: Used for immediate (momental) effects that modify damage calculations during an attack. + +**When it's set**: +- Set in the Battle.php file before requiring a priem file +- Used in damage calculation methods +- Set to either the attacker's or defender's ID depending on the context + +**How it works**: +- When set, the priem file executes the code block that defines the `$fx_moment` function +- This function typically modifies damage values and applies immediate effects +- Used for defensive priems that reduce incoming damage or offensive priems that enhance outgoing damage +- The function returns the modified damage value + +**Example from Priem1.php (Прикрыться/Cover)**: +```php +if (isset($pr_momental_this)) { + $fx_moment = function ($uid, $enemy, $j_id, $yron, $profil) { + if (!isset($btl->stats[$btl->uids[$uid]]['um_priem'][$j_id])) { + global $u, $btl; + $yron -= 3; + $btl->priemAddLogFast($uid, 0, "" . $btl->stats[$btl->uids[$u2]]['effects'][$btl->stats[$btl->uids[$uid]]['u_priem'][$j_id][0]]['name'], + '{tm1} ' . $btl->addlt(1, 17, $btl->users[$btl->uids[$uid]]['sex'], null), + 0, time()); + if ($yron < 0) { + $yron = 1; + } + $btl->stats[$btl->uids[$uid]]['um_priem'][$j_id] = true; + } + return round($yron); + }; +} +``` + +### `$pr_tested_this` + +**Purpose**: Used to test if a priem can be applied in the current battle context. + +**When it's set**: +- Set in the Battle.php file before requiring a priem file +- Used in methods that check if priems can be applied +- Set to the user ID that is being tested + +**How it works**: +- When set, the priem file executes the code block that defines the `$fx_priem` function for testing +- This function typically checks conditions like mana availability, cooldowns, or specific battle states +- Used to determine if a priem should be available for use +- The function returns the modified attack array + +**Example from Priem1.php (Прикрыться/Cover)**: +```php +elseif (isset($pr_tested_this)) { + $fx_priem = function ($id, $at, $uid, $j_id) { + // -- начало приема + global $u, $btl; + // + //Параметры приема + $pvr['used'] = 0; + // + $uid1 = $btl->atacks[$id]['uid1']; + $uid2 = $btl->atacks[$id]['uid2']; + if ($uid == $uid2) { + $a = 1; + $b = 2; + $u1 = $uid1; + $u2 = $uid2; + } elseif ($uid == $uid1) { + $a = 2; + $b = 1; + $u1 = $uid2; + $u2 = $uid1; + } + if (isset($at['p'][$a]['priems']['kill'][$uid][$j_id])) { + mysql_query('UPDATE `eff_users` SET `delete` = "' . time() . '" WHERE `id` = "' . $btl->stats[$btl->uids[$uid]]['u_priem'][$j_id][3] . '" AND `uid` = "' . $uid . '" LIMIT 1'); + $btl->stats[$btl->uids[$uid]]['u_priem'][$j_id] = true; + } + // + // -- конец приема + return $at; + }; + unset($pr_used_this); +} +``` + +### `$pr_used_this` + +**Purpose**: Used to apply a priem's effects during battle. + +**When it's set**: +- Set in the Battle.php file before requiring a priem file +- Used in methods that apply priem effects +- Always set to the user ID that is executing the priem + +**How it works**: +- When set, the priem file executes the code block that defines the `$fx_priem` function for application +- This function typically modifies the battle state, applies effects, and updates the attack array +- Used to implement the actual effects of the priem +- The function returns the modified attack array + +**Example from Priem1.php (Прикрыться/Cover)**: +```php +elseif (isset($pr_used_this)) { + $fx_priem = function ($id, $at, $uid, $j_id) { + // -- начало приема + global $u, $btl; + // + //Параметры приема + $pvr['used'] = 0; + // + //echo '$user::['.$uid.']->("Прикрыться");'; + $uid1 = $btl->atacks[$id]['uid1']; + $uid2 = $btl->atacks[$id]['uid2']; + if ($uid == $uid2) { + $a = 1; + $b = 2; + $u1 = $uid1; + $u2 = $uid2; + } elseif ($uid == $uid1) { + $a = 2; + $b = 1; + $u1 = $uid2; + $u2 = $uid1; + } + if ($a > 0) { + $j = 0; + $k = 0; + $wp = 3; + while ($j < count($at['p'][$a]['atack'])) { + if (isset($at['p'][$a]['atack'][$j]['yron']) && ( + $at['p'][$a]['atack'][$j][1] == 1 || + $at['p'][$a]['atack'][$j][1] == 4 || + $at['p'][$a]['atack'][$j][1] == 5)) { + if ($pvr['used'] = 0 && !isset($at['p'][$a]['priems']['kill'][$uid][$j_id])) { + // + $at['p'][$a]['atack'][$j]['yron']['y'] -= 3; + $at['p'][$a]['atack'][$j]['yron']['r'] += 3; + $at['p'][$a]['atack'][$j]['yron']['k'] -= 3; + $at['p'][$a]['atack'][$j]['yron']['m_k'] -= 3; + $at['p'][$a]['atack'][$j]['yron']['m_y'] -= 3; + // + $at['p'][$a]['atack'][$j]['yron']['plog'][] = '$this->deleffm(1,' . (0 + $uid) . ',' . $btl->stats[$btl->uids[$uid]]['u_priem'][$j_id][3] . '); + $this->priemAddLog( ' . $id . ', ' . $b . ', ' . $a . ', ' . $u2 . ', ' . $u1 . ', + "' . $btl->stats[$btl->uids[$u2]]['effects'][$btl->stats[$btl->uids[$uid]]['u_priem'][$j_id][0]]['name'] . '", + "{tm1} ' . $btl->addlt($b, 17, $btl->users[$btl->uids[$u2]]['sex'], null) . '", + ' . ($btl->hodID + 1) . ' );'; + // + $at['p'][$a]['atack'][$j]['yron']['used'][] = [$j_id, $uid, $pvr['used']]; + $at['p'][$a]['atack'][$j]['yron']['kill'][] = [$j_id, $uid, $pvr['kill']]; + // + $at['p'][$a]['priems']['kill'][$uid][$j_id] = true; + } + } + $j++; + } + } + // + // -- конец приема + return $at; + }; + unset($pr_used_this); +} +``` + +## Execution Flow + +The execution flow of a priem typically follows these steps: + +1. **Testing Phase**: + - `$pr_tested_this` is set + - The priem file is required + - The `$fx_priem` function is called to test if the priem can be applied + - This happens when checking available priems for a user + +2. **Application Phase**: + - `$pr_used_this` is set + - The priem file is required + - The `$fx_priem` function is called to apply the priem's effects + - This happens when a user activates a priem + +3. **Momental Phase**: + - `$pr_momental_this` is set + - The priem file is required + - The `$fx_moment` function is called to modify damage calculations + - This happens during damage calculation, after a priem has been applied + +## Conclusion + +These three variables form the core of the priem execution system, allowing for different behaviors depending on the context in which a priem is being used. This design pattern enables a single priem file to handle multiple aspects of a technique's functionality, from testing conditions to applying effects to modifying damage calculations. \ No newline at end of file