Extremator
offline
Опыт:
39,512Активность: |
Цикл (лимит?)
Сколько максимально можно сделать вариаций цикла?
переменная X (integer) » типа кодинг set X = 9999 Цикл А от 1 до Х _дать юниту +1 хп У меня всё работает, но только по любому даётся 4760 хп за один повтор цикла... есть лимит? провёл тесты переменная X (integer) » типа кодинг set X = 0 Цикл А от 1 до 10000 _set X = X +1 _Очистить экран от сообщений _Показать на экране значение X получается всегда празному... но в данном случаи обрывается на 4000 ровно... в общем чем больше функций в триггере, тем меньшее количество раз воспроизводится цикл... если цисло вариаций цикла больше, то он просто не срабатывает и все последующий функции тоже... Почему так? может кто-нить сказать/рассказать подробнее о лимитах вариация циклов? |
19.05.2011, 12:55 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J64_
offline
Опыт:
4,724Активность: |
поток вешается |
19.05.2011, 13:23 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Clamp
Lost in space
offline
Опыт:
71,158Активность: |
а вообще это чуть ли не самая популярная тема была, надо поиск начинать использовать
юзай таймеры офк |
19.05.2011, 13:33 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
Зависит от выполняемой функции, распараллеливай потоки. |
19.05.2011, 13:51 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Extremator
offline
Опыт:
39,512Активность: |
Цитата:
как? |
|
19.05.2011, 13:53 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
еще можно таймеры или триггеры юзать. |
19.05.2011, 13:55 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
EvolutionArena
League of Legends
offline
Опыт:
3,219Активность: |
Лучше таймеры |
19.05.2011, 15:04 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
EvolutionArena, "пруф или не было." |
19.05.2011, 15:15 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J64_
offline
Опыт:
4,724Активность: |
есчо мона группами
|
19.05.2011, 16:19 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Extremator
offline
Опыт:
39,512Активность: |
ладно... так каким способ мне сделать 1000000 раз "X+1" за одно мгновение?)))
Extremator добавил: лимитировался на отметке 15786 |
19.05.2011, 16:57 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nekit1234007
offline
Опыт:
11,916Активность: |
Зачем? За «за шкафом» накажу. |
19.05.2011, 17:04 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Extremator
offline
Опыт:
39,512Активность: |
Nekit1234007:
За дверью... Ну надо мне... вот я иделаю... требуется просто узнать сколько можно юзнуть действия и сколько при этом выполнится циклов... вот и всё... в общем [+] замечание от Nekit1234007: Не надо больше так делать.
|
19.05.2011, 17:25 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
еще вопросы?
алсо, неужели нельзя один раз прибавит 100000 или сколько там надо? |
19.05.2011, 17:27 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Extremator
offline
Опыт:
39,512Активность: |
Doc, чем больше функций, тем меньше вариаций цикла... можно как-то посчитать?
нужно прибавить X к максимальному количеству здороья юнита, при этом X = любое число, даже может быть отрицательным...
В общем я пробую сделать практичную систему изменения макс.ХП юнита на ГУИ (без КС), и все функции юзаю по минимуму... таким образом я свёл всё к тому что я просто даю X раз по +1 хп, и всё...
Но появисись рамки... цикл не делает больше 4760 вариаций...
и так в обоих направлениях (отнимаю хп / прибавляю хп) Хочу узнать как можно это обойти... опять же... используя минимум функций...
Extremator добавил: Nekit1234007: вопрос в форме "Зачем?" тоже был лишним... |
19.05.2011, 18:47 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
Вопрос в форме "зачем" не был лишним. ваш метод убог, почему бы не использовать степени двойки, с ними можно получить любое число. |
19.05.2011, 20:24 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FKoFF
Venomancer 89lvl. Europe
offline
Опыт:
5,975Активность: |
создаешь 10 предметов на основе любой руны
создаешь 10 абил на основе предметной абилы "Повышение здоровья разовое" устанавливаешь значение абилам: -1000 -500 -100 -10 -1 +1 +10 +100 +500 +1000 раздаешь эти абилы предметам
создаешь две переменных массив целочисленных: BL и DL создаешь одну хэш-таблицу с именем Data забиваешь базу PrepareBLSys равкодами своих абил в порядке убывания (udg_BL[1]==ablity+1000, udg_DL[1]==ability-1000) используешь через CS строки:
call IncreaseHP (unit u, integer amount, real duration) - если вставить отрицательное значение в строку amount - здоровье снизится, если в duration - эффект будет перманентным call BonusLife (unit u, real amount) добавляет значение amount к макс здоровью героя напрямую call DecLife (unit u, real amount) отнимает значение amount от макс здоровья героя напрямую
» CODE
((код jass
function PrepareBLsys takes nothing returns nothing
set udg_Data=InitHashtable() set udg_BL[1] = 'I004' set udg_BL[2] = 'I003' set udg_BL[3] = 'I002' set udg_BL[4] = 'I005' set udg_BL[5] = 'I000' set udg_DL[1] = 'I001' set udg_DL[2] = 'I009' set udg_DL[3] = 'I008' set udg_DL[4] = 'I007' set udg_DL[5] = 'I006' endfunction function BonusLife takes unit u, real hplast returns nothing
loop exitwhen hplast==0 if hplast > 1000 then call UnitAddItemById(u,udg_BL[1]) set hplast=hplast-1000 elseif hplast > 500 then call UnitAddItemById(u,udg_BL[2]) set hplast=hplast-500 elseif hplast > 100 then call UnitAddItemById(u,udg_BL[3]) set hplast=hplast-100 elseif hplast > 10 then call UnitAddItemById(u,udg_BL[4]) set hplast=hplast-10 elseif hplast > 1 then call UnitAddItemById(u,udg_BL[5]) set hplast=hplast-1 endif endloop endfunction function DecLife takes unit u, real hplast returns nothing
loop exitwhen hplast==0 if hplast > 1000 then call UnitAddItemById(u,udg_DL[1]) set hplast=hplast-1000 elseif hplast > 500 then call UnitAddItemById(u,udg_DL[2]) set hplast=hplast-500 elseif hplast > 100 then call UnitAddItemById(u,udg_DL[3]) set hplast=hplast-100 elseif hplast > 10 then call UnitAddItemById(u,udg_DL[4]) set hplast=hplast-10 elseif hplast > 1 then call UnitAddItemById(u,udg_DL[5]) set hplast= hplast-1 endif endloop endfunction
function IncreaseHPtimed takes nothing returns nothing
local timer t=GetExpiredTimer() local integer hi=GetHandleId(t) local integer hplast=LoadInteger(udg_Data,hi,0) local unit u =LoadUnitHandle(udg_Data,hi,1) local boolean gain=hplast<0 call DestroyTimer(t)
call FlushChildHashtable(udg_Data,hi) set t=null if gain then
set hplast=hplast*(0-1) endif if gain then call BonusLife(u,hplast) else call DecLife(u,hplast) endif set u=null
endfunction function IncreaseHP takes unit u, integer amount, real duration returns nothing
local integer hplast=amount local boolean gain = amount>0 local timer t local integer hi if duration > 0.0 then set t=CreateTimer() set hi = GetHandleId(t) call SaveInteger(udg_Data,GetHandleId(t),0,amount) call SaveUnitHandle(udg_Data,GetHandleId(t),1,u) call TimerStart(t,duration,false,function IncreaseHPtimed) set t=null endif
if gain==false then
set hplast=hplast*(0-1) if I2R(hplast)>GetUnitState(u,UNIT_STATE_MAX_LIFE) then set hplast=R2I(GetUnitState(u,UNIT_STATE_MAX_LIFE) - 5) endif endif if gain then call BonusLife(u,hplast) else call DecLife(u,hplast) endif endfunction )) |
20.05.2011, 05:22 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|