Пытаюсь сделать цикл, но он пишет, что отсутствует строка endloop, когда ниже она есть. Не понимаю, что делать?

Всё, разобрался! Команду exitwhen надо было слитно написать.
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.
ответ
Не все функции мх работают быстро или как положено/ожидаемо, помимо указанных Api тебе нужно ещё закинуть триггеры, которые эти либы юзают. Просто юзай функции и смотри как работают, можешь попробовать SetUnitArmour( u, GetUnitArmour( u )+1 ), хз. Enable/DisableUnitControl тоже со странностями, отбирает иконки у юнита навсегда если юзать первый аргумент, если только последние три, то можно вернуть отдав юниту какой-либо приказ

Этот комментарий удален
1
Всё, разобрался! Команду exitwhen надо было слитно написать.
Принятый ответ
26
  1. Делай рандом не между 0 и 100.00, а между 0.01 и 100.00, иначе ты немного смазываешь шанс... мелочь, а ведь так оно и есть.
  1. Пробуй уж тогда сразу в JASS'овом виде делать, чего уж этой фигнёй заниматься.
Ответы (24)
30
иначе ты немного смазываешь шанс
Чёт я немного не догнал про смазывание шанса. Если разделить первый случай на 100, то получим [0, 1]. А это буквально диапазон стандартного рандомизатора.
Во втором случае получается [0.0001,1]. В чём выгода?
26
nazarpunk:
Чёт я немного не догнал
Ну не догнал и ладно, зачем нам быть в курсе этого...
26
nazarpunk, нет. Просто возьми и посчитай сам сколько у тебя условных частей и какой шанс выпадения каждой. Флуд окончен.
25
Extremator, пишут, что верхняя граница не включается
Если это действительно так, то ты сейчас буквально посоветовал как ухудшить рандом
30
Makeba, потому что дефолтно рандомизаторы выдают [0,1).
25
nazarpunk, тогда откуда берётся смазывание при нижней границе в 0, которое нужно убрать использованием числа 0.01?
30
Makeba, смотри. Идея проста. Домножь на 100 и получишь [1, 10000]. Для простоты избавимся от лишних нулей и переведём в int. Получится [1, 100]. Тобишь ровно сто чисел, каждое из которых ровно один процент.
Только особо одарённые личности привыкли вкидывать и ничего не объяснять.
30
Makeba, я тебе написал, в чём идея использования 0.01 вместо нуля. Я бы вообще отказался от реалов и решал рандом на integer с нужной мне точностью.
25
nazarpunk, но в randomreal 0.01 же работает на ухудшение, тупо срезается число 0, которое срезать не нужно
26
Makeba,
пишут, что верхняя граница не включается
Не включается? но при рандоме 0,10 он же выдаёт 10, не?
И так же при капе в 100.00 он способен выдавать ровно 100.00
Оо, и 15-ти лет не прошло, он смог 0 посчитать...
Makeba,
тупо срезается число 0, которое срезать не нужно
Ну будет у тебя не 10000 вариаций, а 10001... подумаешь...
25
Не включается? но при рандоме 0,10 он же выдаёт 10, не?
Понятия не имею. Я дал ссылку, где написано When lowBound<highBound returns a real in range [lowBound, highBound) that is: inclusive, exclusive. Если это не так, то обратитесь к авторам той доки
30
Extremator, ровно 100.00? а ты как проверяешь, через ==?
Да и я вижу ты гений, раз у тебя lowBound == highBound.
25
тупо срезается число 0, которое срезать не нужно
Ну будет у тебя не 10000 вариаций, а 10001... подумаешь...
Если в интах, то
[0, 100] –> 101 число
[0, 100) -> 100 чисел
[1, 100) -> 99 чисел
Для real принцип тот же, только чисел больше. Если верхняя граница не включена, то твой выпил нуля делает рандом хуже
26
nazarpunk, зачем сравнивать когда можно показать... до 10го знака?
25
Extremator, всё, надоело, я не хочу третий раз в одной ветке комментариев давать одну и ту же ссылку, делайте как хотите
7
Makeba, я тебе написал, в чём идея использования 0.01 вместо нуля. Я бы вообще отказался от реалов и решал рандом на integer с нужной мне точностью.
А в чем проблема GetRandomReal ? Кривое распределение или что? Есть где инфу почитать ?
30
Zeix, да особо ни в чём, кроме кривой реализации реалов в самой игре. Ну не люблю я числа с плавающей точкой, так что при первой возможности домножаю на нужную точность и перевожу в integer.
Да и к примеру 5% в тех же integer выглядят более наглядно:
if GetRandomInt(1, 100) < 5 then
30
И так же при капе в 100.00 он способен выдавать ровно 100.00
Посмотрел в игре. Ты точно гейний.
float __fastcall GetRandomReal(const float* lowBound, const float* highBound) {
        if (low == high) {
            return low;
        }

       // ...
}
21
Блин, надо тоже loop( ом) уже пользоваться. А то в отдельный триггер "каждые 0.1 секундуу" это фигово делать. Да и появится возможность локалку в том же триггере юзать,вместо глобальной в отдельном, а это этокономия места и больше возможностей!))
Ответы (28)
26
SсRealm, скорее экономия на спичках)) но с loop'ами разобраться однозначно стоит!
21
nazarpunk, Вейты давно не юзаю. Сделал в шапке фунцкию таймера и вызываю ее через wait EX.
Здесь, в вопросах научили!)))
21
SсRealm, скорее экономия на спичках)) но с loop'ами разобраться однозначно стоит!
И Хэш таблицей научиться пользоваться. И весь мир мой!( мухахахахах)😂😂😂
30
SсRealm, ты до сих пор с ними не разобрался? Это же на пару часов делов.
21
nazarpunk, Я не понимаю, чем она отличается от обычной переменной?
Что это вроде локалки, для которой каждый раз создается свое индивидуальное значение и его можно потом перенести в другой триггер?
30
SсRealm, ну, как массивы работают ты же уже понял? Ну вот представь, что хт это хитрый массив:
set HT[primaryKey][childKey] = 100500
Только вместо синтаксиса с [...] там специальная функция:
call SaveInteger(HT, primaryKey, childKey, 100500)
21
nazarpunk, Я и знал. Массив переменной, в которое записывается отдельное значение. Что тут не понятного то!
21
nazarpunk, primaryKey, и childKey это ключ и замок. То есть массив - ключ от юнита и сам юнит, то есть замок который им открывают?
30
SсRealm, проще представить, как координатную плоскость. А primaryKey и childKey это координаты в целых числах.
Ну или представь, что любой массив, это
set Array[primaryKey][0] = 100500
Где просто [0] зафиксирован и его не обязательно писать. А хт позвляет добавить к массиву ещё одно измерение.
Загруженные файлы
30
Jack-of-shadow, всмысле?
Количество значений 0xFFFFFFFF * 0xFFFFFFFF, каким боком StringHash позволяет его увеличить?
26
nazarpunk,
Вполне можно имитировать n мерный массив
 SaveReal   (hash,my_key,StringHash(var_x+"_"+var_y+"_"+var_z+...,my_str)
 SaveInteger (hash,my_key,StringHash(var_y+"_"+var_y+"_"+var_z+...,my_str)
23
SсRealm, это таблица, где пишешь номер столбца, номер строки, грубо говоря, по аналогии как в Excel - A1, C30 итд, и в ячейку такую сохраняешь значение
30
Jack-of-shadow, и таким образом добавится третье измерение, в котором количество допустимых значений будет 0xFFFFFFFF * 0xFFFFFFFF * 0xFFFFFFFF?
21
EugeAl, Так уже чуть более понятней.
А типы переменных там имеют значения или это просто цифрЫ?
30
SсRealm, а когда ты код пишешь, типы переменных имеют значение?
23
SсRealm, конечно, ты же сохраняешь - загружаешь определённый тип данных. Ключи - тупо integer
кстати, близы недоработали хэш, у них нет по дефолту SaveHandleHandle() и SaveWeathereffectHandle()...
21
EugeAl, Это просто сделать рандомайзер погоды и отлавливать, какая погода идет. Тут хэш то и не нужен, особенно
1
nazarpunk, Вейты давно не юзаю. Сделал в шапке фунцкию таймера и вызываю ее через wait EX.
Здесь, в вопросах научили!)))
научи меня плиз)
21
ST95, Напиши в личку, скину.
По сути, это просто функция вынесеная в шапку. Славься ХИГАМА, что показали мне такое)))
30
Вейты давно не юзаю. Сделал в шапке фунцкию таймера и вызываю ее через wait EX.
А в этой твоей функции вэйт не спрятался? Функцию в студию.
21
nazarpunk, TriggerSleepAction никуда не денется, но по крайней мере работает лучше вейта. Хз почему это есть. Главное что работает!
Парадоксально, но факт!
30
SсRealm, тоесть ты банально юзаешь PolledWait и говоришь что не юзаешь вэйт? Да ты прям гейний.
21
nazarpunk, Да нет же. В шапке создается таймер на локалках и из любого триггера запускается через ( еxecut) Не идеально, но всяко лучше чем поливейт)
30
SсRealm, ну, создал ты таймер? А вэйт чем достигается? Или ты тупо по таймеру делаешь отложенный ExecuteFunc?
21
nazarpunk, Да, так и делаю. Вызываю его из других Триггов (wait ex)
Не иделаьно, но лучше вейта, согласись!
25
В комментах обсудили кучу всего, а локалки обнулить, и слип из цикла убрать никто не посоветовал.
Ответы (1)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.