XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Hate
конь вакуумный
offline
Опыт: 43,030
Активность:
попробуйте так
function CopyGroup takes group g returns group
    set bj_groupAddGroupDest = CreateGroup()
    call ForGroup(g, function GroupAddGroupEnum)
    return bj_groupAddGroupDest
endfunction

...
local group gruppa = CopyGroup(udg_Gruppa_HeroUnitov_Geroev)
local integer o = GetHandleId(udg_Gruppa_HeroUnitov_Geroev)
call SaveGroupHandle(udg_hash,o,1,gruppa)

call DisplayTextToForce(GetPlayersAll(),I2S(CountUnitsInGroup(gruppa)))
....
Старый 14.08.2012, 19:13
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
16GB, вот самое главное выделил
1 триггер:
» тык
function Trig_Nachalo_Eiti_aren_Actions takes nothing returns nothing
    local real angle = 0
    local real x = GetRectCenterX(gg_rct_Event_Bonus_Etei_arena_1)
    local real y = GetRectCenterY(gg_rct_Event_Bonus_Etei_arena_1)
    local real xtop = GetRectCenterX(gg_rct_Oblast_Teleporta_Arena_Top)
    local real ytop = GetRectCenterY(gg_rct_Oblast_Teleporta_Arena_Top)
    local real xbot = GetRectCenterX(gg_rct_Oblast_Teleporta_Arena_Bot)
    local real ybot = GetRectCenterY(gg_rct_Oblast_Teleporta_Arena_Bot)
    local unit Picked
    local unit eiti = CreateUnit(Player(PLAYER_NEUTRAL_AGGRESSIVE),'n001',x,y,270.00)
    local timer t2 = CreateTimer()
    local timerdialog td = CreateTimerDialog(t2)
    local integer h2 = GetHandleId(t2)
    local timer t = CreateTimer()
    local integer h = GetHandleId(t)
    local group gruppa = udg_Gruppa_HeroUnitov_Geroev
    local group grupa = udg_Gruppa_HeroUnitov_Geroev
    local integer I = 0
    local integer lvl = 0
    local integer hhero
    local integer o = GetHandleId(grupa)
    call DisplayTextToForce(GetPlayersAll(),I2S(o))
    call DisplayTextToForce(GetPlayersAll(),I2S(CountUnitsInGroup(gruppa)))
    
    call SaveUnitHandle(udg_hash,h,2,eiti)
    call SaveInteger(udg_hash,h,3,240)
    call SaveInteger(udg_hash,h,4,lvl)
    call SaveInteger(udg_hash,h,5,I)
    call SaveReal(udg_hash,h,6,x)
    call SaveReal(udg_hash,h,7,y)
    
    call SaveGroupHandle(udg_hash,o,1,grupa)
   // call DisplayTextToForce(GetPlayersAll(),I2S(CountUnitsInGroup(gruppa)))
   // call DisplayTextToForce(GetPlayersAll(),I2S(o))
    call DisplayTextToForce(GetPlayersAll(),I2S(GetHandleId(grupa)))
       
                                            
    //call DisplayTextToForce(GetPlayersAll(),I2S((gruppa)))
    call DisableTrigger( gg_trg_Hero_Dead )
    call ForForce( bj_FORCE_ALL_PLAYERS, function Trig_Nachalo_Eiti_aren_FuncForGroup )
    call SaveUnitHandle(udg_hash,h,1,eiti)
    if (IsPlayerInForce(GetLocalPlayer(), bj_FORCE_ALL_PLAYERS)) then
        // Use only local code (no net traffic) within this block to avoid desyncs.
        call DisplayTimedTextToPlayer(GetLocalPlayer(), 400, 400, 10.00, "TRIGSTR_8067")
        call DisplayTimedTextToPlayer(GetLocalPlayer(), 400, 400, 10.00, "TRIGSTR_8070")
    endif
loop
    set Picked = FirstOfGroup(gruppa)
    exitwhen  Picked == null
    set hhero = GetHandleId(Picked)
    call SaveInteger(udg_hash,hhero,1,0)
    set angle = angle+40.00
    call SetUnitPosition(Picked,(x+ 400 * Cos(angle * bj_DEGTORAD)),(y + 400 * Sin(angle * bj_DEGTORAD)))
    call SetUnitFacing(Picked, bj_RADTODEG * Atan2(y - GetUnitY(Picked), x - GetUnitX(Picked)))
       if (GetLocalPlayer() == GetOwningPlayer(Picked)) then
        // Use only local code (no net traffic) within this block to avoid desyncs.
        call PanCameraToTimed(x, y, 0.00)
        endif
    call GroupRemoveUnit(gruppa,Picked)
endloop
        call GroupEnumUnitsInRange(gruppa,0,0,99999,null)
loop
    set Picked = FirstOfGroup(gruppa)
    exitwhen  Picked == null
    if IsUnitType(Picked, UNIT_TYPE_SUMMONED) or IsUnitIllusion(Picked) then
    call KillUnit(Picked)
    endif
    call GroupRemoveUnit(gruppa,Picked)
endloop

    call GroupEnumUnitsInRect(gruppa, gg_rct_Event_Bonus_Etei_arena_1, null)
    
loop
    set Picked = FirstOfGroup(gruppa)
    exitwhen  Picked == null
    call PauseUnit( Picked,true )
    call GroupRemoveUnit(gruppa,Picked)
endloop

    call GroupEnumUnitsInRect(gruppa, gg_rct_Event_Bonus_Etei_arena_1, null)
    call TriggerSleepAction( 4.00 )
    
    loop
    set Picked = FirstOfGroup(gruppa)
    exitwhen  Picked == null
    call PauseUnit( Picked,false)
    call GroupRemoveUnit(gruppa,Picked)
endloop

    call CreateUnit( Player(PLAYER_NEUTRAL_PASSIVE),'h012', xtop,ytop,0.00 )
    call CreateUnit( Player(PLAYER_NEUTRAL_PASSIVE),'h012', xbot,ybot,0.00 )
    call EnableTrigger( gg_trg_Monetki_and_Hilki_and_Skill )
    call TimerStart(t2, 40.00, false, null)
    call TimerDialogSetTitle(td, "Time Remaining:")
    call TimerDialogDisplay(td, true)
    call TimerDialogSetTimeColor(td, 255, 30, 30, 10)
    call TimerStart(t, 0.50, true, function Trig_Nachalo_Eiti_aren_Actions_Periodic)
    set Picked = null
    set eiti = null
    set t = null
    set t2 = null
    set td = null
    call GroupClear(gruppa) 
    call DestroyGroup(gruppa)
    set gruppa = null
endfunction
//===========================================================================
function InitTrig_Nachalo_Eiti_aren takes nothing returns nothing
    set gg_trg_Nachalo_Eiti_aren = CreateTrigger(  )
    call TriggerAddAction( gg_trg_Nachalo_Eiti_aren, function Trig_Nachalo_Eiti_aren_Actions )
endfunction
кусок 2-ого:
» тык
function Trig_HeroDeadonEitiArena_Conditions takes nothing returns boolean
local real xu = GetUnitX(GetDyingUnit())
local real yu = GetUnitY(GetDyingUnit())
        return IsUnitType(GetDyingUnit(), UNIT_TYPE_HERO)== true and ((GetRectMinX(gg_rct_Event_Bonus_Etei_arena_1) <= xu) and (xu <= GetRectMaxX(gg_rct_Event_Bonus_Etei_arena_1)) and (GetRectMinY(gg_rct_Event_Bonus_Etei_arena_1) <= yu) and (yu <= GetRectMaxY(gg_rct_Event_Bonus_Etei_arena_1)))
endfunction

function Trig_HeroDeadonEitiArena_Actions takes nothing returns nothing
local unit u = GetDyingUnit()
local integer hhero = GetHandleId(u)
local player p = GetOwningPlayer(u)
local integer play = GetPlayerId(p) + 1
local integer array heroint
//local integer hash = LoadInteger(udg_hash,hhero,1)
local integer random = GetRandomInt(1, 2)
local integer o = GetHandleId(udg_Gruppa_HeroUnitov_Geroev)
local group g = LoadGroupHandle(udg_hash,o,1)
    call DisplayTextToForce(GetPlayersAll(),I2S(GetHandleId(g)))
call DisplayTextToForce(GetPlayersAll(),I2S(CountUnitsInGroup(g)))
//call DisplayTimedTextToPlayer(GetLocalPlayer(), 400, 400, 5.00, (GetPlayerName(p) + " |cFFFF0000использует второй шанс|r"))
// set udg_Integer_Kolvo_Giznei_EtitArena[p] =  udg_Integer_Kolvo_Giznei_EtitArena[p] + 1
    set heroint[play] = LoadInteger(udg_hash,hhero,1)
    set heroint[play] = heroint[play]+1
    call SaveInteger(udg_hash,hhero,1,heroint[play])
    if heroint[play] == 1   then
        if random == 1 then
         if IsPlayerInForce(GetLocalPlayer(),bj_FORCE_ALL_PLAYERS) then
        // Use only local code (no net traffic) within this block to avoid desyncs.
        call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 5.00, (GetPlayerName(p) + " |cFFFF0000потерял одну из двух своих жизней!!!|r"))
        else
                    call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 5.00, (GetPlayerName(p) + " |cFFFF0000использует второй шанс|r"))
        endif
        call TriggerSleepAction( 3.00 )
        call ReviveHeroLoc( u, GetUnitLoc(u), true )
    else
        if random == 1 then
    call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 5.00, (GetPlayerName(p) + " |cFFFF0000отхватил люлей от йети!!!|r"))
        else
    call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 5.00, (GetPlayerName(p) + " |cFFFF0000был жестоко наказан|r"))
    endif
    endif
    endif
   // call SaveGroupHandle(udg_hash,o,1,g)
    if heroint[play] == 2  then
    call GroupRemoveUnit(g, u)
   //call SaveGroupHandle(udg_hash,o,1,g)
    call FlushChildHashtable(udg_hash,hhero)
    endif
    if CountUnitsInGroup(g) <= 0 then
    call DisplayTextToForce(GetPlayersAll(),"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!sfgdfgdfcbn")
    endif
        set u = null
        set p = null 
endfunction
//===========================================================================
function InitTrig_HeroDeadonEitiArena takes nothing returns nothing
    local integer index = 0
    set gg_trg_HeroDeadonEitiArena = CreateTrigger(  )

 //////   local group gruppa = udg_Gruppa_HeroUnitov_Geroev
 //   local integer o = GetHandleId(gruppa)

 //   call SaveGroupHandle(udg_hash,o,1,udg_Gruppa_HeroUnitov_Geroev)
    loop
        call TriggerRegisterPlayerUnitEvent(gg_trg_HeroDeadonEitiArena, Player(index), EVENT_PLAYER_UNIT_DEATH, null)
        set index = index + 1
        exitwhen index == bj_MAX_PLAYER_SLOTS
    endloop
    call TriggerAddCondition( gg_trg_HeroDeadonEitiArena, Condition( function Trig_HeroDeadonEitiArena_Conditions ) )
    call TriggerAddAction( gg_trg_HeroDeadonEitiArena, function Trig_HeroDeadonEitiArena_Actions )
endfunction
Sladkoegka добавил:
Hate, а куда верхнюю функцию вставлять?
Старый 14.08.2012, 19:16
Hate
конь вакуумный
offline
Опыт: 43,030
Активность:
можешь в шапку карты
Старый 14.08.2012, 19:18
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Sladkoegka:
Faion, не помогло.
Не могло не помочь. GropuAddGroup юзал же?
Старый 14.08.2012, 19:19
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Faion,
GropuAddGroup юзал же?
ну пробовал,но я просто приравниваю. Но все равно не помагало.
Sladkoegka добавил:
Hate, по чему то показывает что по 0 в группе.
Старый 14.08.2012, 19:25
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Sladkoegka:
но я просто приравниваю.
Вот и я блин о том. Ты не создаешь копию объекта, а лишь сохраняешь ссылку на объект в памяти, т.е. фигню делаешь. Юзай функцию.
Старый 14.08.2012, 19:26
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Faion,
Вот и я блин о том. Ты не создаешь копию объекта, а лишь сохраняешь ссылку на объект в памяти, > т.е. фигню делаешь. Юзай функцию.
ОЙ лольчик,все заработало теперь показывает что и там и там по 9.
Спасибо Faion, но все же почему если я приравниваю 1 группу к другой, она не становится копией?
Старый 14.08.2012, 19:30
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Sladkoegka:
это убийственно там по 200 и 100 строк.
лол у меня системы по 1.5к-3к строк
Sladkoegka:
Спасибо Faion, но все же почему если я приравниваю 1 группу к другой, она не становится копией?
ты копируешь указатель, на один и тот же массив, а не сам массив
Старый 14.08.2012, 19:40
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
alexprey,
ты копируешь указатель, на один и тот же массив, а не сам массив
не совсем понятно почему так сделано но да ладно
лол у меня системы по 1.5к-3к строк
и ты выкладываешь их в виде текста сюда?
Старый 14.08.2012, 19:44
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
лол у меня системы по 1.5к-3к строк
выкладывай посмотрим) (я лично похвалю за кодотырканье!)

Отредактировано Cosonic5, 14.08.2012 в 19:57.
Старый 14.08.2012, 19:48
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
alexprey:
ты копируешь указатель, на один и тот же массив, а не сам массив
._. объект памяти
alexprey:
лол у меня системы по 1.5к-3к строк
ну и что, у меня вон квест система вообще ~10к, может даже больше
Старый 14.08.2012, 20:31
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Faion:
alexprey:
лол у меня системы по 1.5к-3к строк
>
ну и что, у меня вон квест система вообще ~10к, может даже больше
в этом то и дело, что ничего
Faion:
._. объект памяти
*_* ясно дело, пытался как можно проще ему объяснить
Старый 14.08.2012, 21:07
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
Sladkoegka:
но все же почему если я приравниваю 1 группу к другой, она не становится копией?
Все переменные которые "хранят" в себе объекты на самом деле являются указателями. Т.е. если у тебя есть один юнит ты можешь хранить его хоть в 10 переменных и все они будут указывать на него. Если юнита убрать из игры, то опять же все переменные будут указывать в пустой объект. Так же и с группами: если n переменных указывают на одну группу из 9 человек, то при очистке группы все переменные будут ссылаться на пустую группу.
Закрыто.
Старый 15.08.2012, 02:00
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 22:48.