Главная     Битва за Лордерон     Штурм и Оборона     Russian DotA     Форум     Файлы     Редактор     Разное     Дизайн     Поиск     Регистрация     Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум русских картостроителей » ELForcer Team Survival » ETS - Предметы » Jass код для сборки (Заменить на работе.)
Jass код для сборки
ELForcer Дата: Пятница, 17 Июль 2009, 02:07|Пост # 1|
Администратор

function Trig_CreateItemWeaponsOnJass_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A009' ) ) then
return false
endif
return true
endfunction

// Сборка предмета найденным юнитам
function FCreateItem takes integer Item1, integer Item2, integer NewItem returns nothing

// Принятие перемеременных
local unit CurrentUnit = GetEnumUnit() // Выбранный юнит
local item array Items // Массив слотов и предметов
local integer A
local integer B
local effect CurrEffect
local location loc = GetUnitLoc(CurrentUnit)

// Проверка и сборка
set A = 0
loop
exitwhen A > 6
set B = 0
loop
exitwhen B > 6
set Items[1] = UnitItemInSlot(CurrentUnit, A)
set Items[2] = UnitItemInSlot(CurrentUnit, B)
// call DisplayTextToForce( GetPlayersAll(), "Name 1: " + GetItemName(Items[1]) )
// call DisplayTextToForce( GetPlayersAll(), "TypeId 1: " + I2S(GetItemTypeId(Items[1])) )

// call DisplayTextToForce( GetPlayersAll(), "Name 2: " + GetItemName(Items[2]) )
// call DisplayTextToForce( GetPlayersAll(), "TypeId 2: " + I2S(GetItemTypeId(Items[2])))

if (GetItemTypeId(Items[1]) == Item1) and (GetItemTypeId(Items[2]) == Item2) and (Items[1] != Items[2] ) then
call RemoveItem(UnitItemInSlot(CurrentUnit, A))
call RemoveItem(UnitItemInSlot(CurrentUnit, B))
call UnitAddItemByIdSwapped(NewItem, CurrentUnit)

// Создаем анимацию сборки на юните
set CurrEffect = AddSpecialEffectLoc("Abilities\\Spells\\Human\\HolyBolt\\HolyBoltSpecialArt.mdl",loc)
call PolledWait(2)
call ResetUnitAnimation( GetTriggerUnit() )
call DestroyEffect(CurrEffect)
set CurrEffect = null
call RemoveLocation(loc)
set loc = null

endif
set B = B + 1
endloop
set A = A + 1
endloop

set CurrentUnit = null
set Items[1] = null
set Items[2] = null
set A = 0
set B = 0
endfunction

function CheckItem takes nothing returns nothing

//Сборка простых мечей
call FCreateItem('I00G', 'I00F', 'I00H') //10 уровень
call FCreateItem('I00F', 'I00E', 'I00G') //9 уровень
call FCreateItem('I00E', 'I00D', 'I00F') //8 уровень
call FCreateItem('I00D', 'I00C', 'I00E') //7 уровень
call FCreateItem('I00C', 'I00B', 'I00D') //6 уровень
call FCreateItem('I00B', 'I00A', 'I00C') //5 уровень
call FCreateItem('I00A', 'I009', 'I00B') //4 уровень
call FCreateItem('I009', 'I008', 'I00A') //3 уровень
call FCreateItem('I008', 'I008', 'I009') //2 уровень

//Сборка отравленных мечей на основе мечей
call FCreateItem('I013', 'I013', 'I015') //10 уровень
call FCreateItem('I012', 'I012', 'I014') //9 уровень
call FCreateItem('I00G', 'I011', 'I013') //8 уровень
call FCreateItem('I011', 'I010', 'I012') //7 уровень
call FCreateItem('I010', 'I00Z', 'I011') //6 уровень
call FCreateItem('I00Z', 'I00Y', 'I010') //5 уровень
call FCreateItem('I00Y', 'I00X', 'I00Z') //4 уровень
call FCreateItem('I00X', 'I00W', 'I00Y') //3 уровень
call FCreateItem('I00W', 'I00W', 'I00X') //2 уровень

//Сборка отравленных мечей с помощью сферы
call FCreateItem('I00H', 'I00V', 'I015') //10 уровень
call FCreateItem('I00G', 'I00U', 'I014') //9 уровень
call FCreateItem('I00F', 'I00T', 'I013') //8 уровень
call FCreateItem('I00E', 'I00S', 'I012') //7 уровень
call FCreateItem('I00D', 'I00R', 'I011') //6 уровень
call FCreateItem('I00C', 'I00Q', 'I010') //5 уровень
call FCreateItem('I00B', 'I00P', 'I00Z') //4 уровень
call FCreateItem('I00A', 'I00O', 'I00Y') //3 уровень
call FCreateItem('I009', 'I00N', 'I00X') //2 уровень
call FCreateItem('I008', 'I00I', 'I00W') //1 уровень

