Понедельник, 23 Декабря 2024, 15:45

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Урок 2 по ezRPG (Модуль PvP)
maker-rusДата: Вторник, 02 Ноября 2010, 21:01 | Сообщение # 1
Гений
Сейчас нет на сайте
Первоклассным модулем его не назвать, но всё таки решился сделать свой PvP отличающийся наверно от всех, пока похожих не видел.
(обновление)

x1 rand(1, 100) * сила + уровень + урон. (минимальное число 1 максимальное 100).
x2 rand(1, 100) * сила + уровень + урон. (минимальное число 1 максимальное 100).
Два разных случайных числа умножаться на (сила + уровень + урон).
Таким способом у вас есть шанс выиграть у уровня выше.
Потом определяются общие очки.

x1 - игрок первый, в данном случае вы.
x2 - игрок второй, вам противник.

Если x1 > или = x2, то игрок x1 побеждает ( по другому не смог сделать).
Если x1 < x2, то игрок x1 проигрывает.

Если вы выигрываете, то получаете очки опыта, а ваш выигрыш добавляеться в лог.
Вот схема добавления очков

Если уровень противника <= 10 добавляем (от 5 до 10 очков)
Если уровень противника <= 15 добавляем (от 10 до 15 очков)
Если уровень противника <= 20 добавляем (от 15 до 20 очков)
Если уровень противника <= 30 добавляем (от 20 до 30 очков)

От теории к практике....

1. Создаем папочку battle в папочке modules.
2. В созданной папочке создаем файлик index.php .
3. В этот файлик пишем вот это:
Обновлено

Code
<?php
/* Автор PvP (c) maker-rus
     * 2010 год
     * Для уроков на сайте gcup.ru
     * Метод сделан мной       
     */
defined('IN_EZRPG') or exit;

class Module_Battle extends Base_Module
{

        public function start()
        {
                
            requireLogin();
                
            if (isset($_GET)== 'act')
            {
              if ($_GET = 'info')
              {
                $this->info();
              }
              if ($_GET = 'battle')
              {
                $this->battle();
              }
            }
            $this->tpl->display('battle.tpl');
        }
            
        private function info()
        {
         $x = ""; // Значение сообщения
         $hp = $this->player->hp; // извлекаем из бд хп
         $strength = $this->player->strength; // извлекаем из бд силу
         $energy = $this->player->energy; // извлекаем из бд энергию
         $level = $this->player->level;   // извлекаем из бд ваш уровень
         $damage = $this->player->damage; // извлекаем из бд ваш урон
         switch ($strength) {
         case 1:
         $damage = 3;
         break;
         case 8:
         $damage = 7;
         break;
         case 10:
         $damage = 25;
         break;
         case 20:
         $damage = 40;
         break;
             
         case 40:
         $damage = 80;
         break;
         default:
         $damage = 1;
         }
             
         $im = $this->player->username;
         $insert = Array();
         $insert['damage'] = $damage;
         $this->db->execute('UPDATE <ezrpg>players SET damage = '.$damage);
        }
            
            
}
?>

Сделал пока только так. (Ошибка с верху это только предупреждение о том что не заданна переменная)

4. Создаем папочку battleWar в папочке modules.
5. В этом файлике пишем вот это:
Обновлено!!

Code


<?php
defined('IN_EZRPG') or exit;

class Module_BattleWar extends Base_Module
{
         public function start()
         {
             requireLogin();
             if (isset($_GET)== 'act')
             {
              if ($_GET = 'war')
              {
              $this->war();
              }
             }
             $this->tpl->display('battle_war.tpl');
         }

         private function war()
         {
           $us = $_POST['username'];
           $db = $this->db->execute("SELECT * FROM <ezrpg>players WHERE username='$us'");
           $res = $this->db->fetchArray($db);
           // Слаживаем ваши очки (очки противника) создаем rand (0,1)
           // если выпало 1, то добовляем нам 5 очокв
           // если выпало 0, то добовляем 5 очков противнику
           // если очков больше у нас, то переходим на другую страницу и пиши что мы выиграли и +1 kill
           // если очков больше у противника, то переходим на другую страницу и пишим что мы проиграли и +1 death
           // 5 очков служит для перевеса в одинаковых кол-вах очков у противников, если же у другого больше уровень, то вы уже проиграли.
           // пока что только такой метод боя
           // (с) maker-rus
           //
           //Статы первого игрока
           $a = $this->player->strength;
           $b = $this->player->damage;
           $c = $this->player->level;
           $d = $this->player->exp;
           $ch1 = $a + $b + $c;
              
           //Статы второго игрока
           $ch2 = $res['strength'] + $res['damage'] + $res['level'];
           $lvl = $res['level']; // нужен для добовления опыта
           $kill = $res['kills']; // Кол-во раз вы выиграли
           $deat = $res['deaths']; // Кол-во раз вы проиграли
           $ch_k = $kill + 1;
           $ch_d = $deat + 1;
           //Генерируем очки
           $r1 = rand(1, $ch1);
           $r2 = rand(1, $ch2);
           $r3 = "";
           // Получемый опыт
           if ($lvl <= 10) $r3 = rand(5,10);
           if ($lvl <= 15) $r3 = rand(10,15);
           if ($lvl <= 20) $r3 = rand(15,20);
           if ($lvl <= 30) $r3 = rand(20,30);
           $r4 = $d + $r3;
             

           //Проверка кто выйграл
           if ($r1 >= $r2){
               $kills = $this->db->execute('UPDATE <ezrpg>players SET kills ='.$ch_k);
               echo "Вы выиграли.";
               $exp = $this->db->execute('UPDATE <ezrpg>players SET exp='.$r4);
               $message = "Вы выиграли! Получен опыт: ".$r4;
               $new_log = addLog($this->player->id, $message, $this->db);
           } else {
               $dearth = $this->db->execute('UPDATE <ezrpg>players SET deaths ='.$ch_d);
               echo "Вы проиграли.";
               $message = "Вы проиграли!";
               $new_log = addLog($this->player->id, $message, $this->db);              
           }
         }
}
?>          

6. Дальше создаем файлик battle.tpl в папочке smarty/templates/
7. Туда пишем вот это:

Code

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html>
{include file="header.tpl" TITLE="Stat Points"}
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
</head>
<body>
<p>Тестовый бой</p>
<form action="index.php?mod=BattleWar&act=war" method="post">
Имя противника: <br>                
<input name="username" type="text" id="username">
<br><br>
<input name="" type="submit" value="Далее">
</form>
</body>
<p>{include file="footer.tpl"}</p>
</html>

6. Дальше создаем файлик battle_war.tpl в папочке smarty/templates/
7. Туда пишем вот это:
Обновление

Code


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
{include file="header.tpl" TITLE="Battle War"}

<h1>Бой</h1>

<p>

  Ваш ник: <strong>{$player->username}</strong>.<br />
  Ваша сила: <strong>{$player->strength}</strong>.<br />
  Ваш уровень: <strong>{$player->level}</strong>.<br />
  Наносимый вами урон: <strong>{$player->damage}</strong>.<br />

<p>{include file="footer.tpl"}</p>

8. Чуть не забыл. Что бы применить этот модуль в своей игре. Надо зайти в попочку smarty\templates там найти файлик city.tpl и отредактировать вот так:

Code

[b]Вот и конец второго урока.[/b]{include file="header.tpl" TITLE="City"}

<h1>City</h1>

<div class="left">

<h3>Player</h3>
<p>
<a href="index.php">Home</a><br />
<a href="index.php?mod=EventLog">Event Log</a><br />
Mail Box<br />
Inventory<br />
<a href="index.php?mod=AccountSettings">Account Settings</a><br />
</p>

</div>
<div class="right">

<h3>World</h3>
<p>
<a href="index.php?mod=Members">Members List</a><br />
Top Players<br />
Game Statistics<br />
Forum<br />
</p>

<h3>City</h3>
<p>
<a href="index.php?mod=Battle&act=info">Battle</a><br />
Item Shop<br />
</p>

</div>

{include file="footer.tpl"}

Конец урока

Сообщение отредактировал maker-rus - Четверг, 04 Ноября 2010, 16:26
wernherДата: Вторник, 02 Ноября 2010, 21:13 | Сообщение # 2
Only God is Perfect
Сейчас нет на сайте
Я так понял, тут происходит простое сравнение кто сильней тот и победил?
Причем бой проходит в 1 раунд.


