[Хрень] Ловим двойной клик в магазине
|
|
Ty3uK | Дата: Четверг, 04 Октября 2012, 22:52:48 | Сообщение # 1 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Типа "система" для отлова двойного нажатия на предмет в магазине. Предмет делается на основе руны. Code library DoubleClick initializer Init {
#define <trigger gg_trg_DoubleClick = null>; #include "cj_types_priv.j"; private int array clicks[12]; private void Timer() { timer t = GetExpiredTimer(); int id = R2I(TimerGetRemaining(t)); if (clicks[id] == 2) { BJDebugMsg(GetPlayerName(Player(id))); } clicks[id] = 0; DestroyTimer(t); t = null; } private void Act() { int id = GetPlayerId(GetOwningPlayer(GetBuyingUnit())); timer t; clicks[id]++; if (clicks[id] < 2) { t = CreateTimer(); TimerStart(t, I2R(id), false, null); PauseTimer(t); TimerStart(t, .25, false, function Timer); } } private void Init() { trigger t = CreateTrigger(); TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SELL_ITEM); TriggerAddAction(t, function Act); t = null; }
} Иногда не срабатывает - покупка идет с микрозадержкой + время таймера не смог толково подобрать.
Можно и скачать
Сообщение отредактировал Ty3uK - Пятница, 05 Октября 2012, 19:13:31 |
|
|
|
Naturekid | Дата: Пятница, 05 Октября 2012, 11:30:43 | Сообщение # 2 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| А посмотреть?
|
|
|
|
Ty3uK | Дата: Пятница, 05 Октября 2012, 11:45:25 | Сообщение # 3 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| код есть и что смотреть?
|
|
|
|
SirNikolas | Дата: Пятница, 05 Октября 2012, 13:16:17 | Сообщение # 4 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Ty3uK) #define private <trigger gg_trg_DoubleClick = null>; fail.Quote (Ty3uK) private int array clicks[11]; Тоже fail, но на данный момент ошибок не вызовет.Quote (Ty3uK) Code t = CreateTimer(); TimerStart(t, I2R(id), false, null); PauseTimer(t); TimerStart(CreateTimer(), .25, false, function Timer); Можно нескромный вопрос: в каком состоянии ты это писал? Quote (Ty3uK) int id = R2I(TimerGetRemaining(t)); Если таймер истек, его оставшееся время равно нулю, не так ли?
|
|
|
|
Ty3uK | Дата: Пятница, 05 Октября 2012, 13:25:28 | Сообщение # 5 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| открой гугл и напиши timer exploit
до этого про приватные дефайны ты меня не поправлял
|
|
|
|
SirNikolas | Дата: Пятница, 05 Октября 2012, 13:34:21 | Сообщение # 6 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Прочитал, спасибо большое. Но в примере запускался один и тот же таймер, а ты создаешь два разных.
Если ты объявляешь дефайн вырезания триггера приватным, он будет пытаться вырезать только из текущей библиотеки. А нужно-то из globals.
Ну и размерность массива должна быть равна 12.
|
|
|
|
Ty3uK | Дата: Пятница, 05 Октября 2012, 13:36:59 | Сообщение # 7 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| фу, я не заменил слепой прийду домой и поправлю
|
|
|
|
Naturekid | Дата: Пятница, 05 Октября 2012, 17:29:02 | Сообщение # 8 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| Ty3uK, карту пример, что ж ещё.
|
|
|
|
Ty3uK | Дата: Пятница, 05 Октября 2012, 19:14:09 | Сообщение # 9 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| я где-то писал, что это наработка? Добавлено (05 Октября 2012, 19:14:09) --------------------------------------------- Обновил код, для страждущих добавил ссылку на карту
|
|
|
|
lawson | Дата: Понедельник, 08 Октября 2012, 12:53:55 | Сообщение # 10 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Ty3uK, Туз красавчик, очень оригинально, где идею взял? Я бы просто вместо click int взял бы click bool.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
SirNikolas | Дата: Понедельник, 08 Октября 2012, 17:21:09 | Сообщение # 11 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (lawson) очень оригинально, где идею взял? Ну, [DUОS] говорил, что собирается реализовывать в OaD'е.Quote (lawson) Я бы просто вместо click int взял бы click bool. Да и второе нажатие надо проверять по нажатию, а не по таймеру.
|
|
|
|
lawson | Дата: Понедельник, 08 Октября 2012, 17:24:52 | Сообщение # 12 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (SirNikolas) Да и второе нажатие надо проверять по нажатию, а не по таймеру. нажал - true, запустил таймер, если игрок нажал еще раз и значение true то значит - двойное нажатие, если таймер истек то того как можно нажать еще раз то значение false, и опять по новой.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Понедельник, 08 Октября 2012, 17:45:04 |
|
|
|
Extremator | Дата: Понедельник, 08 Октября 2012, 19:16:00 | Сообщение # 13 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| Quote (SirNikolas) Если таймер истек, его оставшееся время равно нулю, не так ли? а вот не всегда... =/
я как-то проводил тесты... не помню что хотел сделать... но тогда я узнал что время на таймере при его истечении равно стартовому времени на нём =/ вот тогда для меня это и стало фэйлом... ((
|
|
|
|
Naturekid | Дата: Понедельник, 08 Октября 2012, 19:39:00 | Сообщение # 14 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| Quote (Extremator) а вот не всегда... =/ this Quote (Extremator) при его истечении равно стартовому времени на нём =/ бред. Я юзаю цикл восерешения героев по таймерам, сравнивая оставшееся время. И знаете... хрень какя-то. Мне пришлось поместить событие для 1 и 10 игрока в отдельные триггеры а в цикле оставить со 2 по 9 и поставить условие "Оставшееся время меньше 0.3". Герои не воскрешаются блин потому что, не срабатывает какого-то хрена время от времени. На 0.1 - несколько раз за игру, на 0.2 - пару раз, на 0.3 вроде норм.
|
|
|
|
Ty3uK | Дата: Понедельник, 08 Октября 2012, 19:47:12 | Сообщение # 15 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| SirNikolas, все клики ловятся по событию, в таймере я их плюсую для того, чтобы можно было регулировать время между кликами. Да и булькой не сильно изящно и настраиваемо - а если время между кликами больше .5? Обычный юзер стандартным виндовым даблкликом так сможет раза три-четыре брякнуть.
Quote (SirNikolas) Ну, [DUОS] говорил, что собирается реализовывать в OaD'е. Оттуда и скомуниздил идею, мне было нечего кодить для карты. Но Андреич подкинул работы и я снова счастлив :3
|
|
|
|
lawson | Дата: Понедельник, 08 Октября 2012, 20:32:44 | Сообщение # 16 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Ty3uK, Ну как всегда, я ведь все проверил, я специально такую последовательность сделал.
Добавлено (08 Октября 2012, 20:31:31) --------------------------------------------- И вроде ты хотел сделать дабл клик, а не трипл, так что все норм не надо делать таймер между действиями больше .25!
Добавлено (08 Октября 2012, 20:32:44) --------------------------------------------- Ty3uK, и кстати было бы не плохо добавить возможность в жаспе или просто жассе функцию return пустой, чтобы функция дальше не выполнялась, просто в моем случае с булькой это было просто идеально.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Понедельник, 08 Октября 2012, 20:34:13 |
|
|
|
Ty3uK | Дата: Понедельник, 08 Октября 2012, 20:37:18 | Сообщение # 17 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| lawson, я не уверен насчет последующей поддержки JASP, Ник пилит свой парсер, который как часть функционала будет содержать тип auto (var в C++) и delete
Хотя я сейчас учу жасп парсить структуры и пока что работу не прерываю, плюс доп. стимул от Адольфа есть Но реально жаспом пока никто не пользуется, поэтому я в тупике.
Что делать?
|
|
|
|
Extremator | Дата: Понедельник, 08 Октября 2012, 20:38:53 | Сообщение # 18 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| тебе время дабл-клика нужно?)
поставил юнита на карту... сделал тригг на отдачу приказа... при отдаче выводи время с таймера на экран и перезапускай его...
два раза шлёпает мышью... смотришь время ))
|
|
|
|
lawson | Дата: Понедельник, 08 Октября 2012, 20:40:04 | Сообщение # 19 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Мне в принципе все равно, за редактор садиться у меня мотивации нет, и скорей всего не будет, да и к тому же те кто считаются новичками в жассе врятли используют такие фичи. Поэтому сам не знаю что тебе посоветовать.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Понедельник, 08 Октября 2012, 20:40:19 |
|
|
|
Ty3uK | Дата: Понедельник, 08 Октября 2012, 20:40:23 | Сообщение # 20 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Extremator,у всех юзеров это время может различаться
|
|
|
|
Extremator | Дата: Понедельник, 08 Октября 2012, 20:46:16 | Сообщение # 21 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| Quote (Ty3uK) ,у всех юзеров это время может различаться ну ты примерно так... шлёп-шлёп...
чуть больше сделай...
вообще мне кажется что 0.5 сек на двойной клик это ок... попробуйте хд
|
|
|
|
Ty3uK | Дата: Понедельник, 08 Октября 2012, 20:47:12 | Сообщение # 22 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Extremator, много, даже .3 дофига получается
|
|
|
|
Extremator | Дата: Понедельник, 08 Октября 2012, 21:01:51 | Сообщение # 23 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| Quote (Ty3uK) много, даже .3 дофига получается ну так определи сколько норм =_= серьёзно... это же просто
|
|
|
|
Ty3uK | Дата: Понедельник, 08 Октября 2012, 21:11:53 | Сообщение # 24 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Extremator, я и определил же
|
|
|
|
Impregnable | Дата: Понедельник, 08 Октября 2012, 21:28:17 | Сообщение # 25 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Не знаю, может так задумано, ошибки, или я не понял, но: Почему именно 2 клика?!
Почему я должен ждать оставшееся время, если нажал быстрее? Например - сделал 2 клика за .05 секунды, а предмет получу лишь через .20
Если я за .25 секунды успею кликнуть по 2 предметам, какой мне продадут?
Как узнать какой предмет был продан?
И куда вставлять свой код? Заместо BJDebugMsg в середину системы? Это некрасиво и неудобно.
Если долго мучиться, то может, все равно нихуя не получится.
|
|
|
|