Форумы онлайн-игры "Сфера Миров"
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/