魔兽首页最新地图防守地图对抗地图角色剧情TD塔类图标准战役ORPG地图其它地图
魔兽论坛攻略秘籍补丁工具RPG 录像制图教学制图资源魔兽战队新图试玩通魔作坊

您的位置:魔兽争霸U9网 >> 制图教学

通魔之路(WE主讨论区):泡泡演示

作者:shadowfang    文章来源:U9论坛    点击数:    更新时间:2006-8-30 15:17:29

仿泡泡堂的演示。
本来想做成完整地图。不过忙不过来,再加上被人诅咒,此图会XX……
地形随机生成。进游戏后输入t(原本的设想是:可选择地图大小;可选择火地、雪地或草地;地面不可破坏的障碍和可破坏障碍的比例,等等。这几个功能在本图里都还没有,不过稍微扩展一下就可以实现了。)
不完善之处:英雄周围生成的障碍未清理;死亡的障碍仍然会阻挡炸弹;炸弹的位置还有偏差,等等都是体力活(还包括道具设定、掉宝判断等……),实在不想做了……
贴出来好了……
//扩展函数,不用set bj_wantDestroyGroup=true了function ForGroupEx takes group whichGroup, code callback returns nothing    call ForGroup(whichGroup, callback)    call DestroyGroup(whichGroup)endfunction
//判断函数。2种障碍,一种不被摧毁,所在位置也不会发生爆炸。另一种发生爆炸后才停止前进,能被摧毁,不过还没设置对应的物品掉落。function test takes nothing returns nothing    if ( GetDestructableTypeId(GetEnumDestructable()) == 'DTrc' ) then        set udg_stopbao=true    endifendfunctionfunction testu takes nothing returns nothing    if ( GetUnitTypeId(GetEnumUnit()) == 'hwtw' ) then        set udg_stopbao=true    endifendfunction
//爆炸的伤害和效果模拟,不想在地图上画无数个“圈”,于是……function baozha takes integer le ,unit u returns nothing    local integer wl=1    local real ux=GetUnitX(u)    local real uy=GetUnitY(u)    call TriggerSleepAction(5)    call SetUnitTimeScale( u, 0.30 )//放慢炸弹的动画速度    call ExplodeUnitBJ( u )    call UnitDamagePoint( u, 0, 64.00, ux, uy, 100, true, false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS )//用DamagePoint模拟炸弹位置的伤害,不分敌我,伤害值易控制,扩展性好。下面分别模拟4个方向的爆炸。
    set udg_stopbao=false    loop        exitwhen wl>le or udg_stopbao==true//如果炸弹爆炸范围到了或者遇到障碍,就跳出            call EnumDestructablesInCircleBJ( 96, Location(ux+128*wl,uy), function test )            if udg_stopbao==false then                call UnitDamagePoint( u, 0, 64.00, ux+128*wl, uy, 100, true, false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS )                set bj_lastCreatedEffect= AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",ux+128*wl, uy)                call TriggerExecute( gg_trg_Eff )//爆炸特效模拟            endif        call ForGroupEx( GetUnitsInRangeOfLocAll(96.00, Location(ux+128*wl,uy)), function testu )        set wl=wl+1    endloop
    set wl=1    set udg_stopbao=false    loop        exitwhen wl>le or udg_stopbao==true            call EnumDestructablesInCircleBJ( 96, Location(ux-128*wl,uy), function test )            if udg_stopbao==false then                call UnitDamagePoint( u, 0, 64.00, ux-128*wl, uy, 100, true, false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS )                set bj_lastCreatedEffect= AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",ux-128*wl, uy)                call TriggerExecute( gg_trg_Eff )            endif        call ForGroupEx( GetUnitsInRangeOfLocAll(96.00, Location(ux-128*wl,uy)), function testu )        set wl=wl+1    endloop
    set wl=1    set udg_stopbao=false    loop        exitwhen wl>le or udg_stopbao==true            call EnumDestructablesInCircleBJ( 96, Location(ux,uy+128*wl), function test )            if udg_stopbao==false then                call UnitDamagePoint( u, 0, 64.00, ux, uy+128*wl, 100, true, false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS )                set bj_lastCreatedEffect= AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",ux, uy+128*wl)                call TriggerExecute( gg_trg_Eff )            endif        call ForGroupEx( GetUnitsInRangeOfLocAll(96.00, Location(ux,uy+128*wl)), function testu )        set wl=wl+1    endloop
    set wl=1    set udg_stopbao=false    loop        exitwhen wl>le or udg_stopbao==true            call EnumDestructablesInCircleBJ( 96, Location(ux,uy-128*wl), function test )            if udg_stopbao==false then                call UnitDamagePoint( u, 0, 64.00, ux, uy-128*wl, 100, true, false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS )                set bj_lastCreatedEffect= AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",ux, uy-128*wl)                call TriggerExecute( gg_trg_Eff )            endif        call ForGroupEx( GetUnitsInRangeOfLocAll(96.00, Location(ux,uy-128*wl)), function testu )        set wl=wl+1    endloopendfunction
