ИГРОДЕЛ
Войдите на сайт или зарегистрируйтесь!!!

Урок 8 Создание инвентаря (php, FD, MySQL)

Перейти вниз

Урок 8 Создание инвентаря (php, FD, MySQL)

Сообщение автор Admin в Сб Фев 20, 2010 3:24 pm

Вот и 8 урок позади (для меня ), ох и намучался я с ним, но сделал. Только есть один баг, который я оставляю для вас, надеюсь вы с ним справитесь, а сам баг заключаеться в том, что на какой предмет не нажимай, переместиться только первый в списке. Если не поняли что я написал, то когда сделаете урок и будете его тестировать, то поймете. Также я не сделал изменения характеристик персонажа при надевании или снятии предмета, надеюсь вы справитесь сами.
Начнем с того что нужно добавить новые таблицы в нашу БД, эти таблицы я взял с уроков http://www.blitz-school.info/ , надеюсь разработчики простят меня за сие «злодеяние».
Заходим в phpMyAdmin в нашу БД testgame, во вкладку SQL и записываем код:

Code
CREATE TABLE `items_list` (
`il_id` INT(4) unsigned NOT NULL AUTO_INCREMENT, /*идентификатор предмета*/
`item_type` INT DEFAULT 0, /*Тип предмета : напр. 1 = меч, 2-топор....*/
`item_name` CHAR(50) NOT NULL, /*Название предмета*/
`item_slot_name` CHAR(15) NOT NULL DEFAULT '', /*Слот предмета*/
`item_image` CHAR(32), /*путь к картинке предмета и ее имя*/
`atk` INT(5),
`def` INT(5),
`lov` INT(5),
`life` INT(5),
PRIMARY KEY (`il_id`),
KEY(`item_type`)
) TYPE=MyISAM;

Данная таблица будет содержать весь список предметов, для добавления предметов в таблицу напишем небольшой скрипт, назовем его doc.php:

Code
<?php
include "conf.php";

$data = mysql_connect($base_name, $base_user, $base_pass);
mysql_select_db($db_name);

$query = mysql_query("SELECT * FROM items_list");

if ($_POST['next']){
mysql_query("INSERT INTO items_list (item_type, item_name, item_slot_name, item_image, atk, def, lov, life) VALUES ('".$_POST['item_type']."', '".$_POST['item_name']."', '".$_POST['item_slot_name']."', '".$_POST['item_image']."', '".$_POST['atk']."', '".$_POST['def']."', '".$_POST['lov']."', '".$_POST['life']."')");
}

?>
<form method="post" action="">
Тип:(1-меч, 2-топор...) <input type="text" name="item_type"><br>
Название: <input type="text" name="item_name"><br>
Слот предмета: <input type="text" name="item_slot_name"><br>
Картинка: <input type="text" name="item_image"><br>
Атака+ : <input type="text" name="item_atk"><br>
Защита+ : <input type="text" name="item_def"><br>
Жизни+ : <input type="text" name="item_life"><br>
Ловкость+ : <input type="text" name="item_lov"><br>
<input type="submit" name="next" value="Next"><br>
</form>
<?php
while ($info = mysql_fetch_array($query)){
echo $info['item_type'].", ".$info['item_name'].", ".$info['item_slot_name'].", <img src='".$info['item_image']."'>, ".$info['atk'].", ".$info['def'].", ".$info['lov'].", ".$info['life']."<br>";
}
?>

Добавляем в БД есче таблицы:

Code
CREATE TABLE `items`(
`it_id` BIGINT(20) unsigned NOT NULL auto_increment, /*уник. идентификатор предмета*/
`il_id` INT(4) unsigned NOT NULL, /* ID предмета в справочнике предметов*/
`item_owner` BIGINT(20) DEFAULT 0 NOT NULL, /*владелец предмета (ID игрока или номер системного объекта)*/
`item_position` INT REFERENCES itemposition_list(`id`), /*позиция предмета*/
PRIMARY KEY (`it_id`),
KEY (`item_owner`)
) TYPE=MyISAM;
/* Справочник позиций предмета */
CREATE Table `itemposition_list`(
`ip_id` INT(4) unsigned NOT NULL AUTO_INCREMENT, /*идентификатор позиции*/
`item_pos_name` CHAR(30), /*Название позиции*/
PRIMARY KEY (`ip_id`)
) TYPE=MyISAM;

