找回密码
 点一下
查看: 2335|回复: 12

Blaze[非常方便移植-游戏视频已经补上]

  [复制链接]
发表于 2007-12-16 22:29:27 | 显示全部楼层 |阅读模式
http://www.tudou.com/v/asrfwXXE34E视频上传完毕
[codes=jass]
scope Blaze
globals
private constant integer abil_id='A000'//释放魔法相应的技能
private constant real int=.025 //释放技能动作时间
private constant integer dummy_id='n000'//创建出来的魔法效果
private constant integer max_missiles=6
private constant real start_dist=150. //释放技能释放的距离
private constant real end_height=280. //释放技能旋转的高度
private constant real twirl_time=1.  
private constant real twirl_speed=5.  
private constant real speed=15.  //创建出来的魔法效果移动速度
private constant boolean new_target=true//原攻击目标死亡是否寻找新的目标(默认 是)
private constant real height_diff=35.
private constant attacktype a_type=ATTACK_TYPE_MAGIC //根据自己的需要可以自行修改
private constant damagetype d_type=DAMAGE_TYPE_FIRE  //根据自己的需要可以自行修改
endglobals
private function damage takes integer lvl returns real
return lvl*25. //每个攻击的伤害
endfunction
private function range takes integer lvl returns real
return(lvl*50.)+750.//攻击的距离
endfunction
private function count takes integer lvl returns integer
return 4+lvl  //魔法火球能够创建来的个数
endfunction
globals
private unit U=null
private group G=CreateGroup()
private timer Tball=CreateTimer()
private integer Total1=0
private integer Total2=0
private Blaze_data1 array structArray1
private Blaze_data2 array structArray2
public trigger Trigger=CreateTrigger()
endglobals
private function ABU takes unit a,unit b returns real
return bj_RADTODEG*Atan2(GetUnitY(b)-GetUnitY(a),GetUnitX(b)-GetUnitX(a))
endfunction
private function DBU takes unit a,unit b returns real
return SquareRoot(Pow(GetUnitX(b)-GetUnitX(a),2)+Pow(GetUnitY(b)-GetUnitY(a),2))
endfunction
private function Filt takes nothing returns boolean
return GetWidgetLife(GetFilterUnit())>.405 and IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(U))==true
endfunction
struct Blaze_data2
unit ball=null
unit targ=null
real height=end_height
integer lvl=0
method Start takes unit ball,integer lvl returns nothing
set .ball=ball
set .targ=GroupPickRandomUnit(G)
set .lvl=lvl
endmethod
method Effects takes nothing returns nothing
local real ang=ABU(.ball,.targ)
call SetUnitX(.ball,GetUnitX(.ball)+speed*Cos(ang*bj_DEGTORAD))
call SetUnitY(.ball,GetUnitY(.ball)+speed*Sin(ang*bj_DEGTORAD))
call SetUnitFacing(.ball,ang)
set .height=.height-10.
if .height<GetUnitFlyHeight(.targ)+height_diff then
set .height=GetUnitFlyHeight(.targ)+height_diff
endif
call SetUnitFlyHeight(.ball,.height,0.0)
endmethod
method Update takes integer i returns nothing
set structArray2=structArray2[Total2]
set Total2=Total2-1
endmethod
method onDestroy takes nothing returns nothing
if .targ!=null then
call UnitDamageTarget(.ball,.targ,damage(.lvl),false,false,a_type,d_type,null)
endif
call KillUnit(.ball)
endmethod
endstruct
struct Blaze_data1
integer runs=0
unit tower=null
unit array ball[max_missiles]
real array ang[max_missiles]
real xtower
real ytower
integer total=0
real increment=0.
real change=0.
real Hchange=0.
integer total_runs=0
method Start takes unit tower returns nothing
local integer i=1
local real x=GetUnitX(tower)
local real x2
local real y=GetUnitY(tower)
local real y2
local player p=GetOwningPlayer(tower)
set .total=count(GetUnitAbilityLevel(tower,abil_id))
set .increment=360/.total
set .total_runs=R2I(twirl_time/int)
set .change=start_dist/.total_runs
set .Hchange=end_height/.total_runs
loop
exitwhen i>.total
set .ang=i*.increment
set x2=x+start_dist*Cos(.ang*bj_DEGTORAD)
set y2=y+start_dist*Sin(.ang*bj_DEGTORAD)
set .ball=CreateUnit(p,dummy_id,x2,y2,0.)
set i=i+1
endloop
set .tower=tower
set .xtower=x
set .ytower=y
endmethod
method Effects takes nothing returns nothing
local integer i=1
local real height=.runs*.Hchange
local real distance=start_dist-(.runs*.change)
loop
exitwhen i>.total
set .ang=.ang+twirl_speed
call SetUnitX(.ball,.xtower+distance*Cos(.ang*bj_DEGTORAD))
call SetUnitY(.ball,.ytower+distance*Sin(.ang*bj_DEGTORAD))
call SetUnitFlyHeight(.ball,height,0.0)
set i=i+1
endloop
endmethod
method Update takes integer i returns nothing
set structArray1=structArray1[Total1]
set Total1=Total1-1
endmethod
method onDestroy takes nothing returns nothing
local integer i=1
local Blaze_data2 dat
local integer lvl
if GetWidgetLife(.tower)<.405 then
loop
exitwhen i>.total
call KillUnit(.ball)
set i=i+1
endloop
else
set lvl=GetUnitAbilityLevel(.tower,abil_id)
call GroupClear(G)
set U=.tower
call GroupEnumUnitsInRange(G,.xtower,.ytower,range(lvl),Condition(function Filt))
loop
exitwhen i>.total
set dat=Blaze_data2.create()
call dat.Start(.ball,lvl)
set Total2=Total2+1
set structArray2[Total2]=dat
set i=i+1
endloop
endif
endmethod
endstruct
private function Conditions takes nothing returns boolean
return GetSpellAbilityId()==abil_id
endfunction
private function Movement takes nothing returns nothing
local integer i=1
local Blaze_data1 dat1
local Blaze_data2 dat2
loop
exitwhen i>Total1
set dat1=structArray1
set dat1.runs=dat1.runs+1
if dat1.runs>dat1.total_runs or GetWidgetLife(dat1.tower)<.405 then
call dat1.destroy()
call dat1.Update(i)
set i=i-1
else
call dat1.Effects()
endif
set i=i+1
endloop
set i=1
loop
exitwhen i>Total2
set dat2=structArray2
if dat2.targ==null or GetWidgetLife(dat2.targ)<.405 then
if new_target then
call GroupClear(G)
set U=dat2.ball
call GroupEnumUnitsInRange(G,GetUnitX(dat2.ball),GetUnitY(dat2.ball),range(dat2.lvl),Condition(function Filt))
set dat2.targ=GroupPickRandomUnit(G)
if dat2.targ==null then
call dat2.destroy()
call dat2.Update(i)
endif
set i=i+1
else
call dat2.destroy()
call dat2.Update(i)
set i=i-1
endif
elseif DBU(dat2.ball,dat2.targ)<speed then
call dat2.destroy()
call dat2.Update(i)
set i=i-1
else
call dat2.Effects()
endif
set i=i+1
endloop
if Total1==0 and Total2==0 then
call PauseTimer(Tball)
endif
endfunction
private function Actions takes nothing returns nothing
local unit u=GetTriggerUnit()
local Blaze_data1 dat=Blaze_data1.create()
if Total1==0 and Total2==0 then
call TimerStart(Tball,int,true,function Movement)
endif
call dat.Start(u)
set Total1=Total1+1
set structArray1[Total1]=dat
set u=null
endfunction
public function InitTrig takes nothing returns nothing
call TriggerRegisterAnyUnitEventBJ(Trigger,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(Trigger,Condition(function Conditions))
call TriggerAddAction(Trigger,function Actions)
endfunction
endscope
[/codes]

Blaze.w3x

35 KB, 下载次数: 77

评分

参与人数 1威望 +10 收起 理由
sxlrose + 10 原创内容

查看全部评分

 楼主| 发表于 2007-12-16 22:38:51 | 显示全部楼层
55555555555555555唯一一次下载 是我自己点的 - -

00000.jpg
回复

使用道具 举报

发表于 2007-12-17 12:58:17 | 显示全部楼层
JASS的?JASS肯定没人下的。这技能其实可以用T做的何必用什么J的能?
回复

使用道具 举报

 楼主| 发表于 2007-12-17 13:09:35 | 显示全部楼层
...........额。。。这个和T技能根本是两码事。。。。。
这个非常方便的修改。。。整个技能都是用触发完成的。。。和那些T创建补助单位根本不是一个的。。。。。。下载下来然后仔细看下代码就能明白了。。。。
[codes=jass]
private constant attacktype a_type=ATTACK_TYPE_MAGIC //根据自己的需要可以自行修改
[/codes]
这个是攻击方式。。。可以自己修改。。。。。方便吧
回复

使用道具 举报

发表于 2007-12-17 17:07:53 | 显示全部楼层
=.=....强大的LZ..强大的地球人..
回复

使用道具 举报

发表于 2007-12-17 17:27:24 | 显示全部楼层
做得不错支持下
ps:我在wc3c上下过了
回复

使用道具 举报

发表于 2007-12-17 18:20:02 | 显示全部楼层
引用第4楼OrS于2007-12-17 17:07发表的  :
=.=....强大的LZ..强大的地球人..
这篇东西很强大,但并且楼主所做.
国内还不习惯于使用Vjass.
回复

使用道具 举报

261001126 该用户已被删除
发表于 2007-12-17 20:34:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2007-12-18 23:29:38 | 显示全部楼层
范围大火
全局变量
私人常数整数abil_id = ' a000 ' / /释放魔法相应的技能
私人常数真正诠释=. 025 / /释放技能动作时间
私人常数整数dummy_id = ' n000 ' / /创建出来的魔法效果
私人常数整数max_missiles = 6
私人恒实start_dist = 150 。 / /释放技能释放的距离
私人恒实end_height = 280 。 / /释放技能旋转的高度
私人恒实twirl_time = 1 。
私人恒实twirl_speed = 5 。
私人常数实时速度= 15 。 / /创建出来的魔法效果移动速度
私人常数布尔new_target =真/ /原攻击目标死亡是否寻找新的目标(默认是)
私人恒实height_diff = 35 。
私人常数attacktype a_type = attack_type_magic / /根据自己的需要可以自行修改
私人常数damagetype d_type = damage_type_fire / /根据自己的需要可以自行修改
endglobals
私营功能损害需整数拉特回报实质
返回拉特* 25 。 / /每个攻击的伤害
endfunction
私营职能范围需整数拉特回报实质
返回(拉特* 50 ) 750 。 / /攻击的距离
endfunction
私营功能计数需整数拉特回报整数
返回4 +拉特/ /魔法火球能够创建来的个数
endfunction
全局变量
私人股在美国无效
私人G组= creategroup ( )
私人计时器tball = createtimer ( )
私人整数total1 = 0
私人整数total2 = 0
私人blaze_data1阵列structarray1
私人blaze_data2阵列structarray2
公共触发触发= createtrigger ( )
endglobals
私营功能阿布需单位,单元B回报实质
返回bj_radtodeg * atan2 ( getunity (二) - getunity (一) , getunitx (二) - getunitx ( a )条)
endfunction
私营功能dbu需单位,单元B回报实质
返回squareroot (战俘( getunitx (二) - getunitx (一) , 2 ) +战俘( getunity (二) - getunity (一) , 2 ) )
endfunction
私营函数滤波器需要什么回报布尔
返回getwidgetlife ( getfilterunit ())>. 405和isunitenemy ( getfilterunit ( ) , getowningplayer ( u )的) ==真
endfunction
结构blaze_data2
单位球=无效
单位targ =无效
真正的高度= end_height
整数拉特= 0
法开始考虑单位球,整数拉特回报无关
一套球=球
定。 targ = grouppickrandomunit (七)
定。拉特=拉特
endmethod
方法的影响,采取什么回报无关
当地实际昂=阿布( 。舞会。 targ )
请setunitx (球, getunitx (球) +速度*产地来源证(昂* bj_degtorad ) )
请setunity (球, getunity (球) +速度*单仲偕(昂* bj_degtorad ) )
请setunitfacing (球,昂)
设置身高=.身高, 10 。
如果身高< getunitflyheight ( 。 targ ) + height_diff则
定。高度= getunitflyheight ( 。 targ ) + height_diff
endif
请setunitflyheight (球,身高, 0.0 )
endmethod
方法更新需整数i回报无关
一套structarray2 [一] = structarray2 [ total2 ]
一套total2 = total2 - 1
endmethod
方法ondestroy采取什么回报无关
如果。 targ ! =零,然后
请unitdamagetarget ( 。舞会。 targ ,损坏( 。拉特) ,假的,假的, a_type , d_type ,无效)
endif
请killunit (球)
endmethod
endstruct
结构blaze_data1
整数背道而驰= 0
单位塔=无效
单位阵球[ max_missiles ]
真正阵昂[ max_missiles ]
真正xtower
真正ytower
整数总数= 0
真正的增量= 0 。
真正的改变= 0 。
真正hchange = 0 。
整数total_runs = 0
法开始考虑股塔回报无关
本地整数i = 1的
当地真正的X = getunitx (塔)
当地实际x2
当地真正为Y = getunity (塔)
当地实际Y2型
本土球员P值getowningplayer (塔)
定。总数=计数( getunitabilitylevel (塔楼, abil_id ) )
定。增量= 360/.total
定。 total_runs = r2i ( twirl_time /诠释)
定。变化= start_dist / .total_runs
定。 hchange = end_height / .total_runs
环路
exitwhen i > 。总数
定。昂[一] = *.增量
一套χ2 =的X + start_dist *产地来源证( 。昂[一] * bj_degtorad )
一套Y2型= y的+ start_dist *单仲偕( 。昂[一] * bj_degtorad )
一套球[一] = createunit (磷, dummy_id , x2 , Y2型, 0 ) 。
盘我= +1
endloop
定。大楼=塔
定。 xtower = x
定。 ytower = y的
endmethod
方法的影响,采取什么回报无关
本地整数i = 1的
当地实际高度=.背道而驰*. hchange
当地实际距离= start_dist - ( 。背道而驰*.变更)
环路
exitwhen i > 。总数
定。昂[一] =.昂[一] + twirl_speed
请setunitx (球[一] , 。 xtower +距离*产地来源证( 。昂[一] * bj_degtorad ) )
请setunity (球[一] , 。 ytower +距离*单仲偕( 。昂[一] * bj_degtorad ) )
请setunitflyheight (球[一] ,身高0.0 )
盘我= +1
endloop
endmethod
方法更新需整数i回报无关
一套structarray1 [一] = structarray1 [ total1 ]
一套total1 = total1 - 1
endmethod
方法ondestroy采取什么回报无关
本地整数i = 1的
当地blaze_data2的DAT
本地整数拉特
如果getwidgetlife ( 。塔楼) < 0.405 ,然后
环路
exitwhen i > 。总数
请killunit (球[一] )
盘我= +1
endloop
否则
一套拉特= getunitabilitylevel ( 。大楼abil_id )
请groupclear (七)
设u =.塔
请groupenumunitsinrange的( g , 。 xtower , 。 ytower ,范围(拉特) ,条件(函数滤波器) )
环路
exitwhen i > 。总数
设置的DAT = blaze_data2.create ( )
请dat.start (球[一] ,拉特)
一套total2 = total2 +1
一套structarray2 [ total2 ] =的DAT
盘我= +1
endloop
endif
endmethod
endstruct
私营功能条件采取什么回报布尔
返回getspellabilityid ( ) == abil_id
endfunction
私营功能移动,没有什么回报无关
本地整数i = 1的
当地blaze_data1 dat1
当地blaze_data2 dat2
环路
exitwhen i > total1
一套dat1 = structarray1 [一]
一套dat1.runs = dat1.runs +1
如果dat1.runs > dat1.total_runs或getwidgetlife ( dat1.tower ) < 0.405 ,然后
请dat1.destroy ( )
请dat1.update (一)
盘我= - 1
否则
请dat1.effects ( )
endif
盘我= +1
endloop
盘我= 1
环路
exitwhen i > total2
一套dat2 = structarray2 [一]
如果dat2.targ ==无效或getwidgetlife ( dat2.targ ) < 0.405 ,然后
如果new_target则
请groupclear (七)
设在美国dat2.ball
请groupenumunitsinrange的( g , getunitx ( dat2.ball ) , getunity ( dat2.ball ) ,范围( dat2.lvl ) ,条件(函数滤波器) )
一套dat2.targ = grouppickrandomunit (七)
如果dat2.targ ==无效,然后
请dat2.destroy ( )
请dat2.update (一)
endif
盘我= +1
否则
请dat2.destroy ( )
请dat2.update (一)
盘我= - 1
endif
elseif dbu ( dat2.ball , dat2.targ ) <速度,然后
请dat2.destroy ( )
请dat2.update (一)
盘我= - 1
否则
请dat2.effects ( )
endif
盘我= +1
endloop
如果total1 == 0和total2 == 0 ,然后
请pausetimer ( tball )
endif
endfunction
私营功能的行动采取什么回报无关
本地股在美国gettriggerunit ( )
当地blaze_data1的DAT = blaze_data1.create ( )
如果total1 == 0和total2 == 0 ,然后
请timerstart ( tball ,诠释,真实,功能运动)
endif
请dat.start ( u )的
一套total1 = total1 +1
一套structarray1 [ total1 ] =的DAT
设在美国无效
endfunction
公共职能inittrig采取什么回报无关
请triggerregisteranyuniteventbj (触发器, event_player_unit_spell_effect )
请triggeraddcondition (触发条件(函数条件) )
请triggeraddaction (触发器,函数行动)
endfunction
endscope



天...麻木...
回复

使用道具 举报

发表于 2007-12-19 01:06:35 | 显示全部楼层
ls………………是在干嘛?
vjass的啊………………
回复

使用道具 举报

发表于 2008-1-3 20:58:37 | 显示全部楼层
完全看不懂
回复

使用道具 举报

发表于 2008-1-4 18:32:07 | 显示全部楼层
J盲路过```
回复

使用道具 举报

发表于 2008-1-4 18:56:55 | 显示全部楼层
又懒又怕麻烦的飘过`
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-25 03:34 , Processed in 0.102759 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表