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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Области
Области
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 facepalm


 

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
Блокировки:
твой новый код вообще не работал, но благодаря ему, я догадался, что было не так в старом. Спс, все робит.

 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Области
  • Страница 1 из 1
  • 1
Поиск:

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