Page 1 of 1

Using a timer in conquest mode [solved]

Posted: Wed Feb 22, 2012 4:50 pm
by Locutus
Hi everyone!
That may sound stupid but can I use timers in conquest mode?
I'm pretty sure you can but when I try the AI refuses to spawn.

Pretty sure I'm just too stupid to set up the code correctly:

Code: Select all

function ScriptPostLoad()
[...]    
Bridge()   
conquest:Start()


  function Bridge()  
    bridge_timer = CreateTimer("bridge_timer")
    SetTimerValue(bridge_timer, 320)
    StartTimer(bridge_timer)
    OnTimerElapse(
        function(timer)
                UnblockPlanningGraphArcs("Connection51")
                DisableBarriers("bridgebarrier1")
                DisableBarriers("bridgebarrier2")
                DisableBarriers("barrier321")
                print("Auf Kameraden, es geht los!")
                DestroyTimer(timer)
        end,
        bridgetimer
      )
  end


[...]
end
Complete lua:
Hidden/Spoiler:
--
-- Copyright (c) 2005 Pandemic Studios, LLC. All rights reserved.
--

-- load the gametype script
ScriptCB_DoFile("ObjectiveConquest")
ScriptCB_DoFile("setup_teams")
ScriptCB_DoFile("LinkedTurrets")

-- REP Attacking (attacker is always #1)
REP = 1;
CIS = 2;
-- These variables do not change
ATT = REP;
DEF = CIS;


function ScriptPostLoad()

BlockPlanningGraphArcs("Connection75")

--This defines the CPs. These need to happen first
cp1 = CommandPost:New{name = "cp1"}
cp2 = CommandPost:New{name = "cp2"}
cp3 = CommandPost:New{name = "cp3"}
cp4 = CommandPost:New{name = "cp4"}
cp5 = CommandPost:New{name = "cp5"}
cp6 = CommandPost:New{name = "cp6"}



--This sets up the actual objective. This needs to happen after cp's are defined
conquest = ObjectiveConquest:New{teamATT = ATT, teamDEF = DEF,
textATT = "game.modes.con",
textDEF = "game.modes.con2",
multiplayerRules = true}

--This adds the CPs to the objective. This needs to happen after the objective is set up
conquest:AddCommandPost(cp1)
conquest:AddCommandPost(cp2)
conquest:AddCommandPost(cp3)
conquest:AddCommandPost(cp4)
conquest:AddCommandPost(cp5)
conquest:AddCommandPost(cp6)

-- Bridge();
--IsObjectAlive (all_prop_blockaderunner, bridge)

conquest:Start()

EnableSPHeroRules()


--Cloudcar = TargetType:New{classname = "bes_fly_cloudcar", killLimit = 1, icon = nil}
--cc_count = 1

-- Cloudcar.OnDestroy = function(self, objectPtr)
-- cc_count = cc_count - 1
-- if cc_count == 0 then
-- PlayAnimation("cortest")
-- end
-- end
--SetProperty("local_cp", "SpawnPath", "")
cc_count = 0
animateobja = OnObjectKill(
function(object, killer)
if GetEntityName(object) == "bes_fly_cloudcar5" then
cc_count = cc_count + 1
if cc_count == 1 then
SetProperty("local_cp", "SpawnPath", "local_spawn")
end
end
end
)

animateobjb = OnObjectKill(
function(object, killer)
if GetEntityName(object) == "bes_fly_cloudcar1" then
cc_count = cc_count + 1
if cc_count == 1 then
SetProperty("local_cp", "SpawnPath", "local_spawn")
end
end
end
)

killobja = OnObjectKill(
function(object, killer)
if killer and IsCharacterHuman(killer) and GetEntityName(object) == "test_turr_1" then
AddAssaultDestroyPoints(killer)
end
end
)

killobjb = OnObjectKill(
function(object, killer)
if killer and IsCharacterHuman(killer) and GetEntityName(object) == "test_turr_2" then
AddAssaultDestroyPoints(killer)
end
end
)

killobjc = OnObjectKill(
function(object, killer)
if killer and IsCharacterHuman(killer) and GetEntityName(object) == "test_turr_3" then
AddAssaultDestroyPoints(killer)
end
end
)

killobjd = OnObjectKill(
function(object, killer)
if killer and IsCharacterHuman(killer) and GetEntityName(object) == "test_turr_4" then
AddAssaultDestroyPoints(killer)
end
end
)

killobje = OnObjectKill(
function(object, killer)
if killer and IsCharacterHuman(killer) and GetEntityName(object) == "test_turr_5" then
AddAssaultDestroyPoints(killer)
end
end
)

killobjf = OnObjectKill(
function(object, killer)
if killer and IsCharacterHuman(killer) and GetEntityName(object) == "test_turr_6" then
AddAssaultDestroyPoints(killer)
end
end
)



-- function Bridge()
-- bridge_timer = CreateTimer("bridge_timer")
-- SetTimerValue(bridge_timer, 320)
-- StartTimer(bridge_timer)
-- OnTimerElapse(
-- function(timer)
-- UnblockPlanningGraphArcs("Connection51");
-- DisableBarriers("bridgebarrier1");
-- DisableBarriers("bridgebarrier2");
-- DisableBarriers("barrier321");
-- print("Auf Kameraden, es geht los!")
-- DestroyTimer(timer)
-- end,
-- bridgetimer
-- )
-- end

function SetupTurrets()
turretLinkageCIS = LinkedTurrets:New{ team = CIS, mainframe = "cis-defense",
turrets = {"test_turr_1", "test_turr_2", "test_turr_3"} }
turretLinkageCIS:Init()
end

function SetupTurrets()
turretLinkageREP = LinkedTurrets:New{ team = REP, mainframe = "rep-defense",
turrets = {"test_turr_4", "test_turr_5", "test_turr_6"} }
turretLinkageREP:Init()
end



AddDeathRegion("dr1")
AddDeathRegion("dr2")


end


---------------------------------------------------------------------------
-- FUNCTION: ScriptInit
-- PURPOSE: This function is only run once
-- INPUT:
-- OUTPUT:
-- NOTES: The name, 'ScriptInit' is a chosen convention, and each
-- mission script must contain a version of this function, as
-- it is called from C to start the mission.
---------------------------------------------------------------------------
function ScriptInit()

ReadDataFile("dc:Load\\common.lvl")

ReadDataFile("ingame.lvl")

SetMaxFlyHeight(64)
SetMaxPlayerFlyHeight (64)

SetMemoryPoolSize ("ClothData",20)
SetMemoryPoolSize ("Combo",30) -- should be ~ 2x number of jedi classes
SetMemoryPoolSize ("Combo::State",500) -- should be ~12x #Combo
SetMemoryPoolSize ("Combo::Transition",500) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Condition",500) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Attack",400) -- should be ~8-12x #Combo
SetMemoryPoolSize ("Combo::DamageSample",4000) -- should be ~8-12x #Combo::Attack
SetMemoryPoolSize ("Combo::Deflect",88) -- should be ~1x #combo
SetMemoryPoolSize ("FLEffectObject::OffsetMatrix",190)
SetMemoryPoolSize ("ParticleTransformer::SizeTransf",1030)

ReadDataFile("dc:sound\\HTM.lvl;htmcw")
ReadDataFile("sound\\yav.lvl;yav1cw")
ReadDataFile("SIDE\\rep.lvl",
"rep_inf_ep3_rifleman",
"rep_inf_ep3_rocketeer",
"rep_inf_ep3_engineer",
"rep_inf_ep3_sniper",
"rep_inf_ep3_officer",
"rep_inf_ep3_jettrooper")
ReadDataFile("SIDE\\cis.lvl",
"cis_inf_rifleman",
"cis_inf_rocketeer",
"cis_inf_engineer",
"cis_inf_sniper",
"cis_inf_officer",
"cis_inf_droideka")