INSERT INTO itemposition_list (item_pos_name) VALUES('Рюкзак игрока');
INSERT INTO itemposition_list (item_pos_name) VALUES('Слот игрока');

Теперь приступим к написанию кода. Откройте FD и создайте новый файл, переименовав его на inventar.mxml:

Code
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow showCloseButton="true" layout="absolute" width="250" height="300" close="handleClose(event)" creationComplete="cell()" xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
import mx.managers.PopUpManager;
import mx.events.CloseEvent;
import mx.rpc.events.ResultEvent;

private var dataXML:XML = new XML;
/* Функция закрытия всплывающего окна */
public function handleClose(evt:CloseEvent):void {
PopUpManager.removePopUp(this);
}
/* Функция отправки данных для перенесения предмета из инвентаря в слот игрока */
public function menu_drop():void {
inventfun.send();
}
/* Функция отправки данных для отображения предметов */
public function cell():void {
invent.send();
}

public function onResult(e:ResultEvent):void {
dataXML = XML(e.result);
inv_img_0.load(String(dataXML.inv_img_0));
inv_img_1.load(String(dataXML.inv_img_1));
inv_img_2.load(String(dataXML.inv_img_2));
inv_img_3.load(String(dataXML.inv_img_3));
inv_img_4.load(String(dataXML.inv_img_4));
inv_img_5.load(String(dataXML.inv_img_5));
}
]]></mx:Script>
<mx:HTTPService id="invent" useProxy="false" method="POST" result="onResult(event)" resultFormat="xml" url="inv.php"/>
<mx:HTTPService id="inventfun" useProxy="false" method="POST" url="invfun.php"/>
<mx:Image id="inv_img_0" click="menu_drop()" x="15" y="12" width="50" height="50"/>
<mx:Image id="inv_img_1" click="menu_drop()" x="78" y="12" width="50" height="50"/>
<mx:Image id="inv_img_2" click="menu_drop()" x="150" y="12" width="50" height="50"/>
<mx:Image id="inv_img_3" click="menu_drop()" x="15" y="94" width="50" height="50"/>
<mx:Image id="inv_img_4" click="menu_drop()" x="98" y="94" width="50" height="50"/>
<mx:Image id="inv_img_5" click="menu_drop()" x="160" y="94" width="50" height="50"/>
</mx:TitleWindow>

Как видите это всплывающее окно, для его отображения изменим немного menu.mxml:

Code
<?xml version="1.0" encoding="utf-8"?>
<mx:Application layout="absolute" width="392" height="22" xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
import flash.net.URLRequest;
import mx.managers.PopUpManager;

public function prof():void {
var popup:profil = profil(PopUpManager.createPopUp(this, profil, false));
popup.x = 140;
popup.y = 100;
popup.title = "Профиль";
}

private function logout():void {
var logoutLink:URLRequest = new URLRequest("logout.php");
navigateToURL(logoutLink, "_self");
}

public function invent():void {
var popupInv:inventar = inventar(PopUpManager.createPopUp(this, inventar, false));
popupInv.x = 410;
popupInv.y = 100;
popupInv.title = "Инвентарь";
}
]]></mx:Script>
<mx:Button click="prof()" label="Профиль" x="0" y="0" width="80" height="22"/>
<mx:Button click="invent()" label="Инвентарь" x="80" y="0" width="90" height="22"/>
<mx:Button label="Журнал квестов" x="170" y="0" width="123" height="22"/>
<mx:Button click="logout()" label="Выход" x="292" y="0" width="100" height="22"/>
</mx:Application>

