|
|
|
|
[Вопрос] Способность
|
|
Hock | Дата: Суббота, 26 Ноября 2011, 15:06:37 | Сообщение # 1 |
3 уровень
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 14
Блокировки:
| Помогите пожалуйста.. Я хочу сделать скилл похожий на "Sun Ray"из доты у феникса или как у волшебница в D3 Так вот вроде все получилось,но вопрос, почему действия в цикле не делаются,хотя в игру заходит,скилл юзается Молнии создаются. Если можете ,то помогите,или желательно наработку если не трудно. Code local integer i local unit u=GetTriggerUnit() local unit d=CreateUnitAtLoc(GetOwningPlayer(u),'h00A',GetSpellTargetLoc(),0) local real x1=GetUnitX(u) local real y1=GetUnitY(u) local real x2=GetUnitX(d) local real y2=GetUnitY(d) local lightning l = AddLightning("AFOD", true, x1, y1, x2, y2) local lightning l2 = AddLightning("LEAS", true, x1, y1, x2, y2) local lightning l3 = AddLightning("SPLK", true, x1, y1, x2, y2) local lightning l4 = AddLightning("AFOD", true, x1, y1, x2, y2) loop exitwhen i>40 set x1=GetUnitX(u) set y1=GetUnitY(u) set x2=GetUnitX(d) set y2=GetUnitY(d) call MoveLightning(l,true,x1,y1,x2,y2) call MoveLightning(l2,true,x1,y1,x2,y2) call MoveLightning(l3,true,x1,y1,x2,y2) call MoveLightning(l4,true,x1,y1,x2,y2) call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl",x2,y2)) call TriggerSleepAction(0.5) set i=i+1 endloop call DestroyLightning(l) call DestroyLightning(l2) call DestroyLightning(l3) call DestroyLightning(l4) set l = null set l2 = null set l3 = null set l4 = null Зарание спасибоДобавлено (26 Ноябрь 2011, 15:06:37) ---------------------------------------------
Quote (Hock) действия в цикле не делаются Ошибка-делаются,но только ждать 0.05 сек и set i=i+1
А движение молнии за точками нету и создания эффекта(в игре не показывается)
http://warcraft3ft.info/forum/26-34958-1
|
|
|
|
Kartoha | Дата: Суббота, 26 Ноября 2011, 15:14:50 | Сообщение # 2 |
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
| Hock, иногда, при использовании wait`ов в циклах с малым периодом в этих циклах не выполняются действия. Попробуй заменить wait на таймер, т.е. создай специальную функцию для таймера, которая будет выполнять действие а wait убери.
|
|
|
|
Hock | Дата: Суббота, 26 Ноября 2011, 15:25:09 | Сообщение # 3 |
3 уровень
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 14
Блокировки:
| Kartoha, Щас попробую) Добавлено (26 Ноябрь 2011, 15:25:09) --------------------------------------------- Я нуб ,я таймером пользоватся не умею.. Напиши плз все действия по его созданию Code local timet t=CreateTimer() это понятно,а дальше что?)
http://warcraft3ft.info/forum/26-34958-1
|
|
|
|
Kartoha | Дата: Суббота, 26 Ноября 2011, 15:28:39 | Сообщение # 4 |
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
| Hock, я ошибся. Тебе ведь wait не только для действия set i = i+1 нужен? Wait для всего цикла так?
|
|
|
|
Hock | Дата: Суббота, 26 Ноября 2011, 15:32:47 | Сообщение # 5 |
3 уровень
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 14
Блокировки:
| Kartoha, Да,чтобы эфект незаюзася сразу 40 раз. Добавлено (26 Ноябрь 2011, 15:30:18) --------------------------------------------- И для других дейтсвий тоже. Добавлено (26 Ноябрь 2011, 15:32:47) --------------------------------------------- как юзать таймер я понял,но ты к сожалению был прав,насчет того что Quote (Kartoha) Wait для всего цикла так?
http://warcraft3ft.info/forum/26-34958-1
|
|
|
|
Kartoha | Дата: Суббота, 26 Ноября 2011, 15:38:54 | Сообщение # 6 |
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
| Hock, заменить цикл с wait`ом таймером можно так:
Code function timerloop takes nothing returns nothing set i = i+1
<прочие действия>
if udg_count == 40 then call PauseTimer(udg_t) endif endfunction
function startloop takes nothing returns nothing set udg_count = 0 call TimerStart (udg_t, 0.5, true, function timerloop) endfunction где udg_t - глобальная переменная таймер, udg_count - глобальная переменная целочисленная
Правда тут возникает проблема с переменными в действиях. Эту проблему можно решить через хеш-таблицу - это лучший способ, но я в хеш-таблицах плохо шарю, и если нужен пример напишу на глобалках.
Сообщение отредактировал Kartoha - Суббота, 26 Ноября 2011, 15:39:27 |
|
|
|
Hock | Дата: Суббота, 26 Ноября 2011, 15:44:48 | Сообщение # 7 |
3 уровень
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 14
Блокировки:
| Kartoha, Спасибо,что хотел помочь,я спросил у друга в icq Он сказал что я local integer i=0 не написал =0 и правда теперь работает)
http://warcraft3ft.info/forum/26-34958-1
|
|
|
|
lawson | Дата: Суббота, 26 Ноября 2011, 15:45:42 | Сообщение # 8 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Kartoha) Попробуй заменить wait на таймер Ни когда в циклах не используй вейты. ЕСли хочешь чтобы действия происходили как в цикле но через какой то период используй таймер с малы периодом + хеш если не хочешь возиться в структурах.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Kartoha | Дата: Суббота, 26 Ноября 2011, 15:48:36 | Сообщение # 9 |
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
| Hock, и правда i=0 нету.) Не за что меня благодарить, я тебя только запутал. А ответ оказался как обычно прост.
|
|
|
|
lawson | Дата: Суббота, 26 Ноября 2011, 15:49:41 | Сообщение # 10 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Ошибка в невнимательности у меня часто так. Но советую убрать вэйт из цикла.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Суббота, 26 Ноября 2011, 15:50:05 |
|
|
|
Hock | Дата: Суббота, 26 Ноября 2011, 15:53:25 | Сообщение # 11 |
3 уровень
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 14
Блокировки:
| Kartoha, lawson, Спасибо))Quote (Kartoha) я тебя только запутал не специально же)хотел помочь,да и Quote (lawson) Но советую убрать вэйт из цикла. все же надо наверное)
http://warcraft3ft.info/forum/26-34958-1
|
|
|
|
Hexing | Дата: Суббота, 26 Ноября 2011, 17:55:42 | Сообщение # 12 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Hock, незабудьте про Code set u = null set d = null у вас в коде не увидел
|
|
|
|
Ty3uK | Дата: Суббота, 26 Ноября 2011, 18:04:37 | Сообщение # 13 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| И уберите бж на создание юнита в локе, используйте CreateUnit(player, 'type', GetSpellTargetX(), GetSpellTargetY(), facing). Здесь обратите внимание на координаты создания
|
|
|
|
Hock | Дата: Суббота, 26 Ноября 2011, 18:07:55 | Сообщение # 14 |
3 уровень
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 14
Блокировки:
| Hexing, Ty3uK, Спс,а вы не знаете как сделать чтобы когда Герой поворачивался , то дами оставаясь на том же растоянии тоже поворачивался вслед лицу героя?
http://warcraft3ft.info/forum/26-34958-1
|
|
|
|
Ty3uK | Дата: Суббота, 26 Ноября 2011, 18:10:18 | Сообщение # 15 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Чекай угол зрения юнита через GetUnitFacing(u) и ставь такой же угол поговора дамми
|
|
|
|
Hock | Дата: Суббота, 26 Ноября 2011, 18:23:37 | Сообщение # 16 |
3 уровень
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 14
Блокировки:
| Ty3uK, 5 сек попробую. Ато вроде делал так ,но что то не вышло или я коряво сделал,щас еще раз посмотрю.Добавлено (26 Ноябрь 2011, 18:18:19) --------------------------------------------- Нет,почему то получается так что молния все время в одну сторону ухожит и слегка подрагивает, притом всторону всегда правую. Добавлено (26 Ноябрь 2011, 18:23:37) ---------------------------------------------
Code local integer i=0 local unit u=GetTriggerUnit() local unit d=CreateUnit(GetOwningPlayer(u),'h00A',GetSpellTargetX(),GetSpellTargetY(),0) local real x1=GetUnitX(u) local real y1=GetUnitY(u) local real x2=GetUnitX(d) local real y2=GetUnitY(d) local lightning l = AddLightning("AFOD", true, x1, y1, x2, y2) local lightning l2 = AddLightning("LEAS", true, x1, y1, x2, y2) local lightning l3 = AddLightning("SPLK", true, x1, y1, x2, y2) local lightning l4 = AddLightning("AFOD", true, x1, y1, x2, y2) local location li local real angle= GetUnitFacing(GetTriggerUnit()) call SetUnitMoveSpeed(u,0) loop exitwhen i>40 call TriggerSleepAction(0.05) set x1=GetUnitX(u) set y1=GetUnitY(u) set x2=GetUnitX(d) set y2=GetUnitY(d) set angle=GetUnitFacing(u) call SetUnitPositionLoc( d, OffsetLocation(GetUnitLoc(u), 700, angle)) call MoveLightning(l,true,x1,y1,x2,y2) call MoveLightning(l2,true,x1,y1,x2,y2) call MoveLightning(l3,true,x1,y1,x2,y2) call MoveLightning(l4,true,x1,y1,x2,y2) call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl",x2,y2)) set i=i+1 endloop call DestroyLightning(l) call DestroyLightning(l2) call DestroyLightning(l3) call DestroyLightning(l4) set l = null set l2 = null set l3 = null set l4 = null call RemoveUnit(d) set d=null set u=null
http://warcraft3ft.info/forum/26-34958-1
|
|
|
|
Ty3uK | Дата: Суббота, 26 Ноября 2011, 18:32:59 | Сообщение # 17 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Ну и периодическим таймером двигай молнию
|
|
|
|
Hock | Дата: Суббота, 26 Ноября 2011, 18:37:29 | Сообщение # 18 |
3 уровень
Группа: Проверенные
Сообщений: 57
Награды: 0
Репутация: 14
Блокировки:
| Ty3uK, двигаю же,но почему то коряво
http://warcraft3ft.info/forum/26-34958-1
|
|
|
|
SirNikolas | Дата: Суббота, 26 Ноября 2011, 19:32:05 | Сообщение # 19 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Hock) Code set x1=GetUnitX(u) set y1=GetUnitY(u) set x2=GetUnitX(d) set y2=GetUnitY(d) set angle=GetUnitFacing(u) call SetUnitPositionLoc( d, OffsetLocation(GetUnitLoc(u), 700, angle)) Code set x1 = GetWidgetX(u) set y1 = GetWidgetY(u) set x2 = GetWidgetX(d) set y2 = GetWidgetY(d) set angle = GetUnitFacing(d) * .0175//bj_PI / 180. call SetUnitPosition(d, x1 + Cos(angle) * 700., y1 + Sin(angle) * 700.)
|
|
|
|
Ty3uK | Дата: Суббота, 26 Ноября 2011, 21:08:43 | Сообщение # 20 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Николас, незачем использовать перевод радиан в градусы числом .0175, варик же считает только три десятичных знака, а лишний символ- нагрузка. Надо юзать .017
|
|
|
|
Extremator | Дата: Суббота, 26 Ноября 2011, 22:30:42 | Сообщение # 21 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| мой эксперимент - SunRay - test.w3x (11 КБ)
|
|
|
|
DragoN | Дата: Суббота, 26 Ноября 2011, 23:52:42 | Сообщение # 22 |
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
| Quote (Ty3uK) Николас, незачем использовать перевод радиан в градусы числом .0175, варик же считает только три десятичных знака, а лишний символ- нагрузка. Надо юзать .017 .018, математик блин тогда почему в дефолтных константах > 3 знаков, те же е и пи? Code constant real bj_PI = 3.14159 constant real bj_E = 2.71828
El Psy Congroo
Сообщение отредактировал DragoN - Суббота, 26 Ноября 2011, 23:53:15 |
|
|
|
Hexing | Дата: Воскресенье, 27 Ноября 2011, 07:49:24 | Сообщение # 23 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (Ty3uK) варик же считает только три десятичных знака, а лишний символ- нагрузка как я понял тип real не стабилен, и округляется лишь в случаях, когда он используется в определённых ситуациях(возможно константа это исключение) хотя хз я движок варика не видел)))
|
|
|
|
Ty3uK | Дата: Воскресенье, 27 Ноября 2011, 09:58:22 | Сообщение # 24 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Ну бывает, округлил не туда Добавлено (27 Ноябрь 2011, 09:58:22) --------------------------------------------- Плюс можно проверить, сколько десятичных знаков использует варик. Через обычный дебаг и R2S
|
|
|
|
Hexing | Дата: Воскресенье, 27 Ноября 2011, 10:10:09 | Сообщение # 25 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (Hexing) Через обычный дебаг и R2S через дебаг всегда 3 десятичных... но я думаю это только изза преобразования R2S можно сделать 100 юнитов-героев написать число real 2.3333333333333333333 и посредством смещения давать каждому след юниту след цифру и так посмотреть, где будет 1 лвл на том и кончается точность но я этого делать не хочу)
|
|
|
|
|
|
|
|
|
|
|