Новые уроки по созданию броузерной игры – 7 - Часть 2
| |
last2424 | Дата: Четверг, 21 Августа 2014, 07:32 | Сообщение # 1 |
30 мл. блоков
Сейчас нет на сайте
| Админ, всё не влезло в тему, я пытался добавить новым сообщением, но он сдвинул див в бок, пишу отдельной.
Так, те кто читает этот урок сначало читаем первую часть потом эту.
<-- превая часть
Инвентарь со стороны клиента сделали, дальше, таблица квестов.
Код <? header("Cache-Control: no-store, no-cache"); //отключаем кеширование, кеш - плохо set_time_limit(0); // скрипт работает бесконечно
include 'conf.php'; // вставляем конфигурацию в игру
$data_quests = $quests->find(array('login' => $_SESSION['login_player'])); //вытаскиваем инвентарь
if($server_work == 1 and $_SESSION['login_player'] != null){ //проверяем если сервер включён и пользователь авторизировался ?> <!DOCTYPE html> <html> <head> <title>THEBESTGAME</title> <link rel="stylesheet" href="style_game.css"/><!--Подключаем стили--> </head> <body> <? while($quests = $data_quests->getNext()) {?> <div id="quest"> <?echo "<h1>".$quests['name_quest']."</h1><br/> <h5>".$quests['desctription']."</h5><br/>Prise:<br/>".$quests['prise']."<br/>XP:<br/>".$quests['xplus'];?> </div> <?}?> <div id="test"></div> </body> </html> <?
}else if($_SESSION['login_player'] == null){ //если пользователь не авторизирован
echo 'Вы не авторизирвоались!'; // выводим строчку "Вы не авторизировались!"
}else if($server_work != 1){ //если сервер не включён
echo 'Сервер выключен.'; // выводим строчку "Сервер выключен."
}
?>
Тут я думаю всё ещё проще, ведь я тут только вывожу div’ы со всеми квестами игрока.
Теперь чат. Chat_messages.php: Код <? include 'conf.php'; ?> <!DOCTYPE html> <html> <head> <title>THEBESTGAME</title> <link rel="stylesheet" href="style_game.css"/> </head> <body id="ms"> <? $data_chat = $chat->find(array('s' => 1)); //вытаскиваем сообщения
$data_chat->sort(array("time" => -1)); while($messages = $data_chat->getNext()) { echo $messages['login'].": ".$messages['message']." ".$messages['time']."<br/>"; } ?> </body> </html> Тут происходит выборка и сортировка сообщение между { } идёт вывод сообщений.
Chat.js: Код var xmlhttp; //переменная через которую будут многие функций протекать
function sub(message){ xmlhttp.onreadystatechange=function() //через xmlhttp.onreadystatechange постоянно смотрим за состоянием xmlhttp { if (xmlhttp.readyState==4 && xmlhttp.status==200) //если запрос удачно отправлен(или принят, я не помню уже) и статус равен 200, а не 404 или чему то другому { //document.getElementById("chat").innerHTML=xmlhttp.responseText; //записываем в наш див game.php весь текст который там выводится var code = document.getElementById("sms");//обновляем фрейм code.src = code.src; //обнволяем фрейм(это как бы функция в две строчки) } } xmlhttp.open("POST","server.php",true); //открываем асинхронное соединение с адресом server.php методом POST xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //отправляем заголовок, таким образом имитируя форму, POST запрос всегда требует xmlhttp.send("message=" + message); //отправляем сообщение }
Тут мы у нас обрабатывается форма сообщений и отправляется аякс(не удивляйтесь что я его отправляю без запроса на аякс он уже выполнен в condisk_server.js) и если сообщение отправлено тогда обновляем фрейм с сообщениями.
Ну и в принципе, последний файл это server.php: Код <? header("Cache-Control: no-store, no-cache"); //кеш - зло set_time_limit(0); // скрипт работает бесконечно
include 'conf.php'; //подключаем конфиг $server_session = $users->findOne(array('s' => 1)); //ищем данные с колличеством игроков $data_player = $users->findOne(array('login' => $_SESSION['login_player'])); //вытаскиваем данные пользователя $data_inventory = $inventory->findOne(array('login' => $_SESSION['login_player'])); //вытаскиваем инвентарь $number_cell = array('1', '2', '3', '4', '5', '6', '7', '8', '9');
if(isset($_POST['onload'])){ //если пришёл POST onload if($_SESSION['id'] == null){ //если айди пользователя пуст $id = $server_session['id']+1; //прибавляем игрока $_SESSION['id'] = $id; //присваиваем айди $users->update(array('s' => 1), array('$set' => array("id" => $id))); //обновляем данные с колличеством игроков $users->update(array('login' => $_SESSION['login_player']), array('$set' => array("id" => $_SESSION['id']))); //обновляем айди пользователя } } if($data_player['id'] != $_SESSION['id']){ //если айди не равен айди кототый у пользователя в базе, не равен айди который находится в сессий $users->update(array('login' => $_SESSION['login_player']), array('$set' => array("id" => $_SESSION['id']))); //обновляем айди } //echo "Ваш айди ".$_SESSION['id']; //временно выводим айди
if(isset($_POST['message'])) { $chat->insert( //запись в бд array( 'login' => $_SESSION['login_player'], //логин пользователя 'message' => $_POST['message'], //сообщение пользователя пользователя 's' => 1, //ещё данные для выборки 'time' => date("H:i:s") )); }
if(isset($_POST['nameitem'])){ foreach($number_cell as &$val){ if($data_inventory[$val] == 'invcell'){ $inventory->update(array('login' => $_SESSION['login_player']), array('$set' => array($val => $_POST['nameitem']))); //обновляем инвентарь break; } } }
if(isset($_POST['itemname'])){ $data_items = $items->findOne(array("name" => $_POST['itemname'])); //вытаскиваем предмет $cell = $_POST['cell_id']; $faithplus = $data_player['faith'] + $data_items['faith']; $hpplus = $data_player['hp'] + $data_items['hp']; $manaplus = $data_player['mn'] + $data_items['mn']; $intelligenceplus = $data_player['intelligence'] + $data_items['intelligence']; $speedplus = $data_player['speed'] + $data_items['speed']; $strengthplus = $data_player['strength'] + $data_items['strength']; if($data_items['type'] == "weapon" && $_POST['itemname'] != "invcell" && $data_items['class'] == $data_player['charaster_class']){ $inventory->update(array('login' => $_SESSION['login_player']), array('$set' => array($cell => 'invcell', "weapon" => $_POST['itemname']))); //обновляем инвентарь $users->update(array('login' => $_SESSION['login_player']), array('$set' => array("faith" => $faithplus, "hp" => $hpplus, "mn" => $manaplus, "intelligence" => $intelligenceplus, "speed" => $speedplus, "strength" => $strengthplus))); //обновляем характеристики } }
if(isset($_POST['itename'])){ $data_items2 = $items->findOne(array('name' => $_POST['itename'])); //вытаскиваем предмет $faithminus = $data_player['faith'] - $data_items2['faith']; $hpminus = $data_player['hp'] - $data_items2['hp']; $manaminus = $data_player['mn'] - $data_items2['mn']; $intelligenceminus = $data_player['intelligence'] - $data_items2['intelligence']; $speedminus = $data_player['speed'] - $data_items2['speed']; $strengthminus = $data_player['strength'] - $data_items2['strength']; foreach($number_cell as $val_cel){ if($data_inventory[$val_cel] == 'invcell' && $data_inventory['weapon'] != 'weapon'){ $inventory->update(array('login' => $_SESSION['login_player']), array('$set' => array($val_cel => $_POST['itename'], "weapon" => 'weapon'))); //обновляем инвентарь $users->update(array('login' => $_SESSION['login_player']), array('$set' => array("faith" => $faithminus, "hp" => $hpminus, "mn" => $manaminus, "intelligence" => $intelligenceminus, "speed" => $speedminus, "strength" => $strengthminus))); //обновляем характеристики break; } } }
if(isset($_POST['cell'])){ //если пришло сообщение о выбросе $cell_var = $_POST['cell']; $inventory->update(array('login' => $_SESSION['login_player']), array('$set' => array($cell_var => 'invcell'))); //выкидываем <img src="http://s12.ucoz.net/sm/1/biggrin.gif" border="0" align="absmiddle" alt="biggrin" /> } if(isset($_POST['cell2'])){ //если пришло сообщение о выбросе оружия из ячейки экипировки $cell_var2 = $_POST['cell2']; $inventory->update(array('login' => $_SESSION['login_player']), array('$set' => array($cell_var2 => 'weapon'))); //выкидываем <img src="http://s12.ucoz.net/sm/1/biggrin.gif" border="0" align="absmiddle" alt="biggrin" /> }
if(isset($_POST['hpplus']) && $data_player['count_up'] != 0){ $hpup = $data_player['hp']+1; $count_up = $data_player['count_up']-1; $users->update(array('login' => $_SESSION['login_player']), array('$set' => array("hp" => $hpup, "count_up" => $count_up))); } if(isset($_POST['mnplus']) && $data_player['count_up'] != 0){ $mnup = $data_player['mn']+1; $count_up = $data_player['count_up']-1; $users->update(array('login' => $_SESSION['login_player']), array('$set' => array("mn" => $mnup, "count_up" => $count_up))); } if(isset($_POST['spplus']) && $data_player['count_up'] != 0){ $spup = $data_player['speed']+1; $count_up = $data_player['count_up']-1; $users->update(array('login' => $_SESSION['login_player']), array('$set' => array("speed" => $spup, "count_up" => $count_up))); } if(isset($_POST['stplus']) && $data_player['count_up'] != 0){ $stup = $data_player['strength']+1; $count_up = $data_player['count_up']-1; $users->update(array('login' => $_SESSION['login_player']), array('$set' => array("strength" => $stup, "count_up" => $count_up))); } if(isset($_POST['intplus']) && $data_player['count_up'] != 0){ $intup = $data_player['intelligence']+1; $count_up = $data_player['count_up']-1; $users->update(array('login' => $_SESSION['login_player']), array('$set' => array("intelligence" => $intup, "count_up" => $count_up))); } if(isset($_POST['ftplus']) && $data_player['count_up'] != 0){ $ftup = $data_player['faith']+1; $count_up = $data_player['count_up']-1; $users->update(array('login' => $_SESSION['login_player']), array('$set' => array("faith" => $ftup, "count_up" => $count_up))); } ?>
Тут у нас идут обновления, добавления всего что было выше(инвентаря, чата, квестов), я не вижу смысла разбирать это.
Теперь поговорим о том как моделировать данные в базе(в основном нужно моделивать только items, но я расскажу про остальные:
Inventory: Код { "1": "invcell", "2": "invcell", "3": "invcell", "4": "invcell", "5": "invcell", "6": "invcell", "7": "invcell", "8": "invcell", "9": "invcell", "login": "login", "weapon": "weapon" } Название после “:”, кроме логина означают название картинки.
Chat: Код { "login": "login", "message": "Сообщение", "s": NumberInt(1), "time": "00:00:00" } По “s” вы ищите сообщения.
Items: Код { "class": "класс персонажа требующий этого предмета(если всем надо присвоить делайте 3 3 эземляра", "faith": 1, "intelligence": 2, "name": "name", "speed": 3, "strength": 3, "type": "weapon, uses or да хрен его знает, сами названия придумывайте" } Quests: Код { "desctription": "Описание", "login": "Персонаж который взял этот квест", "name_quest": "название", "prise": "награда", "xplus": "количество опыта за прохождение", "endq": "кому здавать" }
Обещанные изображения.
Уроки будут после того как я закончу одну вещь, я почти закончил с движением.
Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
Сообщение отредактировал last2424 - Вторник, 10 Февраля 2015, 16:56 |
|
| |
lyzenko | Дата: Четверг, 21 Августа 2014, 10:39 | Сообщение # 2 |
уже был
Сейчас нет на сайте
| Спасибо
|
|
| |
last2424 | Дата: Пятница, 26 Сентября 2014, 21:56 | Сообщение # 3 |
30 мл. блоков
Сейчас нет на сайте
| Блин, руки не дотягиваются до 8 части, написать JSON код наконец и доделать виликое движение.
Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
|
|
| |
Anthem | Дата: Суббота, 27 Сентября 2014, 00:07 | Сообщение # 4 |
Д'Артаньян
Сейчас нет на сайте
| Cоздание - это именительный падеж, а предлог "по" как бы намекает на дательный. Кстати, почему он "дательный"? Потому что, например, иногда хочется дать по клюву за такую орфографию
Текстовый контент для вашей игры (бесплатно) Сценарист, геймдизайнер для Вашей игры
|
|
| |
Joirik | Дата: Четверг, 29 Января 2015, 01:47 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| php можно было классами сделать
Joirik Skype:joiriki
|
|
| |
IamS | Дата: Пятница, 06 Февраля 2015, 19:25 | Сообщение # 6 |
был не раз
Сейчас нет на сайте
| В конце ожидал строчки Вот так как мы сделали, делать не нужно. Особенно доставила строчка Код header("Cache-Control: no-store, no-cache"); //отключаем кеширование, кеш - плохо . Все поняли? Кэш это плохо, ну как скажешь) Учите ООП и пишите MVC это будет грамотно и правильно.
|
|
| |
last2424 | Дата: Вторник, 10 Февраля 2015, 16:39 | Сообщение # 7 |
30 мл. блоков
Сейчас нет на сайте
| IamS, не надо меня учить. Какой MVC? Это полностью уроки для самых пещерных новичков, которые и знают что такое переменные условия и ничего не знают про остальное.
Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
|
|
| |
Эргалон | Дата: Вторник, 10 Февраля 2015, 16:44 | Сообщение # 8 |
Вездесущий
Сейчас нет на сайте
| last2424, В том и дело что для новичков, надо комментировать правильно, чтобы не задавали лишних вопросов
Кубариум Rise of the dark lords
|
|
| |
last2424 | Дата: Вторник, 10 Февраля 2015, 17:27 | Сообщение # 9 |
30 мл. блоков
Сейчас нет на сайте
| Эргалон, так никто не задаёт.
Предупреждение: всё что я написал в зачёркнутом виде является шуткой и никак не пытает обидеть того к кому обращаются.(нет)
|
|
| |
lvovand | Дата: Вторник, 10 Февраля 2015, 17:43 | Сообщение # 10 |
старожил
Сейчас нет на сайте
| Цитата last2424 ( ) так никто не задаёт значит особо рвения к учебе не возникло
"отключаем кеширование, кеш - плохо" - отключи категоричность, либо надо объяснять где кеш хорошо и где плохо, либо не делать таких утверждений.
А пещерным новичкам хочется скачать готовый исходник, поставить на бесплатный хостингер и чтобы сразу все заработало, до тонкостей всяких - как до луны на тракторе
Разработка и продвижение сайтов. Дизайн
|
|
| |
|