maker-rusДата: Вторник, 02 Ноября 2010, 21:28 | Сообщение # 3
Гений
Сейчас нет на сайте
smile да оно самое, это шаблон если захочешь и сможешь измени просто тип PvP и добавь раунд... smile
Просто я первый раз такое делаю и поэтому только учусь, пробую как это делать. smile
wernherДата: Вторник, 02 Ноября 2010, 21:34 | Сообщение # 4
Only God is Perfect
Сейчас нет на сайте
Я бы бой реализовал немного по другому.
А именно дал небольшой шанс слабому персонажу победить более старшего:
Если x1 > или = x2, то игрок x1 побеждает (это вполне логично, кто атакует первый имеет некоторое преимущество.).
Если x1 < x2, то игрок x1 проигрывает.

Но очки Я бы сделал иначе, а именно:
х1=Random(сила + уровень + урон)
x2=Random(сила + уровень + урон)
А после уже сравнивал.
Тем самым победить может любой игрок не зависимо от уровня и силы. Просто шансы победить будут стремится к нулю smile


maker-rusДата: Вторник, 02 Ноября 2010, 21:56 | Сообщение # 5
Гений
Сейчас нет на сайте
happy хорошая идея попробую реализовать, позже выложу свои труды smile
Спасибо wernher!

Добавлено (02.11.2010, 21:56)
---------------------------------------------
wernher, переделал вот так ты имел ввиду!? smile

Сообщение отредактировал maker-rus - Вторник, 02 Ноября 2010, 21:55
wernherДата: Среда, 03 Ноября 2010, 03:20 | Сообщение # 6
Only God is Perfect
Сейчас нет на сайте
Code

<?php
defined('IN_EZRPG') or exit;

class Module_BattleWar extends Base_Module
{
       public function start()
       {
           requireLogin();
           if (isset($_GET)== 'act')
           {
            if ($_GET = 'war')
            {
            $this->war();
            }
           }
           $this->tpl->display('battle_war.tpl');
       }

       private function war()
       {
         $us = $_POST['username'];
         $db = $this->db->execute("SELECT * FROM <ezrpg>players WHERE username='$us'");
         $res = $this->db->fetchArray($db);
         // Слаживаем ваши очки (очки противника) создаем rand (0,1)
         // если выпало 1, то добовляем нам 5 очокв
         // если выпало 0, то добовляем 5 очков противнику
         // если очков больше у нас, то переходим на другую страницу и пиши что мы выиграли и +1 kill
         // если очков больше у противника, то переходим на другую страницу и пишим что мы проиграли и +1 death
         // 5 очков служит для перевеса в одинаковых кол-вах очков у противников, если же у другого больше уровень, то вы уже проиграли.
         // пока что только такой метод боя
         // (с) maker-rus
         //
         //Статы первого игрока
         $a = $this->player->strength;
         $b = $this->player->damage;
         $c = $this->player->level;
         $ch1 = $a + $b + $c;
          
         //Статы второго игрока
         $ch2 = $res['strength'] + $res['damage'] + $res['level'];

         //Генерируем очки
         $r1 = rand(1, $ch1);
         $r2 = rand(1, $ch2);

         //Проверка кто выйграл
         if ($r1 >= $r2){
             $kills = $this->db->execute('UPDATE <ezrpg>players SET kills = +1');
             echo "Вы выиграли.";
         } else {
             $dearth = $this->db->execute('UPDATE <ezrpg>players SET deaths = +1');
             echo "Вы проиграли.";
         }

       }
}
?>  

Вот так думаю будет красивее.




Сообщение отредактировал wernher - Среда, 03 Ноября 2010, 03:25
maker-rusДата: Четверг, 04 Ноября 2010, 16:27 | Сообщение # 7
Гений
Сейчас нет на сайте
wernher, ага. Исправил smile и строчку после (с)maker-rus добавил вот эту -> (Переписал - wernher)

Добавлено (04.11.2010, 16:27)
---------------------------------------------
Обновил всё, смотрите smile Всё дописал happy

Сообщение отредактировал maker-rus - Среда, 03 Ноября 2010, 11:09
AnnDroidДата: Вторник, 09 Ноября 2010, 16:29 | Сообщение # 8
был не раз
Сейчас нет на сайте
ждём продолжения. happy
заказы принимаете? хотелось-бы увидеть простенький генератор ресурса biggrin
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг