XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
MegaBlax

offline
Опыт: 2,352
Активность:
Запилил новый скилл. Посмотрите.
Привет ребят. Вот запилил новый скилл. Не скажу что прям оригинальный. Просто посмотрите исполнение.
» структура
((код
struct ShadowDanceStruct

static thistype m[]
static integer MUI=0
static timer t=null
static string sfx="Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl"
unit caster=null
unit target=null
integer i=0
real a1
real a2

private method StopMove takes integer j returns nothing
loop
exitwhen j>MUI
m[j]=m[j+1]
j++
endloop
MUI--
if MUI==0
PauseTimer(t)
DestroyTimer(t)
t=null
caster=null
target=null
endif
endmethod

private static method ShadowDanceMove takes nothing returns nothing
integer z=0
thistype this
loop
exitwhen z>=MUI
this=m[z]
if i<30 && GetUnitState(target,UNIT_STATE_LIFE)>0
a1=GetUnitFacing(caster)
a2=GetUnitFacing(target)
SetUnitX(caster,GetUnitX(target)-75*Cos(a2*bj_DEGTORAD))
SetUnitY(caster,GetUnitY(target)-75*Sin(a2*bj_DEGTORAD))
SetUnitFacing(caster,a2)
UnitDamageTarget(caster,target,(GetHeroAgi(caster,true)*0.25),true,false,ATTACK_TYPE_NORMAL,DAMAGE_T​YPE_NORMAL,null)
DestroyEffect(AddSpecialEffect(sfx,GetUnitX(target),GetUnitY(target)))
i++
else
StopMove(z)
endif
z++
endloop
endmethod

public static method ShadowDanceStart takes unit u,unit u2 returns nothing
thistype this=thistype.create()
m[MUI]=this
caster=u
target=u2
if t==null
t=CreateTimer()
TimerStart(t,0.1,true,function thistype.ShadowDanceMove)
endif
MUI++
endmethod
endstruct
))
Прикрепленные файлы
Тип файла: w3x ShadowDance.w3x (19.2 Кбайт, 15 просмотров )
Старый 28.01.2014, 15:06
DioD

offline
Опыт: 45,184
Активность:
нет отладки, садись два.
Старый 28.01.2014, 15:45
quq_CCCP
Я белый и пушистый!
offline
Опыт: 94,774
Активность:
MegaBlax, ну если честно то скилл не очень, напомнил мне ульту сикера...
Эффекты коряво прикреплены, герой дергается без анимации, ударов нету...
Структура для такого примитива перебор, хватит хт, да и написать все можно гораздо короче и понятнее...
Мой вывод: Доводи до ума!
quq_CCCP добавил:
DioD:
нет отладки, садись два.
Эмм, а нафиг тут отладка? Он просит посмотреть и оценить его скилл, в 3 строчки...
Старый 28.01.2014, 15:51
adic3x

offline
Опыт: 107,539
Активность:
Почему мне никто не сказал, что бы я запретил смешивать cJass синтаксис с vJass? Это еще цветочки, ягодки я видел у китайцев:
if (true) {
  // ...
else
  // ...
}
ADOLF добавил:
Кстати, если кому-то нужен - есть китайский cJass Манул :
#define {
    China = "Great"
    TigerCN = GetTriggerUnit()
    Warft = CreateItem('itic', 0, 0)
    Hello = {
                    BJDebugMsg("Hello, TigerCN!")
                    BJDebugMsg("Hello, China!")
               }
}
Старый 28.01.2014, 17:34
ScorpioT1000
Работаем
offline
Опыт: отключен
static thistype m[]
это зачем? внутри карты у тебя точно такая же переменная и так хранится
ScorpioT1000 добавил:
вот оптимальное решение обхода объектов структур www.hiveworkshop.com/forums/jass-ai-scripts-tutorials-280/coding...
Старый 28.01.2014, 18:02
adic3x

offline
Опыт: 107,539
Активность:
вот оптимальное решение обхода объектов структур www.hiveworkshop.com/forums/jass-ai-scripts-tutorials-280/coding-efficient-vjass-structs-1874&#8​203;77
Вы знаете, иногда меня обвиняли в излишний оптимизации. И в целом я с обвинениями согласен. Но тот парень переплюнул даже меня: он выяснил, что по какой-то странной причине (причем я обсуждал это с Кроком, тем парнем, который реверсил WCIII, и мы так ничего и не поняли) скорость обращения к переменной или функции кода зависит от длины имени. Так вот, этот парень с Хайва, что бы вы думали? Конечно, укорачивал имена. А еще он использовал module (кто глубоко вникал в vJass - поймет) в качестве макросов, т. к. vJass изначально имеет весьма обрезанные макросы, которые не везде и вставишь. Сказанного достаточно.
А фишка с extends array - годная.
Старый 28.01.2014, 22:32
ScorpioT1000
Работаем
offline
Опыт: отключен
про длину переменных мне тоадди еще говорил, у него по tcx заметно) в целом это лечится оптимизационными тулами
Старый 28.01.2014, 22:39
MegaBlax