//处理特效的T,某些特效,创建后立即DESTROY是看不到效果的。function Trig_Eff_Actions takes nothing returns nothing    local effect locef=bj_lastCreatedEffect    call TriggerSleepAction( 2.00 )    call DestroyEffect(locef)    set locef=nullendfunction
//===========================================================================function InitTrig_Eff takes nothing returns nothing    set gg_trg_Eff = CreateTrigger(  )    call TriggerAddAction( gg_trg_Eff, function Trig_Eff_Actions )endfunction
//地面纹理设定,这里只设定了草地的。
function Trig_Firstinit_Actions takes nothing returns nothing    set udg_Terrain[1]='Ldrt'    set udg_Terrain[2]='Ldro'    set udg_Terrain[3]='Ldrg'    set udg_Terrain[4]='Lrok'    set udg_Terrain[5]='Lgrs'    set udg_Terrain[6]='Lgrd'    set udg_Terrain[7]='Ldrt'    set udg_Terrain[8]='Ldro'    set udg_Terrain[9]='Ldrg'    set udg_Terrain[10]='Ldrt'endfunction
//===========================================================================function InitTrig_Firstinit takes nothing returns nothing    set gg_trg_Firstinit = CreateTrigger(  )    call TriggerAddAction( gg_trg_Firstinit, function Trig_Firstinit_Actions )endfunction
//输入‘t’随机生成地面文理和障碍,再把英雄周围的生成物REMOVE就完美了
function Trig_t_Actions takes nothing returns nothing    local real tx=-3072    local real ty=-3072    loop        exitwhen tx>3072        loop            exitwhen ty>3072            call SetTerrainType( tx,ty, udg_Terrain[GetRandomInt(1,10)], -1, 1, 1 )            if GetRandomInt(1,10)>8 then            call CreateDestructable( 'DTrc', tx,ty, GetRandomReal(0, 360), 1, -1 )            elseif GetRandomInt(1,10)>6 then            call CreateUnit( Player(15),'hwtw', tx,ty, 270 )            endif        set ty=ty+128        endloop    set ty=-3072    set tx=tx+128    endloopendfunction
//===========================================================================function InitTrig_t takes nothing returns nothing    set gg_trg_t = CreateTrigger(  )    call TriggerRegisterPlayerChatEvent( gg_trg_t, Player(0), "t", true )    call TriggerAddAction( gg_trg_t, function Trig_t_Actions )endfunction
//安置炸弹
function Trig_zhuangdan_Conditions takes nothing returns boolean    if ( not ( GetSpellAbilityId() == 'A000' ) ) then        return false    endif    return trueendfunction
function Trig_zhuangdan_Actions takes nothing returns nothing    set bj_lastCreatedUnit= CreateUnit( GetOwningPlayer(GetTriggerUnit()), 'e000', GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()),0 )    call baozha(4,bj_lastCreatedUnit)endfunction
//===========================================================================function InitTrig_zhuangdan takes nothing returns nothing    set gg_trg_zhuangdan = CreateTrigger(  )    call TriggerRegisterAnyUnitEventBJ( gg_trg_zhuangdan, EVENT_PLAYER_UNIT_SPELL_EFFECT )    call TriggerAddCondition( gg_trg_zhuangdan, Condition( function Trig_zhuangdan_Conditions ) )    call TriggerAddAction( gg_trg_zhuangdan, function Trig_zhuangdan_Actions )endfunction

责任编辑:瞳瞳
进入论坛参与针对本文章的讨论
文中部分附件请进入论坛下载
本文章地址:
  • 上一篇:通魔之路(WE主讨论区):MDX的输入使用详细教程贴 2005-06-18-07:00
  • 下一篇:
  • 相关文章

    进入论坛参与针对本文章的讨论用户评论

    地图 攻略
    热门搜索: 仙之侠道 真三国无双 Dota Allstar

    地图专区导航

    热门地图攻略

    热门地图周排行

    最新推荐地图

    地图下载总排行

     
    关于我们  -  联系我们  -  广告优势  -  广告服务
    建议意见:玩家点击留言  商务合作:客户点击留言
    西安优久数码科技有限公司 版权所有 陕ICP证08000654号