Random units

In this forum you will find and post information regarding the modding of Star Wars Battlefront 2. DO NOT POST MOD IDEAS/REQUESTS.

Moderator: Moderators

User avatar
skelltor
Sith
Sith
Posts: 1431
Joined: Fri Dec 11, 2009 6:24 pm
Projects :: BFSM
Games I'm Playing :: SWBFII
xbox live or psn: skelltor95
Location: minisnowta
Contact:

Re: Random units

Post by skelltor »

here is my lua
Hidden/Spoiler:
--
-- Copyright (c) 2005 Pandemic Studios, LLC. All rights reserved.
--

-- load the gametype script
ScriptCB_DoFile("ObjectiveConquest")
ScriptCB_DoFile("AIHeroSupport")
ScriptCB_DoFile("setup_teams")
ScriptCB_DoFile("ambush")

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



function ScriptPostLoad()


--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"}



--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:Start()

herosupport:AddSpawnCP("cp1","cp1_spawn")
herosupport:AddSpawnCP("cp2","cp2_spawn")
herosupport:AddSpawnCP("cp3","cp3_spawn")
herosupport:AddSpawnCP("cp4","cp4_spawn")
herosupport:AddSpawnCP("cp5","cp5_spawn")
herosupport:Start()

EnableSPHeroRules()
SetupAmbushTrigger("ambushregion", "ambushpath", 6, 5)

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("ingame.lvl")


SetMaxFlyHeight(30)
SetMaxPlayerFlyHeight (30)

SetMemoryPoolSize ("Combo",1000) -- should be ~ 2x number of jedi classes
SetMemoryPoolSize ("Combo::State",1000) -- should be ~12x #Combo
SetMemoryPoolSize ("Combo::Transition",1000) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Condition",1000) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Attack",1000) -- should be ~8-12x #Combo
SetMemoryPoolSize ("Combo::DamageSample",6000) -- should be ~8-12x #Combo::Attack
SetMemoryPoolSize ("Combo::Deflect",1000) -- should be ~1x #combo
SetMemoryPoolSize ("ClothData",400)
SetMemoryPoolSize ("EntityCloth",400)
SetMemoryPoolSize ("Music", 200)


ReadDataFile("sound\\yav.lvl;yav1cw")
ReadDataFile("SIDE\\BFSM\\tur.lvl",
"tur_bldg_chaingun_roof",
"tur_weap_built_gunturret")

ReadDataFile("SIDE\\BFSM\\rep.lvl",
"rep_inf_501st_rifleman",
"rep_inf_501st_rocketeer",
"rep_inf_501st_engineer",
"rep_inf_501st_sniper",
"rep_inf_officer",
"rep_inf_501st_jettrooper",
"rep_inf_commando",
"rep_inf_shadow",
"rep_inf_ep3_Commander_appo",
"rep_hero_yoda")


ReadDataFile("SIDE\\BFSM\\cis.lvl",
"cis_inf_battledroid",
"cis_inf_assaultdroid",
"cis_inf_flamedroid",
"cis_inf_neimoidian_officer",
"cis_inf_ig_assassindroid",
"cis_inf_geonosian",
"cis_inf_B2_RP",
"cis_inf_sniper",
"cis_inf_rocket_battledroid",

"cis_inf_droideka",
"cis_inf_magnaguard",
"cis_inf_commander",
"cis_hero_jangofett")






--SetAttackingTeam(ATT)

