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

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

Ответ
 
saylar_06

offline
Опыт: 729
Активность:
Утечки или не правильный код?
В общем зашел я во всеми любимую Dota Allstars 6.41(Опен Дота) и взял от туда такой триг Recreate_Rune
» текст
function krkr takes nothing returns nothing
set udg_itm_DTAX_any_item_in_runic_region_REF1=GetEnumItem()
endfunction
function Trig_Recreate_Rune_Actions takes nothing returns nothing
local integer lEY=GetRandomInt(1,10)
set udg_itm_DTAX_any_item_in_runic_region_REF1=null
call EnumItemsInRectBJ(gg_rct_LeftRuneSpawn,function krkr)
if(udg_itm_DTAX_any_item_in_runic_region_REF1==null)then
set udg_bA_DTAX_is_any_item_in_runic_region_REF1[1]=true
else
set udg_bA_DTAX_is_any_item_in_runic_region_REF1[1]=false
endif
set udg_itm_DTAX_any_item_in_runic_region_REF1=null
call EnumItemsInRectBJ(gg_rct_RightRuneSpawn,function krkr)
if(udg_itm_DTAX_any_item_in_runic_region_REF1==null)then
set udg_bA_DTAX_is_any_item_in_runic_region_REF1[2]=true
else
set udg_bA_DTAX_is_any_item_in_runic_region_REF1[2]=false
endif
if(udg_bA_DTAX_is_any_item_in_runic_region_REF1[1]and udg_bA_DTAX_is_any_item_in_runic_region_REF1[2])then
if(lEY==1)then
call CreateItemLoc('fgrd',udg_loc_DTAX_LeftRuneSpawn)
endif
if(lEY==2)then
call CreateItemLoc('pres',udg_loc_DTAX_LeftRuneSpawn)
endif
if(lEY==3)then
call CreateItemLoc('pomn',udg_loc_DTAX_LeftRuneSpawn)
endif
if(lEY==4)then
call CreateItemLoc('pnvu',udg_loc_DTAX_LeftRuneSpawn)
endif
if(lEY==5)then
call CreateItemLoc('fgrd',udg_loc_DTAX_RightRuneSpawn)
endif
if(lEY==6)then
call CreateItemLoc('pres',udg_loc_DTAX_RightRuneSpawn)
endif
if(lEY==7)then
call CreateItemLoc('pomn',udg_loc_DTAX_RightRuneSpawn)
endif
if(lEY==8)then
call CreateItemLoc('pnvu',udg_loc_DTAX_RightRuneSpawn)
endif
if(lEY==9)then
call CreateItemLoc('I007',udg_loc_DTAX_LeftRuneSpawn)
endif
if(lEY==10)then
call CreateItemLoc('I007',udg_loc_DTAX_RightRuneSpawn)
endif
set udg_bA_DTAX_is_any_item_in_runic_region_REF1[1]=false
set udg_bA_DTAX_is_any_item_in_runic_region_REF1[2]=false
endif
endfunction
function StartTrigger_Recreate_Rune takes nothing returns nothing
set gg_trg_Recreate_Rune=CreateTrigger()
call TriggerRegisterTimerEventPeriodic(gg_trg_Recreate_Rune,120.)
call TriggerAddAction(gg_trg_Recreate_Rune,function Trig_Recreate_Rune_Actions)
endfunction
function InitTrig_Recreate_Rune takes nothing returns nothing
endfunction
1: Создал я две области
RightRuneSpawn LeftRuneSpawn
2: Скопировал переменные
далее заменил все обьекты спавна (предварительно посмотрев их в редакторе обьектов включил отображение переменных) карта вроде скомпилировалась и запустилась без ошибок но вот триггер почему то не работает подскажите пожалуйста что я не так делаю?

Отредактировано saylar_06, 28.05.2010 в 19:06.
Старый 28.05.2010, 17:13
ZeToX2007

offline
Опыт: 7,009
Активность:
Утечки есть:

Цитата:
Сообщение от saylar_06
call CreateItemLoc('fgrd',udg_loc_DTAX_LeftRuneSpawn)



тем более код ужасный.


Надо ещё смотреть саму карту, мож ид итемов не такие, может локи не указал. Так судя по коду затрудняюсь ответить.
Старый 28.05.2010, 17:37
saylar_06

offline
Опыт: 729
Активность:
ZeToX2007:
call CreateItemLoc('fgrd',udg_loc_DTAX_LeftRuneSpawn)
хм, а как должна работать функция CreateItemLoc (ид предмета, название локации или переменной?(заранее переменной присвоить значение локации?))
а ид итемов можно узнать в панели обьектов предварительно поставив галочку отображать ид итемов? вот такой вот итем вроде есть I007 я все заменил на него полюбому он должен проспавнится
Старый 28.05.2010, 17:59
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
udg_loc_DTAX_LeftRuneSpawn
да глобалка надо сюда вбить точку где должна создоваться руна
Старый 28.05.2010, 18:01
saylar_06

offline
Опыт: 729
Активность:
~16GB:
udg_loc_DTAX_LeftRuneSpawn
да глобалка надо сюда вбить точку где должна создоваться руна
ясно сейчас попробую, а можно этой переменной присвоить значение точки спавна? (Я к тому как тогда этот тригер работал в доте?)
Старый 28.05.2010, 18:40
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
лучше координаты использовать
Старый 28.05.2010, 19:00
saylar_06

offline
Опыт: 729
Активность:
В общем изменил код так вот, сохраняется но не работает :( где может быть ошибка?
» текст
function krkr takes nothing returns nothing
set udg_Rune_REF_1=GetEnumItem()
endfunction
function Trig_Recreate_Rune_Actions takes nothing returns nothing
local integer lEY=GetRandomInt(1,10)
set udg_Rune_REF_1=null
call EnumItemsInRectBJ(gg_rct_LeftRuneSpawn,function krkr)
if(udg_Rune_REF_1==null)then
set udg_Rune_REF_2[1]=true
else
set udg_Rune_REF_2[1]=false
endif
set udg_Rune_REF_1=null
call EnumItemsInRectBJ(gg_rct_RightRuneSpawn,function krkr)
if(udg_Rune_REF_1==null)then
set udg_Rune_REF_2[2]=true
else
set udg_Rune_REF_2[2]=false
endif
if(udg_Rune_REF_2[1]and udg_Rune_REF_2[2])then
if(lEY==1)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_LeftRuneSpawn) )
endif
if(lEY==2)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_LeftRuneSpawn) )
endif
if(lEY==3)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_LeftRuneSpawn) )
endif
if(lEY==4)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_LeftRuneSpawn) )
endif
if(lEY==5)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_RightRuneSpawn) )
endif
if(lEY==6)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_RightRuneSpawn) )
endif
if(lEY==7)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_RightRuneSpawn) )
endif
if(lEY==8)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_RightRuneSpawn) )
endif
if(lEY==9)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_LeftRuneSpawn) )
endif
if(lEY==10)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_RightRuneSpawn) )
endif
set udg_Rune_REF_2[1]=false
set udg_Rune_REF_2[2]=false
endif
endfunction
function StartTrigger_Recreate_Rune takes nothing returns nothing
set gg_trg_Recreate_Rune=CreateTrigger()
call TriggerRegisterTimerEventPeriodic(gg_trg_Recreate_Rune,15.)
call TriggerAddAction(gg_trg_Recreate_Rune,function Trig_Recreate_Rune_Actions)
endfunction
function InitTrig_Recreate_Rune takes nothing returns nothing
endfunction
Старый 28.05.2010, 19:04
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
ну во-первых не инитиализируется триггер. при загрузке карты запускается функция "InitTrig_Recreate_Rune"
то есть тебе надо взять весь код с функции StartTrigger_Recreate_Rune и засунуть начинку в InitTrig_Recreate_Rune и для прикола потереть StartTrigger_Recreate_Rune
Старый 28.05.2010, 19:10
saylar_06

offline
Опыт: 729
Активность:
bee:
ну во-первых не инитиализируется триггер. при загрузке карты запускается функция "InitTrig_Recreate_Rune"
то есть тебе надо взять весь код с функции StartTrigger_Recreate_Rune и засунуть начинку в InitTrig_Recreate_Rune и для прикола потереть StartTrigger_Recreate_Rune
спасибо, в общем изменил я его вот так вот, он заработал, ура! но не правильно :( (или я чего то не до понял) Сработал он так, через 15 секунд от начала игры проспавнилась руна в точке RightRuneSpawn и всё ;( подобал я её и больше она не появилась не там ни тут
» текст
function krkr takes nothing returns nothing
set udg_Rune_REF_1=GetEnumItem()
endfunction
function Trig_Recreate_Rune_Actions takes nothing returns nothing
local integer lEY=GetRandomInt(1,10)
set udg_Rune_REF_1=null
call EnumItemsInRectBJ(gg_rct_LeftRuneSpawn,function krkr)
if(udg_Rune_REF_1==null)then
set udg_Rune_REF_2[1]=true
else
set udg_Rune_REF_2[1]=false
endif
set udg_Rune_REF_1=null
call EnumItemsInRectBJ(gg_rct_RightRuneSpawn,function krkr)
if(udg_Rune_REF_1==null)then
set udg_Rune_REF_2[2]=true
else
set udg_Rune_REF_2[2]=false
endif
if(udg_Rune_REF_2[1]and udg_Rune_REF_2[2])then
if(lEY==1)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_LeftRuneSpawn) )
endif
if(lEY==2)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_LeftRuneSpawn) )
endif
if(lEY==3)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_LeftRuneSpawn) )
endif
if(lEY==4)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_LeftRuneSpawn) )
endif
if(lEY==5)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_RightRuneSpawn) )
endif
if(lEY==6)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_RightRuneSpawn) )
endif
if(lEY==7)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_RightRuneSpawn) )
endif
if(lEY==8)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_RightRuneSpawn) )
endif
if(lEY==9)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_LeftRuneSpawn) )
endif
if(lEY==10)then
call CreateItemLoc( 'I00K', GetRectCenter(gg_rct_RightRuneSpawn) )
endif
set udg_Rune_REF_2[1]=false
set udg_Rune_REF_2[2]=false
endif
endfunction
function InitTrig_Recreate_Rune takes nothing returns nothing
set gg_trg_Recreate_Rune=CreateTrigger()
call TriggerRegisterTimerEventPeriodic(gg_trg_Recreate_Rune,15.)
call TriggerAddAction(gg_trg_Recreate_Rune,function Trig_Recreate_Rune_Actions)
endfunction
Старый 28.05.2010, 21:06
ScorpioT1000
Работаем
online
Опыт: отключен
local integer lEY=GetRandomInt(1,10)
создаётся случайное из десяти в списке
Старый 28.05.2010, 23:01
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
saylar_06, короче заноси рав-коды предметов в массив и случайым числом создавай в случайной области
Старый 28.05.2010, 23:15
Ответ

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

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

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

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



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