仿泡泡堂的演示。
本来想做成完整地图。不过忙不过来,再加上被人诅咒,此图会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
责任编辑:瞳瞳
进入论坛参与针对本文章的讨论
