WolfkillArcadia

Developer
  • Content count

    701
  • Donations

    0.00 EUR 
  • Joined

  • Last visited

  • Days Won

    31

Everything posted by WolfkillArcadia

  1. Please post any bugs you encounter with Exile 1.0.4 "Pineapple" here. RULES: When posting please include a server RPT and a client RPT (if possible). Please, please, please read the thread to see if your bug has already been posted. Duplicated bug reports will be removed. Do not shit post. The Mod Team will be handing out infractions for any and all shit posting. Check below for bugs we are already aware of. BUGS WE ARE AWARE OF: Typo in ExileServer_object_lock_grindNotificationRequest. Fix here Typo in ExileServer_object_construction_network_*. _constructionBlockDuration = getNumber (missiongConfigFile >> "CfgTerritories" >> "constructionBlockDuration"); Should be: _constructionBlockDuration = getNumber (missionConfigFile >> "CfgTerritories" >> "constructionBlockDuration"); USE THIS TEMPLATE WHEN POSTING BUGS: Information: Operating System, version? Post your system specifications. (Hardware) Please try to include helpful evidence related to the bug, such as screenshots and videos Include pastebins for your server AND client .RPTs (http://www.pastebin.com) Bug Description: A concise description of what the problem is. Pure description, no narrative or conversational language. Troubleshooting/Testing Steps Attempted: Describe anything you did to try to fix it on your own.
  2. WolfkillArcadia

    [GUIDE] Trading Error Codes

    Hello everyone, I've seen a few posts about different error codes and not knowing what they mean. I looked through the code and compiled this list of error codes. NOTE: THIS IS NOT A SUPPORT THREAD! Server Side Trader Error Codes Code 1: Player Object is non-existent Code 2: Player isn't alive Code 3: Item doesn't exist in CfgExileArsenal Code 4: Item/vehicle price listed in CfgExileArsenal is less than or equal to 0 Code 5: Sale price is greater than player's money Code 6: Vehicle Object is non-existent Code 7: Vehicles parent class doesn't exist in CfgVehicleCustoms Code 8: Error code doesn't exist Code 9: Error code doesn't exist Code 10: Error code doesn't exist Code 11: Pin code gathered from player has more than 4 digits Code 12: Player has MuteX applied (Meaning they are already trying to process a request) Code 13: Cannot find suitable position to spawn vehicle Code 14: Respect cost is greater than player's respect
  3. WolfkillArcadia

    No notifications

    Hi, ESM overrides the XM8 notification system and sends them to the bot. While running ESM, you (and your players) will only receive XM8 notifications on Discord from Exile Server Manager. By default, XM8 notifications are disabled for an individual player, but they can turn these by using the !notif command in a PM with the bot. If you would like to use the XM8 notifications that come with Exile, you will need to delete the exile_server_xm8.pbo from @ESM mod. This will remove the overrides and any notifications will go through the other system. Keep in mind, you will not get XM8 notifications through ESM nor will you get the new notifications that ESM provides on your phone. If you have any more questions or issues about ESM, join our Discord (https://www.esmbot.com/join) and we can help you there.
  4. WolfkillArcadia

    [GUIDE] Network Messages

    Please note: This document is incomplete and can contain errors. We are expanding on it so please bear with us. Network messages are send and receive commands built into Exile. These commands allow Exile to transfer data across the network to either the server or client. These functions use remoteExec but they are more secure and harder to hack. Starting in Exile version 0.9.6, these commands were opened up for coders and server owners to use without overriding an Exile function only on the client side, meaning that the server can send a network message to the client but not the other way around. Until the functionality is added to the server side, a coder can add this functionality via an override. This wiki will cover both ways of how network messages work, from the client and server side, but the functionality is almost the same. CfgNetworkMessages This class is what controls how a network message is defined. The files ExileClient_system_network_dispatchIncomingMessage.sqf and a customExileServer_system_network_dispatchIncomingMessage.sqf will look in the mission config file (IE. config.cpp or description.ext) for the class CfgNetworkMessages and will check the module and parameters against what is being sent. But fist, let's look at what an example network message class looks like. For these examples, we will be using a default Exile network message. // Declare the class, the message name is purchaseVehicleRequest class purchaseVehicleRequest { // Declare the module, this is part of the file name module = "system_trading"; // Declare the parameters, these are the typeNames of the fields in the package parameters[] = {"STRING","STRING"}; }; class purchaseVehicleResponse { module = "system_trading"; parameters[] = {"SCALAR","STRING","STRING"}; }; It's a bit of information so let's dissect the message purchaseVehicleRequest. class purchaseVehicleRequest {}; The declaration of the function. This name will be the ending part of the function name. This name must match the requesting function name or an error be be logged to the RPT and the message will be disregarded. A good practice with naming classes to end the class with the word "Request" if this message is expecting a "Response" back. In this case, it's good to name the responding network message to end with "Response". module = "system_trading"; The "category" of the function. This is a good way of organizing code, allowing for easier flow. This module is used as part of the function call. parameters[] = {"STRING","STRING"}; The typeNames of our data we are passing through the command. These MUST match the data being passed or an error will be logged to the RPT and the message will be disregarded. "STRING" is not the only typeName that can be used, below are examples of others: "SCALAR" // 1337 "BOOL" // true/false "ARRAY" // [1,2,3,4,5] For a list of every Network Message used by Exile, check the spoiler. How these are used in ExileServer_system_network_dispatchIncomingMessage / ExileClient_system_network_dispatchIncomingMessage will be explained below. SENDING FROM CLIENT TO SERVER These examples will be using the network messages defined above. Let's say a player went to the trader and purchased a vehicle. Traders are handled on the client but in order for a vehicle to be saved to the database, the server needs to process it, but how do we let the server know that a client ran a client side script to purchase a vehicle? We send a network message. Below is an example of the purchaseVehicleRequest network message used above. // Taken from ExileClient_gui_vehicleTraderDialog_event_onPurchaseButtonClick.sqf [ "purchaseVehicleRequest", // This is the class that is defined in CfgNetworkMessages // Package START [ _vehicleClass, // This is the classname of the vehicle purchased _pin // This is the pin set by the player when purchased ] // Package END ] call ExileClient_system_network_send; // Exile function to call to send a message to the server. // Same above command just in one line ["purchaseVehicleRequest", [_vehicleClass,_pin]] call ExileClient_system_network_send; NOTE: The example will be using a variables named _vehicleClass and _pin. These variables will change based on what vehicle class is chosen and what pin is entered. For ease of understanding, this topic will use the variable names instead of what the data could be. Both of these are passed as STRINGS. ExileClient_system_network_send.sqf ExileClient_system_network_send will take this information, attach the player's sessionID, which is unique to the player's client, and remoteExec to the server. ExileServer_system_network_dispatchIncomingMessage will receive this message on the server side. ExileServer_system_network_dispatchIncomingMessage.sqf ExileServer_system_network_dispatchIncomingMessage will take in this package and perform multiple error checks and security checks to make sure the data is correct. Checks include: Payload is defined. IE, [_sessionID, "purchaseVehicleRequest", [_vehicleClass,_pin]] _sessionID is the player's sessionID that was attached in ExileClient_system_network_send. Payload is an array. Payload includes exactly three fields. Keep in mind that _sessionID was attached, so the payload is now three fields long. Requesting sessionID matches and exists Message name matches the class defined in CfgNetworkMessages. IE, "purchaseVehicleRequest" Requested package parameters count matches the one defined in CfgNetworkMessages. IE, [_vehicleClass,_pin] The count of this array is 2, and the count of parameters for this message is 2 typeName's of the package matches CfgNetworkMessages. IE. [_vehicleClass,_pin] The type names of the information being passed is ["STRING","STRING"] Once it's checked all of those, dispatchIncomingMessage will try to compile a function call using this information. This is where the class name and module comes in to play. In raw terms, this is what it's doing. ExileServer_<ModuleName>_network_<FunctionName> Using the purchaseVehicleRequest, the final function call will be ExileServer_system_trading_network_purchaseVehicleRequest dispatchIncomingMessage will then call the function with the following parameters: [_sessionID,[_vehicleClass,_pin]] This concludes how a message is sent from the client to the server, next is the other way around. SENDING FROM SERVER TO CLIENT Since ExileServer_system_trading_network_purchaseVehicleRequest was called, let's examine what the file is doing with the data. ExileServer_system_trading_network_purchaseVehicleRequest _sessionID = _this select 0; _parameters = _this select 1; _vehicleClass = _parameters select 0; _pinCode = _parameters select 1; This is how to extract the data sent via a network message. On the server side, the player's sessionID will ALWAYS be the first part of the payload (_this select 0) and the "package" will be the second (_this select 1). From the "package" the data sent can be extracted, in this case [_vehicleClass,_pin]. The "package" will always be an array. The way this data is sent to this file looks like this: [_sessionID,[_vehicleClass, _pinCode]]. All messages sent to the server will follow this design, so the way the data extracted is exactly the same across the board. This topic won't go into detail how this file works, but in the end it will be sending back the following: [ _sessionID, // SessionID of the requesting player "purchaseVehicleResponse", // Name of the class defined in CfgNetworkMessages // Package START [ 0, netId _vehicleObject, str _playerMoney ] // Package END ] call ExileServer_system_network_send_to; Since the command is getting ran on the server, ExileServer_system_network_send_to needs a destination to send the data to. This is why the command has the _sessionID attached to it. _sessionID is the SessionID that was tied to the player that sent the initial request. The rest of this command is the same as on the client, "purchaseVehicleResponse" is the destination, and the package containing the information sending back to the client. ExileServer_system_network_send_to This file processing the request just like the client side, but instead of attaching the sessionID to the message, it strips it from it. ExileClient_system_network_dispatchIncomingMessage Back to the client side, ExileClient_system_network_dispatchIncomingMessage receives the message. It preforms the similar checks like the server side one does. Once the checks are done, compiles the function call and sends our package to it. The final package sent to the file, which in the example isExileClient_system_trading_network_purchaseVehicleResponse, will be [0,netId _vehicleObject,str _playerMoney]. ExileClient_system_trading_network_purchaseVehicleResponse This is the final file that will receive the information. As stated above, the package is [0,netId _vehicleObject,str _playerMoney] so the file only has a few variables to extract from the data. _responseCode = _this select 0; _vehicleNetID = _this select 1; _newPlayerMoneyString = _this select 2; That's it! Editor Notes: You can send a network message to any client from the server so long as the server has their player object or the players sessionID. Exile sends all of the money amounts across the network as strings. When that string reaches it's destination, it's converted back to a number using the command parseNumber
  5. WolfkillArcadia

    1.0.4 "Pineapple" Release!

    Inmates! This dev blog is going to be short and sweet. It's finally happened, after roughly 10 months since the last update, Exile receives its 1.0.4 "Pineapple" update! You can download it from our site here, or from A3Launcher. Please be patient if the downloads are slow, we are working on getting mirrors up and running as soon as possible. You can read up all about the update here: 1.0.4 Update: Pineapple If you like changelogs, you can view it here: 1.0.4 "Pineapple" Changelog I want to give a MASSIVE thank you, from the bottom of my heart, to everyone who donated or helped out with this update. @Vishpala Without her, I would've have gone insane. @MGTDB From MGT, for hosting and testing both Escape and Exile, and helping with BE filters @Adam Kadmon From AWG, for hosting and testing Escape @Andrew_S90 From ZDT, for creating the new construction and container items, as well as, helping with asset bugs @Monkeynutz, @LordRampantHump, @lucy2990, @Sir_Joker, @The Raging Kerfuffle, @gfourth, @Riker2335, @dima054, @AGR0-, @JayPaypers, @BaroN, @lobosds, @aussie battler, @Bunnaayy, @Darksoul47, @kuplion, @3210330833, @@nae, @Rabid Panda, @Old Man Tim, @thomas_hirt, @wetNreckless, @chrispools, @Jan1027, @EBEALIEN, @stefan.kueneth, @#night|gaert0r, @DarkViper, @twitch.tv/smokedog77, @odizzzzle, and anyone else who I missed. Thank you all for donating to reach our Escape goal! Thank you so much. <3
  6. WolfkillArcadia

    Exile 1.0.4 Bugs Megathread !! READ THE RULES!!

    Hi everyone, there are rules in the first post that you are REQUIRED to follow. Please make sure you are posting your RPTs with your bug report, otherwise I will just ignore you. Also, the 1.0.4a server hotfix was pushed earlier. The following files were affected: ExileServer_object_lock_network_grindNotificationRequest ExileServer_object_construction_network_* The construction files WILL ERROR if you haven't applied the fixes. Read your RPT before posting. @dima054I don't have enough information to help you. The errors you posted is the server trying to add rows to the construction table without a valid territory_id. @Z80CPUNobody was notified because I was asleep when the files were uploaded. I just woke up to deal with all of this. @M6malYou have an error at the bottom of your RPT: Database Error: Error Unknown Protocol Check your extDB Logs @ReynevanApply the fixes above or merge the exile_server.pbo files from 1.0.4A hotfix and try again. If the issue persists, I NEED RPTs from the server/client.
  7. WolfkillArcadia

    Proper use of Call within a While do

    Yes, they are global because you did not have an underscore in front of the variable name. GlobalVariable _privateVariable private _localVariable Would be comparable to: Public, Class level variable Private, Class level variable Local Method variable If you work in other programming languages. There are a few differences between _privateVariable and private _localVariable. The one you will run into is that if you have a bunch of inline functions defined, like you do in your examples, you will end up sharing variables across those functions; essentially those variables being used at the script level instead of locally. Using private or private ["_localVariable"], will ensure that the variable is local to that scope. https://community.bistudio.com/wiki/private If you do not plan on using a function outside a script, I suggest declaring them as private local variables. If you plan on using them outside this script, you will have to define them as global. Especially in the case of the EH, as that FN_mycall will be called at a later date outside the scope of your script. Also, if you are feeling adventurous, I'd suggest looking into the threading system within Exile instead of using while loops. This is not required though. You can do a search across the files for examples on how to use it. ExileClient_system_thread_addTask ExileServer_system_thread_addTask
  8. WolfkillArcadia

    Proper use of Call within a While do

    The code you posted does the following: Creates an onPlayerConnected EH with stackname and will call FN_mycall with those parameters. Infinitely do the following: Loop through allPlayers Assign some code to a global variable named FN_mycall Assign some code to a global variable named FN_myothercall I am confused on exactly what you are trying to do, but based on the title of the topic, all you want to do is call a function from a loop? // Always define functions before you plan on using them. FN_mycall = { _id = _this select 0; _name = _this select 1; _uid = _this select 2; // do something here }; FN_myothercall = { // do something else }; // Make sure to change "stackname" to something a little more... unique. ["stackname", "onPlayerConnected", {[_id,_name,_uid] call FN_mycall}] call BIS_fnc_addStackedEventHandler; // In an unscheduled environment, this will only loop 10,000 times before exiting. // In a scheduled environment, this will loop infinitely. while {true} do { { // do work! } forEach allPlayers; // You cannot call FN_mycall from here unless you define it's parameters // Call function FN_myothercall call FN_myothercall; };
  9. WolfkillArcadia

    Ladder Hatch Climb Trigger

    Thanks for reporting, but this has already been reported and addressed in the next RC. You can view current known bugs in the pinned post in this subforum. The newest RC has yet to be updated on A3L, so the fix has not been pushed. If you experience this issue again after the RC has been updated, please let us know. Thanks
  10. WolfkillArcadia

    [CLOSED] Concrete ladder hatch

    We closed this thread
  11. WolfkillArcadia

    [CLOSED] Concrete ladder hatch

    Fixed
  12. We have closed this thread and marked it as solved.
  13. WolfkillArcadia

    metal ladder

    Let us know if it happens again. Closing
  14. WolfkillArcadia

    Another possible virtual Garage issue

    Informed of why this was happening. Not an issue with Exile code. Closing.
  15. WolfkillArcadia

    concrete ladder hatch

    This has already been reported and addressed for next RC. Please review the pinned topic. Thanks
  16. WolfkillArcadia

    metal ladder

    Please provide pictures.
  17. WolfkillArcadia

    Another possible virtual Garage issue

    Can you please provide me your client RPT for this session? Via a pastebin link
  18. WolfkillArcadia

    noticed a ferw things with vehicles

    Added to our list Thanks for reporting
  19. WolfkillArcadia

    HMMWV Gun visual glitch

    Addressed in next RC Thanks for reporting
  20. WolfkillArcadia

    Another bugged vehicle

    Should be addressed in the next RC update Thanks for reporting it
  21. WolfkillArcadia

    Trader Pin Glitch.

    Added to bugs
  22. WolfkillArcadia

    1.0.4 Update: Pineapple

    Yes, nicknaming is mandatory. It protects the vehicles pin code in case someone decides to go rogue, plus a few other reasons. Server owners/app creators will have to transition their apps if they want to use our system. I do not know what will happen if someone installs ExAD's XM8 apps over our system since I've not used nor looked at how he does it. They are a whole unit like a wall, or drawbridge. It comes as a kit. Yes, it is delivered as a raid notification. This is something only @Eichi can address. No.
  23. WolfkillArcadia

    Possible wooden hatch issue

    Odd, it was working fine in internal testing. The ladder doesn't touch the floor, but you should be able to get the option to climb once the ladder has been extended. I'll take a look at it.
  24. WolfkillArcadia

    Virtual Garage Map Marker

    It should be placing a map marker on your map where it spawns, but now that I look back at the code and where you have your base, and I bet it failed to find a safe spot and dumped it in the middle of the map. I'll add a fail-safe to that. Thanks for reporting this!
  25. WolfkillArcadia

    1.0.4 Update: Pineapple

    @Puma_123 It's a configurable option. I forgot to attach the screenshot of the config, that's been fixed. Basically two options, it will drop all the items on the ground upon storage, essentially clearing the inventory, or it will save the items with the vehicle.