Мы добавили при нажатии на кнопку отображаеться всплывающее окно с инвентарем.
Приступим к написанию скрипта, который будет отображать предметы в инвентаре, назовем его inv.php:

Code
<?php
session_start();

include "conf.php";

$data = mysql_connect($base_name, $base_user, $base_pass);
mysql_select_db($db_name);

$query = mysql_query("SELECT * FROM users WHERE name='".$_SESSION['name']."'");
$row = mysql_fetch_array($query);
$id = $row["id_user"];

// Отобразим содержимое инвентаря
$query1 = mysql_query("SELECT i.it_id, i.item_position, il.item_type, il.item_image, il.item_name FROM items i inner join items_list il on il.il_id=i.il_id WHERE item_owner='".$id."' and item_position='1'");
echo "<?xml version='1.0'?>";
echo "<inv>";
$i = 0;
while ($row1 = mysql_fetch_array($query1)) {
$SlotItemID = $row1["it_id"];
$ItemType = $row1["item_type"];
$ItemImage = $row1["item_image"];
$ItemName = $row1["item_name"];
echo "<inv_img_".$i.">".$ItemImage."</inv_img_".$i.">";
$i++;
}
echo "</inv>";
?>

И добавим скрипт, который будет обрабатывать перемещение предмета из инвентаря в слот чара, назовем его invfun.php:

Code
<?php
session_start();

include "conf.php";

$data = mysql_connect($base_name, $base_user, $base_pass);
mysql_select_db($db_name);

$query = mysql_query("SELECT * FROM users WHERE name='".$_SESSION['name']."'");
$row = mysql_fetch_array($query);
$id = $row["id_user"];

$query1 = mysql_query("SELECT i.it_id, i.item_position, il.item_type, il.item_image, il.item_name FROM items i inner join items_list il on il.il_id=i.il_id WHERE item_owner='".$id."' and item_position='1'");
$row1 = mysql_fetch_array($query1);
$SlotItemID = $row1["it_id"];
//Перемещаем предмет в слот чара
$query2 = mysql_query("UPDATE items SET item_position='2' WHERE it_id='".$SlotItemID."'");
?>

Теперь напишем отображение слотов в Профиле чара, для этого изменим сам профиль, открываем profil.mxml:

Code
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow showCloseButton="true" layout="absolute" width="250" height="400" close="handleClose(event)" creationComplete="profileComplete()" xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
import mx.managers.PopUpManager;
import mx.events.CloseEvent;
import mx.rpc.events.ResultEvent;

private var dataXML:XML = new XML;

public function profileComplete():void {
profileChar.send();
invout.send();
}

public function menu_drop():void {
invinp.send();
}

public function onResult(e:ResultEvent):void { //обработка результатов и ошибок
dataXML = XML(e.result);
avatar_img.load(String(dataXML.avatar[0]));
nameChar.text = dataXML.name[0];
atk.text = dataXML.atk[0];
def.text = dataXML.def[0];
lov.text = dataXML.lov[0];
life.text = dataXML.life[0];
lvl.text = dataXML.lvl[0];
exp.text = dataXML.exp[0];
}

public function onResult2(e:ResultEvent):void { //обработка результатов и ошибок
dataXML = XML(e.result);
inv_img_0.load(String(dataXML.inv_img_0));
inv_img_1.load(String(dataXML.inv_img_1));
inv_img_2.load(String(dataXML.inv_img_2));
inv_img_3.load(String(dataXML.inv_img_3));
}

private function handleClose(evt:CloseEvent):void {
PopUpManager.removePopUp(this);

}
]]></mx:Script>
<mx:HTTPService id="profileChar" useProxy="false" method="POST" result="onResult(event)" resultFormat="xml" url="profil.php"/>
<mx:HTTPService id="invout" useProxy="false" method="POST" result="onResult2(event)" resultFormat="xml" url="invout.php"/>
<mx:HTTPService id="invinp" useProxy="false" method="POST" url="invinp.php"/>
<mx:Label id="nameChar" text="1" textAlign="center" x="4" y="6" width="220" height="18"/>
<mx:Label id="atk" text="2" x="192" y="40" width="30" height="18"/>
<mx:Label id="def" text="3" x="192" y="58" width="30" height="18"/>
<mx:Label id="lov" text="4" x="192" y="75" width="30" height="18"/>
<mx:Label id="life" text="5" x="192" y="93" width="30" height="18"/>
<mx:Label id="lvl" text="6" x="67" y="29" width="30" height="18"/>
<mx:Label id="exp" text="7" x="180" y="111" width="45" height="18"/>
<mx:Image id="avatar_img" x="12" y="54" width="120" height="200"/>
<mx:Label text="Атака" x="140" y="40" width="38" height="18"/>
<mx:Label text="Защита" x="139" y="57" width="47" height="18"/>
<mx:Label text="Ловкость" x="134" y="75" width="55" height="18"/>
<mx:Label text="Жизни" x="141" y="94" width="40" height="18"/>
<mx:Label text="Опыт" x="140" y="111" width="36" height="18"/>
<mx:Image id="inv_img_0" click="menu_drop()" x="8" y="255" width="50" height="50"/>
<mx:Image id="inv_img_1" click="menu_drop()" x="60" y="255" width="50" height="50"/>
<mx:Image id="inv_img_2" click="menu_drop()" x="115" y="255" width="50" height="50"/>
<mx:Image id="inv_img_3" click="menu_drop()" x="167" y="255" width="50" height="50"/>
</mx:TitleWindow>

Теперь отобразим предметы в слотах, создадим файл invout.php:

Code
<?php
session_start();

include "conf.php";

$data = mysql_connect($base_name, $base_user, $base_pass);
mysql_select_db($db_name);

$query = mysql_query("SELECT * FROM users WHERE name='".$_SESSION['name']."'");
$row = mysql_fetch_array($query);
$id = $row["id_user"];

// Отобразим содержимое слотов
$query1 = mysql_query("SELECT i.it_id, i.item_position, il.item_type, il.item_image, il.item_name FROM items i inner join items_list il on il.il_id=i.il_id WHERE item_owner='".$id."' and item_position='2'");
echo "<?xml version='1.0'?>";
echo "<inv>";
$i = 0;
while ($row1 = mysql_fetch_array($query1)) {
$SlotItemID = $row1["it_id"];
$ItemType = $row1["item_type"];
$ItemImage = $row1["item_image"];
$ItemName = $row1["item_name"];
echo "<inv_img_".$i.">".$ItemImage."</inv_img_".$i.">";
$i++;
}
echo "</inv>";
?>

И осталось отобразить функцию перемещения предметов в инвентарь, создадим файл invinp.php:

Code
<?php
session_start();

include "conf.php";

$data = mysql_connect($base_name, $base_user, $base_pass);
mysql_select_db($db_name);

$query = mysql_query("SELECT * FROM users WHERE name='".$_SESSION['name']."'");
$row = mysql_fetch_array($query);
$id = $row["id_user"];

$query1 = mysql_query("SELECT i.it_id, i.item_position, il.item_type, il.item_image, il.item_name FROM items i inner join items_list il on il.il_id=i.il_id WHERE item_owner='".$id."' and item_position='2'");
$row1 = mysql_fetch_array($query1);
$SlotItemID = $row1["it_id"];
//Перемещаем предмет в инвентарь
$query2 = mysql_query("UPDATE items SET item_position='1' WHERE it_id='".$SlotItemID."'");
?>

Вот с инвентарем закончили, надеюсь вы справились уроком. Я думаю вы и так знаете что означает та или иная функция, так как в предыдущих уроках я описывал их. Wink
avatar
Admin
Admin

Сообщения : 92
Очки : 280
Репутация : 36
Дата регистрации : 2010-02-20

Посмотреть профиль http://game-dll.mirbb.net

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения