Форумы онлайн-игры "Сфера Миров" http://sow.flybb.ru/ |
|
Вопросы по написанию триггеров http://sow.flybb.ru/topic66.html |
Страница 4 из 5 |
Автор: | Мекор [ 01-12, 21:48 ] |
Заголовок сообщения: | |
А еще у тя кажецо слово "привет" бес кавычек ) |
Автор: | Xizmedar [ 02-12, 00:25 ] |
Заголовок сообщения: | |
Усем пасиб, с тем разобрался) Еще вопросик: У меня все триггера в одном коде, как мне его подключить? Код: g_trgMng.LoadMobTrigger( 103001, MTRG_INCOMING_LEADER, MobTrigger_103001 ); g_trgMng.LoadMobTrigger( 103001, MTRG_GIVE_OBJ, MobTrigger_103001 ); g_trgMng.LoadMobTrigger( 103001, MTRG_SPEAK, MobTrigger_103001 ); Если писать так, то сервер пишет, что произошло двойное подключение триггера моба. Код: g_trgMng.LoadMobTrigger( 103001, MTRG_INCOMING_LEADER, MTRG_GIVE_OBJ, MTRG_SPEAK, MobTrigger_103001 );
А если так, то пишеться, что функция не принимает 5 аргументов. Помогите плз. |
Автор: | Мекор [ 02-12, 14:26 ] |
Заголовок сообщения: | |
Нада песать черес "|": Код: g_trgMng.LoadMobTrigger( 103001, MTRG_INCOMING_LEADER | MTRG_GIVE_OBJ | MTRG_SPEAK, MobTrigger_103001 );
|
Автор: | Roko [ 03-12, 14:11 ] |
Заголовок сообщения: | |
Если посмотреть файл констант (types.h), то увидишь, что все константы на события - это степень двойки. Можно использовать и "+" вместо операции "|" (побитовое или). Результат будет такой же. Я вообще скольняюсь к разработке некоторых стандартных решений "на все случаи жизни". Например, для квест-мастера можно завести триггер, который реагирует на события: - персонаж вошел - персонаж что-то сказал - персонаж дал предмет (деньги, как вариант, но это еще + событие) для мобов такого типа определяем класс триггеров, например так: Код: class MobTrigger {
public: // Метод обработки события на вход лидера. virtual int onIncomingLeader(CIncomingLeaderMobTriggerData* data) { return 0; } // Аналогичные методы на другие события. // Процедура обработки триггера. int processTrigger(CMobTriggerData* data) { // Тут надо позоботиться об удалении данных, // но некоторые события требуют не удалять их. // Можно воспользоваться классом std::auto_ptr, подробнее в MSDN. switch (data->m_type) { case MTRG_INCOMING_LEADER: return onIncomingLeader( (CIncomingLeaderMobTriggerData*) data ); // Удаление data будет сделано в деструкторе переменной std::auto_ptr // другие case для триггеров моба. } // Необязательно делать сдесь return, можно ипользовать default в операторе switch return 0; } // Метод возвращает флаги обработчика // второй пареметр для g_trgMng.LoadMobTrigger virtual int getTriggerFlags() { return 0; } // Статический метод обработки триггера, обеспечивает вызов метода processTrigger // третий пареметр для g_trgMng.LoadMobTrigger static int callTrigger(CMobTriggerData* data) { // Тут не скажу ... возможно потом } }; class QuestMasterTrigger : public MobTrigger { public: int onIncomingLeader(CIncomingLeaderMobTriggerData* data) { // Логика триггера. return 0; } int onSpeak(CSpeakMobTriggerData* data) { // Логика триггера. return 0; } int onGiveObject(CGiveObjMobTriggerData* data) { // Логика триггера. return 0; } int getTriggerFlags() { return (MTRG_INCOMING_LEADER | MTRG_SPEAK | MTRG_GIVE_OBJ); } }; Как прикрепить эти методы к мобу я не скажу, думайте сами Ну или скажу, потом... Используйте наследование и получите отличный механизм написания триггеров. А так же, значительно более понятный и читаемый код. Таких шаблонов я насчитал как минимум 10, и привел один из них в качестве примера. |
Автор: | Багатур [ 05-12, 00:10 ] |
Заголовок сообщения: | |
Эх, мои мозги окончательно испорчены поганым VBA... Обидно примерно понимать, как работает - но тратить несколько суток, чтобы изобразить что-либо хотя бы отдалённо похожее... Это я к тому, что кодеры (кодер?) Сферы - башковитые ребята) Как и любой нормальный человек, всегда уважал тех, кто может то, что не могу сделать я. Наверное, именно поэтому получилось то, что получилось... |
Автор: | Roko [ 05-12, 00:28 ] |
Заголовок сообщения: | |
Повторюсь, кодер - это чернорабочий, он ничего не проектирует, он просто умеет "класть кирпич". Здание, которое выкладывают каменьшики, они не проектируют... С кодом совы, кодеры не работают. Хочу лишний раз намекнуть, что назвать программиста кодером - это то же самое что архитектора - каменьщиком |
Автор: | Багатур [ 05-12, 02:12 ] |
Заголовок сообщения: | |
Roko писал(а): он просто умеет "класть кирпич".
а я вот не умею... П.С. А куда дели у Роки "падшего майора"?) |
Автор: | Jaguar [ 23-12, 09:12 ] |
Заголовок сообщения: | |
сори вопрос может не в тему.. Я немного знаком с Visual Basic , Pascal - c их помощью можно воять триггеры ? .. полный ньюб в этом вопросе ... Около полугода назад ооочень хотел сделать зону , но неумение писать триги - остановило .. |
Автор: | Эоай [ 23-12, 14:58 ] |
Заголовок сообщения: | |
Необязательно писать триги чтоб делать зону - качай редактор пиши зону опиши триги отошли иммам сделают |
Автор: | Alz [ 23-12, 15:30 ] |
Заголовок сообщения: | |
Эоай писал(а): Необязательно писать триги чтоб делать зону - качай редактор пиши зону опиши триги отошли иммам сделают
При таком варианте вероятность подключения немногим выше 0. На просьбы написать триги к зоне следует ответ "дождаться своей очереди" что конечно логично, но сути не меняет... Если хочется увидеть свою зону подключенной, лучше написать триги самому или попросить знакомых |
Автор: | Эоай [ 23-12, 15:33 ] |
Заголовок сообщения: | |
если триги не сложные и в количестве 2-4 штук . в данном отрезке времени вероятность подключения порядка 80% а триги будут все равно проверятся - а это столько же работы |
Автор: | Мекор [ 23-12, 15:42 ] |
Заголовок сообщения: | |
Цитата: сори вопрос может не в тему.. Я немного знаком с Visual Basic , Pascal - c их помощью можно воять триггеры ?
На скока йа знаю низя. Триггера пишуцо на С++. |
Автор: | Грак [ 25-12, 10:54 ] |
Заголовок сообщения: | |
"Воять" триггеры можно на чём угодно. Ваять триггеры для Сферы Миров можно только на Borland С++ П.С. под словом "триггеры" подразумеваются внутренние триггеры для игровых зон, а не то, чья совокупность иначе называется "конфиг" |
Автор: | Монег [ 25-12, 11:59 ] |
Заголовок сообщения: | |
А при чем тут Borland? Мне вот, например, так и не удалось скомпилить триггер с помощью компилера из поставки Builder. Может, просто руки кривые. Короче, триггера пишутся на C++ и компилятся микрософтовским компилером (ну то есть им-то точно). |
Автор: | Undertacker [ 25-12, 12:00 ] |
Заголовок сообщения: | |
Апочему только на Borland С++? В вижуал студио нельзя воять? Авообще тригера представляют собой dll, и имея достаточно извращенный ум можно попробовать написать тригер на другом языке. (а может я ошибаюсь). |
Страница 4 из 5 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |