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

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

Закрытая тема
 
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
вы на каждую интерацию делаете ВСЕ эти действия.
Старый 26.05.2013, 03:32
SiT3D

offline
Опыт: 1,514
Активность:
ахаххахаха где ты вообще такой код взял без условий =) я только щас увидел ахаха.... да уж.
SiT3D добавил:
ну выходит так, роди уже вывод, что ты как КЭП у нас, скажи в чём беда, или боишься что засмеют?
Старый 26.05.2013, 03:35
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
я уверен что если вы переделаете этот индийский код то все заработает
Старый 26.05.2013, 03:37
SiT3D

offline
Опыт: 1,514
Активность:
Да выходит я присваю 27 переменным значения за 1 шаг цикла, это преступление? Если сократить на поторениях, получится 22 переменные, это меня спасёт? Или как то надо прирывать эти действия, а если они вконце? Всё равно 22. Так в чём ошибка Хейт?
SiT3D добавил:
Да какой индийский код, в других случаях код в 1 строчку и то не работает. Там то в чём беда? Этот код рабочий. Просто если сюда вставить ещё 1 цикл поверх этого большого, тогда и беда начинается.
Старый 26.05.2013, 03:41
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
открою страшную тайну, там некоторые переменные вообще нафиг не нужны
Старый 26.05.2013, 03:41
SiT3D

offline
Опыт: 1,514
Активность:
У меня в браузере ни такой код... я хз где ты взял, или ты нарошно условия повырезал. Я даже в IE запускал. Код рабочий этот. =))) я с тебя угараю.
SiT3D добавил:
переменные не нужны? То есть если их удалить, то код будет выполняться? А ну какие?
SiT3D добавил:
Ты меня хоть улыбаешь) а то скучно было последнее время.
Старый 26.05.2013, 03:45
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
SiT3D, про обнуление. есть лимит на кол-во операций в цикле, и подобный мусор тоже в него входит.
Старый 26.05.2013, 03:46
SiT3D

offline
Опыт: 1,514
Активность:
alexprey:
SiT3D, есть ограничение на длительность выполнения потока. После чего вар считает, что он завис и убивает его. Поток это либо новый триггер, либо таймер
Ну да это логично, если цикл длинный с большим количеством присвоений и ещё надо выполнять раз 60 то да, это чуток замедлит работу. А как лучше поступить, разбивать такой большой код на отдельные, без циклов. Или есть способ проще? А если перевести каждый шаг, с помощью таймера, на отдельные этапы. Тогда это не циклом надо пользоваться. Шаг считать глобалкой, и пооочерёдно выполнять действия с небольшой паузой, такой подход решит проблему?
SiT3D добавил:
Clamp:
SiT3D, про обнуление. есть лимит на кол-во операций в цикле, и подобный мусор тоже в него входит.
ок буду учитывать. Но вроде как есть коды куда более длинные, и обнуление не в цикле же идёт, а после всего в самом конце функции, из работы цикла можно только повторяющиеся присвоения убрать, но их не много
Старый 26.05.2013, 03:51
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
А теперь более полный разбор полётов.
Начнём со стандартных функций для работы с мультибордом. Угадай, почему их нельзя использовать? Даю три попытки, подсказка под катом.
((кат Как надо
lib MBItems
{
    private multiboarditem  mbitem

    //столбец, строка, значения

    void MBSS(multiboard board, int col, int row, bool showValue, bool showIcon)
    {
        mbitem = MultiboardGetItem(board, row, col)
        MultiboardSetItemStyle(mbitem, showValue, showIcon)
        MultiboardReleaseItem(mbitem)
    }

    void MBSC(multiboard board, int col, int row, real red, real green, real blue, real transparency)
    {
        mbitem = MultiboardGetItem(board, row, col)
        MultiboardSetItemValueColor(mbitem, PercentToInt(red,255), PercentToInt(green,255), PercentToInt(blue,255), PercentToInt(100.0-transparency,255))
        MultiboardReleaseItem(mbitem)
    }

    void MBSW(multiboard board, int col, int row, real width)
    {
        mbitem = MultiboardGetItem(board, row, col)
        MultiboardSetItemWidth(mbitem, width/100.0)
        MultiboardReleaseItem(mbitem)
    }

    void MBSI(multiboard board, int col, int row, string iconFileName)
    {
        mbitem = MultiboardGetItem(board, row, col)
        MultiboardSetItemIcon(mbitem, iconFileName)
        MultiboardReleaseItem(mbitem)
    }

    void MBST(multiboard board, int col, int row, string val)
    {
        mbitem = MultiboardGetItem(board, row, col)
        MultiboardSetItemValue(mbitem, val)
        MultiboardReleaseItem(mbitem)
    }
}
))
Старый 26.05.2013, 03:51
SiT3D

offline
Опыт: 1,514
Активность:
Тоесть меня подталкивают к выводу, что всё дело в ограниченности длины кода, в цикле. так? И типо большое количество операций не допустимо. Но дело в том что если добавить в код триггера ещё 1 -2 цикла, не в нутрь циклов, а просто ниже по коду, то они вроде тоже не будут выполняться. Выходит дело скорее всего в загруженности триггера, или процессов, которые происходят одновременно с этим триггером. Но это меня не сколько не радует, выходит надо ручками писать всё... долой циклы, пишем всё сами по 1000 раз xD
Старый 26.05.2013, 03:54
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Продолжаем. Мягко говоря, неочевидные названия переменных. Что такое аа? А ab? Почему ты рассчитываешь на помощ и заставляешь нас это всё созерцать? Почему они все не в массивах? Если совсе всё плохо - ты можешь использовать двухмерные массивы, но никак не 999^999 переменных.
Hate, по секрету, это китайский код, индусский это неочевидные алгоритмические решения, там хотя бы забавно бывает.
Старый 26.05.2013, 03:55
SiT3D

