Сейчас 12:42:05 Суббота, 20 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [ВАЖНО] Общалка кодеров (Обмен опытом | Обсуждение проблем)
[ВАЖНО] Общалка кодеров
ВолчачкаДата: Понедельник, 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 должен стартовать в новом потоке. Но как я уже сказал - псевдопотоки или многопоточность? :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

ВолчачкаДата: Понедельник, 22 Апреля 2013, 21:07:23 | Сообщение # 153
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Ty3uK, хотя есть вариант многопоточности, т.к. просто выборка отряда выполнялась в доли секунд без wait'ов Они же TriggerSleepAction...
Цитата (Ty3uK)
псевдопотоки

Это тоже не исключено, ведь вар писался на C++ trollface
Хотя он может быть и многопоточным, или одно-поточным с применением псевдопотоков.
Так всё таки многопоточен.
 

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 - однопоточный, но асинхронная работа там есть. :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

ВолчачкаДата: Понедельник, 22 Апреля 2013, 21:42:15 | Сообщение # 156
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Цитата (Ty3uK)
NodeJS - однопоточный, но асинхронная работа там есть.

Ясно. Так значит, вар все таки однопоточный.
 

Ty3uKДата: Понедельник, 22 Апреля 2013, 21:59:49 | Сообщение # 157
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Волчачка,
Цитата (BlackFox)
Только разраб. знает тайну поточности движ. варика.


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

ВолчачкаДата: Понедельник, 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
Блокировки:
Периодики вроде как тоже в псевдопотоке, нет?

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

ВолчачкаДата: Понедельник, 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
Блокировки:
Поток падает?

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

ВолчачкаДата: Вторник, 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
Блокировки:
Вот этот изврат и дает тебе сбой.

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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
Блокировки:
Волчачка, ты тупой? lol
А я по твоему что делаю?


 

ВолчачкаДата: Среда, 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
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [ВАЖНО] Общалка кодеров (Обмен опытом | Обсуждение проблем)
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz