Сейчас 05:46:20 Понедельник, 29 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Вопрос по переменным
Вопрос по переменным
FatalBladeДата: Воскресенье, 17 Июля 2011, 00:24:15 | Сообщение # 1
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
В джассе как я вижу триггер состоит из нескольки функций. Когда я хочу использовать локальные переменные, мне нужно в каждой функции писать local ......
Это значит что в каждый функции будет своя переменная и работать будет только в ней или же во всём триггере?


 

[DS]Дата: Воскресенье, 17 Июля 2011, 00:42:56 | Сообщение # 2
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
только в ней

 

FatalBladeДата: Воскресенье, 17 Июля 2011, 00:50:58 | Сообщение # 3
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Тогда как мне сделать что бы она работала во всех функциях, но только в этом триггере?

 

[DS]Дата: Воскресенье, 17 Июля 2011, 01:02:04 | Сообщение # 4
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
через хт

 

FatalBladeДата: Воскресенье, 17 Июля 2011, 01:06:02 | Сообщение # 5
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (|DS|)
через хт

????


 

[DS]Дата: Воскресенье, 17 Июля 2011, 01:08:54 | Сообщение # 6
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
0_o
Хэш-таблицы


 

FatalBladeДата: Воскресенье, 17 Июля 2011, 01:11:44 | Сообщение # 7
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Я хз как с ними работать да и вообще говорят что с ними не стоит работать.

 

[DS]Дата: Воскресенье, 17 Июля 2011, 01:14:23 | Сообщение # 8
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
Стоит. Для начало.

 

FatalBladeДата: Воскресенье, 17 Июля 2011, 08:14:47 | Сообщение # 9
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Вообщем вот мой триггер на ГУИ. Я хочу превратить в локальные переменные следующие глобалки:
ForIndex
AbilityIndex
PointPicked
PointCasting
PickedHero

Code
Events
     Unit - A unit Begins casting an ability
Conditions
     And - All (Conditions) are true
       Conditions
         (Ability being cast) Not equal to Swords
         (Ability being cast) Not equal to Axes
         (Ability being cast) Not equal to Daggers
          (Ability being cast) Not equal to Claws
          (Ability being cast) Not equal to Bows
          (Ability being cast) Not equal to Crossbows
          (Ability being cast) Not equal to Blunts
          (Ability being cast) Not equal to Stings/Blades
          (Ability being cast) Not equal to Staffs
          (Ability being cast) Not equal to Heavy Armor
          (Ability being cast) Not equal to Light Armor
          (Ability being cast) Not equal to Robes
          (Ability being cast) Not equal to Helmets
          (Ability being cast) Not equal to Gloves
          (Ability being cast) Not equal to Boots
