_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 так там и надо проверка на "не равно" Мог-бы хотя-бы проверить а потом уже писать
|
|
| |