Assasin фреймы юзал как модуль для подключения к странице игры, для меня оптимальный вариант так как можно хранить все подключаемые модули не в одном файле а в разных, и подключать их к одному. А дифом в будущем подгружать такое кол-во на одной странице смертоподобно... А ajax да, к несчастью я только собираюсь в нем разбиратся, так что пока так как есть. UPD: раставил весь код по модулям, все действия работы с базой в func.php. Теперь нет лишних запросов все ясно и четко.
Сообщение отредактировал hellground - Четверг, 06 Октября 2011, 18:45
Собственно написал простейший бой без использования flasha так как в нашем случае он и не нужен для анимации. Как все будет выглядить
Бой сделан на mysql и php, стоило бы доработать его джавой так как нет динамического обновления после нажатия кнопки, но я немного поспешил и сделал так. - upd сделал без джавы нормальное обновление Хочу сказать что абсолюнто все данные защищены, кроме единственного, когда мы со страницы списка мобов переходим к бою, у нас передается айди моба методом $_GET, если мы зайдем вне боя на страницу fight.php и введем fight.php?id=1 мы попадем в бой. Надо было дописать защиту но я как всегда разленился - upd теперь передается методом POST из невидимой кнопки В остальном если вы попадает в бой к мобу то при любому обновлении/сбросе куков и остальной ерунде вы не сможете зайти куда то ещё в игре кроме боя. Урон расчитан функцией rand() минимальное и максимальное значение нашего урона находится в бд. Выбирается случайное из них и отнимается от хп моба в той же БД. Для того чтобы для всех мобы были разные сделана бд fight, как только вы жмете атаковать в БД fight сразу же появляется новая строчка с вашем боем и в ваш профиль игрока вставляется айди этого боя, если у вас(в профиле) будет находится нечто отличное от 0 то вы будете попадать в этот бой. Если кого-то заинтересовало то я могу переделать метод передачи(для защиты) и сделать лог + криты и увороты в бою.
Объяснять как это работает немного глупо я думаю, все построенно на сессии + запросы в бд, мол проверить обновить удалить и тд... Хочу добавить что все сделанно методом <iframe> и вся игра происходит на странице main.php. Так же есть условие мер предосторожности для того чтобы нельзя было играть на отдельных страницах фреймов. Вопросы можете задавать, буду иногда посещать данный форум.
Информация: Чтобы попасть в "игру" Регистрируемся на мини сайте и попадаем в main.php(если у вас не будет сессии в игру вы не зайдете) далее разберетесь Файл подключения к базе - bd.php Вам нужно будет самим сделать запрос на создание бд с названием `Site` Далее влить в неё fight.sql Скачать
Сообщение отредактировал hellground - Четверг, 06 Октября 2011, 18:39
Хочу предоставить немного теории о создании боя. Когда человек находящейся под сессией жмет на "Атаковать"(Например) выполняем INSERT в таблицу fight тоесть создаем новую строчку для каждого отдельного боя. Для удобства можно сделать отдельную таблицу Mob в которой по ячейкам можно расписать урон(пока что не max min а просто урон) хп уровень и аватарку моба, ну и ID с auto_incritment. По определению нажав на кнопку атаковать по разным мобам мы получаем разный айди(методом post или get) далее обозначаем его за переменную и сверяем с айди мобов в таблице Mob и выделяем все полезные данные UPDATE в нужные ячейки с хар ками нашего моба. Далее есть тормознутый и нетормознутый выбор Тормознутый: Методом php и javascript сделать бой в виде Удар в голову Удар в тело и тд. Например кнопками radio. как только вы прожимаете кнопку ударить пишем что то вроде $a =$ваш урон $b = $хп моба $c = $b - $a далее просто UPDATE WHERE ID="$fightid" и заменяем хп моба на это, ну и сразу за этим следует удар моба, что то вроде SELECT урон FROM таблица моба where айдимоба ="$айдимоба" далее как и в нашем случае $d = $урон моба $e = $ваше хп $f = $e - $d и UPDATE ваше хп в таблице вашего персонажа, после этого делаем обновлении javaой, конечно тут ифмрейм может спасти так как не надо будет обновлять страницу. ну и в начале в самом дописываем условие мол IF ($hpmoba == 0) { тут все что нам нужно после боя, переадресация на нашу исходную страничку игры и тд короче победа} elseif ($hpнаше == 0) { собственно проигрышь } else { тут вписываем сам бой, учтите что переменные $hpmoba $hpнаше должны быть ДО условия }
нетормознутый пример: все тоже самое на флеш
Так же можно дописать лог боя тем же способом, чуть позже возможно напишу урок на php и java
Сообщение отредактировал hellground - Среда, 05 Октября 2011, 04:04
блин, с регой что то странное) вроде с 0 её делаю и перебрасывает после реги с 1 раза в игру... проходит некоторое время и снова с 2 раза(тоесть первый раз не кидает дописываешь символ к нику и только тогда кидает) что уж делать не знаю(
сделал по иному(просто в файл GameWindow меню добавил) НО я рад что ты здесь появляешься!
Добавлено (22.03.2010, 08:35) --------------------------------------------- не надо в GameField.... у вас же верхнее меню на всех страницах будет? проще в GameWindow сделать
Все кто прошёл урок с менюшками у ассасина заметил непостоянное(можно сказать очень редкое) отображение окошек Профиль Инвентарь(и я так понимаю в будущем Журнал квестов) как я исправил эту проблему: для начала надо понять что мы хотим сделать, нам надо объединить файл menu.swf с файлом GameWindow.swf(возможно это не проффесионально но это спасает на 100%) для этого сначала убираем ссылку в GameWindow на menu(просто сотрите строки где указывается путь к menu.swf) далее добавляем всю инфу(только осторожно) из файла menu.swf в файл gamewindow.swf
Code
<?xml version="1.0" encoding="utf-8"?> <mx:Application layout="absolute" width="100%" height="100%" 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 = 250; popup.y = 100; popup.title = "Профиль"; } /* Функция которая переадресовывает на php скрипт? Который обрабатывает выход игрока */ 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:SWFLoader source="chat.swf" x="0" width="1024" height="248" top="520"/> <mx:SWFLoader source="GameField.swf" x="0" y="0" width="1024" height="520"/> <mx:Button label="Инвентарь" click="invent()" x="69" y="7" width="100" height="22"/> <mx:Button label="Квесты" x="482" y="7" width="100" height="22"/> <mx:Button label="Профиль" click="prof()" x="275" y="7" width="100" height="22"/> <mx:Button label="Выход" click="logout()" x="691" y="7" width="100" height="22"/> </mx:Application>
коментить не буду всё и так понятно, есть одно но кнопки Инвентарь Квесты Профиль и другое(что у вас будет) должны идти ПОСЛЕ строк GameField иначе GameField окажется сверху и вы не увидите окошек P.S. для того чтобы скомпилимить сиё вы должны уже иметь файлы profil.swf и inventar.swf в листе иначе ссылки не дойдут и вы не сможете скомплимить(эти файлы есть в уроках асасина)
Надеюсь вам помогло, это должно работать в 100 из 100 случаев
Добавлено (22.03.2010, 06:26) --------------------------------------------- надеюсь помогу кому нибудь... но у меня есть встречный вопрос, как связать ссесию с табличкой online offline(0,1)? тоесть если сессия игрока разорвана в базе должно меняться значение с 1 в 0(с 0 в 1 уже реализовано, теперь нужно связать с сесией выход игрока) я просто не знаю как это сделать(я не знаю где прописывается разрыв сесии) Многие не пользуются кнопкой Выход и просто закрывают страницу, (я добавил кто онлайн рядом с чатом и там отображаются ники тех кто в сети(хотя их давно там нет)) Надеюсь мне помогут...
Добавлено (22.03.2010, 07:00) --------------------------------------------- да и кто может написать функцию на смену GameField? private function cmena():void { ??????????????? ... смена должна быть с GameField.swf на GameField2.swf }
тоесть что то типа перехода с локации на локацию... если кто то даст ответ то завалю +!
Сообщение отредактировал hellground - Понедельник, 22 Марта 2010, 06:22
Ассасин а можешь ещё сделать урок по созданию торгующего нпса? можно и без кол-ва предметов у него(чтобы он продавал их до бесконечности и они не кончались(так проще)) и систему боя конечно...
Добавлено (22.03.2010, 01:42) --------------------------------------------- и можно связать таблицу online = 0 с ссесией игрока?(тоесть при разрыве(я просто не могу найти место разрыва) добавлять в онлайн 0 (тоесть сесия разорвана человек в оффлайне)))
всё работает кроме перетаскивания предметов(из слота не снять в слот не одеть из сумки) всё скопировал правильно ( или это ещё не реализовано? только через таблицу руками перетаскивается... а из игры ни как(
Сообщение отредактировал hellground - Суббота, 20 Марта 2010, 10:31
ааааа ну сделай пожалуйста этот 13 урок ! я тебя умоляю просто
Добавлено (20.03.2010, 03:31) --------------------------------------------- B1zDelKin адаптируй код пожалуйста для GameWindow.swf
Добавлено (20.03.2010, 03:42) --------------------------------------------- вроде бы в нём разобрался, только логаут надо добавить)
Добавлено (20.03.2010, 03:57) --------------------------------------------- мда gotopopup не понимает такую фукцию...
Добавлено (20.03.2010, 04:02) --------------------------------------------- с 0 тоже не работает в FlashDevelop AS3
Добавлено (20.03.2010, 04:13) --------------------------------------------- вроде разобрался немножечко хд просто FD незнает функцию popupEx для этого нужны базы Flex Globals только в инете я даже близко не нашёл как их поставить и где их скачать(вообще ничего не ищет) так что если можно объясни что за база и как её подключить к FD
Сделал небольшую браузерку в FlashDevelop(по урокам на этом сайте(но автор видно забросил это дело =( )) Есть несколько вопросов: Как сделать чтобы при первом входе в игру писало в чате(как засунуть в чат примерно знаю(но лучше напишите...)) некоторые строки? тоесть при втором входе уже их не должно показывать... вот мои исходники файл в котором отображается флэшка кидать не буду ибо там не реализовать...
private var id_script:uint; private var i:int; private var mesg:String; private var on:String; /* Функция автообновления пользователей онлайн */ private function time():void { onLine(); msg(); var timers:Timer = new Timer(10000); timers.addEventListener(TimerEvent.TIMER, onTimer); timers.start(); }
private function onTimer(e:TimerEvent):void { onLine(); } /* Функция обновления чата */ private function update():void { msg(); } /* Передача сообщения в скрипт */ public function createMess():void { id_script = 1; createMessage.send(); mess_send.text = ""; } /* Вывод сообщений на экран */ public function msg():void { id_script = 2; up.send(); } /* Сколько пользователей онлайн */ public function onLine():void { id_script = 3; online.send(); } /* Прокрутка текста */ private function scrollBody():void { // сдвигаем скролл в конец окна vuvod.verticalScrollPosition = vuvod.maxVerticalScrollPosition + 2; }
public function onResult(e:ResultEvent):void { //обработка результатов и ошибок switch (id_script) { case 1: if (int(e.result) > 0) {
} else { switch (int(e.result)) { case -1: Alert.show("Неудалось подключиться к базе данных. Попробуйте позже", "Ошибка"); break; case -2: Alert.show("Вы ничего не ввели", "Ошибка"); break; } } break; case 2: mesg = String(e.result); vuvod.htmlText = mesg; //вывод сообщений break; case 3: on = String(e.result); onlineUsers.text = on; //вывод сколько пользователей онлайн break; } }
$aHours = date("H"); //узнаем сколько часов $aMinutes = date("i"); //узнаем сколько минут $time = $aHours.":".$aMinutes; //задаем отображение времени $mess_send = $_POST['mess_send']; //получаем сообщение $write = $_SESSION['name']; //узнаем имя чара $who = $_POST['who']; //узнаем кому отправляют сообщение /* Выводим ошибку, если ничего не ввели, но нажали кнопку Отправить */ if ($mess_send == "") { echo "-2"; exit; } /* Подключаемся к БД */ $data = mysql_connect($base_name, $base_user, $base_pass); if(!$data){ echo "-1"; exit; } mysql_select_db($db_name); /* Записываем данные в БД */ $query = mysql_query("INSERT INTO chat (msg, time_msg, wrt_user, who) VALUES ('".$mess_send."', '".$time."', '".$write."', '".$who."')"); ?>
очень надеюсь на чью нибудь помощь.. на счёт гугла можно не писать ибо через него я попал к вам =) если мне смогут помочь задам следущий вопрос про локацию...
Добавлено (19.03.2010, 23:50) --------------------------------------------- никто помочь не может?(
Сообщение отредактировал hellground - Пятница, 19 Марта 2010, 14:49
помогите пожалуйста... чат не выводит сообщения всё сделал правильно... жму отправить и ничего не показывается =( обновить тоже не помогает(
Добавлено (19.03.2010, 04:23) --------------------------------------------- блин разобрался) просто у меня было send-mess а надо send_mess всё работает!