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

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

Библиотека заклинаний

Если вы хотите поделиться своими триггерными и JASS-заклинаниями, то можете оставлять их здесь.
Желательно иметь, в карте, небольшое руководство для новичков, по установке вашего творения на другую карту.
» Шаблон выкладывания способностей:
Название: название заклинания
Метод исполнения: GUI, Jass (v*, c*)
Нужен ли JNGP: да или нет
Тип цели: юнит, точка, область, без цели
Результат применения: целое описание
Количество уровней: 0-255
Вызов заклинания на цель: buff, если есть
Наличие глобальных переменных: да или нет
Дополнительные аргументы(такие, как вызов новых юнитов, предметов, требования, и прочее)
**Название:**
**Метод исполнения:**
**Нужен ли JNGP:** 
**Тип цели:**
**Результат применения:**
**Количество уровней:**
**Вызов заклинания на цель:**
**Наличие глобальных переменных:** 
Шаблон можно просто скопировать здесь, вставить в свое сообщение, и заполнить
Выполняется для каждой способности, независимо от количества карт.

Правила темы:
  • Запрещены заказы заклинаний, для этого есть тема
  • Можно оставлять пожелания для улучшения заклинаний, указывать баги, но не оценки, и прочий флуд.
  • Оформление ответов, согласно шаблонам.
  • Запрещается выкладывать разные версии одного и того же заклинания в разных сообщениях.
  • Написание описаний понятным русским языком.
  • Не забывайте указывать в своих картах авторов заклинаний!
Заявки, не удовлетворяющие правилам, будут удаляться

Ответ
 
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
влад, баян, но для начинающего неплохо, вполне. (не тестил, по коду рассуждаю)
лучше используй струкруты
парочку советов:

1: в функции Trig_SpellJigirnaut_Actions

убери Inits, можно проще:


» раскрыть
Код:
if(Count==0)then
    call TimerStart(tim,0.025,true,cb) // при начале
endif

и
» раскрыть
Код:
if(Count==0)then
    call PauseTimer(tim) // при конце
endif



2: это все можно заменить .destroy() в структурах (но в конечном итоге одно и тоже)
» раскрыть
Код:
set Caster[i]=Caster[Count]
//set TimeOff[i]=TimeOff[Count]
set K[i]=K[Count]
set E[i]=E[Count]
set E2[i]=E2[Count]
set E3[i]=E3[Count]


3: с эффектами там тоже мутное удаление
нужно call DestroyEffect(AddSpecialEffectTarget(аргументы функции))

+1, дерзай
Старый 31.08.2012, 23:48
влад10011

offline
Опыт: 2,337
Активность:
я знаю я просто когда выкладывал спелл не знал про структуры Хеш и ну и что можно просто написать
TimerStart(CreateTimer(),0.025,true,function ------)
и какой смысл останавливать его если он работает всю игру?
Старый 12.09.2012, 16:18
youtube
сктыщь
offline
Опыт: 8,025
Активность:
влад10011,
Как запихивать в спойлер текст?
не?
Старый 12.09.2012, 17:03
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
влад10011, в инете таких полно=)
Старый 12.09.2012, 17:22
влад10011

offline
Опыт: 2,337
Активность:
youtube, я читал(ещё до того как ты мне показал) там нету =_=
Старый 12.09.2012, 18:33
Redykt
<(◕_^)>Няя!\\<(-_-")>
offline
Опыт: 7,026
Активность:
Vadik29:
Название: X-Banner
Метод исполнения: Jass,MUI
Нужен ли JNGP: нет
Тип цели: точка ,Channel
Результат применения: на скрине
Количество уровней: неограниченно
Вызов заклинания на цель: да
Наличие глобальных переменных: Хеш
Ставьте плюсы кому пригодился спел!)
я так и не пойму, кармадрочер, за что ты хочешь плюсы? За то что ты украл чужой спелл и выложил сюда?
Старый 12.09.2012, 21:26
youtube
сктыщь
offline
Опыт: 8,025
Активность:
влад10011,
я читал(ещё до того как ты мне показал) там нету =_=
я даже не побоюсь этого слова и скажу, что ты рак...
это что тогда по твоему?
Старый 12.09.2012, 21:37
Extremator