ReadDataFile("SIDE\\des.lvl",
"tat_inf_jawa")

ReadDataFile("SIDE\\tur.lvl",
"tur_bldg_spa_all_cannon")

ReadDataFile("dc:SIDE\\bes.lvl",
"bes_fly_cloudcar",
"bes_inf_flametrooper",
"bes_inf_geonosian",
"bes_hero_kitfisto")

ReadDataFile("dc:SIDE\\lis.lvl",
"lis_hero_grievous")


SetupTeams{
rep = {
team = REP,
units = 20,
reinforcements = 150,
soldier = { "rep_inf_ep3_rifleman",9, 25},
assault = { "rep_inf_ep3_rocketeer",1, 4},
engineer = { "rep_inf_ep3_engineer",1, 4},
sniper = { "rep_inf_ep3_sniper",1, 4},
pilot = { "bes_inf_flametrooper",1, 4},
officer = { "rep_inf_ep3_officer",1, 4},
special = { "rep_inf_ep3_jettrooper",1, 4},
},
cis = {
team = CIS,
units = 20,
reinforcements = 150,
soldier = { "cis_inf_rifleman",9, 25},
assault = { "cis_inf_rocketeer",1, 4},
engineer = { "cis_inf_engineer",1, 4},
sniper = { "cis_inf_sniper",1, 4},
pilot = { "bes_inf_geonosian",1, 4},
officer = { "cis_inf_officer",1, 4},
special = { "cis_inf_droideka",1, 4},
}
}

--AddUnitClass(REP, "bes_inf_flametrooper",1,4)
--AddUnitClass(CIS, "bes_inf_geonosian",1,4)


SetTeamName (3, "jawas")
AddUnitClass (3, "tat_inf_jawa", 10,15)
SetUnitCount (3, 15)
AddAIGoal(3, "Deathmatch", 100)
SetTeamAsEnemy(ATT,3)
SetTeamAsEnemy(3,ATT)
SetTeamAsEnemy(DEF,3)
SetTeamAsEnemy(3,DEF)

SetHeroClass(CIS, "lis_hero_grievous")
SetHeroClass(REP, "bes_hero_kitfisto")



AddWalkerType(0, 4) -- special -> droidekas
AddWalkerType(1, 0) -- 1x2 (1 pair of legs)
AddWalkerType(2, 0) -- 2x2 (2 pairs of legs)
AddWalkerType(3, 0) -- 3x2 (3 pairs of legs)
local weaponCnt = 1024
SetMemoryPoolSize("SoldierAnimation", 500)
SetMemoryPoolSize("Aimer", 75)
SetMemoryPoolSize("AmmoCounter", weaponCnt)
SetMemoryPoolSize("BaseHint", 1024)
SetMemoryPoolSize("EnergyBar", weaponCnt)
SetMemoryPoolSize("EntityCloth", 32)
SetMemoryPoolSize("EntityFlyer", 32)
SetMemoryPoolSize("EntityHover", 32)
SetMemoryPoolSize("EntityLight", 200)
SetMemoryPoolSize("EntitySoundStream", 4)
SetMemoryPoolSize("EntitySoundStatic", 32)
SetMemoryPoolSize("MountedTurret", 32)
SetMemoryPoolSize("Navigator", 128)
SetMemoryPoolSize("Obstacle", 1024)
SetMemoryPoolSize("PathNode", 1024)
SetMemoryPoolSize("SoundSpaceRegion", 64)
SetMemoryPoolSize("TreeGridStack", 1024)
SetMemoryPoolSize("UnitAgent", 128)
SetMemoryPoolSize("UnitController", 128)
SetMemoryPoolSize("Weapon", weaponCnt)
SetMemoryPoolSize("EntityRemoteTerminal", 12)
SetMemoryPoolSize("MountedTurret", 70)

SetSpawnDelay(10.0, 0.25)
ReadDataFile("dc:UCM\\UCM.lvl", "UCM_conquest")
SetDenseEnvironment("false")




-- Sound

SetSoundEffect("ScopeDisplayZoomIn", "binocularzoomin")
SetSoundEffect("ScopeDisplayZoomOut", "binocularzoomout")

voiceSlow = OpenAudioStream("sound\\global.lvl", "rep_unit_vo_slow")
AudioStreamAppendSegments("sound\\global.lvl", "cis_unit_vo_slow", voiceSlow)
AudioStreamAppendSegments("sound\\global.lvl", "global_vo_slow", voiceSlow)

voiceQuick = OpenAudioStream("sound\\global.lvl", "rep_unit_vo_quick")
AudioStreamAppendSegments("sound\\global.lvl", "cis_unit_vo_quick", voiceQuick)

OpenAudioStream("sound\\global.lvl", "cw_music")
OpenAudioStream("dc:sound\\htm.lvl", "htm_hero_vo_quick");
-- OpenAudioStream("sound\\global.lvl", "global_vo_quick")
-- OpenAudioStream("sound\\global.lvl", "global_vo_slow")
OpenAudioStream("sound\\yav.lvl", "yav1")
OpenAudioStream("sound\\yav.lvl", "yav1")
OpenAudioStream("sound\\yav.lvl", "yav1_emt")

SetBleedingVoiceOver(REP, REP, "rep_off_com_report_us_overwhelmed", 1)
SetBleedingVoiceOver(REP, CIS, "rep_off_com_report_enemy_losing", 1)
SetBleedingVoiceOver(CIS, REP, "cis_off_com_report_enemy_losing", 1)
SetBleedingVoiceOver(CIS, CIS, "cis_off_com_report_us_overwhelmed", 1)

SetOutOfBoundsVoiceOver(2, "cisleaving")
SetOutOfBoundsVoiceOver(1, "repleaving")

SetAmbientMusic(REP, 1.0, "rep_yav_amb_start", 0,1)
SetAmbientMusic(REP, 0.8, "rep_yav_amb_middle", 1,1)
SetAmbientMusic(REP, 0.2, "rep_yav_amb_end", 2,1)
SetAmbientMusic(CIS, 1.0, "cis_yav_amb_start", 0,1)
SetAmbientMusic(CIS, 0.8, "cis_yav_amb_middle", 1,1)
SetAmbientMusic(CIS, 0.2, "cis_yav_amb_end", 2,1)

SetVictoryMusic(REP, "rep_yav_amb_victory")
SetDefeatMusic (REP, "rep_yav_amb_defeat")
SetVictoryMusic(CIS, "cis_yav_amb_victory")
SetDefeatMusic (CIS, "cis_yav_amb_defeat")

SetSoundEffect("ScopeDisplayZoomIn", "binocularzoomin")
SetSoundEffect("ScopeDisplayZoomOut", "binocularzoomout")
--SetSoundEffect("BirdScatter", "birdsFlySeq1")
--SetSoundEffect("WeaponUnableSelect", "com_weap_inf_weaponchange_null")
--SetSoundEffect("WeaponModeUnableSelect", "com_weap_inf_modechange_null")
SetSoundEffect("SpawnDisplayUnitChange", "shell_select_unit")
SetSoundEffect("SpawnDisplayUnitAccept", "shell_menu_enter")
SetSoundEffect("SpawnDisplaySpawnPointChange", "shell_select_change")
SetSoundEffect("SpawnDisplaySpawnPointAccept", "shell_menu_enter")
SetSoundEffect("SpawnDisplayBack", "shell_menu_exit")


--OpeningSateliteShot
AddCameraShot(0.634142, -0.010264, 0.773047, 0.012512, 170.609879, 45.829781, -174.404480);
AddCameraShot(0.432235, -0.048634, -0.894802, -0.100681, 4.130234, 59.789005, -191.375732);
AddCameraShot(0.932976, -0.083817, -0.348639, -0.031321, 73.343254, 52.536682, -123.949089);
AddCameraShot(0.856000, 0.142202, -0.490315, 0.081453, -81.838860, 35.117371, -22.050468);


