|
|
|
|
Проблемы с вычислением.
|
|
lawson | Дата: Суббота, 13 Августа 2011, 12:28:54 | Сообщение # 1 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Так вот проблема в чем: я сделал ауру при которой любой юнит обладающий ею при использовании любого заклинания востанавливал определенный процент маны от маны которую он потратил на заклинание. В общем у меня все работает ману я восстанавливаю но не могу сделать это с каждым уровнем. Вот код и где у меня проблемы:
function GetManaVoid takes nothing returns nothing local unit u = LoadUnitHandle(Hash, GetHandleId(GetExpiredTimer()), 0) - загружаю юнита local real m = LoadReal(Hash, GetHandleId(GetExpiredTimer()), 1) - GetUnitState(u, UNIT_STATE_MANA) - загружаю его предыдущее кол-во маны -(минус) его теперищнее кол-во маны: тоесть этим я узнаю сколько маны он затратил на заклинание(здесь проблема) local real r = 0.15 * I2R(GetUnitAbilityLevel(u, 'B00Z')) - увеличиваю процент востановлиной маны с каждым уровенм(здесь проблема) local real mana = m * r - кол-во маны для восстановления, умножаю процент на кол-во затраченной маны call SetUnitState(u, UNIT_STATE_MANA, GetUnitState(u, UNIT_STATE_MANA) + mana) - устанавливаю ману герою. call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Polymorph\\PolyMorphTarget.mdl", u, "head")) set u = null call FlushChildHashtable(Hash, GetHandleId(GetExpiredTimer())) call DestroyTimer(GetExpiredTimer()) endfunction
function Trig_Damage_Aura_Actions takes nothing returns nothing local timer t = CreateTimer() call TimerStart(t, 1.2, false, function GetManaVoid) call SaveUnitHandle(Hash, GetHandleId(t), 0, GetTriggerUnit()) - сохраняю юнита call SaveReal(Hash, GetHandleId(t), 1, GetUnitState(GetTriggerUnit(), UNIT_STATE_MANA)) - сохраняю кол-во его маны во время использования заклинания set t = null endfunction
Кароче код работает но почему то даже если у героя 4 уровень этой способность он все равно восстанавливает 15% от потеряной маны не учитывая что я процент умножаю на уровень спелла => 0.15 * I2R(GetUnitAbilityLevel(u, 'B00Z')) Если не сложно объясните в чем проблема я как только не пытался считать и увеличивал вермя таймера все равно одно и тоже. Он постоянно дает лишь 15% процентов от потраченной маны.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Суббота, 13 Августа 2011, 16:58:18 |
|
|
|
Mep3aB4uK | Дата: Суббота, 13 Августа 2011, 14:12:46 | Сообщение # 2 |
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
| Выложи весь код, с собитием и условием... Также(если так еще не сделал) для проверки убирай у юнита реген маны
|
|
|
|
swdn | Дата: Суббота, 13 Августа 2011, 15:31:42 | Сообщение # 3 |
1 уровень
Группа: Пользователи
Сообщений: 13
Награды: 0
Репутация: 32
Блокировки:
| Quote (lawson) Кароче код работает но почему то даже если у героя 4 уровень этой способность он все равно восстанавливает 15% от потеряной маны не учитывая что я процент умножаю на уровень спелла => 0.15 * I2R(GetUnitAbilityLevel(u, 'B00Z')) Если не сложно объясните в чем проблема я как только не пытался считать и увеличивал вермя таймера все равно одно и тоже. Он постоянно дает лишь 15% процентов от потраченной маны. Узнать уровень баффа не получится, он либо есть (1), либо его нет (0).
В твоём случае необходимо узнавать уровень способности, которая даёт бафф (а не уровень самого баффа). Вместо 'B00Z' поставь равкод этой способности.
|
|
|
|
lawson | Дата: Суббота, 13 Августа 2011, 16:42:05 | Сообщение # 4 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| swdn, Ладно тогда сделаю действительно через пик юнитов и поиск источника бафа. Пфф Как так я делал такой же триггер на получению больше золота за убитого крипа если юнит обладает опр. бафом все там работает и с каждым уровнем бафа дает больше золота. Ну все сделал с пиком юнита и поиском у него способности. Тему можно закрывать если ни кто не предложит вариант по легче.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Суббота, 13 Августа 2011, 16:46:01 |
|
|
|
Mep3aB4uK | Дата: Суббота, 13 Августа 2011, 17:42:57 | Сообщение # 5 |
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
| Может такой вариант будет проще... Юнит изучает абилу сохраняеш юнита добавить событие а там если юнит хас баф %*уровень абилы (сохраненного юнита)
|
|
|
|
lawson | Дата: Суббота, 13 Августа 2011, 18:17:40 | Сообщение # 6 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Mep3aB4uK, Нет я думал на счет этого варианта но здесь во первых не хочу использовать глобалки во вторых 2 триггера против моего 1. Да все помоему закрывайте тему.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Суббота, 13 Августа 2011, 18:32:47 |
|
|
|
FkoFF | Дата: Суббота, 13 Августа 2011, 19:58:32 | Сообщение # 7 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Сочно, ничего не скажешь. Нуба можно узнать по первым строкам кода.
GetExpiredTimer() встречается в коде 4 раза. Вбиваем в переменную - снизит нагрузку. GetHandleId() встречается в коде 3 раза. Вбиваем в переменную - снижаем нагрузку.
Алгоритм вообщем то кривокос, ну да ладно, уж его то мне пережевывать лень ) Короче то что ты хочешь сделать делается по другому, и бафф тут не подойдет.
|
|
|
|
lawson | Дата: Суббота, 13 Августа 2011, 20:19:01 | Сообщение # 8 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| FkoFF, Я написал что сделал уже. А на счет GetExpiredTimer() ты прав это я так начал писать не давно думал чем меньше локалок и вообще перменных в коде тем лучше. ТАк чтож я здесь не правильно сделал? Мало перменных написал? FkoFF, Ну если ты можешь сделать проще и лучше сделай, я тебе даже спасибо скажу. Только без cJass.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Суббота, 13 Августа 2011, 20:34:11 |
|
|
|
FkoFF | Дата: Суббота, 13 Августа 2011, 21:08:21 | Сообщение # 9 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (lawson) FkoFF, Я написал что сделал уже. А на счет GetExpiredTimer() ты прав это я так начал писать не давно думал чем меньше локалок и вообще перменных в коде тем лучше. ТАк чтож я здесь не правильно сделал? Мало перменных написал? FkoFF, Ну если ты можешь сделать проще и лучше сделай, я тебе даже спасибо скажу. Только без cJass.
я не пользуюсь надстройками, методами стандартного джасса все делается достаточно просто:
пикаешь в радиусе героя, обладающего аурой - всех юнитов, которые могут кастовать спеллы (макс мана > 0) и в хт прибиваешь значение уровня его ауры. Производишь это действие раз в 0.5-1 секунду, меньше - ненужно.
Когда кто то кастует спелл - (фиксируешь событие "начинает применять способность") - добавляешь все через ту же хт еще одно значение, обозначающее количество маны.
Другой триггер отлавливает привод способности в действие - вычитывает значение из хт хэндла юнита и уже делаешь все действия. Ах да - условие срабатывания обоих триггеров - наличие значений в хт. Работать будет безотказно и красочно. А ауру можешь оставить красоты ради.
|
|
|
|
lawson | Дата: Суббота, 13 Августа 2011, 23:43:36 | Сообщение # 10 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| FkoFF, Да ладно мне и так сойдет, для моих знаний жасса. Мне больше и не надо главное без утечек и глюков.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
FkoFF | Дата: Суббота, 13 Августа 2011, 23:54:53 | Сообщение # 11 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (lawson) FkoFF, Да ладно мне и так сойдет, для моих знаний жасса. Мне больше и не надо главное без утечек и глюков. как ты будешь узнавать уровень баффа? )
|
|
|
|
lawson | Дата: Суббота, 13 Августа 2011, 23:59:57 | Сообщение # 12 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (FkoFF) как ты будешь узнавать уровень баффа Я ж говорил что сделал уже. Я во время каста спелла пикаю всех юнитов и у выделеннго унита ищу источник баффа - тоесть само заклинание и узнаю его уровень потом сохраняю и выгружаю уже в другой функции.
Добавлено (13-08-2011, 23:59) --------------------------------------------- Тока не фыркай все нормально работает
function GetManaVoid takes nothing returns nothing local unit u = LoadUnitHandle(Hash, GetHandleId(GetExpiredTimer()), 0) local real m = LoadReal(Hash, GetHandleId(GetExpiredTimer()), 1) - GetUnitState(u, UNIT_STATE_MANA) local real r = 0.15 * LoadInteger(Hash, GetHandleId(GetExpiredTimer()), 2) local real mana = m * r call SetUnitState(u, UNIT_STATE_MANA, GetUnitState(u, UNIT_STATE_MANA) + mana) call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Polymorph\\PolyMorphTarget.mdl", u, "head")) set u = null call FlushChildHashtable(Hash, GetHandleId(GetExpiredTimer())) call DestroyTimer(GetExpiredTimer()) endfunction
function Trig_Damage_Aura_Actions takes nothing returns nothing local timer t = CreateTimer() local group g = CreateGroup() local unit d call GroupEnumUnitsInRange(g, GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()), 800, null) loop set d = FirstOfGroup(g) exitwhen d == null if (GetUnitTypeId(d) == 'E007') then call SaveInteger(Hash, GetHandleId(t), 2, GetUnitAbilityLevel(d, 'A06D')) endif call GroupRemoveUnit(g, d) endloop call TimerStart(t, 1., false, function GetManaVoid) call SaveUnitHandle(Hash, GetHandleId(t), 0, GetTriggerUnit()) call SaveReal(Hash, GetHandleId(t), 1, GetUnitState(GetTriggerUnit(), UNIT_STATE_MANA)) call DestroyGroup(g) set g = null set d = null set t = null endfunction
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Воскресенье, 14 Августа 2011, 00:01:10 |
|
|
|
Hexing | Дата: Воскресенье, 14 Августа 2011, 09:25:42 | Сообщение # 13 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| и в переменные. Меньше функций быстрее код.
|
|
|
|
lawson | Дата: Понедельник, 15 Августа 2011, 22:41:48 | Сообщение # 14 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Hexing) GetHandleId(t) На счет этого согласен, слишком я разленился.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
|
|
|
|
|
|
|