offline
Опыт: 2,352
Активность:
Спасибо конечно ребят. Но я про метод исполнения спрашивал, а не про качество. Как там эффекты прикреплены и т.д. мне все равно. Просто скажите где можно сделать по другому в плане кода.
Старый 28.01.2014, 23:05
adic3x

offline
Опыт: 107,539
Активность:
Просто скажите где можно сделать по другому в плане кода.
От меня:
  • Если используется cJass синтаксис - он должен использоваться последовательно; блоки должны оформляться через {}
  • В cJass не нужно обнулять локальные переменные - он делает это автоматически. Обнуления лишь загрязняют исходный код, добавляя ненужные людям инструкции
  • Члены структуры должны быть объявлены как private, если для них не предусмотрен доступ снаружи
  • unit caster=null - при объявление переменной-члена структуры можно не указывать ее инициализацию, т. е. просто unit caster, а еще лучше - private unit caster
  • caster=u - может там должно быть this.caster = u? Вы его вообще пробовали применять одновременно несколькими юнитами? Мне кажется, мультеприменимость поломана
Старый 28.01.2014, 23:57
MegaBlax

offline
Опыт: 2,352
Активность:
ADOLF,
Насчет caster=u - может там должно быть this.caster = u? Вы его вообще пробовали применять одновременно несколькими юнитами? Мне кажется, мультеприменимость поломана
То там все нормально. Работает
Старый 29.01.2014, 01:08
DioD

offline
Опыт: 45,184
Активность:
  1. не использовать cjass
  2. использовать vjass только для декларации глобалок
  3. профит
это позволяет понимать то что вы пишите полностью, использование надстроек должно использоваться только теми кто уже умеет писать OOP сам по себе.
Старый 29.01.2014, 09:25
MegaBlax

offline
Опыт: 2,352
Активность:
DioD, проще говоря. Я не готов! Буду дальше юзать джасс и гуи ;)
Старый 29.01.2014, 10:07
DioD

offline
Опыт: 45,184
Активность:
я всю жизнь писал структуры без чьей либо помощи, сам по себе, даже книжек не читал, брал бумажку и зарисовывал процесс.
в результате узнал что дошел сам по себе до стандартного индустриального метода управления памятью, от того и потому что иначе памятью управлять не представляется возможным.
но в отличии от тех кто тупо начал использовать готовое я понимаю суть и могу реализовать менеджер на любом языке.
Старый 29.01.2014, 10:40
ScorpioT1000
Работаем
offline
Опыт: отключен
диод у нас любит пописать велосипеды и посчитать регистры в 2014, когда надо собирать продукт из ряда фреймворков и других продуктов/библиотек, не обращайте внимания)
Старый 29.01.2014, 11:35
Doc

offline
Опыт: 63,163
Активность:
модули не совсем в качестве макросов юзались, это просто такая инициализация ранняя
Вот тут я реализовывал на 90% идеальный каноничный cjass код спелла со структурами и прочим без лишней грязи
Старый 29.01.2014, 12:16
adic3x

offline
Опыт: 107,539
Активность:
Вот тут я реализовывал на 90% идеальный каноничный cjass код спелла со структурами и прочим без лишней грязи
То, что ты там реализовывал, по сравнению с тем, что там реализовал я... кхм... ;)
А в целом прав - очень полезно смотреть чужой код, тем более, если к нему еще и куча людей написали рецензии.
Старый 29.01.2014, 12:27
DioD

offline
Опыт: 45,184
Активность:
ScorpioT1000:
диод у нас любит пописать велосипеды и посчитать регистры в 2014, когда надо собирать продукт из ряда фреймворков и других продуктов/библиотек, не обращайте внимания)
не надо путать работу и развлечение.
варкрафт развлечение и важен процесс, изобретение велосипеда очень даже хорошая штука.
Старый 29.01.2014, 12:57
Doc

offline
Опыт: 63,163
Активность:
ADOLF, там не о сложности системы, а о правильности и структуре кода.
Старый 29.01.2014, 15:18
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 12:30.