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

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

Ответ
 
Zombak2500

offline
Опыт: 1,855
Активность:
Не работает скрипт :(
Обновил скрипт
function Trig_LivingBomb_Copy_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A009'
endfunction

function Trig_LivingBomb_Copy_Actions takes nothing returns nothing

    local integer bung
    local integer mer
    local unit caster
    //local unit target
    local unit bomb
    

    set caster=GetSpellAbilityUnit()
    //set target=GetLastCreatedUnit()
    set bomb=GetLastCreatedUnit()
    set bung=0
    set mer=4


call CreateNUnitsAtLoc( 1, 'o000', Player(2), GetSpellTargetLoc(), bj_UNIT_FACING )
call UnitDamagePointLoc( caster, 0, 500, GetUnitLoc(bomb), 300.00, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_COLD )

call PolledWait( ( DistanceBetweenPoints(GetUnitLoc(caster), GetUnitLoc(bomb)) / 700.00 ) )




call CreateNUnitsAtLoc( 1, 'ncg1', Player(2), GetSpellTargetLoc(), bj_UNIT_FACING )


loop
exitwhen bung==10
    call SetUnitInvulnerable( bomb, true )
    call SetUnitInvulnerable( caster, true )
    call UnitDamagePointLoc( caster, 0, 500, GetUnitLoc(bomb), 300.00, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_COLD )
    call SetUnitInvulnerable( caster, false )
    call IssuePointOrderLocBJ( bomb, "move", GetRandomLocInRect(GetEntireMapRect()) )
    call TriggerSleepAction(mer)
    set bung=bung+1
    set mer=mer/2
endloop

    call AddSpecialEffectTargetUnitBJ( "overhead",bomb, "Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl" )
    call PolledWait( 3.00 )
    call ShowUnitHide( bomb )
    call SetUnitOwner( bomb, Player(PLAYER_NEUTRAL_PASSIVE), true )
    call RemoveUnit( bomb )
    call DestroyEffectBJ( GetLastCreatedEffectBJ() )
endfunction

//===========================================================================
function InitTrig_LivingBomb_Copy takes nothing returns nothing
    set gg_trg_LivingBomb_Copy = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_LivingBomb_Copy, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_LivingBomb_Copy, Condition( function Trig_LivingBomb_Copy_Conditions ) )
    call TriggerAddAction( gg_trg_LivingBomb_Copy, function Trig_LivingBomb_Copy_Actions )
endfunction
Помогите у меня всё ещё не работает кто найдёт ошибку напишите. Жду ответа.

Отредактировано Zombak2500, 14.09.2009 в 17:12.
Старый 13.09.2009, 16:05
Just Fear
Loading --•••----
offline
Опыт: 2,062
Активность:
Zombak2500, не советую использовать Polled wait, используй таймеры, так как они точнее всяких там TriggerSleepAction и PolledWait, а насчет ошибки
bj_UNIT_FACING
Мне одному кажется что это должно выглядеть вот так bj_UNIT_FACING(требуемый unit)?
И вообще Дамэйдж поинт не советую использовать так как бьёт своих, а на не уязвимость ставить тоже не выход, так как сбиваются вражеские приказы атаковать, чанел, и тд...
Just Fear добавил:
Могу сделать тебе это заклинание со всеми разяснениями только ты укажи смысл что дает и Т.Д.
Старый 14.09.2009, 18:08
agentex

offline
Опыт: 34,834
Активность:
Zombak2500, что конкретно не получается? при сохранении выдает ошибки или в игре не работает?
Мне одному кажется что это должно выглядеть вот так bj_UNIT_FACING(требуемый unit)?
да тебе одному. вообщето это константа
Старый 14.09.2009, 18:28
Zombak2500

offline
Опыт: 1,855
Активность:
Компилятор кушает =)
Происходит следующие:
  1. делаю юнит цель заклинанием
  2. ничего не происходит
  1. стреляю ещё раз делаются 2 раза те действия которые должны были делаться после выстрела кроме создания юнита-цели . бессмертие у бомбы не появляется
Дамэйдж поинт не советую использовать так как бьёт своих, а на не уязвимость ставить тоже не выход, так как сбиваются вражеские приказы атаковать, чанел, и тд...
а как мне ещё сделать урон по местности? О_о

