Jump to content

[RELEASE] DZMSHotSpots


Recommended Posts

With permission of TheVampire I'm releasing a modification of his DZMS.
All credits go to TheVampire.

 

Further thanks to Smitty Jagerman and NigeyS for coordinate contributions.

DZMSHotSpots basically is a copy of DZMS, configured to run a permanent treasure hunting mission, incidently creating PvP-HotSpots as well as roadblock ambushes.

Download: https://dl.dropboxusercontent.com/u/90098571/DZMSHotSpots/DZMSHotSpots.rar

Major Missions:

  • A crate is hidden on the map.
  • Possible locations are marked but players have to search for the correct one.
  • Markers are circles with a question mark in their center. The crate is somewhere in this circle, but not in the center.
  • The map markers will create hotspots for your players to converge and have PvP, typically in a close quarter environment.
  • Each mission starts with a different set of possible locations, thus making lurking at likely positions infeasible.
  • There is always a major mission running. As soon as a mission is finished, a new set of possible locations will be marked on the map and a new crate will be placed.

Minor Missions:

  • Roadblocks are created, these are not marked on the map.
  • Some AI are manning the ambush.
  • In the missions "RBFort","RBSandBags","RBTankTraps", a small crate is placed within a static scenery. "RBVehicleArmed" features an armed vehicle as prize.

 

Installation & Configuration:

Spoiler
  • You can run DZMSHotSpots alongside DZMS and have to install it the very same way. In DZMS's 1.1Final version I simply replaced all occurrences of "DZMS" by "DZMSHotSpots" and renamed the files accordingly.
  • Center part of the configuration is the list of static locations DZMSHotSpotsConfig.sqf:DZMSHotSpotsStatLocs.
  • Currently coordinates for Chernarus, Napf and Taviana/Tavi-Origins are provided. Also included are Takistan coordinates by Smitty Jagerman and Miroslavl coordinates by NigeyS.
  • With DZMSHotSpotsConfig.sqf:DZMSHotSpotsNumber you define a number of currently used hotspots. Each time a mission starts, <DZMSHotSpotsNumber> locations are chosen from <DZMSHotSpotsStatLocs> and marked on the map.
  • You can define the radius of the map marker circle using DZMSHotSpotsConfig.sqf:DZMSHotSpotsRandR. Default is 50m.
  • A major mission simply places a crate and 6 AI at one of these marker positions. Note that some of the AI may already be dead because they spawn within walls or on roofs.
  • The mission will end once a player is withing 2m of the crate; the crate will despawn within 5 minutes (change with DZMSHotSpotsConfig.sqf:DZMSHotSpotsSceneryDespawnTimer).
  • DZMSHotSpotsConfig.sqf:DZMSRoadBlocksStatLocs is used to define a different set of coordinates for minor mission roadblocks.
  • These positions are not marked on the map, you are meant to be ambushed.
  • A minor mission also places a crate, along with some scenery blocking the road of (in case of "RBVehicleArmed") an armed vehicle randomly chosen from the array DZMSHotSpotsConfig.sqf:DZMSHotSpotsArmedVic.
  • You can change the damage handling using DZMSHotSpotsConfig.sqf:DZMSHotSpotsAIBlood
    • DZMSHotSpotsAIBlood = 0; will continue using the Arma handler, meaning easy to kill AI
    • using a number > 0, e.g. DZMSHotSpotsAIBlood = 12000; will scale the damage dealt to the unit by 8000/DZMSHotSpotsAIBlood. That means that in the example above the unit only takes 8000/12000 = 3/4 of the damage it normally would.
    • using a number < 0 will enable using the DZAI damage handler. If you run DZAI then you should choose a value within the DZAI interval DZAI_unitBloodLevel. Note that DZAI_useHealthSystem needs to be true!

 

Miscellaneous:

