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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Ошибки - Jass, Help me!
Ошибки - Jass, Help me!
DiabfallДата: Четверг, 02 Июня 2011, 19:15:26 | Сообщение # 1
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
Помогите разобраться, как сделать этот код короче. Я только начинающий Jass'ер, но на мой взгляд, должен быть способ проще и лучше.)
Спел стунит врага и держит его на расстоянии перед героем в течении опр. времени.

P.S. Знаю, что integer и real обнулять не надо. Просто для красоты сделал. :D

Все права на данный УГ код принадлежат Diabfall'у. ©


Сообщение отредактировал Diabfall - Четверг, 02 Июня 2011, 19:15:49
 

FkoFFДата: Четверг, 02 Июня 2011, 20:00:33 | Сообщение # 2
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
он кривой как отражение в луже под дождем. Кошмар ад и погибель ждет того кто будет этот код использовать. Всюду бж, обнуление реалов, какое то ужасное в своей сути удаление таймеров.

Добавлено (02-06-2011, 20:00)
---------------------------------------------
короче, скажи словами, что ты хочешь что бы происходило ?

Первые три функции

1. сносит лайтинг по хэндлу (криво сносит, кстати)
2. двигает юнита и создает лайтинг+сносит его
3. ...пошел ступор.. Не понятно при каких условиях удаляется тот или иной таймер, вообще делаться это все должно совершенно по другому и, на самом деле, делается в 2 функции.


 

DiabfallДата: Четверг, 02 Июня 2011, 20:13:36 | Сообщение # 3
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
Quote (FkoFF)
короче, скажи словами, что ты хочешь что бы происходило ?

Герой кидает на врага стун. Враг прикрепляется к нему, на растоянии 100. При повороте героя положения врага в пространстве меняется относительно угла поворота героя. (т.е. враг перед лицом героя) Между ними лайтинг... Всё это чудо длится 2/ 2.5/ 3,/3.5 сек.

Quote (FkoFF)
сносит лайтинг по хэндлу (криво сносит, кстати)

Quote (FkoFF)
пошел ступор.. Не понятно при каких условиях удаляется тот или иной таймер, вообще делаться это все должно совершенно по другому и, на самом деле, делается в 2 функции.

Как нужно?


Сообщение отредактировал Diabfall - Четверг, 02 Июня 2011, 21:12:50
 

KalipsoДата: Четверг, 02 Июня 2011, 21:09:43 | Сообщение # 4
2 уровень
Группа: Пользователи
Сообщений: 21
Награды: 0
Репутация: 8
Блокировки:
FkoFF,
Делаешь?
 

FkoFFДата: Четверг, 02 Июня 2011, 21:17:22 | Сообщение # 5
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (Diabfall)
Как нужно?


..минут за 10..

Code

function AttachUnitFrontcb takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer ti=GetHandleId(t)
local unit u=LoadUnitHandle(udg_Data,ti,0)
local unit target=LoadUnitHandle(udg_Data,ti,1)
local lightning lt=LoadLightningHandle(udg_Data,ti,2)
local real range=LoadReal(udg_Data,ti,3)
local real timeleft=LoadReal(udg_Data,ti,4)
local real array z

if timeleft>0 and IsUnitType(target,UNIT_TYPE_DEAD)==false and IsUnitType(u,UNIT_TYPE_DEAD)==false then
set z[1]=GetWidgetX(u)+range*Cos(GetUnitFacing(u)*bj_DEGTORAD)
set z[2]=GetWidgetY(u)+range*Cos(GetUnitFacing(u)*bj_DEGTORAD)
set z[3]=GetWidgetX(target)
set z[4]=GetWidgetY(target)
set z[5]=SquareRoot((z[1]-z[3]) * (z[1]-z[3]) + (z[2]-z[4])*(z[2]-z[4]))/4
set z[6]=bj_RADTODEG * Atan2(z[4] - z[2], z[3]- z[1])

call SetUnitPosition(target,z[3]+z[5]*Cos(z[6]*bj_DEGTORAD),z[4]+z[5]*Cos(z[6]*bjDEGTORAD))
call MoveLightningEx(lt,false,z[1],z[2],50,z[3],z[4],50)
else
call DestroyLightning(lt)
call DestroyTimer(t)
call FlushChildHashtable(udg_Data,ti)
call PauseUnit(target,false)
endif

set t=null
set u=null
set target=null
set lt=null
endfunction

function AttachUnitFront takes unit u, unit target, real range, real duration returns nothing
local timer t=CreateTimer()
local integer ti=GetHandleId(t)
local lightning lt=AddLightning(model,false,0,0,0,0)

call PauseUnit(target,true)
call SaveUnitHandle(udg_Data,ti,0,u)
call SaveUnitHandle(udg_Data,ti,1,target)
call SaveLightningHandle(udg_Data,ti,2,lt)
call SaveReal(udg_Data,ti,3,range)
call SaveReal(udg_Data,ti,4,duration)

call TimerStart(t,0.03,true,function AttachUnitFrontcb)
set t=null
set lt=null
endfunction


бтв, специально сделал что бы противник плавно перемещался в точку перед лицом героя, потому что на мой сугубо личный это не красиво когда юнит мгновенно перетаскивается.


 

DiabfallДата: Пятница, 03 Июня 2011, 11:45:15 | Сообщение # 6
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
FkoFF, в твоём примере
u - герой
target - цель
range - расстояние? или угол?
duration - время

Во второй функции timeleft>0 т.е. нужна третья функция, которая будет нарушать это условие?

Попробовал использовать... Юнит улетает за карту. Видимо, из-за того, что я не правильно присваивал значения переменным.
 

SirNikolasДата: Пятница, 03 Июня 2011, 11:56:44 | Сообщение # 7
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
FkoFF, это имбаспелл. Нет обновления timeleft. И молния не будет реагировать на рельеф.

Добавлено (03-06-2011, 11:56)
---------------------------------------------

Quote (FkoFF)
Cos(z[6]*bjDEGTORAD)
И еще опечатка.


 

FkoFFДата: Пятница, 03 Июня 2011, 12:21:40 | Сообщение # 8
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (Diabfall)
Во второй функции timeleft>0 т.е. нужна третья функция, которая будет нарушать это условие?

нет же.
Quote (SirNikolas)
И молния не будет реагировать на рельеф.

молния ниже рельефа не пойдет, ну да впрочем ты таки прав.
Quote (SirNikolas)
И еще опечатка.

ошибка в том что y ось множится на Cos а не на Sin :)
Diabfall, Сравни свой код и мой код (в частности инит в триггере 'Orn'), и больше не повторяй своих ошибок. Собственно триггер по идее готов к работе, пробуй - отпиши результат.


 

SirNikolasДата: Пятница, 03 Июня 2011, 12:29:40 | Сообщение # 9
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (SirNikolas)
И еще опечатка.
Я имел в виду, что bj_DEGTORAD пишется с подчеркиванием.
Quote (FkoFF)
EVENT_PLAYER_UNIT_SPELL_CAST
Может, SPELL_EFFECT?


 

FkoFFДата: Пятница, 03 Июня 2011, 12:34:00 | Сообщение # 10
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (SirNikolas)
Я имел в виду, что bj_DEGTORAD пишется с подчеркиванием.

я что то не нашел, где я такую опечатку сделал )

Добавлено (03-06-2011, 12:34)
---------------------------------------------
Нашел, пофиксил )


 

DiabfallДата: Пятница, 03 Июня 2011, 12:54:48 | Сообщение # 11
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
Quote (FkoFF)
Сравни свой код и мой код (в частности инит в триггере 'Orn'), и больше не повторяй своих ошибок.

Ок.)

Quote (FkoFF)
Собственно триггер по идее готов к работе, пробуй - отпиши результат.

Попробовал. Теперь эффект заканчивается с течением времени, но юнит-цель криво перемещается, и после нескольких поворотов героя юнит-цель вообще улетает.

Скрины:


Код:
 

FkoFFДата: Пятница, 03 Июня 2011, 13:11:23 | Сообщение # 12
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
ваа

Code

function Trig_Orvan_Tenacious_grasp_Conditions takes nothing returns boolean    
      return GetSpellAbilityId() == 'A02O'   
endfunction    

