XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Как лучше заюзать дефайн на конструкцию?
<NPC1: Stage1> = if (Quest_Unit == Npc_Unit[1] and quest_pos == 1) then
<NPC1: Stage2> = if (Quest_Unit == Npc_Unit[1] and quest_pos == 2) then
Офк пробовал делать так:
<NPC1:> = if (Quest_Unit == Npc_Unit[1]
<Stage2> = and quest_pos == 2) then
Но не компилится.
Есть идеи? Мне не проблемно нагенерить хоть миллион дефайнов, другое дело что препроцессор столько(больше ~10к вроде) не тянет:\
Старый 29.05.2012, 22:32
adic3x

offline
Опыт: 108,439
Активность:
Не используется в макросах не закрытые блоки. Такой макрос полностью ломает синтаксис.
Старый 29.05.2012, 23:26
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Так то оно понятно, препроцессор сам закрывает открытый блок, а последующая конструкция ругается матами:)
Если нету никакой возможной конструкции, то мб можно что то поделать с ограничением на кол-во дефайнов?:)
Старый 29.05.2012, 23:31
ScorpioT1000
Работаем
online
Опыт: отключен
ты хочешь 10 000 ифов в одной функции, а про лимит операций не, не слышали.
Старый 30.05.2012, 01:33
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
ScorpioT1000:
ты хочешь 10 000 ифов в одной функции, а про лимит операций не, не слышали.
Т.е. это не у препроцессора лимит на кол-во дефайнов, а у функции максимум ~10к?
Старый 30.05.2012, 10:35
ScorpioT1000
Работаем
online
Опыт: отключен
Старый 30.05.2012, 19:21
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
ScorpioT1000,понял, кстати сам ж юзаю экзекут. Просто не думал что препроцессор на столько зависим от ограничений варовских.
В общем сейчас попробую :)
thx;)
Старый 30.05.2012, 20:18
ScorpioT1000
Работаем
online
Опыт: отключен
Причем тут препроцессор?
Старый 30.05.2012, 20:28
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Наверно при том что обсуждаем как раз его:)
#define
{
<NPC1: Stage1> = if (Quest_Unit == Npc_Unit[1] and quest_pos == 1) then
...
}
В моих представлениях это обычный реплейсер. Который выполняется ДО работы обычного компилятора. И по моим представлениям после работы препроцессора весь этот код должен подчиститься за ненадобностью.
В чем я не прав?
Старый 30.05.2012, 21:02
ScorpioT1000
Работаем
online
Опыт: отключен
ну да, тока зачем тебе это
#define NPC_A_STAGE_B(A, B) = { if(Quest_Unit == Npc_Unit[A] and quest_pos == B) then }
если все можно сделать 1 строкой ?
Старый 30.05.2012, 21:15
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Так я и спрашивал, как сделать это по человечески:) Когда давно стояла эта проблема, я просто не стал парится, и сгенерил, на мой взгляд дофига и не парился. А тут внезапно не хватило этого дофига:)
Сча затестим-с:)
Старый 30.05.2012, 21:22
ScorpioT1000
Работаем
online
Опыт: отключен
На самом деле, я бы сделал что-то вроде
#define IS_NPC_N_STAGE_M(N, M) = (Quest_Unit == Npc_Unit[N] and quest_pos == M)
Чтобы потом по человечески понятный код был:
if ( IS_NPC_N_STAGE_M(i, j) ) {

}
Старый 30.05.2012, 21:27
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Ну я вот так вот сделал:
IsNpcIdAndStage(183,1)
        TriggerData
           MeanAction
                SpawnQuestMob(Bandit,10, 940. , -23600. , 45. , 500., null, "Вы убили бандитов", "Вы упустили время, бандиты скрылись")
           EndAction
        EndTriggerData
        
        DialogeData
            npc_ask ="Чертовы разбойники! что бы им пусто было!"
            quest_tips = "Разберитесь с бандитами"
            strHELP = "Детали миссии"
            strMEAN = "Принять миссию"
            strEXIT = "Отказатся от миссии"
            qweHELP = "Старик, что случилось?"
            qweMEAN = "Хорошо, я отомщу за твоего сына"
            qweEXIT = "Извини, но боюсь один я не справлюсь..."
            ansHELP = "Недавно на нашу деревню напала банда, разграбила нашу деревшку, мы уже привыкли, но мой сын не хотел с этим мирится, и выступил против них... и погиб... прошу, отмости, ты же шиноби"
            ansMEAN = "Отомсти им за смерть моего сына..."
            ansEXIT = "Значит я сам отомщу им за смерть моего сына"
        EndDialogeData
Старый 30.05.2012, 21:42
ScorpioT1000
Работаем
online
Опыт: отключен
Логично. Только это плоские говноквесты лол =) я у себя мутил набор гуи триггеров, которые на самом деле работали по системе квестов, что-то вроде:
#define private qtype = int
enum(qtypes) { Q_UNKNOWN, Q_KILLING, Q_TALKING, Q_WALKING, Q_GATHERING }

 void Qnew(string name, string description, qtype QuestType, unit QuestQuester, bool isQuestImportant)
 void Qset(string name, string description, bool show_fx = true)
 void Qend(string name, bool failed = false)
И типа при каждой речи там камера появлялась на удаленном расстоянии перед персом и медленно вращалась на 5-10 градусов вокруг него. Ну и можно было задать, какой из 16 участников диалога отвечает (задаются при эвенте) и аудиофайл озвучки.
Старый 30.05.2012, 21:52
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Nerevar, thx ;)
ScorpioT1000:
Только это плоские говноквесты лол =)
» тык
фича не в диалогах офк:)
scope SupportHome initializer Init 

StartQuest
    QuestHead
        quest_single = true
        quest_repeat = false
        quest_num = 82
        quest_name = "Больной"
        quest_req_rep = 50
        quest_rang = E
        quest_for_clan = konoha_shinobi 
        quest_vs_clan = none
        quest_cond = 0
        quest_cond_other = false
        quest_cond_status = unstarted
        quest_stages = 18
        quest_rew = 'I00G'
        quest_exp = 0
        quest_money = 100
        quest_npc[0] = Npc_Unit[98];
        quest_npc[2] = Npc_Unit[12];
        quest_npc[4] = Npc_Unit[44];
        quest_npc[5] = Npc_Unit[44];
        quest_npc[6] = Npc_Unit[44];
        quest_npc[8] = Npc_Unit[181];
        quest_npc[9] = Npc_Unit[44];
        quest_npc[10] = Npc_Unit[3];
        quest_npc[12] = Npc_Unit[14];
        quest_npc[14] = Npc_Unit[15];
        quest_npc[16] = Npc_Unit[15];
        quest_npc[18] = Npc_Unit[98];
    EndQuestHead
   
    NPC98: Stage1 
    
        TriggerData
            MeanAction
                CreateQuestAdventure(5000.,-12000., 4000., "Наконец я добрался до селения Листа, теперь нужно найти хорошего медика... наверно стоит узнать у жителей где можно найти медика", "");
            EndAction
        EndTriggerData
        
        DialogeData
            npc_ask ="Вы шиноби? Выполни пожалуйста мою просьбу, я очень хорошо заплачу!"
            quest_tips = "Отправтесь в селение Листа и найдите там хорошего медика."
            strHELP = "Детали миссии"
            strMEAN = "Продолжить миссию"
            strEXIT = "Отказатся от миссии"
            qweHELP = "Хорошо заплатишь говоришь? Интересно. И что же ты хочешь что бы я сделал?"
            qweMEAN = "Что ж, у меня сегодня хорошее настроение, так что я помогу тебе."
            qweEXIT = "У меня нет настроения решать чужие проблемы, ты уж извини."
            ansHELP = "Спаси моего брата, он внезапно заболел, местные врачи не могут ему помочь. Возможно врач из селения Листа мог бы ему помочь."
            ansMEAN = "Поторопись, неизвестно сколько еще мой брат продержится."
            ansEXIT = "Чертовы шиноби..."
        EndDialogeData
        
    NPC12: Stage3 
    
        TriggerData
            MeanAction
                CreateQuestAdventure(3900.,-13000., 500., "Так, я у стадиона, но где же искать этого врача? Нужно поспрашивать у местных... Хм, может быть эта девушка знает.", "");
            EndAction
        EndTriggerData
        
        DialogeData
            npc_ask ="Тебе что то нужно?"
            quest_tips = "Отправляйтесь к стадиону и отыщите медика"
            strMEAN = "Спросить о враче"
            qweMEAN = "Да. Я ищу хорошего врача, не знаешь где его можно найти?"
            ansMEAN = "Да, есть тут неподалеку хороший врач, он живет неподалеку от стадиона"
        EndDialogeData
        
    NPC44: Stage5 
    
        TriggerData
        EndTriggerData
        
        DialogeData
            npc_ask ="*Девушка занимается своей работой и не замечает вас*"
            strMEAN = "Спросить о враче"
            qweMEAN = "Эй сестренка, не подскажешь где я могу найти врача? Мне сказали, что он живет тут неподалеку от стадиона."
            ansMEAN = "Да, он живет неподалеку, но сейчас его тут нету."
        EndDialogeData
        
    NPC44: Stage6 
    
        TriggerData
        EndTriggerData
        
        DialogeData
            npc_ask ="*Девушка занимается своей работой и не замечает вас*"
            quest_tips = "Отправляйтесь к стадиону и отыщите врача"
            strMEAN = "Спросить о местонахождении врача"
            qweMEAN = "А немогла бы ты мне подсказать, где его можно найти?"
            ansMEAN = "Хорошо, скажу, но только если ты поможешь мне немного с работой, видишь, я тут зашиваюсь просто."
        EndDialogeData
        
    NPC44: Stage7 
    
        TriggerData
            CreateQuestAdventureWithTrap(2400., -15700., 350., Bandit, 5, "Вы попали в западню устроенную бандитами. Разберитесь с ними и поторопитесь узнать о судьбе врача у травницы.")
            GoldAction
               PayMoney(150)
            EndAction
        EndTriggerData
        
        DialogeData
            npc_ask ="*Девушка занимается своей работой и не замечает вас*"
            quest_tips = "Отыщите травницу, она должна быть недалеко от селения Листа"
            strGOLD = "Купить рамен (150 рё)"
            strMEAN = "Помочь с работой"
            strEVIL = "Применить угрозу"
            qweGOLD = "Хорошо, давай так, я куплю у тебя порцию рамена, а ты мне расскажещь, идет?"
            qweMEAN = "Хорошо, чем я могу тебе помочь?"
            qweEVIL = "Слушай, сестричка, я на миссии и я не в настроении, по этому не шути со мной и скажи где этот чертов врач, иначе мне придется поговорить с тобой по другому"
            ansGOLD = "Что ж, клиенту я не могу отказать, медик ушел к травнице, она живет рядом с селением, давай я тебе покажу на карте, а то ненайдешь же."
            ansMEAN = "Да ладно, я же пошутила, сейчас я тебе скажу куда идти"
            ansEVIL = "*Угроза подействовала, и девушка быстро рассказала где можно найти травника*"
        EndDialogeData
        
    NPC181: Stage9 
    
        TriggerData
        EndTriggerData
        
        DialogeData
            npc_ask ="Тебе что то нужно, может быть травы или что то еще?"
            quest_tips = "Вернитесь в селение и узнайте, вернулся ли врач"
            strMEAN = "Спросить о судьбе врача"
            qweMEAN = "Послушайте, я ищу врача, мне сказали что он пошел к вам за травами, он приходил к вам?"
            ansMEAN = "Да, заходил что бы купить лечебных трав, но он уже ушел. Ты видимо разменулся с ним."
        EndDialogeData
        
    NPC44: Stage10 
    
        TriggerData
        EndTriggerData
        
        DialogeData
            npc_ask ="*Девушка как обычно занимается своей работой и не замечает вас*"
            quest_tips = "Отправляйтесь к северным воротам и узнайте у стражников о враче"
            strMEAN = "Спросить пришел ли врач"
            qweMEAN = "Эй, сестренка, врач случайно не приходил? А то мне травница сказала, что он уже ушел назад."
            ansMEAN = "Нет, он еще не приходил, возможно он пошел к своим пациентам. Что бы наверняка узнать, спроси у стражников у южных ворот селения, они должны были его видеть, и возможно знают где он"
        EndDialogeData
        
    NPC3: Stage11
    
        TriggerData
            MeanAction
                CreateQuestAdventure(3270., -15900., 350., "Вы нашли  место, где судя по следам совсем недавно было совершено нападение. Судя по всему кто-то напал на врача и увели куда то его. Благодаря следам вы сможете выследить их", "");
            EndAction
        EndTriggerData
        
        DialogeData
            npc_ask ="Эй, у тебя какое то дело ко мне?"
            quest_tips = "Возможно с врачем что то случилось по дороге, возможно вы найдете подсказку если внимательно обследуете маршрут по которому шел врач."
            strMEAN = "Спросить о враче"
            qweMEAN = "Меня послали в селение что бы я нашел врача, и вот никак немогу с ним встретится, он случаем тут не проходил?"
            ansMEAN = "Да, он сегодня он проходил тут, кажется к травнице отправился, но он еще не возвращался."
        EndDialogeData
        
    NPC14: Stage13
    
        TriggerData
            MeanAction
                CreateQuestAdventure(-3950., -3300., 350., "Вы нашли крайне подозрительное место, нужно его исследовать, возможно врач там", "");
            EndAction
        EndTriggerData
        
        DialogeData
            quest_tips = "*Вы заметили что старик явно врет* Обследуйте город, возможно вы найдете какие нить зацепки"
            npc_ask ="Кхе-кхе, вам что то нужно, молодой человек?"
            strMEAN = "Распросить о городе"
            qweMEAN = "Старик, тут случаем не проходила группа людей вместе со стариком-врачем?"
            ansMEAN = "Да нет,  не видел я ничего."
        EndDialogeData

    NPC15: Stage15 
    
        TriggerData
            MeanAction
                Escort(Npc_Unit[15],-3950., -3300., "Вы успешно выбрались из пещеры. Расскажите врачу о своей проблеме", "Врач не доставлен вовремя, миссия провалена", "Врач",'h00G')
            EndAction
        EndTriggerData
        
        DialogeData
            npc_ask ="*Эй! Вы шиноби листа? Меня похитили эти бандиты! Спасите меня!*"
            quest_tips = "Выберитесь из пещеры"
            strMEAN = "Спасти"
            qweMEAN = "Я пришел за вами, давайте выбираться отсюда и поскорее"
        EndDialogeData
        
    NPC15: Stage17 
    
        TriggerData
            MeanAction
                Escort(Npc_Unit[15],12940., -23900., "Вы успешно добрались до деревушки. Поговорите со старейшиной.", "Врач не доставлен вовремя, миссия провалена", "Врач",'h00G')
            EndAction
        EndTriggerData
        
        DialogeData
            npc_ask ="Вы сказали, что пришли за мной, у вас какое то дело ко мне?"
            quest_tips = "Отправляйтесь к северным воротам и узнайте у стражников о враче"
            strMEAN = "Рассказать о проблеме"
            qweMEAN = "Старейшина одной деревни поручил мне миссию найти хорошего врача для его больного брата. В селении листа я узнал что вы лучший врач в округе, по этому я и искал вас. Не могли бы вы отправится со мной к больному?"
            ansMEAN = "Хорошо, я вам помогу, как никак я обязан за спасение. Но нам нужно торопится, я не думаю что бандиты оставят нас просто так. Они хотели заставить меня изготоваливать наркотики и мне кажется от своей идеи они так просто не откажутся."
        EndDialogeData
        
    NPC98: Stage19 
    
        TriggerData
            MeanAction
                SetUnitPositionOnStartPosition(Npc_Unit[15]);
            EndAction
        EndTriggerData
        
        DialogeData
            npc_ask ="Ты вернуля! Ты нашел врача? Мой брат больше не может ждать!"
            strMEAN = "Завершить миссию"
            qweMEAN = "Да, я нашел врача, он один из лучших в селении Листа. Он поможет вашему брату."
            ansMEAN = "Огромное спасибо тебе. Благодаря тебе жизнь моего брата спасена, по этому в знак благодарности, прими пожалуйста нашу семейную реликвию. Она передовалась из поколение в поколение. Это древнее оружие, еще времен мудреца 6 путей. Нам оно уже не нужно, мы уже много поколений обычные крестьяне, но я уверен используя его ты сможешь многим помочь."
        EndDialogeData