Spoiler
  • There are 5 predefined major missions DZMSHotSpotsConfig.sqf:DZMSHotSpotsMajorArray that are different only in what type of loot is placed (HSSupply, HSMoney, HSVehAmmo, HSRareAmmo, HSLauncher).
  • There are 4 minor mission for DZMSHotSpotsConfig.sqf:DZMSHotSpotsMinorArray ("RBFort","RBSandBags","RBTankTraps","RBVehicleArmed").
  • Be sure to adapt the loot to your server's needs. Note that I've already changed the DZMS defaults to my liking, you may want to remove the M240 nest from the supply crate as well as the complete launcher crate mission.
  • The minor mission "RBVehicleArmed" spawns a vehicle with an active gunner who will shoot at you. Naturally for doing this he needs ammo. Any ammo he doesn't spend can be used by the player capturing the vehicle.
  • Map marker creation is done within a modified version of Scripts/DZMSHotSpotsMarkerLoop.sqf.
  • Map marker choice is done by a new function DZMSHotSpotsFunctions.sqf:DZMSHotSpotsGetCooSet
  • As usual, change the interval between missions with DZMSHotSpotsConfig.sqf:DZMSHotSpotsMajorMin|Max.
  • The major mission coordinates provided are scattered around the map, mostly chosen in backyards of houses in small villages but avoiding barns because there people often build bases.  
  • Sometimes the locations are within a building. That, however, only works well on the ground floor because crates seem to be placed at z=0. For that reason the missions only use the big USVehicleBox, smaller ones tend to vanish below the floor.
  • To help admins with the definition of new locations, there is a variable DZMSHotSpotsConfig.sqf:DZMSHotSpotsDebug. If set to true, all possible hotspots are marked on the map, not only the <DZMSHotSpotsNumber> locations for the current mission.
  •  Minor mission positions are on roads, mostly at crossroads or in sharp bends.
  • In the mission files you could disable the placing of AI completely, thus making the crate location harder to find. The AI can be spotted from the air more easily than the crate itself.
  • If you want, you could simply tweak DZMSHotSpots to place/replace a static crate at a known position at given intervals (instead of only once per server restart)

 

Edit 2014-08-27: Screenshots

Spoiler

I'm not sure what screenshots can do that my wall of text can not :-) But here you are.

Action shots are difficult to make - the admin tool does not hide me from the AI, so there are no pictures of an unalerted AI and the crate in one frame. Sadly I missed the one where I had the crate in view when suddenly a bot ran up behind me and shot me in the head ;-)

  • map markers of potential loot sites: MapMarkers.jpg
  • loot positioned in a house: LootInHouse.jpg
  • trying to sneak onto higher ground: Discovered.jpg
  • and failed, again: ShotAgain.jpg
  • ok, I remembered the free roam camera: a birdview HotSpotBirdview.jpg

Nice thing is: the close quarter combat really works: some days ago I actually lobbed a grenade over a wall :-)

 

Edit 2014-09-05: Info about new minor missions (roadblocks) added above. Screenshots:

Spoiler
  • roadblock with a circle of H-barriers: RoadBlock.jpg
  • and with an armed vehicle: RoadBlockVehicle.jpg

 

Edit 2014-09-06: changes to map markers and minor mission intervall, see post

below.

 

Edit 2014-09-08: Debug mode expanded:

Spoiler

On DZMSHotSpotsMapDebug = true;

  • green question marks show all possible locations for major missions, that's DZMSHotSpotsStatLocs,
  • green exclamation marks show all possible locations for minor missions, that's DZMSRoadBlocksStatLocs,
  • a red question mark shows the true location of AI&loot for a major mission,
  • a red exclamation mark shows the true location of AI&loot for a minor mission.

Note that

  • red markers will be shown at [0 0] before the first major/minor mission starts,
  • red markers will stay at the old position of a cleared mission until the next mission of the same type starts,
  • red&green markers show true positions and should lie within but not in the center of their yellow counterpart's circle.
  • Map marker update is on a 25s cycle, so your update may seem out of date if you jump fast between missions spaced only some seconds.

 

Edit 2014-09-13: optional DZAI damage handler enabled. With permission from Face now the sophisticated DZAI damage handler can be used for DZMSHotspot AI!

