秋瀞葉 秋瀞葉
唯一的因果将这意志带回最初始之地
关注数: 56 粉丝数: 1,267 发帖数: 2,389 关注贴吧数: 8
(>ω・)☆ UI编辑器beta版发布~ ☆(・ω<) 什么是UI编辑器呢, 就是可以编辑UI的编辑器啦.. 至于编辑UI有什么用 , 这个我也说不清啦=-= 下载地址: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fpan.baidu.com%2Fnetdisk%2Fsinglepublic%3Ffid%3D94579_3217509020&urlrefer=f0481bdf5a37bd0364ffde12b0e93a5e 关键字: UI 自制UI 自定义函数做成触发器动作 提示: 这个工具仅仅是让触发器可以call你的函数, 你的函数必须是在地图里存在的, 不能像YDWE,DNFWE那样集成一个动作哦. 下面是简单的截图介绍 程序主界面就是这样: 可以编辑的内容有五项.分别是, 目录,变量类型,预设值,可用做参数的函数,以及事件条件动作. 一开始的时候,选择打开UI文件,然后选择TriggerData.txt, TriggerString.txt 成功打开后就可以看到如下界面. (什么? 不知道这两个文件在哪里?? 看图里的标题: Warcraft III\UI 文件夹下哦 (如果你是用YDWE的话...是在 YDWE\mpq\yd.mpq 这个mpq里,双击一个动作, 或者右键->编辑 的话, 可以打开来编辑 在编辑的状态下, 可以直接修改文本,和默认值(也就是新建动作的时候默认选好的值)点击右上角的修改参数类型, 就可以进入函数的修改部分, 可以修改函数名, 文本,描述, 以及各个参数的类型, 没有数据时显示的文本等等.那么现在来让我们新加一个函数, 什么呢,, 比如GroupEnumUnitsInRange吧.. 虽然在J里经常用到,但是T里没有这个呢. 返回到主界面, 点击右上角的添加->更改参数类型 这里有个功能就是可以直接从函数的function那一行来读取哦.读取之后, 会自动设置好函数名, 以及参数列表,这样就能省去很多时间w然后再输入文本,描述什么的(描述可以不输入) 修改几个无数据时文本.. (当然也可以不修改)确认后就可以看到, 参数已经添加好了,然后, 点击各个+号,来输入一些说明文本吧w嗯,然后可以点击红色的参数来设置默认值, 当然也可以不设置0 0然后,添加, 就添加到动作列表里了, 这时候你可以拖动动作来调整位置w 做好之后就可以保存了, 第一次的话建议备份, 选 保存(自动备份), 如果已经有备份的话就可以直接保存了. 虽然自动备份安全, 但是每次一备份就是700k呢w 然后, 打开WE,来看看新动作吧=-=下载地址: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fpan.baidu.com%2Fnetdisk%2Fsinglepublic%3Ffid%3D94579_3217509020&urlrefer=f0481bdf5a37bd0364ffde12b0e93a5e 关键字: UI 自制UI 自定义函数做成触发器动作
走动起来吧! 路人们 一个城市里如果没有走路的人的话, 感觉总是很奇怪吧. 特意为自己写了个路人系统- - 因为是简单的系统所以使用时要求很严格. 严格按照这个顺序来调用:开始记录->添加路径点->记录完毕 添加单位在任何时候都可以,但是只有线路"记录完毕"时才会让单位选择离的最近的路径点作为初始点~ 然后, 单位会按照添加的点的顺序走, library NPCWALK // local integer line=NPCwalk_newline_start() //开始记录一条新线路 // call NPCwalk_newloc(x,y) //添加若干新点 // call NPCwalk_newline_ready() //记录完毕 // call NPCwalk_AddUnit(line,u) //向线路添加单位(自动找寻距离单位最近的初始点,线路完毕时添加) // call NPCwalk_Start() //系统全部开始 globals     // --     timer npc_walk_check_timer=CreateTimer()     real npc_walk_check_range=500.     real npc_walk_check_timeout=4.     // -- group index     integer npc_walk_group_index=0     group array npc_walk_groups     integer array npc_walk_group_loc_index_Min     integer array npc_walk_group_loc_index_Max     // -- loc index     integer npc_walk_loc_index=0     real array npc_walk_loc_x     real array npc_walk_loc_y     // --     integer npc_walk_group_temp_index endglobals function DistanceBetweenUnitAndCoords takes unit u,real x,real y returns real     local real dx=GetUnitX(u)-x     local real dy=GetUnitY(u)-y     return SquarRoot(dx*dx+dy*dy) //这里是平方根函数 百度和谐了发不出 endfunction function NPCwalk_AddUnit takes integer line,unit u returns nothing     local integer min=npc_walk_group_loc_index_Min[line]     local integer max=npc_walk_group_loc_index_Max[line]     local real dis     local real oldDis=50000.     local integer id=min     loop         exitwhen min>max         set dis=DistanceBetweenUnitAndCoords(u,npc_walk_loc_x[min],npc_walk_loc_y[min])         if dis<oldDis then             set oldDis=dis             set id=min         endif         set min=min+1     endloop     call SetUnitUserData(u,id)     call GroupAddUnit(npc_walk_groups[line],u) endfunction function NPCwalk_CheckAction takes nothing returns nothing     local integer index=npc_walk_group_temp_index     local unit u=GetEnumUnit()     local integer id=GetUnitUserData(u)     if IsUnitInRangeXY(u,npc_walk_loc_x[id],npc_walk_loc_y[id],npc_walk_check_range) then
弹幕抵消效果的一个可行方案(消弹) 主要就是讲一个可行的方案来解决想制作消弹效果,但是"蝗虫"技能又不能满足条件的问题 弹幕要有以下属性: 1. 无法通过鼠标选择到 (不能被点击/框选 选择) 2. 按ALT不能看到血条 3. 可以被普通的单位组选择动作选到. 如果用蝗虫的话,是无法被普通的单位组选择动作选到的.. 经过一番探索,发现在单位在死亡时(被自动删除之前), 完全符合条件.. 于是,可以用创建尸体(CreateCorpse)来取代创建单位(CreateUnit) 说明一下 一般的弹幕单位的模型,不会有肉态尸体和骨态尸体的动作的,所以和用创建单位的效果相同. 但是有几个注意的地方就是, 1.这样创建出来的尸体不能被再次杀死(可以直接播放单位的death动作) 2.不能用生命来判断一个单位是否被消掉了.因为都是0 3.这样的单位必须改成"可腐化的" 4.平衡常数里的肉态+骨态尸体的消退时间不能太小.. 不然弹幕飞到一半就被删除掉了.. function test takes nothing returns nothing     call BJDebugMsg(GetUnitName(GetEnumUnit())) endfunction function Trig_ESC2_Actions takes nothing returns nothing     local group g     local real x=GetUnitX(gg_unit_Hpal_0003)     local real y=GetUnitY(gg_unit_Hpal_0003)     call CreateCorpse(Player(0),'ewsp', x,y,0 )     set g=CreateGroup()     call GroupEnumUnitsInRange(g,x,y,100,null)     call ForGroup(g,function test)     call DestroyGroup(g) endfunction
Objects 空间物体模型函数改进版(可以做变形金刚了) // Objects 空间物体模型函数 // 可建立Objects对象, 并向其中添加点, 添加的点会随物体的转动而转动 // 可以将一个object连接到另外一个上,这个功能可以做出由多个部分组成的物体. // 子物体会随父物体运动,包括方向什么的- - // 有时间的时候会封装个动作函数,嗯嗯. // ------ 常用操作 // NewObject(x,y,z) //新建一个物体, 返回物体obj值 // DeleteObject(obj) //删除物体 // SetObjectPosition(obj,x,y,z) //设置物体坐标(移动物体) // ObjectCreateLoc(obj,x,y,z) //创建一个点然后添加到物体,与中心点相对坐标x,y,z,返回loc在物体内的index // GetObjectLocX(obj,index) //获得物体第index个点的坐标x,y,z // GetObjectLocY(obj,index) // GetObjectLocZ(obj,index) // ObjectAttachObject(whichObj,toObj) //将whichObj绑定到toObj上,绑定后将当前朝向作为默认朝向,并且会随着toObj的移动而改变默认朝向 // ------ 操作物体 // AdjustObjectRotationX(obj,rad) //调整物体x,y,z轴旋转角度 // AdjustObjectRotationY(obj,rad) // AdjustObjectRotationZ(obj,rad) // ResetObjectRotation(obj) //重置物体到默认旋转角度 // SetObjectRotation(obj,ax,ay,az) //设置物体x,y,z轴旋转角度(实际上是重置+调整) // AdjustObjectScale(obj,scale) //调整物体缩放倍率(会被重置动作恢复) // ------ 改变物体默认性质 // AdjustObjectDefaultRotationX(baseobj,obj,a) //设置物体x,y,z轴的默认旋转角度(一般不会用到) // AdjustObjectDefaultRotationY(baseobj,obj,a) // baseobj:作为旋转轴的obj 非绑定的使用自身obj值 // AdjustObjectDefaultRotationZ(baseobj,obj,a) // ResetObjectDefaultRotation(obj) //重置默认旋转角度到标准x,y,z轴朝向 // SetObjectDefaultRotation(obj,ax,ay,az) //设置物体默认的x,y,z轴旋转角度,实际是重置+调整 // ------ 有关点和物体的操作 // CreateLoc(x,y,z) //创建一个新的点,返回loc值,创建的点可以被添加到物体内 // GetObjectOriginLoc(obj) //获得物体中心点 返回loc值 // MoveLoc(loc) //改变点的坐标x,y,z // GetLocX(loc) //获得点坐标x,y,z // GetLocY(loc) // GetLocZ(loc) // GetObjectX(obj) //获得物体中心点坐标x,y,z // GetObjectY(obj) // GetObjectZ(obj) // ObjectAddLoc(obj,loc) //向物体内添加一个点 loc // ObjectCountLoc(obj) //获得物体点的个数 // GetObjectLoc(obj,index) //获得物体第index个点,返回loc值 globals     real glrf_x=0.     real glrf_y=0.     real glrf_z=0.     hashtable tdo_loc_ht=InitHashtable()     hashtable tdo_obj_ht=InitHashtable() endglobals //glRotatef function Rotatef takes real old_x,real old_y,real old_z,real angle,real x,real y,real z returns nothing     local real cos=Cos(angle)     local real sin=Sin(angle)     set glrf_x=(x*x*(1-cos)+cos)*old_x+(x*y*(1-cos)-z*sin)*old_y+(x*z*(1-cos)+y*sin)*old_z     set glrf_y=(y*y*(1-cos)+cos)*old_y+(y*z*(1-cos)-x*sin)*old_z+(y*x*(1-cos)+z*sin)*old_x     set glrf_z=(z*z*(1-cos)+cos)*old_z+(x*z*(1-cos)-y*sin)*old_x+(y*z*(1-cos)+x*sin)*old_y endfunction //objects function AdjustObjectDefaultRotationX takes integer baseobj,integer obj,real a returns nothing
UnitMaxPriorityQueue 单位最大优先队列 // 最大优先队列 顶部元素总是最大值 (处理大规模数据时效率很高) // // 按比重(value)加入单位, 可以得到(也只能得到)比重最大的单位 // 因为数组的限制所以最多8191个数据 // 因为全局变量所以无法局部使用 (有需要可以改成hashtable结构) // 即使已经有8000个元素, 加入或删除一个比重最大的新元素时,只需循环12次 // UnitMaxPriorityQueue_Clear() 清空队列 // UnitMaxPriorityQueue_Size() 容量 // UnitMaxPriorityQueue_TopValue() 顶部元素值 // UnitMaxPriorityQueue_TopUnit() 顶部元素单位 // UnitMaxPriorityQueue_PopValue() 删除顶部元素并返回顶部值 // UnitMaxPriorityQueue_PopUnit() 删除顶部元素并返回顶部单位 // UnitMaxPriorityQueue_Push(value,unit) 推入一个值 globals     real array maxpq_value     unit array maxpq_unit     integer maxpq_top=0 endglobals function UnitMaxPriorityQueue_Clear takes nothing returns nothing     set maxpq_top=0 endfunction function UnitMaxPriorityQueue_Size takes nothing returns integer     return maxpq_top endfunction function UnitMaxPriorityQueue_TopValue takes nothing returns real     return maxpq_value[1] endfunction function UnitMaxPriorityQueue_TopUnit takes nothing returns unit     return maxpq_unit[1] endfunction function UnitMaxPriorityQueue_swap takes integer i1,integer i2 returns nothing     local real r=maxpq_value[i1]     local unit u=maxpq_unit[i1]     set maxpq_value[i1]=maxpq_value[i2]     set maxpq_unit[i1]=maxpq_unit[i2]     set maxpq_value[i2]=r     set maxpq_unit[i2]=u     set u=null endfunction function UnitMaxPriorityQueue_PopUnit takes nothing returns unit     local unit u=maxpq_unit[1]     local integer pk=1     local integer ck_a     local integer ck_b     if maxpq_top>0 then         set maxpq_value[1]=maxpq_value[maxpq_top]         set maxpq_top=maxpq_top-1         loop             set ck_a=pk*2             set ck_b=ck_a+1             if ck_a==maxpq_top then                 if maxpq_value[pk]<maxpq_value[ck_a] then                     call UnitMaxPriorityQueue_swap(pk,ck_a)                 endif                 exitwhen true             else
发个图片弹幕函数~~ // ------------- //real MOVEIMAGETIMER_TIMEOUT=0.04 //! textmacro imageBulletsFunction takes NAME globals     image array imageBullet_$NAME$_images     timer imageBullet_$NAME$_timer     integer imageBullet_$NAME$_Max=0     integer imageBullet_$NAME$_imageMax=0     integer array imageBullet_$NAME$_id     unit array imageBullet_$NAME$_spellunit     real array imageBullet_$NAME$_x     real array imageBullet_$NAME$_y     real array imageBullet_$NAME$_z     real array imageBullet_$NAME$_speed_x     real array imageBullet_$NAME$_speed_y     real array imageBullet_$NAME$_distance     real array imageBullet_$NAME$_speed     string array imageBullet_$NAME$_effpath     string array imageBullet_$NAME$_targeteffpath     real array imageBullet_$NAME$_collision     real array imageBullet_$NAME$_range     integer udg_$NAME$_Max = 0     integer array udg_$NAME$_Flu endglobals function Create_$NAME$_Id takes nothing returns integer     set udg_$NAME$_Max = udg_$NAME$_Max + 1     debug call BJDebugMsg("$NAME$_Max_ID="+I2S(udg_$NAME$_Max))     if udg_$NAME$_Max>8190 then         call BJDebugMsg("|cffff0000 CreateImageId_$NAME$_error: cannot create id (>8190)|r")         return 0     endif     if udg_$NAME$_Flu[udg_$NAME$_Max] == 0 then         return udg_$NAME$_Max     endif     return udg_$NAME$_Flu[udg_$NAME$_Max] endfunction function Remove_$NAME$_Id takes integer tid returns nothing     set udg_$NAME$_Flu[udg_$NAME$_Max] = tid     set udg_$NAME$_Max = udg_$NAME$_Max - 1     debug call BJDebugMsg("$NAME$_Max_ID="+I2S(udg_$NAME$_Max)) endfunction function imageBullet_$NAME$_Preload takes nothing returns nothing     local integer c=imageBullet_$NAME$_imageMax+IMAGE_BULLET_PRELOAD_AMOUNT     debug call BJDebugMsg("Image_$NAME$ is preloading")     if c>8190 then         call BJDebugMsg("|cffff0000 Image_$NAME$_error: preload is failed|r")         return     endif     loop         set imageBullet_$NAME$_imageMax=imageBullet_$NAME$_imageMax+1         exitwhen imageBullet_$NAME$_imageMax>c         set imageBullet_$NAME$_images[imageBullet_$NAME$_imageMax]=CreateImage(IMAGE_BULLETS_paths[$NAME$],IMAGE_BULLETS_size[$NAME$],IMAGE_BULLETS_size[$NAME$],IMAGE_BULLETS_size[$NAME$],0,0,0,0,0,0,2)
简单的移动类函数... 首先是timerdatasystem... 下面每个函数都需要的 library TDS initializer TDS_init globals     integer udg_Max = 0     integer array udg_Flu     integer udg_TDSid     timer array udg_Timer     boolean array udg_DS_Used //占用判定     real MOVETIMER_TIMEOUT=0.02 //移动函数循环时间     //_____________________可用数据______________________________     real array udg_DS_angle     real array udg_DS_speed     real array udg_DS_distance     real array udg_DS_x     real array udg_DS_y     real array udg_DS_speed_x     real array udg_DS_speed_y     integer array udg_DS_times     boolean array udg_DS_hastarget     player array udg_DS_player     effect array udg_DS_effect     string array udg_DS_effectPath     unit array udg_DS_whichUnit     //___________________________________________________________ endglobals function CreateTimerId takes nothing returns integer     set udg_Max = udg_Max + 1     if udg_Flu[udg_Max] == 0 then         set udg_DS_Used[udg_Max] = true         return udg_Max     endif     set udg_DS_Used[udg_Flu[udg_Max]] = true     return udg_Flu[udg_Max] endfunction function GetTimerId takes nothing returns integer     return GetHandleId(GetExpiredTimer()) - udg_TDSid endfunction function DestroyTimerId takes integer tid returns nothing     if udg_DS_Used[tid] then //只对占用的id操作         call PauseTimer(udg_Timer[tid])         set udg_Flu[udg_Max] = tid         set udg_DS_Used[tid] = false         set udg_Max = udg_Max - 1         debug call BJDebugMsg("TimerIdMax="+I2S(udg_Max))     endif endfunction function TDS_init takes nothing returns nothing     local integer c = 1     local location l = Location(0,0)     set udg_TDSid = GetHandleId(l)     call RemoveLocation(l)     set l = null     loop         exitwhen c >= 8000         set udg_Timer[c] = CreateTimer()         set c = c + 1     endloop endfunction endlibrary
1 下一页