battles/magic/healing.php

100 lines
4.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// Магия исцеления
// Все их соберём, вместе соберём...
/*
* Сейчас в игре (да, один этот файл заменит кучу тех, что ниже):
* cure15.php
* cure30.php
* cure30_8.php
* cure30_100.php
* cure45.php
* cure60.php
* cure120.php
* cure150.php
* cure300.php
* cure_20.php
* cure_35.php
* cure_50.php
* cure_d.php
* cure_rep_90.php
* cure_rep_120.php
* cure_rep_150.php
* cure_rep_180.php
* cure_rep_270.php
* cure_rep_360.php
* c30_100.php
* 8cure30.php
* klan/heal20.php
* klan/heal35.php
* klan/heal50.php
* user/heal20.php
* user/heal35.php
* user/heal50.php
* */
// Если не в игре - идём нахер.
if ($_SESSION['uid'] == null) header("Location: index.php");
// Если нет цели заклинания - идём нахер.
// IDEA: Или кастуем на себя. Но тут нужны дополнительные проверки.
if (empty($_POST['target'])) header("Location: index.php");
//Цель заклинания
$target = $_POST['target'];
//Шанс на успех
$chance = 0;
$chance = $_POST['chance'];
if ($chance > 95) $chance = 95;
//Интеллект заклинателя
$mage_intellect = 0;
$mage_intellect = $user['intel'];
//Данные игрока, на которого колдуем
$receiver = db::c()->query('SELECT *, (select `id` from `online` WHERE `id` = `users`.`id` AND `date` >= ?i) as `online` FROM `users` WHERE `login` = "?s"', time() - 60, $_POST['target'])->fetch_assoc();
//Сила заклинания (на сколько лечим)
//Если не указано, лечим на случайное значение от 0 до уровня интеллекта мага.
$magic_power = mt_rand(0, $mage_intellect);
$magic_power = $_POST['magic_power'];
//Является ли сила лечения процентом?
$percentage = false;
if (!empty($_POST['percentage'])) {
$percentage = true;
if ($magic_power > 100) $magic_power = 100;
}
//Статус, отображаемый магу
$status = '';
if ($receiver['battle'] != $user['battle']) {
$status = "Персонаж находится в поединке!";
} elseif ($user['room'] != $receiver['room'] && !$receiver['battle']) {
$status = "Персонаж в другой комнате!";
} elseif ($receiver['battle'] && !in_array($receiver['id'], $fbattle->team_mine)) {
$status = "Нельзя лечить противников!";
} elseif ($user['hp'] < 1) {
$status = "Вы мертвы!";
} else {
//TODO: Проверка на то, что магу хватает навыка владения школой магии.
//IDEA: Можно добавить проверку на интеллект, где при определённом интеллекте шанс на успех становится 95-100%.
if ($chance >= mt_rand(1, 100)) {
//Проверка на то, повышается здоровье на константу или на процент.
if ($percentage) {
$new_hp = $receiver['hp'] + $receiver['maxhp'] / 100 * $magic_power;
} else {
$new_hp = $receiver['hp'] + $magic_power;
}
if ($new_hp >= $receiver['maxhp']) $new_hp = $receiver['maxhp'];
if ($user['battle'] > 0) {
db::c()->query('UPDATE `battle` SET `to1` = ?i, `to2` = ?i WHERE `id` = ?i', time(), time(), $user['battle']);
$fbattle->AddToLog('<span class=date>' . date("H:i") . '</span> ' . nick::id($user['id'])->short() . ' колдует заклятие лечения и восстанавливает ' . (($receiver['id'] != $user['id']) ? nick::id($receiver['id'])->short() : "себе") . ' здоровье <B>' . $magic_power . '</B> [' . ($new_hp) . '/' . $receiver['maxhp'] . ']<BR>');
$fbattle->write_log();
}
db::c()->query('UPDATE `users` SET `hp` = ?i WHERE `id` = ?i', $new_hp, $receiver['id']);
$status = "Вы восстановили {$magic_power} НР персонажу {$receiver['login']}!";
} else {
$status = "Свиток рассыпался в ваших руках...";
}
}
echo "<span style='color:red;'>$status</span>";