Hmmm
Well, I'm going to get around to making BZC's AIP's I guess...
Don't really know where to start...
Provide names, Should I use gineric provide names for the AIP to grab? Like tank, ltnk, rckt, hraz, figh, etc... not including any race letters, so it would be gineric? Or does it need to have av/sv/bv/rv infront?
Also im not sure how to setup some things, so I'll be posting more questions for the masses...
As long as you create those generic odfs without the letters AND you post those appropriate provideNames in the odf, you should be fine going that route.
Where do i put the checkprovides = true to make it work across aip? or do i need to put it in each routine?
[Plan1]
planType = "CollectPool"
planPriority = 900
scavClass = "svrecy"
This doesnt seem to work when playing the map in the editor?
Help?
Why do you want a scion recy to scavenge?
pb4a has some inbuilt generic provide names
defender (gts all sorts)
defendunit (tanks/scouts etc)
assault (assault tanks/walkers etc)
recy (All recy's)
base (buildings)
extract (deployed scavs)
Turrets seem to have missed out on getting a generic provide name in pb4a. I gave mine defender.
It would probably make your life allot easier to use these generic names rather that make your own. They work well.
In each AIP.
[Start]
DLLCanSwitch = False
scrapCount = 40
consClass = "dvcons"
scavClass = "dvscav"
baseDir = 0
checkProvides = True
svrecy is a BZC soviet recycler, really a hover scavenger that deploys on a geyser (scrap pool class).
Need to see the odf really.
the stock odf currently has no provide names.
The scav wont even deploy on the pool???
QuoteThis doesnt seem to work when playing the map in the editor?
I don't think any AIP commands will work in the editor, I don't think it runs the AIP's in the editor.
yes it does, if the editor version of the dll is there.
run it in the proper game with the aip debugger, might tell you whats up...
aip debugger just loops between the first few plans.
bnormal game dll doesnt work atm.
Quoteyes it does, if the editor version of the dll is there.
? ? ?
You have to run an IA map for the AIP's to run.
What does the AIP log say?
oh right, aip log...forgot i could turn that on...
It just shows the plans...
Init - section(Plan1) planType(CollectPool) priority(900) << Failed plan.
Init - section(Plan2) planType(BuildMinimums) priority(950)
BuildMinimums::Init...svscav(3)...svmuf(1)...svslf(1)...
Init - section(Plan3) planType(CollectPool) priority(900)
Init - section(Plan4) planType(CollectPool) priority(850)
Is there a RecyclerEnemy path point on the map? If there isn't, the recycler won't spawn and the AIP won't run.
Is it a custom map?
If so, is it running the BZC dll or the stock dll?
In pb4, provideNames are critical. In pb4a, the game should work without the provideName being in the odf.
Post the plan and post your odf.
Hmm, Seems like after i deploy my rec and SA1 aip kicks in, THEN it starts actually doing stuff....
hmph...
BZC DLL.
BZC Map.
BZC Everything.
SA0.aip
[Start]
scrapCount = 100
consClass = "svcnst"
scavClass = "svscav"
CheckProvides = true
[IdleDispatcher]
ScavIdleSeconds = 1
UnitIdleSeconds = 1 //360
MinAttackForce = 3 // min # of idle units before dispatch
MaxAttackForce = 11 // max # of idle units before dispatch
[Plan1]
planType = "CollectPool"
planPriority = 900
planCondition = "Exists"
planConditionClass = "svrecy"
planConditionCount = 1
planCondition2 = "NotExists"
planConditionClass2 = "sbrecy"
planConditionCount2 = 1
scavClass = "svrecy"
maxTries = 2
[Plan2]
planType = "BuildMinimums"
planPriority = 950
planCondition = "Exists"
planConditionClass = "sbrecy"
planConditionCount = 1
minTtlScrap = 30
buildType1 = "svscav"
buildCount1 = 3
buildType2 = "svmuf"
buildCount2 = 1
buildType3 = "svslf"
buildCount3 = 1
[Plan3]
planType = "CollectPool"
planPriority = 900
scavClass = "svmuf"
buildIfNoIdle = 1
[Plan4]
planType = "CollectPool"
planPriority = 850
scavClass = "svslf"
buildIfNoIdle = 1
[Plan5]
planType = "BaseBuildMinimums"
planPriority = 800
minTtlScrap = 30
buildType1 = "sbspow"
buildCount1 = 1
buildLoc1 = "SPow1"
buildType2 = "sbtowe"
buildCount2 = 1
buildLoc2 = "GTow11"
buildType3 = "sbtowe"
buildCount3 = 1
buildLoc3 = "GTow12"
doNextOnFail = 1
[Plan6]
planType = "BaseBuildMinimums"
planPriority = 750
minTtlScrap = 30
buildType1 = "sbspow"
buildCount1 = 1
buildLoc1 = "SPow2"
buildType2 = "sbtowe"
buildCount2 = 1
buildLoc2 = "GTow21"
buildType3 = "sbtowe"
buildCount3 = 1
buildLoc3 = "GTow22"
doNextOnFail = 1
[Plan7]
planType = "BaseBuildMinimums"
planPriority = 700
minTtlScrap = 30
buildType1 = "sbspow"
buildCount1 = 1
buildLoc1 = "SPow3"
buildType2 = "sbtowe"
buildCount2 = 1
buildLoc2 = "GTow31"
buildType3 = "sbtowe"
buildCount3 = 1
buildLoc3 = "GTow32"
doNextOnFail = 1
[Plan8]
planType = "BaseBuildMinimums"
planPriority = 650
minTtlScrap = 30
buildType1 = "sbhang"
buildCount1 = 1
doNextOnFail = 1
[Plan9]
planType = "BaseBuildMinimums"
planPriority = 600
minTtlScrap = 30
buildType1 = "sbsupp"
buildCount1 = 1
doNextOnFail = 1
[Plan10]
planType = "BuildMinimums"
planPriority = 550
minTtlScrap = 30
buildType1 = "svtank"
buildCount1 = 5
buildIfNoIdle = 1
[Plan11]
planType = "Attacker"
planPriority = 500
planCondition = "HisExists"
planConditionClass = "abmuf"
planConditionCount = 1
minTtlScrap = 30
targetType = "abmuf"
attackType1 = "svtank"
attackType2 = "svtank"
attackType3 = "svtank"
maxAttacks = 3
maxTries = 3
buildIfNoIdle = 1
doNextOnFail = 1
[Plan12]
planType = "BuildMinimums"
planPriority = 450
buildType1 = "svltnk"
buildCount1 = 5
buildType2 = "svtank"
buildCount2 = 5
[Plan13]
planType = "BaseBuildMinimums"
planPriority = 400
minTtlScrap = 30
buildType1 = "sbtowe"
buildCount1 = 5
[Plan14]
planType = "Attacker"
planPriority = 350
planCondition = "HisExists"
planConditionClass = "abspow"
planConditionCount = 3
minTtlScrap = 30
targetType = "abspow"
attackType1 = "svltnk"
attackType2 = "svltnk"
attackType3 = "svltnk"
maxAttacks = 2
maxTries = 2
buildIfNoIdle = 1
doNextOnFail = 1
[Plan15]
planType = "BuildMinimums"
planPriority = 300
planCondition = "HisExists"
planConditionClass = "abslf"
planConditionCount = 1
minTtlScrap = 30
buildType1 = "svapc"
buildCount1 = 4
maxLoops = 5
buildIfNoIdle = 1
[Plan16]
planType = "Attacker"
planPriority = 250
planCondition = "Exists"
planConditionClass = "svapc"
planConditionCount = 4
minTtlScrap = 30
targetType = "abslf"
attackType1 = "svapc"
attackType2 = "svapc"
attackType3 = "svapc"
attackType4 = "svapc"
maxAttacks = 5
maxTries = 5
buildIfNoIdle = 1
doNextOnFail = 1
New issue.
if the player chooses a diff recy varient for cpu team, it seems to die.
looks like the aip is looking for odf "sbrecy" when aiteam has deployed a "sbrecy_gbd"
How do i make it check provide names for such a "Exists" requirement?
The stock DLL deploys the AI recycler and everyting hinges on that, so it looks like the BZC dll needs to deploy it too.
sbrecy_gbd.odf needs a a provideName of "sbrecy" and use planConditionClassProvided# = true
BZC Recy is a scav, u know.
And ya. once SA1/3 kicks in, the recy deploys. Wonder why it doesnt do it before though...
Will these commands use provide names as well?
scavClass = "svmuf"
buildType1 = "sbspow"
targetType = "abslf"
That's why I said the BZC dll needs to deploy it.
buildType and targetType will.
Is there any way to make the AIP look for "If player has Xunit within X meters of Airecy, do blahblah"?
That's the DefendArea plan.
oh? you'll have to teach me how that works then...
another question, is there an aip way to make the ai send some ships to "patrol" a pathpoint?
This is a DA plan I am using in Uler atm. The targetType and planConditioNclass are both entries in provideName sections.
[Plan48]
planType = "DefendArea"
planPriority = 940
CheckProvides = true
planCondition = "Exists"
planConditionClass = "responder3"
planCompare = ">="
planConditionCount = 1
planConditionClassProvided = true
targetType = "biometal"
searchRadius = 200
MaxUnits = 3
No AIP command for patrolling yet. You can use the Explore planType as a crude version of it though.
explore???
also, i have no idea what im doing :|
What should priority be? i assume it must go in order from top to bottom?
Or can i use it to make AI concentrate on more things then others? What...
Also, when using notepad ++, and i insert a plan in the middle of the aip, is there a way to make it auto shuffle the plan numbers down? :-(
Wish there was. Just look at some existing AIP's to see how it's done.
k, and just so its clear,
planConditionClass# = ""
TargetType# = ""
use provide names, while
buildtype= ""
attackType = ""
use odf names?
You can use either an ODF name or a provideName entry in either.
G66 has ships that patrol, but I don't know if they're told to do so by the aip way or the dll.
i think dll
Quoteif the player chooses a diff recy varient for cpu team, it seems to die.
There are really only 2 reasons why you might want to use a custom CPU recy.
1. Its using a different model.
2 There are odf settings that are different from the normal recy.
You
DO NOT need to use a custom CPU recy/fact/constructor to have the AIP build custom units or buildings.
The list of things in a recy/factory/constructor ODF is not used by the AI, If you write an aip telling the cpu team to build something, it builds it, listed or not.
[Plan1]
etc etc
Is not important to the aip,, they don't need to be in any particular order.
New problem:
I am trying to make turrets deploy on pathpoints. I have pathpoints "Turr1" - "Turr10" on the map where i want them.
I have the following in the aip:
[Plan36]
planPriority = 760
planCondition = "Exists"
planConditionClass = "sbmuf"
planConditionCount = 1
planCompare = ">="
planConditionClassProvided = true
holdType1 = "svturr"
holdCount1 = 1
holdPoint1 = "turr1"
holdType2 = "svturr"
holdCount2 = 1
holdPoint2 = "turr2"
holdType3 = "svturr"
holdCount3 = 1
holdPoint3 = "turr3"
holdType4 = "svturr"
holdCount4 = 1
holdPoint4 = "turr4"
buildIfNoIdle = 1
maxTries = 4
And I get this error message in console:
WARN|GLOBAL | ConsoleHelper:34 |16:44:41|78834 |Planner Error: Missing path-point NULL in HOLD plan
FaWhy?
First try to only have one hold plan, see if the error pops up again.
Try adding a pathpoint called 'NULL'.
Quote from: bigbadbogie on October 13, 2008, 11:42:28 PM
Try adding a pathpoint called 'NULL'.
It would be better to fix the actual cause than to install the wrong fix.
Doesn't stop me. :-P
Use the Deployer planType from PB2:
[Plan#]
planType = "Deployer" // New planType.
buildLoc = "pathname" // Required: Pathpoint name. Plan shuts down if not valid.
DeployClass = "ivrecy" // Required: GameObjectClass of what to send. Plan shuts down if not valid.
If the buildLoc or DeployClass are invalid/not found, then this
plan will go into a safety mode and do nothing. ["pathname" and
"ivrecy" above are only examples, the true defaults are empty strings,
i.e. do nothing] Note that all the other usual common/shared items in
a [Plan#] can be added. Things like conditions, buildIfNoIdle, and the
like can be specified as well. You'll probably want to at least put a
NotExists condition on the plan to ensure it doesn't keep building and
sending things to a destination. Also, this doesn't apply to just
'recyclers' -- it sends a 'deploy at' command to its target object.
Next problem:
on my MPI map, nice, brand new mpi map, there is no enemy recycler spawned, and i get the following when my recy spawns.
[CONSOLE] ERROR: AIP file bzceasy_s not found!
help?
The aip file names are setup as follows:
bzceasy_sa0.aip - bzceasy_sal.aip
files:
bzceasy_sa0.aip
bzceasy_sa1.aip
bzceasy_sa3.aip
bzceasy_sas.aip
bzceasy_sal.aip
Using stock MPI dll.
Whats wrong?
A typo somewhere??
Check Autoregs
Assuming that you do have racenames begining with s and a
It should (not) be saying
[CONSOLE] ERROR: AIP file bzceasy_sa0 not found!
your autoreg should have an entry like
ODFName = "bzceasy_"
I thought if you specified txt files it overwrode autoreg files.
do I HAVE to make autoregs?
No.
the following autoreg in my addon did nothing:
[AIPList]
ODFName = "BZCEasy_"
Description = "BZC Easy Aip Set"
[IAAIPList]
ODFName = "BZCEasy_"
Description = "BZC Easy AIP Set"
And I don't plan on using autoregs, the aip's appear in the list. That is not the issue, the issue is in game, on the map.
do you have both:
svrecycpu
svrecy
avrecycpu
avrecy
?? try turning on /odf warnings as well
yes those work.
instant action works.
I copied the instant action map, and made it mpi.
Is there something i missed on map?
Yes I suppose if no recy is spawned it looks for an aip that is not there, bzceasy_s.
You probably just need to put the right pathpoints on the map.
i think MPI needs more pathpoints than IA as standard...
i know strats need none, just two pspwn_1.odf things.
Strat maps are so easy that I could do them in my sleep.
MPI and IA are basically the same you know... just more players on team 1.
still need an answer as to why.
There should be one RecyclerEnemy path point in the enemy base, a Recycler path point in your base, and no pspwn's on the map for MPI.
Quote from: Red Devil on October 28, 2008, 02:34:42 AM
There should be one RecyclerEnemy path point in the enemy base, a Recycler path point in your base, and no pspwn's on the map for MPI.
You are only required to have one pspwn_1 on team zero for the human team for IA & MPI.
i have all of that.
there must be something missing.
my lovingly crafter and re-created tranquility MPI/IA/ST map got its .bzn fiel corrupted and wouldnt load because i had named path points wrong. luckily i had a backup :)
Save it in ASCII and then you can edit pathpoint names directly in the .bzn file.
Greenheart, help?
yeh i did, but it still failed...
I'm thinking that this is in the map's inf file:
svar3 = "bzceasy_s"
and it needs to be be this:
svar3 = "bzceasy_"
Kinda like groping around in the dark, though.
maps inf file.
[DESCRIPTION]
missionName = "BZC MPI: The Crater"
mapTga = "BZCCraterI.bmp"
mapDesc = "BZCCraterI.odf"
mySide = 1
[NetVars]
// For master list of descriptions, see source\network\vars.txt
ivar0 = 0 // Kill limit, 0= unlimited
ivar1 = 0 // Time limit, 0= unlimited
ivar2 = 5 // player limit. Commenting out this line means current setting not changed
ivar3 = 1 // 1=Teamplay on, 0=Teamplay off
ivar4 = -1 //786432 // Bitfields saying which vehicles out of mpvehicles.txt are allowable. 33= both scouts
ivar5 = 2 // All=0, DM=1, Strat=2, all other values undefined (used in filters)
ivar6 = 0 // Vehicles allowable II (if ever implemented)
ivar7 = 2 // Strategy02.dll starting prefs: turrets at AI level 2, rest AI 0, default scrap, nothing extra [see vars.txt for gory details on bits]
ivar8 = 1 // Sync Join. 0=off, 1=on.
ivar9 = 30 //unit limit, 0 is unlimited
//ivar10 = 0 // 0=pausing joins, 1=nonpausing
ivar11 = 1 // locks team play
ivar12 = 1 // lock all to team 1
ivar13 = 115 // ascii for enemy team: NSDF=97, BDOG=98, CCA=115, RWLF=114, CRA=99, Olympian=111, Hadean=104
ivar14 = 1 // points for killing AI
ivar15 = 1 // kill for killing AI
ivar16 = 1 // keep sniper rifle on pilot respawn
ivar20 = 4 // mwf setting :)
ivar23 = 0 // Default scrap cheat for humans
ivar24 = 0 // Default scrap cheat for CPU
ivar30 = 1 // weaponlinking on :) (because I really don't want to go through 32 extra option files again)
ivar60Min = 0 // Minimum lives, 1. (0 is to turn lives off)
ivar60Max = 5 //Maximum lives, 5.
// Svar0 (.bzn filename, used to look for an .inf file like this)
// *not* read in, as that would cause an infinite loop
svar1 = "Team Red" // Team name for team 1
svar2 = "Team Blue" // Team name for team 2
svar3 = "bzceasy_" //Normal aip's by default
svar4 = "BZCmpvehicles.txt" //moon, default
svar5 = "ivrecy_m" // Lockstep to make sure correct Recy is preset to begin with.
svar6 = "BZC_stratstarting.txt" // race letter.
svar7 = "bzcmpi" // Custom shell page to pull up [actually bzshell_multi_####.cfg] //moon, default
svar9 = "BZCRecyList.txt" // Custom Recycler list file. //moon, default
svar10 = "BZC_aiplist.txt" // Custom AIP list file. //moon, default
svar13 = "BZCanimals.txt" // lets make furies :) //moon, default
This sounds a lot like what happened when I was working on a map a couple months ago.
Contents of BZCRecyList.txt and BZC_aiplist.txt?
AIP's in search path?
Add this?
svar12 = "ivrecycpu" // AI Recycler
Was the map changed to point to the MPI DLL?
BZCRecylist and AIP lists work, it's just the spawning of enemy rec that phails.
dll = mpinstant.dll
? gonna go test the svar thing.
Nope, still the same error.
:?
I'd say try it using another race for the AI, then, if it works for them, that would narrow it down to the recycler. If not, then the path point on the map is probably wonky.
The race name 's' exists/is defined?
Greenheart went over it and couldn't figure it out yet.
Everything I know of, that should exist, exists. svrecy/avrecy, svrecycpu/avrecycpu, the aips for human a vs ai s, the pathpoints named on the map.
The map is a direct copy of an instant map that works fine with the exact same race setup.
the inf is correct I think? (look on last page for inf)
So...Wth?
Is there a bzceasy_saa.aip and a bzceasy_asa.aip?
Edit: Reason I ask is that I didn't see one listed in your list a page or so back.
ATM there is only a bzceasy_sa set of aips.
? shouldn't it only work as playing american vs soviet then?
I'm asking if a file exits named bzceasy_saa.aip.
no, i didn't make that because BZC does not use any assault ships.
I'm pretty sure it scans to see that that all the 013als files exist and if any one of them doesn't, it gives that error message.
Quoteno, i didn't make that because BZC does not use any assault ships.
Hmmm.
It may be better for you to use the DLLCanSwitch = False
aip entry, then you can define exactly when you want the aips to switch in the aip itself, rather than trying to work around weird dll problems and stuff like not having any assault units.
It can just be a dummy AIP file.
nope, making a bzceasy_saa.aip file didn't do anything...:(
and the enemy recy still doesnt spawn
Does it spawn on a stock map?
there are no stock maps....Ugh brb lemme go fiddle with it.
nope, does the same thing on a stock map.
Then that points to the setup or an error in the ODF(s), but you say it works in IA. So that tells me that it is probably expecting another type of recycler to spawn. Try making an svrecy_m, and an svrecy if they don't already exist.
Also, can you post the contents of:
svar9 = "BZCRecyList.txt" // Custom Recycler list file. //moon, default
svar10 = "BZC_aiplist.txt" // Custom AIP list file. //moon, default
Failing that, stick the mod in my folder or on FileFront and I'll poke around.
svrecy_m and svrecy_mb already exist.
BZC AIP LIST
// !!! IMPORTANT NOTICE! You'll need to make 6 more copies for each world. Remind me when AIP's are made!
bzceasy_ BZC Easy AIP's
/bzcnorm_ BZC Normal AIP's
bzchard_ BZC Hard AIP's
/bzcextr_ BZC Extreme AIP's
BZC Recy List
avrecy_m Recycler (defalt)
avrecy_gbd Recycler (GBD: BZC Hardcore)
avrecy_2gbd Recycler (GBD: BZC Hardcore W/ Goodies)
Okay, zip everything up and I'll see what there is to see, if you like.
For like temporary reasons, like in the uler, couldnt you make the AIPs simple, like, go here, and kill anything? Untill you get more um specific AIPs that is.
I think/I may have/ possibly found the problem(s).
1. When I use the ISDF Recyclers for human and CPU and use the stock13_ AIP set (I moved the existing ones from BZCClassic out), the Recycler vehicles don't deply, but just sit there.
When I use the Deployer AIP plan, the vehicles rise about 20 meters in the air and deploy the building on the ground below them, so it looks like there might be a terrain height issue, which I'm sure GH can adjust. This would explain why ISDF Recyclers would just sit there without being forced to deploy.
2. The IA map uses BZCInstant.dll, but the MPI map uses MPInstant.dll and MPInstant.dll tries to deploy the Recycler on RecyclerEnemy, but the AIP plan tries to send the Recycler (it actually being a Hover Scav) to deploy on a pool. In other words, it's conflicted. :?
So, either a BZCMPInstant.dll needs to be made or the *cpu Recyclers will have to be made true Recyclers so the MPInstant.dll can send them to deploy on the RecyclerEnemy pathpoint.
To eliminate the model/odf, I replaced sv/sbrecycpu with the ISDF one, but it still doesn't want to spawn it, so it may be a race selection thing.
I'm having it read mpicheck with svar8 now.
Also, it looks like the either BZCInstant.dll was made from MPInstant.dll or the IA cfg is from the MP one because I get a 'Chatting with All' message.
do what?
Just took a break to get some more wood in, enjoy some good pizza, and have a nice hot mug of rich chocolatey Ovaltineā¢. -17 with the wind here.
I recopied the IA map in case that was it and I tried pre-placing a Recycler on the maps, but they didn't deploy, so I'm thinking the height thing might be blocking it. Still digging.
Figured it out.
MPInstant.dll expects a recyclervehicle class for the AI team and when it doesn't find that, it doesn't spawn it and when the human recycler is deployed, it can't find the recycler on the other team and so it can't start the 0 AIP.
If I replace both the human and AI recycler vehicles with tracked versions, it runs fine.
Solutions?
A) Modify the MPInstant dll to not look for recyclervehicle and put it in BZCAddon.
B) Use tracked versions, but that would ruin BZC.
C) Modify the starting recyclers somehow to mimic tracked recyclervehicles.
D) Give up.
// Sees if this is a m_HumanRecycler vehicle ODF, and returns the race
// ('a'..'z') if true. Returns 0 if not a m_HumanRecycler.
static int IsRecyclerODF(Handle h)
{
if(h == 0)
{
return 0;
}
char ODFName[64];
GetObjInfo(h, Get_CFG, ODFName);
char ObjClass[64];
GetObjInfo(h, Get_GOClass, ObjClass);
if((_stricmp(ObjClass, "CLASS_RECYCLERVEHICLE") == 0) || (_stricmp(ObjClass, "CLASS_RECYCLER") == 0))
return ODFName[0];
// fallback: not a m_HumanRecycler.
return 0;
}
ok. so i need avatar to do more dll work. Great :)
Thanks RD. Btw wanna test sometime?
I stuck the modified dll in your BZCAddon folder. I just tested it and it works fine now.
Thanks. I tried to modify it myself but I can't seem to find how to export the saved ...whatever it is. PM me details/instructions?