Page 1 of 1

mazing td help

Posted: Fri Dec 04, 2009 4:43 pm
by Evilnoah
Hi. This is my first warcraft map I've made and I decided I want a mazing type td (maybe not the best choice). Anyway, my question is how would I prevent the players from building towers that will block the path of the creeps? I disabled the attacks of the creeps so they can't destroy the towers and I would prefer if I could keep it that way. Thanks.

Re: mazing td help

Posted: Fri Dec 04, 2009 4:51 pm
by 3ICE
Definitely not the best choice. Try making a melee map instead. (And then add some triggers for practice.)

Step 1: Google: http://www.google.com/search?q=warcraft+tower+defense+map+pathing+and+lanes
Step 2: Read...
Step 3: Problem solved

p.s.: You need to re-enable creeps' attack or else how would you punish the blocking player? (And make sure you don't put the "Invulnerable" ability on any tower.)

Re: mazing td help

Posted: Fri Dec 04, 2009 5:02 pm
by Evilnoah
I've already read that. I'm doing fairly well on the map the triggers seem to be fairly logical if you simply think through most of it. I've played a map (can't remember which one for the life of me) but when you tried building a tower that would block the creeps paths it wouldn't let you and notify you that of it. Therefore you wouldn't need creep attacks because no one could block in the first place.

Re: mazing td help

Posted: Fri Dec 04, 2009 5:29 pm
by Evilnoah
Ok. So when I have the creeps attacks enabled they just seem to want to destory everything in their sight. Is their an easy remedy to this?

Re: mazing td help

Posted: Fri Dec 04, 2009 7:17 pm
by 3ICE
Evilnoah wrote:I've played a map
I think you've played a flash game, not a map.
Evilnoah wrote:Is their an easy remedy to this?
Why does everyone want everything to be easy? By the way the word "their" is not proper English. You should have spelled it like this: "there". EDIT: Forgot to mention that the remedy is on the page you've read (or probably just skimmed).
Evilnoah wrote:I've already read that.
No, you haven't... (Or you didn't pay attention to the "Creeps keep Attacking?" chapter!...)

(RULE 2010: No double posting! I understand that double posting is an acceptable solution for lazy people, but please try editing the second post into the first one the next time. It isn't hard.)

Re: mazing td help

Posted: Mon Dec 07, 2009 4:34 am
by manstie
It would be great to find out how the maker of "Mazing Contest" did their anti-blocking system.
________________________________________________________________

Or you could make the units have Blink and if its blocking - instead of attack, make them blink like, 200 distance, to the next waypoint.

Re: mazing td help

Posted: Mon Dec 07, 2009 8:33 am
by 3ICE
Here:

Code: Select all

//===========================================================================
// Trigger: asdgasdfgasdgasdf
//===========================================================================
function Trig_asdgasdfgasdgasdf_Func011C takes nothing returns boolean
    if ( not ( udg_asdgsadfasdgas == 'h000' ) ) then
        return false
    endif
    return true
endfunction

function Trig_asdgasdfgasdgasdf_Func012Func002C takes nothing returns boolean
    if ( not ( GetUnitTypeId(GetLastCreatedUnit()) == 'h001' ) ) then
        return false
    endif
    return true
endfunction

function Trig_asdgasdfgasdgasdf_Func012C takes nothing returns boolean
    if ( not ( udg_asdfsdgsadfs == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_asdgasdfgasdgasdf_Func013C takes nothing returns boolean
    if ( not ( RectContainsLoc(udg_asdgfasdfsdgssdf[udg_temp_int], udg_temp_point) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_asdgasdfgasdgasdf_Actions takes nothing returns nothing
    set udg_temp_unit = GetTriggerUnit()
    set udg_temp_int = GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))
    set udg_temp_point = GetUnitLoc(GetTriggerUnit())
    set udg_asdgsadfasdgas = GetUnitTypeId(GetTriggerUnit())
    set udg_asdfgasdfasg = true
    set udg_asdgasdgasdfasasdgfa = 1
    call RemoveUnit( udg_temp_unit )
    call CreateNUnitsAtLoc( 1, udg_asdgsadfasdgas, ConvertedPlayer(udg_temp_int), udg_temp_point, bj_UNIT_FACING )
    set udg_temp_unit = GetLastCreatedUnit()
    call SetUnitUserData( udg_temp_unit, GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit())) )
    if ( Trig_asdgasdfgasdgasdf_Func011C() ) then
        set udg_asdgfasdgasdfas = 1
        call UnitRemoveAbilityBJ( 'AHtc', GetLastCreatedUnit() )
    else
        set udg_asdgfasdgasdfas = 0
    endif
    if ( Trig_asdgasdfgasdgasdf_Func012C() ) then
        call UnitAddAbilityBJ( 'A000', GetLastCreatedUnit() )
        if ( Trig_asdgasdfgasdgasdf_Func012Func002C() ) then
            call UnitAddAbilityBJ( 'A001', GetLastCreatedUnit() )
        else
        endif
    else
    endif
    if ( Trig_asdgasdfgasdgasdf_Func013C() ) then
        call RemoveLocation (udg_temp_point)
        call ConditionalTriggerExecute( gg_trg_asdgasdfgasdgasdfsa )
    else
        call AddSpecialEffectLocBJ( udg_temp_point, "Abilities\\Spells\\Human\\DispelMagic\\DispelMagicTarget.mdl" )
        call DestroyEffectBJ( GetLastCreatedEffectBJ() )
        call RemoveUnit( udg_temp_unit )
        call RemoveLocation (udg_temp_point)
        call AdjustPlayerStateBJ( udg_asdgasdgasdfasasdgfa, ConvertedPlayer(udg_temp_int), PLAYER_STATE_RESOURCE_GOLD )
        call AdjustPlayerStateBJ( udg_asdgfasdgasdfas, ConvertedPlayer(udg_temp_int), PLAYER_STATE_RESOURCE_LUMBER )
    endif
endfunction

//===========================================================================
function InitTrig_asdgasdfgasdgasdf takes nothing returns nothing
    set gg_trg_asdgasdfgasdgasdf = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_asdgasdfgasdgasdf, EVENT_PLAYER_UNIT_CONSTRUCT_START )
    call TriggerAddAction( gg_trg_asdgasdfgasdgasdf, function Trig_asdgasdfgasdgasdf_Actions )
endfunction

//===========================================================================
// Trigger: asdgasdfgasdgasdfsa
//===========================================================================
function Trig_asdgasdfgasdgasdfsa_Actions takes nothing returns nothing
    set udg_asdfasdgasd = false
    set udg_asdfasdgsdf = false
    call GroupClear( udg_Chain )
    call GroupClear( udg_Chain_New_Additions_1 )
    call GroupAddUnitSimple( udg_temp_unit, udg_Chain )
    call GroupAddUnitSimple( udg_temp_unit, udg_Chain_New_Additions_1 )
    set udg_temp_point = GetUnitLoc(udg_temp_unit)
    call ConditionalTriggerExecute( gg_trg_asdfgasdgasdfasdgasd )
    call RemoveLocation (udg_temp_point)
    call ConditionalTriggerExecute( gg_trg_asdfasdgasdfasdgsasd )
endfunction

//===========================================================================
function InitTrig_asdgasdfgasdgasdfsa takes nothing returns nothing
    set gg_trg_asdgasdfgasdgasdfsa = CreateTrigger(  )
    call TriggerAddAction( gg_trg_asdgasdfgasdgasdfsa, function Trig_asdgasdfgasdgasdfsa_Actions )
endfunction

//===========================================================================
// Trigger: asdfasdgasdfasdgsasd
//===========================================================================
function Trig_asdfasdgasdfasdgsasd_Func003A takes nothing returns nothing
    call GroupAddUnitSimple( GetEnumUnit(), udg_Chain_New_Additions_2 )
endfunction

