Add Understanding Priem Execution Variables

Ivor Barhansky 2025-05-19 12:11:51 +00:00
parent f5adaf40c4
commit 13643682c3

@ -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.']->(&quot;Прикрыться&quot;);';
$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.