function Orvan_LIGHTOFF takes nothing returns nothing    
local timer t=GetExpiredTimer()    
local integer ti=GetHandleId(t)    
local unit u=LoadUnitHandle(udg_Hash,ti,0)    
local unit target=LoadUnitHandle(udg_Hash,ti,1)    
local lightning lt=LoadLightningHandle(udg_Hash,ti,2)    
local real range=LoadReal(udg_Hash,ti,3)    
local real timeleft=LoadReal(udg_Hash,ti,4)    
local real array z    

if timeleft>0 and IsUnitType(target,UNIT_TYPE_DEAD)==false and IsUnitType(u,UNIT_TYPE_DEAD)==false then    
call SaveReal(udg_Hash,ti,4,timeleft-0.03)   
set z[1]=GetWidgetX(u)+range*Cos(GetUnitFacing(u)*bj_DEGTORAD)    
set z[2]=GetWidgetY(u)+range*Sin(GetUnitFacing(u)*bj_DEGTORAD)    
set z[3]=GetWidgetX(target)    
set z[4]=GetWidgetY(target)    
set z[5]=SquareRoot((z[1]-z[3]) * (z[1]-z[3]) + (z[2]-z[4])*(z[2]-z[4]))/4    
set z[6]=bj_RADTODEG * Atan2(z[4] - z[2], z[3]- z[1])    

call SetUnitPosition(target,z[3]+z[5]*Cos(z[6]*bj_DEGTORAD),z[4]+z[5]*Sin(z[6]*bj_DEGTORAD))    
call MoveLightningEx(lt,false,z[1],z[2],GetUnitFlyHeight(u)+50,z[3],z[4],GetUnitFlyHeight(target)+50)    
else    
call DestroyLightning(lt)    
call DestroyTimer(t)    
call FlushChildHashtable(udg_Hash,ti)    
call PauseUnit(target,false)    
endif    

set t=null    
set u=null    
set target=null    
set lt=null    
endfunction    

function Orn takes nothing returns nothing    
        local unit u=GetTriggerUnit()     
        local unit target=GetSpellTargetUnit()     
        local real range=180    
        local timer t=CreateTimer()     
        local integer ti=GetHandleId(t)     
        local lightning lt=AddLightning("AFOD",false,0,0,0,0)    
        local integer i=GetUnitAbilityLevel(u,GetSpellAbilityId())    
        call PauseUnit(target,true)     
        call SaveUnitHandle(udg_Hash,ti,0,u)     
        call SaveUnitHandle(udg_Hash,ti,1,target)     
        call SaveLightningHandle(udg_Hash,ti,2,lt)     
        call SaveReal(udg_Hash,ti,3,range)     
        call SaveReal(udg_Hash,ti,4,1.5+0.5*i)     
        call TimerStart(t,0.03,true,function Orvan_LIGHTOFF)     
        set t=null     
        set lt=null     
        set u=null    
        set target=null    
endfunction    

//===========================================================================    
function InitTrig_Orvan1 takes nothing returns nothing    
        set gg_trg_Orvan1 = CreateTrigger(  )    
        call TriggerRegisterAnyUnitEventBJ( gg_trg_Orvan1, EVENT_PLAYER_UNIT_SPELL_CAST )    
        call TriggerAddCondition( gg_trg_Orvan1, Condition( function Trig_Orvan_Tenacious_grasp_Conditions ) )    
        call TriggerAddAction( gg_trg_Orvan1, function Orn )    
endfunction


 

DiabfallДата: Пятница, 03 Июня 2011, 13:22:09 | Сообщение # 13
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
Quote (FkoFF)
ваа

Юнит-цель улетает. :(
 

SirNikolasДата: Пятница, 03 Июня 2011, 13:50:56 | Сообщение # 14
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (FkoFF)
set z[6]=bj_RADTODEG * Atan2(z[4] - z[2], z[3]- z[1])
call SetUnitPosition(target,z[3]+z[5]*Cos(z[6]*bj_DEGTORAD),z[4]+z[5]*Sin(z[6]*bj_DEGTORAD))
Зачем нужны эти преобразования?

Добавлено (03-06-2011, 13:50)
---------------------------------------------
Quote (FkoFF)
set z[6]=bj_RADTODEG * Atan2(z[4] - z[2], z[3]- z[1])
Кажется, я нашел ошибку. Нужно так:
set z[6]=bj_RADTODEG * Atan2(z[2] - z[4], z[1]- z[3])




Сообщение отредактировал SirNikolas - Пятница, 03 Июня 2011, 14:33:26
 

KalipsoДата: Пятница, 03 Июня 2011, 14:18:52 | Сообщение # 15
2 уровень
Группа: Пользователи
Сообщений: 21
Награды: 0
Репутация: 8
Блокировки:
Diabfall,
Разобрался? Или тебе сделать?
 

DiabfallДата: Пятница, 03 Июня 2011, 14:37:09 | Сообщение # 16
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
Quote (Kalipso)
Разобрался?

Нет офк.)
Quote (Kalipso)
Или тебе сделать?

Ну сделай.

Quote (SirNikolas)
Кажется, я нашел ошибку. Нужно так:
set z[6]=bj_RADTODEG * Atan2(z[2] - z[4], z[1]- z[3])

Улетает.
 

SirNikolasДата: Пятница, 03 Июня 2011, 14:42:31 | Сообщение # 17
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Diabfall)
Улетает.
И что, неужели никаких отличий?


 

DiabfallДата: Пятница, 03 Июня 2011, 14:55:02 | Сообщение # 18
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
Quote (SirNikolas)
И что, неужели никаких отличий?

Так ты там пост редактировал.)

Теперь юнит перемещается нормально :) , но лайт всё так же криво.
 

FkoFFДата: Пятница, 03 Июня 2011, 15:09:06 | Сообщение # 19
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (SirNikolas)
Зачем нужны эти преобразования?

ну вопервых - меньше вызовов функций, во вторых - так как то удобнее что ли.


 

DiabfallДата: Пятница, 03 Июня 2011, 16:21:58 | Сообщение # 20
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
Всем спасибо! Тему можно закрыть.
 

SirNikolasДата: Пятница, 03 Июня 2011, 17:27:20 | Сообщение # 21
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (FkoFF)
call MoveLightningEx(lt,false,z[1],z[2],GetUnitFlyHeight(u)+50,z[3],z[4],GetUnitFlyHeight(target)+50)
Чтобы молния перемещалась нормально, замени вот на это:

call MoveLightningEx(lt,false,z[1],z[2],GetUnitFlyHeight(u)+50,z[3]+z[5]*Cos(z[6]*bj_DEGTORAD),z[4]+z[5]*Sin(z[6]*bj_DEGTORAD),z[3]+z[5]*Cos(z[6]*bj_DEGTORAD),z[4]+z[5]*Sin(z[6]*bj_DEGTORAD),GetUnitFlyHeight(target)+50)


 

DiabfallДата: Пятница, 03 Июня 2011, 17:42:20 | Сообщение # 22
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
Quote (SirNikolas)
call MoveLightningEx(lt,false,z[1],z[2],GetUnitFlyHeight(u)+50,z[3]+z[5]*Cos(z[6]*bj_DEGTORAD),z[4]+z[5]*Sin(z[6]*bj_DEGTORAD),z[3]+z[5]*Cos(z[6]*bj_DEGTORAD),z[4]+z[5]*Sin(z[6]*bj_DEGTORAD),GetUnitFlyHeight(target)+50)

Jasshelper пишет, что слишком много аргументов.
 

SirNikolasДата: Пятница, 03 Июня 2011, 17:54:39 | Сообщение # 23
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (SirNikolas)
z[3]+z[5]*Cos(z[6]*bj_DEGTORAD),z[4]+z[5]*Sin(z[6]*bj_DEGTORAD),z[3]+z[5]*Cos(z[6]*bj_DEGTORAD),z[4]+z[5]*Sin(z[6]*bj_DEGTORAD)
Я два раза копипастнул. Убери одну пару.


 

DiabfallДата: Пятница, 03 Июня 2011, 19:07:11 | Сообщение # 24
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
Quote (SirNikolas)
Я два раза копипастнул. Убери одну пару.

call MoveLightningEx(lt,false,z[1],z[2],GetUnitFlyHeight(u)+50,z[3]+z[5]*Cos(z[6]*bj_DEGTORAD),z[4]+z[5]*Sin(z[6]*bj_DEGTORAD),GetUnitFlyHeight(target)+50)
Так? Криво.
 

SirNikolasДата: Пятница, 03 Июня 2011, 19:35:25 | Сообщение # 25
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Если так криво, то прямее уже не сделаешь.

 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Ошибки - Jass, Help me!
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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