SetupTeams{

rep={
team = REP,
units = 24,
reinforcements = 300,
soldier = {"rep_inf_501st_rifleman", 6, 25},
assault = {"rep_inf_501st_rocketeer", 1, 4},
engineer = {"rep_inf_501st_engineer", 1, 4},
sniper = {"rep_inf_501st_sniper", 1, 4},
officer = {"rep_inf_officer", 1, 4},
special = {"rep_inf_shadow", 1, 4},


},

cis={
team = CIS,
units = 24,
reinforcements = 300,
soldier = {"cis_inf_battledroid",6, 25},
assault = {"cis_inf_assaultdroid",1, 4},
engineer = {"cis_inf_flamedroid",1, 4},
sniper = {"cis_inf_sniper",1, 4},
officer = {"cis_inf_neimoidian_officer",1, 4},
special = {"cis_inf_droideka",1, 4},

}

AddUnitClass(REP, "rep_inf_501st_jettrooper",1,2)
AddUnitClass(REP, "rep_inf_commando",1,2)
AddUnitClass(REP, "rep_inf_ep3_Commander_appo",0,1)
AddUnitClass(CIS, "'Random() will return between 0 and 1, so we need to multiply it by the number of units we want
Dim randomNumber = Random() * 5

If randomNumber <= 1
AddUnitClass("cis_inf_rocket_battledroid")
ElseIf randomNumber = 2
AddUnitClass("cis_inf_ig_assassindroid")
ElseIf randomNumber = 3
AddUnitClass("cis_inf_geonosian")
ElseIf randomNumber = 4
AddUnitClass("cis_inf_B2_RP")
ElseIf randomNumber = 5
AddUnitClass("cis_inf_rocket_battledroid")
'Now catch any exceptions, just in case
Else
AddUnitClass("cis_inf_rocket_battledroid")
EndIf",1,2)
AddUnitClass(CIS, "cis_inf_magnaguard",1,2)
AddUnitClass(CIS, "cis_inf_commander",0,1)


SetTeamAsFriend(ATM, REP)
SetTeamAsFriend(REP, ATM)
SetTeamAsEnemy(ATM, CIS)
SetTeamAsEnemy(CIS, ATM)
ClearAIGoals(ATM)
AddAIGoal(ATM, "Deathmatch", 100)




-- Level Stats
-- ClearWalkers()
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("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 ("SoldierAnimation",1024)
SetMemoryPoolSize("TreeGridStack", 1024)
SetMemoryPoolSize("UnitAgent", 128)
SetMemoryPoolSize("UnitController", 128)
SetMemoryPoolSize("Weapon", weaponCnt)

SetSpawnDelay(10.0, 0.25)
--ReadDataFile("dc:RNF\\RNF.lvl", "RNF_conquest")
ReadDataFile("..\\..\\addon\\RNF\\data\\_LVL_PC\\RNF\\RNF.lvl","RNF_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("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.908386, -0.209095, -0.352873, -0.081226, -45.922508, -19.114113, 77.022636);

AddCameraShot(-0.481173, 0.024248, -0.875181, -0.044103, 14.767292, -30.602322, -144.506851);
AddCameraShot(0.999914, -0.012495, -0.004416, -0.000055, 1.143253, -33.602314, -76.884430);
AddCameraShot(0.839161, 0.012048, -0.543698, 0.007806, 19.152437, -49.802273, 24.337317);
AddCameraShot(0.467324, 0.006709, -0.883972, 0.012691, 11.825212, -49.802273, -7.000720);
AddCameraShot(0.861797, 0.001786, -0.507253, 0.001051, -11.986043, -59.702248, 23.263165);
AddCameraShot(0.628546, -0.042609, -0.774831, -0.052525, 20.429928, -48.302277, 9.771714);
AddCameraShot(0.765213, -0.051873, 0.640215, 0.043400, 57.692474, -48.302277, 16.540724);
AddCameraShot(0.264032, -0.015285, -0.962782, -0.055734, -16.681797, -42.902290, 129.553268);
AddCameraShot(-0.382320, 0.022132, -0.922222, -0.053386, 20.670977, -42.902290, 135.513001);

herosupport = AIHeroSupport:New{AIATTHeroHealth = 5000, AIDEFHeroHealth = 5000, gameMode = "Conquest",minSpawnTime = 20,}
herosupport:SetHeroClass(CIS, "cis_hero_jangofett")
herosupport:SetHeroClass(REP,"rep_hero_yoda")
end
User avatar
Teancum
Jedi Admin
Jedi Admin
Posts: 11080
Joined: Wed Sep 07, 2005 11:42 pm
Projects :: No Mod project currently.
Games I'm Playing :: Destiny
xbox live or psn: No gamertag set
Location: Indiana

Re: Random units

Post by Teancum »

skelltor wrote:i have played around with it but cant get it right i always get this error C:\BF2_ModTools\data_MAP\_BUILD\..\..\ToolsFL\Bin\luac.exe: ..\..\common\scripts\MAP\RNFr_con.lua:161: `}' expected (to close `{' at line 132) near `AddUnitClass'
ERROR[scriptmunge scripts\MAP\RNFr_con.lua]:Could not read input file.ERROR[scriptmunge scripts\MAP\RNFr_con.lua]:Could not read input file. [continuing]
2 Errors 0 Warnings
Okay, now that we have the lua, here's how we search for the error. We see that the issue happened on or near line 161, based on something that happens on line 132, and it looks like a bracket is missing. First thing to do is download SciTE (which according to Psych0fred is what some of the Pandemic developers used). Make sure you download the Windows version, and not the source code. Once you have it installed, open the lua in it. The first thing you'll notice is that everything is pretty and color coded, which makes luas much easier to work with.

So in SciTE, click "View" then "Line Numbers", then scroll down to 132. On 132 we see SetupTeams{. On line 161 it's expecting that we'd have a } to close out SetupTeams{}, but it's missing. Instead we see AddUnitClass(REP, "rep_inf_501st_jettrooper",1,2). The solution? Add a } to line 160 to close out SetupTeams{}.

Now that might not be the only error you'll find. The munge only records the first error it sees, and line 164:

AddUnitClass(CIS, "'Random() will return between 0 and 1, so we need to multiply it by the number of units we want

Is also messed up. Remember I said:
Hidden/Spoiler:
[quote="Teancum"]Here's the idea, but know this is Visual Basic pseudocode and not actual LUA (admittedly I don't know LUA very well). It just gives you the gist of what you're looking at:

[code]ScriptPostLoad()

ReadDataFile("DC:mycoolstuff.lvl")
"blablabla")

'Random() will return between 0 and 1, so we need to multiply it by the number of units we want
Dim randomNumber = Random() * 5

If randomNumber <= 1
AddUnitClass("first choice")
ElseIf randomNumber = 2
AddUnitClass("second choice")
ElseIf randomNumber = 3
AddUnitClass("third choice")
ElseIf randomNumber = 4
AddUnitClass("fourth choice")
ElseIf randomNumber = 5
AddUnitClass("fifth choice")
'Now catch any exceptions, just in case
Else
AddUnitClass("backup choice")
EndIf[/code][/quote]
If you want something closer to what you need, check out Lucasfart's code
Hidden/Spoiler:
[quote="lucasfart"]just add
[code]random = math.random(1, #) --replace hash with the number of variations you want

function random()
if random == 1
then AddUnitClass(#, "Unit_Name_here")-- # = Side number/name
AddUnitClass(#, "Unit_Name_here")-- # = Side number/name
AddUnitClass(#, "Unit_Name_here")-- # = Side number/name
AddUnitClass(#, "Unit_Name_here")-- # = Side number/name
AddUnitClass(#, "Unit_Name_here")-- # = Side number/name
elseif random == 2
--repeat the first example however many times you want.
end
[/code]
You should note that all your units will have to be called in the .lvl file lower down, and you should only have units in the 4 slots that you want already called.

That should work, i just wrote it off the top of my head. Its a fairly easy thing to write and you should get the hang of it straight away.[/quote]
User avatar
skelltor
Sith
Sith
Posts: 1431
Joined: Fri Dec 11, 2009 6:24 pm
Projects :: BFSM
Games I'm Playing :: SWBFII
xbox live or psn: skelltor95
Location: minisnowta
Contact:

Re: Random units

Post by skelltor »

ok thx tean :D
Post Reply