|
|
|
|
[Вопрос] Ошибка в коде
|
|
Smartaros | Дата: Суббота, 18 Августа 2012, 17:42:19 | Сообщение # 1 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| Code constant function Trig_Rjawchina_Ability takes nothing returns integer return 'A04F' endfunction
constant function Trig_Rjawchina_Dummy takes nothing returns integer return 'n02J' endfunction
constant function Trig_Rjawchina_Effect takes nothing returns string return "Abilities\\Spells\\Other\\StrongDrink\\BrewmasterMissile.mdl" endfunction
constant function Trig_Rjawchina_Dummy_Abilities takes integer lvl returns integer local integer i if lvl == 1 then set i = 'A049' endif if lvl == 2 then set i = 'A04D' endif if lvl == 3 then set i = 'A04E' endif if lvl == 4 then set i = 'A04f' endif if lvl == 5 then set i = 'A04G' endif if lvl == 6 then set i = 'A04H' endif return i endfunction
constant function Trig_Rjawchina_Period takes nothing returns real return 1. endfunction
constant function Trig_Rjawchina_Time takes nothing returns integer return 1 endfunction
constant function Trig_Rjawchina_AOE takes integer lvl returns real return 100. + 20. * lvl endfunction
function Trig_Rjawchina_Conditions takes nothing returns boolean return GetSpellAbilityId() == Trig_Rjawchina_Ability() endfunction
function Trig_Rjawchina_Timer takes nothing returns nothing local timer t = GetExpiredTimer() local integer id = GetHandleId(t) local unit u = LoadUnitHandle(udg_Hash, id, 0) local group g = LoadGroupHandle(udg_Hash, id, 1) local integer i = LoadInteger(udg_Hash, id, 2) + Trig_Rjawchina_Time() local unit d = null local unit b = null if i > 6 then call DestroyGroup(g) call DestroyTimer(t) call FlushChildHashtable(udg_Hash, id) else loop b = FirstOfGroup(g) exitwhen(b == null) if IsUnitEnemy(b, GetOwningPlayer(u)) == true and not IsUnitType(b, UNIT_TYPE_MAGIC_IMMUNE) == true and GetWidgetLife(b) > 0.405 and not IsUnitType(b, UNIT_TYPE_STRUCTURE) == true then set d = CreateUnit(GetOwningPlayer(u), Trig_Rjawchina_Dummy(), GetWidgetX(b), GetWidgetY(b), 0) call UnitAddAbility(d, Trig_Rjawchina_Dummy_Abilities(GetUnitAbilityLevel(u, Trig_Rjawchina_Ability()))) call SetUnitAbilityLevel(d, Trig_Rjawchina_Dummy_Abilities(GetUnitAbilityLevel(u, Trig_Rjawchina_Ability())), i) call IssueTargetOrder(d, "cripple", b) call UnitApplyTimedLife(d, 'BTLF', 1.00) call DestroyEffect(AddSpecialEffectTarget(Trig_Rjawchina_Effect(), b, "chest")) endif call GroupRemoveUnit(g, b) endloop call DestroyGroup(g) endif call SaveInteger(udg_Hash, id, 2, i) set t = null set u = null set g = null set d = null set b = null endfunction
function Trig_Rjawchina_Actions takes nothing returns nothing local unit u = GetTriggerUnit() local location l = GetSpellTargetLoc() local real x = GetLocationX(l) local real y = GetLocationY(l) local unit d = null local timer t = CreateTimer() local integer id = GetHandleId(t) local group g = CreateGroup() local group gr = CreateGroup() local unit b = null call RemoveLocation(l) call GroupEnumUnitsInRange(g, x, y, Trig_Rjawchina_AOE(GetUnitAbilityLevel(u,Trig_Rjawchina_Ability())), null) loop b = FirstOfGroup(g) exitwhen(b == null) if IsUnitEnemy(b, GetOwningPlayer(u)) == true and not IsUnitType(b, UNIT_TYPE_MAGIC_IMMUNE) == true and GetWidgetLife(b) > 0.405 and not IsUnitType(b, UNIT_TYPE_STRUCTURE) == true then set d = CreateUnit(GetOwningPlayer(u), Trig_Rjawchina_Dummy(), x, y, 0) call UnitAddAbility(d, Trig_Rjawchina_Dummy_Abilities(GetUnitAbilityLevel(u,Trig_Rjawchina_Ability()))) call IssueTargetOrder(d, "cripple", b) call UnitApplyTimedLife(d, 'BTLF', 1.00) call DestroyEffect(AddSpecialEffectTarget(Trig_Rjawchina_Effect(), b, "chest")) call GroupAddUnit(gr, b) endif call GroupRemoveUnit(g, b) endloop call DestroyGroup(g) call SaveAgentHandle(udg_Hash, id, 0, u) call SaveGroupHandle(udg_Hash, id, 1, gr) call SaveInteger(udg_Hash, id, 2, Trig_Rjawchina_Time()) call TimerStart(t, Trig_Rjawchina_Period(), true, function Trig_Rjawchina_Timer) set u = null set l = null set d = null set t = null set g = null set gr = null set b = null endfunction
//=========================================================================== function InitTrig_Rjawchina takes nothing returns nothing local unit u = CreateUnit(Player(0), 'n02G', 0, 0, 0) call UnitAddAbility(u, 'A049') call SetUnitAbilityLevel(u, 'A049', 6) call UnitAddAbility(u, 'A04D') call SetUnitAbilityLevel(u, 'A04D', 6) call UnitAddAbility(u, 'A04E') call SetUnitAbilityLevel(u, 'A04E', 6) call UnitAddAbility(u, 'A04F') call SetUnitAbilityLevel(u, 'A04F', 6) call UnitAddAbility(u, 'A04G') call SetUnitAbilityLevel(u, 'A04G', 6) call UnitAddAbility(u, 'A04H') call SetUnitAbilityLevel(u, 'A04H', 6) call KillUnit(u) set gg_trg_Rjawchina = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Rjawchina, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_Rjawchina, Condition( function Trig_Rjawchina_Conditions ) ) call TriggerAddAction( gg_trg_Rjawchina, function Trig_Rjawchina_Actions ) call Preload("Abilities\\Spells\\Other\\StrongDrink\\BrewmasterMissile.mdl") call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\StrongDrink\\BrewmasterMissile.mdl", 0, 0)) set u = null endfunction
Проблемы в том, что даммики не юзают способности, а эффекты накладываются два раза, вместо шести
|
|
|
|
dkfl10011 | Дата: Суббота, 18 Августа 2012, 18:45:41 | Сообщение # 2 |
1 уровень
Группа: Пользователи
Сообщений: 8
Награды: 0
Репутация: 4
Блокировки:
| function InitTrig_Rjawchina takes nothing returns nothing local unit u = CreateUnit(Player(0), 'n02G', 0, 0, 0) call UnitAddAbility(u, 'A049') call SetUnitAbilityLevel(u, 'A049', 6) call UnitAddAbility(u, 'A04D') call SetUnitAbilityLevel(u, 'A04D', 6) call UnitAddAbility(u, 'A04E') call SetUnitAbilityLevel(u, 'A04E', 6) call UnitAddAbility(u, 'A04F') call SetUnitAbilityLevel(u, 'A04F', 6) call UnitAddAbility(u, 'A04G') call SetUnitAbilityLevel(u, 'A04G', 6) call UnitAddAbility(u, 'A04H') call SetUnitAbilityLevel(u, 'A04H', 6) call KillUnit(u) set gg_trg_Rjawchina = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Rjawchina, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_Rjawchina, Condition( function Trig_Rjawchina_Conditions ) ) call TriggerAddAction( gg_trg_Rjawchina, function Trig_Rjawchina_Actions ) call Preload("Abilities\\Spells\\Other\\StrongDrink\\BrewmasterMissile.mdl") call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\StrongDrink\\BrewmasterMissile.mdl", 0, 0)) set u = null endfunction
С кокого у тебя действия в инициализации триггера? Добавлено (18 Августа 2012, 18:41:23) --------------------------------------------- А главное ЗАЧЕМ тебе столько ретурнов если ты в них нечего не вычисляешь??? Добавлено (18 Августа 2012, 18:45:41) --------------------------------------------- Чтобы сделать несколько действий с 1 функцией сделай многократный таймер т.е поставь в аргументе "тру" вместо "фальши" Quote (Smartaros) эффекты накладываются два раза, вместо шести
|
|
|
|
Smartaros | Дата: Суббота, 18 Августа 2012, 19:07:59 | Сообщение # 3 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| Действия в инициализации триггера подгружают данные, и когда спелл будет использоваться впервые то небольшого лага не будет.
Функции константы нужны для настройки спелла, если нужно будет например поменять радиус, то просто изменяешь его там, вместо того чтобы менять значения во всем коде
Таймер периодический, я не знаю куда ты смотришь.
Вывод: ты ярковыраженное нубло, которое мало что понимает из моего кода, отписался и просто засрал сам себя.
|
|
|
|
tRu^S | Дата: Суббота, 18 Августа 2012, 19:38:00 | Сообщение # 4 |
8 уровень
Группа: Проверенные
Сообщений: 614
Награды: 0
Репутация: 138
Блокировки:
| Smartaros, бред, ты где его скопировал
|
|
|
|
kapa6acvlk | Дата: Суббота, 18 Августа 2012, 20:01:08 | Сообщение # 5 |
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
| Smartaros, Зачем тебе точка, юзай GetSpellTargetX() GetSpellTargetY(). Не знаю, но это развер работает: ты сохраняешь call SaveAgentHandle(udg_Hash, id, 0, u) ты выгружаешь LoadUnitHandle(udg_Hash, id, 0) эффекты накладываются 2 раза т.к. ты после истечения таймера уберешь из группы всех юнитов, а группу задестроишь, естественно на вторую сработку в группе пусто.
Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна. © Александр Зорич
Сообщение отредактировал kapa6acvlk - Суббота, 18 Августа 2012, 20:01:31 |
|
|
|
Smartaros | Дата: Суббота, 18 Августа 2012, 20:25:21 | Сообщение # 6 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| я же группу сохраняю в хэш, и потом загружаю Добавлено (18 Августа 2012, 20:25:21) --------------------------------------------- я смотрел список функций и не нашел SpelTargetX
|
|
|
|
SirNikolas | Дата: Суббота, 18 Августа 2012, 20:34:10 | Сообщение # 7 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Smartaros) Code constant function Trig_Rjawchina_Dummy_Abilities takes integer lvl returns integer local integer i if lvl == 1 then set i = 'A049' endif if lvl == 2 then set i = 'A04D' endif if lvl == 3 then set i = 'A04E' endif if lvl == 4 then set i = 'A04f' endif if lvl == 5 then set i = 'A04G' endif if lvl == 6 then set i = 'A04H' endif return i endfunction Code constant function Trig_Rjawchina_Dummy_Abilities takes integer lvl returns integer if lvl <= 3 then if lvl == 1 then return 'A049' elseif lvl == 2 then return 'A04D' endif return 'A04E' elseif lvl == 4 then return 'A04F' elseif lvl == 5 then return 'A04G' endif return 'A04H' endfunction Quote (Smartaros) call UnitAddAbility(u, 'A049') call SetUnitAbilityLevel(u, 'A049', 6) call UnitAddAbility(u, 'A04D') call SetUnitAbilityLevel(u, 'A04D', 6) call UnitAddAbility(u, 'A04E') call SetUnitAbilityLevel(u, 'A04E', 6) call UnitAddAbility(u, 'A04F') call SetUnitAbilityLevel(u, 'A04F', 6) call UnitAddAbility(u, 'A04G') call SetUnitAbilityLevel(u, 'A04G', 6) call UnitAddAbility(u, 'A04H') call SetUnitAbilityLevel(u, 'A04H', 6) call KillUnit(u) //... call Preload("Abilities\\Spells\\Other\\StrongDrink\\BrewmasterMissile.mdl") call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\StrongDrink\\BrewmasterMissile.mdl", 0, 0)) call UnitAddAbility(u, Trig_Rjawchina_Dummy_Abilities(1)) call UnitAddAbility(u, Trig_Rjawchina_Dummy_Abilities(2)) call UnitAddAbility(u, Trig_Rjawchina_Dummy_Abilities(3)) call UnitAddAbility(u, Trig_Rjawchina_Dummy_Abilities(4)) call UnitAddAbility(u, Trig_Rjawchina_Dummy_Abilities(5)) call UnitAddAbility(u, Trig_Rjawchina_Dummy_Abilities(6)) call RemoveUnit(u) //... call Preload(Trig_Rjawchina_Effect())
Еще непонятно, зачем в периодике каждый раз производится проверка на врага и на здание. Разве у цели могут измениться эти характеристики? Как уже сказали, проблема в том, что при первом истечении таймера группа очищается. Здесь лучше использовать ForGroup с занесением уровня способности в глобальную переменную.Добавлено (18 Августа 2012, 20:34:10) ---------------------------------------------
Quote (Smartaros) я смотрел список функций и не нашел SpelTargetX GetSpellTargetX. Она есть. Добавлена с патчем 1.24 вместе с хэшем.
|
|
|
|
Ty3uK | Дата: Суббота, 18 Августа 2012, 20:35:07 | Сообщение # 8 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| объясните мне, нубу, зачем делать функцию константой? каким раком она может измениться?
|
|
|
|
Smartaros | Дата: Суббота, 18 Августа 2012, 21:04:08 | Сообщение # 9 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| только чтобы визуально разница была, мне так удобнее Добавлено (18 Августа 2012, 21:04:08) --------------------------------------------- Собственно я другого не ожидал Я так понял если создать группу, забить в нее юнитов и сохранить ее, то после загрузки и последущего очищения если снова загрузить то она будет пустой, я этого не знал. Еще я задал вопрос почему даммики не юзали абилу, мне не ответили, единственное это просто подправили код, что не решает суть проблемы, и я не просил делать код другим, мне удобнее так как я пишу, он от этого не перестанет работает, не работает только то, что вы не попытались изменить, то о чем я просил.
|
|
|
|
lawson | Дата: Воскресенье, 19 Августа 2012, 03:04:39 | Сообщение # 10 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Ty3uK) объясните мне, нубу, зачем делать функцию константой? В том то и дело что ты жалкий нуб, и тебе не понять!
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Ty3uK | Дата: Воскресенье, 19 Августа 2012, 12:53:55 | Сообщение # 11 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
|
|
|
|
|
Smartaros | Дата: Воскресенье, 19 Августа 2012, 15:08:48 | Сообщение # 12 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| ну смысл ты тут флудишь? раз ты такой молодец то реши проблему
|
|
|
|
Ty3uK | Дата: Воскресенье, 19 Августа 2012, 15:14:13 | Сообщение # 13 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| я?
|
|
|
|
kapa6acvlk | Дата: Воскресенье, 19 Августа 2012, 15:33:15 | Сообщение # 14 |
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
| Smartaros, Сделай наработку с этим кодом, тогда его посмотрят, а так создавать новую карту, совать туда код, настраивать его, слишком много лишних действий (всем лень ). Тебе проще скопипастить его в новую мапу.
Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна. © Александр Зорич
|
|
|
|
Smartaros | Дата: Воскресенье, 19 Августа 2012, 16:10:19 | Сообщение # 15 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| там просто равкоды поменять и все Добавлено (19 Августа 2012, 16:10:19) --------------------------------------------- там просто равкоды поменять и все
|
|
|
|
Hexing | Дата: Воскресенье, 19 Августа 2012, 19:23:24 | Сообщение # 16 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (Smartaros) Проблемы в том, что даммики не юзают способности, а эффекты накладываются два раза, вместо шес 1. ид способности != 'cripple' 2. даммики не успевают кастовать из-за времени подготовки спелла >= 1.0
на счёт эффектов - а ты что хотел, они в одном месте и просто совпадают по координатам отрисовки, создавай со смещением во времени и будет заметно
|
|
|
|
Smartaros | Дата: Воскресенье, 19 Августа 2012, 20:56:19 | Сообщение # 17 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| у даммиков длительность каста 0, а эффекты я уже разобрался Добавлено (19 Августа 2012, 20:56:19) --------------------------------------------- у меня раньше все было аналогично на гуи, все работало
|
|
|
|
Ty3uK | Дата: Воскресенье, 19 Августа 2012, 21:26:11 | Сообщение # 18 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| длительность на .01
|
|
|
|
Smartaros | Дата: Воскресенье, 19 Августа 2012, 21:41:31 | Сообщение # 19 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| кстати 0,1.......я заметил что если заставлять юзать даммиков некоторые скиллы в цикле, то если длительность 0 они не юзают, но на гуи они все юзали
|
|
|
|
SirNikolas | Дата: Понедельник, 20 Августа 2012, 06:26:24 | Сообщение # 20 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Боже мой, ну даммики не кастуют из-за того, что группа очищается. Им не на кого кастовать! Добавлено (20 Августа 2012, 06:26:24) ---------------------------------------------
Quote (Ty3uK) объясните мне, нубу, зачем делать функцию константой? Есть предположение (нужно проверить), что константная функция не может обращаться к глобальным переменным и другим функциям (даже нативным).
|
|
|
|
Smartaros | Дата: Понедельник, 20 Августа 2012, 12:14:05 | Сообщение # 21 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| они должны кастовать, они сначала при исп. спелла кастую, когда есть на кого кастовать
|
|
|
|
|
|
|
|
|
|
|