Jump to content
Website Updates and Upgrades are still underway! We don't expect any further downtime, but we thank you for your patience as we restore themes and other elements including the Chatbox.

=VG= XOR

VG Clan Member
  • Posts

    207
  • Joined

  • Last visited

Everything posted by =VG= XOR

  1. Gotcha, I've got a few ideas on how to randomize spawn points on mission start, the tricky part is randomizing successive spawns after mission is loaded, I'll start with mission start randomization first though.
  2. Certainly flight physics as well, wouldn't we all like to take off in 50m< on irregular terrain in a jet like the bots do... But i stand corrected, i could have been clearer. ------------------------------------------------------------------------------------------------------------------------------------------ https://www.moddb.com/mods/sw33tsp0t BF2 Total War Realism Mod https://www.youtube.com/watch?v=TvPK6EKQkMQ Video which adequately illustrates the scope of the AI config for the mod above. https://www.moddb.com/mods/bf2-sp-128-professional-ai BF2 SP 128 Professional AI Both mods linked above feature quiet interesting AI configs, with decent results as shown in video, though i recommend you try both yourself, if you still happen to have bf2, or simply dissect & examine the config otherwise, i find both offer a superior single player experience, which would logically translate to coop, the configs for TWRM for instance could offer a known behavioral baseline around which PRBF2 AI configs could be optimized. ------------------------------------------------------------------------------------------------------------------------------------------ Regarding python spawner, have you considered defining the insurgent caches in the map config, perhaps replace one or two defined vehicles on a given map with a cache and then simply move/teleport the cache to any one of randomly selected coordinates or perhaps to a randomly selected CombatArea.<areaPoint> coordinate. It would be far simpler to implement, the rallypoint spawner can then be used to spawn rally points at random CombatArea.<areaPoint> coordinates surrounding(w/in 100m) cache coordinate. I don't know the extent of the insurgency logic you've implemented, so i'm just spitballing. -If i recall the add framework had a teleport script,which could be used to 'relocate' entities on map even without exact coordinates(i.e heading+distance+objPosition), you don't happen to have the old AdFramework files do you? -And are you using realityrally or realityspawner as basecode because both have cascading dependencies & use internal logic to spawn objects? The only other python spawning method I've identified is using rcon.invoke(), which can be used to spawn kits & so could certainly be used to spawn objects,given obj template is defined.
  3. Cheers guys, appreciate it. @=VG= Fastjack , I'll do that sometime.
  4. tldr; DICE made a masterpiece, barring the sweeeedish spelling of 'infantery', the gap betweenn NOOBS & VETERANS is smaller than people think, i hope this post signifies as much, especially given the influx of new players & refugees from full & defunct deployment servers, not as versed in coop systems. [DISCLAIMER] This is mostly a list of things I've learned about PR over nearly ~8yrs,of mostly CooP as of late and a few curiosities i came across working on a few bf2 mods over the years, things i think make PR a more forgiving & enjoyable experience, no more no less. I by no means excel at any particular thing like some, most of these were originally just some reminders i wrote down for my self over the years, for when i came back from a long break from PR, as i mostly play Arma 3 nowadays,i'm posting these simply because most are posted no where else. I learn something new everyday even from people who've been playing PR a few months, so this is by no means a comprehensive list, it's simply intended to share some useful insights, instead of screaming at people for not knowing what i know. [EDITED] Updated & Added a few more insights & Reformulated the information conveyed in some, as this was originally a note to self. -Most of these may also apply to PvP,All work in coop, given the location of this post(VG PR COOP), i shall make no distinctions Spawn Networks + Repair Networks + Defending Previous Objective + Attacking Next Objective, do these 4 things to win & win fast, simple. *Funny thing,barring the second it's the same strategy bots follow. *DO NOT CAMP CAPPED OBJECTIVES, IT JUST MAKES ROUNDS BORING!!! Input prescedence is a thing,i.e your Primary Input will override Secondary Input, which is why when you fly Mouse Movement will override Arrow Keys for instance. There's generally two types of helicopters in PR those that float such as hueys, cobras, ospreys, havocs, little birds,... & those that fall such as hinds, blackhawks, chinooks,..., often people crash/flail around because they fly both types as though they were the same & apply too little or too much input,remember the difference. TLDR;Place points of interest at the edges of your screen instead of at the center, to get a magnified view & see ~14% beyond view distance. [ Simply turning to have a point of interest be near the edge of screen allows you to see farther, as the rendering cone results in lower view distance for objects near the middle of FOV as opposed to objects at the edge of the cone which is longer. Basically place point of interest near the edge of your FOV to see farther... " It's because of how 3D environments are rendered by game engines. They create perspective using something called a "frustum". You can see objects not up to a certain radius around the camera, but up to a certain "depth" into the screen. Towards the edge of your screen, the depth is the same, but the radius is larger, so you can see further. " ] Enabling LODs or rather not enabling 'No Lods' will let you spot targets farther out(unless potato pc), i know you know, but not everyone knows what a LOD is,so ya... Hold Q to check mag, it should be displayed in the bottom right above your mag count. TLDR;If you enter a vehicle and see a black screen,it's either a bot aircraft or you don't have the correct kit to occupy position in vehicle. [ The main difference between BOT & PLAYER vehicles beside some flight dynamics modifications for some aircraft is that, they're automatically rearmed about 1-2minutes after depletion, under 'rcon debug' you can operate them after removing start restrictions with 'rcon start' & 'rcon oneman' for gunner pos, THIS IS ONLY OF USE FOR DEBUGGING or even local 'practice' of course,if you're so inclined, i use it when testing bots. ] If interested in server side modding, use the bf2dedicated server,to validate the scope of changes instead of specific changes,i.e whether or not your script or map will run, all things said, most limitations of serverside modding are not unique to PR but also to BF2, with the exception of few networked objects in PR that aren't present in BF2. You can set a default map list for local coop,by selecting a list of maps you want to run & then setting \profiles\<profileNum>\MapList.con to readonly,on restart or whenever your run pr again,simply select any arbitrary map to allow you to press deploy & your default maplist is loaded instead of whatever map you selected. This is especially useful for testing, as you don't have to scroll down to whatever map your testing, you can still use !setnext to set other maps to runnext if you so wish, this is simply to set a default maplist before server is initialised. *PRLauncher will term PRBF2 if file is readonly,so the solution,is basically to suspend the PRLauncher process when running local coop,while readonly maplist is being loaded & resume it once server is initialised AND readonly attribute is removed,idk, write a script,it's simple enough. To debug AI when making config changes, simply uncomment or toggle, 'aiDebug.draw 1' in aidefault.ai for an on screen overlay of CP's & detailed AI stats of AI in proximity to you, press 'p' to pause the game & Hold CapsLock to look around while game is paused, to examine stats in detail if you need to. If you encounter game freezes lasting 5-30sec, disable 'RNNoise' filter in mumble, it's a bug more prominent since the PR1.6 mumble update,frequent in lower spec machines. If you encounter frequent fps drops due to CPU throttling, you can limit PR(or any DirectX game) fps by installing MSI Afterburner & Setting a Frame Limit in RivaTuner, which is installed alonside MSIAfterburner,which stabilises CPU load to reduce thermal throttling, useful since PR maxes out at 100fps, which presumptuous though it may be, i'm guessing far exceeds the capabilities of 60Hz displays most people playing PR use. *make sure vsync is disabled for this one. If you don't happen to rock an SSD, but have at least 16GB RAM which more people have than SSD's, i suggest using ImDisk to run PR from a ramdrive, which loads maps 2-3 times as fast as an NVMe SSD,you can also use the included RAMDRIVE manager to load PR to a ram drive or optionally a ram mounted virtual folder(basically a ramdrive as a folder) at boot time, given PR doesn't use more than 3.7gb at most(rarely) it's practical too. On the topic of loading times, Reshade/Realdust or any similar enhancement greatly increases loading time, especially while running windowed. Alt tabbing while windowed, despite loading in the background, actually loads slower than having PR in the foreground, which kind of defeats the point of running windowed for background loading which is most peoples' reasoning for doing so, but if you'd rather watch a youtube video instead of the loading screen & don't care about claiming assets first,>me<,it's still worthwhile. Fences are Launcher/RPG/ATGM/TOW proof, so when on the hunt for big game while seeking protection from RPG's & TOW's, find the nearest fence. When targeting vehicles bots AIM for center mass, so unsurprisingly exposing only the turret of a vehicle makes it virtually impossible for bots to score a hit. The only thing a joystick is good for is JETS & AUTOHOVER(release stick to hover, a hardware hack if there ever was one) *If nothing else though, i suggest using a joystick, if you already have one for precise throttle control, else you don't need one. *USB Rudder pedals IF YOU ALREADY HAVE'EM are actually more usefull, practical for just about every kit/asset & even other games. Crouch in a vehicle mounted machine gun position to duck. Vehicle Refit stations also heal nearby dismounted infantry. Repair stations also repair helicopters and generally any aircraft, though not repair+resupply depots.\0/ Where ever you park a logi, drop a repair station, make it a habbit, it helps all active vehicles AND helicopters stay alive. Flares every ~500ms prevent getting locked & AA won't fire. *4flares/sec,given 60flares in most helicopters, you'll expend all flares in 15sec. Flares every ~1000ms get locked, AA will fire but as long as you keep moving, it'll always miss, with out exception. *2flares/sec,you'll expend all flares in 30sec, more than enough time for some mischief... In regards to CAS helicopters, Move back deploying flares to get flares in front of you, easy way to dodge AA. Drop throttle for a controlled & slow decent instead of simply pitching down when engaging targets, gives you more time on target. Fly low, fly fast, see who fires at you, then comeback around, Fly low, fly slow-er & fire back, NEVER HOVER, bots have a minimum enagement envelop, basically a distance & speed above which they won't engage with rpg's while armor & such will engage once & if they miss won't re-engage, until engaged. As of 1.6 Miniguns have elevated splash damage, so get yourself a gunner. Use the map to scan for targets, frequently look at the map & search for 'dead zones', areas where there were friendlies, but not anymore, more likely than not, you'll find something to kill, also do frequent fly overs of friendly occupied positions, where there are players, there are are bots, it's the natural order of things, even keep an eye on tk's, as they tend to occur in areas with large clusters of bots where ever it occured,so tldr; where there are players there are bots & the number of players still alive is proportional to the threat level of what killed'em. DO NOT FLY NEAR TERRAIN SURFACE when locked by elevated AA, it'll miss you but splash damage from impact next to closest surface will damage you. To use CAS helicopters with guided missiles as you would mortars, to fire beyond line of sight for exceptional threats like multiple quads, shilka's,AA,etc... markerDistance=Place marker on target area as communicated by others or seen by your self, to get distance to marker on map view, some quick math, rangeForBlindFire=SQRT(markerDistanceSquared+altitudeSquared), where rangeForBlindFire signifies distance you should aim for in the FOG while aligned to marker on compass bar to fire. Just grab a trig calculator & fill in the blanks to get target range for blind fire. In regards to Jets Use afterburners(default: Shift) When taking off from short runways or recovering from a dive, not all jets like A10's visibly have it, but do indeed have it regardless, signified with an afterburner sound & extended exhause plume in most. To safely land any jet, approach at >=65% thrust, touch down at >=30% and|or velocity at (150-200) then pitch up at idle thrust to brake once landed. *[NOTE]*landing speeds are jet specific, but specified thrust works across the board & the highest landing speed works for a majority of jets. Generally speaking, TAKEOFF SPEED == SAFE LANDING SPEED, just use thrust to make sure your decent rate isn't too steep,i.e vertical velocity. 30% throttle while on ground is also pretty safe taxi throttle. Use afterburners for a tighter turning circle & at high angle of attack and low speed prior to touch down on landing. Cut throttle for extended missile lock durations when in airsuperiority fighters, target will get farther away but will expend flares faster. Pressing RightClick in one of the View Modes(6,7,8,9) will give an extended view of that view mode. Faced with enemy CAS, in Armor, don't get greedy, hop out, wait until they're down, or take 'em down yourself. BUNKERS NOR BUILDINGS ARE NOT CAS(BOMB) PROOF FOR ARMORED VEHICLES. Use the map as if it were a flight instrument,as it can easily tell you relative bearing & horizontal vs vertical velocity, basically if the direction of travel rapidly alternates orientation in the minimap, your either going straight up or straight down. So how does one find targets from high up at high speed if you don't have a massive monitor, you look at the player list & the map to identify locations where players are dying, as is often the case, where ever players die, you'll find something to kill, at the very least this strategy narrows down target areas to focus on and identify targets instead of otherwise larger areas. Another strategy is to do orbits & fly overs cycling relevant camera views during & after gun runs. Eject out of aircraft if either badly damaged or you're going to fast on ground, aircraft stops immediately when you eject. Per 1.6, if you glitch when flying jets and can't use secondary weapon, assign a a secondary key to secondary weapon & that should work. As of 1.6 Bot Fighter Jets also drop bombs. In regards to Harriers Use the AGM thermal camera for target spotting, use the gun while in camera view... Between 45-150 speed, PITCH controls are INVERTED, important to understand when transitioning to/from vtol but also when landing. Flares are generally only really effective if you don't maintain direction of travel & lock isn't directly IN FRONT,as opposed to below, useful to keep in mind when using CAS and trying to KILL CAS. Helicopter rotor blades don't have a collision mesh, something i forget after flying for just a few hours in Arma or DCS. If you drop a patch before reviving someone, they're health will be at 50%.... Patches can also be used to unstuck someone... Infact it's a better way to unstuck someone than pushing them, often at least. Or just drag'em. 2xmags fired at ammo on mortar emplacement will destroy mortar. Any AAV(Anti Air Vehicle), can be killed without line of sight, 2xLG's /w in 5m should kill vehicle... Enable 'Acoustic Echo Cancellation' in your sound(WIN10)/soundDriver settings if you tend to play without headphones, it makes your mic function like your phone on speaker, no echo's & when you talk your game audio doesn't leak through your mic. Enable 'Loudness Equalization' in your sound(WIN10)/soundDriver settings, it makes loud shit quieter & quiet shit louder, need i say more about the benefits, especially for the quiet folk on mumble, it lets you enjoy stunning sound effects while making people audible. Enable 'HRTF' if your sound card drivers support it, a Head Related Transfer Function filter, that logically transforms stereo audio to fairly accurate binaural(3D) audio, where an audio source is transformed into Left/Right/Front/Back/VerticalFrontHL/VerticalBackHL instead of simple left & right stereo audio available in most games, it drastically improves immersion in any game. *Check out this video for a more detailed overview; https://youtu.be/qpvorkU0ie8?t=869 Enable 'Enhanced Pointer Precision', a type of mouse acceleration in mouse settings, it takes getting used to though, makes movement & flying much simpler,IF YOU GET USED TO IT,or don't have a dynamic dpi mouse... 200% Bloom through sweetfx or realdust makes the game look gorgeous, but not overwashed, but also makes TRACERS & Pseudo Muzzle Flash/Smoke(tracer origin point) much more visible in addition to silohuettes. Armored Vehicle Turrets have a ~2min warmup time, they won't traverse otherwise & ammo will sometimes provide a null value until warmup is done. If you encounter ammo bug, where you enter armored vehicle & can't see ammo or when your gun fires, goto vehicle refit station, have anyone who sees your gun firing reload the gun, exit, then drive away & wait 1minute, your ammo will reappear & you should be able to see your ammo & gun firing. " legacy bf2 locality error. " Mumble will show the disconnected Icon in game if multiple instances are running, just as it would if a single disconnected instance is running. 'c' to change scope mode & look back while inside some vehicles 'c' or 'x' to zoom in vehicles/uav, one or the other will work. 'f' for UAV thermal as commander Left CTRL to freelook when operating aircraft, APCs and IFVs do not have this feature as they use dedicated cameras. It also easier to hover. *Note you may not pitch or roll while holding control, but you can ascend & descend. LT = Lock on given laser and fire away LG = Missile flies where you click,every subsequent click updates missile destination,nOtE some are actually controlled as you would a TOW TV = Same as LG On some choppers LG/TV might act like wire guided missile (compare TOW). This is due to RL limitations of those. Left Click & hold any wire guided weapon to guide missile to target, where any Handheld VehicleMounted or Deployed AT with 'seek' appearing on HUD on left click is classified as wire guided, man portable guided missiles need to be aimed slightly higher than target when close to launcher. When repairing vehicle cycle seats, preferably to commander seat to see the repair icon, or exit/enter. @Supply crates Left Click to get scoped weapon & right click for ironsights Destroy enemy crates to have your own crates spawn instead at a capture point... You may also rearm on enemy crates though you won't be able to change kits with them. Staying above 1,300 generally keeps you safe from AA weapons. @<playerIndex> to target player through player index and #<squadNumber><us|them> to target whole squad. These work for all commands except squad targeting wont work for !report to prevent admin spam. *To get playerIndex, toggle console using 'Shift+End', 'admin.listplayers', and pageup/down to scroll console to find playerIndex To Use Mortars, Get a Marker to target, get marker dist in map, turn to center marker, input dist using left/right click, press calculate to get required elevation, use w/s to change elevation to calculated value & press F4 to select round & range to target & Fire Away. Commanders can place laser designation 'markers' for CAS, so instead of just placing enemy markers, even while in UAV, also place laser desgination markers, CAS will be far more useful & you can designate from the safety of a UAV... Any two man APC allows taking any kit similar to a supply crate. ON HMG's, '1' + 'RightClick' to zoom ON Vehicle/Aircraft mounted guns, 'C' to exit ironsite, paradoxically makes for more effective fire using impact dust as an aimpoint, especially miniguns... Some won't look kindly at this one, but there's a long standing bug where when operating one man vehicles in coop '_sp',you can operate vehicle with any kit as long as one of your passengers has appropriate kit, it's one of those bugs that'll only ever get patched if enough people exploit it, so go on, have fun with it. *yes this also works if your passenger with proper kit is a bot* *yes you may operate vehicle once passenger exits,just don't exit* Alternate LAT Kit for AT-CS kit is 2xLAW Rounds... though rifle sucks for this one... Activating text input chat(j/k/l) while moving will keep you moving,a sort of cruise control.... On testAirfield, flying over antenna will rearm/repair any aircraft without needing to land. When SL Create a marker to target & RANGE should appear at bottom of map,to market target... Right Click TO Lob/Drop grenade/smoke, useful to drop grenade over a railing for instance. When using any deployed weapon with undeployed variant, if on the move, toggle to undeployed & back to deployed rapidly for quick(er) 'deviation' recovery. The only suppressed weapons in PR last i checked, are ALT variants of 'Marksman Rifles' of some/NOTALL factions such as the US & DUTCH forces & a bunch of pistols,which i don't think deserve the title 'weapon'. Ctrl+2 or 'DRAG' as medic to check if a body is dead/alive, saves you the back & forth with downed players, if unsure try dragging. YOU DON'T HAVE TO KILL EVERY BOT YOU SEE, you'd think 'veterans' don't need to be told this, but, for every veteran inf that abides there's a veteran asset whore that simply must be at the top of the scoreboard & must kill everything in sight forcing bots that were moving away a CP to spawn on said CP, now normally, this isn't a big deal, but it becomes a big deal when a CP was uncappable for an extended period of time & the 'kill everything in sight' philosophy is still in play, LAN co-op has become somewhat of a tricky thing to get working for a while, not least because if you, login within an online profile (as you should) & goto 'Deployment' >> 'Create Local' >> change game mode from 'AAS' to 'Co-operative', then the last option might not be available, the simple fix if co-operative is unavailable is to add an external map with a coop layer like 'test airfield' to your maps folder, upon restart, 'Co-operative' option should become available. There is a simpler work around that requires commenting out a 2 lines in a con file, but this is the least invasive method, given arbitrary modification checks of any .con file. *you'll want to disable autobalance to prevent being repeatedly teamswitched, using '!ab off' -FIX FOR WINDOWED MODE DEBUG ASSERTION ERRORS If you attempt to run windowed mode,for background loading while you do other shit or simply because it's faster, you might encounter a frequent error, regarding Debug Assertion, the contents of the error are irrelevant, the solution simple. 1.Download & install dxwnd, from https://sourceforge.net/projects/dxwnd/ 2.Add/Create a new profile with path to your PRBF2.exe executable. 3.Enable the following options in your profile; Under DirectX Tab, Enable, 'Suppress DX common errors' Under Libs Tab, Enable, 'Suppress Win common errors' 'Suppress message dialogs' 4.Enjoy, You'll never encounter debug assertion errors, though you'll still crash after playing a few dozen rounds as usual. *Note dxwnd does hook PRBF2.exe, you may not close it, just leave it in the background & PRB2F2.exe won't ofcourse need to be launched from it, it's automatically hooked when it runs. *here's a simple ahk script that automatically launches dxwnd whenever you run the project reality launcher. completely optional. ; Get WMI service object. winmgmts := ComObjGet("winmgmts:") ; Create sink objects for receiving event noficiations. ComObjConnect(createSink := ComObjCreate("WbemScripting.SWbemSink"), "ProcessCreate_") ; Set event polling interval, in seconds. interval := 1 ; Register for process creation notifications: winmgmts.ExecNotificationQueryAsync(createSink , "Select * from __InstanceCreationEvent" . " within " interval . " where TargetInstance isa 'Win32_Process'") ; Don't exit automatically. #Persistent ; Called when a new process is detected: ProcessCreate_OnObjectReady(obj) { proc := obj.TargetInstance If (proc.Name = "PRLauncher.exe") && !WinExist("ahk_exe dxwnd.exe") ;when PRLauncher is launched automatically run dxwnd to force fullscreen windowed mode,where fps limit is imposed(vsync),assert errors don't appear but game is paused... Run <path to dxwnd exe>, <path to dxwnd directory>, Min } Map Notification Alert AutoHotKey Script, lets you know if number of players is above N & if any specified maps are loaded, if specified processes are inactive. ;AutoHotkey script to notify you when you preferred map is online relative to the minimum number of players online, ;default: if at least 10 players & any of specified maps, delimited by SPACE, then TrayTip will notify you of current map & current number of players online. ;X0R - PR Monitor ;you can easily modify script to only notify you when you're playing another game for instance or when your just using your browser so that it's not always active. #SingleInstance, force ;#NoTrayIcon SetBatchLines, 20ms ;script will not notify about current map if any of these processes are active or if active process is fullscreen,such as another game... deactivateOnTheseProcesses = scite.exe, notepad++.exe, devenv.exe, atom.exe, pycharm.exe, processing.exe For each,proc in StrSplit(deactivateOnTheseProcesses, ",") GroupAdd, doNotNotifyIfActive, ahk_exe %proc% Loop{ If WinActive("ahk_group doNotNotifyIfActive") ;change WinActive to WinExist, if you don't want notification while processes exist Continue page := DownloadToString("https://cache3.gametracker.com/server_info/5.9.23.136:16567/") map := Trim(Trim(StringBetweenTwoStrings(page, "<div class=""si_map_header"" id=""HTML_curr_map"">", "</div>"), "`n")) playerCount := Trim(Trim(StringBetweenTwoStrings(page, "<span id=""HTML_num_players"">", "</span>"), "`n")) ;========================================================================================================================== If (playerCount >= 10) && AreInStr_delim(map, "grozny Pavlovsk kashan bamyan kokan muttrah basrah jabal black gold karbalah silent eagle") TrayTip, PR MAP MONITOR, % map "`n" playerCount "/40 online`n`n" ,30, 1 Sleep % * 60 * 1000 ;every 5minutes } StringListLastLine(ByRef string){ Return RegExReplace(string, ".*`t(.*)", "$1") ;".*" - the first ".*" matches any string, starting from left to right! } AreInStr_delim(haystack, needles, needlesDelim:=" "){ ;variant uses delimited search strings instead of a parameters Loop, Parse, needles, %needlesDelim% i := ( InStr(haystack, A_LoopField) ? (!i ? (i:=0) & (i += 1) : (i += 1)) : i ) Return i } ;Esc::ExitApp :*:nopr:: ;type 'nopr' anywhere to kill script ExitApp StringBetweenTwoStrings(string, startsWith, endsWith, returnWhat:="result1"){ ;returns string between two delimiters, if returnWhat = "result",the delimiters will be Included in the result. StringSplit, sideSplit, string, %startsWith% foundAtPos := RegExMatch(string, "s)\Q" . startsWith . "\E(.*?)\Q" . endsWith . "\E", result) Return % ( returnWhat = "result1" ? ( !endsWith && startsWith ? sideSplit2 : result1) : ( returnWhat = "result" && !endsWith && startsWith ? startsWith . sideSplit2 : result ) ) } DownloadToString(url, encoding="utf-8") { static a := "AutoHotkey/" A_AhkVersion if (!DllCall("LoadLibrary", "str", "wininet") || !(h := DllCall("wininet\InternetOpen", "str", a, "uint", 1, "ptr", 0, "ptr", 0, "uint", 0, "ptr"))) return 0 c := s := 0, o := "" if (f := DllCall("wininet\InternetOpenUrl", "ptr", h, "str", url, "ptr", 0, "uint", 0, "uint", 0x80003000, "ptr", 0, "ptr")) { while (DllCall("wininet\InternetQueryDataAvailable", "ptr", f, "uint*", s, "uint", 0, "ptr", 0) && s>0) { VarSetCapacity(b, s, 0) DllCall("wininet\InternetReadFile", "ptr", f, "ptr", &b, "uint", s, "uint*", r) o .= StrGet(&b, r>>(encoding="utf-16"||encoding="cp1200"), encoding) } DllCall("wininet\InternetCloseHandle", "ptr", f) } DllCall("wininet\InternetCloseHandle", "ptr", h) return o } DownloadToFile(url, filename) { static a := "AutoHotkey/" A_AhkVersion if (!(o := FileOpen(filename, "w")) || !DllCall("LoadLibrary", "str", "wininet") || !(h := DllCall("wininet\InternetOpen", "str", a, "uint", 1, "ptr", 0, "ptr", 0, "uint", 0, "ptr"))) return 0 c := s := 0 if (f := DllCall("wininet\InternetOpenUrl", "ptr", h, "str", url, "ptr", 0, "uint", 0, "uint", 0x80003000, "ptr", 0, "ptr")) { while (DllCall("wininet\InternetQueryDataAvailable", "ptr", f, "uint*", s, "uint", 0, "ptr", 0) && s>0) { VarSetCapacity(b, s, 0) DllCall("wininet\InternetReadFile", "ptr", f, "ptr", &b, "uint", s, "uint*", r) c += r o.rawWrite(b, r) } DllCall("wininet\InternetCloseHandle", "ptr", f) } DllCall("wininet\InternetCloseHandle", "ptr", h) o.close() return c } DownloadBin(url, byref buf) { static a := "AutoHotkey/" A_AhkVersion if (!DllCall("LoadLibrary", "str", "wininet") || !(h := DllCall("wininet\InternetOpen", "str", a, "uint", 1, "ptr", 0, "ptr", 0, "uint", 0, "ptr"))) return 0 c := s := 0 if (f := DllCall("wininet\InternetOpenUrl", "ptr", h, "str", url, "ptr", 0, "uint", 0, "uint", 0x80003000, "ptr", 0, "ptr")) { while (DllCall("wininet\InternetQueryDataAvailable", "ptr", f, "uint*", s, "uint", 0, "ptr", 0) && s>0) { VarSetCapacity(b, c+s, 0) if (c>0) DllCall("RtlMoveMemory", "ptr", &b, "ptr", &buf, "ptr", c) DllCall("wininet\InternetReadFile", "ptr", f, "ptr", &b+c, "uint", s, "uint*", r) c += r VarSetCapacity(buf, c, 0) if (c>0) DllCall("RtlMoveMemory", "ptr", &buf, "ptr", &b, "ptr", c) } DllCall("wininet\InternetCloseHandle", "ptr", f) } DllCall("wininet\InternetCloseHandle", "ptr", h) return c }
  5. Hi, pm me the script, I'm not not familiar with spawners beyond obj spawner templates, but given an example, I think i could come up with something. I'd rather you not have stopped reading tho;) Yea, it's home away from home
  6. Hey there, so I've been playing PR for a long time, 8 years now, since i was 14 actually, i used to play PvP and I'd probably play more, but there are too many other things competing for my time to commit to a full round anymore - and I'm not one to just up and bail mid-game if I can help it. PR COOP, was always an adequate alternative,but repetitive & predictable with static emplacements & spawn points,to the extent where a simple duplication of an identical strategy in a previous round is all that is required to quickly win a round. As a matter of principle i never complain about things for which i have no solution, so what follows are tested suggestions & solutions to enhanced PR coop, eliminating some of the more nuanced complaints about coop through better game logic, ai configuration & server configuration, imho. I figured it's a new decade, i might as well create an account here on VG & reality-mod forum, given I'm still playing this damn game after all these years, and if nothing else, I'd hopefully have contributed something to the way people play PR. NUANCED WALL OF TEXT INCOMING... I've always avoided the tedium of repetition & boredom by playing as many roles & using as many varieties of assets as i can, occasionally taking a long break, while I've always mostly played Arma 3(6000hrs+), KSP, MSFX or Insurgency more so than PR. And what I've come to realize especially from playing Arma 3 more often now is PR Coop can be made better, with simple changes to server configuration or more precisely introduction of new game-play alterations by means of the tested methods below, i hope you indulge me in considering these suggestions with the function of making PR coop a more challenging & therefore more enjoyable experience, something it only ever truly was, at least for me, only when i got started with PR, nowadays PR to me is like tetris, i know all the pieces, where & how they go & i only ever loose or fuck up like when I'm distracted by my phone(which happens a lot) or bs irl. -Most of the suggestions below were functional on a private server i used to play on, server went under, but the methods remained, albeit only in thy head. 1.A new class of players, 'curators' (per designation for zeus in arma 3), permitted one command, '!switch', yes I'm volunteering & no I'm not looking for a legitimate excuse to kill volod ;). It's a role i believe can throw a wrench in the camping tactic that permeates coop,where bots do the same thing over & over again & players do the same in return. Granted PR doesn't even come close to having anything like Arma 3 zeus\highCommand, however having a player curate bot behavior, does not necessitate direct control, you can exercise emergent control; -build emplacements which bots will automatically occupy, -deny access to areas through mines & emplacements funneling player movement, -create a more extensive & randomized spawn network for bots through fobs & as SL -simply transporting bots manually from point a to point b other than on foot -strategic asset suppression to extend the effective life time of bots(i.e kill enemy CAS with AA/AT to let bots push up farther for example), -,..., basically render every strategy from spawn camping to hovering because there's no active AA emplacements to hunting known emplacement locations pointless, i think PR provides adequate command tools & systems to allow this to be a plausible strategy at the very least, i understand working with AI in general,even in Arma, let alone PR is an undesirable if not repugnant proposition to most people because they're not as responsive as people,which in my opinion is an unreasonable expectation to begin with, but taken for what they are, rudimentary behaviorally constrained reactive logic(trigger-constraint-action) & given you understand the limitations of the bots(see "aidefaultstrategies.ai, aibehaviours.ai, aipathfinding.ai" & Battlefield AI - Advanced Topics, then it's basically akin to playing an RTS, effectively a little explored nondescript game-mode in PR. And to be clear, i suggest an alternative to admins taking on this role, as i highly doubt given the temperament & patience it requires ENOUGH existing admins are willing to put in the effort, as it's as only ever as rewarding as your expectations & I'm guessing most will have too low or too high an expectation from this approach, and given the single command provided, which the AD framework allowed configuring, though I'm not sure about RealityAdmin, there's little risk to exploring new people for the role as not much authority comes with it, just !switch. And I've seen how admins switching to bot team, works in servers like SSG for instance, which is little more than trolling players imho & i understand that is a reasonable point of concern for this approach, but with a set of well defined rules similar to those that exist already & with the large extent to which VG is moderated, i don't think that's much of a concern. I've spent a lot of time configuring,modifying & testing ai behaviors in bf2 over the years as a consequence of my compulsive curiosity in the topic at large, if there's one thing I've learned,it's the simple fact that no amount of config changes will make the ai as challenging as they can be when their behavior is properly configured AND that behavior is systemically curated... 2.A few more server side scripts that i think ought to be included, with minor modifications if necessary, which I'm willing to make if called upon.My python isn't too bad ;p. https://projects.uturista.pt/bf2tech/index.php/Scripts:AntiBaseRape ^players, including myself do this a tad too much,especially muttrah,where the spawn point for shilka's & so on is technically a base... https://projects.uturista.pt/bf2tech/index.php/Scripts:AutoMap Or, MM_MapAutoSizer is more compatible with mapvotes from my experience https://projects.uturista.pt/bf2tech/index.php/Scripts:MM_MapAutoSizer ^i understand there's already a map randomize active, but from what i understand, it's sole intent is to avoid repetition & does not factor in the number of players. https://projects.uturista.pt/bf2tech/index.php/Scripts:OfftimePy ^for the rare occasion no admin is online https://projects.uturista.pt/bf2tech/index.php/Scripts:ThreatAndWorth ^i much like this approach to the existing point system,in the abstract, it pretty much means a tank killed by infantry earns-looses more points than a tank killed by a tank, you get the drift. https://projects.uturista.pt/bf2tech/index.php/Scripts:TK_punish_announcer ^makes known the serial tk'ers in our midst with autokick, I'm nothing of the sort, i only had 200tk's in 2019, thanks for that damn list btw acro. >I've played with all the above & i think they'd make fine additions to the coop server, if you so agree. I authored none of these, scripts just happened to be used for the bf2-pr dedi of some arma 3 unit with which i used to play with, now defunct. 3.I understand that opfor events are few & far between because of the need for custom map config changes for each map,but I've experimented with a reliable alternative approach using autobalance that makes bots playable for either faction on a map. With a 0% AI balance where all AI are grouped to one side, a servers side script to teamswitch players on init will be unnecessary provided max AI defined exceeds the number of possible number of players 40pV40b for instance, now with autobalance enabled the sides chosen flip logically with the first round on mission start always deferring to opfor & the flipping the bot faction on every subsequent run, which logically flips player faction respectively, so take kashan for example, iff on init players are bluefor, with autobalance enabled, !reload, will reload the mission with bots as bluefor & players autobalance switched to opfor., Autobalance is disabled for a good number of reasons, but AUTOBALANCE + COMPATIBLE MAPLIST//where bots can put up an effective fight on either side,i.e Kashan NOT Jabal, Kamisiyah NOT MuttrahStd/Large, etc.. generally any map/layer(ex. ,muttrah inf vs std/lrg) where there is no body of water to traverse & player faction doesn't initially occupy the majority of sectors is a valid map//. So if nothing else, such a config that doesn't require individual map modification is a valid means of having playable opfor, but more so, such a variance will increase the variety of playable factions in coop and implicitly increase replayability. Too many people have this notion of the 'evil' autobalance, like all things, properly understood & configured, it can be put to great use, just a thought i feel warrants serious consideration. Maybe have an Autobalanced second server for greater variance, where you alternate between bluefor & opfor sequentially on suitable maps, using !reload to swap teams based on, say, a vote, see what people prefer? Or simpler still since i understand the reason for a single server, have days where server runs autobalanced with a logically selected maplist. 4.Modified AI Behavior, using core configs instead of map configs, the more practical means of doing so, I've attempted to see what such modifications are currently active & most modifications comprise individual map config changes which complicates updates though generally not tedious if scripted i guess,but even that contrasts the fact that the most meaningful(as a consequence of outcome) changes to ai behavior can be made in the core ai config. And based on what I've seen, there seem to be little divergence between stock ai behavior & in game behavior on VG,so maybe it's high time changes to ai are made, here are a few suggestions & examples... -Why Bots Swim? Water Weights for Infantry, the reason why bots swim in the open instead of walking where appropriate, aisettings.setVehicleMods Infantery StandardWeights aiSettings.setVehicleMaterialCost Infantery Ground 1 aiSettings.setVehicleMaterialCost Infantery Road 1 aiSettings.setVehicleMaterialCost Infantery Shallows 1.1 aiSettings.setVehicleMaterialCost Infantery DeepWater 6 ,this default config makes sense on very few maps & is the reason bots swim on pavlovsk or jabal & remember, if bots swim, they can't use weapons,so setting the DeepWater weight to 1, same as ground & road, will make them swim when no roads or ground exists in direction of travel,deferring otherwise, when not, with the occasional exception to the case, as is the nature of weights. Such simple changes are the difference between 40 bots LOADED ON MAP & 40 bots COMBAT EFFECTIVE ON MAP, an important difference, dare i say. More Examples Below: For example under standardweights (running on foot) aiSettings.createBehaviourModifiers StandardWeights aiSettings.setBehaviourModifier Avoid 1.0 aiSettings.setBehaviourModifier MoveTo 1.0 aiSettings.setBehaviourModifier Idle 0.1 aiSettings.setBehaviourModifier Fire 7.5 aiSettings.setBehaviourModifier Special 3.0 aiSettings.setBehaviourModifier TakeCover 2.0 aiSettings.setBehaviourModifier Change 1.9 aiSettings.setBehaviourModifier Revive 3.0 Revive from 3.0 to 8.0, meaning medics will revive before they shoot. aiSettings.setVehicleDefaultBehaviour Infantery Idle to aiSettings.setVehicleDefaultBehaviour Infantery MoveTo So that if the bot has nothing else to do, it's default action will be to move to the next objective. if you change these lines in the mod's \AI\Aibehaviors.ai file: aisettings.setVehicleMods Plane StandardWeights aisettings.setVehicleMods Helicopter StandardWeights to use custom weights as show (These lines are separate sections for planes and Helis) aisettings.setVehicleMods Plane StandardWeights aisettings.setVehicleMods Helicopter HeliMoveWeights where this is what the Planes and Helis currently use: aiSettings.createBehaviourModifiers StandardWeights aiSettings.setBehaviourModifier Avoid 1.0 aiSettings.setBehaviourModifier MoveTo 1.0 aiSettings.setBehaviourModifier Idle 0.1 aiSettings.setBehaviourModifier Fire 7.5 aiSettings.setBehaviourModifier Special 3.0 aiSettings.setBehaviourModifier TakeCover 2.0 aiSettings.setBehaviourModifier Change 1.9 aiSettings.setBehaviourModifier Revive 3.0 aiSettings.setBehaviourModifier c4 1.0 aiSettings.setBehaviourModifier Special2 1.0 aiSettings.setBehaviourModifier Special3 1.0 aiSettings.setBehaviourModifier Random 1.0 aiSettings.setBehaviourModifier Triggerable 1.0 Avoid is set to a weight of only 1, compared to fire which is 7.5. Where weights, used to adjust the chance of a bot choosing a specific action. The following modification to Plane & Helicopter weights respectively for instance make bot aircraft's far more dangerous & effective, remember, Bot Aircraft are disallowed to players because they mostly have unlimited ammo, changes below make it rain & the 'avoid' weights for planes for instance, though specified as a 2D collision avoidance weight seem to additionally influence the tendency of bot planes to attempt evasion towards their base, where AA emplacements are usually active so, the effects cascade, every change cascades. //Commented Lines Signify Default Values aiSettings.createBehaviourModifiers PlaneWeights // aiSettings.setBehaviourModifier Avoid 0.0 aiSettings.setBehaviourModifier Avoid 7.5 // aiSettings.setBehaviourModifier MoveTo 1.0 aiSettings.setBehaviourModifier MoveTo 2.2 aiSettings.setBehaviourModifier Idle 0.01 // aiSettings.setBehaviourModifier Fire 1.5 aiSettings.setBehaviourModifier Fire 8.5 // aiSettings.setBehaviourModifier Special 1.0 aiSettings.setBehaviourModifier Special 3.0 //^none primary weapons such as grenades, rockets, bombs,etc... // aiSettings.setBehaviourModifier TakeCover 0.0 aiSettings.setBehaviourModifier TakeCover 2.0 // aiSettings.setBehaviourModifier Change 0.0 aiSettings.setBehaviourModifier Change 1.9 // aiSettings.setBehaviourModifier Revive 1.0 aiSettings.setBehaviourModifier Revive 3.0 //^it has this weird effect where it makes them more likely to stay close to each other aiSettings.setBehaviourModifier c4 1.0 // aiSettings.setBehaviourModifier Special2 1.0 aiSettings.setBehaviourModifier Special2 3.0 // aiSettings.setBehaviourModifier Special3 1.0 aiSettings.setBehaviourModifier Special3 3.0 aiSettings.setBehaviourModifier Random 1.0 aiSettings.setBehaviourModifier Triggerable 1.0 aiSettings.createBehaviourModifiers HeliMoveWeights // aiSettings.setBehaviourModifier Avoid 0.0 aiSettings.setBehaviourModifier Avoid 8.5 // aiSettings.setBehaviourModifier MoveTo 1.0 aiSettings.setBehaviourModifier MoveTo 5.0 aiSettings.setBehaviourModifier Idle 0.01 // aiSettings.setBehaviourModifier Fire 1.5 aiSettings.setBehaviourModifier Fire 8.5 // aiSettings.setBehaviourModifier Special 1.0 aiSettings.setBehaviourModifier Special 3.0 // aiSettings.setBehaviourModifier TakeCover 0.0 aiSettings.setBehaviourModifier TakeCover 4.0 aiSettings.setBehaviourModifier Change 2.5 // aiSettings.setBehaviourModifier Revive 1.0 aiSettings.setBehaviourModifier Revive 3.0 aiSettings.setBehaviourModifier c4 1.0 aiSettings.setBehaviourModifier Special2 1.0 aiSettings.setBehaviourModifier Special3 1.0 aiSettings.setBehaviourModifier Random 1.0 aiSettings.setBehaviourModifier Triggerable 1.0 So for the most part bots don't suck because 'bots', but because they're handicapped by design in their configuration, which considers few players going up against them, Essentially, given VG is for the most part exclusively a COOP server, perhaps it's time to stop using stock AI configs for better custom configs, because the default configs simply weren't designed with 40v40 Coop in mind, they were seemingly optimized for single player & at most for just a few players. In the mean time i think playing with bots can be made more interesting & challenging through systems & tools already in the game without looking to the devs or scripts, which as awesome as they are, lets be real, bots are a low priority subsystem in PR,with primary focus on PvP, at least where R-DEV is concerned,so maybe it's time to consider pragmatic solutions such as those specified above. Here's a great article on gamasutra about how game mechanics translates to replayability, https://www.gamasutra.com/view/feature/131468/replayability_part_2_game_.php , a good read. SORRY FOR THE WALL OF TEXT, but despite all these years of playing PR, CooP is still little more than a shooting gallery,despite almost all suggestions above being made possible because of existing Battlefield 2 subsystems at the core & improving CooP using these subsystems is rare to see, i strongly believe there's still a lot of unexplored potential ,i play coop not as alternative to deployment, but as a discrete experience unto itself, with different challenges & fun to be had, bots are SHOCKINGLY not people & having SHOCKINGLY good aim, that's unrealistic as most would say, just a different set of challenges so far as I'm concerned, where people are smart bots are fast, where people are fast bots are faster, simple as that, where as i think most players especially new ones play coop for little more than practice or just the 'shooting gallery' bit, which it unfortunately is atm, especially when population exceeds 15. So perhaps it's high time you reconsider how we fundamentally play PR CooP as opposed to how it could practically be played to a more rewarding extent, using some of the suggestion above, which I've made certain are practical & well tested & not merely things I'd like to see happen. And please note, this comes not, from a place of entitlement nor prejudice(against bots;)) but of frustration & boredom at maps i know too well & bots i understand too well. Cheers & Regards, X0R.
×
×
  • Create New...

Important Information

Terms of Use and Privacy Policy