Сейчас 03:18:12 Воскресенье, 29 сентября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
[Вопрос] Способность
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 на таймер, т.е. создай специальную функцию для таймера, которая будет выполнять действие
Code
set i=i+1
а 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). Здесь обратите внимание на координаты создания

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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) и ставь такой же угол поговора дамми

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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
Блокировки:
Ну и периодическим таймером двигай молнию

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

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, математик блин trollface
тогда почему в дефолтных константах > 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


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

HexingДата: Воскресенье, 27 Ноября 2011, 10:10:09 | Сообщение # 25
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Quote (Hexing)
Через обычный дебаг и R2S

через дебаг всегда 3 десятичных... но я думаю это только изза преобразования R2S
можно сделать 100 юнитов-героев
написать число real 2.3333333333333333333
и посредством смещения давать каждому след юниту след цифру
и так посмотреть, где будет 1 лвл на том и кончается точность
но я этого делать не хочу)


 

  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz