Understanding Priem Execution Variables
Overview
In the battle system, there are three key variables that control the execution flow of priems (techniques):
$pr_momental_this
$pr_tested_this
$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):
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):
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):
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:
-
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
-
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
-
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.