Всем привет!
Недавно начал оптимизировать все что до этого написал
И сейчас возникла необходимость Сокращать триггеры
Недавно начал оптимизировать все что до этого написал
И сейчас возникла необходимость Сокращать триггеры
есть триггеры которые делают почти одно и тоже
вот пример
вот пример
function Trig__Conditions takes nothing returns boolean
if(not(UnitHasItemOfTypeBJ(GetManipulatingUnit(),0x6F646566)==true))then
return false
endif
if(not(UnitHasItemOfTypeBJ(GetManipulatingUnit(),0x6F736C6F)==true))then
return false
endif
if(not(UnitHasItemOfTypeBJ(GetManipulatingUnit(),0x6F666972)==true))then
return false
endif
if(not(UnitHasItemOfTypeBJ(GetManipulatingUnit(),0x6F636F72)==true))then
return false
endif
if(not(UnitHasItemOfTypeBJ(GetManipulatingUnit(),0x6F76656E)==true))then
return false
endif
if(not(UnitHasItemOfTypeBJ(GetManipulatingUnit(),0x4930304C)==true))then
return false
endif
return true
endfunctionэто условие которое проверяет если все предметы которые нужны есть у героя
его и хочу Оптимизировать
приглянулся этот пример
function tt_Cond takes unit u returns boolean
return(LoadBoolean(H,1,StringHash(("A")))) 
endfunction практически ничем не отличается от возвращаемого значения т.е True или False
но как превратить функцию которая возвращает boolean
чтобы она проверяла все 5 параметров и возвращала True когда у героя будут эти предметы?
чтобы она проверяла все 5 параметров и возвращала True когда у героя будут эти предметы?
как лучше использовать
return(LoadBoolean(H,1,StringHash(("A")))) чтобы она проверяла 5 параметров?
или, как оптимизировать вот это?
function F_Remove_Items_Cond takes unit u, integer id1, integer id2, integer id3, integer id4, integer id5, integer id6 returns boolean
if(id1 == 0) then
else // != null
if (F_GetInventoryIndex(u, Item[id1]) > 0) then 
else
return false
endif
endif
if(id2 == 0) then
else
if (F_GetInventoryIndex(u, Item[id2]) > 0) then
else
return false
endif
endif
if(id3 == 0) then
else
if (F_GetInventoryIndex(u, Item[id3]) > 0) then
else
return false
endif
endif
if(id4 == 0) then
else
if (F_GetInventoryIndex(u, Item[id4]) > 0) then
else
return false
endif
endif
if(id5 == 0) then
else
if (F_GetInventoryIndex(u, Item[id5]) > 0) then
else
return false
endif
endif
if(id6 == 0) then
else
if (F_GetInventoryIndex(u, Item[id6]) > 0) then
else
return false
endif
endif
return true
endfunctionПринятый ответ
RequiredItems = {0x6F646566, 0x6F736C6F, 0x6F666972, 0x6F636F72, 0x6F76656E, 0x4930304C}
function checkItems(u)
    for _, v in ipairs(RequiredItems) do
        if not UnitHasItemOfTypeBJ(u, v) then
            return false
        end
    end
    return true
end
Результат
 Загруженные файлы
        
    
    
        
            
                `
            
            
                
        
    
    ОЖИДАНИЕ РЕКЛАМЫ...
            
                    
                        Чтобы оставить комментарий, пожалуйста, войдите на сайт.
                    
                
             
                        
                        
                    
 WC3
                                WC3
                            



 
                    
                
Ред. ScorpioT1000
Ред. SoulRazor
у меня тоже самое реализовано но я использую Функции, причем несколько, этого и пытаюсь избежать
Ред. EugeAl
Ред. EugeAl
Ред. Makeba
Раз уж мы всем хгмом делаем наработку для крафтов, то вкачусь тожеВ луа я бы сделал так. Ну, если все предметы разные, без повторений.Ред. Centyrion
Изящно