Welcome to Altis Life RPG

Register now to gain access to all of our features.
Once registered and logged in, you will be able to create topics, post replies to existing threads, give reputation to your fellow members, get your own private messenger, post status updates, manage your profile and so much more.


Note that you can now sign-in with your Steam account.


This message will be removed once you have signed in.


  • Announcements

    • Rozo

      Donations   09/18/2016

      Hello,
        We've added a donation block on the right side. All of those donation goes directly to the developer of Altis Life mod ( currently BoGuu ). None of that money is used to maintain the forum. In the future we might add a donation button to support the forum, but for now we want to encourage the developer because they went through a lot. To discuss this topic - Here
    • Shakir Darwish

      IS YOUR SERVER BROKEN SINCE 1.64 UPDATE?   09/22/2016

      If your server is broken since 1.64 go check this link thanks. https://github.com/AsYetUntitled/Framework/issues/104
    • Rozo

      Sad Day   01/04/2017

      Good evening community of Altis Life RPG, Today was a sad day. We learned the hard way that one of the helper was using his status and visibility on the forum to do things i wouldn't imagine.  We were warned about this user in the beginning, we talked about his behavior and he said that they were things of the past. We were fooled.
      Unfortunately, he fooled other community members by selling stolen content and impersonating his role as a developer in another community. Here's a remember of one of the rules on our forum, No selling scripts, snippets, or services.   So if anyone come across someone who's selling his services, scripts or whatever, Report them. Especially if it's coming from an Helper, Mod, Admin. No one in the staff should ask for money, we already mention this when we reopened the forum and that rule is here to stay.

      We can't be sorry enough for what happen here, for any harm it as caused among other communities, for money that shouldn't been spent and we truly hope this doesn't happen again.

      As for the user in question, he is now banned from our forum and discord and we wish to never cross his path again.
        If there's anything we can do hit us on Discord or send a message to an admin.
      Thanks, Rozo.

Leaderboard


Popular Content

Showing most liked content since 04/26/2017 in all areas

  1. 16 likes
    Working Scripts Archive easy access to all available scripts _____________________________________________________________________________________________________________________________________________ UI and Informational Intro Music Intro Music 2 Intro Text Intro Cam Intro Video Outro Script StatusBar Removing Default Statusbar Spawn Menu Redone Updated HUD IPAD Y Menu IPAD Y Menu 2 AI Based Scripts Dynamic Airdrop Improvements & Basic Features Custom Spawn Loadouts for Civilians Seat Belts Patdown Player + Seize Objects Realistic Towing Ear Plugs Rubber Bullets Realistic CPR Kit Actions Menu Tag System Speed Bomb Zip Ties Police Backup Jaws of Life Realistic Tazer Hand Gestures Buyable Loadouts Backpack Custom Capacity Marijuana Effects Gag Action Fastrope Auto Save Adding Smoke Effect to Processing Placeable Objects for Police Invisible Backpacks for police/med Anti VDM Block Changing Names Cops can enter locked vehicles Warner's Barriers Configurable Jail Time Adding police radar GPS System Car Alarm Boat Rental Civilian Passports Police Gate Opening Hotkey Adding Smoke Trails to Cesna Suicide Vest Automatic Messages Animal Tracking (for Hunting) Systems and Complex Features Zipties Revised [Fully Working, With Gag and Blindfolds] Vehicle Insurance RYANTTS DYNAMIC MARKET SYSTEM OPFOR 4.4 Advanced Banking System, With Pins MrKraken's Gas Station Robbery Script Bounty Hunting Framework [Dialog, DB, Player Interaction] Altis Central Bank - Second Fed Purge [Server Event] Crafting System Slot Machines Bus Transportation Physical Cellphone Gang Capturable Areas Tutorials Basic Coding Tutorial Moving the Federal Reserve Task force Radio Black screen when not in channel ETC Separate Police/Civ Cash & Bank Account Gang Name Spawns Ruby Mine Custom Medic & Cop Skins Adding Licenses 4.4 Civilian Whitelisting Installing Task Force Radio (Addon/Mod) Mining with Shift+C Custom Paychecks Official Paid Scripts Maverick Applications Let me know if i missed anything
  2. 11 likes
    ═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════ Difficulty: Hard Published By: Snipes Murphy Version: 4.x Credit: DiabolicaTrix ═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════ All files are available here: https://github.com/DiabolicaTrix/Life-Banking-System/releases Navigate to the core folder, and drag the banking folder directly into it (these are single files, no files should be replaced) In the session folder, open the file fn_requestReceived.sqf and copy the contents of the file. Then go to your file of the same name, and copy the code just after initializing the CASH, BANK, etc. variables. Open the file fn_updatePartial.sqf, and copy the contents. Paste the code just after the "box 7: ..." In the shop folder, open fn_atmMenu.sqf, and copy the one line. Then replace the contents of your file with the same name by this single line. At the core root, open the configuration.sqf file, and in your file of the same name, copy the rows right after the life_marker In the init.sqf, copy the contents of the file, and in your file, paste the code between the initialization of the "sides" (initCiv, initCop, etc.) and the initialization of the "restrained" In the dialog folder, drag the banking folder directly. In the function, paste the files directly, and replace existing files. Copy the atm.hpp file directly to the dialog folder. Open the MasterHandler.hpp file and copy the contents. Add it to the very end of the file. Drag the sounds folder directly Drag the textures folder directly Drag the Config_Banking.hpp file directly Copy the single line of the Config_Master.hpp file and add it to the end of the Config_Master.hpp file. Copy the contents of description.ext, and add it to the end of CfgSounds In Functions.hpp, add the contents of the file after Vehicle. In the stringtable.xml, add the content to the end of the file, just before the closing tag of Project (</ Project>) In your life_server, navigate to the Mysql folder, and open the file fn_queryRequest.sqf, add "banking_pin" after each query, just after playtime. An example is provided in the file in question. Then, in the same file, copy the rest of the file and paste it before the switch. Copy the contents of fn_updatePartial.sqf, and add the right after box 7. In your database, add a new field in the player table, the field must be an int, with a length of 4, and be non-null (same features as the cash field).
  3. 10 likes
    Warner's Barrier - Version 3 Updated October 4th 2016 This may work on version 3.x, I can only confirm it works with 4.x. If you get it working with 3.x reply to this post and I will try to get it moved to universal. Thanks :] Features Place 6 unique objects used to control traffic or pedestrians. Seen in real time where your barrier will be placed. Cones and barriers with working caution lights. Remove barriers with ease. Ability to white list for police and medic ranks. Simple Install Install for Scroll Wheel Download the script from the link below. Drag the script into the "Altis_Life.Altis\core\actions" folder. Ensure the script is named fn_barrier and the file extension is .sqf Open Functions.hpp in the Altis_Life.Altis folder. Find the class Actions section and add class barrier {}; to the end of the list. IMAGE Open initPlayerLocal.sqf in the Altis_Life.Altis folder. At the very bottom add BarrierOpen = 0;. Open fn_setupActions.sqf in the Altis_Life.Altis\core folder. Add a new case for west and add the following code. player addaction ["Barriers",life_fnc_barrier,[""],0,false,true,"","vehicle player == player and BarrierOpen == 0"]; IMAGE (Optional) If you want medics to have access to the menu add a case for Independent too. (OPTIONAL) Space Bar to Drop Barrier Open fn_keyHandler.sqf in the "Altis_Life.Altis\core\functions" folder. Inside case 57 add the following code. detach placeable; placeable setVectorUP (surfaceNormal [(getPosATL placeable) select 0,(getPosATL placeable) select 1]); IMAGE Save your fn_keyHandler.sqf before you add the above code, ArmA has been known to have stuff break for no reason. Video Demonstration CLICK ME Download Download - Version 3
  4. 9 likes
    LINKS AND TOOLS EVERY DEVELOPER SHOULD HAVE Created by Repentz I will edit/improve on this when I think of more, this is just a basic list of things. Obfuscation Personal favorite, extremely well made and uses new techniques to stop people from stealing or using your mission: https://armaservices.maverick-apps.de/Products/Obfuscator/ Another tool would be Mikeros tools, but I've never used them nor can I vouch for their security at this time, but it has been around for much longer. https://forums.bistudio.com/topic/113852-mikeros-dos-tools/ Auto Restarts, Rcon, Administration Once again, personal preference is a tool made by maverick applications which gives you many options: https://armaservices.maverick-apps.de/Products/ArmARemoteAdmin/ SQF Editing Tools Atom.io (install SQF package by acemod if you plan on using it) New favorite, visual studio code, ofcourse install SQF packages: https://code.visualstudio.com/ SQL Editing Tools HeidiSQL - free and works for beginner level SQL management NaviCat - Free 14 day trial, although I prefer this program, it is not free forever. Battleye Filters Battleye Filter Creator - Enter your errors one at a time and it outputs filters Classnames Links Basic Clothing, Vests, Helmets Classnames Weapon Classnames /w Ammunition Weapon Ammunition and bullet Classnames Vehicle weapons and specific ammunition Classnames Attachments for weapons, equiptment like NVG's Etc Building Classnames ------- Side Specific Classnames ------- West Classnames East Classnames Independent Classnames Civilian Classnames Misc Keyboard UI Numbers Steam ID to GUID Huge list of png icons that you can resize for Teamspeak icons (16x16)
  5. 8 likes
    Hi All I've put together a list of what i believe are the most common questions and answers to peoples problems when scripting Altis Life, This should help people find answers to questions more quickly and people are more then welcome to comment if i have left something out with a link and ill update the list. Ill update as i go and hope this helps someone. The aim is that all scripts ect will be working so please let me know if something is broken, Thanks. [Admin please feel free to sticky this if you think it could be off some help ] ========= Mission Editing ========= My mission won't launch after i map edit? Click Here How do i disable fog? Click Here Can i allow players to spawn at there gang base? Click Here How to change open shop objects? Click Here How do i add a radiation zone? Click Here How do i move the federal reserve? Click Here How do i add a second bank to altis? Click Here ========= Script Help ========= How do i change my taser weapon? Click Here How do i add zip ties? Click Here How do i add a welcome side script? Click Here How do i add a suicide vest? Click Here How do i add a push vehicle script? Click Here How do i add anti VDM [4.5]? Click Here How do i add peaceable objects for police? Click Here How do i add effects for marijuana? Click Here How do i add the ability for people to rob a gas station? Click Here How do i add a dynamic market? Click Here How do i install task force radio on my server? Click Here How do i add a bus transportation system? Click Here How to add a new status bar? Click Here How do i add buy-able load outs? Click Here How do i add meth drug? Click Here How do i add a intro cam? Click Here How do i add a outro cam? Click Here How do i add a cop pat down script? Click Here ========= Config Help ========= How do i allow players to save weapons? Click Here Why are licences being removed after i kill someone? Click Here How do i turn off spyglass? Click Here How do i rename a shop? Click Here How do i add a custom difficulty? [Template Included] Click Here How to find a colour code? Click Here How do i change the carry weight of a bag? Click Here How do i add BEC and server restarts? Click Here How do i add license's? Click Here How do i remove snakes from the server? Click Here How do i add more cop ranks? Click Here How do i add car lock and unlock sounds? Click Here How do i increase the animal population around the hunting zone ? Click Here How do i remove public cops? Click Here How do i change the repair kit timing? Click Here How do i change player start cash? Click Here How do i change player starting equipment? Click Here How do i make tool kits infinite? Click Here Key Handler Refrence Click Here ========= Texture Help ========= Where can i find some new textures? Click Here How do i add new car textures? Click Here How do i add vehicle skins? Click Here How do i add different uniforms for cop levels? Click Here or Click Here Cop and Medic skin tutorial Click Here More car textures Click Here ========= Altis Life Server Files ========= Altis Life 4.0 Download Click Here - Altis Life 4.0 Setup Click Here Altis Life 4.4 Download Click Here - Altis Life 4.4 Setup Click Here ========= Other Useful Help ========= Admin Debug Commands Click Here Arma 3 assets list Click Here Auto server build update and backup Click Here
  6. 7 likes
    Hello everyone, Thought it may be time to write a proper tutorial for my zipties. Location of changes: Mission.Map (Eg. AltisLife.Altis or TanoaLife.Tanoa) Difficulty: Medium Github: https://github.com/Wackbatt/Altis-Life-Zipties 1. Download the files from the github listed above. 2. Navigate to the core folder and drag the zipties folder into it. 3. Go back to your mission root and open functions.hpp and add the following to the very bottom: class zipties { tag = "zipties"; class Functions { file = "core\zipties"; class zip_blindfold {}; class zip_blindfoldAction {}; class zip_gagPlayer {}; class zip_gagAction {}; class zip_interaction {}; class zip_patDown {}; class zip_patDownAction {}; class zip_tie {}; class zip_tieAction {}; class zip_untie {}; class zip_untieFix {}; }; }; 4. Open cfgRemoteExec.hpp and add the following under the client section: F(zipties_fnc_zip_tie,CLIENT) F(zipties_fnc_zip_gagplayer,CLIENT) F(zipties_fnc_zip_blindfold,CLIENT) F(zipties_fnc_zip_patdown,CLIENT) F(zipties_fnc_zip_untieFix,CLIENT) 5. Open stringtable.xml and add the following package at the bottom <Package name="zipties"> <Key ID="STR_NOTF_ziptied"> <Original>%1 was ziptied by someone.</Original> <German>%1 wurde gefesselt.</German> </Key> <Key ID="STR_NOTF_unzipteed"> <Original>%1 was cut loose.</Original> <German>%1 wurde befreit.</German> </Key> <Key ID="STR_ExcessiveTied"> <Original>You have been released automatically for excessive restrainment time</Original> <German>Du wurdest automatisch frei gelassen.</German> </Key> <Key ID="STR_tied"> <Original>You have been restrained by someone.</Original> <German>Du wurdest gefesselt.</German> </Key> <Key ID="STR_Ziptie"> <Original>Ziptie</Original> <German>Fesseln</German> </Key> <Key ID="STR_gag"> <Original>Gag</Original> <German>Knebel</German> </Key> <Key ID="STR_blindfold"> <Original>Blindfold</Original> <German>Augenbinde</German> </Key> </Package> 6. Open description.ext and add the following: class ziptie { name = "ziptie"; sound[] = {"\sounds\ziptie.ogg", 1.0, 1}; titles[] = {}; }; class gag { name = "gag"; sound[] = {"\sounds\gag.ogg", 1.0, 1}; titles[] = {}; }; 6. Add the sounds and icons from the github to the appropriate folders. 7. Go to the config folder and open Config_master.hpp and add the following in the life settings section: ziptie_need_rebel = false; 8. Open Config_vItems.hpp and add the following: class ziptie { variable = "ziptie"; displayName = "STR_Ziptie"; weight = 6; buyPrice = 5000; sellPrice = 1200; illegal = true; edible = -1; icon = "icons\ziptie.paa"; }; class gag { variable = "gag"; displayName = "STR_gag"; weight = 7; buyPrice = 3000; sellPrice = 1000; illegal = true; edible = -1; icon = "icons\gag.paa"; }; class blindfold { variable = "blindfold"; displayName = "STR_blindfold"; weight = 7; buyPrice = 3500; sellPrice = 1200; illegal = true; edible = -1; icon = "icons\blindfold.paa"; }; 9. Open core\actions and replace the 3 files with the files from the git repo. 10. Goto core\functions and open actionkeyhandler and find if (playerSide isEqualTo west && {player getVariable ["isEscorting",false]}) exitWith { [] call life_fnc_copInteractionMenu; }; and add the following underneath: if (playerSide isEqualTo civilian && {player getVariable ["isEscorting",false]}) exitWith { [] call zipties_fnc_zip_interaction; }; and in the same file find if ((_curObject getVariable ["restrained",false]) && !dialog && playerSide isEqualTo west) then { [_curObject] call life_fnc_copInteractionMenu; }; and add the following underneath: if ((_curObject getVariable ["ziptied",true]) && !dialog) then { [_curObject] call zipties_fnc_zip_interaction; }; 11. Open keyhandler in the same folder and replace line 24 to 26 with the following: if ((_code in (actionKeys "GetOver") || _code in (actionKeys "salute") || _code in (actionKeys "SitDown") || _code in (actionKeys "Throw") || _code in (actionKeys "GetIn") || _code in (actionKeys "GetOut") || _code in (actionKeys "Fire") || _code in (actionKeys "ReloadMagazine") || _code in [16,18]) && ((player getVariable ["restrained",false]) || (player getVariable ["playerSurrender",false]) || (player getVariable ["ziptied",false]) || life_isknocked || life_istazed)) exitWith { true; }; 12. Add the following to the if statement for case 21: !(player getVariable ["ziptied",false]) and replace case 19 with the following: case 19: { if (_shift) then {_handled = true;}; if (_shift && playerSide isEqualTo west && {!isNull cursorObject} && {cursorObject isKindOf "Man"} && {(isPlayer cursorObject)} && {(side cursorObject in [civilian,independent])} && {alive cursorObject} && {cursorObject distance player < 3.5} && {!(cursorObject getVariable "Escorting")} && {!(cursorObject getVariable "restrained")} && {speed cursorObject < 1}) then { [] call life_fnc_restrainAction; } else { [] call zipties_fnc_zip_tieAction; }; }; 13. Replace the entirety of fn_pullOutVeh.sqf with the file from the github. 14. Open core\medical and open onplayerkilled and add the following underneath the set variables: [_unit] call ziptie_fnc_zip_untieFix; 15. Open core\vehicle and open vinteractionmenu and find if (playerSide isEqualTo west) then { and add the following above it: _Btn4 ctrlSetText localize "STR_vInAct_PullOut"; _Btn4 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_pulloutAction; closeDialog 0;"; if (crew _curTarget isEqualTo []) then {_Btn4 ctrlEnable false;}; then remove _Btn4 ctrlEnable false; from around line 127. 16. Open core\init.sqf and find player setVariable ["restrained",false,true]; player setVariable ["Escorting",false,true]; player setVariable ["transporting",false,true]; player setVariable ["playerSurrender",false,true]; and add the following underneath: player setVariable ["ziptied",false,true]; player setVariable ["blindfolded",false,true]; player setVariable ["gagged",false,true]; 17. Repack your pbo and relaunch your server. Additional Notes: It is up to you to include the 50+ changes to other files in the framework to prevent ziptied people from performing certain actions like gathering, mining etc. I eventually will be making this more stream lined so that these changes are not needed so make sure you keep your files up to date. Leave any comments below regarding changes/updates and fixes, feel free to fork the repo and commit any changes you feel need to be made.
  7. 7 likes
    ********************************************************************************************* Hey Guys, today i want to share my trunk with all of u and how to install it ********************************************************************************************* to start things of here are some information about it: The trunk has 2 new buttons one to take all (as much as possible) one to store all ( as much as possible) it has ha new layout, and yea, it is not the best but yea go with it, design is not my strongest It will look like this: ********************************************************************************************* Tested in versions: 5.0.0 4.4.1 ********************************************************************************************* first we need to Edit the menu so go to dialog/trunk.hpp and replace everythin with my code that done we go to our functions.hpp / functions.h in the root directory nad add unter class vehicle the following: class vehTakeAllItem {}; class vehStoreAllItem {}; so it should look like this next of we go in the directory core/vehicle and create 2 new sqf files the first one: fn_vehStoreAllItem.sqf: and fn_vehTakeAllItem.sqf: so with this done it should work, if i forgot something please let me know below
  8. 7 likes
    How to Stop the Gang Bank Duplication Exploit Author: CptGooch Author Website: www.abeloth.com Short description: I got tired of seeing so many servers and even the framework with this exploit. Downloads: fn_gangDeposit.sqf & fn_gangWithdraw.sqf Installation Steps: Replace your fn_gangWithdraw.sqf and fn_gangDeposit.sqf found in dialog\function\ with the downloads provided Add the following to your core/configuration.sqf life_gang_bank_time = 0; Open your stringtable.xml and search (crtl+f) for STR_ATM_DepositInUseG Update the original text to <Original>Reconnecting to bank server. Please wait 10 seconds to deposit into your gang's bank account.</Original> Now find STR_ATM_WithdrawInUseG and update the original text to <Original>Reconnecting to bank server. Please wait 10 seconds to withdraw from your gang's bank account.</Original> Next, open up \dialog\bank.hpp Change your GangWithdraw button action to onButtonClick = "[] spawn {sleep (random 0.5);[] call life_fnc_gangWithdraw};"; And change your GangDeposit action to onButtonClick = "[] spawn {sleep (random 0.5);[] call life_fnc_gangDeposit};"; All done! No more Gang Bank Duping for those #%!#*^.
  9. 6 likes
    Autor: Entity Replace the spawnSelection.hpp by that: class life_spawn_selection { idd = 38500; movingEnabled = 0; enableSimulation = 1; class controlsBackground { class life_RscTitleBackground: Life_RscText { idc = 1000; x = 0.0101577 * safezoneW + safezoneX; y = 0.0291999 * safezoneH + safezoneY; w = 0.170156 * safezoneW; h = 0.9438 * safezoneH; colorBackground[] = {0.294,0.286,0.286,0.8}; }; class Title: Life_RscText { idc = 1001; text = "Spawn Selection"; x = 0.0132501 * safezoneW + safezoneX; y = 0.0402 * safezoneH + safezoneY; w = 0.164999 * safezoneW; h = 0.0242 * safezoneH; }; class MapView: Life_RscMapControl { idc = 38502; x = 0.183407 * safezoneW + safezoneX; y = 0.0292 * safezoneH + safezoneY; w = 0.8085 * safezoneW; h = 0.9438 * safezoneH; maxSatelliteAlpha = 0.75; alphaFadeStartScale = 1.15; alphaFadeEndScale = 1.29; }; }; class controls { class spawnList: Life_RscListNbox { idc = 38510; x = 0.0153125 * safezoneW + safezoneX; y = 0.071 * safezoneH + safezoneY; w = 0.159844 * safezoneW; h = 0.847 * safezoneH; text = ""; sizeEx = 0.041; coloumns[] = {0,0,0.9}; drawSideArrows = 1; idcLeft = -1; idcRight = -1; rowHeight = 0.050; onLBSelChanged = "_this call life_fnc_spawnPointSelected;"; }; class spawnButton: Life_RscButtonMenu { idc = -1; text = "Enter"; x = 0.0153125 * safezoneW + safezoneX; y = 0.9246 * safezoneH + safezoneY; w = 0.159844 * safezoneW; h = 0.033 * safezoneH; style = "0x02"; colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; colorBackgroundActive[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1}; colorBackgroundDisabled[] = {0.95,0.95,0.95,0}; offsetX = 0.003; offsetY = 0.003; offsetPressedX = 0.002; offsetPressedY = 0.002; colorShadow[] = {0,0,0,1}; colorBorder[] = {0,0,0,0}; borderSize = 0.008; onButtonClick = "[] call life_fnc_spawnConfirm"; }; }; }; Screenshot:http://imgur.com/nrCSz9c Finish !
  10. 6 likes
    Everything in one service Available from everywhere ArmA Remote Admin's web interface is available on any device. Remotely access your server from your phone, edit users and administrate on the go. Scheduler - Daily routines for your gameservers Use ARA's build in scheduler to create daily routines for your gameservers. Restart your servers on fixed times, send messages, run applications and more. User Account Validation Filter out unwanted accounts by playtime, owned games and VAC bans to prevent cheaters from joining your server. Reserved Slots Support Create reserved slots for specific players with ease RCON access via web interface View ingame messages, send messages, kick/ban users, load different missions and more. User accounts Allow other users with valid Maverick Applications accounts to access certain features of your gameservers such as restarting, scheduler editing, rcon access and more allowing you to easily configure accounts for moderators and other administrators. System Diagnostics View server diagnostics such as server performance, CPU usage, RAM usage and other diagnostics live. Remote Server Control Start/Stop/Restart your server from everywhere by clicking a button Whitelists Add a whitelist to your server and manage it with ease. System Failure Handling Be notified when your server/gameserver crashes or becomes unavailable and have it automatically restarted to ensure uptimes. WebLogs WebLogs provides an overview over everything that is happening to your server. From RCon messages, to bans, kicks and edits of your scheduler, everything is logged. Offline Solution If the master server is not reachable, offline dumped data will be used to keep automatic server restarts and other functionalities running. Click here to visit the website
  11. 5 likes
    Well I have used some of the tutorials found here and thought it is only fair for me to put one up for what I made the other day. Apologies if my script is not optimised etc, one of my friends told me I write "wet" code. Difficulty: Easy Framework Version: 4.4r3 10 damage every 5 seconds can be set to whatever you want. If wearing the set clothing no damage but you still get the effects. Right start with the map side, in the mission editor you need to create a trigger point, the size does not matter, you can have it as big or as small as you want. Once created you need to edit its properties so right click the trigger point and click properties. you should get this menu. the Variable name can be anything you want, you need to set the "Trigger: Activation" and "Trigger: Expression" Trigger: Activation Type: None Activation: Anybody Activation Type: Present Repeatable: Yes Server Only: No Trigger: Expression Condition: this && (local player) && (vehicle player in thisList) On Activation: hint parseText format ["<t color='#0eb0ff'>You have entered a radioactive area!</t>"]; player setVariable ["exitRad",false]; player call life_fnc_radArea; On Deactivation: hint parseText format ["<t color='#0eb0ff'>You are leaving the radioactive area!</t>"]; player setVariable ["exitRad",true]; Click ok, save the mission and that is the map side done. Now for the mission file. Create a new file in Altis_Life.Altis\core\functions called fn_radArea.sqf, then copy and paste the below script inside it. If you want to set how often damage is caused just edit the "sleep 5," to however long you want. If you want to edit how much damage is caused edit the "_player setDamage (_damage + 0.1)" remember 0 is 100% of health 1 is dead. To set what clothing is required to be warn edit the "if ((_uniform isEqualTo "U_B_Wetsuit") && (_vest isEqualTo "V_RebreatherB") && (_goggles isEqualTo "G_Diving")) then". #include "..\..\script_macros.hpp" /* fn_radArea.sqf Created by Fuel for RebornRoleplay.com [UK/EU] Reborn Roleplay | RebornRoleplay.co.uk */ _player = [_this,0,objNull,[objNull]] call BIS_fnc_param; _damage = getDammage _player; _uniform = uniform _player; _vest = vest _player; _goggles = goggles _player; _rad1 = ppEffectCreate ["ChromAberration",200]; _rad2 = ppEffectCreate ["DynamicBlur",500]; _rad3 = ppEffectCreate ["FilmGrain",2000]; if (!alive _player || (_damage == 1) || (_player getVariable ["exitRad",true])) exitWith { _player setVariable ["exitRad",true]; _rad1 ppEffectEnable false; _rad1 ppEffectAdjust [0,0,true]; _rad1 ppEffectCommit 1; _rad2 ppEffectEnable false; _rad2 ppEffectAdjust [0]; _rad2 ppEffectCommit 1; _rad3 ppEffectEnable false; _rad3 ppEffectAdjust [0,0,0,0,0,true]; _rad3 ppEffectCommit 1;}; // this is the check to see if they are wearing protective clothing if ((_uniform isEqualTo "U_B_Wetsuit") && (_vest isEqualTo "V_RebreatherB") && (_goggles isEqualTo "G_Diving")) then { //rad sound _player say2d "rad"; // edit this for the length of the effect for "_i" from 0 to 4 do { _rad1 ppEffectEnable true; _rad1 ppEffectAdjust [-0.02,0,true]; _rad1 ppEffectCommit 1; _rad2 ppEffectEnable true; _rad2 ppEffectAdjust [0.03]; _rad2 ppEffectCommit 1; _rad3 ppEffectEnable true; _rad3 ppEffectAdjust [0.12,1.52,3.54,2,2,true]; _rad3 ppEffectCommit 1; }; sleep 5; //loops the script until they exit [_player] remoteExec ["life_fnc_radArea",_player]; } else { //rad sound _player say2d "rad"; // edit this for the length of the effect for "_i" from 0 to 4 do { _rad1 ppEffectEnable true; _rad1 ppEffectAdjust [-0.02,0,true]; _rad1 ppEffectCommit 1; _rad2 ppEffectEnable true; _rad2 ppEffectAdjust [0.03]; _rad2 ppEffectCommit 1; _rad3 ppEffectEnable true; _rad3 ppEffectAdjust [0.12,1.52,3.54,2,2,true]; _rad3 ppEffectCommit 1; }; sleep 5; //set the damage to player _player setDamage (_damage + 0.1); //loops the script until they exit [_player] remoteExec ["life_fnc_radArea",_player]; }; Now open your Functions.hpp, and paste class radArea {}; inside of class Functions { file = "core\functions"; Now open cfgRemoteEcec.hpp, and paste F(life_fnc_radArea,CLIENT) inside of class CfgRemoteExec { class Functions { mode = 1; jip = 0; /* Client only functions */ Now open description.ext, and paste class rad { name = "rad"; sound[] = {"\sounds\rad.ogg", 0.25, 1}; titles[] = {}; }; inside of class CfgSounds { sounds[] = {}; Now copy the attached sound file called rad.ogg and paste it into Altis_life.Altis/sounds/ And you are done, I do not think I have missed anything. here if a quick video of it in action. rad.ogg
  12. 4 likes
    Original Post - N/A Original Author - Shakir Darwish Open your "dialog" folder and then open "impound.hpp" Add this to classSellCar: class InsureCar : life_RscButtonMenu { idc = 97480; text = "ensure" ; onButtonClick = "[] call life_fnc_insureCar;"; x = 0.43 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); and = 0 . 9 - ( 1 / 25 ); w = (6.25 / 40); h = (1 / 25); }; Go to dialog>functions and add a new file named "fn_insureCar.sqf" Paste this in the new document: #include "..\..\script_macros.hpp" /* File: fn_insureCar.sqf Author: Guit0x "Lintox" Description: Insure a vehicle from the garage. */ private["_vehicle","_vehicleLife","_vid","_pid","_unit","_multiplier","_price","_purchasePrice","_insurancePrice"]; disableSerialization; if ((lbCurSel 2802) isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection"}; _vehicle = lbData[2802,(lbCurSel 2802)]; _vehicle = (call compile format["%1",_vehicle]) select 0; _vehicleLife = _vehicle; _vid = lbValue [ 2802 , (lbCurSel 2802 )]; _pid = getPlayerUID player; _unit = player; if(isNil "_vehicle") exitWith {hint localize "STR_Garage_Selection_Error"}; if ((time - life_action_delay) < 1.5) exitWith {hint localize "STR_NOTF_ActionDelay";}; if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _vehicleLife)) then { _vehicleLife = "Default"; //Use Default class if it doesn't exist diag_log format["%1: LifeCfgVehicles class doesn't exist",_vehicle]; }; _price = M_CONFIG(getNumber,"LifeCfgVehicles",_vehicleLife,"price"); switch (playerSide) do { case civilian: { _multiplier = LIFE_SETTINGS(getNumber,"vehicle_insurance_multiplier_CIVILIAN"); _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN"); }; case west: { _multiplier = LIFE_SETTINGS(getNumber,"vehicle_insurance_multiplier_COP"); _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP"); }; case independent: { _multiplier = LIFE_SETTINGS(getNumber,"vehicle_insurance_multiplier_MEDIC"); _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC"); }; case east: { _multiplier = LIFE_SETTINGS(getNumber,"vehicle_insurance_multiplier_OPFOR"); _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR"); }; }; _insurancePrice = _purchasePrice * _multiplier; if(!(_insurancePrice isEqualType 0) || _insurancePrice < 1) then {_insurancePrice = 500}; if(BANK < _insurancePrice) exitWith {hint format[(localize "STR_GNOTF_NotEnoughMoney"),[_insurancePrice] call life_fnc_numberText];}; if (life_HC_isActive) then { [_vid,_pid,_insurancePrice,player,life_garage_type] remoteExecCall ["HC_fnc_insureCar",HC_Life]; } else { [_vid,_pid,_insurancePrice,player,life_garage_type] remoteExecCall ["TON_fnc_insureCar",RSERV]; }; hint localize "STR_InsuranceApply"; BANK = BANK - _insurancePrice; life_action_delay = time; closeDialog 0; Open "function.hpp" in your "dialog" folder and add: class Dialog_Controls { file = "dialog\function"; [...] class insureCar {}; [...] }; Then open your "functions" folder in your "dialog" folder and open "fn_garageLBChange.sqf" Replace this: private["_control","_index","_className","_classNameLife","_dataArr","_vehicleColor","_vehicleInfo","_trunkSpace","_sellPrice","_retrievePrice","_sellMultiplier","_price","_storageFee","_purchasePrice"]; With this: private["_control","_index","_className","_classNameLife","_dataArr","_vehicleColor","_vehicleInfo","_trunkSpace","_sellPrice","_retrievePrice","_sellMultiplier","_insurance","_insuranceMultiplier","_price","_storageFee","_purchasePrice","_insurancePrice"]; After this: _classNameLife = _className; Add this: _insurance = (_dataArr select 2 ); Replace this: switch (playerSide) do { case civilian: { _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN"); _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_CIVILIAN"); }; case west: { _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP"); _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_COP"); }; case independent: { _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC"); _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_MEDIC"); }; case east: { _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR"); _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_OPFOR"); }; }; With this: switch (playerSide) do { case civilian: { _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN"); _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_CIVILIAN"); _insuranceMultiplier = LIFE_SETTINGS(getNumber,"vehicle_insurance_multiplier_CIVILIAN"); }; case west: { _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP"); _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_COP"); _insuranceMultiplier = LIFE_SETTINGS(getNumber,"vehicle_insurance_multiplier_COP"); }; case independent: { _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC"); _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_MEDIC"); _insuranceMultiplier = LIFE_SETTINGS(getNumber,"vehicle_insurance_multiplier_MEDIC"); }; case east: { _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR"); _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_OPFOR"); _insuranceMultiplier = LIFE_SETTINGS(getNumber,"vehicle_insurance_multiplier_OPFOR"); }; }; After this: _sellPrice = _purchasePrice * _sellMultiplier; Add this: _insurancePrice = _purchasePrice * _insuranceMultiplier; After this: if (!(_retrievePrice isEqualType 0) || _retrievePrice < 1) then {_retrievePrice = 500;}; Add this: if (!(_insurancePrice isEqualType 0) || _insurancePrice < 1) then {_insurancePrice = 500;}; Replace this: (CONTROL(2800,2803)) ctrlSetStructuredText parseText format[ (localize "STR_Shop_Veh_UI_RetrievalP")+ " <t color='#8cff9b'>$%1</t><br/> " +(localize "STR_Shop_Veh_UI_SellP")+ " <t color='#8cff9b'>$%2</t><br/> " +(localize "STR_Shop_Veh_UI_Color")+ " %8<br/> " +(localize "STR_Shop_Veh_UI_MaxSpeed")+ " %3 km/h<br/> " +(localize "STR_Shop_Veh_UI_HPower")+ " %4<br/> " +(localize "STR_Shop_Veh_UI_PSeats")+ " %5<br/> " +(localize "STR_Shop_Veh_UI_Trunk")+ " %6<br/> " +(localize "STR_Shop_Veh_UI_Fuel")+ " %7 ", With this: (CONTROL(2800,2803)) ctrlSetStructuredText parseText format[ (localize "STR_Shop_Veh_UI_RetrievalP")+ " <t color='#8cff9b'>$%1</t><br/> " +(localize "STR_Shop_Veh_UI_SellP")+ " <t color='#8cff9b'>$%2</t><br/> Prix de l'assurance: <t color='#8cff9b'>$%9</t><br/> State Insurance: %10 <br/> " +(localize "STR_Shop_Veh_UI_Color")+ " <t color='#8cff9b'>%8</t><br/> " +(localize "STR_Shop_Veh_UI_MaxSpeed")+ " <t color='#8cff9b'>%3 km/h</t><br/> " +(localize "STR_Shop_Veh_UI_HPower")+ " <t color='#8cff9b'>%4</t><br/> " +(localize "STR_Shop_Veh_UI_PSeats")+ " <t color='#8cff9b'>%5</t><br/> " +(localize "STR_Shop_Veh_UI_Trunk")+ " <t color='#8cff9b'>%6</t><br/> " +(localize "STR_Shop_Veh_UI_Fuel")+ " <t color='#8cff9b'>%7</t> ", Replace this: (_vehicleInfo select 12), _vehicleColor ]; With this: (_vehicleInfo select 12), _vehicleColor, [_insurancePrice] call life_fnc_numberText, if(_insurance == 1) then {"<t color='#8cff9b'>Assuré</t>"} else {"<t color='#FF0000'>Pas d'assurance</t>"}, (_vehicleInfo select 9) ]; if(_insurance == 1) then { ctrlShow [97480,False]; }else{ ctrlShow [97480,True]; }; Open dialog>function>fn_impoundMenu.sqf Replace this: _tmp = [(_x select 2),(_x select 8)]; With this: _tmp = [(_x select 2),(_x select 8),(_x select 9)]; Open CfgRemoteExec.hpp and add this in server only functions: F(TON_fnc_insureCar,SERVER) In Headless Client functions: F(HC_fnc_insureCar,HC) Open your stringtable.xml and add this: <Key ID="STR_InsuranceApply"> <Original>You just insure your vehicle you are now protected against explosions!</Original> < Czech > Now you insure your vehicle is now protected against explosions ! < / Czech > < Spanish > You just make sure your vehicle is now protected against explosions ! < / Spanish > < Italian > Just ensure your vehicle you are now protected against explosions ! < / Italian > < Polish > Just insure your vehicle you are now protected from explosion ! < / Polish > < Russian > You just insure your car, you are now protected against explosions ! < / Russian > < French > You just make your vehicle you are now protected against explosions ! < / French > < Portuguese > You just hold your vehicle you are now protected against explosions ! < / Portuguese > < German > They only insure your vehicle, you are now protected against explosions ! < / German > </Key> Under "<Key ID="STR_pInAct_SellGarage" Then open your Config_Master.hpp and add: /* Vehicle Insurance Prices */ vehicle_insurance_multiplier_CIVILIAN = .25; //Civilian Vehicle Insurance Price = Vehicle Buy Price * multiplier vehicle_insurance_multiplier_COP = .1; //Cop Vehicle Insurance Price = Vehicle Buy Price * multiplier vehicle_insurance_multiplier_MEDIC = .1; //Medic Vehicle Insurance Price = Vehicle Buy Price * multiplier vehicle_insurance_multiplier_OPFOR = -1; // -- NOT IN USE -- Simply left in for east support. In life_server: Open "config.cpp" and under class Ton_System (both life and hc) add: class insureCar {}; In functions>systems>fn_spawnVehicle.sqf: Replace this: _query = format["SELECT id, side, classname, type, pid, alive, active, plate, color, inventory, gear, fuel, damage, blacklist FROM vehicles WHERE id='%1' AND pid='%2'",_vid,_pid]; With this: _query = format["SELECT id, side, classname, type, pid, alive, active, plate, color, inventory, gear, fuel, damage, blacklist, insure FROM vehicles WHERE id='%1' AND pid='%2'",_vid,_pid]; Replace this: _vehicle setVariable ["dbInfo",[(_vInfo select 4),(_vInfo select 7)],true]; With this: _vehicle setVariable ["dbInfo",[(_vInfo select 4),(_vInfo select 7),(_vInfo select 14)],true]; Replace this: [1,_spawntext] remoteExecCall ["life_fnc_broadcast",_unit]; serv_sv_use deleteAt _servIndex; With this: if ((_vInfo select 14) isEqualTo 1) then { [ 1 , "Your vehicle is available and it is assured!" ] RemoteExecCall [ "life_fnc_broadcast" , _unit]; }else{ [ 1 , "Your vehicle is available but is not insured!" ] RemoteExecCall [ "life_fnc_broadcast" , _unit]; }; serv_sv_use deleteAt _servIndex; In functions>systems create a new file named "fn_insureCar.sqf" and paste this: /* File: fn_insureCar.sqf Author: Guit0x "Lintox" Description: Insure a vehicle from the garage. */ private["_vid","_pid","_query","_sql","_unit","_insurancePrice","_thread"]; _vid = [_this,0,-1,[0]] call BIS_fnc_param; _pid = [_this,1,"",[""]] call BIS_fnc_param; _unit = [_this,2,ObjNull,[ObjNull]] call BIS_fnc_param; _insurancePrice = [_this,3,0,[0]] call BIS_fnc_param; _query = format["UPDATE vehicles SET insure='1' WHERE pid='%1' AND id='%2'",_pid,_vid]; waitUntil { ! DB_Async_Active}; _thread = [_query,1] call DB_fnc_asyncCall; For life_hc paste this instead: /* File: fn_insureCar.sqf Author: Guit0x "Lintox" Description: Insure a vehicle from the garage. */ private["_vid","_pid","_query","_sql","_unit","_insurancePrice","_thread"]; _vid = [_this,0,-1,[0]] call BIS_fnc_param; _pid = [_this,1,"",[""]] call BIS_fnc_param; _unit = [_this,2,ObjNull,[ObjNull]] call BIS_fnc_param; _insurancePrice = [_this,3,0,[0]] call BIS_fnc_param; _query = format["UPDATE vehicles SET insure=‘1' WHERE pid='%1' AND id='%2'",_pid,_vid]; waitUntil { ! DB_Async_Active}; _thread = [_query,1] call HC_fnc_asyncCall; In FSM>cleanup.fsm replace the entire document with: /*%FSM<COMPILE "C:\Program Files (x86)\Bohemia Interactive\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, Server-Side Cleanup">*/ /*%FSM<HEAD>*/ /* item0[] = {"init",0,250,-62.908096,-391.651611,27.091887,-341.651672,0.000000,"init"}; item1[] = {"true",8,218,-62.976639,-315.185364,27.023363,-265.185364,0.000000,"true"}; item2[] = {"Share__Work_load",2,250,-64.183350,-224.681931,25.816656,-174.681931,0.000000,"Share " \n "Work-load"}; item3[] = {"Continue__",4,218,-220.591476,74.216980,-130.591476,124.216980,0.000000,"" \n "" \n "Continue" \n "" \n ""}; item4[] = {"Time_Check",4,218,-219.425827,-133.310532,-129.425964,-83.310455,0.000000,"Time Check"}; item5[] = {"Delete_Dead_Cars",2,4346,-220.186951,-29.248400,-130.187195,20.751413,0.000000,"Delete" \n "Dead" \n "Cars"}; item6[] = {"",7,210,-312.538239,95.295059,-304.538239,103.295059,0.000000,""}; item7[] = {"",7,210,-312.798218,-204.081940,-304.798218,-196.081940,0.000000,""}; item8[] = {"End_Cleanup_",1,250,-64.828239,87.581070,25.171984,137.581238,0.000000,"" \n "End Cleanup" \n ""}; item9[] = {"Check_for_HC_",4,218,-65.059021,-30.047342,24.941008,19.952658,0.000000,"" \n "Check for HC" \n ""}; link0[] = {0,1}; link1[] = {1,2}; link2[] = {2,4}; link3[] = {3,6}; link4[] = {4,5}; link5[] = {5,3}; link6[] = {5,9}; link7[] = {6,7}; link8[] = {7,2}; link9[] = {9,8}; globals[] = {0.000000,0,0,0,0,640,480,1,53,6316128,1,-481.887177,425.726196,554.522583,-436.926575,170,901,1}; window[] = {0,-1,-1,-32000,-32000,1065,104,1468,104,1,188}; *//*%FSM</HEAD>*/ class FSM { fsmName = "Server-Side Cleanup"; class States { /*%FSM<STATE "init">*/ class init { name = "init"; init = /*%FSM<STATEINIT""">*/"private [""_impound"",""_cars"",""_objs"",""_totCars"",""_thread""];" \n "_impound = time;" \n "_cars = time;" \n "_objs = time;" \n "cleanupFSM setFSMVariable [""stopfsm"",false];"/*%FSM</STATEINIT""">*/; precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/; class Links { /*%FSM<LINK "true">*/ class true { priority = 0.000000; to="Share__Work_load"; precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/; condition=/*%FSM<CONDITION""">*/"true"/*%FSM</CONDITION""">*/; action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/; }; /*%FSM</LINK>*/ }; }; /*%FSM</STATE>*/ /*%FSM<STATE "Share__Work_load">*/ class Share__Work_load { name = "Share__Work_load"; init = /*%FSM<STATEINIT""">*/""/*%FSM</STATEINIT""">*/; precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/; class Links { /*%FSM<LINK "Time_Check">*/ class Time_Check { priority = 0.000000; to="Delete_Dead_Cars"; precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/; condition=/*%FSM<CONDITION""">*/"((time - _cars) > (3 * 60))"/*%FSM</CONDITION""">*/; action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/; }; /*%FSM</LINK>*/ }; }; /*%FSM</STATE>*/ /*%FSM<STATE "Delete_Dead_Cars">*/ class Delete_Dead_Cars { name = "Delete_Dead_Cars"; init = /*%FSM<STATEINIT""">*/"{" \n " if (!alive _x) then {" \n " _dbInfo = _x getVariable [""dbInfo"",[]];" \n " if (count _dbInfo > 0) then {" \n " _uid = _dbInfo select 0;" \n " _plate = _dbInfo select 1;" \n " _insureSystem = _dbInfo select 2;" \n " diag_log "" destroy vehicle !"";" \n " diag_log format[""insureSystem = %1 "", _insureSystem];" \n " if(_insureSystem == 1) then " \n " { diag_log "" Insured !"";" \n " diag_log format[""insureSystem = %1 "", _insureSystem];" \n "" \n " _query_0 = format [""UPDATE vehicles SET alive='1', insure='0', active='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate];" \n " _query_0 spawn {" \n " " \n " _thread = [_this,1] call DB_fnc_asyncCall;" \n " };" \n " } else {" \n " diag_log "" Not insured !"";" \n " diag_log format[""insureSystem = %1 "", _insureSystem];" \n " _query = format[""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate]; " \n " _query spawn {" \n " _thread = [_this,1] call DB_fnc_asyncCall;" \n " };" \n " };" \n " if (!isNil ""_x"" && {!isNull _x}) then {" \n " deleteVehicle _x;" \n " };" \n " };" \n "};" \n "} forEach allMissionObjects ""LandVehicle"";" \n "" \n "{" \n " if (!alive _x) then {" \n " _dbInfo = _x getVariable [""dbInfo"",[]];" \n " if (count _dbInfo > 0) then {" \n " _uid = _dbInfo select 0;" \n " _plate = _dbInfo select 1;" \n " _insureSystem = _dbInfo select 2;" \n " diag_log "" destroy vehicle !"";" \n " diag_log format[""insureSystem = %1 "", _insureSystem];" \n " if(_insureSystem == 1) then" \n " { diag_log "" Insured !"";" \n " diag_log format[""insureSystem = %1 "", _insureSystem];" \n " _query_0 = format [""UPDATE vehicles SET alive='1', insure='0', active='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate];" \n " _query_0 spawn {" \n " " \n " _thread = [_this,1] call DB_fnc_asyncCall;" \n " };} else { " \n " diag_log "" Not Insured !"";" \n " diag_log format[""insureSystem = %1 "", _insureSystem];" \n " _query = format[""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate]; " \n " _query spawn {" \n " _thread = [_this,1] call DB_fnc_asyncCall;" \n " };" \n " };" \n " };" \n " if (!isNil ""_x"" && {!isNull _x}) then {" \n " deleteVehicle _x;" \n " };" \n " };" \n "} forEach allMissionObjects ""Air"";" \n "_cars = time;" \n "" \n "//Group cleanup." \n "{" \n " if (units _x isEqualTo [] && local _x) then {" \n " deleteGroup _x;" \n " };" \n "} forEach allGroups;"/*%FSM</STATEINIT""">*/; precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/; class Links { /*%FSM<LINK "Check_for_HC_">*/ class Check_for_HC_ { priority = 0.000000; to="End_Cleanup_"; precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/; condition=/*%FSM<CONDITION""">*/"cleanupFSM getFSMVariable ""stopfsm"""/*%FSM</CONDITION""">*/; action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/; }; /*%FSM</LINK>*/ /*%FSM<LINK "Continue__">*/ class Continue__ { priority = 0.000000; to="Share__Work_load"; precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/; condition=/*%FSM<CONDITION""">*/"!(cleanupFSM getFSMVariable ""stopfsm"")"/*%FSM</CONDITION""">*/; action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/; }; /*%FSM</LINK>*/ }; }; /*%FSM</STATE>*/ /*%FSM<STATE "End_Cleanup_">*/ class End_Cleanup_ { name = "End_Cleanup_"; init = /*%FSM<STATEINIT""">*/""/*%FSM</STATEINIT""">*/; precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/; class Links { }; }; /*%FSM</STATE>*/ }; initState="init"; finalStates[] = { "End_Cleanup_", }; }; /*%FSM</COMPILE>*/ For life_hc paste this instead: /*%FSM<COMPILE "D:\Bohemia Interactive\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, Server-Side Cleanup">*/ /*%FSM<HEAD>*/ /* item0[] = {"init",0,250,-65.004578,-391.651611,24.995417,-341.651672,0.000000,"init"}; item1[] = {"true",8,218,-62.976639,-315.185364,27.023363,-265.185364,0.000000,"true"}; item2[] = {"Share__Work_load",2,250,-64.183350,-224.681931,25.816656,-174.681931,0.000000,"Share " \n "Work-load"}; item3[] = {"true",8,218,-54.709698,75.189262,35.290302,125.189262,0.000000,"true"}; item4[] = {"Time_Check",4,218,-219.425827,-133.310532,-129.425964,-83.310455,0.000000,"Time Check"}; item5[] = {"Delete_Dead_Cars",2,4346,-220.186951,-29.248400,-130.187195,20.751413,0.000000,"Delete" \n "Dead" \n "Cars"}; item6[] = {"",7,210,-312.538239,95.295059,-304.538239,103.295059,0.000000,""}; item7[] = {"",7,210,-311.750000,-203.033707,-303.750000,-195.033707,0.000000,""}; link0[] = {0,1}; link1[] = {1,2}; link2[] = {2,4}; link3[] = {3,6}; link4[] = {4,5}; link5[] = {5,3}; link6[] = {6,7}; link7[] = {7,2}; globals[] = {0.000000,0,0,0,0,640,480,1,46,6316128,1,-629.444153,611.207214,293.309357,-434.050568,1243,885,1}; window[] = {2,-1,-1,-1,-1,985,225,1868,225,3,1261}; *//*%FSM</HEAD>*/ class FSM { fsmName = "Server-Side Cleanup"; class States { /*%FSM<STATE "init">*/ class init { name = "init"; init = /*%FSM<STATEINIT""">*/"private[""_impound"",""_cars"",""_objs"",""_totCars"",""_thread""];" \n "_impound = time;" \n "_cars = time;" \n "_objs = time;"/*%FSM</STATEINIT""">*/; precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/; class Links { /*%FSM<LINK "true">*/ class true { priority = 0.000000; to="Share__Work_load"; precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/; condition=/*%FSM<CONDITION""">*/"true"/*%FSM</CONDITION""">*/; action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/; }; /*%FSM</LINK>*/ }; }; /*%FSM</STATE>*/ /*%FSM<STATE "Share__Work_load">*/ class Share__Work_load { name = "Share__Work_load"; init = /*%FSM<STATEINIT""">*/""/*%FSM</STATEINIT""">*/; precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/; class Links { /*%FSM<LINK "Time_Check">*/ class Time_Check { priority = 0.000000; to="Delete_Dead_Cars"; precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/; condition=/*%FSM<CONDITION""">*/"((time - _cars) > (3 * 60))"/*%FSM</CONDITION""">*/; action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/; }; /*%FSM</LINK>*/ }; }; /*%FSM</STATE>*/ /*%FSM<STATE "Delete_Dead_Cars">*/ class Delete_Dead_Cars { name = "Delete_Dead_Cars"; init = /*%FSM<STATEINIT""">*/"{" \n " if(!alive _x) then {" \n "_dbInfo = _x getVariable[""dbInfo"",[]];" \n "if(count _dbInfo > 0) then {" \n "_uid = _dbInfo select 0;" \n "_plate = _dbInfo select 1;" \n "_insureSystem = _dbInfo select 2;" \n " diag_log "" destroy vehicule !"";" \n "diag_log format[""insureSystem = %1 "", _insureSystem];" \n "if(_insureSystem == 1) then " \n "{" \ N " diag_log "" Insured !"";" \n " diag_log format[""insureSystem = %1 "", _insureSystem];" \n " _query_0 = format[""UPDATE vehicles SET alive='1', insure='0', active='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate]; " \n " _query_0 spawn " \n "{" \ N " _thread_0 = [_this,1] call HC_fnc_asyncCall;" \n "};" \ N "}" \ N " else " \n "{" \ N " diag_log "" Not Insured !"";" \n " diag_log format[""insureSystem = %1 "", _insureSystem];" \n " _query = format[""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate]; " \n " _query spawn " \n "{" \ N " _thread = [_this,1] call HC_fnc_asyncCall;" \n "};" \ N "};" \ N "};" \ N "if(!isNil ""_x"" && {!isNull _x}) then {" \n "deleteVehicle _x;" \n "};" \ N "};" \ N "} foreach allMissionObjects ""LandVehicle"";" \n "" \ N "{" \ N " if(!alive _x) then {" \n "_dbInfo = _x getVariable[""dbInfo"",[]];" \n "if(count _dbInfo > 0) then {" \n "_uid = _dbInfo select 0;" \n "_plate = _dbInfo select 1;" \n "_insureSystem = _dbInfo select 2;" \n " diag_log "" destroy vehicule !"";" \n "diag_log format[""insureSystem = %1 "", _insureSystem];" \n "if(_insureSystem == 1) then " \n "{" \ N " diag_log "" Insured !"";" \n " diag_log format[""insureSystem = %1 "", _insureSystem];" \n " _query_0 = format[""UPDATE vehicles SET alive='1', insure='0', active='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate]; " \n " _query_0 spawn " \n "{" \ N " _thread_0 = [_this,1] call HC_fnc_asyncCall;" \n "};" \ N "}" \ N " else " \n "{" \ N " diag_log "" Not Insured !"";" \n " diag_log format[""insureSystem = %1 "", _insureSystem];" \n " _query = format[""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate]; " \n " _query spawn " \n "{" \ N " _thread = [_this,1] call HC_fnc_asyncCall;" \n "};" \ N "};" \ N "};" \ N "if(!isNil ""_x"" && {!isNull _x}) then {" \n "deleteVehicle _x;" \n "};" \ N "};" \ N "} foreach allMissionObjects ""Air"";" \n "" \ N "_cars = time;" \n "" \ N "//Group cleanup." \n "{" \ N " if(count units _x == 0 && local _x) then {" \n "deleteGroup _x;" \n "};" \ N "} foreach allGroups;"/*%FSM</STATEINIT""">*/; precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/; class Links { /*%FSM<LINK "true">*/ class true { priority = 0.000000; to="Share__Work_load"; precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/; condition=/*%FSM<CONDITION""">*/"true"/*%FSM</CONDITION""">*/; action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/; }; /*%FSM</LINK>*/ }; }; /*%FSM</STATE>*/ }; initState="init"; finalStates[] = { }; }; /*%FSM</COMPILE>*/ In functions>systems>fn_getVehicles.sqf: Replace this: _query = format["SELECT id, side, classname, type, pid, alive, active, plate, color, inventory, gear, fuel, damage, blacklist FROM vehicles WHERE id='%1' AND pid='%2'",_vid,_pid]; With this: _query = format["SELECT id, side, classname, type, pid, alive, active, plate, color, insure FROM vehicles WHERE pid='%1' AND alive='1' AND active='0' AND side='%2' AND type='%3'",_pid,_side,_type]; Run this query in your SQL Database: ALTER TABLE vehicles ADD insure INT(1) NOT NULL DEFAULT '0'; Done!
  13. 4 likes
    Managed to fix the .FSM error, /*%FSM<COMPILE "C:\Program Files (x86)\Bohemia Interactive\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, Server-Side Cleanup">*/ /*%FSM<HEAD>*/ /* item0[] = {"init",0,250,-62.908096,-391.651611,27.091887,-341.651672,0.000000,"init"}; item1[] = {"true",8,218,-62.976639,-315.185364,27.023363,-265.185364,0.000000,"true"}; item2[] = {"Share__Work_load",2,250,-64.183350,-224.681931,25.816656,-174.681931,0.000000,"Share " \n "Work-load"}; item3[] = {"Continue__",4,218,-220.591476,74.216980,-130.591476,124.216980,0.000000,"" \n "" \n "Continue" \n "" \n ""}; item4[] = {"Time_Check",4,218,-219.425827,-133.310532,-129.425964,-83.310455,0.000000,"Time Check"}; item5[] = {"Delete_Dead_Cars",2,4346,-220.186951,-29.248400,-130.187195,20.751413,0.000000,"Delete" \n "Dead" \n "Cars"}; item6[] = {"",7,210,-312.538239,95.295059,-304.538239,103.295059,0.000000,""}; item7[] = {"",7,210,-312.798218,-204.081940,-304.798218,-196.081940,0.000000,""}; item8[] = {"End_Cleanup_",1,250,-64.828239,87.581070,25.171984,137.581238,0.000000,"" \n "End Cleanup" \n ""}; item9[] = {"Check_for_HC_",4,218,-65.059021,-30.047342,24.941008,19.952658,0.000000,"" \n "Check for HC" \n ""}; link0[] = {0,1}; link1[] = {1,2}; link2[] = {2,4}; link3[] = {3,6}; link4[] = {4,5}; link5[] = {5,3}; link6[] = {5,9}; link7[] = {6,7}; link8[] = {7,2}; link9[] = {9,8}; globals[] = {0.000000,0,0,0,0,640,480,1,53,6316128,1,-481.887177,425.726196,554.522583,-436.926575,170,901,1}; window[] = {0,-1,-1,-32000,-32000,1065,104,1468,104,1,188}; *//*%FSM</HEAD>*/ class FSM { fsmName = "Server-Side Cleanup"; class States { /*%FSM<STATE "init">*/ class init { name = "init"; init = /*%FSM<STATEINIT""">*/"private [""_impound"",""_cars"",""_objs"",""_totCars"",""_thread""];" \n "_impound = time;" \n "_cars = time;" \n "_objs = time;" \n "cleanupFSM setFSMVariable [""stopfsm"",false];"/*%FSM</STATEINIT""">*/; precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/; class Links { /*%FSM<LINK "true">*/ class true { priority = 0.000000; to="Share__Work_load"; precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/; condition=/*%FSM<CONDITION""">*/"true"/*%FSM</CONDITION""">*/; action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/; }; /*%FSM</LINK>*/ }; }; /*%FSM</STATE>*/ /*%FSM<STATE "Share__Work_load">*/ class Share__Work_load { name = "Share__Work_load"; init = /*%FSM<STATEINIT""">*/""/*%FSM</STATEINIT""">*/; precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/; class Links { /*%FSM<LINK "Time_Check">*/ class Time_Check { priority = 0.000000; to="Delete_Dead_Cars"; precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/; condition=/*%FSM<CONDITION""">*/"((time - _cars) > (3 * 60))"/*%FSM</CONDITION""">*/; action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/; }; /*%FSM</LINK>*/ }; }; /*%FSM</STATE>*/ /*%FSM<STATE "Delete_Dead_Cars">*/ class Delete_Dead_Cars { name = "Delete_Dead_Cars"; init = /*%FSM<STATEINIT""">*/"{" \n " if (!alive _x) then {" \n " _dbInfo = _x getVariable [""dbInfo"",[]];" \n " if (count _dbInfo > 0) then {" \n " _uid = _dbInfo select 0;" \n " _plate = _dbInfo select 1;" \n " _insureSystem = _dbInfo select 2;" \n " diag_log "" destroy vehicle !"";" \n " diag_log format[""insureSystem = %1 "", _insureSystem];" \n " if(_insureSystem == 1) then " \n " { diag_log "" Insured !"";" \n " diag_log format[""insureSystem = %1 "", _insureSystem];" \n "" \n " _query_0 = format [""UPDATE vehicles SET alive='1', insure='0', active='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate];" \n " _query_0 spawn {" \n " " \n " _thread = [_this,1] call DB_fnc_asyncCall;" \n " };" \n " } else {" \n " diag_log "" Not insured !"";" \n " diag_log format[""insureSystem = %1 "", _insureSystem];" \n " _query = format[""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate]; " \n " _query spawn {" \n " _thread = [_this,1] call DB_fnc_asyncCall;" \n " };" \n " };" \n " if (!isNil ""_x"" && {!isNull _x}) then {" \n " deleteVehicle _x;" \n " };" \n " };" \n "};" \n "} forEach allMissionObjects ""LandVehicle"";" \n "" \n "{" \n " if (!alive _x) then {" \n " _dbInfo = _x getVariable [""dbInfo"",[]];" \n " if (count _dbInfo > 0) then {" \n " _uid = _dbInfo select 0;" \n " _plate = _dbInfo select 1;" \n " _insureSystem = _dbInfo select 2;" \n " diag_log "" destroy vehicle !"";" \n " diag_log format[""insureSystem = %1 "", _insureSystem];" \n " if(_insureSystem == 1) then" \n " { diag_log "" Insured !"";" \n " diag_log format[""insureSystem = %1 "", _insureSystem];" \n " _query_0 = format [""UPDATE vehicles SET alive='1', insure='0', active='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate];" \n " _query_0 spawn {" \n " " \n " _thread = [_this,1] call DB_fnc_asyncCall;" \n " };} else { " \n " diag_log "" Not Insured !"";" \n " diag_log format[""insureSystem = %1 "", _insureSystem];" \n " _query = format[""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate]; " \n " _query spawn {" \n " _thread = [_this,1] call DB_fnc_asyncCall;" \n " };" \n " };" \n " };" \n " if (!isNil ""_x"" && {!isNull _x}) then {" \n " deleteVehicle _x;" \n " };" \n " };" \n "} forEach allMissionObjects ""Air"";" \n "_cars = time;" \n "" \n "//Group cleanup." \n "{" \n " if (units _x isEqualTo [] && local _x) then {" \n " deleteGroup _x;" \n " };" \n "} forEach allGroups;"/*%FSM</STATEINIT""">*/; precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/; class Links { /*%FSM<LINK "Check_for_HC_">*/ class Check_for_HC_ { priority = 0.000000; to="End_Cleanup_"; precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/; condition=/*%FSM<CONDITION""">*/"cleanupFSM getFSMVariable ""stopfsm"""/*%FSM</CONDITION""">*/; action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/; }; /*%FSM</LINK>*/ /*%FSM<LINK "Continue__">*/ class Continue__ { priority = 0.000000; to="Share__Work_load"; precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/; condition=/*%FSM<CONDITION""">*/"!(cleanupFSM getFSMVariable ""stopfsm"")"/*%FSM</CONDITION""">*/; action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/; }; /*%FSM</LINK>*/ }; }; /*%FSM</STATE>*/ /*%FSM<STATE "End_Cleanup_">*/ class End_Cleanup_ { name = "End_Cleanup_"; init = /*%FSM<STATEINIT""">*/""/*%FSM</STATEINIT""">*/; precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/; class Links { }; }; /*%FSM</STATE>*/ }; initState="init"; finalStates[] = { "End_Cleanup_", }; }; /*%FSM</COMPILE>*/
  14. 3 likes
    A tutorial by: @Fuel MISSION SIDE Step 1 Create a new file in core>>gangs called fn_areaCapture.sqf and paste this #include "..\..\script_macros.hpp" /* File: fn_areaCapture.sqf Author: Fuel RebornRoleplay.com Description: checks the area for gangs or police before allowing you to capture an area */ private["_gangNum","_gName","_group","_area","_nil","_pos","_xname","_text","_action","_cpRate","_cP","_nearUnits","_areaContested","_progressBar","_title","_titleText","_ui"]; _area = getpos player nearestObject "Flag_Red_F"; //finds the flag _group = _area getVariable ["gangOwner",grpNull]; //gets the owner of the flag _xname = ""; //setup for popo name _nearUnits = _area nearEntities ["Man",500]; //searches area for players _areaContested = false; //sets the area to not contested if ((player distance _area) > 10) exitWith { hint "You must be closer to the flag to capture this area!"; }; //too far away /* ######################################### # The Police Capture System # ######################################### */ if (playerside isEqualTo west) exitWith { //inform the server the police are trying to capture it. [[0,1],"STR_GNOTF_CaptureAreaAttemptPopo",true,[name player]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; //set the cp rate if (!isNull _group) then { _cpRate = 0.0045; } else { _cpRate = 0.0075; }; //Police officer checks { //check for other members of same side if ((isPlayer _x) && (_x != player) && (side _x == west)) then { _areaContested = false; }; //checks for rebels if ((isPlayer _x) && (_x != player) && (side _x == civilian)) then { _areaContested = true; _xname = "Rebels"; }; //closes the capture if (_areaContested && _xname isEqualTo "Rebels") then { hint "Rebels are nearby!\nGet rid of them first!"; }; } forEach _nearUnits; //exit if contested if (_areaContested) exitWith {}; //Setup our progress bar. disableSerialization; _title = localize "STR_GNOTF_CapturingArea"; 5 cutRsc ["life_progress","PLAIN"]; _ui = uiNamespace getVariable "life_progress"; _progressBar = _ui displayCtrl 38201; _titleText = _ui displayCtrl 38202; _titleText ctrlSetText format["%2 (1%1)...","%",_title]; _progressBar progressSetPosition 0.01; _cP = 0.01; if (!(_areaContested)) then { for "_i" from 0 to 1 step 0 do { sleep 3; //police capture time * 100 _cP = _cP + _cpRate; _progressBar progressSetPosition _cP; _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; //sets the area to incapture _area setVariable ["inCapture",true,true]; //interuption checks if (_cP >= 1 || !alive player) exitWith {_area setVariable ["inCapture",false,true];}; if (player distance _area > 100) exitWith {_area setVariable ["inCapture",false,true];}; //how far they can go from the hideout while capturing if (_areaContested) exitWith {hint "Area Contested";}; //Future testing if (life_istazed) exitWith {_area setVariable ["inCapture",false,true];}; //Tazed if (life_isknocked) exitWith {_area setVariable ["inCapture",false,true];}; //Knocked if (life_interrupted) exitWith {_area setVariable ["inCapture",false,true];}; //interupted }; if (player distance _area > 100) exitWith {_area setVariable ["inCapture",false,true];}; //how far they can go from the hideout while capturing }; //Kill the UI display and check for various states 5 cutText ["","PLAIN"]; if (player distance _area > 100) exitWith {_area setVariable ["inCapture",false,true];}; //how far they can go from the hideout while capturing if (!alive player || life_istazed || life_isknocked) exitWith {life_action_inUse = false;_area setVariable ["inCapture",false,true];}; //knocked out or tazed revert state if (player getVariable["restrained",false]) exitWith {life_action_inUse = false;_area setVariable ["inCapture",false,true];}; //restrained revert state if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_GNOTF_CaptureCancel","PLAIN"]; life_action_inUse = false;_area setVariable ["inCapture",false,true];}; //interupted revert state life_action_inUse = false; titleText[localize "STR_GNOTF_CapturedArea","PLAIN"]; //marker system _gangNum = _area getVariable ["gangNum", ""]; _gName = group player getVariable "gang_name"; _pText = format["Neutralized Area"]; if (_gangNum == "Gang_Area_1") then { "gang_cap_1" setMarkerText _pText; }; if (_gangNum == "Gang_Area_2") then { "gang_cap_2" setMarkerText _pText; }; if (_gangNum == "Gang_Area_3") then { "gang_cap_3" setMarkerText _pText; }; _area setVariable ["inCapture",false,true]; _area setVariable ["gangOwner",group player,true]; }; /* ############################################# # End Of Police Capture System # ############################################# */ /* ######################################### # The Rebel Capture System # ######################################### */ _area = getpos player nearestObject "Flag_Red_F"; //finds the flag _group = _area getVariable ["gangOwner",grpNull]; //gets the ownerr of the flag _xname = ""; //setup for popo name _nearUnits = _area nearEntities ["Man",500]; //searches area for players if (isNil {group player getVariable "gang_name"}) exitWith { hint "You must be in a gang to capture a gang area!"; }; //not in a gang if (_group isEqualTo group player) exitWith { hint "Your gang already has control over this area!"; }; //already own it if ((_area getVariable ["inCapture",FALSE])) exitWith {hint "Only one person shall capture at once!"; }; //stops 2 people capturing at the same time [[0,1],"STR_GNOTF_CaptureAreaAttempt",true,[name player,(group player) getVariable "gang_name"]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; //tells the server someone is trying to capture the outpost if (!isNull _group) then { _gangName = _group getVariable ["gang_name",""]; //gets the gang name //check if they want to capture someones elses area _action = [ format[localize "STR_GNOTF_AlreadygangControlled",_gangName], localize "STR_Gang_captuerr", localize "STR_Global_Yes", localize "STR_Global_No" ] call BIS_fnc_guiMessage; _cpRate = 0.0045; } else { _cpRate = 0.0075; }; //check if area is contested { //check for other members of same gang if ((isPlayer _x) && (_x != player) && (side _x == civilian) && (group _x == group player)) then { _areaContested = false; }; //check for other rebels if ((isPlayer _x) && (_x != player) && (side _x == civilian) && (!(group _x == group player))) then { _areaContested = true; }; //checks for cops if ((isPlayer _x) && (_x != player) && (side _x == west)) then { _areaContested = true; _xname = "Police Force"; }; //closes the capture if (_areaContested) exitWith { if (_xname isEqualTo "Police Force") then { hint "The Police Force are nearby!\nGet rid of them first!"; } else { hint "Other rebels are nearby!\nGet rid of them first!"; }; }; } forEach _nearUnits; //exit if contested if (_areaContested) exitWith {}; //Setup our progress bar. disableSerialization; _title = localize "STR_GNOTF_CapturingArea"; 5 cutRsc ["life_progress","PLAIN"]; _ui = uiNamespace getVariable "life_progress"; _progressBar = _ui displayCtrl 38201; _titleText = _ui displayCtrl 38202; _titleText ctrlSetText format["%2 (1%1)...","%",_title]; _progressBar progressSetPosition 0.01; _cP = 0.01; if (!(_areaContested)) then { for "_i" from 0 to 1 step 0 do { sleep 3; //rebel capture time * 100 _cP = _cP + _cpRate; _progressBar progressSetPosition _cP; _titleText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_title]; //sets the area to incapture _area setVariable ["inCapture",true,true]; //interuption checks if (_cP >= 1 || !alive player) exitWith {_area setVariable ["inCapture",false,true];}; if (player distance _area > 100) exitWith {_area setVariable ["inCapture",false,true];}; //how far they can go from the hideout while capturing if (_areaContested) exitWith {hint "Area Contested";}; if (life_istazed) exitWith {_area setVariable ["inCapture",false,true];}; //Tazed if (life_isknocked) exitWith {_area setVariable ["inCapture",false,true];}; //Knocked if (life_interrupted) exitWith {_area setVariable ["inCapture",false,true];}; //interupted }; if (player distance _area > 100) exitWith {_area setVariable ["inCapture",false,true];}; //how far they can go from the hideout while capturing }; //Kill the UI display and check for various states 5 cutText ["","PLAIN"]; if (player distance _area > 100) exitWith {_area setVariable ["inCapture",false,true];}; //how far they can go from the hideout while capturing if (!alive player || life_istazed || life_isknocked) exitWith {life_action_inUse = false;_area setVariable ["inCapture",false,true];}; //knocked out or tazed revert state if (player getVariable["restrained",false]) exitWith {life_action_inUse = false;_area setVariable ["inCapture",false,true];}; //restrained revert state if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_GNOTF_CaptureCancel","PLAIN"]; life_action_inUse = false;_area setVariable ["inCapture",false,true];}; //interupted revert state life_action_inUse = false; titleText[localize "STR_GNOTF_CapturedArea","PLAIN"]; //marker system _gangNum = _area getVariable ["gangNum", ""]; _gName = group player getVariable "gang_name"; _Text = format["Area Controlled By %1",_gName]; if (_gangNum == "Gang_Area_1") then { "gang_cap_1" setMarkerText _text; }; if (_gangNum == "Gang_Area_2") then { "gang_cap_2" setMarkerText _text; }; if (_gangNum == "Gang_Area_3") then { "gang_cap_3" setMarkerText _text; }; //Tell the world [[0,1],"STR_GNOTF_CaptureAreaSuccess",true,[name player,(group player) getVariable "gang_name"]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; _area setVariable ["inCapture",false,true]; _area setVariable ["gangOwner",group player,true]; /* ############################################# # End Of The Rebel Capture System # ############################################# */ Step 2 then open Functions.hpp and paste the below inside of core/gangs class areaCapture {}; Step 3 This is the funcky part, you need to go into the map editor and setup 3 map locations Location 1 place a "Flag_Red_F" note down the position information of the flag (it will be needed later) the init of the flag should be: this allowDamage false; this enableSimulation false; this setVariable ["gangNum","Gang_Area_1", true]; place a marker on the flags position called: "gang_cap_1" The marker test should be: "Uncontrolled Area" Location 2 place a "Flag_Red_F" note down the position information of the flag (it will be needed later) the init of the flag should be: this allowDamage false; this enableSimulation false; this setVariable ["gangNum","Gang_Area_2", true]; place a marker on the flags position called: "gang_cap_2" The marker test should be: "Uncontrolled Area" Location 3 place a "Flag_Red_F" note down the position information of the flag (it will be needed later) the init of the flag should be: this allowDamage false; this enableSimulation false; this setVariable ["gangNum","Gang_Area_3", true]; place a marker on the flags position called: "gang_cap_3" The marker test should be: "Uncontrolled Area" I also suggest placing a 500m circle around the area so people know its a redzone but thats personal preference. Step 4 Open up your stringtable.xml and add: <Key ID="STR_GNOTF_CaptureAreaAttemptPopo"> <Original>%1 and the police are trying to neutralize an area!</Original> </Key> <Key ID="STR_GNOTF_CapturingArea"> <Original>Claiming Area</Original> </Key> <Key ID="STR_GNOTF_CapturedArea"> <Original>Area has been captured.</Original> </Key> <Key ID="STR_Gang_captuerr"> <Original>Capture Area</Original> </Key> <Key ID="STR_GNOTF_CaptureAreaSuccess"> <Original>%1 and his gang: %2 - have claimed an area!</Original> </Key> Step 5 open up fn_setupActuons.sqf and paste the below inside west and civilian //Gang life_actions = life_actions + [player addAction["<t color='#FF0000'>Capture Gang Location</t>",life_fnc_areaCapture,"",0,false,false,"",' ((typeOf cursorTarget) == "Flag_Red_F") ']]; SERVER SIDE Step 6 create a new file in life_server>>functions>>gang called fn_gangCash.sqf and paste in it the below: #include "\life_server\script_macros.hpp" /* File: fn_gangCash.sqf Author: Fuel RebornRoleplay.com Description: checks the gang areas, then rewards the gang if they own them */ /* ######################### # north outpost # ######################### */ //gets the flag locations _area = [4870.743,21934.35,0] nearestObject "Flag_Red_F"; //gets the gang names of the flag owners _owner = _area getVariable ["gangOwner",grpNull]; //get the gang funds _gFund = _owner getVariable ["gang_bank",0]; //set the new gang funds _owner setVariable ["gang_bank",round(_gFund+((count playableUnits)*2000)),true]; //push gang funds to DB [1,_owner] call TON_fnc_updateGang; /* ######################### # south pen outpost # ######################### */ //gets the flag locations _area2 = [11207.171,8699.596,0] nearestObject "Flag_Red_F"; //gets the gang names of the flag owners _owner = _area2 getVariable ["gangOwner",grpNull]; //get the gang funds _gFund = _owner getVariable ["gang_bank",0]; //set the new gang funds _owner setVariable ["gang_bank",round(_gFund+((count playableUnits)*2000)),true]; //push gang funds to DB [1,_owner] call TON_fnc_updateGang; /* ######################### # east outpost # ######################### */ //gets the flag locations _area3 = [20079.65,6744.436,0] nearestObject "Flag_Red_F"; //gets the gang names of the flag owners _owner = _area3 getVariable ["gangOwner",grpNull]; //get the gang funds _gFund = _owner getVariable ["gang_bank",0]; //set the new gang funds _owner setVariable ["gang_bank",round(_gFund+((count playableUnits)*2000)),true]; //push gang funds to DB [1,_owner] call TON_fnc_updateGang; //time between scripts Sleep 900; [] spawn TON_fnc_gangCash; Step 7 Now the locations of the flags saved earlier needs to be put in the above script in the obvious places. Step 8 Open Config.cpp and add the below inside of "\life_server\Functions\Gangs" class gangCash {}; Step 9 now open the server init.sqf and underneath [] spawn TON_fnc_initHouses; paste the below: [] spawn TON_fnc_gangCash; Annnnnd you're done, let me know if anything is missing or wrong, thanks to Fuel for letting me post this FULL credit goes to him, I take ZERO credit for anything in the tutorial. And if you think that I posted this without his permission, then here you go https://gyazo.com/5b31e2e3a90da8054c03910311418a59
  15. 3 likes
  16. 3 likes
    Advanced Handcuff's & Key's Hello everyone, this is my first time making a script and releasing it to the public Make it so cops need to buy handcuffs and keys from the store to be able to restrain and un restrain players , Just a easy thing to add what can bring alot of rp. Also this took me around 10 minutes to make and there might be a better way but i'm still a noob so no hate please, And if i missed something or done something wrong please comment it below and i will update it Icons will be provided if needed (there not the best:P *Change Log* - Fixed a error with Config_Vitems -Added Icons ------------------Step 1----------------------- Head over to your fn_restrainAction.sqf Under if (player isEqualTo _unit) exitWith {}; Add: if(!([false,"handcuff",1] call life_fnc_handleInv)) exitWith { hint "You dont have Handcuffs"; }; [true,"handcuff",1] call life_fnc_handleInv; //Remove this if you don't want it to give the handcuffs back after restraining. (I added it because IRL you would get the cuffs back after taking them off....) --------------------------Step 2----------------------------- Head over to your fn_unrestrain.sqf Under : _unit = param [0,objNull,[objNull]]; Add : if(!([false,"keys",1] call life_fnc_handleInv)) exitWith { hint "You dont have Handcuff key's"; }; [true,"keys",1] call life_fnc_handleInv; // Remove if you want the keys a one time use. ----------------------------------Step 3---------------------------------- Head over to your Config_Vitems.hpp And under class goldbar add class handcuffs { variable = "handcuffs"; displayName = "STR_Item_lol"; weight = 1; buyPrice = 25; sellPrice = -1; illegal = false; edible = -1; icon = "icons\cuffs.paa"; }; class keys { variable = "keys"; displayName = "STR_Item_Keys"; weight = 1; buyPrice = 25; sellPrice = -1; illegal = false; edible = -1; icon = "icons\icon_keys.paa"; }; Then find class cop and add : "handcuff","keys" ------------------------------Step 4------------------- Then head over to your stringtable and add </Key> <Key ID="STR_Item_lol"> //Lol because i was cba and in a rush lol , change it if you must <Original>Handcuff's</Original> <Czech>Handcuff's</Czech> </Key> <Key ID="STR_Item_key"> <Original>Handcuff Key's</Original> <Czech>Handcuff Key's</Czech> </Key> Icons if you don't have any : (Must add the icons to your icon folder) icon_keys.paa cuffs.paa
  17. 3 likes
  18. 3 likes
  19. 3 likes
    This is a simple guide on how to add the feature of having new civilians spawn with hats, backpacks, vests, etc. It's extremely simple. 1. Go to fn_civLoadout.sqf 2. Open it, replace it with this, or view the code below and make changes where necessary: /* File: fn_civLoadout.sqf Author: Tobias 'Xetoxyc' Sittenauer Edited by Repentz to add custom clothing Description: Loads the civs out with the default gear, with randomized clothing / */ private ["_handle"]; _handle = [] spawn life_fnc_stripDownPlayer; waitUntil {scriptDone _handle}; _clothings = ["U_C_Poloshirt_blue","U_C_Poloshirt_burgundy","U_C_Poloshirt_stripped","U_C_Poloshirt_tricolour","U_C_Poloshirt_salmon","U_C_Poloshirt_redwhite","U_C_Commoner1_1"]; /* Start Repentz */ _repentzHat = ["H_Booniehat_dirty","H_Booniehat_grn","H_Cap_blu"]; _repentzBackpack = ["B_TacticalPack_blk","B_Kitbag_rgr"]; _repentzVest = ["V_Press_F","V_I_G_resistanceLeader_F"]; player addHeadgear (selectRandom _repentzHat); player addBackpack (selectRandom _repentzBackpack); player addVest (selectRandom _repentzVest); /* End Repentz */ player addUniform (selectRandom _clothings); /* ITEMS */ player linkItem "ItemMap"; player linkItem "ItemCompass"; [] call life_fnc_playerSkins; [] call life_fnc_saveGear; You can add as many classnames as you want to the variables for example ,"H_Cap_blu","new classname of hat"
  20. 3 likes
    Tell us about yourself: Hello, I am Rodriguez. I am an outstanding person, well that sounds conceded, but I love to have fun, I love talking to people, and of course i'm always willing to help those who need it. I am somewhat a serious person, however I enjoy having fun at times too. I've been in the Arma scene for quite a while, I started playing DayZ then I went into Arma 3 Roleplay. I've always had an addiction to owning servers, starting with Minecraft and Garry's Mod to Arma 3 Life servers & DayZ Standalone servers. With owning servers, required me to learn how to develop servers, script, and how to manage a community. Also, owning servers really opened my eyes on how to be mature and appropriate across the internet. With Arma 3 servers, I have always owned modded life servers, which allowed me to practically customize anything I wanted, which is why I loved modded Arma 3 Life. One of the main reasons I enjoyed owning servers, was also the ability to allow people to meet and help people in any way I can. Which is why most communities I play on, I try to become staff or somewhat helpful so I return the favor. What's your experience with SQF and SQL languages, or other sorts of Arma related development? I'm going to be straight froward, i'm not Albert Einstein when it comes to SQF and SQL, however I do have knowledge about the topic. I defiantly have enough capability to help people, fix various problems, and manage server difficulties. I believe if I dedicated myself, I could create a cool & creative script. Why do you want to be a Helper? I would like to become helper because I feel that the position would be great for someone like me. With the position, I would be dedicating myself to helping people more then I already am. I've always wanted to help with AltisLifeRPG since I joined in 2016, and now with the possibility of the position, I feel I can pursue it. My primary mission is to spread positivity throughout the forums, help people, and be a great addition to the helper team. What can you bring to the community? I can bring new, detailed support towards players in the community. I can also ensure that I bring an extremely helpful addition to AltisLifeRPG. I would try to get rid of any toxicity on the forums and pursue to make it a positive & helpful forums for support for any player. I will make AltisLifeRPG better then it already is. If you were to become a helper, would a moderator position be appealing to you as well in the future? Yes of course, anything to be more helpful towards the community.
  21. 3 likes
    Author: ScarsoLP Post From: Click Me Step One: Create a file in the functions folder called fn_initPayChecks.sqf and then copy and paste the code below. #include "..\..\script_macros.hpp" /* File: fn_initPayChecks.sqf Author: ScarsoLP Description: Changes The Player(s) paycheck depending on what rank/level they are in the Police/NHS/Donator. Also changes the palyer(s) paycheck depending on what licenses they have. */ /* Changes The Paycheck Depending On Levels */ switch (playerSide) do { case west: { switch(FETCH_CONST(life_coplevel)) do { case 0: {life_paycheck = life_paycheck + 0;}; case 1: {life_paycheck = life_paycheck + 2000;}; case 2: {life_paycheck = life_paycheck + 2500;}; case 3: {life_paycheck = life_paycheck + 3000;}; case 4: {life_paycheck = life_paycheck + 3500;}; case 5: {life_paycheck = life_paycheck + 4000;}; case 6: {life_paycheck = life_paycheck + 4500;}; case 7: {life_paycheck = life_paycheck + 5000;}; }; switch(FETCH_CONST(life_donorlevel)) do { case 0: {life_paycheck = life_paycheck + 0;}; case 1: {life_paycheck = life_paycheck + 2000;}; case 2: {life_paycheck = life_paycheck + 2500;}; case 3: {life_paycheck = life_paycheck + 3000;}; case 4: {life_paycheck = life_paycheck + 3500;}; case 5: {life_paycheck = life_paycheck + 4000;}; }; }; case independent: { switch(FETCH_CONST(life_mediclevel)) do { case 0: {life_paycheck = life_paycheck + 0;}; case 1: {life_paycheck = life_paycheck + 2000;}; case 2: {life_paycheck = life_paycheck + 2500;}; case 3: {life_paycheck = life_paycheck + 3000;}; case 4: {life_paycheck = life_paycheck + 3500;}; case 5: {life_paycheck = life_paycheck + 4000;}; }; switch(FETCH_CONST(life_donorlevel)) do { case 0: {life_paycheck = life_paycheck + 0;}; case 1: {life_paycheck = life_paycheck + 2000;}; case 2: {life_paycheck = life_paycheck + 2500;}; case 3: {life_paycheck = life_paycheck + 3000;}; case 4: {life_paycheck = life_paycheck + 3500;}; case 5: {life_paycheck = life_paycheck + 4000;}; }; }; case civilian: { switch(FETCH_CONST(life_donorlevel)) do { case 0: {life_paycheck = life_paycheck + 0;}; case 1: {life_paycheck = life_paycheck + 2000;}; case 2: {life_paycheck = life_paycheck + 2500;}; case 3: {life_paycheck = life_paycheck + 3000;}; case 4: {life_paycheck = life_paycheck + 3500;}; case 5: {life_paycheck = life_paycheck + 4000;}; }; }; }; Step Two: go to the Functions.hpp under class Functions add: class initPayChecks {}; Step Three: Add this call at the bottom in fn_initMedic.sqf, fn_initCop.sqf, fn_initCiv.sqf [] call life_fnc_initPayChecks; There is probably a better file to call for this but I have always had the call here so it will stay here. Now you can change the values in the script to fit what you would like and have a blast
  22. 3 likes
    Just bear with me while I vent for a sec. I understand this forum is for people to come and use others "creations" to further their own interests (server wise) as well as to get help with issues. But what really annoys me, and I mean REALLY annoys me; here's it straight up, the fact that a large percentage of people commenting on this tutorial who have had issues have not even attempted to fix the issues themselfs. And to be frank if you don't attemp to fix these issues yourself how are you expected to be able to run your own server let alone community? I will admit, I myself have not had invested enough time into learning a 'C' language to be able to completely understand the Arma code variant. So listen or don't listen to me, your choice. Here's my two cents for all it's worth. You are wasting your money on sever hosting and more importantly wasting your time if you are going to solely rely on getting scripts from community forums. Don't take that the wrong way this is a great space to get ideas, collaborate and seek advice from other people. But as far as "DIY" goes most of you are hopeless. Here's a real world explanation; I wouldn't employ most of you in a workplace for one simple reason. You're incompetent, useless (excuse my language here) wankers for the most part. Work it out yourselves, it's not that complicated, put the effort in now and reap the rewards later. I made sure that my code worked before I posted it, I did it on 4.4r4 and I may have missed something in the tutorial I don't know. But I went and followed my OWN tutorial and installed it on a fresh mission file before posting to make sure it worked. If there is something wrong with it WORK IT OUT! I'm happy to help people get started on things but I'm not going to hold your hand all the way. If anyone took offence to this, I'm not sorry. And quite frankly if you did take offence to this. Maybe your the issue, think about that. For the people that put effort in, give yourself a pat on the back, you deserve it. For all the people who post tutorials on forums for others to use good on you. For the people who moderate and admin these sites, great job. I sincerely mean that, I really do. P.S I'm not going to respond to any further comments about this. I feel sorry for anyone who is too incapable and ignorant to accept my words as they are; make sure you go forth in life and make nothing of yourselfs. Cheers, David
  23. 3 likes
    infiSTAR_config.sqf /* The following 3 options can be disabled by putting the value to -1. For example "_TGV = -1;" */ /* Terrain Grid Value */ _TGV = -1; /* 50, 25, 12.5 */ /* if set to 50 grass will be very low for better client FPS.. default is 25 ~35 is good performance and grass :) */ /* ViewDistance Value */ _VDV = -1; /* ObjectViewDistance */ _VOV = -1;
  24. 3 likes
    Ok i fixed my issue with the market menu not loading, basically in the guide on the github their was a step missing 5. now open your CfgRemoteExec.hpp and paste this right below the server functions F(TON_fnc_playerLogged,SERVER) //DynMarket F(TON_fnc_getUpdate,SERVER) //DynMarket F(TON_fnc_changePrice, SERVER) //DynMarket F(life_fnc_update,CLIENT) //DynMarket
  25. 2 likes
    New Cell Phone & Player Menu Go to icons folder and create a new folder called Phone, download the Zip folder and paste the icons there. https://www.altisliferpg.com/applications/core/interface/file/attachment.php?id=1136 Go to dialogs in your Mission File -- > and create a new file called smartphone.hpp class life_main_menu { idd = 2002; name= "life_main_menu"; movingEnable = 0; enableSimulation = 1; onLoad = ""; class controlsBackground { class Phoneframe: Life_RscPicture { idc = 1200; text = "Icons\Phone\Phone.paa"; x = 0.357136 * safezoneW + safezoneX; y = 0.225067 * safezoneH + safezoneY; w = 0.280802 * safezoneW; h = 0.527872 * safezoneH; }; }; class controls { class exitPhone: Life_RscButtonInvisible { idc = -1; x = 0.487214 * safezoneW + safezoneX; y = 0.69276 * safezoneH + safezoneY; w = 0.0232935 * safezoneW; h = 0.0469559 * safezoneH; onButtonClick = "closeDialog 1;"; tooltip = "Close your phone"; //--- ToDo: Localize; }; class PictureSettings: Life_RscPicture { idc = 1201; text = "Icons\Phone\settings.paa"; x = 0.440884 * safezoneW + safezoneX; y = 0.302048 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; }; class ButtonSettings: Life_RscButtonInvisible { idc = -1; x = 0.440884 * safezoneW + safezoneX; y = 0.302048 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; onButtonClick = "[] call life_fnc_settingsMenu;"; tooltip = "Settings Menu"; //--- ToDo: Localize; }; class PictureGang: Life_RscPicture { idc = 1202; text = "Icons\Phone\Gang.paa"; x = 0.485221 * safezoneW + safezoneX; y = 0.302048 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; }; class ButtonMyGang: Life_RscButtonInvisible { idc = 2011; x = 0.485221 * safezoneW + safezoneX; y = 0.302048 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; onButtonClick = "if (isNil ""life_action_gangInUse"") then {if (isNil {(group player) getVariable ""gang_owner""}) then {createDialog ""Life_Create_Gang_Diag"";} else {[] spawn life_fnc_gangMenu;};};"; tooltip = "Gang Menu"; //--- ToDo: Localize; }; class PictureKeys: Life_RscPicture { idc = 1203; text = "Icons\Phone\key.paa"; x = 0.529558 * safezoneW + safezoneX; y = 0.302048 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; }; class ButtonKeys: Life_RscButtonInvisible { idc = 2013; x = 0.529558 * safezoneW + safezoneX; y = 0.302048 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; onButtonClick = "createDialog ""Life_key_management"";"; tooltip = "Keys Managment"; //--- ToDo: Localize; }; class PictureSyncData: Life_RscPicture { idc = 1204; text = "Icons\Phone\memorycard.paa"; x = 0.440884 * safezoneW + safezoneX; y = 0.390027 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; }; class ButtonSyncData: Life_RscButtonInvisible { idc = -1; x = 0.440884 * safezoneW + safezoneX; y = 0.390027 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; onButtonClick = "[] call SOCK_fnc_syncData;"; tooltip = "Synchronize your data here"; //--- ToDo: Localize; }; class PictureAdminMenu: Life_RscPicture { idc = 1205; text = "Icons\Phone\security.paa"; x = 0.440884 * safezoneW + safezoneX; y = 0.565984 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; }; class ButtonAdminMenu: Life_RscButtonInvisible { idc = 2021; x = 0.440884 * safezoneW + safezoneX; y = 0.565984 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; onButtonClick = "closeDialog 0; createDialog ""life_admin_menu"";"; tooltip = "Open the admin menu here"; //--- ToDo: Localize; }; class PicturePlayerMenu: Life_RscPicture { idc = 1206; text = "Icons\Phone\PlayerMenu.paa"; x = 0.485221 * safezoneW + safezoneX; y = 0.390027 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; }; class ButtonPlayerMenu: Life_RscButtonInvisible { idc = 2411; x = 0.485221 * safezoneW + safezoneX; y = 0.390027 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; onButtonClick = "[] call life_fnc_p_openMenu"; tooltip = "Opens your inventory menu"; //--- ToDo: Localize; }; class PictureAuctionHouse: Life_RscPicture { idc = 1207; text = "Icons\Phone\cart.paa"; x = 0.529558 * safezoneW + safezoneX; y = 0.390027 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; }; class ButtonAuctions: Life_RscButtonInvisible { idc = 2407; x = 0.529558 * safezoneW + safezoneX; y = 0.390027 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; tooltip = "Opens a list of available auctions"; //--- ToDo: Localize; }; class PictureWantedList: Life_RscPicture { idc = 1208; text = "Icons\Phone\caution.paa"; x = 0.529558 * safezoneW + safezoneX; y = 0.478005 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; }; class ButtonWantedList: Life_RscButtonInvisible { idc = 2012; x = 0.529558 * safezoneW + safezoneX; y = 0.478005 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; OnButtonClick = "[] call life_fnc_wantedMenu"; tooltip = "View all the wanted people of altis"; //--- ToDo: Localize; }; class PictureCone: Life_RscPicture { idc = 1209; text = "Icons\Phone\cone.paa"; x = 0.485221 * safezoneW + safezoneX; y = 0.478005 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; }; class ButtonBarriers: Life_RscButtonInvisible { idc = 2409; x = 0.485221 * safezoneW + safezoneX; y = 0.478005 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; tooltip = "Menu to place barriers"; //--- ToDo: Localize; }; class PicturesMessages: Life_RscPicture { idc = 1210; text = "Icons\Phone\chat.paa"; x = 0.440884 * safezoneW + safezoneX; y = 0.478005 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; }; class ButtonMessages: Life_RscButtonInvisible { idc = 2014; onButtonClick = "createDialog ""Life_cell_phone"";"; x = 0.440884 * safezoneW + safezoneX; y = 0.478005 * safezoneH + safezoneY; w = 0.0295581 * safezoneW; h = 0.0549866 * safezoneH; tooltip = "Opens the menu to compose messages"; //--- ToDo: Localize; }; }; }; Go to dialogs --> and then open the file MasterHandler and add this to the end: #include "smartphone.hpp" Afterwards go and find the file player_inv.hpp and replace it with the content underneath: /* File: player_inv.hpp */ #include "player_sys.sqf" class playerSettings { idd = playersys_DIALOG; movingEnable = 1; enableSimulation = 1; class controlsBackground { class Life_RscTitleBackground: Life_RscText { idc = -1; x = 0.303077 * safezoneW + safezoneX; y = 0.335 * safezoneH + safezoneY; w = 0.393846 * safezoneW; h = 0.022 * safezoneH; colorBackground[] = {0,0,0,0.9}; }; class MainBackground: Life_RscText { idc = -1; x = 0.303077 * safezoneW + safezoneX; y = 0.357 * safezoneH + safezoneY; w = 0.393846 * safezoneW; h = 0.33 * safezoneH; colorBackground[] = {0,0,0,0.7}; }; class Title: Life_RscTitle { idc = -1; text = "Player Menu"; //--- ToDo: Localize; x = 0.303077 * safezoneW + safezoneX; y = 0.335 * safezoneH + safezoneY; w = 0.315077 * safezoneW; h = 0.022 * safezoneH; colorText[] = {0.95,0.95,0.95,1}; }; class moneyStatusInfo: Life_RscStructuredText { idc = 2015; x = 0.314334 * safezoneW + safezoneX; y = 0.401003 * safezoneH + safezoneY; w = 0.118154 * safezoneW; h = 0.33 * safezoneH; }; class PlayersName: Title { idc = carry_weight; style = 1; x = 0.303077 * safezoneW + safezoneX; y = 0.335 * safezoneH + safezoneY; w = 0.393846 * safezoneW; h = 0.022 * safezoneH; colorText[] = {0.95,0.95,0.95,1}; }; }; class controls { class itemHeader: Life_RscText { idc = -1; text = "Current Items"; //--- ToDo: Localize; x = 0.547262 * safezoneW + safezoneX; y = 0.368 * safezoneH + safezoneY; w = 0.113231 * safezoneW; h = 0.022 * safezoneH; colorBackground[] = {0,0,0,0.9}; }; class licenseHeader: Life_RscText { idc = -1; text = "Licenses"; //--- ToDo: Localize; x = 0.411385 * safezoneW + safezoneX; y = 0.368 * safezoneH + safezoneY; w = 0.113231 * safezoneW; h = 0.022 * safezoneH; colorBackground[] = {0,0,0,0.9}; }; class moneySHeader: Life_RscText { idc = -1; text = "Money Stats"; //--- ToDo: Localize; x = 0.312923 * safezoneW + safezoneX; y = 0.368 * safezoneH + safezoneY; w = 0.0862524 * safezoneW; h = 0.022 * safezoneH; colorBackground[] = {0,0,0,0.9}; }; class itemList: Life_RscListBox { idc = 2005; x = 0.549231 * safezoneW + safezoneX; y = 0.401 * safezoneH + safezoneY; w = 0.108308 * safezoneW; h = 0.165 * safezoneH; }; class moneyEdit: Life_RscEdit { idc = 2018; text = "1"; //--- ToDo: Localize; x = 0.317846 * safezoneW + safezoneX; y = 0.467 * safezoneH + safezoneY; w = 0.0708924 * safezoneW; h = 0.0165 * safezoneH; }; class NearPlayers: Life_RscCombo { idc = 2022; x = 0.317846 * safezoneW + safezoneX; y = 0.5 * safezoneH + safezoneY; w = 0.0708924 * safezoneW; h = 0.0165 * safezoneH; }; class moneyDrop: Life_RscButtonMenu { idc = 2001; onButtonClick = "[] call life_fnc_giveMoney"; text = "Give"; //--- ToDo: Localize; x = 0.317846 * safezoneW + safezoneX; y = 0.533 * safezoneH + safezoneY; w = 0.0512 * safezoneW; h = 0.0198 * safezoneH; colorText[] = {1,1,1,1}; colorBackground[] = {0,0,0,0.9}; }; class itemEdit: Life_RscEdit { idc = 2010; text = "1"; //--- ToDo: Localize; x = 0.549231 * safezoneW + safezoneX; y = 0.5715 * safezoneH + safezoneY; w = 0.108308 * safezoneW; h = 0.022 * safezoneH; colorBackground[] = {0,0,0,0.9}; }; class iNearPlayers: Life_RscCombo { idc = 2023; x = 0.549231 * safezoneW + safezoneX; y = 0.599 * safezoneH + safezoneY; w = 0.108308 * safezoneW; h = 0.0165 * safezoneH; }; class DropButton: Life_RscButtonMenu { idc = 2002; onButtonClick = "[] call life_fnc_giveItem;"; text = "Give"; //--- ToDo: Localize; x = 0.623077 * safezoneW + safezoneX; y = 0.632 * safezoneH + safezoneY; w = 0.0541539 * safezoneW; h = 0.022 * safezoneH; colorText[] = {1,1,1,1}; colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])",0.5}; }; class UseButton: Life_RscButtonMenu { onButtonClick = "[] call life_fnc_useItem;"; idc = 1015; text = "Use"; //--- ToDo: Localize; x = 0.564 * safezoneW + safezoneX; y = 0.632 * safezoneH + safezoneY; w = 0.0541539 * safezoneW; h = 0.022 * safezoneH; colorText[] = {1,1,1,1}; colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])",0.5}; }; class RemoveButton: Life_RscButtonMenu { onButtonClick = "[] call life_fnc_removeItem;"; idc = 1016; text = "Remove"; //--- ToDo: Localize; x = 0.504923 * safezoneW + safezoneX; y = 0.632 * safezoneH + safezoneY; w = 0.0516923 * safezoneW; h = 0.022 * safezoneH; colorText[] = {1,1,1,1}; colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])",0.5}; }; class ButtonClose: Life_RscButtonMenu { onButtonClick = "closeDialog 0;"; idc = -1; text = "CLOSE"; //--- ToDo: Localize; x = 0.303077 * safezoneW + safezoneX; y = 0.665 * safezoneH + safezoneY; w = 0.0615385 * safezoneW; h = 0.022 * safezoneH; colorText[] = {1,1,1,1}; colorBackground[] = {0,0,0,0.8}; tooltip = "Close the Player Menu"; //--- ToDo: Localize; }; class FrameBorder1: Life_RscText { idc = -1; x = 0.303077 * safezoneW + safezoneX; y = 0.687 * safezoneH + safezoneY; w = 0.393846 * safezoneW; h = 0.0055 * safezoneH; colorBackground[] = {0,0,0,0.9}; }; class InfoButton: Life_RscButtonMenu { action = "<a href='http://a3globalgaming.co.uk/redirect.html'</a"; idc = 1020; text = "Teamspeak Server"; //--- ToDo: Localize; x = 0.381404 * safezoneW + safezoneX; y = 0.665005 * safezoneH + safezoneY; w = 0.0886155 * safezoneW; h = 0.022 * safezoneH; colorText[] = {1,1,1,1}; colorBackground[] = {0,0,0,0.8}; }; class InfoButtonWebsite: Life_RscButtonMenu { onButtonClick = ""; idc = 1021; text = "Our Website"; //--- ToDo: Localize; x = 0.463905 * safezoneW + safezoneX; y = 0.665005 * safezoneH + safezoneY; w = 0.0886155 * safezoneW; h = 0.022 * safezoneH; colorText[] = {1,1,1,1}; colorBackground[] = {0,0,0,0.8}; }; class Licenses_Menu: Life_RscControlsGroup { idc = -1; x = 0.413329 * safezoneW + safezoneX; y = 0.39963 * safezoneH + safezoneY; w = 0.110277 * safezoneW; h = 0.209 * safezoneH; class Controls { class Life_Licenses: Life_RscStructuredText { idc = 2014; sizeEx = 0.020; text = ""; x = 0; y = 0; w = 0.27; h = 0.65; }; }; }; }; }; Go to > Core\pmenu, and find the file fn_p_openMenu.sqf, Replace that file with the content underneath #include "..\..\script_macros.hpp" /* File: fn_p_openMenu.sqf Author: Bryan "Tonic" Boardwine Description: Opens the players virtual inventory menu */ if (!alive player) exitWith {}; //Prevent them from opening this for exploits while dead. createDialog "playerSettings"; disableSerialization; [] call life_fnc_p_updateMenu; In Core-->PMenu, create a new file called fn_openMainMenu.sqf #include "..\..\script_macros.hpp" /* File: fn_openMainMenu.sqf Author: Bryan "Tonic" Boardwine */ if(!alive player || dialog) exitWith { hint "You cannot open the Main Menu in your state"; }; createDialog "life_main_menu"; disableSerialization; switch (playerSide) do { case west: { ctrlShow[2011,false]; ctrlShow[1202,false] }; case civilian: { ctrlShow[2012,false]; ctrlShow[2409,false]; ctrlShow[1208,false]; ctrlShow[1209,false]; }; case independent: { ctrlShow[2012,false]; ctrlShow[2011,false]; }; }; if (FETCH_CONST(life_Adminlevel) < 1) then { ctrlShow[2021,false]; ctrlShow[1205,false]; }; Find the file Functions.hpp, in that file find the class Player_Menu, and add a new class class openMainMenu {}; Go to Core->Functions. And find the file fn_keyhandler.sqf - Open the file and find this case 21: { if (!_alt && !_ctrlKey && !dialog && !(player getVariable ["restrained",false]) && {!life_action_inUse}) then { [] call life_fnc_p_openMenu; }; }; Replace that with this: case 21: { if (!_alt && !_ctrlKey && !dialog && !(player getVariable ["restrained",false]) && {!life_action_inUse}) then { [] call life_fnc_openMainMenu; }; }; Go to dialogs and then common.hpp Find this class in common.hpp (Do not copy this) class Life_RscButtonMenu : Life_RscShortcutButton { idc = -1; type = 16; style = "0x02 + 0xC0"; default = 0; shadow = 0; x = 0; y = 0; w = 0.095589; h = 0.039216; animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)"; animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)"; animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; colorBackground[] = {0,0,0,0.8}; colorBackgroundFocused[] = {1,1,1,1}; colorBackground2[] = {0.75,0.75,0.75,1}; color[] = {1,1,1,1}; colorFocused[] = {0,0,0,1}; color2[] = {0,0,0,1}; colorText[] = {1,1,1,1}; colorDisabled[] = {1,1,1,0.25}; period = 1.2; periodFocus = 1.2; periodOver = 1.2; size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; tooltipColorText[] = {1,1,1,1}; tooltipColorBox[] = {1,1,1,1}; tooltipColorShade[] = {0,0,0,0.65}; class TextPos { left = "0.25 * (((safezoneW / safezoneH) min 1.2) / 40)"; top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; right = 0.005; bottom = 0.0; }; class Attributes { font = "RobotoCondensedLight"; color = "#E5E5E5"; align = "left"; shadow = "false"; }; class ShortcutPos { left = "(6.25 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005"; top = 0.005; w = 0.0225; h = 0.03; }; soundEnter[] = {"\A3\ui_f\data\sound\RscButtonMenu\soundEnter",0.09,1}; soundPush[] = {"\A3\ui_f\data\sound\RscButtonMenu\soundPush",0.09,1}; soundClick[] = {"\A3\ui_f\data\sound\RscButtonMenu\soundClick",0.09,1}; soundEscape[] = {"\A3\ui_f\data\sound\RscButtonMenu\soundEscape",0.09,1}; textureNoShortcut = ""; }; Add this part "AFTER" the Life_RscButtonMenu in Common.hpp class Life_RscButtonInvisible : Life_RscButtonMenu { animTextureNormal = "#(argb,8,8,3)color(1,1,1,0)"; animTextureDisabled = "#(argb,8,8,3)color(1,1,1,0)"; animTextureOver = "#(argb,8,8,3)color(1,1,1,0)"; animTextureFocused = "#(argb,8,8,3)color(1,1,1,0)"; animTexturePressed = "#(argb,8,8,3)color(1,1,1,0)"; animTextureDefault = "#(argb,8,8,3)color(1,1,1,0)"; colorBackground[] = {0, 0, 0, 0}; colorBackground2[] = {1, 1, 1, 0}; color[] = {1, 1, 1, 0}; color2[] = {1, 1, 1, 0}; colorText[] = {1, 1, 1, 0}; colorDisabled[] = {1, 1, 1, 0}; }; Phone.zip
  26. 2 likes
    Our Teamspeak Server: ts3rgc.com We currently have an Amazing Staff Team, Dedicated to keeping the server sociable and they will help you with any issues you may find. Our server has many custom scripts and we have many custom buildings and locations. if you would be Interested please downloads our mods with ArmaA3Sync The Repo for this is: ftp://136.144.156.199/.a3s/autoconfig Feel free to join the Teamspeak: ts3rgc.com Our Server Details are: 136.144.156.199:2302 The server resets are at: 4AM GMT 8AM GMT 12PM GMT 4PM GMT 8PM GMT 12AM GMT We hope that you can join our community and have fun but also have some good, serious role-play experiences.
  27. 2 likes
    Arma IP: s1.realityroleplaying.co.ukTeamspeak: ts.realityroleplaying.co.ukWebsite: http://realityroleplaying.co.uk/ Reality Roleplaying is an arma focused community aiming towards the top! On our server there is a lot of stuff too do to keep people of all factions entertained;You can either go on as Heisenberg and make tons of cash the illegal way, Weed, Cocaine, Heroin, Meth, LSD and in future Uranium you name it and then sell it making a big load of cash but at the same time risking getting caught by the police or rebels, if you prefer action you could always go down the path of robbing gas stations! Low risk and medium reward with an excellent chance of role play and combat. Or do legal stuff, mine copper, diamond, iron and slowly make yourself too the top and lower the risk of getting robbed and the police won't bother, if anything they could even assist you on your way!As always, you can join the government side and work as a NHS or Police Officer and work yourself up to be apart of SCO19! The police department also have a NPAS division which is currently a white listed license to ensure it's only in use for the best cops around, So if you dream is to be a police helicopter pilot this is your chance. The choice is yours to make.And if you feel like you just wanna take it easy, Just swing by the local Blue Moon Inn and buy yourself some moonshine and hangout in kavala square!Features:Re-done cities with custom buildings and props, reinforced rebel outpost, police checkpoint and even an abandoned gang outpost that will in future, become a white listed rebel zone.Persistant Gangs. You don't have too create a new gang every time you join the server. If you create your gang you keep it! (You can also get your very own gang channel in your teamspeak where only you and your gang members will have access too, Including a gang tag in teamspeak)Rebel Outposts where you can buy illegal guns, cars or choppers at the rebel outposts that is scattered in the red zone and capture it for your gang and protect it with your life! Other gangs will try too capture them so make sure you have tons of fire power to protect it and keep your gangs name on the map, proving you're the best around!Police Checkpoints, Most of the time it will be guarded by the police looking for illegal stuff. You can either try to take it from them or go ahead when there is no one at the checkpoint and capture it yourself with your gang. Tax people going through them and make some cash and also grow respect throughout the server.Custom Vehicle skins, have been implemented to the cars on our server. Everything from a race kitted hatchback sport too a SUV Ferrari and SCO19 cop skins! We also have a hugely dedicated staff team with tons of experience between them, a dedicated map, server and web developer to ensure that everything runs as smoothly as possible. I hope to see you all in game!
  28. 2 likes
    Credit to Entity for his Spawnmenu. I used his dialog coordinates for my GPS Window Difficulty: Easy Author: Tonic modified by Walkero0 MyLifeVersion: 5.0.0 I used Tonics Spawnprocedure to create a GPS System ("Markerfinder") Image *Update* 30.12.2016: Fixed some bugs. Added SetGPS Point: Executes a Taskdestination on the given MapPosition. Add to the bottom of config\Config_Master.hpp: #include "Config_GPSPoints.hpp" add in dialog\Masterhandler.hpp: #include "gpsSelection.hpp" add in Functions.hpp: class GPS { file = "core\gps"; class gpsMenu {}; class gpsPointCfg {}; class gpsPointSelected {}; class setgpsPoint {}; }; Add in player_inv.hpp: class ButtonGPSMenu: Life_RscButtonMenu { idc = -1; text = "$STR_PM_GPSMenu"; onButtonClick = "[] spawn life_fnc_gpsMenu"; x = 0.1 + (6.25 / 19.8) + (1 / 250 / (safezoneW / safezoneH)); y = 0.805; w = (6.25 / 40); h = (1 / 25); }; add to stringtable.xml: <Key ID="STR_PM_GPSMenu"> <Original>GPS Menu</Original> <Czech>Nabídka GPS</Czech> <Spanish>Menu GPS</Spanish> <Russian></Russian> <German>GPS Menü</German> <French>Menu GPS</French> <Italian>Menu GPS</Italian> <Portuguese>Menu GPS</Portuguese> <Polish>GPS Menu</Polish> </Key> <Key ID="STR_location_CSP"> <Original>Current GPS Point</Original> <Czech>Current GPS Point</Czech> <Spanish>Current GPS Point</Spanish> <Russian></Russian> <German>Aktueller GPSpunkt</German> <French>Current GPS Point</French> <Italian>Current GPS Point</Italian> <Portuguese>Current GPS Point</Portuguese> <Polish>Current GPS Point</Polish> </Key> <Key ID="STR_GPS_Title"> <Original>GPS Selection</Original> <Czech>GPS Selection</Czech> <Spanish>Selección de GPS</Spanish> <Russian></Russian> <German>GPS Auswahl</German> <French>Selection du GPS</French> <Italian>Selezione GPS</Italian> <Portuguese>Locais para Começar</Portuguese> <Polish>Wybierz punkt odrodzenia</Polish> </Key> <Key ID="STR_GPS_Finish"> <Original>You have arrived at your destination</Original> <Czech>Že jste přišel o svého cíle</Czech> <Spanish>Ha llegado un su objetivo</Spanish> <Russian></Russian> <German>Du bist an deinem Ziel angekommen!</German> <French>Vous êtes arrivé un votre objectif</French> <Italian>Sei arrivato un tuo obiettivo</Italian> <Portuguese>Você chegou a sua meta</Portuguese> <Polish>Po przyjeździe na swój cel</Polish> </Key> <Key ID="STR_Set_GPS"> <Original>set GPS Point</Original> <Czech>nastavit GPS bod</Czech> <Spanish>Establecer punto GPS</Spanish> <Russian></Russian> <German>Wegpunkt setzen</German> <French>Définir le point GPS</French> <Italian>set GPS Point</Italian> <Portuguese>Definir ponto GPS</Portuguese> <Polish>zadana GPS</Polish> </Key> <Key ID="STR_get_GPS"> <Original>Buy a GPS at Generalstore!</Original> <Czech>nastavit GPS bod</Czech> <Spanish>Comprar un GPS</Spanish> <Russian></Russian> <German>Kauf dir ein GPS</German> <French>Acheter un GPS</French> <Italian>Comprare un GPS</Italian> <Portuguese>Compre um GPS</Portuguese> <Polish>Kup GPS</Polish> </Key> Add these lines under /* Functions for everyone */ in your CfgRemoteExec.hpp F(BIS_fnc_settask,ANYONE) //GPS F(bis_fnc_deletetask,ANYONE) //GPS F(bis_fnc_settasklocal,ANYONE) //GPS Add this under Backend Variables in your configuration.sqf life_gps_point = ""; life_lastgps_point = ""; To delete the Task when you have arrived at the GPS Destination: add to missionfile\init.sqf: [] execVM "scripts\deletetask.sqf"; Add Files--> done. I really don't know if this is required: I added this to core\clientValidator to _vars: ,"life_lastgps_point","life_gps_point" Map Altis: If you use Altis Map change the class in config\Config_GPSPoints.hpp (line 13) to Altis: class Altis { and use this for every Side civ, cop, medic: class Kavala { displayName = "Kavala"; spawnMarker = "civ_spawn_1"; icon = "\a3\ui_f\data\map\MapControl\watertower_ca.paa"; conditions = ""; }; class Athira { displayName = "Athira"; spawnMarker = "civ_spawn_3"; icon = "\a3\ui_f\data\map\MapControl\watertower_ca.paa"; conditions = ""; }; class Pyrgos { displayName = "Pyrgos"; spawnMarker = "civ_spawn_2"; icon = "\a3\ui_f\data\map\MapControl\watertower_ca.paa"; conditions = ""; }; class Sofia { displayName = "Sofia"; spawnMarker = "civ_spawn_4"; icon = "\a3\ui_f\data\map\MapControl\watertower_ca.paa"; conditions = ""; }; instead of this: class Georgetown { displayName = "Georgetown"; gpsMarker = "civ_spawn_1"; icon = "\a3\ui_f\data\map\MapControl\watertower_ca.paa"; conditions = ""; }; class Balavu { displayName = "Balavu"; gpsMarker = "civ_spawn_3"; icon = "\a3\ui_f\data\map\MapControl\watertower_ca.paa"; conditions = ""; }; class Tuvanaka { displayName = "Tuvanaka"; gpsMarker = "civ_spawn_2"; icon = "\a3\ui_f\data\map\MapControl\watertower_ca.paa"; conditions = ""; }; class Lijnhaven { displayName = "Lijnhaven"; gpsMarker = "civ_spawn_4"; icon = "\a3\ui_f\data\map\MapControl\watertower_ca.paa"; conditions = ""; }; Please let me know if I made any mistakes. Have a look into the Config_GPSPoints.hpp to set your Markers correctly Files: GPS_system.rar
  29. 2 likes
    Don't forget to change [1] call SOCK_fnc_updatePartial; to [0] call SOCK_fnc_updatePartial; right underneath to save cash on hand rather than bank @SowIeDO
  30. 2 likes
    Those scripts are public, just look them up, ask for help in the appropriate section, not here.
  31. 2 likes
    To expand on what was said earlier, in this topic https://www.altisliferpg.com/topic/2709-the-independance-day/ We will be releasing official Altis Life server(s) in the next coming weeks, it will include many features and myself, @John Meiers and a couple of my friends will be working on it continuously. I'll list some of the features the server will have below: These are only some of the features, and we are only 3 weeks into development - A huge array of small changes and scripts to improve user experience and add new things to your experience - Advanced building system, build with new objects to add to your house for defense or decoration (adding in processing within housing or growing drugs soon) - Persistent ID system, since nametags will not be available you will use these ID's for roleplay - Skill system, the maverick skill system will be largely improved on to add much more to the server, including replacing licenses, shop requirements, and much more - Banking system with pins - Debit Cards - Hitman system - Jobs system which will be worked on to add more jobs continuously - Many usable items such as flashlights, gokarts, protest signs, airhorns, etc - Safezones which protect against damage and bullets - Vehicle insurance - Persistent vehicle mileage and fuel usage system - Rob able gas stations - Personal Death dialog that shows killers name, distance, weapon type, side, etc - Majority of maverick scripts used (shipwreck, skillsys, vehicle customs, restart events, speed cameras, convoy missions) - Crash site missions - Kavala bank (rob able) - Car radio system There's a lot of features not listed here, I will update this list when we launch, along with teaser previews and much more. If you'd like to see anything specific added to the server, please let us know below, thank you.
  32. 2 likes
    IMPORTANT! I have not tested the script but it should work! If you have problems with the script post it under the TUT. 1. Go to the description.ext under class RscTitles and add: #include "dialog\statusBar.hpp" 2. In the init.sqf you insert that: if(hasInterface) then{[] execVM "scripts\Status_Bar\init_statusBar.sqf"}; 3. Download the Statusbar folder and insert the files into the corresponding folder. Picture: Statusbar status_bar (2).zip
  33. 2 likes
    THE INDEPENDANCE DAY – public letter First of all, I would like to thank all the men and woman she will recognize herself ) for their contribution to the community website and the customization of the Framework. The purpose of this announcement is, among other things, to express my current and future vision of the website. My vision: First of all, for me, AltisLifeRPG.com is more than a community help website. It is a website that regroups extremely capable people that can achieve great things. A community with extraordinary intellectual and creative capacities. The community of Altis Life RPG is a leader and pioneer in terms of RP concept. Several future platforms will be influence and many have already been. It will forever influence RP gaming platforms to come, because our community is first and foremost RP enthusiasts. In context: Since its reopening, we have focused our energy at rebuilding content and to recreated a place where intellectual and creative people can come together to share and enrich the content of Altis Life RPG. We have been able to recreate the prior ambiance and even managed to bring it to another level. Initially, this site was considered the official forum representing the framework belonging to Tonic. Since then, the framework has abandoned by him. As for the intellectual rights, they were taken up by another group that cares about the continuity of its evolution and integrity, which is vital to me. The person possessing the rights has been, since the beginning, involve in different processes and is an extremely respectable person endowed with the best asset to take over this gem. Changes: In the coming months, you will see great change on our beloved website. Change that will allow the website to get out of its current format and to offer more to its users. Our current position is very limiting, as we are not the official site, but we impose ourselves and acts as if in the framework. It is now possible for us to spread our wings, fly higher and exit the current frames of the website. For me, this is a great news and a relief for those who wanted to execute a new concept that did not fit in the current vocation of the website. We have an extraordinary community and we should lead it into a more dynamic path than we are now. Lastly, my intention is to grab the attention of the users on other RP platform in order to always stay on the lookout for what happens at this level by means of the news review. Announcement: I officially announce that, in the coming months, the vocation of the website will remain the same, but with some additions and a broader role that will be listed below. By the same token, given disagreements on the vision, incompatibilities and the conditions of these, there will necessarily be changes of certain roles or even departure of some current members of our administration. It will be their decision if they do not to accept the new direction. Additions to come: • Various content development contests • Screen shot 1x per month that will serve as background (Wackbatt Idee) • Helper/recruitment section (encouraging members to become more involved) • Opening a Help section for mod servers • Opening a section mod (Content must belong to the author of the topic) • Opening several official servers that are playable (the website will promote them) • New forum attach to the actuel AltisLifeRPG.com one, for deserve all our playable RP server like Altis Life • and much more MoNtEcRiStO ©
  34. 2 likes
    Inside fn_setupEVH.sqf add the following line at the end of the file. New file: fn_hitMarker.sqf place this inside core\functions. So like Altis_Life.Altis\core\functions\hitmarker.sqf Inside description.ext under class RscTitles add the line below Inside common.hpp add base classes that are used for the hitmarker.hpp class. (JUST COPY AND PASTE AT END OF THE FILE). New File: hitmarker.hpp place this inside dialog. So like Altis_Life.Altis\dialog\hitmarker.hpp class Life_hitmarker { name = "Life_hitmarker"; idd=-1; movingEnable = 0; enableSimulation = 1; fadein = 0; fadeout = 0.2; duration = 0.2; controlsBackground[] = {"CtrlHitmarker"}; controls[] = {}; class CtrlHitmarker: RscPicture { idc = -1; type = 0; style = 2096; x = "safeZoneX + safeZoneW / 2 - 0.04"; y = "safeZoneY + safeZoneH / 2 - 0.04"; h = 0.08; w = 0.08; font = "RobotoCondensed"; sizeEx = 0; colorBackground[] = {0,0,0,0}; colorText[] = {1,1,1,1}; text = "textures\hitmarker.paa"; }; }; Inside MasterHandler.hpp add this line at the end of the file #include "hitmarker.hpp" Inside Functions.hpp under class Functions add the line Finally add the .paa image of the hitmarker that I've attached to this post to your textures folder so like below. mpmissions\Altis_Life.Altis\textures\hitmarker.paa The hitmarker might be a bit out of place if it is just fiddle around with the x and y values inside of hitmarker.hpp. hitmarker.paa
  35. 2 likes
    https://opgforums.000webhostapp.com/admin/upgrade/?sessionCheck=1 Nulled IPS, stay classy.
  36. 2 likes
    It was me
  37. 2 likes
    Please provid proof of that cyber bullying in my privat inbox in the next 24hrs or your false complain is gonna be delet. This is a free forum for provid helping you are free to use it or not. So provide the proof or I call the cyber police myself...
  38. 2 likes
    I think, the issue here is most likely that getMarkerPos always returns a position where the height = 0. https://community.bistudio.com/wiki/getMarkerPos For markers placed in the sea, this means that getMarkerPos returns a position on the sea floor, and so when distance from the player to the marker is calculated, that almost always exceeds the zone size limit. If you change fn_gather.sqf to use distance2D instead of distance, then I think that will solve your problem, however will also allow you to gather from anywhere under the oil rig, so you may also want to add: if (((getPosASL player) select 2) < 0) exitWith {}; to ensure that they're above sea level.
  39. 2 likes
    Le serveur Orion ferme ses porte temporairement pour un peaufinage poussée de la mission et un changement de carte. Le ts reste ouvert : ts.orioncommunity.fr Merci de votre compression. Cordialement l’équipe de Orion community.
  40. 2 likes
    I've join the server, there was no active admin on !
  41. 2 likes
    Hello all, I'll try to keep this relatively short whilst ensuring I answer all of the questions asked. I know I've not made many posts on the forum since the wipe, but I intend to become more and more active, whilst providing the best quality help I can. I'm a 21 year old student from England, in my final year of university studying for a degree in Early Childhood Education and Care. Although I'm studying for an educational career, I currently work for a NPO, my primary role is in implementing new, and improving old systems within the agency. This involves configuration and maintenance of database systems (which are unfortunately primarily SOQL) and the systems that maintain them, and production of internal and external websites, primarily using PHP. I have a large amount of experience in SQF and SQL. Having worked with PHP substantially in the past, I have used SQL a large amount. My experience with SQF is similar, having worked on a variety of ArmA servers, and dabbling with Altis Life Server development. I have a number of small commits to the Altis Life Framework using the same username. I am happy to provide anyone help that requests for it, however I am aware that people are much more likely to approach someone that has a tag indicating their willingness to provide support. Essentially, the tag would provide me with a wider variety of people to support. I am a competent developer, both for Altis Life and web technologies, and could provide the community with any systems they needed (Discord Bots, Web Applications, Etc.) and would do so willingly. I have a fair amount of experience using IPS, and I am willing to provide help to anyone that needs it. If in the future, a moderator position was available I would be willing to take it, should the administration team deem me appropriate for that position. Thanks.
  42. 2 likes
    If you're lacking of motivation, what's the point of starting a server? Or continuing one in your situation. Servers are ran for fun and to achieve a player base so people can meet and play with others, if you have no motivation, just go play on other servers. However, I bet you will find someone willing to help you throughout boosting your server back up, their are many players out their. Sincerely, Rod
  43. 2 likes
    No need to be dicks is there.. @Delta X | PoweredByte Scroll up buddy.
  44. 2 likes
    What kind of gay shit did I just read
  45. 2 likes
  46. 2 likes
    Author: StonerGaming difficulty: Easy 1. Open Config_Gather.hpp. Add 2. Open Config_VItems.hpp. Add Under //Drugs ( If you want it as a drug ) 3. Open Config_VItems.hpp. and add it to a shop of your choice. Example 4. Open Config_Process.hpp, and add 5. Open Config_License.hpp, and under //illegal license ( If Illegal ) 6. Open stringtable.xml, and add 7. Open your mission.sqm in A3 Editor add a Maker named Tobacco Field, with the variable name tobacco_1 8. Open your mission.sqm in A3Editor, Place a NPC and add in the init You Must Get Your Own Icons. If you have any questions, just ask me.
  47. 2 likes
    I've Used A Lot Of Scripts Off This Site And Now I Have Decided To Release Something To Try And Give Back. This Is A Very Very Simple Script Based Off Of The Work Of Tonic. Description Of Script: With this script it allows medics to unlock a vehicle through the vehicle interaction menu. Lets Get Started! First Off Go To "Altis_Life.Altis\core\actions" And CREATE A File Called "fn_jaws.sqf" #include "..\..\script_macros.hpp" /* File: fn_jaws.sqf Author: Bryan "Tonic" Boardwine redone by: Toxic Description: Main functionality for lock-picking. */ private ["_curTarget","_distance","_isVehicle","_title","_progressBar","_cP","_titleText","_dice","_badDistance"]; _curTarget = cursorObject; life_interrupted = false; if (life_action_inUse) exitWith {}; if (isNull _curTarget) exitWith {}; //Bad type _distance = ((boundingBox _curTarget select 1) select 0) + 2; if (player distance _curTarget > _distance) exitWith {}; //Too far _isVehicle = if ((_curTarget isKindOf "LandVehicle") || (_curTarget isKindOf "Ship") || (_curTarget isKindOf "Air")) then {true} else {false}; if (_isVehicle && _curTarget in life_vehicles) exitWith {hint localize "STR_ISTR_Lock_AlreadyHave"}; //More error checks if (!_isVehicle && !isPlayer _curTarget) exitWith {}; if (!_isVehicle && !(_curTarget getVariable ["restrained",false])) exitWith {}; if (_curTarget getVariable "NPC") exitWith {hint localize "STR_NPC_Protected"}; _title = format [localize "STR_ISTR_Jaws",if (!_isVehicle) then {"Handcuffs"} else {getText(configFile >> "CfgVehicles" >> (typeOf _curTarget) >> "displayName")}]; life_action_inUse = true; //Lock out other actions //Setup the progress bar disableSerialization; "progressBar" cutRsc ["life_progress","PLAIN"]; _ui = uiNamespace getVariable "life_progress"; _progressBar = _ui displayCtrl 38201; _titleText = _ui displayCtrl 38202; _titleText ctrlSetText format ["%2 (1%1)...","%",_title]; _progressBar progressSetPosition 0.01; _cP = 0.01; for "_i" from 0 to 1 step 0 do { if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; }; sleep 0.26; if (isNull _ui) then { "progressBar" cutRsc ["life_progress","PLAIN"]; _ui = uiNamespace getVariable "life_progress"; _progressBar = _ui displayCtrl 38201; _titleText = _ui displayCtrl 38202; }; _cP = _cP + 0.05; _progressBar progressSetPosition _cP; _titleText ctrlSetText format ["%3 (%1%2)...",round(_cP * 100),"%",_title]; if (_cP >= 1 || !alive player) exitWith {}; if (life_istazed) exitWith {}; //Tazed if (life_isknocked) exitWith {}; //Knocked if (life_interrupted) exitWith {}; if (player getVariable ["restrained",false]) exitWith {}; if (player distance _curTarget > _distance) exitWith {_badDistance = true;}; }; //Kill the UI display and check for various states "progressBar" cutText ["","PLAIN"]; player playActionNow "stop"; if (!alive player || life_istazed || life_isknocked) exitWith {life_action_inUse = false;}; if (player getVariable ["restrained",false]) exitWith {life_action_inUse = false;}; if (!isNil "_badDistance") exitWith {titleText[localize "STR_ISTR_Lock_TooFar","PLAIN"]; life_action_inUse = false;}; if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; life_action_inUse = false; if (!_isVehicle) then { _curTarget setVariable ["restrained",false,true]; _curTarget setVariable ["Escorting",false,true]; _curTarget setVariable ["transporting",false,true]; } else { titleText[localize "STR_ISTR_Jaws_Success","PLAIN"]; life_vehicles pushBack _curTarget; }; Then Go To "Altis_Life.Altis" And Open Up Your "Functions.hpp" Inside Your "Functions.hpp" Under The Class "Actions" Add This: class jaws {}; Next Open Up Your "Stringtable.xml" Located In "Altis_Life.Altis" And Add The Following In One Of The Packages (I Put Mine Right Above STR_ISTR_Lock_AlreadyHave) <Key ID="STR_ISTR_Jaws"> <Original>Using Jaws Of Life On: %1</Original> </Key> <Key ID="STR_ISTR_Jaws_Success"> <Original>The Jaws Of Life Where Successful!</Original> </Key> <Key ID ="STR_vInAct_Jaws"> <Original>Jaws Of Life</Original> </Key> Now Go To "Altis_Life.Altis\core\vehicle" And Open Your "fn_vInteractionMenu.sqf" Now This Depends On How You Have Your Vehicle Interaction menu Setup. By Default, Cops Have There Own and Medics And Civs Share One. This Is What My Medic Section Looks Like if (playerSide isEqualTo independent) then { _Btn2 ctrlSetText localize "STR_vInAct_PullOut"; _Btn2 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_pulloutAction; closeDialog 0;"; if (crew _curTarget isEqualTo []) then {_Btn4 ctrlEnable false;}; _Btn3 ctrlSetText localize "STR_vInAct_Impound"; _Btn3 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_impoundAction; closeDialog 0;"; _Btn5 ctrlSetText localize "STR_vInAct_Jaws"; _Btn5 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_jaws; closeDialog 0;"; if (_curTarget isKindOf "Ship") then { _Btn6 ctrlSetText localize "STR_vInAct_PushBoat"; _Btn6 buttonSetAction "[] spawn life_fnc_pushObject; closeDialog 0;"; if (_curTarget isKindOf "Ship" && {local _curTarget} && {crew _curTarget isEqualTo []}) then { _Btn6 ctrlEnable true;} else {_Btn6 ctrlEnable false}; } else { if (!isNil "_id") then { if !(_id in getDLCs 1) then { _Btn6 ctrlSetText localize "STR_vInAct_GetInVehicle"; _Btn6 buttonSetAction "player moveInDriver life_vInact_curTarget; closeDialog 0;"; if (crew _curTarget isEqualTo [] && {canMove _curTarget} && {locked _curTarget isEqualTo 0}) then {_Btn6 ctrlEnable true;} else {_Btn6 ctrlEnable false}; }; } else { _Btn6 ctrlSetText localize "STR_vInAct_Unflip"; _Btn6 buttonSetAction "life_vInact_curTarget setPos [getPos life_vInact_curTarget select 0, getPos life_vInact_curTarget select 1, (getPos life_vInact_curTarget select 2)+0.5]; closeDialog 0;"; if (alive _curTarget && {crew _curTarget isEqualTo []} && {canMove _curTarget}) then { _Btn6 ctrlEnable false;} else {_Btn6 ctrlEnable true;}; }; }; _btn4 ctrlShow false; }; My Entire "fn_vInteractionMenu.sqf" Looks Like: #include "..\..\script_macros.hpp" /* File: fn_vInteractionMenu.sqf Author: Bryan "Tonic" Boardwine Description: Replaces the mass add actions for various vehicle actions. */ #define Btn1 37450 #define Btn2 37451 #define Btn3 37452 #define Btn4 37453 #define Btn5 37454 #define Btn6 37455 #define Title 37401 private ["_display","_curTarget","_Btn1","_Btn2","_Btn3","_Btn4","_Btn5","_Btn6","_id"]; if (!dialog) then { createDialog "vInteraction_Menu"; }; disableSerialization; _curTarget = param [0,objNull,[objNull]]; if (isNull _curTarget) exitWith {closeDialog 0;}; //Bad target _isVehicle = if ((_curTarget isKindOf "landVehicle") || (_curTarget isKindOf "Ship") || (_curTarget isKindOf "Air")) then {true} else {false}; if (!_isVehicle) exitWith {closeDialog 0;}; _display = findDisplay 37400; _Btn1 = _display displayCtrl Btn1; _Btn2 = _display displayCtrl Btn2; _Btn3 = _display displayCtrl Btn3; _Btn4 = _display displayCtrl Btn4; _Btn5 = _display displayCtrl Btn5; _Btn6 = _display displayCtrl Btn6; life_vInact_curTarget = _curTarget; _id = getObjectDLC _curTarget; //Set Repair Action _Btn1 ctrlSetText localize "STR_vInAct_Repair"; _Btn1 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_repairTruck; closeDialog 0;"; if ((life_inv_toolkit >= 1) && {alive life_vInact_curTarget} && {([life_vInact_curTarget] call life_fnc_isDamaged)}) then {_Btn1 ctrlEnable true;} else {_Btn1 ctrlEnable false;}; if (playerSide isEqualTo west) then { _Btn2 ctrlSetText localize "STR_vInAct_Registration"; _Btn2 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_searchVehAction; closeDialog 0;"; _Btn3 ctrlSetText localize "STR_vInAct_SearchVehicle"; _Btn3 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_vehInvSearch; closeDialog 0;"; _Btn4 ctrlSetText localize "STR_vInAct_PullOut"; _Btn4 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_pulloutAction; closeDialog 0;"; if (crew _curTarget isEqualTo []) then {_Btn4 ctrlEnable false;}; _Btn5 ctrlSetText localize "STR_vInAct_Impound"; _Btn5 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_impoundAction; closeDialog 0;"; if (_curTarget isKindOf "Ship") then { _Btn6 ctrlSetText localize "STR_vInAct_PushBoat"; _Btn6 buttonSetAction "[] spawn life_fnc_pushObject; closeDialog 0;"; if (_curTarget isKindOf "Ship" && {local _curTarget} && {crew _curTarget isEqualTo []}) then { _Btn6 ctrlEnable true;} else {_Btn6 ctrlEnable false}; } else { if (!isNil "_id") then { if !(_id in getDLCs 1) then { _Btn6 ctrlSetText localize "STR_vInAct_GetInVehicle"; _Btn6 buttonSetAction "player moveInDriver life_vInact_curTarget; closeDialog 0;"; if (crew _curTarget isEqualTo [] && {canMove _curTarget} && {locked _curTarget isEqualTo 0}) then {_Btn6 ctrlEnable true;} else {_Btn6 ctrlEnable false}; }; } else { _Btn6 ctrlSetText localize "STR_vInAct_Unflip"; _Btn6 buttonSetAction "life_vInact_curTarget setPos [getPos life_vInact_curTarget select 0, getPos life_vInact_curTarget select 1, (getPos life_vInact_curTarget select 2)+0.5]; closeDialog 0;"; if (alive _curTarget && {crew _curTarget isEqualTo []} && {canMove _curTarget}) then { _Btn6 ctrlEnable false;} else {_Btn6 ctrlEnable true;}; }; }; }; if (playerSide isEqualTo civilian) then { if (_curTarget isKindOf "Ship") then { _Btn2 ctrlSetText localize "STR_vInAct_PushBoat"; _Btn2 buttonSetAction "[] spawn life_fnc_pushObject; closeDialog 0;"; if (alive _curTarget && {_curTarget isKindOf "Ship"} && {local _curTarget} && {crew _curTarget isEqualTo []}) then { _Btn2 ctrlEnable true;} else {_Btn2 ctrlEnable false}; } else { if (!isNil "_id") then { if !(_id in getDLCs 1) then { _Btn2 ctrlSetText localize "STR_vInAct_GetInVehicle"; _Btn2 buttonSetAction "player moveInDriver life_vInact_curTarget; closeDialog 0;"; if (crew _curTarget isEqualTo [] && {canMove _curTarget} && {locked _curTarget isEqualTo 0}) then {_Btn2 ctrlEnable true;} else {_Btn2 ctrlEnable false}; }; } else { _Btn2 ctrlSetText localize "STR_vInAct_Unflip"; _Btn2 buttonSetAction "life_vInact_curTarget setPos [getPos life_vInact_curTarget select 0, getPos life_vInact_curTarget select 1, (getPos life_vInact_curTarget select 2)+0.5]; closeDialog 0;"; if (alive _curTarget && {crew _curTarget isEqualTo []} && {canMove _curTarget}) then { _Btn2 ctrlEnable false;} else {_Btn2 ctrlEnable true;}; }; }; if (typeOf _curTarget == "O_Truck_03_device_F") then { _Btn3 ctrlSetText localize "STR_vInAct_DeviceMine"; _Btn3 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_deviceMine"; if (!isNil {(_curTarget getVariable "mining")} || !local _curTarget && {_curTarget in life_vehicles}) then { _Btn3 ctrlEnable false; } else { _Btn3 ctrlEnable true; }; } else { _Btn3 ctrlShow false; if (typeOf (_curTarget) in ["C_Van_01_fuel_F","I_Truck_02_fuel_F","B_Truck_01_fuel_F"] && _curTarget in life_vehicles) then { if (!isNil {_curTarget getVariable "fuelTankWork"}) then { _Btn3 ctrlSetText localize "STR_FuelTank_Stop"; _Btn3 buttonSetAction "life_vInact_curTarget setVariable [""fuelTankWork"",nil,true]; closeDialog 0;"; _Btn3 ctrlShow true; } else { if (count (nearestObjects [_curTarget, ["Land_FuelStation_Feed_F","Land_fs_feed_F"], 15]) > 0) then { _Btn3 ctrlSetText localize "STR_FuelTank_Supply"; _Btn3 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_fuelSupply"; _Btn3 ctrlShow true; }else{ { if (player distance (getMarkerPos _x) < 20) exitWith { _Btn3 ctrlSetText localize "STR_FuelTank_Store"; _Btn3 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_fuelStore"; _Btn3 ctrlShow true; }; } forEach ["fuel_storage_1","fuel_storage_2"]; }; }; }; }; _Btn4 ctrlShow false; _Btn5 ctrlShow false; _Btn6 ctrlShow false; }; if (playerSide isEqualTo independent) then { _Btn2 ctrlSetText localize "STR_vInAct_PullOut"; _Btn2 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_pulloutAction; closeDialog 0;"; if (crew _curTarget isEqualTo []) then {_Btn4 ctrlEnable false;}; _Btn3 ctrlSetText localize "STR_vInAct_Impound"; _Btn3 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_impoundAction; closeDialog 0;"; _Btn5 ctrlSetText localize "STR_vInAct_Jaws"; _Btn5 buttonSetAction "[life_vInact_curTarget] spawn life_fnc_jaws; closeDialog 0;"; if (_curTarget isKindOf "Ship") then { _Btn6 ctrlSetText localize "STR_vInAct_PushBoat"; _Btn6 buttonSetAction "[] spawn life_fnc_pushObject; closeDialog 0;"; if (_curTarget isKindOf "Ship" && {local _curTarget} && {crew _curTarget isEqualTo []}) then { _Btn6 ctrlEnable true;} else {_Btn6 ctrlEnable false}; } else { if (!isNil "_id") then { if !(_id in getDLCs 1) then { _Btn6 ctrlSetText localize "STR_vInAct_GetInVehicle"; _Btn6 buttonSetAction "player moveInDriver life_vInact_curTarget; closeDialog 0;"; if (crew _curTarget isEqualTo [] && {canMove _curTarget} && {locked _curTarget isEqualTo 0}) then {_Btn6 ctrlEnable true;} else {_Btn6 ctrlEnable false}; }; } else { _Btn6 ctrlSetText localize "STR_vInAct_Unflip"; _Btn6 buttonSetAction "life_vInact_curTarget setPos [getPos life_vInact_curTarget select 0, getPos life_vInact_curTarget select 1, (getPos life_vInact_curTarget select 2)+0.5]; closeDialog 0;"; if (alive _curTarget && {crew _curTarget isEqualTo []} && {canMove _curTarget}) then { _Btn6 ctrlEnable false;} else {_Btn6 ctrlEnable true;}; }; }; _btn4 ctrlShow false; }; I Am Not A Very Experienced Programmer So To Help Me Out, If There Is A Problem Please Do Not Post "Its Not Working". Post Your RPT Logs So I Can Try My Best To Help. Also, If Any Experienced Programmers Could Help Out If There Are Any Problems That Would Be Greatly Appreciated!
  48. 2 likes
    That is playtime in minutes on each faction [West,Independent,Civ] No need to "translate" at all, it's already human readable.
  49. 2 likes
    Author: StonerGaming Difficulty: Easy/Copy Paste Step 1. Open Config_VItems.hpp. Add under //mined items class uranium_unrefined { variable = "uraniumUnrefined"; displayName = "STR_Item_UraniumOre"; weight = 3; buyPrice = -1; sellPrice = -1; illegal = true; edible = -1; icon = ""; }; class uranium_refined { variable = "uraniumRefined"; displayName = "STR_Item_Uranium"; weight = 1; buyPrice = -1; sellPrice = 6500; //Optional Price illegal = true; edible = -1; icon = ""; }; Step 2. Open Config_VItems.hpp. Add Under Virtual Shops class uranium { name = "STR_Shops_Uranium"; side = "civ"; license = ""; level[] = { "", "", -1, "" }; items[] = { "uranium_refined" }; }; Step 3. Open Config_Gather.hpp. Add under "Class Minerals" class uranium_unrefined { amount = 15; zones[] = { "uranium_mine" }; item = "pickaxe"; mined[] = { "uranium_unrefined" }; zoneSize = 30; }; Step 4. Open Config_License.hpp. Add under //Processing License class uranium { variable = "uranium"; displayName = "STR_License_Uranium"; price = 35000; illegal = true; side = "civ"; }; Step 5. Open Config_Process.hpp. Add class uranium { MaterialsReq[] = {{"uranium_unrefined",1}}; MaterialsGive[] = {{"uranium_refined",1}}; Text = "STR_Process_Uranium"; //ScrollText = "Refine Uranium"; NoLicenseCost = 10000; }; Step 6. Open stringtable.xml. Add <Key ID="STR_Item_Uranium"> <Original>Uranium</Original> </Key> <Key ID="STR_Item_UraniumOre"> <Original>Uranium Ore</Original> </Key> <Key ID="STR_MAR_Uranium_Trader"> <Original>Uranium Trader</Original> </Key> <Key ID="STR_Process_Uranium"> <Original>Processing Uranium</Original> </Key> <Key ID="STR_License_Uranium"> <Original>Uranium Processing</Original> </Key> Step 7. Open your mission.sqm in A3 Editor. Place a marker variable name: uranium_mine Step 8. Place a NPC. add in the init. (For Processing) this enableSimulation false; this allowDamage false; this addAction[localize"STR_Process_Uranium",life_fnc_processAction,"uranium",0,false,false,"",' life_inv_uraniumUnrefined > 0 && !life_is_processing && !life_action_inUse']; this addAction[format ["%1 ($%2)",localize (getText(missionConfigFile >> "Licenses" >> "uranium" >> "displayName")), [(getNumber(missionConfigFile >> "Licenses" >> "uranium" >> "price"))] call life_fnc_numberText],life_fnc_buyLicense,"uranium",0,false,false,"",' !license_civ_uranium && playerSide isEqualTo civilian ']; Step 9. Place a NPC. add in the init. (For Trader) this allowDamage false; this enableSimulation false; this addAction[localize"STR_MAR_Uranium_Trader",life_fnc_virt_menu,"uranium"]; I am 100% sure this version works i have tested it on my server
  50. 2 likes
    Here is my code, This is a working fix for the newer version of AL: /* file: fn_robShops.sqf Author: MrKraken Description: Executes the rob shob action! */ private["_robber","_shop","_kassa","_ui","_progress","_pgText","_cP","_rip","_pos"]; _shop = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; //The object that has the action attached to it is _this. ,0, is the index of object, ObjNull is the default should there be nothing in the parameter or it's broken _robber = [_this,1,ObjNull,[ObjNull]] call BIS_fnc_param; //Can you guess? Alright, it's the player, or the "caller". The object is 0, the person activating the object is 1 _action = [_this,2] call BIS_fnc_param;//Action name _rip = false; if(side _robber != civilian) exitWith { hint "You can not rob this Gas Station!" }; if(_robber distance _shop > 5) exitWith { hint "You need to be within 5m of the cashier to rob him!" }; if (vehicle player != _robber) exitWith { hint "Get out of your vehicle!" }; if !(alive _robber) exitWith {}; if (currentWeapon _robber == "") exitWith { hint "HaHa, you do not threaten me! Get out of here you hobo!" }; if (_rip) exitWith { hint "Robbery already in progress!" }; _rip = true; _kassa = 1200 + round(random 600); _shop removeAction _action; _shop switchMove "AmovPercMstpSsurWnonDnon"; _chance = random(100); if(_chance >= 10) then {[1,format["ALARM! - Gas Station: %1 is being robbed!", _shop]] remoteExec ["life_fnc_broadcast",west]; }; _cops = (west countSide playableUnits); if(_cops < 1) exitWith{hint "There isnt enough Police to rob Gas Station!";}; disableSerialization; 5 cutRsc ["life_progress","PLAIN"]; _ui = uiNameSpace getVariable "life_progress"; _progress = _ui displayCtrl 38201; _pgText = _ui displayCtrl 38202; _pgText ctrlSetText format["Robbery in Progress, stay close (10m) (1%1)...","%"]; _progress progressSetPosition 0.01; _cP = 0.0001; if(_rip) then { while{true} do { sleep 1; _cP = _cP + 0.01; _progress progressSetPosition _cP; _pgText ctrlSetText format["Robbery in Progress, stay close (10m) (%1%2)...",round(_cP * 100),"%"]; _Pos = position player; // by ehno: get player pos _marker = createMarker ["Marker200", _Pos]; //by ehno: Place a Maker on the map "Marker200" setMarkerColor "ColorRed"; "Marker200" setMarkerText "!ATTENTION! robbery !ATTENTION!"; "Marker200" setMarkerType "mil_warning"; if(_cP >= 1) exitWith {}; if(_robber distance _shop > 10.5) exitWith { }; if!(alive _robber) exitWith {}; }; if!(alive _robber) exitWith { _rip = false; }; if(_robber distance _shop > 10.5) exitWith { deleteMarker "Marker200"; _shop switchMove ""; hint "You need to stay within 10m to Rob registry! - Now the registry is locked."; 5 cutText ["","PLAIN"]; _rip = false; }; 5 cutText ["","PLAIN"]; titleText[format["You have stolen $%1, now get away before the cops arrive!",[_kassa] call life_fnc_numberText],"PLAIN"]; deleteMarker "Marker200"; // by ehno delete maker life_cash = life_cash + _kassa; _rip = false; life_use_atm = false; sleep (30 + random(180)); life_use_atm = true; if!(alive _robber) exitWith {}; [getPlayerUID _robber,name _robber,"211"] remoteExec ["life_fnc_wantedAdd",2]; }; sleep 300; _action = _shop addAction["Rob the Gas Station",life_fnc_robstore]; _shop switchMove ""; Just copy paste. Configuring this is pretty easy aswell. to change the amount that can be robbed (red value is initial amount of money, green value is the amount it will randomly add or remove from the red value) _kassa = 1200 + round(random 600); Changing the amount of police needed to rob the store (Change red value to amount of officers online you want): if(_cops < 1) exitWith{hint "There isnt enough Police to rob Gas Station!";}; Changing the time it takes to rob the store (red value*100 = time in seconds to rob the bank. eg = 3*100=300 seconds to rob the store): if(_rip) then { while{true} do { sleep 1; _cP = _cP + 0.01; ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Hope this helped you!