Jump to content

shuko

Member
  • Content Count

    2231
  • Joined

  • Last visited

  • Medals

Everything posted by shuko

  1. shuko

    SHK_Taskmaster

    Minor tweaks: 0.44 Added: An array can now be used as a condition. 0.43 Added: Using "assigned" task state will automatically set that task as current task. Use "created" to avoid that.
  2. ({alive _x} count (units delta1) == {_x distance base < 100} count (units delta1)) && !alive hpt && !alive bob2
  3. I already gave you an example how to do it. Even if you don't want to just copy-paste, at least take the basic idea of it. You can't have any randomization done locally on clients (=players). Instead, you need to do it on the server and then send updates to clients. Another possible way: 1. Create two invisible/empty global markers for everyone. Lets call them MarkerHVTWest and MarkerHVTEast. 2. Create local marker for all clients. Lets call it MarkerHVT. Set it's type and color based on side. 3. On server run a loop which sleeps randomly. 4. Have that loop to do random offset for both MarkerHVTWest and East. 5. Update the West and East marker positions globally. This will sync new marker positions to clients. 6. On clients run a loop, which updates/syncs the MarkerHVT position to the West or East marker (depending on side). This way you will have server do the random stuff. The updated info (new position) is synced to clients automatically by the game engine as the markers are global. Clients only need to keep moving their local marker on top of the (correct side's) global marker.
  4. If you have big and heavy scripts, preload them so they won't cause loading lag (highly unlikely anyway). Anyway, it hardly matters if the script is 3kb or 30kb. It's more important what's inside. With bad coding (not styling) the 3kb script can be a lot worse than the 30kb.
  5. What you need to do is to make all the random stuff done only on server. That way there's only one set of values instead one per player. How to distribute the values from server to clients can be done in multiple ways, but here's one example. Disclaimer: I did not thoroughly test it. All of this goes into init.sqf, no other files needed. [color="#FF8040"][color="#006400"][i]// Initialize an array to be used for the update send from server to clients.[/i][/color] [color="#006400"][i]// It will contain the update time and marker location adjustment for both sides.[/i][/color] [color="#006400"][i]// [1234,[xOffsetWest,yOffsetWest],[xOffsetEast,yOffsetEast]][/i][/color] SHK_MarkerUpdate [color="#8B3E2F"][b]=[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// Function to move the local marker.[/i][/color] SHK_fnc_updateMarkerLocations [color="#8B3E2F"][b]=[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#006400"][i]// Calculate new location for the marker based on current location and offsets.[/i][/color] [color="#191970"][b]private[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"_x"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_y"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_xOffset"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_yOffset"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_HVT"[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]if[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#191970"][b]side[/b][/color] [color="#000000"]player[/color] [color="#8B3E2F"][b]=[/b][/color][color="#8B3E2F"][b]=[/b][/color] [color="#000000"]west[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]then[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#1874CD"]_xOffset[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#8B3E2F"][b]([/b][/color]SHK_MarkerUpdate [color="#191970"][b]select[/b][/color] [color="#FF0000"]1[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]select[/b][/color] [color="#FF0000"]0[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_yOffset[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#8B3E2F"][b]([/b][/color]SHK_MarkerUpdate [color="#191970"][b]select[/b][/color] [color="#FF0000"]1[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]select[/b][/color] [color="#FF0000"]1[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_HVT[/color] [color="#8B3E2F"][b]=[/b][/color] O_VIP[color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color] [color="#191970"][b]else[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#1874CD"]_xOffset[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#8B3E2F"][b]([/b][/color]SHK_MarkerUpdate [color="#191970"][b]select[/b][/color] [color="#FF0000"]2[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]select[/b][/color] [color="#FF0000"]0[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_yOffset[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#8B3E2F"][b]([/b][/color]SHK_MarkerUpdate [color="#191970"][b]select[/b][/color] [color="#FF0000"]2[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]select[/b][/color] [color="#FF0000"]1[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_HVT[/color] [color="#8B3E2F"][b]=[/b][/color] B_VIP[color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#000000"]_x[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#1874CD"]_xOffset[/color] [color="#8B3E2F"][b]+[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#8B3E2F"][b]([/b][/color][color="#191970"][b]getPos[/b][/color] [color="#1874CD"]_HVT[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]select[/b][/color] [color="#FF0000"]0[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_y[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#1874CD"]_yOffset[/color] [color="#8B3E2F"][b]+[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#8B3E2F"][b]([/b][/color][color="#191970"][b]getPos[/b][/color] [color="#1874CD"]_HVT[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]select[/b][/color] [color="#FF0000"]1[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#7A7A7A"]"HVT_Mk"[/color] [color="#191970"][b]setMarkerPosLocal[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#000000"]_x[/color][color="#8B3E2F"][b],[/b][/color][color="#1874CD"]_y[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// Server will do all the work.[/i][/color] [color="#191970"][b]if[/b][/color] [color="#191970"][b]isServer[/b][/color] [color="#191970"][b]then[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#8B3E2F"][b]][/b][/color] [color="#191970"][b]spawn[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#191970"][b]sleep[/b][/color] [color="#FF0000"]30[/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// Send marker location updates until one of the HVTs die.[/i][/color] [color="#191970"][b]while[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#191970"][b]alive[/b][/color] B_VIP [color="#8B3E2F"][b]&[/b][/color][color="#8B3E2F"][b]&[/b][/color] [color="#191970"][b]alive[/b][/color] O_VIP[color="#8B3E2F"][b]}[/b][/color] [color="#191970"][b]do[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#191970"][b]private[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"_time"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_xOffset"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_yOffset"[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// Pick a random value between 3 and 7 minutes, then wait that long.[/i][/color] [color="#1874CD"]_time[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#000000"]time[/color] [color="#8B3E2F"][b]+[/b][/color] [color="#FF0000"]180[/color] [color="#8B3E2F"][b]+[/b][/color] [color="#191970"][b]random[/b][/color] [color="#FF0000"]240[/color][color="#8B3E2F"][b];[/b][/color] SHK_MarkerUpdate [color="#191970"][b]set[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#FF0000"]0[/color][color="#8B3E2F"][b],[/b][/color] [color="#1874CD"]_time[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]waitUntil[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#000000"]time[/color] [color="#8B3E2F"][b]>[/b][/color] [color="#1874CD"]_time[/color][color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// Offsets for marker location. Indexes: 1 = west, 2 = east[/i][/color] [color="#191970"][b]for[/b][/color] [color="#7A7A7A"]"_i"[/color] [color="#191970"][b]from[/b][/color] [color="#FF0000"]1[/color] [color="#191970"][b]to[/b][/color] [color="#FF0000"]2[/color] [color="#191970"][b]do[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#1874CD"]_xOffset[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#191970"][b]round[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#191970"][b]random[/b][/color] [color="#FF0000"]100[/color][color="#8B3E2F"][b])[/b][/color] [color="#8B3E2F"][b]-[/b][/color] [color="#FF0000"]50[/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_yOffset[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#191970"][b]round[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#191970"][b]random[/b][/color] [color="#FF0000"]100[/color][color="#8B3E2F"][b])[/b][/color] [color="#8B3E2F"][b]-[/b][/color] [color="#FF0000"]50[/color][color="#8B3E2F"][b];[/b][/color] SHK_MarkerUpdate [color="#191970"][b]set[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#1874CD"]_i[/color][color="#8B3E2F"][b],[/b][/color][color="#8B3E2F"][b][[/b][/color][color="#1874CD"]_xOffset[/color][color="#8B3E2F"][b],[/b][/color][color="#1874CD"]_yOffset[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// Send the new value to clients.[/i][/color] [color="#191970"][b]publicVariable[/b][/color] [color="#7A7A7A"]"SHK_MarkerUpdate"[/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// This machine is the server, but if it's not dedicated, then it's a[/i][/color] [color="#006400"][i]// listen server, which means it's also a client, who needs to see the[/i][/color] [color="#006400"][i]// update as well.[/i][/color] [color="#191970"][b]if[/b][/color] [color="#8B3E2F"][b]![/b][/color][color="#191970"][b]isDedicated[/b][/color] [color="#191970"][b]then[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#191970"][b]call[/b][/color] SHK_fnc_updateMarkerLocations[color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// Clients[/i][/color] [color="#191970"][b]if[/b][/color] [color="#8B3E2F"][b]![/b][/color][color="#191970"][b]isDedicated[/b][/color] [color="#191970"][b]then[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#006400"][i]// Wait for the player to load/initialize.[/i][/color] [color="#191970"][b]waitUntil[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#8B3E2F"][b]![/b][/color][color="#191970"][b]isNull[/b][/color] [color="#000000"]player[/color][color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]private[/b][/color][color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"_marker"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_type"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_color"[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_marker[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#191970"][b]createMarkerLocal[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"HVT_Mk"[/color][color="#8B3E2F"][b],[/b][/color] [color="#191970"][b]getMarkerPos[/b][/color] [color="#7A7A7A"]"MarkerSpawn"[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_marker[/color] [color="#191970"][b]setMarkerShapeLocal[/b][/color] [color="#7A7A7A"]"ICON"[/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_marker[/color] [color="#191970"][b]setMarkerTextLocal[/b][/color] [color="#7A7A7A"]"HVT"[/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]if[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#191970"][b]side[/b][/color] [color="#000000"]player[/color] [color="#8B3E2F"][b]=[/b][/color][color="#8B3E2F"][b]=[/b][/color] [color="#000000"]west[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]then[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#1874CD"]_type[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#7A7A7A"]"o_unknown"[/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_color[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#7A7A7A"]"ColorEAST"[/color][color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color] [color="#191970"][b]else[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#1874CD"]_type[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#7A7A7A"]"b_unknown"[/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_color[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#7A7A7A"]"ColorWEST"[/color][color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_marker[/color] [color="#191970"][b]setMarkerTypeLocal[/b][/color] [color="#1874CD"]_type[/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_marker[/color] [color="#191970"][b]setMarkerColorLocal[/b][/color] [color="#1874CD"]_color[/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// PublicVariable eventhandler to catch the update sent by the server.[/i][/color] [color="#7A7A7A"]"SHK_MarkerUpdate"[/color] [color="#191970"][b]addPublicVariableEventHandler[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#191970"][b]call[/b][/color] SHK_fnc_updateMarkerLocations[color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color][/color] Made with KK's SQF to BBCode Converter
  6. Just use disabledAI = 1; in description.ext (you need to create it if you don't have it yet).
  7. Without getting into more complex and elegant solutions for this, how about adding all 4 factions, from which players would choose in the lobby/pool. Then simply either disable AI in desc.ext or deletevehicle the empty units. This method obviously requires some coordination from players so that they all pick same faction.
  8. shuko

    SHK_Taskmaster

    I tested the code above and it works. Taskmaster and tasks in general do not work that way. You do not pre-create anything ever, instead you create task at the moment you need it. If you do not want to have task(s) in the briefing/before the mission actually starts. Then simply add the sleep before the code above. You might want to add a hint or something as well to tell the player(s) that theres a new task.
  9. It's not designed to be a sync mechanism. Init.sqf is just a list of stuff to do at the start of a mission. The timing depends purely on the machine running it; slower computer might run the file much later than server or other client(s). This mean, if you require some kind of sync between server and clients, then make clients wait for the server. if isserver myPub = 1234; publicvariable "myPub" if !isserver waituntil !isnil "myPub"
  10. I was making a night raid mission and wasn't happy with static searchlights. Here is my try to improve them. This was done in a couple of hours, so I'm looking for brave people to test it out and report bugs etc. You can specify a sector for a light to scan. It's also possible to define if the light should focus on specific target(s), the default is all players. It will follow the target until the target dies or light operator can't see it anymore. Either way, it will continue scanning the sector after that. SHK_searchlight.rar Parameters: 0: Object or Array SearchLight to be used. If operator unit doesn't start in the light, give the searchlight and the user in array. 1: Number or Array Sector to scan can be given as width of the sector, middle of the sector is the direction to which the searchlight is facing at the start. Or the sector can be given as an array containing the left and right borders of the sector in compass directions. 2: Number Optional. Knowsabout value. Stop scan when a target is spotted, focus on the target. Default is 1. 0 is no focusing. 3: Array Optional. Array of units the searchlight will focus on once it detects them. Default is all playableunits. Searchlight variables: SHK_Searchlight_Knowsabout Level of detection required for target focusing. SHK_Searchlight_Sector Scan sector. Use array only. SHK_Searchlight_Targets Array of units the light will focus on. Read-only: SHK_Searchlight_LightDamage Level of damage done to the actual light. SHK_Searchlight_Status What is the light doing? 0: nothing, fsm stopped 1: fsm started 2: scanning sector 3: focusing on a target Starting examples: nul = [sl,180] execfsm "shk_searchlight.fsm" nul = [sl,[90,180]] execfsm "shk_searchlight.fsm" nul = [[sl,slOp],180] execfsm "shk_searchlight.fsm" nul = [[sl,slOp],[90,180]] execfsm "shk_searchlight.fsm" nul = [sl,180,0] execfsm "shk_searchlight.fsm" nul = [sl,180,1,[trg1,trg2,trg3]] execfsm "shk_searchlight.fsm" OUejsRRMUws
  11. shuko

    SHK_pos

    Unfortunately, at the moment, not directly. You can however make your own loop to search positions and with simple IF filter them out with function SHK_pos_fnc_isBlacklisted. Parameters are rather straightforward: _bool = [position,blackListMarker] call SHK_pos_fnc_isBlacklisted There might be a built-in function in A3 to check it as well, but I haven't really kept track of this stuff in a long time.
  12. shuko

    marker in task

    1. Create a marker on the map (can be invisible type as well). 2. In briefing text create link like this: <marker name='yourMarkerNameHere'>enemy vehicle</marker>
  13. player AddAction ["text1", "script.sqf", 1]; player AddAction ["text2", "script.sqf", 2]; player AddAction ["text3", "script.sqf", 3]; _action = _this select 3; switch _action do { case 1: { // text1 action }; case 2: { // text2 action }; case 3: { // text3 action }; };
  14. Make one script. Pass something (simple number for example) via the 3rd parameter of addaction to the script. The number should be unique per action. In the script create a switch to do stuff depending on which number was passed.
  15. Hmm, instead of making two sqf files, why not make one and put side check within that?
  16. shuko

    SHK_pos

    The empty space search is done by the command findEmptyPosition. If the search takes too long, reduce the range. Default range is 200, but even 50 might be too large in some areas.
  17. Yes, unless the behaviour of createVehicle has been altered in the past 1-2 years.
  18. Well, I actually started up the game just for you! ;) I changed it so that it will not have a possibility to assign the same task multiple times. [color="#FF8040"][color="#191970"][b]if[/b][/color] [color="#191970"][b]isServer[/b][/color] [color="#191970"][b]then[/b][/color] [color="#8B3E2F"][b]{[/b][/color] SHK_AvailableTasks [color="#8B3E2F"][b]=[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"susactivity"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"drugsden"[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// Available tasks, array of script names.[/i][/color] [color="#8B3E2F"][b][[/b][/color][color="#8B3E2F"][b]][/b][/color] [color="#191970"][b]spawn[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#191970"][b]waitUntil[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#000000"]time[/color] [color="#8B3E2F"][b]>[/b][/color] [color="#FF0000"]0[/color][color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]private[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"_cnt"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_rnd"[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]while[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#1874CD"]_cnt[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#191970"][b]count[/b][/color] SHK_AvailableTasks[color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_cnt[/color] [color="#8B3E2F"][b]>[/b][/color] [color="#FF0000"]0[/color][color="#8B3E2F"][b]}[/b][/color] [color="#191970"][b]do[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#006400"][i]// Run as long as there are tasks left.[/i][/color] [color="#191970"][b]waitUntil[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#191970"][b]isNil[/b][/color] [color="#7A7A7A"]"SHK_CurrentTask"[/color][color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// Wait until a new task is requested.[/i][/color] [color="#1874CD"]_rnd[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#191970"][b]floor[/b][/color][color="#8B3E2F"][b]([/b][/color][color="#191970"][b]random[/b][/color] [color="#1874CD"]_cnt[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// Randomly select a task from available tasks.[/i][/color] SHK_CurrentTask [color="#8B3E2F"][b]=[/b][/color] SHK_AvailableTasks [color="#191970"][b]select[/b][/color] [color="#1874CD"]_rnd[/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]publicVariable[/b][/color] [color="#7A7A7A"]"SHK_CurrentTask"[/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// Tell clients which task to create.[/i][/color] SHK_AvailableTasks [color="#8B3E2F"][b]=[/b][/color] SHK_AvailableTasks [color="#8B3E2F"][b]-[/b][/color] [color="#8B3E2F"][b][[/b][/color]SHK_CurrentTask[color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// Remove current task from available tasks.[/i][/color] [color="#191970"][b]execVM[/b][/color] [color="#191970"][b]format[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"jobs\%1.sqf"[/color][color="#8B3E2F"][b],[/b][/color]SHK_CurrentTask[color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// Create and assign task.[/i][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color] [color="#191970"][b]else[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#006400"][i]// Client eventhandler which will catch pubvar from server about an assigned task.[/i][/color] [color="#7A7A7A"]"SHK_CurrentTask"[/color] [color="#191970"][b]addPublicVariableEventHandler[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#191970"][b]execVM[/b][/color] [color="#191970"][b]format[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"jobs\%1.sqf"[/color][color="#8B3E2F"][b],[/b][/color]SHK_CurrentTask[color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color][/color] Made with KK's SQF to BBCode Converter Example of needed stuff in a job/task script. [color="#FF8040"]jobdone1 [color="#8B3E2F"][b]=[/b][/color] [color="#000000"]false[/color][color="#8B3E2F"][b];[/b][/color] jobdone1 [color="#8B3E2F"][b]=[/b][/color] [color="#000000"]true[/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]publicVariable[/b][/color] [color="#7A7A7A"]"jobdone1"[/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]waitUntil[/b][/color] [color="#8B3E2F"][b]{[/b][/color]jobdone1[color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] SHK_CurrentTask [color="#8B3E2F"][b]=[/b][/color] [color="#000000"]nil[/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// Get new task.[/i][/color][/color] Made with KK's SQF to BBCode Converter It is important to keep in mind that the job script is run on each machine. That means, for example, when you spawn stuff (createvehicle), you will create server + count of clients times the object. To avoid that, these commands need to put into a if isserver check within the job script. test mission
  19. I haven't opened Arma or scripted in 2 years. Thus, there might be some really simple mistakes. [color="#FF8040"][color="#191970"][b]waitUntil[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#000000"]time[/color] [color="#8B3E2F"][b]>[/b][/color] [color="#FF0000"]5[/color][color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]if[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#191970"][b]isNil[/b][/color] [color="#7A7A7A"]"currentjob"[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]then[/b][/color] [color="#8B3E2F"][b]{[/b][/color]currentjob [color="#8B3E2F"][b]=[/b][/color] [color="#FF0000"]-1[/color][color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// if variable doesnt exist, set default value. Var might exists even for JIPs due to it being pubvar'd.[/i][/color] [color="#191970"][b]if[/b][/color] [color="#191970"][b]isServer[/b][/color] [color="#191970"][b]then[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#006400"][i]// run only on the server[/i][/color] [color="#8B3E2F"][b][[/b][/color][color="#8B3E2F"][b]][/b][/color] [color="#191970"][b]spawn[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#006400"][i]// create a new thread for the loop so it doesnt stop the init.sqf from continuing[/i][/color] [color="#191970"][b]while[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#000000"]true[/color][color="#8B3E2F"][b]}[/b][/color] [color="#191970"][b]do[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#191970"][b]waitUntil[/b][/color] [color="#8B3E2F"][b]([/b][/color]currentjob [color="#8B3E2F"][b]<[/b][/color] [color="#FF0000"]0[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// no job assigned[/i][/color] currentjob [color="#8B3E2F"][b]=[/b][/color] [color="#191970"][b]floor[/b][/color][color="#8B3E2F"][b]([/b][/color][color="#191970"][b]random[/b][/color] [color="#FF0000"]2[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// random is important to do only on one machine, because you dont want everyone doing their own random, and then everyone sending their conflicting random result to everyone else[/i][/color] [color="#191970"][b]publicVariable[/b][/color] [color="#7A7A7A"]"currentjob"[/color][color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// create a loop on server and clients which will catch the assigned job pubvar'd from server. Could be done with pubvar eventhandler, but let's not confuse more...[/i][/color] [color="#8B3E2F"][b][[/b][/color][color="#8B3E2F"][b]][/b][/color] [color="#191970"][b]spawn[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#191970"][b]while[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#000000"]true[/color][color="#8B3E2F"][b]}[/b][/color] [color="#191970"][b]do[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#191970"][b]waitUntil[/b][/color] [color="#8B3E2F"][b]([/b][/color]currentjob [color="#8B3E2F"][b]>[/b][/color][color="#8B3E2F"][b]=[/b][/color] [color="#FF0000"]0[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// job assigned[/i][/color] [color="#191970"][b]switch[/b][/color] [color="#8B3E2F"][b]([/b][/color]currentjob[color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]do[/b][/color] [color="#8B3E2F"][b]{[/b][/color] [color="#191970"][b]case[/b][/color] [color="#FF0000"]0[/color][color="#8B3E2F"][b]:[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#191970"][b]execVM[/b][/color] [color="#7A7A7A"]"jobs\susactivity.sqf"[/color][color="#8B3E2F"][b];[/b][/color][color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]case[/b][/color] [color="#FF0000"]1[/color][color="#8B3E2F"][b]:[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#191970"][b]execVM[/b][/color] [color="#7A7A7A"]"jobs\drugsden.sqf"[/color][color="#8B3E2F"][b];[/b][/color][color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]waitUntil[/b][/color] [color="#8B3E2F"][b]([/b][/color]currentjob [color="#8B3E2F"][b]<[/b][/color] [color="#FF0000"]0[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// no job assigned[/i][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color][/color] Made with KK's SQF to BBCode Converter susActivity [color="#FF8040"]jobdone0 [color="#8B3E2F"][b]=[/b][/color] [color="#000000"]false[/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_SMhint[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#7A7A7A"]"<t align='center'><t size='2.2'>CALL INCOMING...</t><br/><t size='1.5' color='#00B2EE'>Abandoned Vehicle</t><br/>____________________<br/>Caller has reported an abandoned vehicle. Please head to the area to investigate.</t>"[/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]hint[/b][/color] [color="#191970"][b]parseText[/b][/color] [color="#1874CD"]_SMhint[/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_CompleteHint[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#7A7A7A"]"<t align='center'><t size='2.2'>JOB COMPLETED</t>>"[/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_polStationPos[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#191970"][b]getMarkerPos[/b][/color] [color="#7A7A7A"]"polstationmarker"[/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_position[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#1874CD"]_polstationpos[/color][color="#8B3E2F"][b],[/b][/color] [color="#FF0000"]150[/color][color="#8B3E2F"][b],[/b][/color] [color="#FF0000"]200[/color][color="#8B3E2F"][b],[/b][/color] [color="#FF0000"]3[/color][color="#8B3E2F"][b],[/b][/color] [color="#FF0000"]0[/color][color="#8B3E2F"][b],[/b][/color] [color="#FF0000"]20[/color][color="#8B3E2F"][b],[/b][/color] [color="#FF0000"]0[/color][color="#8B3E2F"][b]][/b][/color] [color="#191970"][b]call[/b][/color] BIS_fnc_findSafePos[color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]//hint format ["Position: %1",_position];[/i][/color] sideObj [color="#8B3E2F"][b]=[/b][/color] [color="#7A7A7A"]"C_Van_01_box_F"[/color] [color="#191970"][b]createVehicle[/b][/color] [color="#1874CD"]_position[/color][color="#8B3E2F"][b];[/b][/color] sideobj [color="#191970"][b]lock[/b][/color] [color="#000000"]true[/color][color="#8B3E2F"][b];[/b][/color] sideObj [color="#191970"][b]setDir[/b][/color] [color="#191970"][b]random[/b][/color] [color="#FF0000"]360[/color][color="#8B3E2F"][b];[/b][/color] sideObj [color="#191970"][b]addAction[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"Recover Vehicle"[/color][color="#8B3E2F"][b],[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#191970"][b]hint[/b][/color] [color="#7A7A7A"]"Recovering vehicle"[/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]sleep[/b][/color] [color="#FF0000"]3[/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]deleteVehicle[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#000000"]_this[/color] [color="#191970"][b]select[/b][/color] [color="#FF0000"]0[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color] jobdone0 [color="#8B3E2F"][b]=[/b][/color] [color="#000000"]true[/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]publicVariable[/b][/color] [color="#7A7A7A"]"jobdone0"[/color][color="#8B3E2F"][b];[/b][/color][color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color] jobMarker [color="#8B3E2F"][b]=[/b][/color] [color="#191970"][b]createMarker[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"jobMarker"[/color][color="#8B3E2F"][b],[/b][/color] [color="#191970"][b]position[/b][/color] [color="#000000"]player[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#7A7A7A"]"jobMarker"[/color] [color="#191970"][b]setMarkerPos[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#191970"][b]position[/b][/color] sideobj[color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#7A7A7A"]"jobMarker"[/color] [color="#191970"][b]setMarkerText[/b][/color] [color="#7A7A7A"]"Abandoned Vehicle"[/color][color="#8B3E2F"][b];[/b][/color] [color="#7A7A7A"]"jobMarker"[/color] [color="#191970"][b]setMarkerColor[/b][/color] [color="#7A7A7A"]"ColorRed"[/color][color="#8B3E2F"][b];[/b][/color] [color="#7A7A7A"]"jobMarker"[/color] [color="#191970"][b]setMarkerAlpha[/b][/color] [color="#FF0000"]1[/color][color="#8B3E2F"][b];[/b][/color] [color="#7A7A7A"]"jobMarker"[/color] [color="#191970"][b]setMarkerType[/b][/color] [color="#7A7A7A"]"hd_dot"[/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_job[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#000000"]player[/color] [color="#191970"][b]createSimpleTask[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"Suspicious Activity"[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_job[/color] [color="#191970"][b]setSimpleTaskDescription[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"Respond to area an investigate for suspcious activity."[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"Active Job"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]""[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_job[/color] [color="#191970"][b]setTaskState[/b][/color] [color="#7A7A7A"]"Assigned"[/color][color="#8B3E2F"][b];[/b][/color] [color="#000000"]player[/color] [color="#191970"][b]setCurrentTask[/b][/color] [color="#1874CD"]_job[/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]waitUntil[/b][/color] [color="#8B3E2F"][b]{[/b][/color]jobdone0[color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]deleteMarker[/b][/color] jobmarker[color="#8B3E2F"][b];[/b][/color] [color="#1874CD"]_job[/color] [color="#191970"][b]setTaskState[/b][/color] [color="#7A7A7A"]"Succeeded"[/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]hint[/b][/color] [color="#191970"][b]parseText[/b][/color] [color="#1874CD"]_completehint[/color][color="#8B3E2F"][b];[/b][/color] [color="#006400"][i]// unassign current job[/i][/color] currentjob [color="#8B3E2F"][b]=[/b][/color] [color="#FF0000"]-1[/color][color="#8B3E2F"][b];[/b][/color] [color="#191970"][b]publicVariable[/b][/color] [color="#7A7A7A"]"currentjob"[/color][color="#8B3E2F"][b];[/b][/color][/color] Made with KK's SQF to BBCode Converter
  20. Since you are using publicvariable, I presume you are making a multiplayer mission. In that case, I would suggest not having every machine (server/host and each client) to do the jobselect random. It should be done by just one machine and then PV'd to others.
  21. This is a random position generator/selector. It can choose a position from a marker area or by based on direction and distance from a position/object. SHK_pos.rar Marker Based Selection Required Parameters: 0 String Area marker's name. Optional Parameters: 1 Boolean Allow water positions? Default is false. 2 Array or String One or multiple blacklist area markers which are excluded from the main marker area. Position Based Selection Required Parameters: 0 Object or Position Anchor point from where the relative position is calculated from. 1 Array or Number Distance from anchor. Optional Parameters: 2 Array of Number Direction from anchor. Default is random between 0 and 360. 3 Boolean Water position allowed? Default is false. false Allow water positions. true Find closest land. Search outwards 360 degrees (20 degree steps) and 20m steps. 4 Array Road positions. 0 Number Road position forcing. Default is 0. 0 Do not search for road positions. 1 Find closest road position. Return the generated random position if none found. 2 Find closest road position. Return empty array if none found. 1 Number Road search range. Default is 200m. Usage Preprocess the file in init.sqf: call compile preprocessfile "SHK_pos\shk_pos_init.sqf"; Actually getting the position: pos = [parameters] call SHK_pos; Old version: Here's the latest version of the script Distance and direction are wrong way around in the examples! Few screenshots of the function called 500 times with different parameters
  22. The whole point is that you dont need to name any of them. Did you test it on MP server or just in SP editor? playableUnits only works in MP.
  23. myAPCs = []; for "_i" from 0 to 2 do { _apc = "B_APC_Wheeled_01_cannon_F" createVehicle _grpextractpos; createVehicleCrew _apc; myAPCs set [_i,_apc]; }; What do you use the grpextract for? Condition to check if alive players are in the APCs. {alive _x && vehicle _x in myAPCs} count playableUnits == {alive _x} count playableUnits Of course, I haven't scripted in years and this was all untested. :)
  24. This is probably not the problem, but I prefer using damage check instead of alive with buildings. For example: damage tower1 > 0.8
  25. shuko

    SHK_pos

    Give the distance parameter as min and max. myPos = [getpos player,direction,[minDistance,maxDistance]] execvm "SHK_pos.sqf"; for example: myPos = [getpos player,random 360,[200,500]] execvm "SHK_pos.sqf";
×