[ВАЖНО] Общалка кодеров
|
|
Волчачка | Дата: Понедельник, 22 Апреля 2013, 20:58:55 | Сообщение # 151 |
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
| Цитата (Ty3uK) Причем, тут тоже загадки - псевдопотоки или многопоточность? А асинхронность событий и действий? Поверял на получение урона и и его нанесения до условия отключения. Получил урон если откл = нет то наносим уром установить откл = нет + текстовый показ продамагало 49 раз Получил урон если откл = нет установить откл = нет то наносим уром + текстовый показ продамагало 35 раз Это да, я имел в виду, то что внутри действий. Забавная штукаДобавлено (22 Апреля 2013, 20:58:55) --------------------------------------------- А так про последовательность действий блока действий, а не общего.
|
|
|
|
Ty3uK | Дата: Понедельник, 22 Апреля 2013, 21:00:48 | Сообщение # 152 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Ну, исходя из "взрослых" языков, логично, что таймер и его callback должен стартовать в новом потоке. Но как я уже сказал - псевдопотоки или многопоточность?
|
|
|
|
Волчачка | Дата: Понедельник, 22 Апреля 2013, 21:07:23 | Сообщение # 153 |
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
| Ty3uK, хотя есть вариант многопоточности, т.к. просто выборка отряда выполнялась в доли секунд без wait'ов Они же TriggerSleepAction... Цитата (Ty3uK) псевдопотоки Это тоже не исключено, ведь вар писался на C++ Хотя он может быть и многопоточным, или одно-поточным с применением псевдопотоков. Так всё таки многопоточен.
|
|
|
|
BlackFox | Дата: Понедельник, 22 Апреля 2013, 21:09:53 | Сообщение # 154 |
3 уровень
Группа: Проверенные
Сообщений: 52
Награды: 0
Репутация: 25
Блокировки:
| Только разраб. знает тайну поточности движ. варика.
SirNikolas падёт в неравном бою с брутфорсом, Alice.
Сообщение отредактировал BlackFox - Понедельник, 22 Апреля 2013, 21:10:44 |
|
|
|
Ty3uK | Дата: Понедельник, 22 Апреля 2013, 21:39:26 | Сообщение # 155 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Волчачка, NodeJS - однопоточный, но асинхронная работа там есть.
|
|
|
|
Волчачка | Дата: Понедельник, 22 Апреля 2013, 21:42:15 | Сообщение # 156 |
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
| Цитата (Ty3uK) NodeJS - однопоточный, но асинхронная работа там есть. Ясно. Так значит, вар все таки однопоточный.
|
|
|
|
Ty3uK | Дата: Понедельник, 22 Апреля 2013, 21:59:49 | Сообщение # 157 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Волчачка, Цитата (BlackFox) Только разраб. знает тайну поточности движ. варика.
|
|
|
|
Волчачка | Дата: Понедельник, 22 Апреля 2013, 23:04:19 | Сообщение # 158 |
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
| Ty3uK, а что если так допустим запустим два одинаковых триггера периодическим временем, которые будут заставлять кастовать способность безе перезарядки, пичем одинаково приводимую в действие но с разными ID типами, три переменные
Триг 1 >REG>Кастует 1 юнит >IF>Та спосбность >ACT> LAST_CAST = Последний применивший спобность LCAST1 = LAST_CAST IF LCAST1 == LCAST2 then MSG("Иной поток")
Триг 2 >REG>Кастует 2 юнит >IF>Та спосбность >ACT> LAST_CAST = Последний применивший спобность LCAST2 = LAST_CAST IF LCAST2 == LCAST1 then MSG("Иной поток") Хотя бред наверно.
|
|
|
|
Ty3uK | Дата: Понедельник, 22 Апреля 2013, 23:12:11 | Сообщение # 159 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Периодики вроде как тоже в псевдопотоке, нет?
|
|
|
|
Волчачка | Дата: Понедельник, 22 Апреля 2013, 23:26:25 | Сообщение # 160 |
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
| Ty3uK, ща одну хурму замучу с Rifleman'ами и дамагом. Код function Trig_Test_Conditions takes nothing returns boolean if ( not ( GetUnitAbilityLevelSwapped('AOcr', GetTriggerUnit()) == 0 ) ) then return false endif return true endfunction
function Trig_Test_Actions takes nothing returns nothing call UnitDamageTargetBJ( GetTriggerUnit(), GetTriggerUnit(), 5.00, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL ) call UnitAddAbilityBJ( 'AOcr', GetTriggerUnit() ) set udg_I = ( udg_I + 1 ) call DisplayTextToForce( GetPlayersAll(), I2S(udg_I) ) call TriggerSleepAction(1.) call UnitRemoveAbilityBJ( 'AOcr', GetTriggerUnit() ) set udg_I = 0 endfunction
//=========================================================================== function InitTrig_Test takes nothing returns nothing set gg_trg_Test = CreateTrigger( ) call TriggerRegisterUnitEvent( gg_trg_Test, gg_unit_hrif_0000, EVENT_UNIT_DAMAGED ) call TriggerAddCondition( gg_trg_Test, Condition( function Trig_Test_Conditions ) ) call TriggerAddAction( gg_trg_Test, function Trig_Test_Actions ) endfunction В общем вылетел вар. Даже не спев сосчитать сколько раз продамажило. Вывод там там есть два потока на события и действия.
|
|
|
|
BlackFox | Дата: Вторник, 23 Апреля 2013, 01:22:00 | Сообщение # 161 |
3 уровень
Группа: Проверенные
Сообщений: 52
Награды: 0
Репутация: 25
Блокировки:
| Цитата (Ty3uK) псевдопотоке Наверняка там псевдопотоки.Цитата (Волчачка) function Trig_Test_Conditions takes nothing returns boolean if ( not ( GetUnitAbilityLevelSwapped('AOcr', GetTriggerUnit()) == 0 ) ) then return false endif return true endfunction Цитата (Волчачка) function Trig_Test_Actions takes nothing returns nothing call UnitDamageTargetBJ( GetTriggerUnit(), GetTriggerUnit(), 5.00, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL ) call UnitAddAbilityBJ( 'AOcr', GetTriggerUnit() ) set udg_I = ( udg_I + 1 ) call DisplayTextToForce( GetPlayersAll(), I2S(udg_I) ) call TriggerSleepAction(1.) call UnitRemoveAbilityBJ( 'AOcr', GetTriggerUnit() ) set udg_I = 0 endfunction call UnitAddAbilityBJ( 'AOcr', GetTriggerUnit() ) - если это сдвинуть выше call UnitDamageTargetBJ( GetTriggerUnit(), GetTriggerUnit(), 5.00, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL ), то зацикленности не будет. Всё верно, обрабатывают либо пседвопотоки, либо Цитата (Ty3uK) асинхронность событий и действий
SirNikolas падёт в неравном бою с брутфорсом, Alice.
|
|
|
|
SirNikolas | Дата: Вторник, 23 Апреля 2013, 13:22:55 | Сообщение # 162 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Цитата (Ty3uK) В принципе, можно реализовать это сторонним препроцессором. А если функция что-то возвращает или требуется передать несколько ссылок? Без перекидывания в глобальные переменные не обойдешься.Цитата (BlackFox) вот что самое интересно, а другими типами можно управлять, как unit, texttag, timer и др. т.е. классами. Так и знал, что последует такой вопрос.Код unit udg_u1, udg_u2;
void func(unit u) { u = udg_u1; }
void test() { unit u = udg_u2; func(u); if u == udg_u2 { printf("Ничего не изменилось"); } } Все типы передаются по значению. handle и наследники представляют собой указатели, и эти указатели тоже передаются по значению. code - просто замаскированный int, указатель на функцию. string - индекс в таблице строк.
|
|
|
|
Naturekid | Дата: Вторник, 23 Апреля 2013, 16:42:47 | Сообщение # 163 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| в моей TD раньше можно было написать каждые 80 сек фор а от 1 до 65 создать крипа и приказать топать wait 1.12 sec Вчера оптимизировал код(утечки) - теперь нельзя, 1 раз цикл срабатывает хД Почему так?
|
|
|
|
Ty3uK | Дата: Вторник, 23 Апреля 2013, 18:42:14 | Сообщение # 164 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Поток падает?
|
|
|
|
Волчачка | Дата: Вторник, 23 Апреля 2013, 19:34:02 | Сообщение # 165 |
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
| Цитата (Ty3uK) Поток падает? Да. Мы наносим, а потом закрываем условие. → если мы закроем условие раньше нанесения урона, то всё будет цело. Как ты сказал, значит там всё асинхронно.
|
|
|
|
Naturekid | Дата: Вторник, 23 Апреля 2013, 20:47:11 | Сообщение # 166 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| я вас недопонял. Раньше создавался крип и топал на базу утекали точки теперь крип создается в constant[1] и топает constant[2], т.е смысл не поменялся, но вейт теперь портит цикл.
|
|
|
|
Волчачка | Дата: Вторник, 23 Апреля 2013, 20:59:49 | Сообщение # 167 |
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
| Цитата (Naturekid) теперь крип создается в constant[1] и топает constant[2], т.е смысл не поменялся, но вейт теперь портит цикл. Зачем вам wait в цикле?
|
|
|
|
Naturekid | Дата: Вторник, 23 Апреля 2013, 21:36:40 | Сообщение # 168 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| Цитата (Волчачка) Зачем вам wait в цикле? это типа изврат у меня раньше был вместо таймера-перитодического евента
|
|
|
|
Ty3uK | Дата: Вторник, 23 Апреля 2013, 22:01:01 | Сообщение # 169 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Вот этот изврат и дает тебе сбой.
|
|
|
|
Naturekid | Дата: Вторник, 23 Апреля 2013, 22:52:50 | Сообщение # 170 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| Ty3uK, ? Ещё раз - без занесения точек в переменные - пашет, с занесением нет Я знаю что вейт в секунду нежелательно юзать в цикле, тем не менее у меня осталась допотопная версия карты и в ней всё норм работает(с утечками).
|
|
|
|
Волчачка | Дата: Среда, 24 Апреля 2013, 01:40:10 | Сообщение # 171 |
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
| Naturekid, учи jass для этого, дитя, или юзай в JNGP таким способом, что в переменную точки записывай точку, которую надо. Используй эту переменную, потом удаляй через call RemoveLocation(), хотя там есть триггер в JNGP: Point - Remove Location. Метод батрача - только хардкор.
Сообщение отредактировал Волчачка - Среда, 24 Апреля 2013, 01:41:26 |
|
|
|
Naturekid | Дата: Среда, 24 Апреля 2013, 02:13:58 | Сообщение # 172 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| Волчачка, ты тупой? А я по твоему что делаю?
|
|
|
|
Волчачка | Дата: Среда, 24 Апреля 2013, 02:49:00 | Сообщение # 173 |
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
| Naturekid, просто не используй wait в цикле. Вот и всё. Он его сбивает. Цитирую |Naturekid| "ты тупой?" Я просто думал, что ты используешь с системой ALL.j, и намудрил что-то там :D. *типа тролл фейс*
Сообщение отредактировал Волчачка - Среда, 24 Апреля 2013, 02:49:28 |
|
|
|
Naturekid | Дата: Среда, 24 Апреля 2013, 11:50:52 | Сообщение # 174 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| и так мы вернулись к тому, с чего начали. Я знаю чт о вейт лучше не юзать в цикле, окромя очень малых интервалов. Но почему вот ЭТО работает? Вот в чём мой вопрос. И почему если center of Область заменить на переменные - то вейт уже будет ломать?
Сообщение отредактировал SirNikolas - Воскресенье, 05 Мая 2013, 07:43:18 |
|
|
|
Волчачка | Дата: Среда, 24 Апреля 2013, 14:24:24 | Сообщение # 175 |
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
| Naturekid, а пробовал делать отдельно другой триггер, вместо этого цикла с счетчиком от 1 до 65? Ну к примеру:
Исходит таймер этого триггера на конце устанавливаем допустим step = 0 и включаем другой периодичный триггер
в другом триггере:
События: Периодичность 1.22 сек Условия: Нет Действия: Установить step = step + 1 Внутренне условие: Если step <= 65 то действия Те действия, которые ты делал в цикле. С фиксом переменными. иначе Отключить этот триггер.
Сообщение отредактировал Волчачка - Среда, 24 Апреля 2013, 14:52:58 |
|
|
|