function Trig_asdfasdgasdfasdgsasd_Func005Func002002002001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == true )
endfunction

function Trig_asdfasdgasdfasdgsasd_Func005Func002002002002 takes nothing returns boolean
    return ( IsUnitInGroup(GetFilterUnit(), udg_Chain) == false )
endfunction

function Trig_asdfasdgasdfasdgsasd_Func005Func002002002 takes nothing returns boolean
    return GetBooleanAnd( Trig_asdfasdgasdfasdgsasd_Func005Func002002002001(), Trig_asdfasdgasdfasdgsasd_Func005Func002002002002() )
endfunction

function Trig_asdfasdgasdfasdgsasd_Func005Func003Func002C takes nothing returns boolean
    if ( not ( DistanceBetweenPoints(udg_temp_point, udg_temp_point_2) < 182.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_asdfasdgasdfasdgsasd_Func005Func003A takes nothing returns nothing
    set udg_temp_point = GetUnitLoc(GetEnumUnit())
    if ( Trig_asdfasdgasdfasdgsasd_Func005Func003Func002C() ) then
        call GroupAddUnitSimple( GetEnumUnit(), udg_Chain )
        call GroupAddUnitSimple( GetEnumUnit(), udg_Chain_New_Additions_1 )
        call ConditionalTriggerExecute( gg_trg_asdfgasdgasdfasdgasd )
        set udg_asdgdsafsdsg = true
    else
    endif
    call RemoveLocation (udg_temp_point)
endfunction

function Trig_asdfasdgasdfasdgsasd_Func005A takes nothing returns nothing
    set udg_temp_point_2 = GetUnitLoc(GetEnumUnit())
    set udg_temp_group = GetUnitsInRectMatching(udg_asdgfasdfsdgssdf[udg_temp_int], Condition(function Trig_asdfasdgasdfasdgsasd_Func005Func002002002))
    call ForGroupBJ( udg_temp_group, function Trig_asdfasdgasdfasdgsasd_Func005Func003A )
    call RemoveLocation (udg_temp_point_2)
    call DestroyGroup (udg_temp_group)
endfunction

function Trig_asdfasdgasdfasdgsasd_Func006001 takes nothing returns boolean
    return ( udg_asdgdsafsdsg == true )
endfunction

function Trig_asdfasdgasdfasdgsasd_Actions takes nothing returns nothing
    set udg_asdgdsafsdsg = false
    call GroupClear( udg_Chain_New_Additions_2 )
    call ForGroupBJ( udg_Chain_New_Additions_1, function Trig_asdfasdgasdfasdgsasd_Func003A )
    call GroupClear( udg_Chain_New_Additions_1 )
    call ForGroupBJ( udg_Chain_New_Additions_2, function Trig_asdfasdgasdfasdgsasd_Func005A )
    if ( Trig_asdfasdgasdfasdgsasd_Func006001() ) then
        call ConditionalTriggerExecute( GetTriggeringTrigger() )
    else
        call ConditionalTriggerExecute( gg_trg_asdfasdgasdfasdga )
    endif
endfunction

//===========================================================================
function InitTrig_asdfasdgasdfasdgsasd takes nothing returns nothing
    set gg_trg_asdfasdgasdfasdgsasd = CreateTrigger(  )
    call TriggerAddAction( gg_trg_asdfasdgasdfasdgsasd, function Trig_asdfasdgasdfasdgsasd_Actions )
endfunction

//===========================================================================
// Trigger: asdfgasdgasdfasdgasd
//===========================================================================
function Trig_asdfgasdgasdfasdgasd_Func001Func002Func002Func002C takes nothing returns boolean
    if ( ( GetLocationY(udg_temp_point) <= GetLocationY(udg_asdfasdgasdfasdgsss[udg_temp_int]) ) ) then
        return true
    endif
    if ( ( GetLocationY(udg_temp_point) >= ( GetLocationY(udg_asdfasdgasdfasdgsss[udg_temp_int]) + ( 128.00 * 7.00 ) ) ) ) then
        return true
    endif
    return false
endfunction

function Trig_asdfgasdgasdfasdgasd_Func001Func002Func002C takes nothing returns boolean
    if ( not ( GetLocationX(udg_temp_point) <= ( GetLocationX(udg_asdfasdgasdfasdgsss[udg_temp_int]) + ( 128.00 * 4.00 ) ) ) ) then
        return false
    endif
    if ( not Trig_asdfgasdgasdfasdgasd_Func001Func002Func002Func002C() ) then
        return false
    endif
    return true
endfunction

function Trig_asdfgasdgasdfasdgasd_Func001Func002C takes nothing returns boolean
    if ( ( GetLocationX(udg_temp_point) <= GetLocationX(udg_asdfasdgasdfasdgsss[udg_temp_int]) ) ) then
        return true
    endif
    if ( Trig_asdfgasdgasdfasdgasd_Func001Func002Func002C() ) then
        return true
    endif
    return false
endfunction

function Trig_asdfgasdgasdfasdgasd_Func001C takes nothing returns boolean
    if ( not Trig_asdfgasdgasdfasdgasd_Func001Func002C() ) then
        return false
    endif
    return true
endfunction

function Trig_asdfgasdgasdfasdgasd_Func002Func002Func002Func002C takes nothing returns boolean
    if ( ( GetLocationY(udg_temp_point) <= GetLocationY(udg_asdfasdgasdfasdgsss[udg_temp_int]) ) ) then
        return true
    endif
    if ( ( GetLocationY(udg_temp_point) >= ( GetLocationY(udg_asdfasdgasdfasdgsss[udg_temp_int]) + ( 128.00 * 7.00 ) ) ) ) then
        return true
    endif
    return false
endfunction

function Trig_asdfgasdgasdfasdgasd_Func002Func002Func002C takes nothing returns boolean
    if ( not ( GetLocationX(udg_temp_point) >= ( GetLocationX(udg_asdfasdgasdfasdgsss[udg_temp_int]) + ( 128.00 * 4.00 ) ) ) ) then
        return false
    endif
    if ( not Trig_asdfgasdgasdfasdgasd_Func002Func002Func002Func002C() ) then
        return false
    endif
    return true
endfunction

function Trig_asdfgasdgasdfasdgasd_Func002Func002C takes nothing returns boolean
    if ( ( GetLocationX(udg_temp_point) >= ( GetLocationX(udg_asdfasdgasdfasdgsss[udg_temp_int]) + ( 8.00 * 128.00 ) ) ) ) then
        return true
    endif
    if ( Trig_asdfgasdgasdfasdgasd_Func002Func002Func002C() ) then
        return true
    endif
    return false
endfunction

function Trig_asdfgasdgasdfasdgasd_Func002C takes nothing returns boolean
    if ( not Trig_asdfgasdgasdfasdgasd_Func002Func002C() ) then
        return false
    endif
    return true
endfunction

function Trig_asdfgasdgasdfasdgasd_Actions takes nothing returns nothing
    if ( Trig_asdfgasdgasdfasdgasd_Func001C() ) then
        set udg_asdfasdgasd = true
    else
    endif
    if ( Trig_asdfgasdgasdfasdgasd_Func002C() ) then
        set udg_asdfasdgsdf = true
    else
    endif
endfunction

//===========================================================================
function InitTrig_asdfgasdgasdfasdgasd takes nothing returns nothing
    set gg_trg_asdfgasdgasdfasdgasd = CreateTrigger(  )
    call TriggerAddAction( gg_trg_asdfgasdgasdfasdgasd, function Trig_asdfgasdgasdfasdgasd_Actions )
endfunction
His protection is pathetic (asfgasdasdfsdgasd)! Just imagine having to go through all your variables and triggers and renaming them to nonsense (asfgasdasdfsdgasd ) every time you released a new version. If Vexorian didn't create his Map Optimizer, we'd be doomed for sure!

EDIT: A Blinking trigger can be taken from Power Towers (It's in vJASS, but don't let that bother you.)