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

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

Ответ
 
Iceman

offline
Опыт: 440
Активность:
Создание функции First Blood. Пособие.
Некоторые люди при создании AOS затрудняются сделать ранк, эдакий приз для того, кто первым убил противника.
Сейчас я помогу им решить эту проблему.
Триггер полностью на JASS. (хотя можно и на GUI)
Вот:
function Trig_FirstBlood_Conditions takes nothing returns boolean
if ( not ( GetTriggerUnit() == GetDyingUnit() ) ) then
return false
endif
if ( not ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true ) ) then
return false
endif
return true
endfunction
function Trig_FirstBlood_Func004C takes nothing returns boolean
if ( not ( GetTriggerUnit() == GetDyingUnit() ) ) then
return false
endif
if ( not ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true ) ) then
return false
endif
if ( not ( IsUnitType(GetKillingUnitBJ(), UNIT_TYPE_HERO) == true ) ) then
return false
endif
return true
endfunction
function Trig_FirstBlood_Actions takes nothing returns nothing
if ( Trig_FirstBlood_Func004C() ) then
call DisplayTimedTextToForce( GetPlayersAll(), 30, ( ( GetPlayerName(GetOwningPlayer(GetKillingUnitBJ())) + ( " пролил" + " |CFFFF0000Первую Кровь!!!|r" ) ) + " (+250 бонус. золота!)" ) )
call PlaySoundBJ( gg_snd_firstblood )
call AddSpecialEffectLocBJ( GetUnitLoc(GetDyingUnit()), "Objects\\Spawnmodels\\Orc\\Orcblood\\OrcBloodHellScream.mdl" )
call TriggerSleepAction( 1.00 )
call CreateTextTagUnitBJ( "TRIGSTR_3930", GetKillingUnitBJ(), 0, 10, 100, 100, 100, 0 )
call TriggerSleepAction( 1.00 )
call DestroyTextTagBJ( GetLastCreatedTextTag() )
call AdjustPlayerStateBJ( 250, GetOwningPlayer(GetKillingUnitBJ()), PLAYER_STATE_RESOURCE_GOLD )
call DisableTrigger( GetTriggeringTrigger() )
else
call DoNothing( )
call DisableTrigger( GetTriggeringTrigger() )
endif
endfunction
===========================================================================
function InitTrig_FirstBlood takes nothing returns nothing
set gg_trg_FirstBlood = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_FirstBlood, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddCondition( gg_trg_FirstBlood, Condition( function Trig_FirstBlood_Conditions ) )
call TriggerAddAction( gg_trg_FirstBlood, function Trig_FirstBlood_Actions )
endfunction
Старый 12.06.2007, 13:22
Кет

offline
Опыт: 111,209
Активность:
А нах JASS? По-моему то же самое и на GUI можно...
Старый 12.06.2007, 13:25
Iceman

offline
Опыт: 440
Активность:
Вот карта-пример.
Прикрепленные файлы
Тип файла: w3x First Blood.w3x (11.4 Кбайт, 91 просмотров )
Старый 12.06.2007, 13:27
dk

offline
Опыт: 60,293
Активность:
Цитата:
Триггер полностью на JASS. (хотя можно и на GUI)

Лучше бы на гуи выложил, всеравно видно что в текст тупо перевел...
Старый 12.06.2007, 13:30
Iceman

offline
Опыт: 440
Активность:
Есть карта-пример. Будь внимательней.
Старый 12.06.2007, 13:32
adic3x

offline
Опыт: 108,439
Активность:
да ну... код некоректный, начиная от ТриггерСлипАктион... заканчивая строкой "ТРИГстр3930"...

ADOLF добавил:
Цитата:
else
call DoNothing( )
call DisableTrigger( GetTriggeringTrigger() )

хмм... и зачем он вообще нужен, дунотинг этот?
Старый 12.06.2007, 13:41
J
expert
offline
Опыт: 48,447
Активность:
Iceman видно же что просто всделал тригер на GUI и перевел его в джаз и все... это очень змаиметно.. тачто неотвертывайся

Jon добавил:
притом ужасно неоптимально, и с утечками...
Старый 12.06.2007, 13:48
Iceman

offline
Опыт: 440
Активность:
Да, я сделал триггер на GUI.
Затем перевел его на JASS в триггерах.
Если вы разбираетесь, хорошо. Я сделал это для людей, которые ни черта не смыслят в редакторе Warcraft 3.

Iceman добавил:
DoNothing нужен для того, чтобы игрок не делал First Blood каждый раз убивая героя.
И еще. TRIGSTR - это для KotA (плавающий текст) и в вашей карте он наверняка не нужен.

Проще всего, удалите из GUI версии First Blood плавающий текст и готово.

Я буду рад, если есть такие люди, кому это пригодилось.
Старый 12.06.2007, 13:51
adic3x