end
ErrorLog:
Hidden/Spoiler:
Message Severity: 3
C:\Battlefront2\main\Battlefront2\Source\LuaHelper.cpp(312)
CallProc failed: (none):0: attempt to call global `Bridge' (a nil value)
stack traceback:
(none): in function `ScriptPostLoad'
Thanks for taking a look.
~Locutus

Re: Using a timer in conquest mode

Posted: Wed Feb 22, 2012 9:16 pm
by Firefang
Locutus wrote: function Bridge()
bridge_timer = CreateTimer("bridge_timer")
SetTimerValue(bridge_timer, 320)
StartTimer(bridge_timer)
OnTimerElapse(
function(timer)
UnblockPlanningGraphArcs("Connection51")
DisableBarriers("bridgebarrier1")
DisableBarriers("bridgebarrier2")
DisableBarriers("barrier321")
print("Auf Kameraden, es geht los!")
DestroyTimer(timer)
end,
bridge_timer
)
end
That needs to be the name of your timer.

Re: Using a timer in conquest mode

Posted: Thu Feb 23, 2012 11:04 am
by Locutus
Argh, I double-checked for typos and still didn't see it >.<
Thank you!
There was even an additional mistake because the function needed to placed after PostLoad.

Fixed both and got it working :D

Re: Using a timer in conquest mode [solved]

Posted: Fri Feb 24, 2012 12:02 am
by Tears2Roses
may I ask, what does:

Code: Select all

print("Auf Kameraden, es geht los!")
that code do? translation would be nice too.

Re: Using a timer in conquest mode [solved]

Posted: Fri Feb 24, 2012 12:17 am
by kinetosimpetus
prints that message to the errorlog.

Re: Using a timer in conquest mode [solved]

Posted: Fri Feb 24, 2012 4:44 am
by Webster27
Tears2Roses wrote:may I ask, what does:

Code: Select all

print("Auf Kameraden, es geht los!")
that code do? translation would be nice too.
Translation: "Come on comrades, let's go !"

Re: Using a timer in conquest mode [solved]

Posted: Sat Feb 25, 2012 12:00 pm
by Tears2Roses
I still dont understand how printing "come on comrades, lets go!" to the error log does anything, but lets not drag this topic on any further.

Re: Using a timer in conquest mode [solved]

Posted: Sat Feb 25, 2012 2:11 pm
by THEWULFMAN
Tears2Roses wrote:I still dont understand how printing "come on comrades, lets go!" to the error log does anything, but lets not drag this topic on any further.


Basically, it's required for functions to work. It can be named pretty much anything, like "I drink your milkshake" or "no soup for you". It just needs something to print out in the error log.

Re: Using a timer in conquest mode [solved]

Posted: Sat Feb 25, 2012 5:24 pm
by Tears2Roses
oohh I see, thanks wulf.

Re: Using a timer in conquest mode [solved]

Posted: Sun Feb 26, 2012 1:53 am
by Firefang
You actually don't need to put print in to have the function work, sorry Wulf, but it's actually used as a debugger. When the game has read passed that point in the code, it will put the print line into the debugger. You can use this if you have errors in the code to figure out where it stops working (first line, second, thirtieth, etc.) or to give yourself notes that the function has run properly.
Example:

Code: Select all

boxkill = OnCharacterDeath(
function(character, killer)
print("line 1")
if IsCharacterHuman(character) then
KillObject("box")
print("the box has been destroyed")
end
end
)
If "line 1" appears in your debug log, you know the function has been activated. And if "the box has been destroyed" appears, you know it was destroyed, even if you didn't see it.

Re: Using a timer in conquest mode [solved]

Posted: Sun Feb 26, 2012 5:58 am
by THEWULFMAN
Firefang wrote:You actually don't need to put print in to have the function work, sorry Wulf, but it's actually used as a debugger.

I had guessed as much, but since it's always included I just wanted to simplify it for Rosy. Anyway, thanks for the info. :)