Лучшие проекты:

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

  • Страница 1 из 1
  • 1
Модератор форума: farfacer, SaMuRa][  
[JASS]Скил-стрела
_Art_Дата: Среда, 25.03.2015, 15:13 | Сообщение # 1
Группа: Пользователи
Сообщений: 6
Награды: 0
Репутация: 0
Статус: Offline
загрузка наград ...
Сам код способности:
[code]
function Trig_SpellBoon_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A006' //Тут меняем на свою способность типа "Цель-точка"
endfunction

function SpellBoon_Act takes nothing returns nothing
local timer t = GetExpiredTimer()
local unit c = LoadUnitHandle(hash,GetHandleId(t),1)
local unit cc = LoadUnitHandle(hash,GetHandleId(t),3)
local real d = LoadReal(hash,GetHandleId(t),2)
SetUnitX(c,GetUnitX(c)+30*Cos(bj_DEGTORAD * d))
SetUnitY(c,GetUnitY(c)+30*Sin(bj_DEGTORAD * d))
local group g = CreateGroup()
local unit u
GroupEnumUnitsInRange(g,GetUnitX(c),GetUnitY(c),130,null)
set u = FirstOfGroup(g)
if u != null
if IsUnitEnemy(u,GetOwningPlayer(cc))
RemoveUnit(c)
UnitDamageTarget(cc,u,GetHeroInt(cc,true)*10,true,true,null,null,null) //Тут ваш урон,у меня это Разумx10
DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",GetUnitX(u),GetUnitY(u)))
DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",GetUnitX(u),GetUnitY(u)))
DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",GetUnitX(u),GetUnitY(u)))
DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",GetUnitX(u),GetUnitY(u)))
endif
endif
set t = null
set c = null
set cc =null
set d = 0
DestroyGroup(g)
set g = null
set u = null
endfunction

function Trig_SpellBoon_Actions takes nothing returns nothing
local unit c = GetSpellAbilityUnit()
local real x = GetUnitX(c)
local real y = GetUnitY(c)
local real d = bj_RADTODEG * Atan2(GetSpellTargetY() - y,GetSpellTargetX() - x)
local unit dum = CreateUnit(GetOwningPlayer(c),'h00B',GetUnitX(c)+130*Cos(bj_DEGTORAD * d),GetUnitY(c)+130*Sin(bj_DEGTORAD * d),d) //'h00B' ид дами меняйте на своего
local timer t = CreateTimer()
SaveUnitHandle(hash,GetHandleId(t),1,dum)
SaveReal(hash,GetHandleId(t),2,d)
SaveUnitHandle(hash,GetHandleId(t),3,c)
TimerStart(t,0.03,true,function SpellBoon_Act)
TriggerSleepAction(0.6) //От этого зависит как долго он будет лететь
PauseTimer(t)
FlushChildHashtable(hash,GetHandleId(t))
set t = null
set c = null
if dum != null
RemoveUnit(dum)
endif
set dum = null
set x = 0
set y = 0
set d = 0
endfunction

//===========================================================================
function InitTrig_SpellBoon takes nothing returns nothing
local trigger t = CreateTrigger( )
local integer index = 0
loop
call TriggerRegisterPlayerUnitEvent(t, Player(index), EVENT_PLAYER_UNIT_SPELL_CAST, null)

set index = index + 1
exitwhen index == 14
endloop
call TriggerAddCondition( t, Condition( function Trig_SpellBoon_Conditions ) )
call TriggerAddAction( t, function Trig_SpellBoon_Actions )
set t = null
set index = 0
endfunction
[/code]
Потом сюда https://i.imgur.com/2zx7ouY.png нам нужно записать переменную hash типа хэшьтаблица
Суть способности в том что герой пускает стрелу(или что нибудь другое) как только она попадёт в юнита тот получит урон и а стрела исчезнет.
 
SaMuRa][Дата: Четверг, 26.03.2015, 14:31 | Сообщение # 2
Группа: Модераторы
Сообщений: 525
Награды: 11
Репутация: 140
Статус: Offline
загрузка наград ...
Код не рабочий...... Тут минимум 4 ошибки

 
FireFrogДата: Четверг, 26.03.2015, 14:39 | Сообщение # 3
Eternal Flame
Группа: Администраторы
Сообщений: 864
Награды: 25
Репутация: 807
Статус: Offline
загрузка наград ...
Согласен, неправильные манипуляции с группой и очистка хеша также неправильная.
 
_Art_Дата: Пятница, 27.03.2015, 12:32 | Сообщение # 4
Группа: Пользователи
Сообщений: 6
Награды: 0
Репутация: 0
Статус: Offline
загрузка наград ...
SaMuRa][,Какие же?
FireFrog,А как его правильно тогда?
Из ошибок я только нашёл что урон может наносится и по мёртвому юниту,так это легко исправить


Сообщение отредактировал _Art_ - Пятница, 27.03.2015, 12:59
 
SaMuRa][Дата: Пятница, 27.03.2015, 13:04 | Сообщение # 5
Группа: Модераторы
Сообщений: 525
Награды: 11
Репутация: 140
Статус: Offline
загрузка наград ...
Цитата _Art_ ()
PauseTimer(t)
FlushChildHashtable(hash,GetHandleId(t)) 3279
Это ставится не в таймере а в действие . Ты заблочил таймер и очистил хеш поэтому все верхнии действия не сработают.
Цитата _Art_ ()
TriggerSleepAction(0.6) //От этого зависит как долго он будет лететь
Это вообще зачем? Оно только будет багать таймер
Цитата _Art_ ()
if dum != nullRemoveUnit(dum)
endif
Вообще не нужна просто dum = null
Цитата _Art_ ()
GroupEnumUnitsInRange(g,GetUnitX©,GetUnitY©,130,null)
Где условия? Или оно должно выбирать всех?
Цитата _Art_ ()
if u != null
Не будет работать, должно быть == а не !=(Не равно) Тогда оно вообще не кого не выберет
Цитата _Art_ ()
endifset t = null
set c = null
set cc =null
set d = 0
DestroyGroup(g)
set g = null
set u = null
endfunction
Где пауза таймера? Уничтожение? очистка хеша? И если юнита не убирать с группы то игра начнёт лагать очень жестоко.


 
_Art_Дата: Пятница, 27.03.2015, 13:45 | Сообщение # 6
Группа: Пользователи
Сообщений: 6
Награды: 0
Репутация: 0
Статус: Offline
загрузка наград ...
SaMuRa][,

https://i.imgur.com/OgShZtZ.png посмотри внимательно,оно и так стоит в действиях.
https://i.imgur.com/408yK28.png опять-же оно не в таймере.
https://i.imgur.com/bc8CF7h.png так там и надо проверка на "не равно"
Мог-бы хотя-бы проверить а потом уже писать %)
 
  • Страница 1 из 1
  • 1
Поиск: