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

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

Ответ
 
DioD

offline
Опыт: 45,134
Активность:
Дота вопросник
Здесь вы можете задавать свои вопросы относительно доты с технической стороны, ещё я могу выложить почти любую старую версию если надо кому то.

http://xgm.guru/forum/showthread.php?t=4311
Это открытая дота 32, большинство абилок не изменилось с тех пор, локалки я расшифровываю сам, но даже без их расшифровки алгоритм понятен.

Отредактировано DioD, 31.01.2007 в 12:48.
Старый 30.01.2007, 17:58
deemon12

offline
Опыт: 7,563
Активность:
DioD, выложи САМУЮ первую версию доты.

И первую из дот, в которой уже были боты.
Старый 30.01.2007, 18:35
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
DioD, выложи САМУЮ первую версию доты.

неумаю что самая, но одна из первых версий уже есть в базе карт
Старый 30.01.2007, 18:47
DioD

offline
Опыт: 45,134
Активность:
то что уже есть в архиве я дублировать не буду.
Да и понятие самой первой очень растяжимое.
Старый 30.01.2007, 19:10
felix_ff

offline
Опыт: 757
Активность:
Вообщем так. мне надо знать как сделан думми юнит от Даггера Spectre....
чяс мучу довольно рофльную мапу и не каг не могу сделать эту чертову темноту....
+ хотелось бы посмотреть на код от Wild Axes (Rexar)
Старый 30.01.2007, 20:21
DioD

offline
Опыт: 45,134
Активность:
У спектры моделька темноты если мне память не изменяет.
А код рексара я сейчас расшифрую...
Старый 30.01.2007, 21:04
DioD

offline
Опыт: 45,134
Активность:
Код:
function WildAxesSpell takes nothing returns boolean
    return GetSpellAbilityId()=='A0O1'
endfunction
function WildAxesTreeCut takes nothing returns nothing
    call KillDestructable(GetEnumDestructable())
endfunction
function WildAxesDamage takes unit Who,real x,real y,group Victims returns nothing
    local group Group=CreateGroup()
    local unit TMP
    local rect Mx=Rect(x-150,y-150,x+150,y+150)
    call GroupEnumUnitsInRange(Group,x,y,150,null)
    loop
        set TMP=FirstOfGroup(Group)
        exitwhen TMP==null
        if(IsUnitInGroup(TMP,Victims)==false and IsUnitEnemy(TMP,GetOwningPlayer(Who))and IsUnitVisible(TMP,GetOwningPlayer(Who)))then
            if(GetUnitAbilityLevel(TMP,'A04R')!=1 and GetUnitState(TMP,UNIT_STATE_LIFE)>0 and IsUnitType(TMP,UNIT_TYPE_STRUCTURE)==false)then
                call GroupAddUnit(Victims,TMP)
                call UnitDamageTarget(Who,TMP,60+GetUnitAbilityLevel(Who,'A0O1')*30,true,true,ATTACK_  TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_METAL_HEAVY_SLICE)
                call AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",TMP,"overhead")
            endif
        endif
        call GroupRemoveUnit(Group,TMP)
    endloop
    call EnumDestructablesInRect(Mx,null,function WildAxesTreeCut)
    call RemoveRect(Mx)
    call DestroyGroup(Group)
endfunction

function WildAxesTimer takes nothing returns nothing
    local string Table=H2Tx(GetExpiredTimer())
    local unit Axe=GetUnit(Table,"Axe")
    local unit Caster=GetUnit(Table,"Hero")
    local real Ax=GetReal(Table,"Ax")
    local real Ay=GetReal(Table,"Ay")
    local real Cx=GetReal(Table,"Cx")
    local real Cy=GetReal(Table,"Cy")
    local real Bx=GetReal(Table,"Bx")
    local real By=GetReal(Table,"By")
    local real a=GetReal(Table,"a")
    local real b=1-a
    local boolean IsPassed=GetBoolean(Table,"FirstPass")
    local group CheckGroup=GetGroup(Table,"AlreadyDamaged")
    call SetUnitX(Axe,SafeX(Ax*a*a+Bx*2*a*b+Cx*b*b))
    call SetUnitY(Axe,SafeY(Ay*a*a+By*2*a*b+Cy*b*b))
    call WildAxesDamage(Caster,GetUnitX(Axe),GetUnitY(Axe),CheckGroup)
    if(IsPassed)then
        call SetReal(Table,"a",a-0.02)
    else
        call SetReal(Table,"a",a+0.02)
        call SetReal(Table,"Ax",GetUnitX(Caster))
        call SetReal(Table,"Ay",GetUnitY(Caster))
    endif
    if(a<0 and IsPassed)then
        call SetBoolean(Table,"FirstPass",false)
        call SetReal(Table,"Bx",Ax+300*Cos(Atan2(Cy-Ay,Cx-Ax)+GetReal(Table,"AngleOffset")))
        call SetReal(Table,"By",Ay+300*Sin(Atan2(Cy-Ay,Cx-Ax)+GetReal(Table,"AngleOffset")))
    endif
    if(a>1 and IsPassed==false)then
        call PauseTimer(GetExpiredTimer())
        call DestroyGroup(CheckGroup)
        call FastFlush(Table)
        call RemoveUnit(Axe)
        call DestroyTimer(GetExpiredTimer())
    endif
endfunction

function WildAxesSettings takes nothing returns nothing
    local unit Caster=GetTriggerUnit()
    local real CasterX=GetUnitX(Caster)
    local real CasterY=GetUnitY(Caster)
    local real TargetX=GetLocationX(GetSpellTargetLoc())
    local real TargetY=GetLocationY(GetSpellTargetLoc())
    local unit Axe1=CreateUnit(GetOwningPlayer(Caster),'e01T',CasterX,CasterY,270.)
    local unit Axe2=CreateUnit(GetOwningPlayer(Caster),'e01T',CasterX,CasterY,270.)
    local string Table1
    local string Table2
    local timer Timer1=CreateTimer()
    local timer Timer2=CreateTimer()
    if GetSpellTargetUnit()!=null then
        set TargetX=GetUnitX(GetSpellTargetUnit())
        set TargetY=GetUnitY(GetSpellTargetUnit())
    endif
    call UnitAddAbility(Axe1,'Amrf')
    call UnitRemoveAbility(Axe1,'Amrf')
    call SetUnitFlyHeight(Axe1,150,0)
    call UnitAddAbility(Axe2,'Amrf')
    call UnitRemoveAbility(Axe2,'Amrf')
    call SetUnitFlyHeight(Axe2,150,0)
    set Table1=H2Tx(Timer1)
    call SetHandle(Table1,"Hero",Caster)
    call SetHandle(Table1,"Axe",Axe1)
    call SetHandle(Table1,"AlreadyDamaged",CreateGroup())
    call SetReal(Table1,"CasterX",CasterX)
    call SetReal(Table1,"CasterY",CasterY)
    call SetReal(Table1,"TargetX",TargetX)
    call SetReal(Table1,"TargetY",TargetY)
    call SetReal(Table1,"Bx",CasterX+300*Cos(Atan2(TargetY-CasterY,TargetX-CasterX)+45))
    call SetReal(Table1,"By",CasterY+300*Sin(Atan2(TargetY-CasterY,TargetX-CasterX)+45))
    call SetReal(Table1,"a",1)
    call SetReal(Table1,"AngleOffset",-45)
    call SetBoolean(Table1,"FirstPass",true)
    set Table2=H2Tx(Timer2)
    call SetHandle(Table2,"Hero",Caster)
    call SetHandle(Table2,"Axe",Axe2)
    call SetHandle(Table2,"AlreadyDamaged",CreateGroup())
    call SetReal(Table2,"CasterX",CasterX)
    call SetReal(Table2,"CasterY",CasterY)
    call SetReal(Table2,"TargetX",TargetX)
    call SetReal(Table2,"TargetY",TargetY)
    call SetReal(Table2,"Bx",CasterX+300*Cos(Atan2(TargetY-CasterY,TargetX-CasterX)-45))
    call SetReal(Table2,"By",CasterY+300*Sin(Atan2(TargetY-CasterY,TargetX-CasterX)-45))
    call SetReal(Table2,"a",1)
    call SetReal(Table2,"AngleOffset",45)
    call SetBoolean(Table2,"FirstPass",true)
    call TimerStart(Timer1,0.025,true,function WildAxesTimer)
    call TimerStart(Timer2,0.025,true,function WildAxesTimer)
endfunction


DioD добавил:
Doodads\Terrain\LOSBlocker\LOSBlocker

это моделька от хвоста шадоу пача, во всяком случае так говорят слк таблицы
Старый 30.01.2007, 21:46
DioD

offline
Опыт: 45,134
Активность:
Всё есть в опен доте32 а тосс сейчас расшифрую.
Старый 31.01.2007, 12:50
NETRAT

offline
Опыт: 83,712
Активность:
FoK_KruGer только еще замечание что не все спеллы снимают бафф, а только НЕпредметные, для этого там есть бд предметных абил, которая сканируется АХТУНГ тупым перебором
Старый 31.01.2007, 15:44
Rusvermilion
Ограничен ScorpioT1000
offline
Опыт: 18,299
Активность:
DioD У меня есть Май дота, но редактор не полностью открывает ее. Скинь сюда плз, триггер пассивку тини и всякие такие простые скиллы. Или лучше на новой карте))
Старый 31.01.2007, 15:55
NETRAT

offline
Опыт: 83,712
Активность:
Wait and bleed при чем тут майдота? в рамках этой темы она точно не рассматривается. Речь идет о опендота http://dimon.xgm.guru/opendota
Старый 31.01.2007, 16:19
DioD

offline
Опыт: 45,134
Активность:
Да будет вам известно что мудота имеет код абил на 95% похожий на код доты?

Единственное различие в введении РС, что просто пугает если его не понимать.


Код:
function TossDamage takes unit Who,real x,real y,real AOE,real Damage,integer SpellId returns nothing
    local group Victims=CreateGroup()
    local unit First
    local location TMP
    call GroupEnumUnitsInRange(Victims,x,y,AOE,null)
    loop
        set First=FirstOfGroup(Victims)
        exitwhen First==null
        if IsUnitEnemy(First,GetOwningPlayer(Who))and IsUnitDeadBJ(First)==false and GetUnitAbilityLevel(First,'A04R')==0 then
            if(IsUnitType(First,UNIT_TYPE_STRUCTURE)==false)then
                call UnitDamageTargetBJ(Who,First,Damage,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_DEMOLITION)
            else
                call UnitDamageTargetBJ(Who,First,Damage/3,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_DEMOLITION)
            endif
            set TMP=GetUnitLoc(First)
            call DestroyEffect(AddSpellEffectByIdLoc(SpellId,EFFECT_TYPE_CASTER,TMP))
            call DestroyEffect(AddSpellEffectByIdLoc(SpellId,EFFECT_TYPE_CASTER,TMP))
            call DestroyEffect(AddSpellEffectByIdLoc(SpellId,EFFECT_TYPE_CASTER,TMP))
            call RemoveLocation(TMP)
            call GroupRemoveUnit(Victims,First)
        else
            call GroupRemoveUnit(Victims,First)
        endif
    endloop
    call GroupClear(Victims)
    call DestroyGroup(Victims)
endfunction

function TossMain takes nothing returns nothing
    local timer MoveTimer=GetExpiredTimer()
    local string Table=H2Tx(MoveTimer)
    local integer Count=GetInteger(Table,"TossCounter")
    local real Range=GetReal(Table,"TossDistance")
    local real Angle=GetReal(Table,"TossAngle")
    local location Target=GetLocation(Table,"TossTargetLoc")
    local location Start=GetLocation(Table,"TossSourceLoc")
    local unit Caster=GetUnit(Table,"Tiny")
    local unit Victim=GetUnit(Table,"TossSource")
    local real Height=(Count-25)*(Count-25)
    local real SpeedMod=Range*Count/50-Range
    local location Dest=PolarProjectionBJ(Target,SpeedMod,Angle)
    if(Count<51)then
        call SetUnitPositionLoc(Victim,Dest)
        call SetUnitFlyHeight(Victim,775-Height,0)
        set Count=Count+1
        if(GetRandomInt(1,4)==2)then
            call DestroyEffect(AddSpecialEffectTargetUnitBJ("origin",Victim,"Abilities\\Spells\\Undead\\Cripple\\CrippleTarget.mdl"))
        endif
    endif
    if(Count>50)then
        call SetUnitFlyHeight(Victim,GetUnitDefaultFlyHeight(Victim),0)
        call PauseUnit(Victim,false)
        call SetUnitPathing(Victim,true)
        call TerrainDeformationRippleBJ(.2,true,Target,1.,300.,96.,1,64.)
        if IsUnitAlly(Victim,GetOwningPlayer(Caster))then
            call UnitDamageTargetBJ(Caster,Victim,.2*75*GetUnitAbilityLevel(Caster,'A0BZ'),ATTACK  _TYPE_NORMAL,DAMAGE_TYPE_DEMOLITION)
        else
            call UnitDamageTargetBJ(Caster,Victim,(.2+.15*GetUnitAbilityLevel(Caster,'A0CY'))*75*  GetUnitAbilityLevel(Caster,'A0BZ'),ATTACK_TYPE_NORMAL,DAMAGE_TYPE_DEMOLITION)
        endif
        call TossDamage(Caster,GetLocationX(Target),GetLocationY(Target),300,75.*I2R(GetUnitA  bilityLevelSwapped('A0BZ',Caster)),'A0BZ')
        call EnumDestructablesInCircleBJ(300,Target,function KillDestructableEnum)
        call PauseTimer(GetExpiredTimer())
        call PolledWait(.01)
        call FastFlush(Table)
        call DestroyTimer(GetExpiredTimer())
        call RemoveLocation(Target)
        call RemoveLocation(Start)
    endif
    call SetInteger(Table,"TossCounter",Count)
    call RemoveLocation(Dest)
endfunction

function TossSetting takes nothing returns nothing
    local group NearCaster=CreateGroup()
    local timer MoveTimer
    local unit Caster=GetTriggerUnit()
    local unit Victim
    local location Target
    local location Start
    local integer Counter
    local real Range
    local real Angle
    local string f5
    call GroupEnumUnitsInRange(NearCaster,GetUnitX(Caster),GetUnitY(Caster),275,Condition  (function TossFilter))
    set Victim=GroupPickRandomUnit(NearCaster)
    call DestroyGroup(NearCaster)
    set Target=GetUnitLoc(GetSpellTargetUnit())
    set Start=GetUnitLoc(Victim)
    set Counter=1
    set Range=DistanceBetweenPoints(Start,Target)
    set Angle=AngleBetweenPoints(Start,Target)
    if(Victim!=null and GetUnitTypeId(Victim)!='n00I'and GetUnitTypeId(Victim)!='e01H'and GetOwningPlayer(GetSpellTargetUnit())!=GetOwningPlayer(Caster))then
        call SetUnitAnimationByIndex(Caster,4)
        call PauseUnit(Victim,true)
        call SetUnitPathing(Victim,false)
        call UnitAddAbility(Victim,'AEme')
        call UnitRemoveAbility(Victim,'AEme')
        set MoveTimer=CreateTimer()
        set f5=H2Tx(MoveTimer)
        call SetHandle(f5,"Tiny",Caster)
        call SetHandle(f5,"TossSource",Victim)
        call SetHandle(f5,"TossTargetLoc",Target)
        call SetHandle(f5,"TossSourceLoc",Start)
        call SetInteger(f5,"TossCounter",Counter)
        call SetReal(f5,"TossDistance",Range)
        call SetReal(f5,"TossAngle",Angle)
        call TimerStart(MoveTimer,.02,true,function TossMain)
    endif
endfunction
Старый 31.01.2007, 16:41
DioD

offline
Опыт: 45,134
Активность:
Цитата:
Сообщение от Wait and bleed
DioD У меня есть Май дота, но редактор не полностью открывает ее. Скинь сюда плз, триггер пассивку тини и всякие такие простые скиллы. Или лучше на новой карте))


никаких карт с отдельными спеллами не будет, только код, именно поэтому тема в джаз разделе.
Старый 31.01.2007, 20:11
p01nTT

offline
Опыт: 11,160
Активность:
у спектра по моему юнит с большой по размеру тенью,так как когда в варке отключаешь тени,то не видно чёрной дорожки
Старый 01.02.2007, 12:22
Rusvermilion
Ограничен ScorpioT1000
offline
Опыт: 18,299
Активность:
У меня опен дота ошибку выдает про несоответсвие триггеров. И если я не ошибаюся у меня в редакторе нету джасс, или я нуб не знаю как его включить.
Старый 01.02.2007, 12:52
DioD

offline
Опыт: 45,134
Активность:
Цитата:
Сообщение от p01nTT
у спектра по моему юнит с большой по размеру тенью,так как когда в варке отключаешь тени,то не видно чёрной дорожки



многое глючит при низких настройках
Старый 01.02.2007, 13:36
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
вот есть дота 5.60b, и вообще здесь есть все доты до 6.37
Старый 01.02.2007, 15:11
deemon12

offline
Опыт: 7,563
Активность:
p01nTT, а мне кажется, что это ваще не тень. Я для интереса пробовал создать такой эффект на триггерах. Давал юниту абилку "москиты", УБИРАЛ ТЕНЬ, вместо модели ставил глоу, цвет этого юнита ставил черный, настраивал размер. Далее каждые 0.4 сек. создавал юнитов этого типа в точке нахождения героя. Все кульно работало.
Старый 01.02.2007, 21:57
adic3x

offline
Опыт: 108,439
Активность:
Вот у мну такой вопрос -открывая код .38b версии (за неохотой скачивать .40) и:
Код:
function R4 takes nothing returns nothing
    local location HG=GetUnitLoc(GetTriggerUnit())
    local location lg
    set bj_forLoopAIndex=1
    set bj_forLoopAIndexEnd=16
    loop
        exitwhen bj_forLoopAIndex>bj_forLoopAIndexEnd
        call CreateNUnitsAtLoc(1,'e00E',GetOwningPlayer(GetTriggerUnit()),HG,bj_UNIT_FACING)
        call UnitAddAbility(bj_lastCreatedUnit,'A084')
        call SetUnitAbilityLevelSwapped('A084',bj_lastCreatedUnit,GetUnitAbilityLevelSwapped(  'A03Z',GetTriggerUnit()))
        set lg=PolarProjectionBJ(HG,100.,(22.5*I2R(bj_forLoopAIndex)))
        call IssuePointOrderByIdLoc(bj_lastCreatedUnit,852555,lg)
        call RemoveLocation(lg)
        set bj_forLoopAIndex=bj_forLoopAIndex+1
    endloop
    call RemoveLocation(HG)
endfunction
Собсно почему они юзают именно
Код:
function CreateNUnitsAtLoc takes integer count, integer unitId, player whichPlayer, location loc, real face returns group
    call GroupClear(bj_lastCreatedGroup)
    loop
        set count = count - 1
        exitwhen count < 0
        call CreateUnitAtLocSaveLast(whichPlayer, unitId, loc, face)
        call GroupAddUnit(bj_lastCreatedGroup, bj_lastCreatedUnit)
    endloop
    return bj_lastCreatedGroup
endfunction
А не
Код:
CreateUnitAtLoc
Я не говорю даже о
Код:
CreateUnit
Ведь использование корявых БЖ думаю сдесь совсем неуместно, и локалку они обнулять неспешат... Или тут есть какойто тайный смысл... Или дота внатуре фуфло???
Старый 02.02.2007, 22:51
DioD

offline
Опыт: 45,134
Активность:
Ибо фрог мудаг.
Лучше найти спеллы теня, это чел такой чёрный, так это вовсе ужос.
Старый 03.02.2007, 00:39
Ответ

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

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

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

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



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