Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Новичкам

Важная информация

Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.03.2010, 21:42   #1
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию Паузы (таймеры) в разговорах

Каким образом можно сделать паузы (таймеры) при использовании:
pPlayer->Say
pCreature->Say
DoScriptText
?

Код:
enum
{
...
}

bool ItemUse_item...()
{
...
Фраза 1
задержка 10 секунд
Фраза 2
...
}
virusav вне форума   Ответить с цитированием
Старый 12.03.2010, 22:24   #2
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Адекватно - никак.
LordJZ вне форума   Ответить с цитированием
Старый 12.03.2010, 22:34   #3
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Какие тогда есть варианты?
virusav вне форума   Ответить с цитированием
Старый 12.03.2010, 22:50   #4
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

как-то так, только это псевдокод
Код:
void SystemPause(int second)
{
	var time = DataTime.Now() + second * 1000;
	while (time =< DataTime.Now())
	{
		//ждемс
	}
}
__________________

Последний раз редактировалось Konctantin; 12.03.2010 в 22:57. Причина: знак попутал
Konctantin вне форума   Ответить с цитированием
Старый 12.03.2010, 22:53   #5
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Как я понимаю, скрипт с таким кодом никогда не примут в СД2?
virusav вне форума   Ответить с цитированием
Старый 12.03.2010, 23:10   #6
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 100 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
__________________

Последний раз редактировалось Konctantin; 12.03.2010 в 23:12.
Konctantin вне форума   Ответить с цитированием
Старый 12.03.2010, 23:20   #7
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

1С - это другое дело, там итак все через одно место сделано.

Не получится ли, что во время работы данного таймера нельзя будет выполнить другие действия?
virusav вне форума   Ответить с цитированием
Старый 12.03.2010, 23:32   #8
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Ну задержка будет влиять только на ту ветку кода, где она вызвана, тобиш в одном потоке, в другом потоке она не влияет.

Я тут подумал про sleep(), может подойдет?
__________________
Konctantin вне форума   Ответить с цитированием
Старый 12.03.2010, 23:39   #9
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

вспомнил, на старом форуме уже была подобная тема (только там про спелы) и тоже предлагали такие извращения, но пришел Chestr (кажется он) и сказал что есть такая штука как "тик", но это для повторяемости. а тут хз... даже не вспомню ничего такого.
__________________
Konctantin вне форума   Ответить с цитированием
Старый 12.03.2010, 23:43   #10
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Я же специально для virusav выкладывал скрипт, в котором все это было реализовано...

Sleep() останавливает работу процесса (по-сути)
LordJZ вне форума   Ответить с цитированием
Старый 12.03.2010, 23:47   #11
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

поэтому другого ничего и не придумаешь
__________________
Konctantin вне форума   Ответить с цитированием
Старый 12.03.2010, 23:47   #12
CruncH
Пользователь
 
Регистрация: 07.03.2010
Адрес: Норильск
Сообщений: 51
Сказал(а) спасибо: 28
Поблагодарили 31 раз(а) в 15 сообщениях
Записей в дневнике: 3
CruncH На верном пути
Отправить сообщение для CruncH с помощью ICQ
По умолчанию

Цитата:
Сообщение от Konctantin Посмотреть сообщение
как-то так, только это псевдокод
Код:
void SystemPause(int second)
{
	var time = DataTime.Now() + second * 1000;
	while (time =< DataTime.Now())
	{
		//ждемс
	}
}
насколько я понимаю, эта реализации подвесит всю систему на n секунд также как и sleep & wait & etc. это бы дало результат, если бы код выполнялся в отдельной потоке-thread(пишу название по памяти, мож и ошибся) и не на что больше не влиял.

На старом форуме в разборах сорцов мангоса писали о подобном, что нужно делать все через переменные времени и сравнение их.

З.ы. пишу для общего развития тем кто не сидит в конфе, т.к. там уже это обсуждалось...
added: пока читал конфу и медленно писал сообщение уже опередили меня)
__________________
CruncH вне форума   Ответить с цитированием
Старый 12.03.2010, 23:50   #13
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

не всю, а только тот поток в котором она выполнится
__________________
Konctantin вне форума   Ответить с цитированием
Старый 12.03.2010, 23:53   #14
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Есть пример, который можно использовать, не убив и не остановив работу ядра при этом?
virusav вне форума   Ответить с цитированием
Старый 12.03.2010, 23:58   #15
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

sleep() - попробуй
__________________
Konctantin вне форума   Ответить с цитированием
Старый 12.03.2010, 23:58   #16
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
Есть пример, который можно использовать, не убив и не остановив работу ядра при этом?
Только как я писал, через UpdateAI()
LordJZ вне форума   Ответить с цитированием
Старый 12.03.2010, 23:59   #17
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Насколько я помню, sleep() заставляет отключиться скрипт на указанное время.
А мне надо, чтобы в это время скрипт продолжал работать.
virusav вне форума   Ответить с цитированием
Старый 12.03.2010, 23:59   #18
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Понятно, надо будет попробовать, только сначала struct надо осилить.
virusav вне форума   Ответить с цитированием
Старый 13.03.2010, 00:01   #19
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
Насколько я помню, sleep() заставляет отключиться скрипт на указанное время.
А мне надо, чтобы в это время скрипт продолжал работать.
По-идеи sleep() в ScriptedAI остановит поток карты.
Цитата:
Сообщение от virusav Посмотреть сообщение
Понятно, надо будет попробовать, только сначала struct надо осилить.
Я же скидывал готовый пример.
LordJZ вне форума   Ответить с цитированием
Старый 13.03.2010, 00:06   #20
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Да, но это твой пример.
Посмотрел, сравнил с подобными, но пока особо не ковырял.

Уже не сегодня.
virusav вне форума   Ответить с цитированием
Старый 13.03.2010, 05:00   #21
MaxXx2021
Ученый
 
Аватар для MaxXx2021
 
Регистрация: 09.03.2010
Адрес: Кыргызстан
Сообщений: 266
Сказал(а) спасибо: 41
Поблагодарили 115 раз(а) в 34 сообщениях
MaxXx2021 Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
Да, но это твой пример.
Посмотрел, сравнил с подобными, но пока особо не ковырял.

Уже не сегодня.
Код:
   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;
           }
      }
что то типа этого по SD2 стилю

Последний раз редактировалось MaxXx2021; 13.03.2010 в 05:03.
MaxXx2021 вне форума   Ответить с цитированием
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 18:49. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot