|
Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь |
|
Опции темы | Поиск в этой теме | Опции просмотра |
12.03.2010, 21:42 | #1 |
Администратор
|
Паузы (таймеры) в разговорах
Каким образом можно сделать паузы (таймеры) при использовании:
pPlayer->Say pCreature->Say DoScriptText ? Код:
enum { ... } bool ItemUse_item...() { ... Фраза 1 задержка 10 секунд Фраза 2 ... } |
12.03.2010, 22:24 | #2 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Адекватно - никак.
|
12.03.2010, 22:34 | #3 |
Администратор
|
Какие тогда есть варианты?
|
12.03.2010, 22:50 | #4 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
как-то так, только это псевдокод
Код:
void SystemPause(int second) { var time = DataTime.Now() + second * 1000; while (time =< DataTime.Now()) { //ждемс } } Последний раз редактировалось Konctantin; 12.03.2010 в 22:57. Причина: знак попутал |
12.03.2010, 22:53 | #5 |
Администратор
|
Как я понимаю, скрипт с таким кодом никогда не примут в СД2?
|
12.03.2010, 23:10 | #6 | |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Последний раз редактировалось Konctantin; 12.03.2010 в 23:12. |
|
12.03.2010, 23:20 | #7 |
Администратор
|
1С - это другое дело, там итак все через одно место сделано.
Не получится ли, что во время работы данного таймера нельзя будет выполнить другие действия? |
12.03.2010, 23:32 | #8 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Ну задержка будет влиять только на ту ветку кода, где она вызвана, тобиш в одном потоке, в другом потоке она не влияет.
Я тут подумал про sleep(), может подойдет? |
12.03.2010, 23:39 | #9 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
вспомнил, на старом форуме уже была подобная тема (только там про спелы) и тоже предлагали такие извращения, но пришел Chestr (кажется он) и сказал что есть такая штука как "тик", но это для повторяемости. а тут хз... даже не вспомню ничего такого.
|
12.03.2010, 23:43 | #10 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Я же специально для virusav выкладывал скрипт, в котором все это было реализовано...
Sleep() останавливает работу процесса (по-сути) |
12.03.2010, 23:47 | #12 | |
Пользователь
Регистрация: 07.03.2010
Адрес: Норильск
Сообщений: 51
Сказал(а) спасибо: 28
Поблагодарили 31 раз(а) в 15 сообщениях
Записей в дневнике: 3
|
Цитата:
На старом форуме в разборах сорцов мангоса писали о подобном, что нужно делать все через переменные времени и сравнение их. З.ы. пишу для общего развития тем кто не сидит в конфе, т.к. там уже это обсуждалось... added: пока читал конфу и медленно писал сообщение уже опередили меня) |
|
12.03.2010, 23:53 | #14 |
Администратор
|
Есть пример, который можно использовать, не убив и не остановив работу ядра при этом?
|
12.03.2010, 23:58 | #16 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
|
12.03.2010, 23:59 | #17 |
Администратор
|
Насколько я помню, sleep() заставляет отключиться скрипт на указанное время.
А мне надо, чтобы в это время скрипт продолжал работать. |
12.03.2010, 23:59 | #18 |
Администратор
|
Понятно, надо будет попробовать, только сначала struct надо осилить.
|
13.03.2010, 00:01 | #19 | |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Цитата:
|
|
13.03.2010, 00:06 | #20 |
Администратор
|
Да, но это твой пример.
Посмотрел, сравнил с подобными, но пока особо не ковырял. Уже не сегодня. |
13.03.2010, 05:00 | #21 | |
Ученый
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
|
Цитата:
Код:
void UpdateAI(const uint32 diff) { DoMeleeAttackIfReady(); if(QuestComplete == true) { if (ActionTim <= diff) { switch(Action) { case 1: m_creature->Say; ActionTim = 4000; break; case 2: pPlayer->Say; ActionTim = 3000; break; case 3: m_creature->Say; break; } ++Action; } else ActionTim -= uiDiff; } } Последний раз редактировалось MaxXx2021; 13.03.2010 в 05:03. |
|