Jump to content


  • Content Count

  • Joined

  • Last visited

  • Medals

Community Reputation

23 Excellent

About Cheitan

  • Rank

Contact Methods

  • Website URL

Profile Information

  • Gender
  • Location

Recent Profile Visitors

721 profile views
  1. Initial project Hey there ! I'm glad to introduce you a brand new script component : GSRI Zeus Manager ! This component was first developped in order to provide GSRI mission editors a complete template relying on the USS Liberty destroyer. It is meant to quickly start a new mission without having to deal with our usual stuff such as having a few basic vehicles, ship's weaponry, arsenal, and of course Zeus modules automatic management. This last part is now a separate project, as we ended up thinking that it can be beneficial for the whole A3 community. 😀 What GZM can do Once GZM is installed in your mission folder (which is a matter of seconds for a new mission) it can take care of any Zeus module placed via 3Den, without requiring you to configure each module with a proper owner. 💪 It relies on a serverside stored whitelist of players considered as allowed to get a Zeus privilege. The granting process check for the whitelist before linking the requester to an available curator. Any interaction with GZM is made through "command line like" user interface : just open your multiplayer vanilla chat and enter #zeus help to get a quick reminder of what each command does : Usage : #zeus <command>, with : whitelist : show whitelisted players slots : display (un)assigned slots request/release : get (un)assigned to an available slot promote/revoke <player> : (un)register <player> as zeus-allowed With GZM, you can add as much Zeus modules as needed without getting worried by how to be sure that your team's member will be able to use it. 👌 The whitelist is stored in the server's profile, meaning that it is available to all missions running on a given server. Just log in as admin on your server, promote players as you wish, and let GZM deal with the details ! 👮‍♀️ How do I get it ? Literally everything you need to know about GZM is available on the Github repository of our project. Just have a look on the included Readme. Please mind that this script requires the always excellent CBA mod, otherwise you will not be able to interact with GZM (which is sad... 😥). If you have any question, feel free to ask here, on Github, or on our Discord server !
  2. Bloody hell, I get it. There is a missing / for the closing tag for 3 of the entries. Probably due to a missed copy-paste. This might have confused the XML parser of the game, leading to a fully unexpected behaviour but without any kind of warning/error message. I spotted it by re-typing the whole file from scratch and having everything working at first try. I then performed a strict comparison between both files with a dedicated tool and the magic happened. How dumb I may be, from time to time...
  3. Yeah I had some problems with that a while ago, so now I always check encoding first, but in this very case IT IS ALREADY UTF-8 without BOM.
  4. OK, I think my game is cursed, or something. Here is my full Stringtable.xml file : <?xml version="1.0" encoding="UTF-8" ?> <Project name="GSRI_Opex_Template"> <Package name="GSRI_opex_notifications"> <Key ID="STR_GSRI_submarineOk"> <Original>Submarine has moved to the designated location (%1).</Original> <French>Le sous-marin s'est déplacé aux coordonnées indiquées (%1).</French> </Key> <Key ID="STR_GSRI_submarineFail"> <Original>Submarine cannot go here.</Original> <French>Le sous-marin ne peux se déplacer ici.</French> </Key> <Key ID="STR_GSRI_submarineInfo"> <Original>Left-click to move, shift+click to move in surface.</Original> <French>Clic-gauche pour déplacer, maj+clic pour déplacer à la surface.</French> <Key> <Key ID="STR_GSRI_heliInfo"> <Original>%1 is available in hangar.</Original> <French>%1 est disponible dans le hangar.</French> </Key> <Key ID="STR_GSRI_heliDelete"> <Original>%1 has been deleted.</Original> <French>%1 a été supprimé.</French> </Key> <Key ID="STR_GSRI_heliMoved"> <Original>%1 has been moved.</Original> <French>%1 a été déplacé.</French> <Key> <Key ID="STR_GSRI_heliFRIES"> <Original>%1 is now equipped with FRIES.</Original> <French>%1 a été équipé d'un FRIES.</French> <Key> </Package> </Project> Initially it was split between two packages for the sake opf clarity, but while trying to debug it all I ended up with this simplified form. But now I don't understand a thing to what I'm seeing... When calling _localize "STR_GSRI_submarineOk", the right sentence is displayed. When calling _localize "STR_GSRI_submarineFail", the right sentence is displayed. When calling _localize "STR_GSRI_submarineInfo", the sentence displayed sentence is " is available in hangar". When calling _localize "STR_GSRI_heliInfo", no sentence is found. When calling _localize "STR_GSRI_heliDelete", no sentence is found. When calling _localize "STR_GSRI_heliMoved", no sentence is found. When calling _localize "STR_GSRI_heliFRIES", no sentence is found. Moreover, my game is supposed to be configured for french language, so even if there were a bug with, let's say, encoding, the right sentence should be " est disponible dans le hangar" instead of the english version " is available in hangar". I am completely lost... Stringtable is something I'm using for a long time, usually in mods, with a lot more entries and packages and structured text and stuff. I don't understand why this very simple use is behaving so weird...
  5. Hey folks. I'm struggling with some strange behaviour here. I'm trying to use the very cool notification system (BIS_fnc_showNotification) with some localized text so several languages can be added to my scripts. I have defined my notifications as follow (sample) : class CfgNotifications { class SubmarineOk { title = "GSRI Insertion System"; iconPicture = "\A3\ui_f\data\map\mapcontrol\taskIconDone_ca.paa"; iconText = ""; description = $STR_GSRI_submarineOk; color[] = {1,1,1,1}; duration = 5; priority = 0; difficulty[] = {}; }; }; And my stringtable.xml is structured as fllow (sample also) : <?xml version="1.0" encoding="UTF-8"?> <Project name="GSRI Opex Template"> <Package name="GSRI_opex_Submarine"> <Key ID="STR_GSRI_submarineOk"> <Original>Submarine has moved to the designated location (%1).</Original> <French>Le sous-marin s'est déplacé aux coordonnées indiquées (%1)</French> </Key> </Package> </Project> However, when trying to activate the corresponding action, the notification is displayed with no text at all. Trying to use *localize "STR_GSRI_SubmarineOk"* is returning an empty string. This behavior is witnessed in both 3den preview and packed pbo launched on my computer. Following an advice from Dedmen I've checked if the stringtable.xml file was correctly added to the mission pbo and yes, it is. EDIT : the game is adding a log entry in RPT : "19:05:51 String STR_GSRI_submarineOk not found" Any idea ?
  6. Thanks @Dedmen, very exhaustive answer ! @sarogahtyp that's a very good idea O_o such a command would only be accepted by the server if it's called by an already registered player, or by a loggedAdmin. Excellent !
  7. Yep I know this is going too far ^^ To be honnest, it's only a matter of curiosity. I wonder if having a squadXML fills the squadParams the same way than a Unit... If it's strictly the same, then it can be faked indeed. However, creating a new Unit with the same name is apparently impossible. I tried quickly, and as soon as you enter the name, there is a check performed by the website to verify that the name is available. If not, further steps are locked. But I don't know about the security level of such a service, maybe it can be attacked in a way or another to duplicate Unit's name. Anyway, if squadXML cannot be differenciated from Unit via squadParams, it's indeed not a very secured way of attributing sensitive privileges. But for Zeus it's good enough.
  8. As stated here, relying on such an ID require to update the mission file or the server file containing UIDs, in case of a new player joining the team.
  9. I recently discovered, thanks to @Lou Montana, the A3 command squadParams. It has the ability to display Unit's informations, such as name, tag, image, email, etc (thanks again Lou for that 😍). As a Unit's name is unique, I wonder if relying on this is safe, for attributing privileges to players. For example, I've designed a quick Zeus slot management with the extremely useful CBA_fnc_registerChatCommand. When a player type #zeus request, he is automatically assigned to a curator (provided that there is an available curator, otherwise the player is prompted with a warning). Similarly, using #zeus release automatically unassign the player from his previous curator. For now, there is no kind of "security check". Anyone knowing how the command works is able to get Zeus access (yes, even you, dear reader !). I now want to make sure that only members of my team are able to access Zeus, and that no guest is able to do so, even if he knows the command. As often stated, security through obscurity is no security at all. One way is to store server-side a list of steam IDs (assuming that such an ID cannot be faked...), and make the Zeus request handler check this list in order to allow Zeus privilege. But this way is not very flexible : if a new player joins the team, we need to update the mission file. Another way to do so is to enable file patching on the server and to keep the Steam ID list in a file out of the mission folder. But file patching has its own flaws, and it still need a server root access to modify the file in case of a new member. The final way I just found is to rely on squadParams : if the player is a member of my team, then he should be granted with Zeus privilege. Considerations are as follow : - Unit Name must be unique on BI's side (let's assume that it is absolutely secured). - Check must be performed on the server, as we cannot assume a mission file is secure on client side. - There is NO KIND OF LOCAL STORAGE for squadParams, as local storage could be altered a way or another. I browsed every A3/Launcher folder that I know, including AppData, etc. I found some kind of local storage for units, but only the team's picture is stored. I can make the guess that squadParams is able to do a sort of HTTP request on-the-fly when called. Such a request is done at game start in order to download the squad picture, which is then stored client-side aiming at avoiding big network messages later on. But the remaining intels are not stored, because the total volume of data is considered to small to make a significant difference between local storage and online request. If my guess is right, we can assume that relying on squadParams for privilege management is safe. Of course, to be perfectly honnest, any kind of network proxy should be able to detect and modify on-the-fly any call to the distant database in order to make it display the wanted value, but it's kind of a "very" advanced attack for a ridiculously stupid goal : gaining a temporary Zeus access... Not to mention the fact that game's network traffic might be encrypted, at least for such a call to a HTTP service, which, if it is, will make this attack inoperative. Is anyone able to (in)validate my guess ? I admit I'm not curious enough to kick off my own network security tools just to perform such a small check... Even if doing so might eventually be quicker than writing down this long message 🙄
  10. Hi there. We found in our modpack a vest which is not displaying proper protection values in virtual arsenal. At first I thought that the vest was misconfigured, and tried to tweak armor and passThrough values. But none of my tries changed anything to VA stats. After a few tests on AI, it looks like config values are correctly used for damaged calculation (3 to 4 5.56 shots at 20m, same for similar vests with properly displaying stats). Why is the arsenal not showing right values ? You can find bellow the code used : class My_Vest : Vest_NoCamo_Base { descriptionShort="$STR_A3_SP_AL_IV"; class ItemInfo: ItemInfo { uniformModel="\path\to_model.p3d"; containerClass="Supply200"; mass=15; passThrough=1; // looks like A3's old-way to do it. With or without this line doesn't change the result class HitpointsProtectionInfo { class Chest { HitpointName="HitChest"; armor=25; PassThrough=0.30000001; }; class Diaphragm { HitpointName="HitDiaphragm"; armor=25; PassThrough=0.30000001; }; class Abdomen { hitpointName="HitAbdomen"; armor=25; passThrough=0.30000001; }; class Body { hitpointName="HitBody"; passThrough=0.30000001; }; }; }; }; This is almost a copy-paste of a working vest, only model and names are changed. (above names have been replaced by placeholders) Do I miss something ?
  11. I tried. They don't. Still scraping the ground as if it wanted to light up hell's fires.
  12. 2014, uh ? 🙄 I think I will drive by myself, period.
  13. I recorded the motion of a truck with BIS_fnc_unitCapture, and I now want to play this motion with BIS_fnc_unitPlay. No problem so far, the vehicle is doing exactly what I want, but when doing so the tires are scraping on the ground. I thought adding an AI on the driver seat would help, but nothing changed. How can I get this vehicle to stop braking this way ?
  14. I wonder if there is a way to make ACE consider other objects as ToolKits ? We have a backpack that is visually suitable as a toolkit. We can adjust its weight in order to reflect the fact that it carries some tools, but is there a way that ACE accept it as a valid toolkit ? I've found that for some modules, some properties are definded to allow this. For example, in the logictics_wirecutter module, there is a config property that you can have, so the item (backpack or vest) can be considered as having an embedded wirecutter. I would like to see the same thing for repair (and eventually medical) modules.
  15. thanks @pierremgi. I ended up replacing all those modules with one single server-side script to manually apply damage without effects at mission startup. With such a workaround, everything was fine. Very strange bug, nonetheless...