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

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

Ответ
 
JET_LI

offline
Опыт: 1,724
Активность:
Ограничение на заряды предмета
Код:
function Trig_LimitFood_Conditions takes nothing returns boolean
    if (IsPlayerInForce(GetOwningPlayer(GetTriggerUnit()), udg_md_GrPeoples) == true) then
        return true
    endif
    return false
endfunction

function LimitFoodAdd takes nothing returns nothing
    local integer intitem=0
    local item array itm
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 6
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        if (GetItemTypeId(UnitItemInSlotBJ(GetTriggerUnit(), GetForLoopIndexA())) == 'I01P') then
            set itm[intitem]=UnitItemInSlotBJ(GetTriggerUnit(), GetForLoopIndexA())
            set intitem=intitem+1
        else
        endif
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    if (intitem>1) then
        call SetItemCharges(itm[0], ( GetItemCharges(itm[0]) + 30 ) )
        call RemoveItem( GetManipulatedItem() )
    else
    endif
endfunction

function Trig_LimitFood_Actions takes nothing returns nothing
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 6
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        if (GetItemCharges(UnitItemInSlotBJ(GetTriggerUnit(), GetForLoopIndexA())) < 300) and (GetItemTypeId(UnitItemInSlotBJ(GetTriggerUnit(), GetForLoopIndexA())) == 'I01P') then
            call LimitFoodAdd()
        else
        endif
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop 
    if (GetUnitTypeId(GetTriggerUnit()) == 'h00T') then
        if (GetItemTypeId(GetManipulatedItem()) == 'I01P') then
            call SetPlayerStateBJ( GetOwningPlayer(GetTriggerUnit()), PLAYER_STATE_FOOD_CAP_CEILING, GetItemCharges(GetItemOfTypeFromUnitBJ(GetTriggerUnit(), 'I01P')) )
        else
        endif
        if (GetItemTypeId(GetManipulatedItem()) != 'I01P') then
            call SetItemPositionLoc( GetManipulatedItem(), GetUnitLoc(GetTriggerUnit()) )
        else
        endif
    else
    endif       
endfunction

//===========================================================================
function InitTrig_LimitFood takes nothing returns nothing
    set gg_trg_LimitFood = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_LimitFood, EVENT_PLAYER_UNIT_PICKUP_ITEM )
    call TriggerAddCondition( gg_trg_LimitFood, Condition( function Trig_LimitFood_Conditions ) )
    call TriggerAddAction( gg_trg_LimitFood, function Trig_LimitFood_Actions )
endfunction

Всё кул робит, но вот у мну должно зарядов быть в предмете IO1P не больше 300, поэтому я и поставил условие:
Код:
set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 6
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        if (GetItemCharges(UnitItemInSlotBJ(GetTriggerUnit(), GetForLoopIndexA())) < 300) and (GetItemTypeId(UnitItemInSlotBJ(GetTriggerUnit(), GetForLoopIndexA())) == 'I01P') then
            call LimitFoodAdd()
        else
        endif
        set bj_forLoopAIndex = bj_forLoopAIndex

Но комп по-прежнему складывает заряды в этом предмете скажите плиз! чё за ошибка и где она, плиз. (((( Я измучился скажите плиз
[+] замечание от ShadoW DaemoN: с названием темы неувязочка...
Старый 08.03.2009, 17:52
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Думаю так должно работать
» code

Код:
function Trig_LimitFood_Conditions takes nothing returns boolean
    return IsPlayerInForce(GetOwningPlayer(GetTriggerUnit()), udg_md_GrPeoples)
endfunction

function Trig_LimitFood_Actions takes nothing returns nothing
    local integer i=0
    local integer c=0
    local unit u=GetTriggerUnit()
    local item it=null
    local item mit=GetManipulatedItem()
    loop
        exitwhen i>5
        set it=UnitItemInSlot(u,i)
        if GetItemCharges(it)<=300 and GetItemTypeId(it)=='I01P' and it!=mit then
            call SetItemCharges(it,GetItemCharges(it)+30)
            if GetUnitTypeId(u)=='h00T' then
                if GetItemTypeId(mit)=='I01P' then
                    call SetPlayerState(GetOwningPlayer(u),ConvertPlayerState(6),GetItemCharges(it))
                endif
            endif
            exitwhen true
        endif
        set i=i+1
    endloop
    set u=null
    set it=null
    set mit=null
endfunction

//===========================================================================
function InitTrig_LimitFood takes nothing returns nothing
    set gg_trg_LimitFood = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_LimitFood,ConvertPlayerUnitEvent(49))
    call TriggerAddCondition(gg_trg_LimitFood,Condition(function Trig_LimitFood_Conditions))
    call TriggerAddAction(gg_trg_LimitFood,function Trig_LimitFood_Actions)
endfunction

Старый 08.03.2009, 20:58
JET_LI

offline
Опыт: 1,724
Активность:
Всё кул, правдо я малюсенький недочот доделал! А так работа хорошая!
Код:
function Trig_LimitFood_Conditions takes nothing returns boolean
    return IsPlayerInForce(GetOwningPlayer(GetTriggerUnit()), udg_md_GrPeoples)
endfunction

function Trig_LimitFood_Actions takes nothing returns nothing
    local integer intitem=0
    local item array itm
    local integer i=0
    local integer c=0
    local unit u=GetTriggerUnit()
    local item it=null
    local item mit=GetManipulatedItem()
    loop
        exitwhen i>5
        set it=UnitItemInSlot(u,i)
        if GetItemCharges(it)<=270 and GetItemTypeId(it)=='I01P' and it!=mit then
            call SetItemCharges(it,GetItemCharges(it)+30)
            сall RemoveItem(mit)
            if GetUnitTypeId(u)=='h00T' then
                if GetItemTypeId(mit)=='I01P' then
                    call SetPlayerState(GetOwningPlayer(u),ConvertPlayerState(6),GetItemCharges(it))
                endif
            endif
            exitwhen true
        endif
        set i=i+1
    endloop
    set u=null
    set it=null
    set mit=null
endfunction

//===========================================================================
function InitTrig_LimitFood takes nothing returns nothing
    set gg_trg_LimitFood = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_LimitFood,ConvertPlayerUnitEvent(49))
    call TriggerAddCondition(gg_trg_LimitFood,Condition(function Trig_LimitFood_Conditions))
    call TriggerAddAction(gg_trg_LimitFood,function Trig_LimitFood_Actions)
endfunction

Я добавил RemoveItem! Спс тебе. Ты мну выручил!
RemoveItem(mit)

Отредактировано JET_LI, 09.03.2009 в 19:37.
Старый 09.03.2009, 19:05
Ответ

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

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

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

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



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