Jump to content

NeoArmageddon

Member
  • Content Count

    1833
  • Joined

  • Last visited

  • Medals

  • Medals

Everything posted by NeoArmageddon

  1. NeoArmageddon

    co10 Escape

    Haha, nice. Try again, I am confident you will make it :D
  2. If you think this is a CUP related problem, you can also join the CUP Discord https://discord.gg/0WqE6NaD5yJmGnX8
  3. NeoArmageddon

    co10 Escape

    You need Icebreakr's Panthera map (see the installation instruction for Panthera). It is not included in CUP Terrains. The rest is like you already did with the Tanoa version.
  4. NeoArmageddon

    Community Factions Project

    Nice project and a great addition to the Armaverse.
  5. NeoArmageddon

    co10 Escape

    I think it is quite challenging even with not limited revives. Adding a limit poses some gameplay problems I don't really like, especially players being unable to continue to play and forced to spectator, while the rest can keep playing. Also thiswould encourage reconnecting to cheat the system. I don't like limited revives, but I will keep it in mind as additional feature for the future.
  6. NeoArmageddon

    co10 Escape

    Do you mean revive or really respawn?
  7. NeoArmageddon

    Wrong cpu in config file

    Delete the file and restart Arma. This is most likely just the same cfg from before you changed your CPU (as I assume you have not reinstalled Arma in between). But more importantly I would not relate those settings to any performance problems. A3 will run with any clockrate your CPU delivers regardless of what the autodetection says. AFAIK this is only for the default graphic and view settings for when you first start Arma3. If you get the same FPS than before the CPU upgrade, you have a bottleneck somewhere else that didn't changed. For example your graphics card, your RAM, etc. Try different settings in A3 that are either graphic or CPU heavy and check where your bottleneck is.
  8. NeoArmageddon

    Help with creating music mod

    Get the A3 Tools from Steam, mount the WorkDrive (aka P: drive) and create a folder in it with a structure like this: - Tag - - AddonName - - - config.cpp - - - music - - - - All your music files While "Tag" is a custom tag you define for yourself, or your squad. Edit config.cpp (basically an description.ext for an addon) with an editor of your choice and add a class CfgPatches and a class CfgMusic. It should look like this: class CfgPatches { class TAG_MyMusicAddon { name = "MyAddon"; author = "Me"; url = "http://xkcd.com"; requiredVersion = 1.80; requiredAddons[] = {}; units[] = {}; weapons[] = {}; }; }; class CfgMusic { tracks[] = {MyMusic1,MyMusic2}; class MyMusic1 //This is arbitrary { name = "My first track"; // filename, volume, pitch sound[] = { "\Tag\AddonName\music\filename.ogg", db + 0, 1.0 }; }; class MyMusic2 { name = "My second track"; sound[] = { "\Tag\AddonName\music\filename2.ogg", db + 10, 1.0 }; }; }; Now start AddonBuilder from tools and use it to pack this AddonName-folder (not the Tag folder!!!) to a PBO. Keep an eye on the virtual path so AddonBuilder packs it correctly under \Tag\AddonName.
  9. NeoArmageddon

    Can't use #include?

    How are you calling your scrpt/function? You need to execute it with a command that supports preprocessor command, for example preprocessFileLineNumbers or execVM. See here: https://community.bistudio.com/wiki/PreProcessor_Commands For example: Supports stuff beginning with "#". If you don't want to rely on the preprocessor you can also write this: As the array in gearWhiteList.sqf is the last statement, it will be returned when it is called as a function. Youtr post also misses some information on where you are storing your scripts. /addons/gear sounds like you are referencing an addon. pathes starting with a slash are considered addon pathes, while all others are mission pathes. If your script is in a mission with the subfolder "addons/gear/" your path needs to be "addons/gear/gearWhiteList.sqf". If it is in an addon it needs to be "addontag/pboname/gearWhiteList.sqf". And as a general remark: you might want to declare your local variables private, otherweise you could run in some strange bugs that are nearly impossible to solve later in developing.
  10. NeoArmageddon

    co10 Escape

    It will have no effect, aka no fighting between the factions.
  11. Maybe a better approach than just removing magazines from enemies: Attach a InventoryClosed-Eventhandler to the player and everytime he closes his inventory, you run a script that moves all weapons and ammo in a newly created WeaponHolder (an invisible ammo box used to place items on the ground). So the result will be: When the player picksup a weapon, he instantly drops it on the ground again. Maybe with a radio message like "Why can't I hold all these weapons?" :P The script could be like this (just from the top of my head, not tested): params["_unit","_container"]; private _holder = "WeaponHolderSimulated" createvehicle getpos _unit; { _unit removeweapon _x; _holder addweaponcargo [_x,1]; } foreach weapons _unit; And the players init: player/this addEventHandler ["InventoryClosed", { _this call tag_fnc_dropWeaponsScriptAbove; }];
  12. NeoArmageddon

    co10 Escape

    There might be problem with relabeling units side in the editor. If you run into problems like AI not shooting you, not getting kill(point) or can't entering vehicles with squadmembers, you can try this aswell: A3E_VAR_Side_Blufor = resistance; A3E_VAR_Side_Opfor = west; A3E_VAR_Side_Ind = west;
  13. NeoArmageddon

    co10 Escape

    I fixed some possible spawning and seach leader problems. I assume it is just that the AI responds a little bit better to detecting the players and sending reinforcement. Patrol density also is highly correlated to the terrain. This one is simple: Take a radio from the enemies :P I changed the start so you have nothing except your uniform. You need to take radio and watch from the enemy (I were just thinking: Why should they leave you the radio, when they capture you). I might tweak the difficulty a bit. Having the statistic collection since some build in 1.9 I have a pretty good overview of how hard the mission is right now and the most sessions are under 200 seconds.
  14. NeoArmageddon

    co10 Escape

    Heyho and thanks for your feedback. Regarding hearing: That mostly depends on your server settings and installed addon. My impression is, that the AI in vanilla arma is quite capable of detecting the player. Also I'm a little reserved to modify AI to heavy from the mission side, as it may either break when people install addons that tamper with the AI or in future Arma updates. Regarding the total AI control it works right now like this: There is a trigger that fires when a player was detected by an enemy. When the trigger fires, the so called Searchleader AI is querying which unit detected the players. After a certain time (a few seconds) the AI have reported the players position and a so called knownposition is generated. This known position contains the time the players were seen the last time, the number of players spotted and the accuracy of the spotting AI. These knownPositions are updated everytime an AI spots a player. The SearchLeader inspects these known position and decided if there is the need for redirecting patrols, guards, choppers, airstrikes or artillery. When AI detects players via hearing and not visually, the accuracy of the knownPosition is worse. You can sometimes see this while in urban combat, when an arty or airstrike goes nowhere near your real position. This is the reason it is always a good idea to shoot sniper or people with binoculars first ;) The search chopper behaves exactly as any other AI in this regards. It is just the difference that the crew is mostly out of your reach and in the air.
  15. Who would make such an effort on a holiday?
  16. @HazJ What bothers me directly about GitKraken is the need to register an account to use the Desktop app :(
  17. I use SmartGit. It offers a clean GUI to Git and has a lot of convenient functions. Maybe interesting for you: SmartGit supports SVN repositories aswell (but AFAIK it can not cross push between Git and SVN). But for the redmine export to github: no idea, sorry. Edit: @HazJ had a look at GitKraken and it looks quite nice. Will test that out myself.
  18. NeoArmageddon

    Local vs Global

    You are absolutly right, but to make it absolutly clear with the init field: private _weapon = primaryweapon this; this removeweapon _weapon; This will query the primary weapon of a player, store it in a local variable _weapon and will remove it in the next line. After the init is run, the _weapon variable is kinda thrown away. Same example: unitsWeapon = primaryweapon this; this removeweapon unitsWeapon; This does the same, but this time unitsWeapon is global. If now several units run this piece of code at the same time it could happen that, for example, a sniper runs this code, and unitsWeapon is filled with the type of his rifle. Right after it, before the next line is reached, another unit runs its init and the unitsWeapon variable is globally filled with this units weapon. When the init of the sniper comes to his line, it will try to remove the weapontype of the second unit, maybe a machine gun, which will obviously fail. Now you sit there in your mission and wonder "When I only have one unit, everything works, but when I add another one, the first one keeps his rifle.... strange". But enough bashing of global variables, here an example where you actually want to use global variables. Sometimes, mostly in multiplayermissions you want to know the group the players are in. You can of course name the player units like "p1,p2,p3,p4,..." and everytime you need the group you can just type group p1; This is obviously a problem when p1 is not occupied by a player in MP. You could now check everytime which players are connected, but it quickly gets hard to read and confusing. Instead you can add this to every possible players init: playerGroup = group this; playerGroup is a global variable and when the init field of one of the players is run, their actual group is stored in the variable. When another player, maybe he connects later, runs the unit, it is executed again, but jusst filled with the same value. I have to add that nowadays I assume setVariable (especially example 3 on that bikipage) should be used for setting global variables in multiplayer. Oh and when you want to sync trigger, waypoints, etc, globalvariables are a good way (or even needed): Place two triggers, one is activated when the player is detected by the enemy and sets "enemyalert = true;". In the second trigger you replace the condition "this" with "enemyalert" and set maybe a timeout and an effect for an alarm. Now, when the player is detected, it will set the global variable true, the other trigger will fire, because his condition (the variable being true) is fullfilled, it will wait the timeout and sound an alarm. Another interesting idea here: Give a speaker pole a name, like "pole" and make the second triggers condition "enemyalert && alive pole". Now the alarm will only sound, if the pole with the loudspeakers is still functional. You can than go ahead and add another global variable to the second trigger, like "alarmsounded = true" and make this a condition for some waiting enemy reinforcements waypoints. The result: When you are detected an alarm sounds and enemy troops are coming your way except you destroy the speaker pole before you get detected.
  19. NeoArmageddon

    Local vs Global

    Local and global is best understood with the "scope" of a script or a piece of code. The scope defines, where the script and all of its local variables live. Scopes can be nested. An example: //Script starts here private _localVariableInScope1 = "blah"; { private _localVariableInScope2 = "blub"; } [] spawn {private _localVariableInetAnotherScope = "gold";} As you may have noticed, it is easy to spot a nested scope by curly brackets. Infact inside every if,else,switch,foreach,etc block, their is a new, nested scope, where local variables may be declared. When you define a local variable, the variable can be access all inside the scope it was defined but not outside of it. BUT a local variable can be accessed inside a nested scope. In the example above: Inside the curly brackets _localVariableInScope1 and _localVariableInScope2 is defined, but after the brackets only _localVariableInScope1 is defined. We say _localVariableInScope1 is out of scope. A global variable is a variable that is known to all scopes after it was declared. It never runs out of scope. But global variables can be hard to debug. With local variables, you can just look where the current scope ends. The variable can only be defined and used there. Not much chance to accidentally mess with an important variable. But a global variable can be manipulated from anywhere, even from third party addons/missions/some hacky player, etc. Here is yet another, maybe more complete example: //Script starts here private _var1= "Blub1"; //Another local variable in the scope of the script GlobalVariable = 123; //Global variable, known everywhere if(_someParam) then { private _var2 = true; //Local variable in the if scope. This variable will be undefined after the if() then {} block _var1 = "Blah!"; //We can change _var1 here, because this is a nested scope/block and the var still is defined GlobalVariable = 321; //We can change GlobalVariable here, because this is global... } else { private _var3 = false; //Local variable in the else scope. This variable will be undefined after the else block _var1 = "Gold"; GlobalVariable = 321; }; [_var1] call { //This is a piece of code that is called, means this is somewhat a complete new script. Our old scope from _var1 is not valid here. params["_var1"]; //This defines a local variable and binds a params from the call of this script. The value of _var1 will be exactly like _var1 in the call, but it is another local variable, with the same name, but in another scope. _var1 = "NotBlub"; GlobalVariable = 666; //This works because GlobalVariable is global } systemchat str _var2; //This will produce an error, as _var2 is undefined here in the outer scope of our script systemchat str _var3; //This will produce an error, as _var3 is undefined here in the outer scope of our script systemchat str _var1; //Defined, will print without problems. Will be "Blah!" as the code in call could not change the value in _var1 in another scope. systemchat str GlobalVariable; // Will be 666 as the code behind call has changed our GlobalVariable. This can be handy but also very dangerous and error prone When working with triggers and inits, you will most likely want to use globalvariables to set and get information elsewhere. But when you call a script/function from a trigger or init, you will most likely want to use local variables in it. Otherweise, when you have two vehicles witht he same init line, the called scripts may interfere with each other. Example: You start this from a init of a car, to make it slowly get damaged with [this] execVM "damageScript.sqf": params["_vehicle"]; c = 0; //Global countvariable -> very bad for[{c = 0},{c<100},{c=c+1}] do { _vehicle setdamage c*0.01; sleep 1; }; When you have only one vehicle with this script, the vehicle will get totally damaged over the time of 100 seconds. If you have two vehicles, both will start a single instance of that script and both scripts will add to the global variable c in their for-loop, resulting in both vehicles get totally damaged in only 50 seconds each. This is by the way called "a sideeffect of the script damageScript.sqf". Normally you don't want sideeffects that are caused by using global variables everywhere. The correct script version would look like this params["_vehicle"]; private _c = 0; //Local countvariable -> exists in every instance of this script seperately for[{_c = 0},{_c<100},{_c=_c+1}] do { _vehicle setdamage _c*0.01; sleep 1; }; Now both scripts have their own counting variable in their own scopes and when added to two or more vehicles, every vehicle will get destroyed in 100 seconds. Hope this helps and is not too confusing.
  20. NeoArmageddon

    co10 Escape

    The three folders are in the archive linked in the post.
  21. NeoArmageddon

    co10 Escape

    https://forums.bohemia.net/forums/topic/180080-co10-escape/?do=findComment&comment=2838479
  22. NeoArmageddon

    co10 Escape

    Build 31 and 32 now support statistics. Statistics are saved in servers profile between sessions and can be accessed in "Briefing -> Statistics". Statistics are stored at the mission end. Basic statistics like terrain, version, playercount and endtype are also send to a remote host (in 1.9 release this will be optional). My plan is to create a small website showing statistics for all Escape sessions played (e.g. "In the last 24h 32 squads tried to escape and only 5 succeeded"). Any thoughts on this feature?
  23. NeoArmageddon

    co10 Escape

    There is an RC branch for patch 1.9 was pushed to the dev repo: ftp://escape@anzp.de/rc1.9/ Would be nice if some of you can test the newest version (it is build 25 at the time of writing this). 1.9 will be mainly a maintenance and bugfix update. Highlights: New terrains, better server performance, some strange RPT errors fixed, Revive optimized and a lot of bugfixes. Known bugs: Briefing is not showing the server settings. Some terrains are not complete yet.
  24. Jup, parseText expects HTML like formatting while normal hint/sidechat/etc supports basic ASCII like \n
  25. Okay, your general problem is, that you call the script bei "exec" which is used to call sqs code. The error you get is simply because sleep command is not defined in sqs (there it is ~123). When you use execVM, your script will be interpreted as sqf code and should run fine. Also you can get rid of the [] spawn {some code} as execVM is already loading and executing the file in a seperate sqf thread aka scheduled environment. exec and execVM are loading the script from file everytime and file access is very slow. In A3 you would normally load the script once as a function (myFunctionName = compile preprocessFileLineNumbers "dronefuel.sqf") and than just call or spawn the function. But when using trigger, there is a more elegant option to solve your problem (atleast in my opinion): First create the trigger over the area you want to encompass and set it to activation "Everyone", "Present" and "Multiple". Than, in "On Activation" you put your code like this: (thisList select {typeof _x == "DroneClassName"}) apply {_x setfuel (fuel _x - 0.01);(format ["SOMETEXT HERE: %1", fuel _x]) remoteExec ["hintSilent"];} Explanation: thisList is an array of all the vehicles that satisfy the trigger condition (so in this case everybody in it). select {typeof _x == "DroneClassName"} reduces the array of all elements, where the expression is true, so only objects with a specific classname (you need to find your drones classname in this case). apply expression is called for every element in the array on the left side. In the expression _x is a variable containing the element selected from the array. The trigger should be fired ~0.5 times per second, so you maybe need to tune the fuel value a bit. Oh, and for "server only" you need to set the "Condition" to "this && isServer" or does 3DEN has an option for that nowadays? This is a more elegant solution without calling scripts etc. It is definitly not the best. If I would need to solve this problem, I would most likely put the stuff in a function, but that is maybe too much for simple answer here in the forum.
×