Actions
     Set ForIndex = 1
     Set AbilityIndex = 0
     For each (Integer A) from 1 to 10, do (Actions)
       Loop - Actions
         If (All Conditions are True) then do (Then Actions) else do (Else Actions)
           If - Conditions
              (Ability being cast) Equal to HelmetAbilities[ForIndex]
           Then - Actions
             Set AbilityIndex = ForIndex
             Set ForIndex = (ForIndex + 1)
           Else - Actions
             Set ForIndex = (ForIndex + 1)
     If (All Conditions are True) then do (Then Actions) else do (Else Actions)
       If - Conditions
         AbilityIndex Equal to 0
       Then - Actions
         Skip remaining actions
       Else - Actions
         Do nothing

     Set PointCasting = (Position of (Casting unit))
     Unit Group - Pick every unit in (Units in (Playable map area) owned by (Owner of (Casting unit))) and do (Actions)
       Loop - Actions
         Set PointPicked = (Position of (Picked unit))
         If (All Conditions are True) then do (Then Actions) else do (Else Actions)
           If - Conditions
             And - All (Conditions) are true
               Conditions
                 (Distance between PointCasting and PointPicked) Less than or equal to 200.00
                 ((Picked unit) is A Hero) Equal to True
                 (Unit-type of (Picked unit)) Not equal to Armor Merchant
                 (Unit-type of (Picked unit)) Not equal to Grocery Merchant
                 (Unit-type of (Picked unit)) Not equal to Weaponry Merchant
           Then - Actions
             Set PickedHero = (Picked unit)
           Else - Actions
             Do nothing
         Custom script:   call RemoveLocation(udg_PointPicked)
     Custom script:   call DestroyGroup(GetLastCreatedGroup())

     If (All Conditions are True) then do (Then Actions) else do (Else Actions)
       If - Conditions
         And - All (Conditions) are true
           Conditions
             AbilityIndex Greater than 1
       Then - Actions
         If (All Conditions are True) then do (Then Actions) else do (Else Actions)
           If - Conditions
             ((Owner of (Casting unit)) Current gold) Greater than or equal to HelmetGold[AbilityIndex]
             ((Owner of (Casting unit)) Current lumber) Greater than or equal to HelmetUpgradePoints[AbilityIndex]
             (PickedHero has an item of type HelmetItems[(AbilityIndex - 1)]) Equal to True
           Then - Actions
             Item - Remove (Item carried by PickedHero of type HelmetItems[(AbilityIndex - 1)])
            Special Effect - Create a special effect attached to the origin of PickedHero using Abilities\Spells\Items\AIem\AIemTarget.mdl
            Special Effect - Destroy (Last created special effect)
            Player - Add (HelmetGold[AbilityIndex] x -1) to (Owner of PickedHero) Current gold
            Player - Add (HelmetUpgradePoints[AbilityIndex] x -1) to (Owner of PickedHero) Current lumber
            Hero - Create HelmetItems[AbilityIndex] and give it to PickedHero
            Custom script:   call RemoveLocation(udg_PointCasting)
            Set PickedHero = No unit
            Custom script:   call RemoveUnit(udg_PickedHero)
           Else - Actions
             Sound - Play Warning <gen> at 100.00% volume, attached to PickedHero
             Cinematic - Send transmission to (All allies of (Owner of PickedHero)) from (Casting unit) named (Name of (Casting unit)): Play No sound and display ((Name of PickedHero) + , bring me everything I require, and I will craft you whatever you want!).  Modify duration: Add 3.00 seconds and Wait
             Custom script:   call RemoveLocation(udg_PointCasting)
             Set PickedHero = No unit
             Custom script:   call RemoveUnit(udg_PickedHero)
       Else - Actions
         If (All Conditions are True) then do (Then Actions) else do (Else Actions)
           If - Conditions
              ((Owner of (Casting unit)) Current gold) Greater than or equal to HelmetGold[AbilityIndex]
           Then - Actions
             Special Effect - Create a special effect attached to the origin of PickedHero using Abilities\Spells\Items\AIem\AIemTarget.mdl
             Special Effect - Destroy (Last created special effect)
             Player - Add (HelmetGold[AbilityIndex] x -1) to (Owner of PickedHero) Current gold
             Hero - Create HelmetItems[AbilityIndex] and give it to PickedHero
             Custom script:   call RemoveLocation(udg_PointCasting)
             Set PickedHero = No unit
             Custom script:   call RemoveUnit(udg_PickedHero)
           Else - Actions
             Sound - Play Warning <gen> at 100.00% volume, attached to PickedHero
             Cinematic - Send transmission to (All allies of (Owner of PickedHero)) from (Casting unit) named (Name of (Casting unit)): Play No sound and display ((Name of PickedHero) + , bring me everything I require, and I will craft you whatever you want!).  Modify duration: Add 3.00 seconds and Wait
             Custom script:   call RemoveLocation(udg_PointCasting)
             Set PickedHero = No unit
             Custom script:   call RemoveUnit(udg_PickedHero)


Добавлено (17-07-2011, 01:23)
---------------------------------------------
А вообще в Джассе должно быть так что каждое условие (If) должно находиться в отдельной функции, или можно что бы все условия были в 1 функции?

Добавлено (17-07-2011, 08:14)
---------------------------------------------
Как соеденить вот это в одну функцию?

Code
function Trig_Helmets_Func007Func002C takes nothing returns boolean
     if ( not ( DistanceBetweenPoints(udg_PointCasting, udg_PointPicked) <= 200.00 ) ) then
         return false
     endif
     if ( not ( IsUnitType(GetEnumUnit(), UNIT_TYPE_HERO) == true ) ) then
         return false
     endif
     if ( not ( GetUnitTypeId(GetEnumUnit()) != 'n000' ) ) then
         return false
     endif
     if ( not ( GetUnitTypeId(GetEnumUnit()) != 'n001' ) ) then
         return false
     endif
     if ( not ( GetUnitTypeId(GetEnumUnit()) != 'n008' ) ) then
         return false
     endif
     return true
endfunction

function Trig_Helmets_Func007A takes nothing returns nothing
     set udg_PointPicked = GetUnitLoc(GetEnumUnit())
     if ( Trig_Helmets_Func007Func002C() ) then
         set udg_PickedHero = GetEnumUnit()
     else
         call DoNothing(  )
     endif
     call RemoveLocation(udg_PointPicked)
endfunction




Сообщение отредактировал FatalBlade - Воскресенье, 17 Июля 2011, 01:24:01
 

FkoFFДата: Воскресенье, 17 Июля 2011, 09:03:09 | Сообщение # 10
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
FatalBlade, на джасс все условия в одной функции прописываются через

if comparison1 and comparison2 and comparison3 and .... и так далее


 

FatalBladeДата: Воскресенье, 17 Июля 2011, 10:11:24 | Сообщение # 11
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (FkoFF)
if comparison1 and comparison2 and comparison3 and .... и так далее

Я так и сделал. Вот триггер:

Code
function Trig_Helmets_Func001C takes nothing returns boolean
     if ( not ( GetSpellAbilityId() != 'A024' ) ) then
         return false
     endif
     if ( not ( GetSpellAbilityId() != 'A025' ) ) then
         return false
     endif
     if ( not ( GetSpellAbilityId() != 'A026' ) ) then
         return false
     endif
     if ( not ( GetSpellAbilityId() != 'A027' ) ) then
         return false
     endif
     if ( not ( GetSpellAbilityId() != 'A029' ) ) then
         return false
     endif
     if ( not ( GetSpellAbilityId() != 'A02A' ) ) then
         return false
     endif
     if ( not ( GetSpellAbilityId() != 'A028' ) ) then
         return false
     endif
     if ( not ( GetSpellAbilityId() != 'A02B' ) ) then
         return false
     endif
     if ( not ( GetSpellAbilityId() != 'A02C' ) ) then
         return false
     endif
     if ( not ( GetSpellAbilityId() != 'A02E' ) ) then
         return false
     endif
     if ( not ( GetSpellAbilityId() != 'A02F' ) ) then
         return false
     endif
     if ( not ( GetSpellAbilityId() != 'A02G' ) ) then
         return false
     endif
     if ( not ( GetSpellAbilityId() != 'A02H' ) ) then
         return false
     endif
     if ( not ( GetSpellAbilityId() != 'A02J' ) ) then
         return false
     endif
     if ( not ( GetSpellAbilityId() != 'A02K' ) ) then
         return false
     endif
     return true
endfunction

function Trig_Helmets_Conditions takes nothing returns boolean
     if ( not Trig_Helmets_Func001C() ) then
         return false
     endif
     return true
endfunction

function HeroPick takes location PointCasting returns unit
     local location PointPicked
     local unit PickHero
     set PointPicked = GetUnitLoc(GetEnumUnit())
     if (( DistanceBetweenPoints(PointCasting, PointPicked) <= 200.00 ) and ( IsUnitType(GetEnumUnit(), UNIT_TYPE_HERO) == true ) and ( GetUnitTypeId(GetEnumUnit()) != 'n001' ) and ( GetUnitTypeId(GetEnumUnit()) != 'n008' )) then
         set PickHero = GetEnumUnit()
     else
         call DoNothing(  )
     endif
     call RemoveLocation(PointPicked)
     return PickHero
endfunction

function Trig_Helmets_Actions takes nothing returns nothing
     local location PointCasting
     local integer ForIndex = 1
     local integer AbilityIndex = 0
     local unit PickedHero
     set bj_forLoopAIndex = 1
     set bj_forLoopAIndexEnd = 10
     loop
         exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
         if ( GetSpellAbilityId() == udg_HelmetAbilities[ForIndex] ) then
             set AbilityIndex = ForIndex
             set ForIndex = ( ForIndex + 1 )
         else
             set ForIndex = ( ForIndex + 1 )
         endif
         set bj_forLoopAIndex = bj_forLoopAIndex + 1
     endloop
     if ( AbilityIndex == 0 ) then
         return
     else
         call DoNothing(  )
     endif

     set PointCasting = GetUnitLoc(GetSpellAbilityUnit())
     call ForGroupBJ( GetUnitsInRectOfPlayer(GetPlayableMapRect(), GetOwningPlayer(GetSpellAbilityUnit())), function HeroPick)
     set PickedHero = HeroPick(PointCasting)
     call DestroyGroup(GetLastCreatedGroup())
     if ( AbilityIndex > 1 ) then
         if (( GetPlayerState(GetOwningPlayer(GetSpellAbilityUnit()), PLAYER_STATE_RESOURCE_GOLD) >= udg_HelmetGold[AbilityIndex] ) and ( GetPlayerState(GetOwningPlayer(GetSpellAbilityUnit()), PLAYER_STATE_RESOURCE_LUMBER) >= udg_HelmetUpgradePoints[AbilityIndex] ) and ( UnitHasItemOfTypeBJ(PickedHero, udg_HelmetItems[( AbilityIndex - 1 )]) == true ))then
             call RemoveItem( GetItemOfTypeFromUnitBJ(PickedHero, udg_HelmetItems[( AbilityIndex - 1 )]) )
             call AddSpecialEffectTargetUnitBJ( "origin", PickedHero, "Abilities\\Spells\\Items\\AIem\\AIemTarget.mdl" )
             call DestroyEffectBJ( GetLastCreatedEffectBJ() )
             call AdjustPlayerStateBJ( ( udg_HelmetGold[AbilityIndex] * -1 ), GetOwningPlayer(PickedHero), PLAYER_STATE_RESOURCE_GOLD )
             call AdjustPlayerStateBJ( ( udg_HelmetUpgradePoints[AbilityIndex] * -1 ), GetOwningPlayer(PickedHero), PLAYER_STATE_RESOURCE_LUMBER )
             call UnitAddItemByIdSwapped( udg_HelmetItems[AbilityIndex], PickedHero )
             call RemoveLocation(PointCasting)
             set PickedHero = null
             call RemoveUnit(PickedHero)
         else
             call PlaySoundOnUnitBJ( gg_snd_Warning, 100, PickedHero )
             call TransmissionFromUnitWithNameBJ( GetPlayersAllies(GetOwningPlayer(PickedHero)), GetSpellAbilityUnit(), GetUnitName(GetSpellAbilityUnit()), null, ( GetUnitName(PickedHero) + ", bring me everything I require, and I will craft you whatever you want!" ), bj_TIMETYPE_ADD, 3.00, true )
             call RemoveLocation(PointCasting)
             set PickedHero = null
             call RemoveUnit(PickedHero)
         endif
     else
         if ( GetPlayerState(GetOwningPlayer(GetSpellAbilityUnit()), PLAYER_STATE_RESOURCE_GOLD) >= udg_HelmetGold[AbilityIndex] ) then
             call AddSpecialEffectTargetUnitBJ( "origin", PickedHero, "Abilities\\Spells\\Items\\AIem\\AIemTarget.mdl" )
             call DestroyEffectBJ( GetLastCreatedEffectBJ() )
             call AdjustPlayerStateBJ( ( udg_HelmetGold[AbilityIndex] * -1 ), GetOwningPlayer(PickedHero), PLAYER_STATE_RESOURCE_GOLD )
             call UnitAddItemByIdSwapped( udg_HelmetItems[AbilityIndex], PickedHero )
             call RemoveLocation(PointCasting)
             set PickedHero = null
             call RemoveUnit(PickedHero)
         else
             call PlaySoundOnUnitBJ( gg_snd_Warning, 100, PickedHero )
             call TransmissionFromUnitWithNameBJ( GetPlayersAllies(GetOwningPlayer(PickedHero)), GetSpellAbilityUnit(), GetUnitName(GetSpellAbilityUnit()), null, ( GetUnitName(PickedHero) + ", bring me everything I require, and I will craft you whatever you want!" ), bj_TIMETYPE_ADD, 3.00, true )
             call RemoveLocation(PointCasting)
             set PickedHero = null
             call RemoveUnit(PickedHero)
         endif
     endif
endfunction

//===========================================================================
function InitTrig_Helmets takes nothing returns nothing
     set gg_trg_Helmets = CreateTrigger(  )
     call TriggerRegisterAnyUnitEventBJ( gg_trg_Helmets, EVENT_PLAYER_UNIT_SPELL_CAST )
     call TriggerAddCondition( gg_trg_Helmets, Condition( function Trig_Helmets_Conditions ) )
     call TriggerAddAction( gg_trg_Helmets, function Trig_Helmets_Actions )
endfunction



Вот только теперь когда я героем подошёл к НПЦ что купить предмет, игра вылетела. Почему?




Сообщение отредактировал FatalBlade - Воскресенье, 17 Июля 2011, 10:56:40
 

lawsonДата: Воскресенье, 17 Июля 2011, 10:23:44 | Сообщение # 12
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (FatalBlade)
Я так и сделал. Вот триггер:

Он ни это имел ввиду.
if (a > b) and (c > b) and (b != a) then
::actions::
endif

FatalBlade,
Я думаю тебе будет сложней перейти на JASS чем полным новичкам так как ты уже привык к гуи.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Воскресенье, 17 Июля 2011, 10:25:03
 

FatalBladeДата: Воскресенье, 17 Июля 2011, 10:45:54 | Сообщение # 13
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (lawson)
Он ни это имел ввиду.
if (a > b) and (c > b) and (b != a) then
::actions::
endif

Я знаю я по такому принципу и сделал.
Вот например:
Code
if (( DistanceBetweenPoints(PointCasting, PointPicked) <= 200.00 ) and ( IsUnitType(GetEnumUnit(), UNIT_TYPE_HERO) == true ) and ( GetUnitTypeId(GetEnumUnit()) != 'n001' ) and ( GetUnitTypeId(GetEnumUnit()) != 'n008' )) then


Quote (lawson)
Я думаю тебе будет сложней перейти на JASS чем полным новичкам так как ты уже привык к гуи.

Я переходить особо не собираюсь, но в данном случае мне нужны локальные переменные, а это возможно только в Джасс. Я делаю АОС на 10 игроков, 5 на 5. Данный триггер проверяет покупку предметов. Я не хочу что бы когда 2 игрока одновременно покупают 1 и тот же предмет, то получилась путаница. Мне нужен универсальный триггер, который позволит хоть всем игрокам сразу купить 1 и тот же предмет одновременно, при этом не создавая путаницу. А для этого нужны локальные переменные.

Добавлено (17-07-2011, 10:45)
---------------------------------------------
Я впринципе уже переделал триггер полностью на джасс, но при покупки категории предметов проверяемых триггером, игра вылетает. Почему?


 

[DS]Дата: Воскресенье, 17 Июля 2011, 10:50:12 | Сообщение # 14
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
на гуи можна вставить локальные переменные, ток их надо прописывать в начале триггера.

Добавлено (17-07-2011, 10:49)
---------------------------------------------
касум скриптами

Добавлено (17-07-2011, 10:50)
---------------------------------------------
кастум скриптами


 

FatalBladeДата: Воскресенье, 17 Июля 2011, 10:55:40 | Сообщение # 15
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (|DS|)
на гуи можна вставить локальные переменные, ток их надо прописывать в начале триггера.

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


 