See post 31

and the installation instructions above for details.

 

Edit 2014-10-10: info about Takistan and Mirislavl coordinate contributions added.

Edit 2016-12-16: replaced dropbox links

Link to comment
Share on other sites

Yes, I could have removed the minor mission directory :-)

But then, the whole DZMS system still has the internals to handle minor missions and I didn't really want to remove the possibility of running additional minor missions. Who knows - perhaps something that doesn't need map markers, like random roadblocks ;-)

Link to comment
Share on other sites

OK, I've uploaded an update and added information to the first post.

 

Now there are minor missions, too: roadblock ambushes without map markers. At any time somewhere on the map (on a road, hence roadblock ;-) a group of 4 AI waits for the unprepared traveller,

  • either blocking the road with some static obstacles (sandbag fort, circle of tanktraps or circle of H-barriers), rewarding you with a medic box full of money,
  • or with an armed vehicle (including twitchy gunner) that you can sell/drive/shoot with (vanishing with the next server restart in you keep DZMSHotSpotsSaveVehicles in the default position false).
Link to comment
Share on other sites

I just downloaded this and it's pretty cool, but I noticed that once you access the loot box, any remaining AI disappear. I tested this on my test server, in god mode. I teleported in and let them try to kill me and after a short period, I went to the box and accessed it. About 5 - 10 seconds later all the AI disappeared. I tested this 3 times. Is this intentional?

Link to comment
Share on other sites

AI being deleted:

 

DZMS holds all units tied to a mission in either DZMSUnitsMajor or DZMSUnitsMinor. When a mission is started, all surviving AI from the last mission of the same type (major|minor) are deleted.

 

So I guess you could increase the mission interval DZMSHotSpots(Major|Minor)(Min|Max) from their value of 10s to something greater. Perhaps one should set this value equal to DZMSHotSpotsSceneryDespawnTimer which cares for crate despawn and is set to 300s.

 

But I'm not that comfortable with this solution because of the map markers: at the end of each mission file a new set of map markers is chosen and will be displayed immediately, even if at that moment new crates are not yet spawned. And I'd rather not make the marker display mechanics more complicated than it already is....

 

You could try to set the time between missions to 60s: time enough to get shot while looting and not enough time for players to search the new locations in vain.

 

Markers:

 

OK, now I got a working solution. First of all: using only circles of a given radius as map marker is not that easy because you only see the marker when zoomed in (no sense in the marker covering the whole village).

 

I therefore mixed both methods: crate is somewhere within the circle and the circle center is marked with the question mark so you can quickly identify it on the map.

 

You set the radius of the circle using DZMSHotSpotsConfig:DZMSHotSpotsRandR

I've tested with 50, that makes it astonishingly difficult to locate the crate, with all the fences being in the way ;-)

Be aware that the circle area increases with r^2, so doubling the radius makes it 4 times as hard to find the crate.

 

Note that the crate position itself does not change! Only the circle center is randomly chosen within the defined distance to the crate. I cannot randomly choose the crate position because it then would most probably end up inaccessibly somewhere within buildings.

Standard DZMS missions do not have this problem because they are spawned in free terrain.

Only way around this is to massively increase the array of possible locations - a dozen spots per village would be great ;-)

 

I think the uncertainty of the crate's whereabouts makes the AI despawn problem less severe, so I'll keep the default for major mission intervals at 10s. It's highly unlikely that you can sneak to the crate without being seen by the AI.

 

Minor mission intervals are now 300s, the same as DZMSHotSpotsSceneryDespawnTimer.

 

 

BTW:

I also fixed the Vybor position - the loot had been spawned on the building floor (0.36m) but that apparently was too high :-(

Link to comment
Share on other sites

Hmmm, perhaps next weekend, I have to work for a living ;-)

But it shouldn't be hard.

 

For debug I'm using Infistar's map icons, shows you the AI as red circles.

 

To clarify: do you mean the one active roadblock or all possible ones?

 