//Сборка огненных мечей на основе мечей
call FCreateItem('I03D', 'I03F', 'I03G') //10 уровень
call FCreateItem('I02C', 'I03D', 'I03F') //9 уровень
call FCreateItem('I02J', 'I02C', 'I03D') //8 уровень
call FCreateItem('I02I', 'I02J', 'I02C') //7 уровень
call FCreateItem('I02H', 'I02I', 'I02J') //6 уровень
call FCreateItem('I02F', 'I02H', 'I02I') //5 уровень
call FCreateItem('I03E', 'I02F', 'I02H') //4 уровень
call FCreateItem('I029', 'I03E', 'I02F') //3 уровень
call FCreateItem('I029', 'I029', 'I03E') //2 уровень

//Сборка огненных мечей на основе сфер
call FCreateItem('I00H', 'I01O', 'I03G') //10 уровень
call FCreateItem('I00G', 'I01Q', 'I03F') //9 уровень
call FCreateItem('I00F', 'I01P', 'I03D') //8 уровень
call FCreateItem('I00E', 'I01N', 'I02C') //7 уровень
call FCreateItem('I00D', 'I01M', 'I02J') //6 уровень
call FCreateItem('I00C', 'I01L', 'I02I') //5 уровень
call FCreateItem('I00B', 'I01K', 'I02H') //4 уровень
call FCreateItem('I00A', 'I01J', 'I02F') //3 уровень
call FCreateItem('I009', 'I01I', 'I03E') //2 уровень
call FCreateItem('I008', 'I00J', 'I029') //1 уровень

//Сборка молота
call FCreateItem('I041', 'I03U', 'I03T') //10 уровень
call FCreateItem('I03V', 'I041', 'I03U') //9 уровень
call FCreateItem('I03W', 'I03V', 'I041') //8 уровень
call FCreateItem('I03X', 'I03W', 'I03V') //7 уровень
call FCreateItem('I03Y', 'I03X', 'I03W') //6 уровень
call FCreateItem('I03Z', 'I03Y', 'I03X') //5 уровень
call FCreateItem('I03Z', 'I03H', 'I03Y') //4 уровень
call FCreateItem('I040', 'I03Z', 'I03H') //3 уровень
call FCreateItem('I040', 'I040', 'I03Z') //2 уровень

//Сборка топора
call FCreateItem('I041', 'I03U', 'I03P') //10 уровень
call FCreateItem('I03V', 'I041', 'I03O') //9 уровень
call FCreateItem('I03W', 'I03V', 'I04N') //8 уровень
call FCreateItem('I03X', 'I03W', 'I03R') //7 уровень
call FCreateItem('I03J', 'I03X', 'I03L') //6 уровень
call FCreateItem('I03I', 'I03J', 'I03K') //5 уровень
call FCreateItem('I03Q', 'I03I', 'I03J') //4 уровень
call FCreateItem('I03M', 'I03Q', 'I03I') //3 уровень
call FCreateItem('I03M', 'I03M', 'I03Q') //2 уровень
endfunction

function CheckCondition takes nothing returns boolean
if IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) == true or GetUnitTypeId(GetFilterUnit()) == 'h01E' and DistanceBetweenPoints(GetUnitLoc(GetTriggerUnit()), GetUnitLoc(GetFilterUnit())) <= udg_RangeSmith[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] and GetOwningPlayer(GetFilterUnit()) == GetOwningPlayer(GetTriggerUnit()) then
return true
else
return false
endif
endfunction

// Выбрать каждого игрока и сделать действие
function Trig_CreateItemWeaponsOnJass_Actions takes nothing returns nothing
call ForGroupBJ(GetUnitsInRectMatching(GetPlayableMapRect(), Condition(function CheckCondition)), function CheckItem )
endfunction

//===========================================================================
function InitTrig_CreateItemWeaponsOnJass takes nothing returns nothing
set gg_trg_CreateItemWeaponsOnJass = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_CreateItemWeaponsOnJass, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( gg_trg_CreateItemWeaponsOnJass, Condition( function Trig_CreateItemWeaponsOnJass_Conditions ) )
call TriggerAddAction( gg_trg_CreateItemWeaponsOnJass, function Trig_CreateItemWeaponsOnJass_Actions)
endfunction


