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

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

Ответ
 
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
J64_

offline
Опыт: 4,724
Активность:
поток вешается
Старый 19.05.2011, 13:23
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
а вообще это чуть ли не самая популярная тема была, надо поиск начинать использовать
юзай таймеры офк
Старый 19.05.2011, 13:33
Doc

offline
Опыт: 63,163
Активность:
Зависит от выполняемой функции, распараллеливай потоки.
Старый 19.05.2011, 13:51
Extremator

offline
Опыт: 39,512
Активность:
Цитата:
Сообщение от Doc
Зависит от выполняемой функции, распараллеливай потоки.

как?
Старый 19.05.2011, 13:53
Doc

offline
Опыт: 63,163
Активность:
ExecuteFunc("name")
еще можно таймеры или триггеры юзать.
Старый 19.05.2011, 13:55
EvolutionArena
League of Legends
offline
Опыт: 3,219
Активность:
Лучше таймеры
Старый 19.05.2011, 15:04
Doc

offline
Опыт: 63,163
Активность:
EvolutionArena, "пруф или не было."
Старый 19.05.2011, 15:15
J64_

offline
Опыт: 4,724
Активность:
есчо мона группами
ForGroup
GroupEnum
Старый 19.05.2011, 16:19
Extremator

offline
Опыт: 39,512
Активность:
ладно... так каким способ мне сделать 1000000 раз "X+1" за одно мгновение?)))

Extremator добавил:
лимитировался на отметке 15786
Старый 19.05.2011, 16:57
Nekit1234007

offline
Опыт: 11,916
Активность:
Зачем? За «за шкафом» накажу.
Старый 19.05.2011, 17:04
Extremator

offline
Опыт: 39,512
Активность:
Nekit1234007:
Зачем?
За дверью...
Ну надо мне... вот я иделаю... требуется просто узнать сколько можно юзнуть действия и сколько при этом выполнится циклов... вот и всё... в общем
[+] замечание от Nekit1234007: Не надо больше так делать.
Старый 19.05.2011, 17:25
Doc

offline
Опыт: 63,163
Активность:
узнать сколько можно юзнуть действия
15786
еще вопросы?
алсо, неужели нельзя один раз прибавит 100000 или сколько там надо?
Старый 19.05.2011, 17:27
Extremator

offline
Опыт: 39,512
Активность:
Doc, чем больше функций, тем меньше вариаций цикла... можно как-то посчитать?
Extremator добавил:
Doc:
алсо, неужели нельзя один раз прибавит 100000 или сколько там надо?
нужно прибавить X к максимальному количеству здороья юнита, при этом X = любое число, даже может быть отрицательным...
В общем я пробую сделать практичную систему изменения макс.ХП юнита на ГУИ (без КС), и все функции юзаю по минимуму... таким образом я свёл всё к тому что я просто даю X раз по +1 хп, и всё...
Но появисись рамки... цикл не делает больше 4760 вариаций...
и так в обоих направлениях (отнимаю хп / прибавляю хп)
Хочу узнать как можно это обойти... опять же... используя минимум функций...
Extremator добавил:
Nekit1234007:
Extremator, [+] замечание от Nekit1234007: Не надо больше так делать.
вопрос в форме "Зачем?" тоже был лишним...
Старый 19.05.2011, 18:47
Doc

offline
Опыт: 63,163
Активность:
Вопрос в форме "зачем" не был лишним. ваш метод убог, почему бы не использовать степени двойки, с ними можно получить любое число.
Старый 19.05.2011, 20:24
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
Ответ

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

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

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

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



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