offline
Опыт: 1,514
Активность:
Clamp:
А теперь более полный разбор полётов.
Начнём со стандартных функций для работы с мультибордом. Угадай, почему их нельзя использовать? Даю три попытки, подсказка под катом.
В BJ дело? В том что они память мусорят? Я просто ещё не от корки до корки всё знаю((( в джаз. Или есть другие причины?
Я чем руководствоюсь, карта не лагает, памяти сильно не жрёт вроде, на компах старых тож норм. Значит всё хорошо))) о других тонкостях мне сложно из космоса инфу получать (
Старый 26.05.2013, 03:57
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Кстати, стандартный отступ - 2 пробела на уровень вложенности, изредка - 4 (у меня 4, например), но никак не 8, как у тебя.
Clamp добавил:
Каждый раз, когда ты используешь BJ для работы с МБ, утекает multiboarditem, который весит ну очень много как в памяти, так и при обработке.
Старый 26.05.2013, 04:00
SiT3D

offline
Опыт: 1,514
Активность:
Переменных 3 дядя код я не заставляю вас созерцать, код меня по крайней мере устраивал всем, мне сказали что дело в потоке, я решил что может у меня в коде есть реально огромные ошибки, не касающиеся правил оформления.
Старый 26.05.2013, 04:00
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
И да, я инфу брал не из космоса, мне было интересно и я серфил сайт для поисков решений и фишек, причём сам, не через академию.
Clamp добавил:
SiT3D:
код я не заставляю вас созерцать
ты просишь помощи с кодом, но не хочешь делать так, чтобы его было удобно анализировать? отличный подход.
Старый 26.05.2013, 04:01
SiT3D

offline
Опыт: 1,514
Активность:
Если подобного рода утечки влияют на циклы и выполнения "потока" кода, то расскажите каким именно образом. Отступ не 2 пробела а tab это 4 пробела, о каких 8 речь? Я редактировал тут в сообщение, у меня код вообще весь в 1 линию, и я его понимаю почемуто.
SiT3D добавил:
Да мне не с кодом нужна помощь, а с другим, с теорией которая объяснит почему некоторые циклы не выполняются положеное количество раз. Код рабочий повторяю. Абсолютно рабочий. Просто в него нельзя добавить ещё 1 цикл, меня это напрягает
SiT3D добавил:
И тот код который показал Хейт не так у меня отображается. Там всё в ряд и без условий и как то реально далеко, я в каждое вложение 1 tab вставлял.
SiT3D добавил:
Переменные ab bb и cb это условия a b и c вторая б говорит мне о том что это boolean я не для кого то этот код писал, и они нужны только для того чтобы строка ниже, была короче, и не приходилось писать 3 длинных условия в 1 строчке, зачем мне массивы для 3х условий?
SiT3D добавил:
Спасибо за советы по оформлению кода, но меня вовсе ни это интересует. Я и сам знаю как это обойти, мне просто надо понять почему ломаются циклы. вот и всё.
SiT3D добавил:
и где ты там увидел 9999 99999 переменных?
SiT3D добавил:
Короче я сам во всём разобрался, ничего там поток не рубит, ошибок нет, впилил ещё 1 цикл внешний всё прекрасно работает. Всем спасибо тему можно закрывать.
Старый 26.05.2013, 05:41
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
    local integer str
    local integer agi
    local integer int

	set i2 = GetPlayerId(MBplmass[i]) + 1
	call MultiboardSetItemValueBJ( udg_MBmass[1], 2, i+1, udg_PLString1[i2]+udg_PLString2[i2]+udg_PLString3[i2] )
	str = GetHeroStr(udg_CurrentHero[i2], false)
        agi = GetHeroAgi(udg_CurrentHero[i2], false)
        int = GetHeroInt(udg_CurrentHero[i2], false)
       	   if ( str > agi and str > int and GetUnitAbilityLevel(udg_CurrentHero[i2], 'A066') != 0) then
			call MultiboardSetItemValueBJ( udg_MBmass[1], 3, i+1, "Танк" )
		elseif (str > agi and str > int and GetUnitAbilityLevel(udg_CurrentHero[i2], 'A068') != 0) then
			call MultiboardSetItemValueBJ( udg_MBmass[1], 3, i+1, "Танк" )
  	      ...
		elseif (agi > str and agi > int and GetUnitAbilityLevel(udg_CurrentHero[i2], 'A060') != 0)) then
			call MultiboardSetItemValueBJ( udg_MBmass[1], 3, i+1, "ДД" )
	 	endif
		....
но ваша религия конечно же запретила такую ересь...
Hate добавил:
надо же все добавлять в переменные!..
Старый 26.05.2013, 05:58
quq_CCCP
Я белый и пушистый!
online
Опыт: 93,288
Активность:
SiT3D:
В BJ дело? В том что они память мусорят?
Их очень много, есть bj которые мы вынуждены использовать, потому что посчитать юнитов в группе у нас оптимальнее не получится чем бж функцией CountUnitsInGroup, а есть функции которые создают утечки и ненужные действия которые только замедляют алгоритм... Так что сначала нужно посмотреть и понять что это за функции а потому уже подумать а стоит ли их использовать или нет.
Старый 26.05.2013, 07:00
DioD

offline
Опыт: 45,134
Активность:
нет отладки закрыто, напишите отладку пишите еще раз.

Отредактировано Nerevar, 26.05.2013 в 13:26.
Старый 26.05.2013, 09:39
Закрытая тема

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

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

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

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



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