|
|
|
|
Вопрос по переменным
|
|
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
Блокировки:
| ????
|
|
|
|
[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'у*
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 коде ты это подправил, в чём я сомневаюсь ...
Тоесть погляди: Герой подходит к нпси кастует вермешель абилку(или что там) и проверяются все воины на карте принадлежащие этому герою на то чно они(вся эта куча) - герой подойди к толпу людей и скажи: ты герой? вот думаю ошибка именно в этом! желаю удачи в пофиксивовании
|
|
|
|
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
Блокировки:
| ты такой умный))) может покажешь твой "новый" код который давным давно другой, или тебе не нужно помогать?
|
|
|
|
|
|
|
|
|
|
|