FkoFFДата: Воскресенье, 17 Июля 2011, 11:51:01 | Сообщение # 16
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (FatalBlade)
Я думаю тебе будет сложней перейти на JASS чем полным новичкам так как ты уже привык к гуи. Я переходить особо не собираюсь, но в данном случае мне нужны локальные переменные, а это возможно только в Джасс. Я делаю АОС на 10 игроков, 5 на 5. Данный триггер проверяет покупку предметов. Я не хочу что бы когда 2 игрока одновременно покупают 1 и тот же предмет, то получилась путаница. Мне нужен универсальный триггер, который позволит хоть всем игрокам сразу купить 1 и тот же предмет одновременно, при этом не создавая путаницу. А для этого нужны локальные переменные.Добавлено (17-07-2011, 10:45)---------------------------------------------Я впринципе уже переделал триггер полностью на джасс, но при покупки категории предметов проверяемых триггером, игра вылетает. Почему?

пользуйся наработкой дуоса, зачем тебе свое и плохое?


 

FatalBladeДата: Воскресенье, 17 Июля 2011, 12:42:53 | Сообщение # 17
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (FkoFF)
пользуйся наработкой дуоса, зачем тебе свое и плохое?

Я не нашёл у него подобных наработок.

Добавлено (17-07-2011, 12:38)
---------------------------------------------
Вот код
Code

function Trig_Helmets_Conditions takes nothing returns boolean
        if ( not ( GetSpellAbilityId() != 'A024' ) ) then
            return false
        endif
        if ( not ( GetSpellAbilityId() != 'A025' ) ) then
            return false
        endif
        if ( not ( GetSpellAbilityId() != 'A026' ) ) then
            return false
        endif
        if ( not ( GetSpellAbilityId() != 'A027' ) ) then
            return false
        endif
        if ( not ( GetSpellAbilityId() != 'A029' ) ) then
            return false
        endif
        if ( not ( GetSpellAbilityId() != 'A02A' ) ) then
            return false
        endif
        if ( not ( GetSpellAbilityId() != 'A028' ) ) then
            return false
        endif
        if ( not ( GetSpellAbilityId() != 'A02B' ) ) then
            return false
        endif
        if ( not ( GetSpellAbilityId() != 'A02C' ) ) then
            return false
        endif
        if ( not ( GetSpellAbilityId() != 'A02E' ) ) then
            return false
        endif
        if ( not ( GetSpellAbilityId() != 'A02F' ) ) then
            return false
        endif
        if ( not ( GetSpellAbilityId() != 'A02G' ) ) then
            return false
        endif
        if ( not ( GetSpellAbilityId() != 'A02H' ) ) then
            return false
        endif
        if ( not ( GetSpellAbilityId() != 'A02J' ) ) then
            return false
        endif
        if ( not ( GetSpellAbilityId() != 'A02K' ) ) then
            return false
        endif
        return true
endfunction

function HeroPick takes location PointCasting returns unit
        local location PointPicked
        local unit PickHero
        set PointPicked = GetUnitLoc(GetEnumUnit())
        if (( DistanceBetweenPoints(PointCasting, PointPicked) <= 200.00 ) and ( IsUnitType(GetEnumUnit(), UNIT_TYPE_HERO) == true ) and ( GetUnitTypeId(GetEnumUnit()) != 'n001' ) and ( GetUnitTypeId(GetEnumUnit()) != 'n008' )) then
            set PickHero = GetEnumUnit()
        endif
        call RemoveLocation(PointPicked)
        return PickHero
endfunction

function Trig_Helmets_Actions takes nothing returns nothing
        local location PointCasting
        local integer AbilityIndex = 0
        local unit PickedHero
        local integer abil
        local integer equip
        local integer old
        local integer gold
        local integer upgrade
        local integer i = 1
        loop
            exitwhen i > 10
            set abil = udg_HelmetAbilities[i]
            if ( GetSpellAbilityId() == abil) then
                set AbilityIndex = i
            endif
            set i = i + 1
        endloop
        if ( AbilityIndex == 0 ) then
            return
        endif

        set equip = udg_HelmetItems[AbilityIndex]
        set old = udg_HelmetItems[AbilityIndex - 1]
        set gold = udg_HelmetGold[AbilityIndex]
        set upgrade = udg_HelmetUpgradePoints[AbilityIndex]
        set PointCasting = GetUnitLoc(GetSpellAbilityUnit())
        call ForGroupBJ( GetUnitsInRectOfPlayer(GetPlayableMapRect(), GetOwningPlayer(GetSpellAbilityUnit())), function HeroPick)
        set PickedHero = HeroPick(PointCasting)
        call DestroyGroup(GetLastCreatedGroup())
        if ( AbilityIndex > 1 ) then
            if (( GetPlayerState(GetOwningPlayer(GetSpellAbilityUnit()), PLAYER_STATE_RESOURCE_GOLD) >= gold ) and ( GetPlayerState(GetOwningPlayer(GetSpellAbilityUnit()), PLAYER_STATE_RESOURCE_LUMBER) >= upgrade ) and ( UnitHasItemOfTypeBJ(PickedHero, old) == true ))then
                call RemoveItem( GetItemOfTypeFromUnitBJ(PickedHero, old) )
                call AddSpecialEffectTargetUnitBJ( "origin", PickedHero, "Abilities\\Spells\\Items\\AIem\\AIemTarget.mdl" )
                call DestroyEffectBJ( GetLastCreatedEffectBJ() )
                call AdjustPlayerStateBJ( ( gold * -1 ), GetOwningPlayer(PickedHero), PLAYER_STATE_RESOURCE_GOLD )
                call AdjustPlayerStateBJ( ( upgrade * -1 ), GetOwningPlayer(PickedHero), PLAYER_STATE_RESOURCE_LUMBER )
                call UnitAddItemByIdSwapped( equip, PickedHero )
                call RemoveLocation(PointCasting)
                set PickedHero = null
                call RemoveUnit(PickedHero)
            else
                call PlaySoundOnUnitBJ( gg_snd_Warning, 100, PickedHero )
                call TransmissionFromUnitWithNameBJ( GetPlayersAllies(GetOwningPlayer(PickedHero)), GetSpellAbilityUnit(), GetUnitName(GetSpellAbilityUnit()), null, ( GetUnitName(PickedHero) + ", bring me everything I require, and I will craft you whatever you want!" ), bj_TIMETYPE_ADD, 3.00, true )
                call RemoveLocation(PointCasting)
                set PickedHero = null
                call RemoveUnit(PickedHero)
            endif
        else
            if ( GetPlayerState(GetOwningPlayer(GetSpellAbilityUnit()), PLAYER_STATE_RESOURCE_GOLD) >= gold ) then
                call AddSpecialEffectTargetUnitBJ( "origin", PickedHero, "Abilities\\Spells\\Items\\AIem\\AIemTarget.mdl" )
                call DestroyEffectBJ( GetLastCreatedEffectBJ() )
                call AdjustPlayerStateBJ( ( gold * -1 ), GetOwningPlayer(PickedHero), PLAYER_STATE_RESOURCE_GOLD )
                call UnitAddItemByIdSwapped( equip, PickedHero )
                call RemoveLocation(PointCasting)
                set PickedHero = null
                call RemoveUnit(PickedHero)
            else
                call PlaySoundOnUnitBJ( gg_snd_Warning, 100, PickedHero )
                call TransmissionFromUnitWithNameBJ( GetPlayersAllies(GetOwningPlayer(PickedHero)), GetSpellAbilityUnit(), GetUnitName(GetSpellAbilityUnit()), null, ( GetUnitName(PickedHero) + ", bring me everything I require, and I will craft you whatever you want!" ), bj_TIMETYPE_ADD, 3.00, true )
                call RemoveLocation(PointCasting)
                set PickedHero = null
                call RemoveUnit(PickedHero)
            endif
        endif
endfunction

//===========================================================================
function InitTrig_Helmets takes nothing returns nothing
        set gg_trg_Helmets = CreateTrigger(  )
        call TriggerRegisterAnyUnitEventBJ( gg_trg_Helmets, EVENT_PLAYER_UNIT_SPELL_CAST )
        call TriggerAddCondition( gg_trg_Helmets, Condition( function Trig_Helmets_Conditions ) )
        call TriggerAddAction( gg_trg_Helmets, function Trig_Helmets_Actions )
endfunction  


Почему вылетает игра с ошибкой?

