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

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

Ответ
 
Anufis

offline
Опыт: 6,290
Активность:
Цитата:
Сообщение от silumin
Anufis, у тебя Пентиум 2 и 128 озу? Я думаю ты понял к чему этот вопрос...

*тут была стена текста*
А можно сделать такой же код, чтобы было по таймеру на каждый снаряд отдельно.
Да, silumin?

Отредактировано Anufis, 12.06.2011 в 19:02.
Старый 12.06.2011, 17:55
J64_

offline
Опыт: 4,724
Активность:
silumin:
Anufis, у тебя Пентиум 2 и 128 озу? Я думаю ты понял к чему этот вопрос...
Jaker01, ХТ для всего хорош: и для сингла и для мультиплеера, если использовать правильно. Для твоего случая - это идеальный вариант. Есть определённые тонкости в работе с ХТ, но удобство реализации некоторых задач это компенсирует сполна. Поэтому советую прочитать статьи по ХТ и таймерам, не пожалеешь точно.
в таком случае, зачем нужны глобалки? Ведь хеш
для всего хорош...
Топикстартер, сперва попробуй сделать БЕЗ хеша...
А если попроше(производно-затратное): заноси юнита в группу, создай периодич. Триггер, затем создай абилку с уровнями 1/<Период таймера>
При добавлении в группу добавляй абилу.
В период. Триггере каждый раз проходи по группе и повышай уровень абилы, если оно максимальное - то добалвяй хп, удали абилу.
или как там у ВАС в триггерах такие задачи решают...
а вообще переходи в джас
лично я перешел даже не зная кеша :о
далее вджасс/сджасс, в которых реализовать такие задачи без хеша - проще не куда.
Старый 12.06.2011, 18:06
silumin

offline
Опыт: 11,153
Активность:
Anufis, ты прикидываешь, у меня в карте одновременно может работать до 100 высокопереодических таймеров. И, "на удивление", не лагает.
А тебе не помешает поработать с параллельными массивами, больно перебарщиваешь с ХТ и локальными переменными, учитывая период триггера 0.03 сек.
silumin добавил:
AdamanTX:
в таком случае, зачем нужны глобалки? Ведь хеш
для всего хорош...
Наберёшься опыта - поймёшь, а пока не задавай пустых вопросов.
Старый 12.06.2011, 18:10
Anufis

offline
Опыт: 6,290
Активность:
Цитата:
Сообщение от silumin
Anufis, ты прикидываешь, у меня в карте одновременно может работать до 100 высокопереодических таймеров. И, "на удивление", не лагает.

У меня лагов нет,а у тех клоунов, которые играют по сети лагов хоть отбавляй.
Старый 12.06.2011, 18:20
silumin

offline
Опыт: 11,153
Активность:
Вот как может выглядеть код, решающий задачу топикстартера:
Код:
globals
udg_HT = InitHashtable()
...
...
endglobals

function RegenHP takes nothing returns nothing
local timer t = GetExpiredTimer()
local unit u = LoadUnitHandle(udg_HT, GetHandleId(t), 0)
  if GetUnitAbilityLevel(u,'Bxxx')==1 then //<-- Проверяем наличие баффа, если бафф есть, то...
    call SetUnitState(u, UNIT_STATE_LIFE, GetUnitState(u, UNIT_STATE_LIFE) + 30.) //<-- Лечим юнита. Число 30 - это кол-во регена ХП.
    call TimerStart(t, 3. , false, function RegenHP) //<-- запускаем таймер ещё на 3 сек
  else  //<-- если баффа нету (т.е. действие спелла закончилось или спел развеяли диспелом)
    call FlushChildHashtable(udg_HT,GetHandleId(t)) //<-- чистим ХТ
    call DestroyTimer(t)  //<-- Разрушаем таймер
  endif
set t = null
set u = null
endfunction

function Act_xxx takes nothing returns nothing
local timer t = CreateTimer()
  call SaveUnitHandle(udg_HT, GetHandleId(t), 0, GetTriggerUnit())
  call TimerStart(t, 3. , false, function RegenHP)
endfunction

function Cond_xxx takes nothing returns boolean
return GetSpellAbilityId()=='Axxx' // <-- Id нужной абилки предмета
endfunction



