Jump to content
X0R

[REVISED][UPDATED] Tips Rarely 'Tipped'

Recommended Posts

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
    }

 

  • Like 1
  • Upvote 4

Share this post


Link to post
Share on other sites

Very awesome tips!!  Have used voice commands for nearly every toggle state for holding a key, from walking to shoveling, but one I've always wanted to improve was the crouch - if I forgot it was toggled, I'd have odd results when other keys or key combos were used, because a literal keyboard key was being held down by a third party software.  Gonna have to get this AutoHotkey setup, that will really improve things!

Share this post


Link to post
Share on other sites

Tbh. this is beyond my Knowledge. 

XOR,

i dont know where you suddenly came from or if you hiding behind an undercover name but i'm happy that guys like you still exist. Would be nice if you could make a post to introduce yourself so we get a better image from you. Guys like you normally not suddenly popping up out of nowhere. Seems like your an Allrounder.

 

  • Like 2
  • Upvote 2

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×