|
|
|
|
Области
|
|
xomach | Дата: Среда, 29 Августа 2012, 13:25:24 | Сообщение # 1 |
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
| У меня есть массив из н областей и целое число. Если юнит вошел в Ктую область, надо установить целое=К. Добавлено (29 Августа 2012, 13:25:24) --------------------------------------------- кстати, на юнита есть ограничение
|
|
|
|
[SeKtOR] | Дата: Среда, 29 Августа 2012, 13:30:30 | Сообщение # 2 |
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
| Чё за K?
|
|
|
|
xomach | Дата: Среда, 29 Августа 2012, 13:35:59 | Сообщение # 3 |
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
| иначе говоря, целое=номер области, в которую вошли. Как с таймерами Добавлено (29 Августа 2012, 13:35:59) --------------------------------------------- Все, нашёл, как сделать.
|
|
|
|
SirNikolas | Дата: Среда, 29 Августа 2012, 13:37:50 | Сообщение # 4 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Области вряд ли получится отследить, да это и не нужно. Составляешь массив регионов и проходишь по нему последовательным перебором с GetTriggeringRegion().
|
|
|
|
xomach | Дата: Среда, 29 Августа 2012, 13:50:43 | Сообщение # 5 |
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
| SirNikolas, ну я и имел ввиду массив регионов и уже сделал. Но спасибо огромное за Quote (SirNikolas) GetTriggeringRegion(). я не знал, что такое есть, использовал GetEntireMapRect() . Сейчас поменяю
|
|
|
|
SirNikolas | Дата: Среда, 29 Августа 2012, 13:55:12 | Сообщение # 6 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| При чем тут это?Code function GetEntireMapRect takes nothing returns rect return GetWorldBounds() endfunction
|
|
|
|
xomach | Дата: Среда, 29 Августа 2012, 14:21:32 | Сообщение # 7 |
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
| SirNikolas, стоп, проблема, я не могу понять: Code function Trig_CpCount_Actions takes nothing returns nothing local integer i = 1 local integer n = GetPlayerId(GetOwningPlayer(GetEnteringUnit()))+1 loop exitwhen i>25 if udg_cp[i]==GetTriggeringRegion() then DisplayTextToForce(GetPlayersAll(), I2S(udg_cpcounter[n])) if i>udg_cpcounter[n] then set udg_cpcounter[n] = i endif return endif i=i+1 endloop endfunction
//=========================================================================== function InitTrig_CpCount takes nothing returns nothing set gg_trg_CpCount = CreateTrigger( ) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________001) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________002) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________003) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________004) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________005) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________006) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________007) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________008) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________009) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________010) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________011) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________012) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________013) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________014) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________015) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________016) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________017) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________018) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________019) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________020) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________021) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________022) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________023) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct________________024) call TriggerRegisterEnterRectSimple( gg_trg_CpCount, gg_rct_Start) call TriggerAddAction( gg_trg_CpCount, function Trig_CpCount_Actions ) endfunction вот ини триггер:
но DisplayTextToForce(GetPlayersAll(), I2S(udg_cpcounter[n])) не срабатывает вообще. Тоесть 1 иф не проходит никогда.Добавлено (29 Августа 2012, 14:15:04) --------------------------------------------- Стоп еще раз, а регион == область? Добавлено (29 Августа 2012, 14:21:32) --------------------------------------------- cannot convert rect to region
|
|
|
|
SirNikolas | Дата: Среда, 29 Августа 2012, 14:25:20 | Сообщение # 8 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Я же говорю, нужен массив регионов, а не областей.Code globals region array udg_Rg endglobals
function Trig_CpCount_Actions takes nothing returns nothing local handle h = GetTriggeringRegion() local integer i = 1 local integer n = GetPlayerId(GetOwnignPlayer(GetTriggerUnit())) loop if h == udg_Rg[i] then call DisplayTimedTextToPlayer(GetLocalPlayer(), .0, .0, I2S(n)) //... exitwhen true endif set i = i + 1 endloop set h = null endfunction
function InitTrig_CpCount takes nothing returns nothing set gg_trg_CpCount = CreateTrigger() //! textmacro mCpCount_RegisterEvent takes RG, RCT set udg_Rg[$RG$] = CreateRegion() call RegionAddRect(udg_Rg[$RG$], gg_rct________________$RCT$) call TriggerRegisterEnterRegion(gg_trg_CpCount, udg_Rg[$RG$], null) //! endtextmacro //! runtextmacro mCpCount_RegisterEvent("1", "001") //! runtextmacro mCpCount_RegisterEvent("2", "002") //! runtextmacro mCpCount_RegisterEvent("3", "003") //! runtextmacro mCpCount_RegisterEvent("4", "004") //! runtextmacro mCpCount_RegisterEvent("5", "005") //! runtextmacro mCpCount_RegisterEvent("6", "006") //! runtextmacro mCpCount_RegisterEvent("7", "007") //! runtextmacro mCpCount_RegisterEvent("8", "008") //! runtextmacro mCpCount_RegisterEvent("9", "009") //! runtextmacro mCpCount_RegisterEvent("10", "010") //! runtextmacro mCpCount_RegisterEvent("11", "011") //! runtextmacro mCpCount_RegisterEvent("12", "012") //! runtextmacro mCpCount_RegisterEvent("13", "013") //! runtextmacro mCpCount_RegisterEvent("14", "014") //! runtextmacro mCpCount_RegisterEvent("15", "015") //! runtextmacro mCpCount_RegisterEvent("16", "016") //! runtextmacro mCpCount_RegisterEvent("17", "017") //! runtextmacro mCpCount_RegisterEvent("18", "018") //! runtextmacro mCpCount_RegisterEvent("19", "019") //! runtextmacro mCpCount_RegisterEvent("20", "020") //! runtextmacro mCpCount_RegisterEvent("21", "021") //! runtextmacro mCpCount_RegisterEvent("22", "022") //! runtextmacro mCpCount_RegisterEvent("23", "023") //! runtextmacro mCpCount_RegisterEvent("24", "024") //! runtextmacro mCpCount_RegisterEvent("25", "025") endfunction P. S. Это vJass.Добавлено (29 Августа 2012, 14:25:20) ---------------------------------------------
Quote (xomach) Стоп еще раз, а регион == область? Нет же.
|
|
|
|
xomach | Дата: Среда, 29 Августа 2012, 14:28:08 | Сообщение # 9 |
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
| SirNikolas, а чем регион отличается от области? И как теперь объявить переменные массива?
|
|
|
|
SirNikolas | Дата: Среда, 29 Августа 2012, 14:29:51 | Сообщение # 10 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Буквально два дня назад объяснял. Сейчас поищу по последним постам.
|
|
|
|
xomach | Дата: Среда, 29 Августа 2012, 14:32:01 | Сообщение # 11 |
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
| SirNikolas, аа понял, смортя твой код, регион составляется из областей, так? Тоесть там обьявлять уже ниче не надо?
|
|
|
|
SirNikolas | Дата: Среда, 29 Августа 2012, 14:32:55 | Сообщение # 12 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Ну, не два дня, четыре.
|
|
|
|
xomach | Дата: Среда, 29 Августа 2012, 14:57:26 | Сообщение # 13 |
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
| SirNikolas, Ничего не работает. Событие вообще не срабатывает. Я не понял, в твоем варианте надо какие-либо переменные устанавливать заранее или менять что-то?
|
|
|
|
Pebbles | Дата: Среда, 29 Августа 2012, 15:01:41 | Сообщение # 14 |
7 уровень
Группа: Проверенные
Сообщений: 258
Награды: 0
Репутация: 1335
Блокировки:
| unit enters region[1] unit enters region[2] ... unit enters region[25]
wait 0.00 sec for loop integer a from 1 o 25 do if then else multiple functions if region[getforloopinteger a] contains triggering unit = да then Игра - Display to (Owner of triggering unit) the text string(getforloopinteger a)
Yabba Dabba Doo!
|
|
|
|
SirNikolas | Дата: Среда, 29 Августа 2012, 15:07:07 | Сообщение # 15 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Pebbles) if region[getforloopinteger a] contains triggering unit = да При наложении областей будет неправильно работать.
|
|
|
|
xomach | Дата: Среда, 29 Августа 2012, 16:51:30 | Сообщение # 16 |
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
| Pebbles, спс, все норм работает. SirNikolas, а все-таки, почему твой вариант не робит?
|
|
|
|
SirNikolas | Дата: Среда, 29 Августа 2012, 17:09:55 | Сообщение # 17 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (xomach) а все-таки, почему твой вариант не робит? Может, потому что я не добавил действие в триггер?)
|
|
|
|
lawson | Дата: Среда, 29 Августа 2012, 17:25:25 | Сообщение # 18 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| А почему бы не сравнить просто мин и макс положение юнита в области, взять весь список областей и циклом пересчитать координаты юнита и координты области?
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
SirNikolas | Дата: Среда, 29 Августа 2012, 17:30:22 | Сообщение # 19 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (SirNikolas) При наложении областей будет неправильно работать.
|
|
|
|
Hexing | Дата: Среда, 29 Августа 2012, 17:32:43 | Сообщение # 20 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (SirNikolas) Quote (SirNikolas) При наложении областей будет неправильно работать. сравнивать мин макс ректа с положениями всех юнитов(смотреть глазами областей), и параллельно массиву областей - массив логических есть ли там кто, должно сработать
Сообщение отредактировал Hexing - Среда, 29 Августа 2012, 17:33:18 |
|
|
|
xomach | Дата: Среда, 29 Августа 2012, 19:25:35 | Сообщение # 21 |
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
| Quote (SirNikolas) Может, потому что я не добавил действие в триггер?) я в триггере поставил вывод сообщения в начале, но он вообще не срабатывает. То есть событие не робит.
|
|
|
|
SirNikolas | Дата: Среда, 29 Августа 2012, 20:20:33 | Сообщение # 22 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Допиши call TriggerAddAction(gg_trg_CpCount, function Trig_CpCount_Actions)
|
|
|
|
xomach | Дата: Четверг, 30 Августа 2012, 10:27:44 | Сообщение # 23 |
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
| SirNikolas, все прекрасно работает, но! Почему-то при каждом "вьезде" событие срабатывает мгновенно очень много раз(скорей всего 25). Именно событие. До цикла.
|
|
|
|
SirNikolas | Дата: Четверг, 30 Августа 2012, 11:07:19 | Сообщение # 24 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Code globals region array udg_Rg endglobals
function Trig_CpCount_Actions takes nothing returns nothing printf(" Actions: begin"); local handle h = GetTriggeringRegion() local integer i = 1 local integer n = GetPlayerId(GetOwningPlayer(GetTriggerUnit())) printf("%h %i", h, n); loop if h == udg_Rg[i] then call DisplayTimedTextToPlayer(GetLocalPlayer(), 60., .0, .0, I2S(n) + " " + I2S(i)) //... exitwhen true endif set i = i + 1 endloop printf(" Actions: end"); set h = null endfunction
function InitTrig_test takes nothing returns nothing printf(" test: begin") local trigger trig = CreateTrigger() //! textmacro mCpCount_RegisterEvent takes RG, RCT set udg_Rg[$RG$] = CreateRegion() call RegionAddRect(udg_Rg[$RG$], gg_rct________________$RCT$) call TriggerRegisterEnterRegion(trig, udg_Rg[$RG$], null) //! endtextmacro //! runtextmacro mCpCount_RegisterEvent("2", "002") //! runtextmacro mCpCount_RegisterEvent("3", "003") //! runtextmacro mCpCount_RegisterEvent("4", "004") //! runtextmacro mCpCount_RegisterEvent("5", "005") //! runtextmacro mCpCount_RegisterEvent("6", "006") //! runtextmacro mCpCount_RegisterEvent("7", "007") //! runtextmacro mCpCount_RegisterEvent("8", "008") //! runtextmacro mCpCount_RegisterEvent("9", "009") //! runtextmacro mCpCount_RegisterEvent("10", "010") //! runtextmacro mCpCount_RegisterEvent("11", "011") //! runtextmacro mCpCount_RegisterEvent("12", "012") //! runtextmacro mCpCount_RegisterEvent("13", "013") call TriggerAddAction(trig, function Trig_CpCount_Actions) printf(" test: end") set trig = null endfunction Такой код у меня работает нормально. Событие срабатывает один раз, игрока и номер области определяет правильно.
|
|
|
|
xomach | Дата: Четверг, 30 Августа 2012, 11:28:05 | Сообщение # 25 |
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
| твой новый код вообще не работал, но благодаря ему, я догадался, что было не так в старом. Спс, все робит.
|
|
|
|
|
|
|
|
|
|
|