offline
Опыт: 108,439
Активность:
дык, логичный вопрос, зачем людям которые ни черта нисмыслят в ВЕ жасс код?
кста сам код тоже содержит множество ошибок, так что...
желание кому либо помочь, это конечно хорошо, но в твоем случае просто желания недостаточно...
Старый 12.06.2007, 13:52
Iceman

offline
Опыт: 440
Активность:
Можешь, сделай лучше. :):
Старый 12.06.2007, 13:53
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
DoNothing нужен для того

он вообще не нужен=)

Код:
function DoNothing takes nothing returns nothing
endfunction


его вообще ставить нет никакого смысла.

ADOLF добавил:
Цитата:
Можешь, сделай лучше

лол=) а давайте сейчас каждый из учасников сделает по тригеру на ФерстБлад?) - и будет счастье...
Старый 12.06.2007, 13:55
J
expert
offline
Опыт: 48,447
Активность:
Iceman вуаля
Код:
function Trig_FirstBlood_Conditions takes nothing returns boolean
    return IsUnitType(DyingUnit, UNIT_TYPE_HERO) and IsUnitType(KillingUnit, UNIT_TYPE_HERO)
endfunction

function Trig_FirstBlood_Actions takes nothing returns nothing
    local unit KillingUnit = GetKillingUnit()
    local unit DyingUnit   = GetDyingUnit()
    local effect fx
    local texttag tt
    call DisplayTimedTextToForce( bj_FORCE_ALL_PLAYERS, 30, GetPlayerName(GetOwningPlayer(KillingUnit)) + " i?ieee" + " |CFFFF0000Ia?ao? E?iau!!!|r" + " (+250 aiion. cieioa!)")
    call StartSound(gg_snd_firstblood)
    set fx = AddSpecialEffect("Objects\\Spawnmodels\\Orc\\Orcblood\\OrcBloodHellScream.mdl", GetUnitX(DyingUnit), GetUnitY(DyingUnit))
    call TriggerSleepAction(1)
    set tt = CreateTextTagUnitBJ( "TRIGSTR_3930", KillingUnit, 0, 10, 100, 100, 100, 0 )
    call TriggerSleepAction(1)
    call DestroyTextTag(tt)
    call DestroyEffect (fx)
    call AdjustPlayerStateBJ( 250, GetOwningPlayer(KillingUnit)), PLAYER_STATE_RESOURCE_GOLD)
    call DisableTrigger(GetTriggeringTrigger())
    set fx = null
    set tt = null
endfunction

//===========================================================================
function InitTrig_FirstBlood takes nothing returns nothing
    set gg_trg_FirstBlood = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_FirstBlood,EVENT_PLAYER_UNIT_DEATH                       )
    call TriggerAddCondition          (gg_trg_FirstBlood,Condition(function Trig_FirstBlood_Conditions))
    call TriggerAddAction             (gg_trg_FirstBlood,          function Trig_FirstBlood_Actions    )
endfunction

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

Отредактировано Jon, 12.06.2007 в 14:07.
Старый 12.06.2007, 13:57
adic3x

offline
Опыт: 108,439
Активность:
начнем с простых вещей: у тебя в коде стоит что и убиенный и убийца дб героями? а если скажем игрок убил кого то суммоном? кста я так смотрю каша тут редкая, начиная от ГетТриггерингЮнит==ГетДаингЮнит...

иди ка лучше статейки почитай что ли...

ADOLF добавил:
Jon, ну ты та хоть мог убрать ГетТригерингЮнит==ГетДаингЮнит ?) а ясно,ты так оптимизировал, что бы не менять оригинального алгоритма? хм...

вообще строить систему по убийствам героев без полной картины (воскрешение, дабл трипл килы, и т.д.) - бред=)
Старый 12.06.2007, 14:02
J
expert
offline
Опыт: 48,447
Активность:
лано.. убрал подобную фигню

Jon добавил:
ппц... строки ужасно скопировалисб.. а ну да ладно...
Старый 12.06.2007, 14:04
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
" ïðîëèë" + " |CFFFF0000Ïåðâóþ Êðîâü!!!|r" + " (+250 áîíóñ. çîëîòà!)")


жасс крафт?)

хм, я бы проверял овнера оф килинг юнита и если он не камп до пускал сработку, а не по тому что килинг юнит ис херо...
Старый 12.06.2007, 14:07
Iceman

offline
Опыт: 440
Активность:
Спасибо, ребята!!! Учту!
Старый 12.06.2007, 14:07
J
expert
offline
Опыт: 48,447
Активность:
я правдо не понял почему у него в условии тригера, написано тоже самое.. почти.. что и в if-е самого тригера....
Старый 12.06.2007, 14:08
FausT

offline
Опыт: 1,451
Активность:
НКому ето пригодится, все же и так знают?
Старый 21.06.2007, 13:56
p01nTT

offline
Опыт: 11,160
Активность:
Цитата:
Сообщение от FausT
НКому ето пригодится, все же и так знают?

прав
Старый 21.06.2007, 14:22
S

offline
Опыт: 43,833
Активность:
ППКС.
Старый 21.06.2007, 14:52
Ответ

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

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

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

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



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