Отредактировано Zombak2500, 14.09.2009 в 20:34.
Старый 14.09.2009, 20:27
agentex

offline
Опыт: 34,834
Активность:
делаю юнит цель заклинанием
это как О_О
а как мне ещё сделать урон по местности? О_о
конешно же енумом
Старый 14.09.2009, 20:51
Zombak2500

offline
Опыт: 1,855
Активность:
Это я создаю невидимый вард, который создаёт юнит около себя ,этот юнит как раз и наносит урон =)
Что такое енум?
Что там с моим скриптом?
Старый 14.09.2009, 20:55
agentex

offline
Опыт: 34,834
Активность:
Что такое енум?
GroupEnumUnitsInRange
ForGroup
...
PROFIT
Это я создаю невидимый вард, который создаёт юнит около себя ,этот юнит как раз и наносит
урон =)
ой намудрил.. зачем так сложно?
Старый 14.09.2009, 20:58
Zombak2500

offline
Опыт: 1,855
Активность:
У юнита-цели будет пассивный скил который замедляет противника.
А ошибка в чём то?
P.s. можно мне полную функцию енума

Отредактировано Zombak2500, 14.09.2009 в 21:19.
Старый 14.09.2009, 21:05
Elf_Stratigo

offline
Опыт: 4,699
Активность:
у тебя както странно всё написано
обычно локалки юзают, чтобы занести в них локальные переменные, а не глобальные

может я плохо понял скрипт, но
set bomb=GetLastCreatedUnit()
перед
call CreateNUnitsAtLoc( 1, 'o000', Player(2), GetSpellTargetLoc(), bj_UNIT_FACING )
выглядит странно, особенно если учесть, что у тебя вроде как созданные юниты некуда не заносятся...

может ты хотел, чтобы созданный юнит занёсся в переменную?
Старый 18.09.2009, 17:15
Zombak2500

offline
Опыт: 1,855
Активность:
да именно это и хотел , а разве он не заносится сразу после создание? О_о
Старый 18.09.2009, 20:15
Elf_Stratigo

offline
Опыт: 4,699
Активность:
1) еслибы ты не использовал бж функцию создания юнита, то было бы лучше
2) тип юнит может принять результат только в виде ссылки юнита, а не ссылки переменной

если ты плохо понимаешь, что я написал, то просто опусти команду
set bomb=GetLastCreatedUnit()
после вызова создания юнита

ну и везде соответственно где ты так сделал...

1 строчка - создание
2 строчка - присвоение

телепатия :)
Старый 18.09.2009, 20:42
Zombak2500

offline
Опыт: 1,855
Активность:
function Trig_LivingBomb_Copy_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A009'
endfunction

function Trig_LivingBomb_Copy_Actions takes nothing returns nothing

    local integer bung
    local integer mer
    local unit caster
    //local unit target
    local unit bomb
    

    set caster=GetSpellAbilityUnit()
    //set target=GetLastCreatedUnit()
    
    set bung=0
    set mer=4


call CreateNUnitsAtLoc( 1, 'o000', Player(2), GetSpellTargetLoc(), bj_UNIT_FACING )
set bomb=GetLastCreatedUnit()
call UnitDamagePointLoc( caster, 0, 500, GetUnitLoc(bomb), 300.00, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_COLD )

call PolledWait( ( DistanceBetweenPoints(GetUnitLoc(caster), GetUnitLoc(bomb)) / 700.00 ) )




call CreateNUnitsAtLoc( 1, 'ncg1', Player(2), GetSpellTargetLoc(), bj_UNIT_FACING )
set bomb=GetLastCreatedUnit()

loop
exitwhen bung==10
    call SetUnitInvulnerable( bomb, true )
    call SetUnitInvulnerable( caster, true )
    call UnitDamagePointLoc( caster, 0, 500, GetUnitLoc(bomb), 300.00, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_COLD )
    call SetUnitInvulnerable( caster, false )
    call IssuePointOrderLocBJ( bomb, "move", GetRandomLocInRect(GetEntireMapRect()) )
    call TriggerSleepAction(mer)
    set bung=bung+1
    set mer=mer/2
endloop

    call AddSpecialEffectTargetUnitBJ( "overhead",bomb, "Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl" )
    call PolledWait( 3.00 )
    call ShowUnitHide( bomb )
    call SetUnitOwner( bomb, Player(PLAYER_NEUTRAL_PASSIVE), true )
    call RemoveUnit( bomb )
    call DestroyEffectBJ( GetLastCreatedEffectBJ() )
