[Вопрос] Новый адик
Dreii Дата: Понедельник, 26 Марта 2012, 16:31:08 | Сообщение # 1
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды:
0
Репутация:
603
Блокировки:
Вот попробывал на новом адике замутить. Мне понравилось колбэк рулит но хочу у знаущих лудей узнать какие фичи еще можно заузать в коде чтобы было на уровне пропрограммера
Code
scope Storm { define { private ABILID = 'A000' private DAMAGE = 4.*GetHeroInt(st.t,true) private RANGE = 300. private EFFECTCAST = "Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl" private EFFECTTARGET = "Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl" private ATTACH = "origin" private LIGHTNING = "CLPB" } private struct storm { unit t real x,y,xt,yt lightning l } callback onUnitSpellEffect(ABILID) { storm st=storm.create() st.t=GetTriggerUnit() st.x=GetWidgetX(st.t) st.y=GetWidgetY(st.t) st.xt=GetSpellTargetX() st.yt=GetSpellTargetY() st.l=AddLightning(LIGHTNING,true,st.x,st.y,st.xt,st.yt) timer t=CreateTimer() DestroyEffect(AddSpecialEffect(EFFECTCAST,st.xt,st.yt)) for(real r=0.;r<=6.28;r+=.58) { DestroyEffect(AddSpecialEffect(EFFECTCAST,st.x+75.*Cos(r),st.y+75.*Sin(r))) } SaveInteger(Hash,GetHandleId(t),0,st) TimerStart(t,.5,false, \ lambda void Timer() { timer t=GetExpiredTimer() storm st=LoadInteger(Hash,GetHandleId(t),0) DestroyEffect(AddSpecialEffect(EFFECTTARGET,st.xt,st.yt)) for(real r=0;r<=6.28;r+=.99) { DestroyEffect(AddSpecialEffect(EFFECTCAST,st.xt+25.*Cos(r),st.yt+25.*Sin(r))) } for(unit u;UnitsInRange(st.xt,st.yt,RANGE) use GG) { if GetWidgetLife(u)>.0 && IsUnitEnemy(u,GetOwningPlayer(st.t)) { UnitDamageTarget(st.t,u,DAMAGE,true,false,null,DAMAGE_TYPE_LIGHTNING,null) DestroyEffect(AddSpecialEffectTarget(EFFECTTARGET,u,ATTACH)) } } DestroyLightning(st.l) DestroyTimer(t) FlushChildHashtable(Hash,GetHandleId(t)) st.destroy() } ) } }
Code
scope LightningStrike { define { private ABILITYID = 'A001' private DAMAGE = 5.*GetHeroInt(u,true) private LIGHTNING = "CLPB" private EFFECT = "Abilities\\Spells\\Orc\\Purge\\PurgeBuffTarget.mdl" private ATTACH = "chest" } callback onUnitSpellEffect(ABILITYID) { unit u=GetTriggerUnit() real xt=GetSpellTargetX(),yt=GetSpellTargetY(),x=GetWidgetX(u),\ y=GetWidgetY(u),d=SquareRoot((xt-x)*(xt-x)+(yt-y)*(yt-y))/50.,angle=Atan2(yt-y,xt-x) group gr=CreateGroup() timer t=CreateTimer() SaveLightningHandle(Hash,GetHandleId(t),0,AddLightning(LIGHTNING,true,x,y,xt,yt)) for(int i=0;i<d;i++) { for(unit e;UnitsInRange(x,y,75.)use GG) { if !IsUnitInGroup(e,gr) && IsUnitEnemy(e,GetOwningPlayer(u)) { GroupAddUnit(gr,e) UnitDamageTarget(u,e,DAMAGE,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_LIGHTNING,WEAPON_TYPE_AXE_MEDIUM_CHOP) DestroyEffect(AddSpecialEffectTarget(EFFECT,e,ATTACH)) } } x=x+50.*Cos(angle) y=y+50.*Sin(angle) } DestroyGroup(gr) TimerStart(t,.5,false,\ lambda void Timer() { timer t=GetExpiredTimer() DestroyLightning(LoadLightningHandle(Hash,GetHandleId(t),0)) DestroyTimer(t) FlushChildHashtable(Hash,GetHandleId(t)) } ) } }
Сообщение отредактировал Dreii - Понедельник, 26 Марта 2012, 16:51:24
Ty3uK Дата: Понедельник, 26 Марта 2012, 16:40:02 | Сообщение # 2
Группа: Ветераны
Сообщений: 6125
Награды:
2
Репутация:
1617
Блокировки:
Нет, я пока ничего не нашел. Вроде юзнул все новое, что можно было использовать. А вот лямбда выражения я не умею юзать =/ надо попробовать. И ты в одном из циклов на реальную объявил ее без точки- это не очень
Dreii Дата: Понедельник, 26 Марта 2012, 16:41:14 | Сообщение # 3
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды:
0
Репутация:
603
Блокировки:
Quote (Ty3uK )
реальную объявил ее без точки- это не очень
да гореть мне вуечно в аду!! З.Ы счас поправлу
Ty3uK Дата: Понедельник, 26 Марта 2012, 16:48:25 | Сообщение # 4
Группа: Ветераны
Сообщений: 6125
Награды:
2
Репутация:
1617
Блокировки:
Надо будет задрочить лямбда выражения
DragoN Дата: Понедельник, 26 Марта 2012, 16:55:08 | Сообщение # 5
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды:
7
Репутация:
2776
Блокировки:
Quote (Dreii )
было на уровне пропрограммера
ставить ";" после каждого действия
El Psy Congroo
Ty3uK Дата: Понедельник, 26 Марта 2012, 16:55:57 | Сообщение # 6
Группа: Ветераны
Сообщений: 6125
Награды:
2
Репутация:
1617
Блокировки:
А я так делаю. Это плохо?
Dreii Дата: Понедельник, 26 Марта 2012, 16:56:26 | Сообщение # 7
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды:
0
Репутация:
603
Блокировки:
DragoN , я пытался но потом меня это взбесило и больше не ставлу.
SirNikolas Дата: Понедельник, 26 Марта 2012, 17:01:46 | Сообщение # 8
Группа: Модераторы
Сообщений: 6729
Награды:
1
Репутация:
1867
Блокировки:
Quote (Dreii )
private DAMAGE = 4. * GetHeroInt(st.t, true)
private DAMAGE(u) = 4. * GetHeroInt(u, true) И, кстати, в локалку запиши, чтобы это выражение считалось один раз.Quote (Dreii )
lambda void Timer()
Просто lambda void()Quote (Dreii )
SaveLightningHandle
AgentQuote (Dreii )
group gr=CreateGroup()
Лучше глобальную. Какие еще есть фичи, я не знаю. Надо периодически просматривать ***, там могут что-нибудь такое написать.
Ty3uK Дата: Понедельник, 26 Марта 2012, 17:03:10 | Сообщение # 9
Группа: Ветераны
Сообщений: 6125
Награды:
2
Репутация:
1617
Блокировки:
Надо периодически смотреть код.гугл.ком, мануалы все там
SirNikolas Дата: Понедельник, 26 Марта 2012, 17:03:40 | Сообщение # 10
Группа: Модераторы
Сообщений: 6729
Награды:
1
Репутация:
1867
Блокировки:
Кстати, о точках с запятыми. После фигурных скобок их ставить не нужно (исключения - struct { ... }; и enum { ... };. Ну, еще class { ... }; и union { ... };, но их нет в cJASS).
Ty3uK Дата: Понедельник, 26 Марта 2012, 17:06:29 | Сообщение # 11
Группа: Ветераны
Сообщений: 6125
Награды:
2
Репутация:
1617
Блокировки:
И, бтв, Адольф закончил обновлять cJassДобавлено (26 Март 2012, 17:06:29) ---------------------------------------------cJass on code.google.com
Dreii Дата: Понедельник, 26 Марта 2012, 17:13:11 | Сообщение # 12
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды:
0
Репутация:
603
Блокировки:
SirNikolas , у меня Agent не выгружает, хз почему ошибками плюется. лучше локальная ибо она юзаеться только тут и больше нигде, это проверка на нанесение дмг юниту а для пика я юзау глобальную а вот с таймером спасибо буду знать а с дефайном затупил что-то
Сообщение отредактировал Dreii - Понедельник, 26 Марта 2012, 17:31:37
SirNikolas Дата: Понедельник, 26 Марта 2012, 17:17:12 | Сообщение # 13
Группа: Модераторы
Сообщений: 6729
Награды:
1
Репутация:
1867
Блокировки:
Quote (Dreii )
у меня Agent не выгружает хз почему, ошибками плуется.
SaveAgentHandle, но LoadLightningHandle.Quote (Dreii )
а с дефайном затупит что-то
А ты в коде поменял DAMAGE на DAMAGE(st.t)?Добавлено (26 Март 2012, 17:17:12) --------------------------------------------- То есть как закончил? Он же теперь не поддерживает vJass из-за новых циклов for.
Ty3uK Дата: Понедельник, 26 Марта 2012, 17:19:13 | Сообщение # 14
Группа: Ветераны
Сообщений: 6125
Награды:
2
Репутация:
1617
Блокировки:
Обновлений не будет, он мне лично сказал (я с ним списался)
Dreii Дата: Понедельник, 26 Марта 2012, 17:21:44 | Сообщение # 15
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды:
0
Репутация:
603
Блокировки:
Quote (SirNikolas )
А ты в коде поменял DAMAGE на DAMAGE(st.t)?
Конечно,на сайте просто не обновлQuote (SirNikolas )
SaveAgentHandle, но LoadLightningHandle.
так делаю, говорит что нельзя лайтинг конвертить в агент
Сообщение отредактировал Dreii - Понедельник, 26 Марта 2012, 17:31:58