Первоклассным модулем его не назвать, но всё таки решился сделать свой 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"}
Конец урока