惡魔の翼 发表于 2008-8-4 11:38:46

关于地图改单机模式的方法


比如最近的小偷TD都有类似下面这样的一段代码
    set udg_EnemyType = 'hC90'
    set udg_EnemyCount = 30
    set udg_EnemyGold = 50+ j' R9 D1 w- N: b% m
    // level 42
    set udg_i = ( udg_i + 1 )
    set udg_EnemyType = 'hC91'
    set udg_EnemyCount = 30
    set udg_EnemyGold = 558 i/ J& J( t4 D2 K
    // level 43
    set udg_i = ( udg_i + 1 )_" Y+ x# g, ^1 }.
    set udg_EnemyType = 'hC92'
    set udg_EnemyCount = 30
    set udg_EnemyGold = 60% V/ g$ P4 ?1 k0 S- l
    // level 44$ b( Q9 v6 e4 \' \/ Q
    set udg_i = ( udg_i + 1 )
    set udg_EnemyType = 'z001'1 K7 ?: |+ {: t) f3 {" i
    set udg_EnemyCount = 308 L. S' h: m; h, O
    set udg_EnemyGold = 702 G# g) n/ p5 Y7 O6 }( Y1 F. f+ A
    // level 451 m: C: X$ `. f
    set udg_i = ( udg_i + 1 )
    set udg_EnemyType = 'hC94'' Z6 C- D0 X+ j+ `6 ]
    set udg_EnemyCount = 307 Q8 SR; [% G- G& ~1 f3 K
    set udg_EnemyGold = 80" _- v4 K* Z! G" m0 k
    // level 46* B8 G4 T! U5 X# S! _! E" D+ N, y* K- G6 B3 w
    set udg_i = ( udg_i + 1 )
    set udg_EnemyType = 'h012'& Q$ j. L7 i8 ~g
    set udg_EnemyCount = 30
    set udg_EnemyGold = 100
    // level 47- I! H/ @4 @3 ]6 j7 A) w
    set udg_i = ( udg_i + 1 )9 f/ y/ L5 v( g' L9 B, x
    set udg_EnemyType = 'h013'
    set udg_EnemyCount = 307 B3 C+ e; q' S_1 G; T- a
    set udg_EnemyGold = 100/ g' H. g3 Q. T. F9 {^6 K0 x
    // level 48
    set udg_i = ( udg_i + 1 )7 j/ T! w, T8
    set udg_EnemyType = 'h01A'
    set udg_EnemyCount = 30- Z0 ?. U& y. t" l/ b/ R7 N6 M( s
    set udg_EnemyGold = 100
    // level 49! }" K, D9 R' s, ^, V# M
    set udg_i = ( udg_i + 1 )
    set udg_EnemyType = 'h019'
    set udg_EnemyCount = 30
    set udg_EnemyGold = 100) G) E' ~2 s+ f* L
    // level 50
    set udg_i = ( udg_i + 1 )
   set udg_EnemyType = 'h01C'2 t5 A' h! q1 O: Q0 U5 a$ S3 u7 v8 z
    set udg_EnemyCount = 30" Si) ~4 t1 o
    set udg_EnemyGold = 100! N- D; g( b, l7 [- g; y
    // level 51
    set udg_i = ( udg_i + 1 )6 v" q0 ]- M% z' b1 x8 H
    set udg_EnemyType = 'h01B'
    set udg_EnemyCount = 30; i! u% g1 f1 z8 h0 et
    set udg_EnemyGold = 100
    // level 52) ?6 H6 z2 C* _7 q4 ?
endfunction
//===========================================================================
function InitTrig_Set_Enemies takes nothing returns nothing
    set gg_trg_Set_Enemies = CreateTrigger()0 J7 C8 c3 f7 a8 X* m! S
    call TriggerAddAction( gg_trg_Set_Enemies, function Trig_Set_Enemies_Actions )
endfunction
//===========================================================================
// Trigger: Time Spawn
//===========================================================================
function Trig_Time_Spawn_Actions takes nothing returns nothing
    call ConditionalTriggerExecute( gg_trg_Display_Level_Text )
    set udg_Divisible = ( udg_EnemyCount / 1 )
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = udg_EnemyCount
    loop
      exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
      call ConditionalTriggerExecute( gg_trg_Spawn_Monsters_1 )
      set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
endfunction
//===========================================================================
function InitTrig_Time_Spawn takes nothing returns nothing
    set gg_trg_Time_Spawn = CreateTrigger()
    call TriggerRegisterTimerEventSingle( gg_trg_Time_Spawn, 30.00 )
    call TriggerAddAction( gg_trg_Time_Spawn, function Trig_Time_Spawn_Actions )
endfunction
//===========================================================================
// Trigger: Next Round 11
//===========================================================================
function Trig_Next_Round_11_Func002Func003C takes nothing returns boolean
    if ( not ( GetPlayerState(Player(10), PLAYER_STATE_RESOURCE_FOOD_USED) < 1 ) ) then
      return false
    endif
    if ( not ( GetPlayerState(Player(11), PLAYER_STATE_RESOURCE_FOOD_USED) < 1 ) ) then
      return false
    endif
    return true
endfunction
function Trig_Next_Round_11_Func002C takes nothing returns boolean
    if ( not Trig_Next_Round_11_Func002Func003C() ) then
      return false
    endif
   return true
endfunction
function Trig_Next_Round_11_Actions takes nothing returns nothing
    if ( Trig_Next_Round_11_Func002C() ) then
      call TriggerSleepAction( 2.00 )
      call TriggerExecute( gg_trg_Next_Round )
    else
    endif
endfunction
//===========================================================================
function InitTrig_Next_Round_11 takes nothing returns nothing
    set gg_trg_Next_Round_11 = CreateTrigger()
    call TriggerRegisterPlayerStateEvent( gg_trg_Next_Round_11, Player(10), PLAYER_STATE_RESOURCE_FOOD_USED, EQUAL, 0.00 )
    call TriggerAddAction( gg_trg_Next_Round_11, function Trig_Next_Round_11_Actions )
endfunction
//===========================================================================
// Trigger: Next Round 12
//===========================================================================
function Trig_Next_Round_12_Func002Func003C takes nothing returns boolean
    if ( not ( GetPlayerState(Player(10), PLAYER_STATE_RESOURCE_FOOD_USED) < 1 ) ) then
      return false4
    endif)
    if ( not ( GetPlayerState(Player(11), PLAYER_STATE_RESOURCE_FOOD_USED) < 1 ) ) then
      return false
    endif
    return true
endfunction
function Trig_Next_Round_12_Func002C takes nothing returns boolean
    if ( not Trig_Next_Round_12_Func002Func003C() ) then
      return false
    endif
    return true
endfunction
function Trig_Next_Round_12_Actions takes nothing returns nothing
    if ( Trig_Next_Round_12_Func002C() ) then
      call TriggerSleepAction( 2.00 )
      call TriggerExecute( gg_trg_Next_Round )6 c( a1 ^& W/ ?/ t& Z$ C4 Y0 z4 b
    else
    endif
endfunction
//===========================================================================
function InitTrig_Next_Round_12 takes nothing returns nothing
    set gg_trg_Next_Round_12 = CreateTrigger()
    call TriggerRegisterPlayerStateEvent( gg_trg_Next_Round_12, Player(11), PLAYER_STATE_RESOURCE_FOOD_USED, EQUAL, 0.00 )
    call TriggerAddAction( gg_trg_Next_Round_12, function Trig_Next_Round_12_Actions )
endfunction
//===========================================================================
// Trigger: Next Round
//===========================================================================
function Trig_Next_Round_Func003002 takes nothing returns nothing
    call AdjustPlayerStateBJ( 30, GetEnumPlayer(), PLAYER_STATE_RESOURCE_GOLD )
endfunction
function Trig_Next_Round_Actions takes nothing returns nothing
    set udg_pointer = ( udg_pointer + 1 )
    set udg_shijian = ( udg_shijian + 1 )
    call ForForce( GetPlayersAll(), function Trig_Next_Round_Func003002 )
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = udg_PlayerCount
    loop
      exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
      call TriggerSleepAction( 1.00 )
      set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    call ConditionalTriggerExecute( gg_trg_Time_Spawn )
endfunction
//===========================================================================
function InitTrig_Next_Round takes nothing returns nothing
    set gg_trg_Next_Round = CreateTrigger()
    call DisableTrigger( gg_trg_Next_Round )
    call TriggerAddAction( gg_trg_Next_Round, function Trig_Next_Round_Actions )
endfunction
//===========================================================================
// Trigger: Spawn Monsters 1
//===========================================================================
function Trig_Spawn_Monsters_1_Func007001 takes nothing returns boolean
    return ( udg_Divisible > 0 )
endfunction
function Trig_Spawn_Monsters_1_Actions takes nothing returns nothing
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = udg_PlayerCount
    loop
      exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
      call TriggerSleepAction( 0.10 )
      set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    set udg_Divisible = ( udg_Divisible - 1 )
    call CreateNUnitsAtLocFacingLocBJ( 1, udg_EnemyType, Player(10), GetRandomLocInRect(gg_rct_Monster_Spawn_Bottom_Left), GetUnitLoc(GetTriggerUnit()) )
    call CreateNUnitsAtLocFacingLocBJ( 1, udg_EnemyType, Player(10), GetRandomLocInRect(gg_rct_Monster_Spawn_Bottom_Right), GetUnitLoc(GetTriggerUnit()) )
    call CreateNUnitsAtLocFacingLocBJ( 1, udg_EnemyType, Player(11), GetRandomLocInRect(gg_rct_Monster_Spawn_Top_Right), GetUnitLoc(GetTriggerUnit()) )
    call CreateNUnitsAtLocFacingLocBJ( 1, udg_EnemyType, Player(11), GetRandomLocInRect(gg_rct_Monster_Spawn_Top_Left), GetUnitLoc(GetTriggerUnit()) )
   
    if ( Trig_Spawn_Monsters_1_Func007001() ) then2
      call ConditionalTriggerExecute( gg_trg_Spawn_Monsters_1 )
    else4
      call DoNothing()*
    endif
endfunction

找到最后这儿)

CODE:
    call CreateNUnitsAtLocFacingLocBJ( 1, udg_EnemyType, Player(10), GetRandomLocInRect(gg_rct_Monster_Spawn_Bottom_Left), GetUnitLoc(GetTriggerUnit()) )
    call CreateNUnitsAtLocFacingLocBJ( 1, udg_EnemyType, Player(10), GetRandomLocInRect(gg_rct_Monster_Spawn_Bottom_Right), GetUnitLoc(GetTriggerUnit()) )
    call CreateNUnitsAtLocFacingLocBJ( 1, udg_EnemyType, Player(11), GetRandomLocInRect(gg_rct_Monster_Spawn_Top_Right), GetUnitLoc(GetTriggerUnit()) )
    call CreateNUnitsAtLocFacingLocBJ( 1, udg_EnemyType, Player(11), GetRandomLocInRect(gg_rct_Monster_Spawn_Top_Left), GetUnitLoc(GetTriggerUnit()) )
用来在地图的四个角刷怪的3
如果找不到 可以尝试搜索CreateNUnitsAtLocFacingLocBJ9 Q
一般来说Bottom_Left是玩家1 Bottom_Right是玩家2 Top_Right是玩家3 Top_Left是玩家4
万狐魔兽地图修改改成下面这样当玩家离开以后就不会刷怪了


if ( GetPlayerSlotState(Player(0)) == PLAYER_SLOT_STATE_PLAYING ) then
call CreateNUnitsAtLocFacingLocBJ( 1, udg_EnemyType, Player(10), GetRandomLocInRect(gg_rct_Monster_Spawn_Bottom_Left), GetUnitLoc(GetTriggerUnit()) )
endif
if ( GetPlayerSlotState(Player(1)) == PLAYER_SLOT_STATE_PLAYING ) then-
call CreateNUnitsAtLocFacingLocBJ( 1, udg_EnemyType, Player(10), GetRandomLocInRect(gg_rct_Monster_Spawn_Bottom_Right), GetUnitLoc(GetTriggerUnit()) )
endif
if ( GetPlayerSlotState(Player(2)) == PLAYER_SLOT_STATE_PLAYING ) then
call CreateNUnitsAtLocFacingLocBJ( 1, udg_EnemyType, Player(11), GetRandomLocInRect(gg_rct_Monster_Spawn_Top_Right), GetUnitLoc(GetTriggerUnit()) )5
endif
if ( GetPlayerSlotState(Player(3)) == PLAYER_SLOT_STATE_PLAYING ) then
call CreateNUnitsAtLocFacingLocBJ( 1, udg_EnemyType, Player(11), GetRandomLocInRect(gg_rct_Monster_Spawn_Top_Left), GetUnitLoc(GetTriggerUnit()) )
endif其中GetPlayerSlotState(Player(0)) == PLAYER_SLOT_STATE_PLAYING表示判断玩家一是否在线(jass中Player(0)是玩家一 Player(1)是玩家二)
注意看清楚玩家对应的位置不然就会出现一个玩家掉线了其他某个玩家那儿不刷怪的情况
然后在这之前加上call TriggerSleepAction( 20.00 ) 可以增加刷怪前的休息时间20秒
另外有些图不允许单机游戏或者判断作弊就退出或者正版验证之类杂七杂八的强制失败那种
可以搜索CustomDefeatBJ 然后把对应行删掉就行了   注意不要把真正的失败条件也删除了 (当然删了也没什么大不了的)

離離草 发表于 2008-8-4 11:41:08

a3018288 发表于 2008-8-4 23:29:39

bbbbbbbbbbb

co136415559 发表于 2008-8-5 02:31:35

zhangqi888ahaq 发表于 2008-8-5 13:01:59

asasasasassasasassas

zhangqi888ahaq 发表于 2008-8-5 13:04:04

kyovic 发表于 2008-8-5 16:25:24

学习学习~

vfvf514 发表于 2008-8-6 13:20:30

FFFFFFFFFF

jlx1983 发表于 2008-8-7 09:29:13

321321321321

3213213213

2617167 发表于 2008-8-7 16:55:12

我要学习
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 关于地图改单机模式的方法