function InitTrig_xxx takes nothing returns nothing
    set udg_xxx = CreateTrigger()
    call TriggerRegisterPlayerUnitEvent(udg_xxx, Player(0), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
    call TriggerAddCondition(udg_xxx, Condition(function Cond_xxx))
    call TriggerAddAction(udg_xxx, function Act_xxx)
endfunction


И что тут сложного? Развели демагогию из-за элементарной вещи...

silumin добавил:
И ещё скажите, что этот код будет жёстко нагружать игру...
Старый 12.06.2011, 18:31
Anufis

offline
Опыт: 6,290
Активность:
Цитата:
Сообщение от silumin
И что тут сложного? Развели демагогию из-за элементарной вещи...

silumin добавил:
И ещё скажите, что этот код будет жёстко нагружать игру...

Если герой может скилл применять на других героев, то будет криво стакаться, точнее длительность возрастет, и оба будут суммарно прибавлять(а первый на лишнюю длительность)
Старый 12.06.2011, 18:34
silumin

offline
Опыт: 11,153
Активность:
Цитата:
Сообщение от Jaker01
Создал нестандартный предмет (при использовании восполняет здоровье герою)
... не оговорено какому герою, вероятно тому, который использовал предмет.

Но даже если предмет будет иметь цель, то код ненамного усложниться для предотвращения оверхила...
Старый 12.06.2011, 18:38
J64_

offline
Опыт: 4,724
Активность:
silumin:
AdamanTX:
в таком случае, зачем нужны глобалки? Ведь хеш
для всего хорош...
Наберёшься опыта - поймёшь, а пока не задавай пустых вопросов.
Из этого пустого вопроса и не моей цитаты можно понять что я пытался оповергнуть мнение о том что хеш для всего хорош...
а вообще форумный опыт!=опыт в программировании !
Судя по твоей утечке и пустого кондишона в коде можно судить что твой скилл меньше чем мой.
Но пойми что топикстартер не понимает элементарных вещей...
Старый 12.06.2011, 18:49
silumin

offline
Опыт: 11,153
Активность:
AdamanTX, я не буду меряться с тобой пипськами, ибо глупо. Мне не нужно кому-либо что-то доказывать.

Я привёл максимально простой пример топикстартеру об использовании ХТ с таймерами. Хотя могбы ещё сохранить в ХТ и условие с действием для триггера на случай его дестроя, что бы максимально чисто всё было.

Так что не надо мне тыкать в кондишэны...
Старый 12.06.2011, 19:02
Jaker01
Ученик академии XGM
offline
Опыт: 4,149
Активность:
silumin:
... не оговорено какому герою, вероятно тому, который использовал предмет.
Но даже если предмет будет иметь цель, то код ненамного усложниться для предотвращения оверхила...
Предмет восстанавливает здоровье применившему его герою. Цель выбирать не нужно.
P.S. Нормально темку флудануле гы ): Пока стены текста ваши читал, в голову идейка пришла одна, попробую через таймеры сделать, позже кину скрины что получилось.
Старый 12.06.2011, 19:34
J64_

offline
Опыт: 4,724
Активность:
silumin:
AdamanTX, я не буду меряться с тобой пипськами, ибо глупо. Мне не нужно кому-либо что-то доказывать.
Сам-то начал мериться пипьсками...
Я привёл максимально простой пример топикстартеру об использовании ХТ с таймерами. Хотя могбы ещё сохранить в ХТ и условие с действием для триггера на случай его дестроя, что бы максимально чисто всё было.
если подаешь пример - то подавай максимально правильные примеры: где обнуление таймера при создании?
set t=null
зачем добавлять в триггер действие и условие когда как можно писать сразу на условии?
и да буржуи доказали что так быстрее...
Ато топикстартер поймет не правильно.
А воопче если ты привел пример, то почему не написал про паралель. Массивы? Пояснил бы что такие задачи мона решать без хеша...
Старый 12.06.2011, 19:41
Jaker01
Ученик академии XGM
offline
Опыт: 4,149
Активность:
Пасанэ, давайте жить дружно (с) какой-то псевдокот
Написал 2 триггера:
Вот 1-ый: img-samara.fotki.yandex.ru/get/5807/mastermost-fox.1/0_6c6d3_d0c...
В данном триггере обнуляется переменная (целочисленная) и затем добавляется в переменную юнит, который использовал предмет.
Вот 2-ой: img-samara.fotki.yandex.ru/get/4408/mastermost-fox.1/0_6c6d4_b0e...
Каждую секунду идёт проверка наличия бафа на юните, после чего происходит действие (целочисленная + 1) и происходит ещё одна проверка, если целочисленная равна 3 (то есть прошло 3 секунды), то обнулить её и прибавить юниту хп.
С таймером не стал делать, ибо метод с переменной на мой взгляд легче. И да, во 2-ом триггере написано действие пока только на 1-го игрока, позже остальные 9 действий допишу, ибо всего игроков 10...
Ну жду ваших отзывов, может подправить чего, может переделать что нужно? В игре ещё не тестил, но думаю работать будет.
Старый 12.06.2011, 20:06
silumin

offline
Опыт: 11,153
Активность:
Jaker01, Ну раз так, то приведённый мной пример - самое лучшее для тебя решение.

AdamanTX, ты тоже сразу паралленьными массивами начинал делать и индекс из хендла выщитывал? Я нет, топикстартер, видимо, тоже... точнее он ещё не дошёл до парал-х массивов вообще, может сейчас только начнёт осваивать ХТ.

Тебе нетерпится блестнуть знаниями? Не вопрос - жду статью в "Жёлтой прессе" на тему "Параллельные массивы + таймеры" с исчерпывающими комментариями... Актуальный срок - неделя, отсчёт с понедельника. Вот там и оценим твои познания, возможно, что-то дополним из личного опыта.

п.с. больше с тобой в этой теме троллить не буду. Хочешь доказать, что круче - пиши статью, иначе - не встревай.
Старый 12.06.2011, 20:17
J64_

offline
Опыт: 4,724
Активность:
silumin:
AdamanTX, ты тоже сразу паралленьными массивами начинал делать и индекс из хендла выщитывал?
Нет про паралельные массивы и кеш я узнал в качестве джассера, а не гуишника...
Тебе нетерпится блестнуть знаниями? Не вопрос - жду статью в "Жёлтой прессе" на тему "Параллельные массивы + таймеры" с исчерпывающими комментариями... Актуальный срок - неделя, отсчёт с понедельника. Вот там и оценим твои познания, возможно, что-то дополним из личного опыта.
А про что писать то?
Про все уже писали и обсуждали уже 100500 раз. И я нехочу обсуждать это 100501 раз ибо я не изобретатель велосипедов...
п.с. больше с тобой в этой теме троллить не буду. Хочешь доказать, что круче - пиши статью, иначе - не встревай.
зы я вообще-то не хочу и не хотел нарываться.
Старый 12.06.2011, 20:53
Ответ

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

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

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

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



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