Штурм и Оборона:

Глава проекта: ELForcer
Участники проекта:
 
Iron-Beast Дата: Пятница, 17 Июль 2009, 14:51|Пост # 2|
Предводители гильдии Сканда
Новостёр

Человег-табуредко -)
metal

Битва за Иллидана:

Глава проекта: Iron-Beast
Участники проекта:
  • Shadow_of_king
  • _KiRiK_
  • -ZeT-
  • NikPro23
  • Yegor1
  •  
    -ZeT- Дата: Понедельник, 20 Июль 2009, 18:13|Пост # 3|

    神のスピア<>
    ELForcer, это надо в редакторе писать ))))

    а теперь по делу.

    Quote (ELForcer)
    function Trig_CreateItemWeaponsOnJass_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A009' ) ) then
    return false
    endif
    return true
    endfunction

    перепиши функцию:
    _________________________________________________
    function Trig_CreateItemWeaponsOnJass_Conditions takes nothing returns boolean
    if ( GetSpellAbilityId() == 'A009' ) then
    return true
    endif
    return false
    endfunction
    _________________________________________________

    Quote (ELForcer)
    call UnitAddItemByIdSwapped(NewItem, CurrentUnit)

    Фууу...
    Надо так:
    set bj_lastCreatedItem = CreateItem(NewItem, GetUnitX(CurrentUnit), GetUnitY(CurrentUnit))
    call UnitAddItem(CurrentUnit, bj_lastCreatedItem)

    Или

    call UnitAddItem(CurrentUnit, CreateItem(NewItem, GetUnitX(CurrentUnit), GetUnitY(CurrentUnit)) )

    _______________________________________________________________

    Quote (ELForcer)
    call PolledWait(2)

    заменяй на

    call TriggerSleepAction(2)

    _______________________________________________________________

    Нехорошо -

    Quote (ELForcer)
    call ResetUnitAnimation( GetTriggerUnit() )

    Хорошо - call SetUnitAnimation(GetTriggerUnit(), "stand")

    _______________________________________________________________

    Quote (ELForcer)
    call TriggerRegisterAnyUnitEventBJ( gg_trg_CreateItemWeaponsOnJass, EVENT_PLAYER_UNIT_SPELL_CAST )

    Одна из единственных бж, которыми я пользуюсь.

    _______________________________________________________________

    И САМОЕ ПРОБЛЕМАТИЧНОЕ, УТЕЧЕК ПРИЛИЧНО ! собственно:

    Quote (ELForcer)
    call ForGroupBJ(GetUnitsInRectMatching(GetPlayableMapRect(), Condition(function CheckCondition)), function CheckItem )

    Енф, или пользуйся циклом, перебирающим всех играков, или расскрывай сам и следи, чтобы групы удалялись...

    во первых GetPlayableMapRect() это bj_mapInitialPlayableArea

    Во вторых:(расскрытие функции)
    function ForGroupBJ takes group whichGroup, code callback returns nothing
    // If the user wants the group destroyed, remember that fact and clear
    // the flag, in case it is used again in the callback.
    local boolean wantDestroy = bj_wantDestroyGroup
    set bj_wantDestroyGroup = false

    call ForGroup(whichGroup, callback)

    // If the user wants the group destroyed, do so now.
    if (wantDestroy) then
    call DestroyGroup(whichGroup)
    endif
    endfunction

    И вот ещё

    function GetUnitsInRectMatching takes rect r, boolexpr filter returns group
    local group g = CreateGroup()
    call GroupEnumUnitsInRect(g, r, filter)
    call DestroyBoolExpr(filter)
    return g
    endfunction


    Битва за Иллидана:

    Глава проекта: Iron-Beast
    Участники проекта:
  • Shadow_of_king
  • _KiRiK_
  • -ZeT-
  • NikPro23
  • Yegor1
  •  
    Гаррет Дата: Пятница, 29 Январь 2010, 23:32|Пост # 4|
    Администратор

    бугага
    У жесть, надо будет что-нибудь сделать для отображения кода....


    Тиха ты! Бфл - это не РД. В бфл все клевое и т.д. Все заклы триггерные. А в РД - тююю... © Iron-Beast

    Битва за Лордаерон:

    Глава проекта: Garret
    Участники проекта:
  • Elzor
  •  
    Форум русских картостроителей » ELForcer Team Survival » ETS - Предметы » Jass код для сборки (Заменить на работе.)
    Страница 1 из 11
    Поиск:

    Copyright Garret&ELForcer © 2006-многа-многа