online
Опыт: 40,295
Активность:
влад10011:
Название: Землетрясение
Метод исполнения: Jass
Нужен ли JNGP: нет
Тип цели: юнит
Результат применения: Герой чертит линию по которой движется землетрясение(а линия идёт за целью пока землетрясение не дойдёт до цели). Землетрясение наносит урон вокруг себя 15 в сек и дойдя до цели наносит дополнительно 100 урона.
Спелл сделан полностью на локальных переменных. MUI
Количество уровней: 1
Вызов заклинания на цель: нету
Наличие глобальных переменных: нету
выглядит как-то стрёмно =/
Старый 14.09.2012, 09:17
влад10011

offline
Опыт: 2,337
Активность:
мой 1 спелл на Jass.... =_=
там ещё и вайт в loop был О_о
Старый 14.09.2012, 11:41
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,245
Активность:
Redykt, Лол?Откуда?
Если че то это я выложил... -_-
X-Banner
Created by Vadik29
3 Comments.
Download X-Banner.w3x
Старый 15.09.2012, 07:57
youtube
сктыщь
offline
Опыт: 8,025
Активность:
Немного вечерней наркомании, давненько ничего не делал и решал вот освежить память
Название: Кривой хук
Метод исполнения: Vjass+cjass
Нужен ли JNGP: ofc
Как? Что? Куда наводить? Как врубить?: просто тыкай на скилл да
Описание: После применения скила, вокруг героя начинает летать хук, которой тащит всех врагов, которые попадутся ему на пути. После того как хук достигнет максимальных размеров, он летит
обратно в точку отправления, и так же может зацепить новых врагов. Урон - 100ед
» Криво-код
include "cj_types.j"
include "cj_typesEX.j"
define{
    msg(g)=BJDebugMsg(g)
}
scope WeirdHook initializer Init{
    ///////////////////////////
    define{
        private SpellId='A000' //айди скила
        private HookId='h001' //айди хука
        private Periodic=0.025 //период
        private Damage=100 //урон офк
        private max_size=300 //кол-во хуковинок) хз как еще назвать их
        private EFFECT="Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodFootman.mdl"
    }
    ///////////////////////////
    private unit CAST,DUMMY
    private group GROUP
    ///////////////////////////
    private struct Con
        unit cast,hk[max_size],illusion
        real x,y,a,range
        int num
        bool up
        group g
        player p
        static method onMove takes nothing returns boolean
            unit u = GetFilterUnit()
            if IsUnitEnemy(CAST, GetOwningPlayer(u)) and GetWidgetLife(u) > 0.405 and not IsUnitType(u, UNIT_TYPE_STRUCTURE) and not IsUnitType(u, UNIT_TYPE_MECHANICAL) and IsUnitInGroup(u,GROUP) then 
                real x,y,a,x1,y1,d
                x=GetUnitX(u)
                y=GetUnitY(u)
                x1=GetUnitX(DUMMY)
                y1=GetUnitY(DUMMY)
                a=Atan2(y1-y, x1-x)
                d=SquareRoot((x1-x)*(x1-x)+(y1-y)*(y1-y))
                SetUnitX(u,x+d*0.7*Cos(a))
                SetUnitY(u,y+d*0.7*Sin(a))
                DestroyEffect(new effect(EFFECT,GetUnitX(u),GetUnitY(u)))
            endif
            u = null
            return false          
        endmethod
        
        static method onRange takes nothing returns boolean
            unit u = GetFilterUnit()
            if IsUnitEnemy(CAST, GetOwningPlayer(u)) and GetWidgetLife(u) > 0.405 and not IsUnitType(u, UNIT_TYPE_STRUCTURE) and not IsUnitType(u, UNIT_TYPE_MECHANICAL) and not IsUnitInGroup(u,GROUP) then 
                UnitDamageTarget(CAST, u, Damage , false, false, null, null, null) 
                GroupAddUnit(GROUP,u)
            endif
            u = null
            return false          
        endmethod
        
        static method onAction takes nothing returns nothing
            timer t = GetExpiredTimer()
            thistype r = GetTimerData(t)
            GROUP=r.g
            CAST=r.cast
            if r.up
                if r.num<=max_size
                    r.num++
                    r.range+=0.8
                    r.a+=0.1
                    real x,y
                    x=r.x+r.range*Cos(r.a)
                    y=r.y+r.range*Sin(r.a)
                    real newface=Atan2(y-GetUnitY(r.hk[r.num-1]),x-GetUnitX(r.hk[r.num-1]))
                    r.hk[r.num]=new unit(r.p,HookId,x,y,Rad2Deg(newface))
                    DUMMY=r.hk[r.num]
                    GroupEnumUnitsInRange(bj_lastCreatedGroup, GetUnitX(r.hk[r.num]), GetUnitY(r.hk[r.num]), 150., Filter(function thistype.onMove))
                    GroupEnumUnitsInRange(bj_lastCreatedGroup, GetUnitX(r.hk[r.num]), GetUnitY(r.hk[r.num]), 50., Filter(function thistype.onRange))
                else
                    SetUnitAnimation(r.illusion,"attack")
                    r.up=false
                endif
            else
                if r.num>0
                    RemoveUnit(r.hk[r.num])
                    r.num--
                    DUMMY=r.hk[r.num]
                    GroupEnumUnitsInRange(bj_lastCreatedGroup, GetUnitX(r.hk[r.num]), GetUnitY(r.hk[r.num]), 150., Filter(function thistype.onMove))
                    GroupEnumUnitsInRange(bj_lastCreatedGroup, GetUnitX(r.hk[r.num]), GetUnitY(r.hk[r.num]), 50., Filter(function thistype.onRange))
                else
                    GroupClear(r.g)
                    DestroyGroup(r.g)
                    RemoveUnit(r.illusion)
                    ReleaseTimer(t)
                    t=null
                    return
                endif
            endif
            t = null
        endmethod
        
        static method onCreate takes unit caster returns thistype
            thistype r= thistype.create()
            timer t = NewTimer()
            r.cast=caster
            r.a=Deg2Rad(GetUnitFacing(caster))
            r.range=150.
            r.num=0
            r.up=true
            r.g=new group
            r.p=GetOwningPlayer(caster)
            r.x=GetUnitX(caster)
            r.y=GetUnitY(caster)
            r.illusion=new unit(Player(12),GetUnitTypeId(r.cast),r.x,r.y,GetUnitFacing(caster))
            UnitAddAbility(r.illusion,'Aloc')
            SetUnitX(r.illusion,r.x)
            SetUnitY(r.illusion,r.y)
            SetUnitVertexColor(r.illusion, 255, 255, 255, 150)
            SetUnitColor(r.illusion, GetPlayerColor(r.p) )
            SetUnitAnimation(r.illusion,"attack")
            //SetUnitTimeScale(r.illusion, 0)
            SetTimerData(t, r)
            TimerStart(t, Periodic, true, function thistype.onAction)
            t = null
            return r
        endmethod
    
    endstruct 
    private bool Cond(){
        if GetSpellAbilityId()==SpellId
            unit cast=GetTriggerUnit()
            Con.onCreate(cast)
            cast=null
        endif
        return false
    }
    private void Init(){
        trigger t=new trigger
        int i = 0
        do {
            TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
        } whilenot(i++==12)
        TriggerAddCondition(t,Condition(function Cond))
        t=null
    }
}
Ставьте минусы на здоровье!
Прикрепленные файлы
Тип файла: w3x Weird hook.w3x (21.2 Кбайт, 53 просмотров )
Старый 18.09.2012, 18:11
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
Развеял скуку.
Название: Sleep Wave
Способ исполнения: как всегда структуры, не меняюсь
Описание: Обычная темная стая, только вместо простого урона усыпляет врагов. Во сне они получают двадцать пять ед. урона в секунду. Действует пять секунд.
»
Код:
library sw initializer in
    globals
        private group tmpgrp=CreateGroup()
        private location tmploc
        private integer indx
        private real nx
        private real xx
        private real ny
        private real xy
    endglobals
    private struct se
        unit m
        unit u
        real t
        real d
        effect fx
        static method cb takes nothing returns nothing
            local integer i=0
            loop
                exitwhen(i>=.c)
                set .dt[i].t=.dt[i].t-.025
                if(.dt[i].t>0.)then
                    call UnitDamageTarget(.dt[i].m,.dt[i].u,.dt[i].d,false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
                else
                    call PauseUnit(.dt[i].u,false)
                    call DestroyEffect(.dt[i].fx)
                    call .dt[i].destroy()
                    set .c=.c-1
                    set .dt[i]=.dt[.c]
                    set i=i-1
                    if(.c==0)then
                        call PauseTimer(.tm)
                    endif
                endif
                set i=i+1
            endloop
        endmethod
        static method register takes unit m,unit u returns nothing
            local integer i=0
            loop
                exitwhen(i>=.c)
                if(u==.dt[i].u)then
                    return
                endif
                set i=i+1
            endloop
            set .dt[.c]=se.create()
            set .dt[.c].u=u
            set .dt[.c].t=5.
            set .dt[.c].d=25.*.025
            set .dt[.c].m=m
            set .dt[.c].fx=AddSpecialEffectTarget("Abilities\\Spells\\Undead\\Sleep\\SleepTarget.mdl",u,"overhead")
            call PauseUnit(u,true)
            call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\Sleep\\SleepSpecialArt.mdl",u,"origin"))
            if(.c==0)then
                call TimerStart(.tm,.025,true,function se.cb)
            endif
            set .c=.c+1
        endmethod
        static se array dt
        static integer c=0
        static timer tm=CreateTimer()
    endstruct
    private struct sw
        unit u
        unit d
        effect fx
        real x
        real y
        group e
        real a
        real r
        real m
        real s
        player o
        static method ff takes nothing returns boolean
            local unit u=GetFilterUnit()
            if(GetWidgetLife(u)>.405)then
                if(IsUnitEnemy(u,.dt[indx].o))then
                    if(not(IsUnitInGroup(u,.dt[indx].e)))then
                        call GroupAddUnit(.dt[indx].e,u)
                        call se.register(.dt[indx].u,u)
                    endif
                endif
            endif
            set u=null
            return(false)
        endmethod
        static method cb takes nothing returns nothing
            local integer i=0
            loop
                exitwhen(i>=.c)
                if(.dt[i].r<.dt[i].m)then
                    set .dt[i].r=.dt[i].r+.dt[i].s
                    set .dt[i].x=.dt[i].x+.dt[i].s*Cos(.dt[i].a)
                    set .dt[i].y=.dt[i].y+.dt[i].s*Sin(.dt[i].a)
                    if(.dt[i].x>xx)then
                        set .dt[i].x=xx
                    elseif(.dt[i].x<nx)then
                        set .dt[i].x=nx
                    elseif(.dt[i].y>xy)then
                        set .dt[i].y=xy
                    elseif(.dt[i].y<ny)then
                        set .dt[i].y=ny
                    endif
                    call SetUnitX(.dt[i].d,.dt[i].x)
                    call SetUnitY(.dt[i].d,.dt[i].y)
                    set indx=i
                    call GroupEnumUnitsInRange(tmpgrp,.dt[i].x,.dt[i].y,225.,Condition(function sw.ff))
                else
                    call DestroyEffect(.dt[i].fx)
                    call DestroyGroup(.dt[i].e)
                    call KillUnit(.dt[i].d)
                    call .dt[i].destroy()
                    set .c=.c-1
                    set .dt[i]=.dt[.c]
                    set i=i-1
                    if(.c==0)then
                        call PauseTimer(.tm)
                    endif
                endif
                set i=i+1
            endloop
        endmethod
        static method cst takes nothing returns boolean
            if(GetSpellAbilityId()=='A000')then
                set .dt[.c]=sw.create()
                set .dt[.c].u=GetTriggerUnit()
                set .dt[.c].x=GetUnitX(.dt[.c].u)
                set .dt[.c].y=GetUnitY(.dt[.c].u)
                set .dt[.c].o=GetOwningPlayer(.dt[.c].u)
                set .dt[.c].s=1200.*.025
                set tmploc=GetSpellTargetLoc()
                set .dt[.c].e=CreateGroup()
                set .dt[.c].a=Atan2(GetLocationY(tmploc)-.dt[.c].y,GetLocationX(tmploc)-.dt[.c].x)
                call RemoveLocation(tmploc)
                set .dt[.c].r=0.
                set .dt[.c].m=800.
                set .dt[.c].d=CreateUnit(.dt[.c].o,'du00',.dt[.c].x,.dt[.c].y,.dt[.c].a*bj_RADTODEG)
                set .dt[.c].fx=AddSpecialEffectTarget("Abilities\\Spells\\Undead\\CarrionSwarm\\CarrionSwarmMissile.mdl",.dt[.c].d,"chest")
                if(.c==0)then
                    call TimerStart(.tm,.025,true,function sw.cb)
                endif
                set .c=.c+1
            endif
            return(false)
        endmethod
        static sw array dt
        static integer c=0
        static timer tm=CreateTimer()
    endstruct
    private function dff takes nothing returns boolean
        return(true)
    endfunction
    private function in takes nothing returns nothing
        local trigger t=CreateTrigger()
        local boolexpr b=Condition(function dff)
        local integer i=0
        loop
            call TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,b)
            set i=i+1
            exitwhen(i>11)
        endloop
        call TriggerAddCondition(t,Condition(function sw.cst))
        set nx=GetCameraBoundMinX()-512.
        set xx=GetCameraBoundMaxX()+512.
        set ny=GetCameraBoundMinY()-256.
        set xy=GetCameraBoundMaxY()+256.
        call Preload("Abilities\\Spells\\Undead\\CarrionSwarm\\CarrionSwarmMissile.mdl")
        call Preload("Abilities\\Spells\\Undead\\Sleep\\SleepSpecialArt.mdl")
        call Preload("Abilities\\Spells\\Undead\\Sleep\\SleepTarget.mdl")
        call DestroyBoolExpr(b)
        set b=null
        set t=null
    endfunction
endlibrary
можете кстати проголосовать если кому-то понравилось или наоборот
Прикрепленные файлы
Тип файла: w3x sw.w3x (18.6 Кбайт, 37 просмотров )

Отредактировано bee, 20.09.2012 в 06:55.
Старый 18.09.2012, 23:12
влад10011

offline
Опыт: 2,337
Активность:
Название: Гром с небес
Метод исполнения: cJass
Нужен ли JNGP: угу
MUI: угу
Тип цели: без цели
Описание: Юнит применяет способность и с неба падают молнии в случайной точке вокруг героя нанося урон.
Количество уровней: хоть сколько
Наличие глобальных переменных: приватный Хеш
» КОД

Код:
library LibSpellMol initializer Init {

define private on=true
define private off=false

define {
private Per=1.50 //Когда периодически будут появляться молнии
private PerUp=0.25 //Минус сколько задешки за каждый лвл будут появляться молнии
private Mol=4 //Сколько будет появлений молний
private MolUp=1 //Плюс сколько молний за каждый лвл
private Area=400.00 //Радиус на котором рандомно появляються молнии
private Area2=150.00 //Радиус урона при ударе молнии
private Damage=35.00 //Начальный урон(за удар молнией)
private DamageUp=15.00 //Плюс сколько урона за каждый лвл(за удар молнией)
/* Чтобы не прибавлять нечего за каждый лвл просто ставте 0 */
private FS=on //Включить\выключить "вспышку молнии" после окончания спелла on\off
private Rad=50.00 //Радиус вспышки молнии(от гера)
private MYEFFECT="Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl" //Модель эффекта молнии
private Spell='A000' //Рав-Код Спелла(для каста)
//===========================================================
private Pr=Per-(PerUp*GetUnitAbilityLevel(u,Spell))
private DM=Damage+(DamageUp*GetUnitAbilityLevel(Caster,Spell))
private MAX=Mol+(MolUp*GetUnitAbilityLevel(u,Spell))
private H2I(h)=GetHandleId(h)
private end=return
private ifloop=exitwhen
private void=nothing
private XR=x=GetRandomReal(GetRectMinX(r),GetRectMaxX(r))
private YR=y=GetRandomReal(GetRectMinY(r),GetRectMaxY(r))
}

globals
private hashtable Hash=InitHashtable()
private unit Caster
private constant boolean BOOOOOOOO=FS
endglobals

private boolean DeathUnit(unit u) {
end GetUnitState(u,UNIT_STATE_LIFE)<0.405
}

private rect CreateRectArea(real x,real y,real area,boolean b) {
if b==true
return Rect(x-area,y-area,x+area,y+area)
else
return Rect(x-area,y+area,x+area,y-area)
endif
}

private boolean Filters() {
unit u=GetFilterUnit()
boolean b=IsUnitType(u,UNIT_TYPE_STRUCTURE)==false and IsUnitEnemy(u, GetOwningPlayer(Caster))==true
u=null
end b
}

private void EffectRect(string s,unit u,real r,boolean b) {
real x=GetUnitX(u)
real y=GetUnitY(u)
DestroyEffect(AddSpecialEffect(s,x,y))
if b==true {
DestroyEffect(AddSpecialEffect(s,x+r,y+r))
DestroyEffect(AddSpecialEffect(s,x-r,y+r))
DestroyEffect(AddSpecialEffect(s,x-r,y-r))
DestroyEffect(AddSpecialEffect(s,x+r,y-r))
elseif b==false
DestroyEffect(AddSpecialEffect(s,x+r,y))
DestroyEffect(AddSpecialEffect(s,x,y+r))
DestroyEffect(AddSpecialEffect(s,x-r,y))
DestroyEffect(AddSpecialEffect(s,x,y-r))
DestroyEffect(AddSpecialEffect(s,x+r,y+r))
DestroyEffect(AddSpecialEffect(s,x-r,y+r))
DestroyEffect(AddSpecialEffect(s,x-r,y-r))
DestroyEffect(AddSpecialEffect(s,x+r,y-r))
}
 }

private void Bred(unit u) {
if BOOOOOOOO==on { 
EffectRect(MYEFFECT,u,Rad+150.00,true)
EffectRect(MYEFFECT,u,Rad,false)
    }
}

private void Damag() {
unit u=GetEnumUnit()
UnitDamageTarget(Caster,u,DM,true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,WEAP  ON_TYPE_WHOKNOWS)
u=null
}

private void Periodick() {
timer t=GetExpiredTimer()
unit u=LoadUnitHandle(Hash,H2I(t),H2I(t))
integer k=LoadInteger(Hash,H2I(u),H2I(u))
rect r=CreateRectArea(GetUnitX(u),GetUnitY(u),Area,true)
real XR
real YR
group g=CreateGroup()
boolexpr b
boolean bo=false
Caster=u

if k>=MAX or DeathUnit(u)==true
Bred(u)
RemoveSavedHandle(Hash,H2I(t),H2I(t))
RemoveSavedInteger(Hash,H2I(u),H2I(u))
FlushChildHashtable(Hash,H2I(t))
FlushChildHashtable(Hash,H2I(u))
DestroyTimer(t)
bo=true
endif

DestroyEffect(AddSpecialEffect(MYEFFECT,x,y))
RemoveRect(r)
r=CreateRectArea(x,y,Area2,true)
b=Condition(function Filters)
GroupEnumUnitsInRect(g,r,b)
DestroyBoolExpr(b)
ForGroup(g,function Damag)
k++

RemoveSavedInteger(Hash,H2I(u),H2I(u))
FlushChildHashtable(Hash,H2I(u))
if bo==false
SaveInteger(Hash,H2I(u),H2I(u),k)
endif
DestroyGroup(g)
RemoveRect(r)
b=null
g=null
r=null
t=null
u=null
}

private boolean Con() {
    if (not(GetSpellAbilityId()==Spell))
        end false
    endif
    end true
}

private void Cast() {
unit u=GetSpellAbilityUnit()
timer t=CreateTimer()
SaveUnitHandle(Hash,H2I(t),H2I(t),u)
SaveInteger(Hash,H2I(u),H2I(u),0)
TimerStart(t,Pr,true,function Periodick)
t=null
u=null
}

private void Init() {
trigger t=CreateTrigger()
    integer i=0
loop
TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
i++
ifloop i==bj_MAX_PLAYER_SLOTS
endloop
TriggerAddAction(t,function Cast)
TriggerAddCondition(t,Condition(function Con))

Preloader(MYEFFECT)
t=null
 }
}

Прикрепленные файлы
Тип файла: w3x MOOLN.w3x (19.5 Кбайт, 25 просмотров )
Старый 27.09.2012, 10:22
влад10011

offline
Опыт: 2,337
Активность:
аргументируйте минусы чтоле(
Старый 27.09.2012, 20:31
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
влад10011:
аргументируйте минусы чтоле(
ни выравнивания в коде,ни скринов,сжасс с хеш-таблицей
Старый 27.09.2012, 20:40
влад10011

offline
Опыт: 2,337
Активность:
Цитата:
Сообщение от Nerevar
ни выравнивания в коде

всм?
Цитата:
Сообщение от Nerevar
ни скринов

Щас добавлю
Цитата:
Сообщение от Nerevar
сжасс с хеш-таблицей

А что мне юзать? Структуры или массивы?(одно и тоже)
При структурах или массивах придётся делать таймер, который работает всю игру.
Таким образом не получиться сделать точную настройку отката "Удара Молнии", а с хешом намного проще.(Темболее сохраняю всего 2 значения, вместо того чтобы перебирать все значения из массива....)
Старый 27.09.2012, 20:52
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
влад10011:
всм?
СПЛОШНЯКОМ все написано,без отступов,табуляций
сравни с выравниванием хотя бы здесь
Старый 27.09.2012, 20:56
влад10011

offline
Опыт: 2,337
Активность:
Название: Гром с небес
Метод исполнения: cJass
Нужен ли JNGP: угу
MUI: угу
Тип цели: без цели
Описание: Юнит применяет способность и с неба падают молнии в случайной точке вокруг героя нанося урон.
Количество уровней: хоть сколько
Наличие глобальных переменных: приватный Хеш
» КОД

Код:
library LibSpellMol initializer Init {

define private on=true
define private off=false

define {
private Per=1.50 //Когда периодически будут появляться молнии
private PerUp=0.25 //Минус сколько задешки за каждый лвл будут появляться молнии
private Mol=4 //Сколько будет появлений молний
private MolUp=1 //Плюс сколько молний за каждый лвл
private Area=400.00 //Радиус на котором рандомно появляються молнии
private Area2=150.00 //Радиус урона при ударе молнии
private Damage=35.00 //Начальный урон(за удар молнией)
private DamageUp=15.00 //Плюс сколько урона за каждый лвл(за удар молнией)
/* Чтобы не прибавлять нечего за каждый лвл просто ставте 0 */
private FS=on //Включить\выключить "вспышку молнии" после окончания спелла on\off
private Rad=50.00 //Радиус вспышки молнии(от гера)
private MYEFFECT="Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl" //Модель эффекта молнии
private Spell='A000' //Рав-Код Спелла(для каста)
//===========================================================
private Pr=Per-(PerUp*GetUnitAbilityLevel(u,Spell))
private DM=Damage+(DamageUp*GetUnitAbilityLevel(Caster,Spell))
private MAX=Mol+(MolUp*GetUnitAbilityLevel(u,Spell))
private H2I(h)=GetHandleId(h)
private end=return
private ifloop=exitwhen
private void=nothing
private XR=x=GetRandomReal(GetRectMinX(r),GetRectMaxX(r))
private YR=y=GetRandomReal(GetRectMinY(r),GetRectMaxY(r))
}

globals
private hashtable Hash=InitHashtable()
private unit Caster
private constant boolean BOOOOOOOO=FS
endglobals

private boolean DeathUnit(unit u) {
end GetUnitState(u,UNIT_STATE_LIFE)<0.405
}

private rect CreateRectArea(real x,real y,real area,boolean b) {
if b==true
return Rect(x-area,y-area,x+area,y+area)
else
return Rect(x-area,y+area,x+area,y-area)
endif
}

private boolean Filters() {
unit u=GetFilterUnit()
boolean b=IsUnitType(u,UNIT_TYPE_STRUCTURE)==false and IsUnitEnemy(u, GetOwningPlayer(Caster))==true
u=null
end b
}

private void EffectRect(string s,unit u,real r,boolean b) {
real x=GetUnitX(u)
real y=GetUnitY(u)
DestroyEffect(AddSpecialEffect(s,x,y))
if b==true {
  DestroyEffect(AddSpecialEffect(s,x+r,y+r))
  DestroyEffect(AddSpecialEffect(s,x-r,y+r))
  DestroyEffect(AddSpecialEffect(s,x-r,y-r))
  DestroyEffect(AddSpecialEffect(s,x+r,y-r))
elseif b==false
  DestroyEffect(AddSpecialEffect(s,x+r,y))
  DestroyEffect(AddSpecialEffect(s,x,y+r))
  DestroyEffect(AddSpecialEffect(s,x-r,y))
  DestroyEffect(AddSpecialEffect(s,x,y-r))
  DestroyEffect(AddSpecialEffect(s,x+r,y+r))
  DestroyEffect(AddSpecialEffect(s,x-r,y+r))
  DestroyEffect(AddSpecialEffect(s,x-r,y-r))
  DestroyEffect(AddSpecialEffect(s,x+r,y-r))
}
 }

private void Bred(unit u) {
if BOOOOOOOO==on { 
EffectRect(MYEFFECT,u,Rad+150.00,true)
EffectRect(MYEFFECT,u,Rad,false)
    }
}

private void Damag() {
unit u=GetEnumUnit()
UnitDamageTarget(Caster,u,DM,true,false,ATTACK_TYPE_HERO,DAMAGE_TYPE_NORMAL,WEAP  ON_TYPE_WHOKNOWS)
u=null
}

private void Periodick() {
timer t=GetExpiredTimer()
unit u=LoadUnitHandle(Hash,H2I(t),H2I(t))
integer k=LoadInteger(Hash,H2I(u),H2I(u))
rect r=CreateRectArea(GetUnitX(u),GetUnitY(u),Area,true)
real XR
real YR
group g=CreateGroup()
boolexpr b
boolean bo=false
Caster=u

if k>=MAX or DeathUnit(u)==true
Bred(u)
    RemoveSavedHandle(Hash,H2I(t),H2I(t))
    RemoveSavedInteger(Hash,H2I(u),H2I(u))
    FlushChildHashtable(Hash,H2I(t))
    FlushChildHashtable(Hash,H2I(u))
    DestroyTimer(t)
bo=true
endif

   DestroyEffect(AddSpecialEffect(MYEFFECT,x,y))
   RemoveRect(r)
   r=CreateRectArea(x,y,Area2,true)
   b=Condition(function Filters)
   GroupEnumUnitsInRect(g,r,b)
   DestroyBoolExpr(b)
   ForGroup(g,function Damag)
k++

   RemoveSavedInteger(Hash,H2I(u),H2I(u))
   FlushChildHashtable(Hash,H2I(u))
if bo==false
   SaveInteger(Hash,H2I(u),H2I(u),k)
endif
   DestroyGroup(g)
   RemoveRect(r)
b=null
g=null
r=null
t=null
u=null
}

private boolean Con() {
    if (not(GetSpellAbilityId()==Spell))
        end false
    endif
    end true
}

private void Cast() {
unit u=GetSpellAbilityUnit()
timer t=CreateTimer()
   SaveUnitHandle(Hash,H2I(t),H2I(t),u)
   SaveInteger(Hash,H2I(u),H2I(u),0)
   TimerStart(t,Pr,true,function Periodick)
t=null
u=null
}

private void Init() {
trigger t=CreateTrigger()
    integer i=0
loop
TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
i++
ifloop i==bj_MAX_PLAYER_SLOTS
endloop
TriggerAddAction(t,function Cast)
TriggerAddCondition(t,Condition(function Con))

Preloader(MYEFFECT)
t=null
 }
}



влад10011 добавил:
Цитата:
Сообщение от Nerevar
СПЛОШНЯКОМ все написано,без отступов,

ну...
в следующий раз постараюсь нормально сделать...
Миниатюры
Кликните на картинку для увеличения
Название:  WC3ScrnShot_092712_225542_02.jpg
Просмотров: 89
Размер:  146.2 Кбайт  Кликните на картинку для увеличения
Название:  WC3ScrnShot_092712_225550_03.jpg
Просмотров: 110
Размер:  165.3 Кбайт  Кликните на картинку для увеличения
Название:  WC3ScrnShot_092712_225758_01.jpg
Просмотров: 62
Размер:  142.3 Кбайт  
Прикрепленные файлы
Тип файла: w3x MOOLN.w3x (19.5 Кбайт, 24 просмотров )
Старый 27.09.2012, 21:02
16GB
GhostOne User
offline
Опыт: 59,317
Активность:
пишу тоже без отступов автору +
Старый 27.09.2012, 21:34
DualShock

offline
Опыт: 4,983
Активность:
можно прогнать код через это
Старый 27.09.2012, 22:52
Ответ

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

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

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

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



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