Добавлено (17-07-2011, 12:42)
---------------------------------------------
Как я понял проблема вот в этом:
set abil = udg_HelmetAbilities[i]
if ( GetSpellAbilityId() == abil) then

Но почему?
udg_HelmetAbilities[i]) - это массив созданный заранее, который содержит несколько абилок. Джасс не принимает массивы чтоли?




Сообщение отредактировал FatalBlade - Воскресенье, 17 Июля 2011, 13:19:16
 

FkoFFДата: Воскресенье, 17 Июля 2011, 14:25:57 | Сообщение # 18
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
ммм, если это крафт (а это ,по всей видимости, крафт) то крафт от дуоса вот.

 

DragoNДата: Понедельник, 18 Июля 2011, 13:46:54 | Сообщение # 19
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
Oh shii~
пишите все условия сразу на джассе
т.к если делать сначала на гуи, то вы запаритесь оптимизировать по 18 говноусловий, разбитых в разные функции, в которых условия ссылаються на следующие функции и т.п
*вспомнил молодость, когда учил дуоса Jass'у*
trollface


El Psy Congroo
 

HexingДата: Среда, 27 Июля 2011, 21:29:10 | Сообщение # 20
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Так... по списку...
один фатал еррор: Set PointPicked = (Position of (Picked unit)) так как Picked unit выступает в качестве unitgroup то у него построена целая система работы с координатами, а ты какой то левой переменной присваиваешь всё это дело... Ну да ладна предположем у unitgroup-а система обращения к координатам picked unit основана на массиве точек и обращение к массиву возвращает первый элемент в чём я не уверен.
оххх ну и деловая колбаса
что это за пачка новых фатал ерроров
Code
((Picked unit) is A Hero) Equal to True
(Unit-type of (Picked unit)) Not equal to Armor Merchant
(Unit-type of (Picked unit)) Not equal to Grocery Merchant
(Unit-type of (Picked unit)) Not equal to Weaponry Merchant


нет уж, хитрые мы какие, смотрит тип юнита у группы юнитов!!! это уже явный бред. тут нада пробегаться циклом по юнитам!

p.s. смотрел на триггеры, так что мб в jass коде ты это подправил, в чём я сомневаюсь ...

Тоесть погляди:
Герой подходит к нпси
кастует вермешель абилку(или что там)
и проверяются все воины на карте принадлежащие этому герою на то чно они(вся эта куча) - герой
подойди к толпу людей и скажи: ты герой?
вот думаю ошибка именно в этом! желаю удачи в пофиксивовании ahaha


 

FatalBladeДата: Четверг, 28 Июля 2011, 16:09:57 | Сообщение # 21
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Hexing)
Picked unit

Нет. Это Юнит, а не группа юнитов. А иначе я бы не смог присвоить это значение в переменную типа Юнит.


 

HexingДата: Четверг, 28 Июля 2011, 16:37:37 | Сообщение # 22
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
да в джассе всё норм
тока подправь:
Code
set PickedHero = null
call RemoveUnit(PickedHero)

лучше наоборот ;)

также думаю что
Code
set PointPicked = GetUnitLoc(GetEnumUnit())
тут не работает функция GetEnumUnit() так как это не акшинс триггера и она не знает события по которому должна работать эта функция.

Также возможно ошибка в
Code
if ( not ( GetSpellAbilityId() != 'A024' ) ) then
             return false
         endif

поменяй на:
Code

  if (GetSpellAbilityId() == 'A024' ) then
             return false
         endif


логика та же, а процу жизнь проще. да и я не уверен что != правильно работает.


 

FatalBladeДата: Пятница, 29 Июля 2011, 11:20:36 | Сообщение # 23
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Hexing)
тут не работает функция GetEnumUnit() так как это не акшинс триггера и она не знает события по которому должна работать эта функция.

Так это функция группы. Pick every unit...

З.Ы. мой код уже давным давно в 2 раза меньше и выглядит подругому :)


 

HexingДата: Пятница, 29 Июля 2011, 14:13:49 | Сообщение # 24
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
ты такой умный))) может покажешь твой "новый" код который давным давно другой, или тебе не нужно помогать? haha

 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Вопрос по переменным
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz