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

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

Ответ
 
PiCkUpEr_AsT

offline
Опыт: 1,060
Активность:
Есть ли тут утечки? Суть: покупая предмет пустышку, апгрейдим предмет не пустышку
Суть: покупая предмет пустышку, апгрейдим предмет не пустышку

Код:
function Mask_of_Death_Conditions takes nothing returns boolean
return GetItemTypeId(GetManipulatedItem()) == 'I02G'
endfunction

function Mask_of_Death_Conditions1 takes nothing returns boolean
local integer array it
local integer i=0
set it[1]='I02H'
set it[2]='I02I'
set it[3]='I02J'
set it[4]='I02K'
set it[5]='I02L'
set it[6]='I02M'
set it[7]='I02N'
set it[8]='I02O'
set it[9]='I02P'
set it[10]='I02Q'
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 10
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
if UnitHasItemOfTypeBJ(GetTriggerUnit(),it[bj_forLoopAIndex]) == false then
set i=i+1
endif
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
return i==10
endfunction

function Mask_of_Death_Actions takes nothing returns nothing
local integer array it
local integer i
local unit u=GetTriggerUnit()
local sound error=CreateSoundFromLabel("InterfaceError",false,false,false,10,10)
set it[1]='I02H'
set it[2]='I02I'
set it[3]='I02J'
set it[4]='I02K'
set it[5]='I02L'
set it[6]='I02M'
set it[7]='I02N'
set it[8]='I02O'
set it[9]='I02P'
set it[10]='I02Q'

set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 10
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd 
if UnitHasItemOfTypeBJ(u,it[bj_forLoopAIndex]) == true then
set i=bj_forLoopAIndex
endif
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
call RemoveItem(GetManipulatedItem())

if Mask_of_Death_Conditions1() then
call UnitAddItemByIdSwapped('I02H',u)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIam\\AIamTarget.mdl",u,"origin"))
elseif i>0 and i<10 then
call RemoveItem(GetItemOfTypeFromUnitBJ(u,it[i]))
call UnitAddItemByIdSwapped(it[i+1],u)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIam\\AIamTarget.mdl",u,"origin"))
else
call AdjustPlayerStateBJ(55, GetTriggerPlayer(), PLAYER_STATE_RESOURCE_GOLD)
call DisplayTimedTextToPlayer(GetTriggerPlayer(),.5,-4.,2.,"|cffffcc00"+"Ты уже набрал максимальный уровень этого предмета"+"|r")
call StartSound(error)
call KillSoundWhenDone(error)
endif
endfunction

//===========================================================================
function InitTrig_Mask_of_Death takes nothing returns nothing
local trigger t = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_PICKUP_ITEM )
    call TriggerAddCondition(t, Condition( function Mask_of_Death_Conditions ) )
    call TriggerAddAction(t, function Mask_of_Death_Actions )
set t=null
    endfunction
Старый 12.09.2010, 12:02
Doc

offline
Опыт: 63,163
Активность:
нет обнуления локалок, и уничтожения звука в случае если нет ошибки. а так код не читал.
Старый 12.09.2010, 12:56
PiCkUpEr_AsT

offline
Опыт: 1,060
Активность:
я вроде бы читал где то, что из локалок нужно обнулять только юнитоподобные
а про звук какой командой он уничтожается?
Старый 12.09.2010, 19:54
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
Цитата:
нужно обнулять только юнитоподобные
обнулять надо хендлы...

bee добавил:
обнулять не надо: boolean, string, integer, real. вроде все. чо там еще
Старый 12.09.2010, 20:13
Elf_Stratigo

offline
Опыт: 4,699
Активность:
PiCkUpEr_AsT:
а про звук какой командой он уничтожается?
лучше не создавать, если не используется
а ещё лучше сделать отдельную функцию "интерфейс еррор", в которую поместить действия звук и сообщение и выполнять только для одного игрока, а не для всех
DisplayTimedTextToPlayer конечно только одному покажет, а вот звук играется всем
local integer array it <- чудовищно както, это же массив констант тем более - пусть будет глобальным и один раз инициализируется
Старый 12.09.2010, 20:43
PiCkUpEr_AsT

offline
Опыт: 1,060
Активность:
Цитата:
лучше не создавать, если не используется
а ещё лучше сделать отдельную функцию "интерфейс еррор", в которую поместить действия звук и сообщение и выполнять только для одного игрока, а не для всех
DisplayTimedTextToPlayer конечно только одному покажет, а вот звук играется всем
local integer array it <- чудовищно както, это же массив констант тем более - пусть будет глобальным и один раз инициализируется

1.как сделать чтобы звук играл для одного игрока?
2.у меня много таких функций, на каждый предмет создавать свою глобалку неохота, просто я их недолюбливаю, стараюсь делать все через локалки или же хэш. Почему это чудовищно?
Старый 13.09.2010, 08:04
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
PiCkUpEr_AsT:
Почему это чудовищно?
потому что глобалкой он инициализируется 1 раз, а локалкой - каждое создание триггера
Старый 13.09.2010, 08:08
PiCkUpEr_AsT

offline
Опыт: 1,060
Активность:
Цитата:
потому что глобалкой он инициализируется 1 раз, а локалкой - каждое создание триггера

и что с того
это ж не хэндл, утечек нет от этого
Старый 13.09.2010, 09:34
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
PiCkUpEr_AsT, тормоза
Старый 13.09.2010, 10:23
Elf_Stratigo

offline
Опыт: 4,699
Активность:
PiCkUpEr_AsT:
как сделать чтобы звук играл для одного игрока?
if GetLocalPlayer()==<player> then
<actions>
endif
у меня много таких функций, на каждый предмет создавать свою глобалку неохота,
используй возможности JNPG
Старый 13.09.2010, 14:50
Ответ

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

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

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

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



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