endfunction

//===========================================================================
function InitTrig_LivingBomb_Copy takes nothing returns nothing
    set gg_trg_LivingBomb_Copy = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_LivingBomb_Copy, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_LivingBomb_Copy, Condition( function Trig_LivingBomb_Copy_Conditions ) )
    call TriggerAddAction( gg_trg_LivingBomb_Copy, function Trig_LivingBomb_Copy_Actions )
endfunction
Тоесть так?
Телепатия? :)
Старый 18.09.2009, 21:22
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
Zombak2500, только убери ещё бж и утечки
Старый 18.09.2009, 21:35
Zombak2500

offline
Опыт: 1,855
Активность:
с этим я справлюсь, я уже перешёл со стадии крышечки от чайника к стадии чайника :)
я так понял скрипт теперь работает? завтра проверю, сейчас просто деньги на инете заканчиваются
Старый 18.09.2009, 22:13
Zombak2500

offline
Опыт: 1,855
Активность:
Всё работает ,но как сделать так чтоб било только врагов?

Отредактировано Hellfim, 27.09.2009 в 23:02.
Старый 20.09.2009, 22:00
Elf_Stratigo

offline
Опыт: 4,699
Активность:
вместо UnitDamagePointLoc нужно дамаджить группу, которую ты создашь по своему фильтру
1) подготавливаем группу
2) добавляем юнитов по фильтру
3) наносим дамаги (либо через фор гроуп, либо чепо циклу)
Старый 27.09.2009, 22:27
Zombak2500

offline
Опыт: 1,855
Активность:
Пример можно?
Старый 27.09.2009, 22:45
Diaboliko
Silenced by Diaboliko
offline
Опыт: 16,108
Активность:
Отвечаю с телефона, поэтому не читал говорили что тебе, но ты сперва ставишь локальную бомба на последнего созданного, а затем создаешь её, получается кавардак.
Старый 28.09.2009, 01:46
Elf_Stratigo

offline
Опыт: 4,699
Активность:
Код:
globals
    unit func_m_damager
    real func_m_damage
    attacktype func_m_attacktype
    damagetype func_m_damagetype    
    group func_m_targets=CreateGroup()
    boolexpr func_m_filter=null
endglobals

function UnitDamageAreaEnemy_damage takes nothing returns nothing
    call UnitDamageTarget(func_m_damager,GetEnumUnit(),func_m_damage, true, false, func_m_attacktype, func_m_damagetype, WEAPON_TYPE_WHOKNOWS)
endfunction

function UnitDamageAreaEnemy takes unit damager, real x, real y, real damage, real radius, attacktype whichAttack, damagetype whichDamage returns nothing
    set func_m_damager=damager
    set func_m_damage=damage
    set func_m_attacktype=whichAttack
    set func_m_damagetype=whichDamage   
    call GroupClear(func_m_targets)
    call GroupEnumUnitsInRange(func_m_targets,x,y,radius,func_m_filter)
    call ForGroup(func_m_targets, function UnitDamageAreaEnemy_damage)
endfunction

function UnitDamageAreaEnemy_filter takes nothing returns boolean
    return GetWidgetLife(GetFilterUnit())>.405 and IsUnitEnemy(func_m_damager,GetOwningPlayer(GetFilterUnit()))
endfunction

function UnitDamageAreaEnemy_init takes nothing returns nothing
    set func_m_filter = Condition(function UnitDamageAreaEnemy_filter)
endfunction


использовать:
UnitDamageAreaEnemy
инициализировать:
UnitDamageAreaEnemy_init
(если не инициализируешь, то будет бить опять всех подряд :Р )

твой
UnitDamagePointLoc( caster, 0, 500, GetUnitLoc(bomb), 300.00, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_COLD )
терь изменится в
UnitDamageAreaEnemy(caster,GetUnitX(bomb),GetUnitY(bomb),300.00,500,ATTACK_TYPE_ CHAOS,DAMAGE_TYPE_COLD )

можешь модифицировать функцию, чтобы её параметром был ещё и список целей, а не фиксированные :)
Старый 28.09.2009, 09:45
Ответ

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

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

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

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



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