Я хотел узнать мнении структур кода при написании квеста. Я его начал делать... но хотел узнать все таки. Что лучше сделать квест через файлы каждый индификатор номера файла с виду "/quests/1.json" где 1 - номер инедификатор. А внутри бует разные диалог и поведения. Или лучше все делать в базу данных... Спасибо заранее..
array.php Код (Text): <?php return array( ..... );. index.php: Код (Text): <?php print_r(require_once'array.php');
К примеру l2 квесты сделано на java с html диалог... Вот и такую хотел сделать но думаю что лучше файл или базу если их будет не мало квестов а 1000 штук ручками капнуть =) --- Добавлено --- @rodent90 я такой знаю или ты думал что я не знаю? Я php хорошо просто хочу писать квест для игры. Вот и писал уже половина но мне нужен только мнения людей, а не помошь...
Знаю. У меня довольно новые планы на игру, для себя конечно же с друзьями баловаться, я с нуля написал уже пол сервера и сделал динамику пакетов, а не статичные пакеты, как сейчас которые проще простого отлавить и поновой отправлять сколько душе угодно. CatsGuard, LameGuard и другие это все обходится в 2 клика, только побороться с шифрацией трафика и все получится. Совет, сделай в сервере веб-часть которая будет слать в базу на сайте, а на сайте выводи из базы, сервер сам скажет сколько квестов и диалогов - напиши парсер серверных диалогов и байпасы, чтобы шаблонизатор соответствовал серверу и работало аналогично, а если еще и на сайте сделать такой прикол, выполнения квестов и т. д. то придется писать контроллер квестов аналогичный серверу - хотя конечно контроллер у них ужасный. l2j - написали основу тест сервера, и все начали брать за основу и плодить команды в типе мы крутые, навели марафет, крутую админку, а над сетью так никто и не работал, а там тьма...
@rodent90 Вот и хотел делать php квесты по схожему этпов диалог и выполнение задач который нужно сдать много писать придеться =)
Писать много, есть 2 решения, поднять VPN'ку, чтобы сайт видел область сервера и уже от него ваять. А можно с сервера формировать на стороне сайта.
@rodent90 не я уже написвл php квесты PHP: <?php namespace quests\tutorial; use classes\Npc; class Quest extends \Quest { protected function onInit() { } protected function onEvent(Npc $npc) { } protected function onTalk(Npc $npc, \User $user) { } }
Смысл? Максимально допустимо делать все в игровом процессе, а сайт держать информационно, а также максимально защитив от сторонних запросов Если это тебе нужно без сервера, то тогда если у тебя все написано и работает в чем вопрос? Ты пойми, чтобы там написать квест и он работал без багов и дюпов - не реально. Там в каждой затычки баг с пакеткой. --- Добавлено --- Если тебе не понятна концепция квеста, то ты так и говори, а то темы плодить начинаешь: https://php.ru/forum/threads/narabotka-kvesta.58485/ Говорю сразу, не все так просто как кажется, на самом деле тут используется гораздо больше какашек чем надо: Простой пример на lucera к примеру Tele: Код (PHP): package ru.lucera2.teleports; import ru.catssoftware.gameserver.model.actor.instance.L2NpcInstance; import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance; import ru.catssoftware.gameserver.model.quest.QuestState; import ru.catssoftware.gameserver.model.quest.Quest; import ru.catssoftware.gameserver.script.IExtensionScript; public class Tele extends Quest implements IExtensionScript { private static final String QN = "77777_tele"; private static final int NPCID = 77777, QUESTID = 77777; public Tele() { super(Tele.QUESTID, Tele.QN, "Tele"); super.addStartNpc(Tele.NPCID); super.addTalkId(Tele.NPCID); } public String onTalk(L2NpcInstance npc, L2PcInstance player) { String htmltext = ""; QuestState st = player.getQuestState(Tele.QN); if (player.getLevel() < 76) { htmltext = "Не пущю!"; } else { player.teleToLocation(17724, 114004, -11672); } st.exitQuest(true); return htmltext; } @Override public void extensionLoad() { } } При попытке разговора с NPC переместит или покажет диалог о несоответствующем уровне персонажа. Если нужны разговоры и диалоги, поможет метод onEvent который будет смотреть байпасы, передаваемые с диалога по событию клика на ссылку или кнопку - если нужно чтобы появился моб после клика рядом с вами и начал вас бить, нужно заюзать метод onSpawn на самом деле тут писанины очень много если захочется квест более качественный, да и контроллер дохловат, дырявый пакетник и вообще логики нет, вообщем побаловаться бесплатно подходит - методы on* переопределяй и смотри что они делают - изменяй или добавляй свои.