БК: Код свитка лечения. (Халява, сэр!)

Insallah

Раздолбай
📜
💎
Гоняющимся за халявой посвящается. Предыстория: В каждом втором движке магия устроена кучей файлов с эффектами. Есть много крайне однотипной магии. Я у себя замутил крупный проект схлопывания кучи файлов в один, но многофункциональный. Делаться всё будет в кучу этапов. Почему проект крупный? Потому что куча файлов упоминается в куче мест. Особенно в базе данных, в магазинах. Там вообще беда. Ну и поединки любят вызывать кучу файлов, куда без этого...

PHP:
<?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 (empty($_SESSION['uid'])) header("Location: index.php");
// Если нет цели заклинания - идём нахер.
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 `id`, `hp`, `maxhp`, `battle`, `room`, (select `id` from `online` WHERE `id` = `users`.`id` AND `date` >= ?i) as `online` FROM `users` WHERE `login` = "?s"', time() - 60, $target)->fetch_assoc();
//Сила заклинания (на сколько лечим)
//Если не указано, лечим на случайное значение от 0 до уровня интеллекта мага.
$magic_power = mt_rand(0, $mage_intellect);
if (!empty($_POST['magic_power'])) $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} НР персонажу {$target}!";
    } else {
        $status = "Свиток рассыпался в ваших руках...";
    }
}
echo "<span style='color:red;'>$status</span>";
Обращаю внимание: Это черновой вариант, который может просто кого-то пнуть на тему в какую сторону думать. Это не продакшон, поэтому нет всяких классов, инклюдов, прочая, прочая, прочая. Это процесс превращения 27 файлов в один.
 
Последнее редактирование:

Insallah

Раздолбай
📜
💎
Если, вдруг, кому-то интересно читать другие направления, на которые можно посмотреть (спереть? :p) штурмуйте мне приват, указывая, что хотите.
На оригинальность и правильность не претендую.
 

Insallah

Раздолбай
📜
💎
Я ориентируюсь по своим текущим свиткам. В поединках больше дичи. Там тоже пару десятков одинаковых свитков. И куча интереснейших проверок, вроде:
PHP:
elseif (!$us['online']) {
    echo "Персонаж не в игре!";
} elseif ($us_b['type']==3 || $us_b['type']==5) {
    echo "Запрещено входить в хаотический бой!";
} elseif ($us['battle']>0 && $us_b['open']==0) {
    echo "Бой закрыт для вмешательства!";
} elseif ($us['align']==2.99) {
    echo "Не атакуйте Администратора!";
} elseif ($user['zayavka'] > 0) {
    echo "Вы ожидаете поединка...";
} elseif(in_array($us['room'], $unkilable['rooms'])) {
  echo "В данной комнате запрещены нападения ...";
} elseif(in_array($us['id'], $unkilable['users'])) {
  echo "Персонаж под защитой от нападений ...";
} elseif(isset($effect['id'])) {
  echo "Персонаж под защитой от нападений ...";
} elseif ($owntravma['id'] && !$us['battle']) {
    echo "Персонаж тяжело травмирован...";
} elseif ($user['room'] != $us['room']) {
    echo "Персонаж в другой комнате!";
} elseif ($us['room'] == 31 || $us['room'] == 46 || $us['room'] == 47 || $us['room'] == 48 || $us['room'] == 49 ||$us['room'] == 600 || $us['room'] == 601 || $us['room'] == 45 || $us['room'] == 602 || $us['room'] == 43 || $us['room'] ==45) {
    echo "Нападения в этой локации запрещены!";
} elseif ($us['align'] == 2.9) {
    echo "Нападения на Ангела строго запрещено!";
} elseif ($us['align'] == 8.11) {
    echo "Нападение на Гвардейца Света запрещено!";
} elseif ($us['align'] == 8.21) {
    echo "Нападение на Гвардейца Тьмы запрещено!";
} elseif ($us['align'] == 8.31) {
    echo "Нападение на Гвардейца Нейтралитета запрещено!";
} elseif ($us['align'] >1 && $us['align'] <2) {
    echo "Нападение на Паладинов запрещено!";
} elseif ($us['align'] == 4.99) {
    echo "Нападение на Комментатора запрещено!";
} elseif ($us['level'] < 1) {
    echo "Новички находятся под защитой Мироздателя!";
} elseif ($us['hp'] < $us['maxhp']*0.33 && !$us['battle']) {
    echo "Жертва слишком слаба!";
} elseif ($user['hp'] < $user['maxhp']*0.33) {
    echo "Вы слишком ослаблены для нападения!";
} elseif ($us['hp'] < 1  && $us['battle']) {
    echo "Вы не можете напасть на погибшего!";
} elseif (mt_rand(1,100) < $int) {
 

Insallah

Раздолбай
📜
💎
Это было бы удобно вынести в какой то хелпер
Я уже пришёл к выводу, что я занимаюсь какой-то хернёй. Я два года занимаюсь тем, что вырезаю из движка ненужные блоки, вырезаю из базы неиспользуемые таблицы, отключаю всякие штуки, вроде випов за 1000-10000 евро. Я боюсь увлечься, что на выходе останется только чат и поединки. И смотря на тенденцию, я уже думаю найти двигло 2002-2004 года, без наворотов, в котором реально мало файлов и игровых возможностей, перенести её на php7, запустить и только когда заработает, опирайсь на решения в новых движках вписывать туда новые блоки.
 
  • Like
Реакции: oxy

oxy

Продвинутый
🏆
📜
💎
  • Надмозг
Я уже пришёл к выводу, что я занимаюсь какой-то хернёй. Я два года занимаюсь тем, что вырезаю из движка ненужные блоки, вырезаю из базы неиспользуемые таблицы, отключаю всякие штуки, вроде випов за 1000-10000 евро. Я боюсь увлечься, что на выходе останется только чат и поединки. И смотря на тенденцию, я уже думаю найти двигло 2002-2004 года, без наворотов, в котором реально мало файлов и игровых возможностей, перенести её на php7, запустить и только когда заработает, опирайсь на решения в новых движках вписывать туда новые блоки.
Йееее! наконец то у кого то здравый смысл проснулся
 

Insallah

Раздолбай
📜
💎
Да он давно тащемта. Но просто движков таких лично у меня - тупо нет. Я и этот-то брал именно с такой целью, упростить и перебросить на php7. Но количество вырезаемного мной контернта начинает откровенно пугать даже меня.
 
Сверху