No! No working for you! :)

 

I mean the active roadblock, so I could teleport there and check it to be sure it's ok, and if needed I could tweak the settings for that roadblock.

Link to comment
Share on other sites

I know you're running a PvE server, there clearing the markers would make sense, representing a combined effort to find the treasure and inform the others about where not to look.

 

However, one of the goals of the mod is to create PvP-hotspots, so it would be a perfectly valid tactic to lay an ambush at a marker, waiting for other players to come, look for treasure. Here a disappearing marker would be counter-productive.

 

But sure, I could make the feature optional.

 

The main problem is: DZMS has a mechanism to look for the 'end of a mission', namely, a player being in the vicinity of the objective coordinate. DZMSWaitMissionComp is called in each mission file and is blocking, meaning the call doesn't return before the condition is met.

 

To implement your suggestion one would have to run this detection on each of the possible crate locations, simultanously.

This is equivalent to having a whole bunch of major missions running in parallel and I'm not prepared to delve this deep into a central part of the mission system.

 

I will, however, keep an eye open for more easy ways to achieve the goal.

Link to comment
Share on other sites

I'm afraid, a whole bunch of them. I had to touch all mission files because the actual loot coordinate is determined there and I needed to forward it as a global variable to the marker loop.

 

The touched files should be:

DZMSHotSpots/DZMSHotSpotsConfig.sqf
DZMSHotSpots/DZMSHotSpotsInit.sqf
DZMSHotSpots/Scripts/DZMSHotSpotsMarkerLoop.sqf
DZMSHotSpots/Missions/Major/HSLauncher.sqf
DZMSHotSpots/Missions/Major/HSMoney.sqf
DZMSHotSpots/Missions/Major/HSRareAmmo.sqf
DZMSHotSpots/Missions/Major/HSSupply.sqf
DZMSHotSpots/Missions/Major/HSVehicleAmmo.sqf
DZMSHotSpots/Missions/Minor/RBTankTraps.sqf
DZMSHotSpots/Missions/Minor/RBVehicleArmed.sqf
DZMSHotSpots/Missions/Minor/RBSandBags.sqf
DZMSHotSpots/Missions/Minor/RBFort.sqf

At least nothing defining crate contend or AI in the list ;-)
 

Link to comment
Share on other sites

For anyone having to define their own set of coordinates I'll share my admin_start.sqf:

private["_xpos", "_ypos", "_zpos"];
_xpos = 0.1*round(10*((getPos player) select 0));
_ypos = 0.1*round(10*((getPos player) select 1));
_zpos = 0.1*round(10*((getPos player) select 2));
diag_log text format ["admin_start: pos = [%1, %2, %3],", _xpos, _ypos, _zpos];

If (and only if) your server is running InfiStar (and you have admin privileges, I suppose),

  • you create a script named admin_start.sqf in your client's (the computer you're playing on ;-) Arma2OA main directory (where the Arma2OA_be.exe resides),
  • put the code above into it,
  • jump/run to a position you like,
  • press ALT-F11,
  • repeat for other positions.
  • Then you open your client arma2oa.rpt (located in something like %userprofile%\AppData\Local\ArmA 2 OA)
  • search for lines containing "admin_start" (using NotePad++ and 'find all in current document' you'll have the whole list in one window)
  • copy them into another file and postprocess.

One line will look like

admin_start: pos = [11021.00, 12468.30, 0.00],

and you'll have to get rid of the string before the '[', and copy the result into DZMSHotSpotsConfig.sqf to form an array e.g. DZMSHotSpots<YOURMAP> and DZMSRoadBlocks<YOURMAP>.

 

Don't forget to get rid of the trailing ',' in the last line of the array and to assign the correct coordinates ala

DZMSHotSpotsStatLocs   = DZMSHotSpots<YOURMAP>;
DZMSRoadBlocksStatLocs = DZMSRoadBlocks<YOURMAP>;

If you're doing this for a map not yet covered, please share your result here!

Link to comment
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
×
×
  • Create New...