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 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ZeToX2007
offline
Опыт:
7,009Активность: |
Утечки есть:
Цитата:
тем более код ужасный. Надо ещё смотреть саму карту, мож ид итемов не такие, может локи не указал. Так судя по коду затрудняюсь ответить. |
|
28.05.2010, 17:37 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
saylar_06
offline
Опыт:
729Активность: |
ZeToX2007:
хм, а как должна работать функция CreateItemLoc (ид предмета, название локации или переменной?(заранее переменной присвоить значение локации?))
а ид итемов можно узнать в панели обьектов предварительно поставив галочку отображать ид итемов? вот такой вот итем вроде есть I007 я все заменил на него полюбому он должен проспавнится |
28.05.2010, 17:59 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
16GB
GhostOne User
offline
Опыт:
60,317Активность: |
udg_loc_DTAX_LeftRuneSpawn да глобалка надо сюда вбить точку где должна создоваться руна |
28.05.2010, 18:01 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
saylar_06
offline
Опыт:
729Активность: |
~16GB:
ясно сейчас попробую, а можно этой переменной присвоить значение точки спавна? (Я к тому как тогда этот тригер работал в доте?) |
28.05.2010, 18:40 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
bee
vjass.optimizer
offline
Опыт:
16,615Активность: |
лучше координаты использовать |
28.05.2010, 19:00 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
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 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
bee
vjass.optimizer
offline
Опыт:
16,615Активность: |
ну во-первых не инитиализируется триггер. при загрузке карты запускается функция "InitTrig_Recreate_Rune"
то есть тебе надо взять весь код с функции StartTrigger_Recreate_Rune и засунуть начинку в InitTrig_Recreate_Rune и для прикола потереть StartTrigger_Recreate_Rune |
28.05.2010, 19:10 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
saylar_06
offline
Опыт:
729Активность: |
bee:
спасибо, в общем изменил я его вот так вот, он заработал, ура! но не правильно :( (или я чего то не до понял) Сработал он так, через 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 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
online
Опыт: отключен
|
создаётся случайное из десяти в списке |
28.05.2010, 23:01 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
bee
vjass.optimizer
offline
Опыт:
16,615Активность: |
saylar_06, короче заноси рав-коды предметов в массив и случайым числом создавай в случайной области |
28.05.2010, 23:15 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|