да да, уточняю что я пытаюсь понять причину ошибки той, а не оптимизировать од или сделать так чтоб было всё ок... Есть конкретная цель и расплыться на другие = не найти решения либо затянуть его =\
гуи и есть корень зла- близзы в нем много где сделали бяку.
Хотя, да))) Если у тех кто со мной живет или общается спросить "кто говнокодеры?" ответят: "Blizzard" )) Постоянно ору или жалуюсь на них) ив сё из-за GUI.
Добавлено (23 Январь 2012, 15:46:58) --------------------------------------------- У меня была мысль вообще GUI переделать)) Но благо это была только мысль.
Основатель команды "Компьютерные Акулы" Г. Разработчик проекта: Forest: Dead Match Признанный сансей картостроения в wc3 Ищу Дизайнеров/Художников на бесплатную основу. Скайп: Don.Laonda В зависимости от качества и объема работ, можно говорить и о платной основе.
Я о том, что у 99% тех кто знает jass, при виде триггеров сделанных через графический интерфейс сразу же - язык на плечо и надо вдалбливать что GUI корень зла.
GUI - корень зла. Остальные мнения считаются идиотизмом.
Quote (Laonda)
И в данном случае, по моему мнению - дело не в утечках, а различные посты с какими-то доказательствами или демонстрацией того как вы хорошо знаете jass это всего лишь фарс.. даже "понт" и не более.
Не будем голословны, просто устроим картостроительную дуэль. Половину вещей, которые может Jass (это как минимум) в граф. интерфейсе не сотворишь кроме как костылями типа CS и Indexing.
Quote (Laonda)
Почему я так это воспринимаю:
1) Я читаю элементарные и ясные мне вещи 2) мне они бесполезны 3) если б я не знал этих вещей, то ваши посты вызвали бы только ещё большее кол-во вопросов.
Есть подозрение, что ты просто решил показать, что знаешь гораздо больше, чем мы все вместе взятые и что мы порем идиотизм, а только один ты прав. Я тебя очень разочарую.
Quote (Laonda)
Да и кто такой этот Ажаццио, чтоб я его знал? Уверен он меня не знает например и вы не знаете кто я такой
Вот это великолепная логика. ЧСВ в ответ на ЧСВ - кто ты такой, чтобы тебя здесь слушали?
Quote (Laonda)
Очередной форумчанин благодаря которому усидчивые новички способны осознать суть утечек? =\
А важность этого никто не отменяет.
Quote (Laonda)
Начинаю задумываться.. быть может это у меня на уровне подсознания неприязнь к Тузику?)) А то я смотрю со стороны и всегда мои более менее негативные посты в его адрес))
Хочешь изменить мир? Начинай с себя. Анализируй и найдёшь причину. Ах да, тебе же лень вроде о_О
http://c-sharks.ru/img/wtf.jpg - на этом скрине все действия,производимые в триггере? они не находятся в цикле? точно этот триггер вызывает лаги? если периодическое 1.2 сек. событие,то зачем вначале и в конце действий выкл\вкл триггера?
Не будем голословны, просто устроим картостроительную дуэль. Половину вещей, которые может Jass (это как минимум) в граф. интерфейсе не сотворишь кроме как костылями типа CS и Indexing.
Вы вообще читали о чем тут речь или решили выпендриться, как один из знатаков jass? Подобное обсуждалось ещё тсраницы 2 назад и никто тут не отрицает, что на ГУИ много что нельзя сделать, что cs частично может решить эту проблему и что в GUI используются говнокоды, а ещё там есть утечи и тд и тп. Если вам нужен конфикт на вашу любимую тему, то явно не со мной т.к. я знаю о чем вы говорите (а говорим мы об одном) а вы думаете чтоя считаю иначе. Я же пытаюсь разобраться с ошибкой а не утечками.
Вам интересно слушать о способах приготовления Корейских бутербродов, в то время, когда вы смотрите остросюжетный детектив?
Quote (|DUОS|)
Есть подозрение, что ты просто решил показать, что знаешь гораздо больше, чем мы все вместе взятые и что мы порем идиотизм, а только один ты прав. Я тебя очень разочарую.
Если подумать, что всё это что мне пишет форумчанини Тузик и есть ВЕСЬ ВАШ набор знаний, то я на много умнее вас. Если вы просто вспыльчиво поспешили и ваши знание не ограничиваются прописными истинами в работе с переменными и знанием конструкции внутри GUI, то вы не правильно предположили и я может быть умнее, а может быть и нет (в этом плане).
Я лично руководствуюсь этими изречениями: "всегда есть тот, кто умнее тебя" "тот, кто говорит, что знает всё - не знает ничего"
Но вы зря меня недооцениваете и записываете в ряды клоунов тупых.
Quote (|DUОS|)
Я тебя очень разочарую.
wtf? Ощущение, что это для вас очень важно, только этого в жизни и добивались и теперь явно считаете себя гуру в области jass. Так самонадеянно, что ужас. Вдруг я и правда умнее вас? Но вы заранее не допускаете этого. Почему? Просто потому, что вам не хватает ума, что бы осмыслить, что вы НЕ САМЫЙ УМНЫЙ В МИРЕ.
Вот когда вы поймете, что не важно кто умнее, что время надо бречь, что самым умным во всем стать невозможно. Вот тогда вы поймете мои посты, прочитав их с начала до конца.
Считайте меня хоть свиньей)) ток проблему помогите решить, избавьте от троллинга, агра и информационного шума.
Quote (|DUОS|)
Вот это великолепная логика. ЧСВ в ответ на ЧСВ - кто ты такой, чтобы тебя здесь слушали?
Суть была в том, что это опять понт именами. Ну какая разница в какой статье я что прочитал? да хоть Вася Пупки напишет. Важно в данном случае знаю ли я что... А тут акцент шёл на имя, будто тот человек имеет ученую степень или что он первая инстанция в этих вопросах по всему Миру.
Quote (|DUОS|)
А важность этого никто не отменяет.
Я писал, что это не важно или плохо? я такого не писал.
Quote (|DUОS|)
Ах да, тебе же лень вроде о_О
что-то новенькое... попытки играть в экстрасенса? не получилось =\
Quote (_Nerevar_)
http://c-sharks.ru/img/wtf.jpg - на этом скрине все действия,производимые в триггере? они не находятся в цикле? точно этот триггер вызывает лаги? если периодическое 1.2 сек. событие,то зачем вначале и в конце действий выкл\вкл триггера?
Да можно убрать эти офф и он. Там раньше другое было)) не дочистил. Вообще да то весь триггер он без цикла. Там вначале крутиться глобальная целочисленная при каждом вхождении т.е. по сути действия выполняются для каждого игрока по очереди. Но лаги именно в этом триггере именно в нем ((
Я отключал все связанные с ним триггеры, оставляя только его - лаги были отключал его - лаги пропадают.
[DUОS], берите пример с Неревара, адекватный человек и почему-то к его постам у меня нет претензий и они не выглядят как понт. Если он пишет то по делу и если по делу то дополняет необходимой информацией, а не кусками.
Основатель команды "Компьютерные Акулы" Г. Разработчик проекта: Forest: Dead Match Признанный сансей картостроения в wc3 Ищу Дизайнеров/Художников на бесплатную основу. Скайп: Don.Laonda В зависимости от качества и объема работ, можно говорить и о платной основе.
Но с другой то стороны, форум - публичное место и здесь не чужой монастырь, а общественное место выходит. А в общественном месте уже голышом не походишь. Так что тут баланс надо) А вообще наверно я сам так же делаю и пытаюсь в себе это изменить, но видя, как другие так же что-то делают я это в них ненавижу ещё больше чем в себе.
Основатель команды "Компьютерные Акулы" Г. Разработчик проекта: Forest: Dead Match Признанный сансей картостроения в wc3 Ищу Дизайнеров/Художников на бесплатную основу. Скайп: Don.Laonda В зависимости от качества и объема работ, можно говорить и о платной основе.
Все, из-за чего здесь могут быть проблемы - тот блок условий. Во-первых, если они объединяются через and, то сам "And - all conditions are true" можно не писать. Лишний вызов функции. И еще проверки работников следовало бы вынести отдельно для каждой расы. И убери DoNothing. Даже GUI без них прекрасно обходится.
Добавлено (23 Январь 2012, 17:02:43) --------------------------------------------- Но все равно странно, что четыре утечки группы в секунду вызывают вылет карты.
Laonda у тебя нету триггеров срабатывающих на отдачу приказа\покупку юнита? Может действия в этом тригере влекут за собой вызов других тригеров? Или они все периодические? Вообще какие события в остальных тригерах?
И убери DoNothing. Даже GUI без них прекрасно обходится.
Раньше не обходился))
ну да пофиг, убрал, переписал 3 триггера эти связанные между собой на жасс.
Вылет не из-за них, из-за этого триггера просто тормоза на сек+.
Вот с Jass Тоже самое, надеюсь так вам будет легче что-то предположить или посоветовать, предчувствую советы на использование кэша))):
1 триг, который ведет учет рабов:
Code
function Trig_delete_Actions takes nothing returns nothing local integer c = 1 local integer I local integer I_C if GetUnitTypeId(GetTriggerUnit()) == 'h00F' then set c = 93 elseif GetUnitTypeId(GetTriggerUnit()) == 'opeo' then set c = 93 elseif GetUnitTypeId(GetTriggerUnit()) == 'ewsp' then set c = 93 elseif GetUnitTypeId(GetTriggerUnit()) == 'uaco' then set c = 93 endif
if c == 93 then if udg_I_cdcs[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] == 3 then call RemoveUnit(GetTriggerUnit()) else set I = GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit())) set I_C = (((I-1)*3) + (4 - udg_I_cdcs[I])) set udg_I_cdcs[I] = udg_I_cdcs[I] +1 set udg_rab[I_C] = GetTriggerUnit() endif endif endfunction
//=========================================================================== function InitTrig_delete takes nothing returns nothing set gg_trg_delete = CreateTrigger( ) call TriggerRegisterEnterRectSimple( gg_trg_delete, GetPlayableMapRect() ) call TriggerAddAction( gg_trg_delete, function Trig_delete_Actions ) endfunction
2. Тригг который отдает приказ строить рабов:
Code
function Trig_Create_peasant_new_Actions takes nothing returns nothing local integer I = 1 call DisableTrigger( GetTriggeringTrigger() ) loop exitwhen I==11 if GetPlayerController(Player(I)) == MAP_CONTROL_COMPUTER then if CountUnitsInGroup(GetUnitsOfPlayerAndTypeId(Player(I), 'h00F')) < 3 then if CountUnitsInGroup(GetUnitsOfPlayerAndTypeId(Player(I), 'opeo')) < 3 then if CountUnitsInGroup(GetUnitsOfPlayerAndTypeId(Player(I), 'uaco')) < 3 then if CountUnitsInGroup(GetUnitsOfPlayerAndTypeId(Player(I), 'ewsp')) < 3 then if GetPlayerState(Player(I), PLAYER_STATE_RESOURCE_GOLD) > 775 then if udg_AI_B_Trane[I+1] == false then if GetPlayerRace(Player(I)) == RACE_ORC then call IssueImmediateOrderById(udg_Throne[I+1], 'opeo') elseif GetPlayerRace(Player(I)) == RACE_UNDEAD then call IssueImmediateOrderById(udg_Throne[I+1], 'uaco') elseif GetPlayerRace(Player(I)) == RACE_HUMAN then call IssueImmediateOrderById(udg_Throne[I+1], 'h00F') else call IssueImmediateOrderById(udg_Throne[I+1], 'ewsp') endif endif endif endif endif endif endif endif set I = I+1 endloop
//=========================================================================== function InitTrig_Create_peasant_new takes nothing returns nothing set gg_trg_Create_peasant_new = CreateTrigger( ) call DisableTrigger( gg_trg_Create_peasant_new ) call TriggerRegisterTimerEventPeriodic( gg_trg_Create_peasant_new, 1.26 ) call TriggerAddAction( gg_trg_Create_peasant_new, function Trig_Create_peasant_new_Actions ) endfunction
3. триггер, который приказывает строить. но если его отключить лаги все равно есть.
Code
function Trig_Start_Build_tower_new_Actions takes nothing returns nothing local integer I = 1 local integer n = 1 local real R local location L
loop exitwhen I==11
if GetPlayerController(Player(I)) == MAP_CONTROL_COMPUTER then if udg_I_AI_TOWER_COUNT[I+1] == 0 then
if ((CountUnitsInGroup(GetUnitsOfPlayerAndTypeId(Player(I), 'h00F')) == 3)) then set n = 93 elseif CountUnitsInGroup(GetUnitsOfPlayerAndTypeId(Player(I), 'opeo')) == 3 then set n = 93 elseif CountUnitsInGroup(GetUnitsOfPlayerAndTypeId(Player(I), 'uaco')) == 3 then set n = 93 elseif CountUnitsInGroup(GetUnitsOfPlayerAndTypeId(Player(I), 'ewsp')) == 3 then set n = 93 endif
if n == 93 then if GetPlayerState(Player(I), PLAYER_STATE_RESOURCE_GOLD) > 12000 then if udg_AI_B_Building[I+1] == false then set R = GetRandomDirectionDeg() set L = PolarProjectionBJ(udg_AI_WALK_POINT[(I+1) * 3], 500.00, R) if GetPlayerRace(Player(I)) == RACE_HUMAN then call IssueBuildOrderById(udg_rab[(I*3)+2] , 'hgtw', GetLocationX(L), GetLocationY(L)) elseif GetPlayerRace(Player(I)) == RACE_ORC then call IssueBuildOrderById(udg_rab[(I*3)+2] , 'owtw', GetLocationX(L), GetLocationY(L)) elseif GetPlayerRace(Player(I)) == RACE_UNDEAD then call IssueBuildOrderById(udg_rab[(I*3)+2] , 'uzg1', GetLocationX(L), GetLocationY(L)) else call IssueBuildOrderById(udg_rab[(I*3)+2] , 'etrp', GetLocationX(L), GetLocationY(L)) endif call RemoveLocation(L) set n = 1 endif endif endif endif endif set I = I +1 endloop endfunction //=========================================================================== function InitTrig_Start_Build_tower_new takes nothing returns nothing set gg_trg_Start_Build_tower_new = CreateTrigger( ) call DisableTrigger( gg_trg_Start_Build_tower_new ) call TriggerRegisterTimerEventPeriodic( gg_trg_Start_Build_tower_new, 5.48 ) call TriggerAddAction( gg_trg_Start_Build_tower_new, function Trig_Start_Build_tower_new_Actions ) endfunction
Основатель команды "Компьютерные Акулы" Г. Разработчик проекта: Forest: Dead Match Признанный сансей картостроения в wc3 Ищу Дизайнеров/Художников на бесплатную основу. Скайп: Don.Laonda В зависимости от качества и объема работ, можно говорить и о платной основе.
да черт его знает =\ я просто не использую его. Работал с ним лет 5 назад когда делал рпг, в которой для каждой локации были свои карты и они прогружались.
Кэш отличается от хэш? это для меня новость. Я думал по англ Hash, по русски Кэш. Не прав?
Основатель команды "Компьютерные Акулы" Г. Разработчик проекта: Forest: Dead Match Признанный сансей картостроения в wc3 Ищу Дизайнеров/Художников на бесплатную основу. Скайп: Don.Laonda В зависимости от качества и объема работ, можно говорить и о платной основе.
Ну и куда Дуос пропал? он хотя бы может подсказать по коду, как я понял
Лан, над аниме посмотреть, а завтра сам поэкспериментирую на отдельной карте. Всем спс, удачи.
Основатель команды "Компьютерные Акулы" Г. Разработчик проекта: Forest: Dead Match Признанный сансей картостроения в wc3 Ищу Дизайнеров/Художников на бесплатную основу. Скайп: Don.Laonda В зависимости от качества и объема работ, можно говорить и о платной основе.
native GetPlayerUnitTypeCount takes player p, integer id returns integer
function Trig_delete_Actions takes nothing returns nothing local unit u = GetTriggerUnit() local integer id = GetUnitTypeId(u) local integer i if id == 'h00F' or id == 'opeo' or id == 'ewsp' or id == 'uaco' then if udg_I_cdcs[GetPlayerId(GetOwningPlayer(u)) + 1] == 3 then call RemoveUnit(u) else set i = GetPlayerId(GetOwningPlayer(u)) + 1 set udg_rab[i * 3 + 1 - udg_I_cdcs[i]] = u set udg_I_cdcs[i] = udg_I_cdcs[i] + 1 endif endif set u = null endfunction
//=========================================================================== function InitTrig_delete takes nothing returns nothing local region r = CreateRegion() set gg_trg_delete = CreateTrigger() call RegionAddRect(r, bj_mapInitialPlayableArea) call TriggerRegisterEnterRegion(gg_trg_delete, r, null) call TriggerAddAction(gg_trg_delete, function Trig_delete_Actions) set r = null endfunction
function Trig_Create_peasant_new_Actions takes nothing returns nothing local integer i = 1 local player p = Player(1) local handle h loop if GetPlayerController(p) == MAP_CONTROL_COMPUTER and GetPlayerUnitTypeCount(p, 'h00F') < 3 and GetPlayerUnitTypeCount(p, 'opeo') < 3 and GetPlayerUnitTypeCount(p, 'uaco') < 3 and GetPlayerUnitTypeCount(p, 'ewsp') < 3 and GetPlayerState(p, PLAYER_STATE_RESOURCE_GOLD) > 775 then if not udg_AI_B_Trane[i + 1] then set h = GetPlayerRace(p) if h == RACE_ORC then call IssueImmediateOrderById(udg_Throne[i + 1], 'opeo') elseif h == RACE_UNDEAD then call IssueImmediateOrderById(udg_Throne[i + 1], 'uaco') elseif h == RACE_HUMAN then call IssueImmediateOrderById(udg_Throne[i + 1], 'h00F') else call IssueImmediateOrderById(udg_Throne[i + 1], 'ewsp') endif set h = null endif endif exitwhen i == 10 set i = i + 1 set p = Player(i) endloop set p = null endfunction
//=========================================================================== function InitTrig_Create_peasant_new takes nothing returns nothing set gg_trg_Create_peasant_new = CreateTrigger() call DisableTrigger(gg_trg_Create_peasant_new) call TriggerRegisterTimerEvent(gg_trg_Create_peasant_new, 1.26, true) call TriggerAddAction(gg_trg_Create_peasant_new, function Trig_Create_peasant_new_Actions) endfunction
function Trig_Start_Build_tower_new_Actions takes nothing returns nothing local integer i = 1 local player p = Player(1) local real a local handle h loop if GetPlayerController(p) == MAP_CONTROL_COMPUTER and udg_I_AI_TOWER_COUNT[i + 1] == 0 and (GetPlayerUnitTypeCount(p, 'h00F') == 3 or GetPlayerUnitTypeCount(p, 'opeo') == 3 or GetPlayerUnitTypeCount(p, 'uaco') == 3 or GetPlayerUnitTypeCount(p, 'ewsp') == 3) and GetPlayerState(p, PLAYER_STATE_RESOURCE_GOLD) > 12000 and not udg_AI_B_Building[i + 1] then set a = GetRandomReal(.0, 6.283) set h = GetPlayerRace(p) if h == RACE_HUMAN then call IssueBuildOrderById(udg_rab[(i * 3) + 2] , 'hgtw', GetLocationX(udg_AI_WALK_POINT[i * 3 + 3]) + 500. * Cos(a), GetLocationY(udg_AI_WALK_POINT[i * 3 + 3]) + 500. * Sin(a)) elseif h == RACE_ORC then call IssueBuildOrderById(udg_rab[(i * 3) + 2] , 'owtw', GetLocationX(udg_AI_WALK_POINT[i * 3 + 3]) + 500. * Cos(a), GetLocationY(udg_AI_WALK_POINT[i * 3 + 3]) + 500. * Sin(a)) elseif h == RACE_UNDEAD then call IssueBuildOrderById(udg_rab[(i * 3) + 2] , 'uzg1', GetLocationX(udg_AI_WALK_POINT[i * 3 + 3]) + 500. * Cos(a), GetLocationY(udg_AI_WALK_POINT[i * 3 + 3]) + 500. * Sin(a)) else call IssueBuildOrderById(udg_rab[(i * 3) + 2] , 'etrp', GetLocationX(udg_AI_WALK_POINT[i * 3 + 3]) + 500. * Cos(a), GetLocationY(udg_AI_WALK_POINT[i * 3 + 3]) + 500. * Sin(a)) endif set h = null endif exitwhen i == 10 set i = i + 1 set p = Player(i) endloop set p = null endfunction
//=========================================================================== function InitTrig_Start_Build_tower_new takes nothing returns nothing set gg_trg_Start_Build_tower_new = CreateTrigger() call DisableTrigger(gg_trg_Start_Build_tower_new) call TriggerRegisterTimerEvent(gg_trg_Start_Build_tower_new, 5.48, true) call TriggerAddAction(gg_trg_Start_Build_tower_new, function Trig_Start_Build_tower_new_Actions) endfunction
Требуется JNGP для возможности объявить native из common.ai
ну допустим.. все равно лаги если триггер этот включен и нет лагов если выключен.
Да и не понимаю я зачем вы условия мои пытаетесь все объединить)
Если условие не верно то дальше не идет проверка в моем случае, а в вашем вы проверяете сразу все параметры.
В общем-то это всё мелочи. Думаю что это скорее всего "последняя капля" т.е. все вроди бы работает отлично но если ещё чуть-чуть нагрузки то выходят лаги при работе этого триггера.
В общем надо протестировать точно тоже самое на пустой абсолютно карте с теми же нестандартными юнитами.
Основатель команды "Компьютерные Акулы" Г. Разработчик проекта: Forest: Dead Match Признанный сансей картостроения в wc3 Ищу Дизайнеров/Художников на бесплатную основу. Скайп: Don.Laonda В зависимости от качества и объема работ, можно говорить и о платной основе.