EndQuest
endscope

Я уже не говорю о том, что легко могу цепочки создавать, и контр квесты :)
Faion добавил:
ScorpioT1000:
И типа при каждой речи там камера появлялась на удаленном расстоянии перед персом и медленно вращалась на 5-10 градусов вокруг него.
Я тоже думал такое реализовать, но пришел к выводу что в орпг, где в любой момент может подкатить другой игрок и вынести тебя, подобному нет места :)
Faion добавил:
Бтв при желании я могу сделать сколько угодно веток в квесте. Т.к. на каждый выбор у меня привязывается экшн. И есть волшебная функция которая позволяет сдвинуть квест прогресс. С помощью нее я могу сделать так:
1-10 общая ветка, на 10 развилка на 3 сюжетные линии. В этом месте я делаю сдвиг квест прогресса к примеру на 1 или на 20 или на 40, а в промежутках которые созданы сдвигом реализуется каждая ветка. Впрочем я такие извращения не юзаю, мне хватает возможности просто отслеживать результат выполнения квеста другим квестом, и если условия подходят, то активировать\деактивировать:)
Старый 30.05.2012, 22:00
ScorpioT1000
Работаем
online
Опыт: отключен
Я выбрал гуи-решение из-за того, что предполагалось, это будут делать дизайнеры, а не программисты. Но у тебя, похоже, штука помощнее будет.
Старый 30.05.2012, 22:18
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
ScorpioT1000:
Я выбрал гуи-решение из-за того, что предполагалось, это будут делать дизайнеры, а не программисты. Но у тебя, похоже, штука помощнее будет.
Ну так и так читабельно весьма, впрочем даже есть прога для написания квестов, правда уже неактуальная:)
А вообще функционал таков, что я его не могу весь раскрыть в квестах:)
Старый 30.05.2012, 23:02
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 19:33.