1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Downloads
  4. Galerie
    1. Alben
  5. Toolbox
    1. Passwort Generator
    2. Portchecker
  6. Mitglieder
    1. Mitgliedersuche
    2. Benutzer online
    3. Trophäen
    4. Team
Mo: 18 August 2025
  • Anmelden oder registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Forum
  • Dateien
  • Seiten
  • Bilder
  • Erweiterte Suche

Schön, dass du den Weg zu NodeZone.net gefunden hast! Aktuell bist du nicht angemeldet und kannst deshalb nur eingeschränkt auf unsere Community zugreifen. Um alle Funktionen freizuschalten, spannende Inhalte zu entdecken und dich aktiv einzubringen, registriere dich jetzt kostenlos oder melde dich mit deinem Account an.

Anmelden oder registrieren
    1. Nodezone.net Community
    2. Mitglieder
    3. Noldy

    Beiträge von Noldy

    • [Tutorial] prostitution (Fun Script)

      • Noldy
      • 9. August 2015 um 05:48

      Hallo,

      In diesem Tutorial erkläre ich euch, wie ihr diesen Fun Script bei euch auf dem Server einbaut.

      Es geht um die prostitution.

      Ihr könnt den NPC anlabbern, und müsst diesem Geld bezahlen. Dafür bekommt ihr eine von zweien Geschlechtskrankheiten die ihr wieder entfernen könnt im Krankenhaus.
      Nicht wirklich was brauchbares, ist hallt wie gesagt ein Fun Script.

      Fangen wir mal an.

      1. Geht in eure core/actions/fn_healHospital.sqf und ersetzt alles darin, mit diesem Inhallt:

      Code
      /*
      	File: fn_healHospital.sqf
      	Author: Bryan "Tonic" Boardwine
      
      	Description:
      	Doesn't matter, will be revised later.
      */
      
      
      
      
      _mode = _this select 3;
      
      
      
      
      switch (_mode) do 
      {
      	case "heilen":
      					{
      						if(life_cash < 50) exitWith {hint "Du hast keine $50 um geheilt zu werden."};
      						titleText["Doctor Dorian heilt dich... keine Angst...","PLAIN"];
      						sleep 2;
      						titleText["ups, Ich denke ich habe die Nadel falsch gesteckt..","PLAIN"];
      						sleep 5;
      						if(player distance (_this select 0) > 5) exitWith {titleText["Sie müssen in einem Radius von 5m bleiben, damit der Doktor Sie behandeln kann.","PLAIN"]};
      						titleText["Sie sind nun völlig gesund!","PLAIN"];
      						player setdamage 0;
      						life_cash = life_cash - 50;
      					};
      	case "checken":
      					{
      						 if(life_checked == 1) exitWith { hint "Du hast dich bereits durchchecken lassen. Du musst dich nun behandeln lassen"; };
      						 if(life_sex_ill == 0) then
      						 {
      							 hint format["Diagnose: \n\n Name: %1 \n\n Krankheit: keine",name player];
      							 life_checked = 0;
      						 };
      						 if(life_sex_ill == 1) then
      						 {
      							 hint format["Diagnose: \n\n Name: %1 \n\n Krankheit: Tripper \n\n Du solltest dich nun bei mir behandeln lassen!",name player];
      							 life_checked = 1;
      						 };
      						 if(life_sex_ill == 2) then
      						 {
      							hint format["Diagnose: \n\n Name: %1 \n\n Krankheit:Aids \n\n Du solltest dich nun bei mir behandeln lassen",name player];
      							life_checked = 1;
      						 };
      					 };
      	case "behandeln":
      					 {
      						if(life_checked == 0) exitWith { hint "Wie soll ich dich behandeln, wenn ich nicht mal weiß was du hast?! Also lass dich durchchecken"; };
      						if(life_sex_ill == 1) then
      						{
      							if(life_cash<1000) exitWith { hint "Ich habe bei dir eine Geschlechtskrankheit gefunden du hast nur nicht genug Geld dich behandeln zu lassen!";};
      							titleText["Ich habe Tripper bei dir entdeckt. Ich werde dich nun heilen. \n Das kann bis zu 20 Sekunden dauern.","PLAIN"];
      							sleep 20;
      							titleText["Du bist geheilt! Du solltest besser aufpassen!","PLAIN"];
      							life_cash = life_cash - 1000;
      							player setDamage 0;
      							life_sex_ill = 0;
      							life_checked = 0;
      						};
      						if(life_sex_ill == 2) then
      						{
      							if(life_cash<10000) exitWith { hint "Ich habe bei dir eine Geschlechtskrankheit gefunden du hast nur nicht genug Geld dich behandeln zu lassen!";};
      							titleText["Ich habe Aids bei dir entdeckt. Ich werde dich nun heilen. \n Das kann bis zu 45 Sekunden dauern.","PLAIN"];
      							sleep 45;
      							titleText["Du bist geheilt! Du solltest besser aufpassen!","PLAIN"];
      							life_cash = life_cash - 10000;
      							player setDamage 0;
      							life_sex_ill = 0;
      							life_checked = 0;
      						};
      					 };
      };
      Alles anzeigen

      2. Geht in eure core/configuration.sqf und fügt folgendes unter Backend Variables ein:

      Code
      life_sex_ill = 0;
      life_checked = 0;

      3. Geht in eure Funtions.h und fügt folgendes unter class Civilian ein:

      Code
      class hooker{};

      4. Erstellt eine neue sqf mit dem namen fn_hooker.sqf mit folgendem Inhallt:

      Code
      /*
          File: fn_hooker
          Author:Zaickz
          Version: 0.2
      
          Notice:
          Exclusive for Nordmann and Herrschaft Server!
      
          Description:
          You can have Sex with prostitutes and may get ill ;)
      */
      
      
      
      
      _mode = _this select 3;
      
      
      
      
      switch (_mode) do 
      {
          case "ficken": 
                      {
                          if(playerSide == west) exitWith
                          {
                              hint "Du bist ein Polizist! Mit dir ist mir das zu heiß! Verpiss dich lieber!";
                          };
                          if(currentWeapon player != "") exitWith
                          {
                              hint "Pack deine Waffe weg!";
                          };
      
      
      
      
                              //Prices
                                  _number = ceil(random 7);
                                  if(_number == 0) then { hookerprice = 100;};
                                  if(_number == 1) then { hookerprice = 2000;};
                                  if(_number == 2) then { hookerprice = 4000;};
                                  if(_number == 3) then { hookerprice = 8000;};
                                  if(_number == 4) then { hookerprice = 16000;};
                                  if(_number == 5) then { hookerprice = 32000;};
                                  if(_number == 6) then { hookerprice = 64000;};
                                  if(_number == 7) then { hookerprice = 128000;};
                                  _pplayer = _this select 0;
      
                                  //Chance of get some sexualill
                                  _number1 = ceil(random 100);
                                  if(_number1<33) then { sexualill = 0;};
                                  if(_number1>33) then { sexualill = 1;};
                                  if(_number1>66) then { sexualill = 2;};
      
                          sleep 1;
                          _playercosts = hookerprice;
                          _playersexill = sexualill;                        
                              if(life_cash < hookerprice) exitWith 
                              {
                                  hint "Kein Geld? Dann wirst du mit mir auch kein Spaß haben!";
                              };
                              if(life_sex_ill > 0) exitWith
                              {
                                  hint "Geschlechtskrankheit? Geh erstmal zum Arzt bevor du hier rum vögelst!";
                              };
                              hint format["Das hat mir gefallen suesser :* \n Du musst %1 € zahlen. \n\n Und du solltest beim Arzt vorbei schauen",_playercosts];
                              life_cash = life_cash - _playercosts;
                              life_sex_ill = life_sex_ill + _playersexill;
      
      
      
      
                              if(_playersexill == 1) then
                              {
                                  player setDamage 0.25;
                              };
                              if(_playersexill == 2) then
                              {
                                  player setDamage 0.50;
                              };        
                      };
      };
      Alles anzeigen


      Und fügt die Datei in core/civilian ein.

      5. Nun geht in den Arma3 Editor, und erstellt einen neuen NPC mit folgendem INIT Befehl:

      Code
      this enableSimulation false; this allowDamage false; this addAction["Sex?",life_fnc_hooker,"ficken"];

      Geht zum Krankenhaus, zu dem NPC der euch heilt und ändert sein INIT befehl um:

      Code
      this enableSimulation false; this allowDamage false; this addAction["Heilen",life_fnc_healHospital,"heilen"]; this addAction["Checken",life_fnc_healHospital,"checken"]; this addAction["Behandeln",life_fnc_healHospital,"behandeln"];

      Das war es.

      Viel spaß mit diesem Script :D :P

      MfG
      Noldy

    • [Tutorial] Handschellen für Cops

      • Noldy
      • 9. August 2015 um 05:44

      Hallo,

      Mit diesem Tutorial, müsst ihr als Cop zuerst Handschellen kaufen um jemmanden festzunehmen. Habt ihr keine Handschellen könnt ihr niemand festnehmen.

      1. Öffnet eure core/configuration.sqf und fügt folgendes unter life_inv_items = ein:

      Code
      "life_inv_handschellen"


      (Achtet aud das Komma, da sletzte darf keines haben. Fügt also das ganz unten ein bei life_inv_items = und gebt dem obendrüber ein ","
      und bei buy_array = des eintragen:

      Code
      ["handschellen",100]

      2. Öffnet eure core/config/fn_itemWeight.sqf und fügt folgendes hinzu:

      Code
      case "handschellen": {1};

      3. Öffnet eure core/config/fn_varHandle.sqf und fügt folgendes hinzu:
      case 0:

      Code
      case "handschellen": {"life_inv_handschellen"};


      bei case 1:

      Code
      case "life_inv_handschellen": {"handschellen"};

      4. Öffnet eure core/config/fn_varToStr.sqf und fügt folgendes hinzu unter //Virtual Inventory Items:

      Code
      case "life_inv_handschellen": {"Handschellen"};

      5. Öffnet eure core/config/fn_virt_shops.sqf und fügt folgendes bei case "cop": hinzu:

      Code
      "handschellen"


      Achtet hierbei, das ihr das Item richtig einfügt. Dies müsste in etwa so aussehen:

      Code
      case "cop": {["Polizei Shop",["donuts","coffee","handschellen","spikeStrip","fuelF","defusekit","laptop","speedtrap","barrier","cone"]]};

      6. Öffnet eure core/actions/fn_restrainAction.sqf und sucht nach if(side _unit == west) exitWith {}; löscht das, und fügt folgendes hinzu:

      Code
      if (side player == west) then 
          {
          if(life_inv_handschellen < 1) exitWith { hint "Du hast keine Handschellen"; };
          life_inv_handschellen = life_inv_handschellen - 1;
          };

      7. und letzter punkt. Öffnet eure core/functions/fn_keyHandler.sqf und sucht unter //Restraining (Shift + R) nach 
      if(_shift && playerSide == west && !isNull cursorTarget && cursorTarget isKindOf "Man" && (isPlayer cursorTarget) && (side cursorTarget in [civilian,independent]) && alive cursorTarget && cursorTarget distance player < 3.5 && !(cursorTarget getVariable "Escorting") && !(cursorTarget getVariable "restrained") && speed cursorTarget < 1) then
      und fügt folgendes darunter:

      Code
      {
              if([false,"handschellen",1] call life_fnc_handleInv) then
              {
          [] call life_fnc_restrainAction;
              }
              else
              {
              hint "Du hast keine Handschellen!";
              };
              };

      Das war es.
      Nun müsst ihr Zuerst in eurem Cop Shop Handschellen kaufen, damit ihr leute festnehmen könnt.

      Viel spaß damit.
      MfG
      Noldy

    • [Tutorial] Altes Fatique

      • Noldy
      • 9. August 2015 um 05:43

      Moin GG Community

      Heut mal ein etwas kleineres Tutorial.

      Wie sicher schon alle mitbekommen haben, ist das jetzige Fatique fürn A...

      Hier erkläre ich euch, wie ihr das alte Fatique System wieder machen könnt.

      Öffnet dafür eure core\configuration.sqf und fügt folgendes unter ****** Backend Variables ***** ein:

      Code
      life_fatigue = 0.5;

      Öffnet eure functions.h und sucht nach class Functions und fügt folgendes ein:

      Code
      class fatigueReset {};

      Öffnet ihr eure core\init.sqf und fügt ober __CONST__(life_paycheck,life_paycheck); //Make the paycheck static. folgendes ein:

      Code
      [] call life_fnc_fatigueReset;

      Zum schluß erstellt ihr folgende datei namens fn_fatigueReset.sqf und fügt diese in euer core\functions ein:

      Code
      /*
          File: fn_fatigueReset.sqf
          Author: Itsyuka
      
          Description:
          Stop the fatigue from going higher than what ever you set it to (Fucking BI Devs, shouldn't be doing this).
      */
      
      
      
      
      [] spawn {
          while {true} do {
              if (life_fatigue < getFatigue player) then {
                  player setFatigue life_fatigue;
              };
              sleep 1.5;
          };
      };
      Alles anzeigen

      Das war es.

      Nun solltet ihr wieder das alte System haben.

      Bei problemen einfach melden.

      MfG
      Noldy

    • [Tutorial] Öl nur in Tank Fahrzeuge lagern

      • Noldy
      • 9. August 2015 um 05:43

      Hallo,
      Heute zeige ich euch wie ihr Öl nur in bestimmte Fahrzeuge lagern könnt.

      Es handeln sich um diese Fahrzeuge:
      C_Van_01_fuel_F B_Truck_01_fuel_F O_Truck_02_fuel_F O_Truck_03_fuel_F

      Fangen wir mal an.

      1. Öffnet eure core\configuration.sqf und fügt folgendes unter Backend Variables ein:

      Code
      life_TankLaster = 1;

      2. Öffnet eure core\Vehicle\fn_vehStoreItem.sqf und sucht nach private und fügt am schluß folgendes dazu:

      Code
      ,"_Truck","_FuelTrucks","_FuelStuff"


      das ganze sollte nun so aussehen:

      Code
      private["_ctrl","_num","_totalWeight","_itemWeight","_veh_data","_inv","_index","_val","_Truck","_FuelTrucks","_FuelStuff"];

      Etwas weiter unten sucht ihr nach if(_ctrl == "goldbar" && {!(life_trunk_vehicle und fügt direkt darunter folgendes ein:

      Code
      _Truck = TypeOf life_trunk_vehicle;
      _FuelStuff = ["oilu","oilp"]; //Wich Items can be stored in?
      _FuelTrucks = ["C_Van_01_fuel_F","B_Truck_01_fuel_F","O_Truck_02_fuel_F","O_Truck_03_fuel_F"]; //Fuel Trucks, who are allowed to carry fuel
      
      
      
      
      switch (true) do
      {
      case ((_ctrl in _FuelStuff) && (_Truck in _FuelTrucks)): {life_TankLaster = 1}; //Fuel in FuelTruck -> Allowed
      case (!(_ctrl in _FuelStuff) && !(_Truck in _FuelTrucks)): {life_TankLaster = 2}; //NonFuel in NonFuelTruck -> Allowed
      case (!(_ctrl in _FuelStuff) && (_Truck in _FuelTrucks)): {life_TankLaster = 3}; //NonFuel in FuelTruck -> Nope
      case ((_ctrl in _FuelStuff) && !(_Truck in _FuelTrucks)): {life_TankLaster = 4}; //Fuel in NonFuelTruck -> Nope!
      };
      Alles anzeigen


      und direkt darunter diesen code:

      Code
      if (life_TankLaster == 3) exitWith {hint "Du kannst nur Öl oder Kerosin in einen Tanklaster füllen!)"};
      if (life_TankLaster == 4) exitWith {hint "Du kannst Öl oder Kerosin NUR in einen Tanklaster füllen!)";};

      Vergesst nicht nachzuschauen, ob ihr auch in der core\config\fn_vehicleListCfg auch die dafür benötigten Fahrzeuge eingetragen sind.

      In der core/config/fn_vehicleWeightCfg.sqf der classname und das Gewicht noch mitangeben.

      Hier nochmals die Fahrzeuge:

      C_Van_01_fuel_F
      B_Truck_01_fuel_F
      O_Truck_02_fuel_F
      O_Truck_03_fuel_F

      Getestet wurde das alles auf der 3.1.4, und läuft ohne probleme.

      Viel spaß 8)

      MfG
      Noldy


      PS: Morgen oder so, erkläre ich euch noch wie ihr für euer Öl eine Pumpe braucht und keine Spitzhacke mehr.

    • [Tutorial] Cop Lizenzen entnehmen 3.1.4.8

      • Noldy
      • 9. August 2015 um 05:41

      Hallo

      Mit diesem Tutorial kann man als Cop Lizezen von Spieler entziehen.

      1. Erstellt eine neue datei namens revoke_license.h in den dialog Ordner mit folgendem Inhallt:

      Code
      #define BGX 0.35
      #define BGY 0.2
      #define BGW 0.3
      
      
      
      
      class revokeLicense_Menu
      {
      	idd = 41000;
      	movingEnable = false;
      	enableSimulation = true;
      
      	class controlsBackground {
      		class RscTitleBackground:life_RscText 
      		{
      			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])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"};
      			idc = -1;
      			x = BGX;
      			y = BGY;
      			w = BGW;
      			h = (1 / 25);
      		};
      
      		class MainBackground : life_RscText
      		{
      			idc = -1;
      			colorBackground[] = {0,0,0,0.7};
      			x = BGX;
      			y = BGY + (11 / 250);
      			w = BGW;
      			h = 0.6 - (22 / 250);
      		};
      
      		class Title : life_RscTitle
      		{
      			colorBackground[] = {0,0,0,0};
      			idc = 41001;
      			text = "Dpt. of Motor Vehicles";
      			x = BGX;
      			y = BGY;
      			w = BGW;
      			h = (1 / 25);
      		};
      	};
      
      	class controls {
      
      
      
      
      		class ButtonClose : life_RscButtonMenu 
      		{
      			idc = -1;
      			text = "Close";
      			onButtonClick = "closeDialog 0;";
      			x = BGX;
      			y = 0.8 - (1 / 25);
      			w = (6.25 / 40);
      			h = (1 / 25);
      		};
      
      
      
      
      		class ButtonOne : life_RscButtonMenu
      		{
      			idc = 41002;
      			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};
      			text = "Driver License";
      			sizeEx = 0.025;
      			x = BGX + 0.03;
      			y = BGY + 0.07;
      			w = 0.24;
      			h = 0.038;
      		};
      
      		class ButtonTwo : life_RscButtonMenu
      		{
      			idc = 41003;
      			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};
      			text = "Truck License";
      			sizeEx = 0.025;
      			x = BGX + 0.03;
      			y = BGY + 0.12;
      			w = 0.24;
      			h = 0.038;
      		};
      
      		class ButtonThree : life_RscButtonMenu
      		{
      			idc = 41004;
      			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};
      			text = "Pilot License";
      			sizeEx = 0.025;
      			x = BGX + 0.03;
      			y = BGY + 0.17;
      			w = 0.24;
      			h = 0.038;
      		};
      
      		class ButtonFour : life_RscButtonMenu
      		{
      			idc = 41005;
      			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};
      			text = "Boating License";
      			sizeEx = 0.025;
      			x = BGX + 0.03;
      			y = BGY + 0.22;
      			w = 0.24;
      			h = 0.038;
      		};
      
      		class ButtonFive : life_RscButtonMenu
      		{
      			idc = 41006;
      			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};
      			text = "Diving License";
      			sizeEx = 0.025;
      			x = BGX + 0.03;
      			y = BGY + 0.27;
      			w = 0.24;
      			h = 0.038;
      		};
      
      		class ButtonSix : life_RscButtonMenu
      		{
      			idc = 41007;
      			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};
      			text = "Taxi License";
      			sizeEx = 0.025;
      			x = BGX + 0.03;
      			y = BGY + 0.32;
      			w = 0.24;
      			h = 0.038;
      		};
      
      		class ButtonSeven : life_RscButtonMenu
      		{
      			idc = 41008;
      			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};
      			text = "All Licenses";
      			sizeEx = 0.025;
      			x = BGX + 0.03;
      			y = BGY + 0.37;
      			w = 0.24;
      			h = 0.038;
      		};
      	};
      };
      Alles anzeigen

      2. Öffnet eure dialog\MasterHandler.h und fügt folgendes hinzu:

      Code
      #include "revoke_license.h"

      3. Öffnet eure stringtable.xml und fügt folgendes dazu:

      Code
      <Key ID="STR_pInAct_RevokeLicense">
                  <Orignal>Lizenzen entziehen</Orignal>
              </Key>
              <Key ID="STR_Civ_RevokeLicense_Driver">
                  <Original>Dein Führerschein wurde von der Polizei beschlagnahmt!</Original>
              </Key>
              <Key ID="STR_Civ_RevokeLicense_Truck">
                  <Original>Dein LKW Führerschein wurde von der Polizei beschlagnahmt!</Original>
              </Key>
              <Key ID="STR_Civ_RevokeLicense_Pilot">
                  <Original>Dein Flugschein wurde von der Polizei beschlagnahmt!</Original>
              </Key>
              <Key ID="STR_Civ_RevokeLicense_Boating">
                  <Original>Dein Bootsschein wurde von der Polizei beschlagnahmt!</Original>
              </Key>
              <Key ID="STR_Civ_RevokeLicense_Diving">
                  <Original>Deine Taucherlizez wurde von der Polizei beschlagnahmt!</Original>
              </Key>
              <Key ID="STR_Civ_RevokeLicense_Taxi">
                  <Original>Dein Taxischein wurde von der Polizei beschlagnahmt!</Original>
              </Key>
              <Key ID="STR_Civ_RevokeLicense_AllMotor">
                  <Original>Alle deine Fahrlizenzen wurde von der Polizei beschlagnahmt!</Original>
              </Key>
      Alles anzeigen

      4. Öffnet eure dialog/pInteraction.h und fügt folgendes dazu:

      Code
      class ButtonEight : life_RscButtonMenu
      		{
      			idc = 37457;
      			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};
      			text = "";
      			sizeEx = 0.025;
      			x = BGX + 0.03;
      			y = BGY + 0.42;
      			w = 0.24;
      			h = 0.038;
      		};
      Alles anzeigen


      Solltet ihr schon dieser Eintrag haben, z.b. Alkoholtester dann einfach class ButtonNine erstellen.

      5. Öffnet eure Functions.h und fügt folgendes unter Class Player_Menu hinzu:

      Code
      class revokeLicense {};

      6. Öffnet eure core/cop/fn_copInteractionMenu.sqf und bearbeitet folgendes:
      Unter private

      Code
      ,"_Btn8"];


      Etwas weiter unten folgendes einfügen

      Code
      _Btn8 = _display displayCtrl Btn8;


      Noch etwas weiter unten das hier

      Code
      _Btn8 ctrlShow false;


      Wieder etwas weiter unten

      Code
      _Btn8 = _display displayCtrl Btn8;


      Als letztes ganz unten das hier

      Code
      _Btn8 ctrlSetText localize "STR_pInAct_RevokeLicense";
      _Btn8 buttonSetAction "[life_pInact_curTarget] call life_fnc_revokeLicense;";


      Solltet ihr schon der Button 8 haben, einfach alles gleich machen nur mit der 9

      7. Öffnet eure core/civilian/fn_removeLicenses.sqf und fügt folgendes hinzu:

      Code
      // Revoking Licenses
      
      	// Führerschein Lizenz
      	case 10:
      	{
      		license_civ_driver = false;
      		hint localize "STR_Civ_RevokeLicense_Driver";
      	};
      	// LKW Führerschein Lizenz
      	case 11:
      	{
      		license_civ_truck = false;
      		hint localize "STR_Civ_RevokeLicense_Truck";
      	};
      	// Pilotenschein Lizenz
      	case 12:
      	{
      		license_civ_air = false;
      		hint localize "STR_Civ_RevokeLicense_Pilot";
      	};
      	// Bootsschein Lizenz
      	case 13:
      	{
      		license_civ_boat = false;
      		hint localize "STR_Civ_RevokeLicense_Boating";
      	};
      	// Taucherschein Lizenz
      	case 14:
      	{
      		license_civ_dive = false;
      		hint localize "STR_Civ_RevokeLicense_Diving";
      	};
      	// Taxischein Lizenz
      	case 15:
      	{
      		license_civ_taxi = false;
      		hint localize "STR_Civ_RevokeLicense_Taxi";
      	};
      	// Alle Scheine
      	case 16:
      	{
      		license_civ_driver = false;
      		license_civ_truck = false;
      		license_civ_air = false;
      		license_civ_boat = false;
      		license_civ_air = false;
      		license_civ_dive = false;
      		license_civ_taxi = false;
      		hint localize "STR_Civ_RevokeLicense_AllMotor";
      	};
      Alles anzeigen

      8. Erstellt eine neue datei namens fn_revokeLicense.sqf in euren core/pmenu Ordner mit folgendem Inhallt:

      Code
      /*
      	File: fn_revokeLicense.sqf
      	Author: Michael Francis
      
      	Description:
      	Allows cops to revoke individual licenses, or all licenses. Vehicle related only.
      */
      private["_display","_curTarget","_Btn1","_Btn2","_Btn3","_Btn4","_Btn5","_Btn6","_Btn7"];
      createDialog "revokeLicense_Menu";
      disableSerialization;
      _curTarget = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param;
      if(isNull _curTarget) exitWith {hint "Wrong target!"; closeDialog 0;}; //Bad target
      if(!isPlayer _curTarget && side _curTarget == civilian) exitWith {hint "Cannot perform this action!"; closeDialog 0;}; //Bad side check?
      
      
      
      
      _display = findDisplay 41000;
      _Btn1 = _display displayCtrl 41002;
      _Btn2 = _display displayCtrl 41003;
      _Btn3 = _display displayCtrl 41004;
      _Btn4 = _display displayCtrl 41005;
      _Btn5 = _display DisplayCtrl 41006;
      _Btn6 = _display DisplayCtrl 41007;
      _Btn7 = _display DisplayCtrl 41008;
      life_pInact_curTarget = _curTarget;
      
      
      
      
      //Führerschein Lizenz
      _Btn1 buttonSetAction "[[10],""life_fnc_removeLicenses"",life_pInact_curTarget,FALSE] spawn life_fnc_MP; closeDialog 0;";
      
      
      
      
      //LKW Führerschein Lizenz
      _Btn2 buttonSetAction "[[11],""life_fnc_removeLicenses"",life_pInact_curTarget,FALSE] spawn life_fnc_MP; closeDialog 0;";
      
      
      
      
      //Pilotenschein Lizenz
      _Btn3 buttonSetAction "[[12],""life_fnc_removeLicenses"",life_pInact_curTarget,FALSE] spawn life_fnc_MP; closeDialog 0;";
      
      
      
      
      //Bootsschein Lizenz
      _Btn4 buttonSetAction "[[13],""life_fnc_removeLicenses"",life_pInact_curTarget,FALSE] spawn life_fnc_MP; closeDialog 0;";
      
      
      
      
      //Diving License
      _Btn5 buttonSetAction "[[14],""life_fnc_removeLicenses"",life_pInact_curTarget,FALSE] spawn life_fnc_MP; closeDialog 0;";
      
      
      
      
      //Taxi Lizenz
      _Btn6 buttonSetAction "[[15],""life_fnc_removeLicenses"",life_pInact_curTarget,FALSE] spawn life_fnc_MP; closeDialog 0;";
      
      
      
      
      //Alle Scheine
      _Btn7 buttonSetAction "[[16],""life_fnc_removeLicenses"",life_pInact_curTarget,FALSE] spawn life_fnc_MP; closeDialog 0;";
      Alles anzeigen

      Viel spaß. :thumbup:

    • [Tutorial] Shop erstellen 3.1.4

      • Noldy
      • 9. August 2015 um 05:41

      Hallo GG Community,

      Heute zeige ich euch, wie ihr neue Shops ganz einfach erstellen könnt.

      Als beispiel nehm ich jetzt den ADAC Shop.

      1. Ihr geht in eure core/config/fn_virt_shops.sqf datei und öffnet diese.
      Meine sieht so aus:

      Code
      /*
          File: fn_virt_shops.sqf
          Author: Bryan "Tonic" Boardwine
      
          Description:
          Config for virtual shops.
      */
      private["_shop"];
      _shop = _this select 0;
      
      
      
      
      switch (_shop) do
      {
          case "market": {["Markt",["water","rabbit","apple","traubenu","traubenp","redgull","tbacon","lockpick","pickaxe","fuelF","peach","storage1","storage2","battery"]]};
          case "wongs": {["Wong's Food Cart",["turtlesoup","turtle"]]};
          case "coffee": {["Stratis Coffee Club",["coffee","donuts"]]};
          case "heroin": {["Drug Dealer",["cocainep","heroinp","marijuana"]]};
          case "oil": {["Oil Trader",["oilp","pickaxe","fuelF"]]};
          case "fishmarket": {["Altis Fish Market",["salema","ornate","mackerel","mullet","tuna","catshark"]]};
          case "glass": {["Altis Glass Dealer",["glass"]]};
          case "iron": {["Altis Industrial Trader",["iron_r","copper_r"]]};
          case "diamond": {["Diamond Dealer",["diamond","diamondc","silberp","goldp"]]};
          case "salt": {["Salt Dealer",["salt_r"]]};
          case "cop": {["Cop Item Shop",["donuts","coffee","spikeStrip","water","rabbit","apple","redgull","fuelF"]]};
          case "cement": {["Cement Dealer",["cement"]]};
          case "pmetal": {["Barren Händler", ["copper_r","silberp","goldp"]]};
          case "adac": {["ADAC Markt", ["fuelF","water","redgull","rabbit","apple","tbacon","peach"], ["adac"]]};
      };
      Alles anzeigen

      Wichtig ist gerade nur der Punkt:

      Code
      case "adac": {["ADAC Markt", ["fuelF","water","redgull","rabbit","apple","tbacon","peach"], ["adac"]]};

      case "adac": {["ADAC Markt", ["fuelF","water","redgull","rabbit","apple","tbacon","peach"], ["adac"]]};

      Rot= Shopname für die INIT wo ihr dem NPC geben müsst.
      Blau= Der Shopname wo Ingame angezeigt wird.
      Grün= Die Items, wo man im Shop alles kaufen kann.
      In meinem fall, kann man im ADAC Markt folgendes kaufen:
      Voller Benzinkanister,Wasserflasche,Redgull,Hasenfleisch,Apfel,Tactical Bacon und Pfirsiche.

      Hier noch die Init, wo ihr dem NPC dafür geben müsst:

      Code
      this enableSimulation false; this allowDamage false; this addAction["ADAC Markt",life_fnc_virt_menu,"adac"];

      2. Jetzt zeige ich euch noch, wie ihr einen Zubehör Shop extra für den ADAC noch miteinbauen könnt. Dafür geht ihr wie folgt vor. Öffnet eure core/config/fn_weaponShopCfg.sqf und kopiert folgendes hinzu:

      Code
      case "adac_zubehör":
      {
      switch (true) do
      {
      case (playerSide != east): {"Du bist nicht vom ADAC !!"};
      default {
      ["ADAC Zubehör Shop",
      [
      ["ItemGPS",nil,100],
      ["Binocular",nil,150],
      ["ToolKit",nil,250],
      ["FirstAidKit",nil,150],
      ["NVGoggles",nil,1200],
      ["Chemlight_yellow",nil,300],
      ["Chemlight_green",nil,300],
      ["Chemlight_blue",nil,300]
      ]
      ];
      };
      };
      }; 
      };
      Alles anzeigen


      Hier wieder ähnlich wie vorhin, adac_zubehör für die INIT wo ihr dem NPC geben müsst und ADAC Zubehör Shop der Shopname Ingame.
      Ihr könnt hier natürlich auch andere Items hinzufügen, in meinem fall kann man hier folgendes kaufen:
      GPS,Fernglass,Repairkit,Medikit,nachtsichtgerät und die glühstäbchen verschiedener farben ^^

      Nun gibt ihr folgenden INIT befehl dem NPC:

      Code
      this enableSimulation false; this allowDamage false; this addAction["ADAC Zubehör",life_fnc_weaponShopMenu,"adac_zubehör"];

      Jetzt habt ihr 2 Shops, die nur der ADAC benutzen kann.
      Was natürlich besser aussieht ist, wenn ihr beide Shops einem NPC zuweisst.
      Dafür gebt ihr folgenden INIT Befehl ein:

      Code
      this enableSimulation false; this allowDamage false; this addAction["ADAC Markt",life_fnc_virt_menu,"adac"]; this addAction["ADAC Zubehör",life_fnc_weaponShopMenu,"adac_zubehör"];

      Das war es auch schon. ^^

      Getestet wurde das alles auf der Version 3.1.3 aber ich glaube bei der Version 3.1.2 ist es genau das selbe ;)

      Hoffe konnte euch helfen.

      Bei fragen steh ich gerne zur verfügung.

      Ergebniss:

      MfG
      Noldy

    • [Tutorial] BlackJack

      • Noldy
      • 9. August 2015 um 05:39

      Hallo GG Community,

      Hier noch ein passendes Script zu [Tutorial] Slot Maschine (Spielautomat)

      Ich bin nicht der Author, sondern PapaBear. Also habt so viel respekt, und entfernt ihn nicht als Author!

      Fangen wir mal an.

      1. Öffnet euren dialog Ordner und erstellt eine neue Datei namens blackjack.hpp mit folgendem Inhallt:

      Code
      #define GUI_GRID_X    (0)
      #define GUI_GRID_Y    (0)
      #define GUI_GRID_W    (0.025)
      #define GUI_GRID_H    (0.04)
      #define GUI_GRID_WAbs    (1)
      #define GUI_GRID_HAbs    (1)
      class BlackjackGUI
      {
          idd = 5980;
          name="black_jack";
          movingEnabled = 0;
          enableSimulation = 1;
          onLoad = "";
      
          class controlsBackground
          {
      
              class RscFrame_1800: life_RscText
              {
                  idc = 5981;
                  colorBackground[] = {0,0,0,0.7};
                  x = 3 * GUI_GRID_W + GUI_GRID_X;
                  y = 1.5 * GUI_GRID_H + GUI_GRID_Y;
                  w = 31 * GUI_GRID_W;
                  h = 20.5 * GUI_GRID_H;
              };
      
              class RscText_1000: life_RscText
              {
                  idc = 5988;
                  text = "Gegner"; //--- ToDo: Localize;
                  x = 5 * GUI_GRID_W + GUI_GRID_X;
                  y = 3 * GUI_GRID_H + GUI_GRID_Y;
                  w = 5 * GUI_GRID_W;
                  h = 2 * GUI_GRID_H;
              };
              class RscText_1001: life_RscText
              {
                  idc = 5989;
                  text = "Du"; //--- ToDo: Localize;
                  x = 20 * GUI_GRID_W + GUI_GRID_X;
                  y = 3 * GUI_GRID_H + GUI_GRID_Y;
                  w = 6 * GUI_GRID_W;
                  h = 2 * GUI_GRID_H;
              };
      
              class RscText_1012: life_RscText
              {
                  idc = 5999;
                  text = "BLACKJACK"; //--- ToDo: Localize;
                  x = 9 * GUI_GRID_W + GUI_GRID_X;
                  y = 1 * GUI_GRID_H + GUI_GRID_Y;
                  w = 18.5 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
                  sizeEx = 3 * GUI_GRID_H;
              };
              class RscText_1013: life_RscText
              {
                  idc = 6000;
                  text = "Gewonnen: $"; //--- ToDo: Localize;
                  x = 5.5 * GUI_GRID_W + GUI_GRID_X;
                  y = 15 * GUI_GRID_H + GUI_GRID_Y;
                  w = 5 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
          };
      
          class controls
          {
              class STAY_BTN: life_RscButtonMenu
              {
                  idc = 5982;
                  text = "Keine Karte"; //--- ToDo: Localize;
                  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};
                  onButtonClick = "[] spawn life_fnc_BJstay;";
                  x = 20 * GUI_GRID_W + GUI_GRID_X;
                  y = 14.5 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
              class HIT_BTN: life_RscButtonMenu
              {
                  idc = 5983;
                  text = "Eine Karte"; //--- ToDo: Localize;
                  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};
                  onButtonClick = "[] spawn life_fnc_BJhit;";
                  x = 27 * GUI_GRID_W + GUI_GRID_X;
                  y = 14.5 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
              class TOTAL: life_RscText
              {
                  idc = 6007;
                  text = "Total: "; //--- ToDo: Localize;
                  x = 28 * GUI_GRID_W + GUI_GRID_X;
                  y = 10.5 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
              class BET_5K: life_RscButtonMenu
              {
                  idc = 5984;
                  text = "5000$"; //--- ToDo: Localize;
                  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};
                  onButtonClick = "[5000] spawn life_fnc_BJbet;";
                  x = 6 * GUI_GRID_W + GUI_GRID_X;
                  y = 19 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
              class BET_10K: life_RscButtonMenu
              {
                  idc = 5985;
                  text = "10000$"; //--- ToDo: Localize;
                  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};
                  onButtonClick = "[10000] spawn life_fnc_BJbet;";
                  x = 13 * GUI_GRID_W + GUI_GRID_X;
                  y = 19 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
              class BET_25K: life_RscButtonMenu
              {
                  idc = 5986;
                  text = "25000$"; //--- ToDo: Localize;
                  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};
                  onButtonClick = "[25000] spawn life_fnc_BJbet;";
                  x = 20 * GUI_GRID_W + GUI_GRID_X;
                  y = 19 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
              class BET_50K: life_RscButtonMenu
              {
                  idc = 5987;
                  text = "50000$"; //--- ToDo: Localize;
                  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};
                  onButtonClick = "[50000] spawn life_fnc_BJbet;";
                  x = 27 * GUI_GRID_W + GUI_GRID_X;
                  y = 19 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
      
              class Dealer_Card_1: life_RscText
              {
                  idc = 5990;
                  x = 5 * GUI_GRID_W + GUI_GRID_X;
                  y = 5 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
              class Dealer_Card_2: life_RscText
              {
                  idc = 5991;
                  x = 9.5 * GUI_GRID_W + GUI_GRID_X;
                  y = 5 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
              class Player_Card_1: life_RscText
              {
                  idc = 5992;
                  x = 20.5 * GUI_GRID_W + GUI_GRID_X;
                  y = 5 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
              class Player_Card_2: life_RscText
              {
                  idc = 5993;
                  x = 24.5 * GUI_GRID_W + GUI_GRID_X;
                  y = 5 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
              class Player_Card_3: life_RscText
              {
                  idc = 5994;
                  x = 28.5 * GUI_GRID_W + GUI_GRID_X;
                  y = 5 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
              class Dealer_Card_4: life_RscText
              {
                  idc = 5995;
                  x = 5 * GUI_GRID_W + GUI_GRID_X;
                  y = 8 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
              class Dealer_Card_5: life_RscText
              {
                  idc = 5996;
                  x = 9.5 * GUI_GRID_W + GUI_GRID_X;
                  y = 8 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
              class Player_Card_4: life_RscText
              {
                  idc = 5997;
                  x = 20.5 * GUI_GRID_W + GUI_GRID_X;
                  y = 8 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
              class Player_Card_5: life_RscText
              {
                  idc = 5998;
                  x = 24.5 * GUI_GRID_W + GUI_GRID_X;
                  y = 8 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
      
              class Winnings: life_RscText
              {
                  idc = 6001;
                  x = 11 * GUI_GRID_W + GUI_GRID_X;
                  y = 15 * GUI_GRID_H + GUI_GRID_Y;
                  w = 5 * GUI_GRID_W;
                  h = 2.5 * GUI_GRID_H;
              };
              class EXIT_BTN: life_RscButtonMenu
              {
                  idc = 6002;
                  text = "EXIT"; //--- ToDo: Localize;
                  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};
                  onButtonClick = "closeDialog 0;";
                  x = 30 * GUI_GRID_W + GUI_GRID_X;
                  y = 1.5 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 1 * GUI_GRID_H;
              };
              class RscText_1015: life_RscText
              {
                  idc = 6003;
                  text = "Bet"; //--- ToDo: Localize;
                  x = 7 * GUI_GRID_W + GUI_GRID_X;
                  y = 18 * GUI_GRID_H + GUI_GRID_Y;
                  w = 2 * GUI_GRID_W;
                  h = 1 * GUI_GRID_H;
              };
              class RscText_1016: life_RscText
              {
                  idc = 6004;
                  text = "Bet"; //--- ToDo: Localize;
                  x = 14 * GUI_GRID_W + GUI_GRID_X;
                  y = 18 * GUI_GRID_H + GUI_GRID_Y;
                  w = 2 * GUI_GRID_W;
                  h = 1 * GUI_GRID_H;
              };
              class RscText_1017: life_RscText
              {
                  idc = 6005;
                  text = "Bet"; //--- ToDo: Localize;
                  x = 21 * GUI_GRID_W + GUI_GRID_X;
                  y = 18 * GUI_GRID_H + GUI_GRID_Y;
                  w = 2 * GUI_GRID_W;
                  h = 1 * GUI_GRID_H;
              };
              class RscText_1018: life_RscText
              {
                  idc = 6006;
                  text = "Bet"; //--- ToDo: Localize;
                  x = 28 * GUI_GRID_W + GUI_GRID_X;
                  y = 18 * GUI_GRID_H + GUI_GRID_Y;
                  w = 2 * GUI_GRID_W;
                  h = 1 * GUI_GRID_H;
              };
          };
      };
      Alles anzeigen

      2. Öffnet im selben Ordner die Datei masterhandler und fügt folgendes hinzu:

      Code
      #include "blackjack.hpp"

      3. Öffnet eure function.h und fügt folgendes unter class shops hinzu:

      Code
      class blackjack {};
      class BJbet {};
      class BJhit {};
      class BJstay {};

      4. Öffnet euren Ordner core\shops und erstellt eine neue Datei namens fn_blackjack.sqf mit folgendem Inhallt:

      Code
      /*
          File: fn_blackjack.sqf
          Description: Blackjack
          Created by Blacklistgaming.org
              Coder: PapaBear
      */
      
      
      
      
      if(!dialog) then {
          createDialog "BlackjackGUI";
      };
      disableSerialization;
      
      
      
      
      _display = findDisplay 5980;
      _Hit = _display displayCtrl 5983;
      _Stay = _display displayCtrl 5982;
      
      
      
      
      _Hit ctrlEnable false;
      _Stay ctrlEnable false;
      
      
      
      
      _bet1 = _display displayCtrl 5984;
      _bet2 = _display displayCtrl 5985;
      _bet3 = _display displayCtrl 5986;
      _bet4 = _display displayCtrl 5987;
      
      
      
      
      _bet1 ctrlEnable true;
      _bet2 ctrlEnable true;
      _bet3 ctrlEnable true;
      _bet4 ctrlEnable true;
      Alles anzeigen

      5. Im selben Ordner eine neue Datei erstellen namens fn_BJbet.sqf mit folgendem Inhallt:

      Code
      /*
          File: fn_BJbet.sqf
          Description: Blackjack
          Created by Blacklistgaming.org
              Coder: PapaBear
      */
      
      
      
      
      private ["_betamt"];
      _betamt = [_this,0,1,[0]] call BIS_fnc_param;
      disableSerialization;
      _display = findDisplay 5980;
      
      
      
      
      if(life_cash < _betamt) exitWith {hint format["You don't have enough money to play (%1$)",_betamt];};
      life_cash = life_cash - _betamt;
      
      
      
      
      _Pcard1 = _display displayCtrl 5992;
      _Pcard2 = _display displayCtrl 5993;
      _Pcard3 = _display displayCtrl 5994;
      _Pcard4 = _display displayCtrl 5997;
      _Pcard5 = _display displayCtrl 5998;
      _Dcard1 = _display displayCtrl 5990;
      _Dcard2 = _display displayCtrl 5991;
      _Dcard3 = _display displayCtrl 5995;
      _Dcard4 = _display displayCtrl 5996;
      _bet1 = _display displayCtrl 5984;
      _bet2 = _display displayCtrl 5985;
      _bet3 = _display displayCtrl 5986;
      _bet4 = _display displayCtrl 5987;
      _Stay = _display displayCtrl 5982;
      _Hit = _display displayCtrl 5983;
      _TOTALTXT = _display displayCtrl 6007;
      
      
      
      
          _Pcard1 ctrlSetText "";
          _Pcard2 ctrlSetText "";
          _Pcard3 ctrlSetText "";
          _Pcard4 ctrlSetText "";
          _Pcard5 ctrlSetText "";
          _Dcard1 ctrlSetText "";
          _Dcard2 ctrlSetText "";
          _Dcard3 ctrlSetText "";
          _Dcard4 ctrlSetText "";
          _TOTALTXT ctrlSetText "Total: ";
      
      
      
      
      _bet5KTEXT = _display displayCtrl 6003;
      _bet10KTEXT = _display displayCtrl 6004;
      _bet25KTEXT = _display displayCtrl 6005;
      _bet50KTEXT = _display displayCtrl 6006;
      _total = 0;
      _bet1 ctrlEnable false;
      _bet2 ctrlEnable false;
      _bet3 ctrlEnable false;
      _bet4 ctrlEnable false;
      _Hit ctrlEnable false;
      _Stay ctrlEnable false;
      
      
      
      
      switch ( _betamt ) do 
      {
          case 5000:  { _bet10KTEXT ctrlSetText ""; _bet25KTEXT ctrlSetText ""; _bet50KTEXT ctrlSetText ""; };
          case 10000: { _bet5KTEXT ctrlSetText ""; _bet25KTEXT ctrlSetText ""; _bet50KTEXT ctrlSetText ""; };
          case 25000: { _bet10KTEXT ctrlSetText ""; _bet5KTEXT ctrlSetText ""; _bet50KTEXT ctrlSetText ""; };
          case 50000: { _bet10KTEXT ctrlSetText ""; _bet25KTEXT ctrlSetText ""; _bet5KTEXT ctrlSetText ""; };
          default { _bet10KTEXT ctrlSetText ""; _bet25KTEXT ctrlSetText ""; _bet50KTEXT ctrlSetText ""; }
      };
      
      
      
      
      // give dealer 1 card, other is XX 
      // give player 2 cards
      
      
      
      
      _number = ceil(random 11);
      _number = _number + 2;
      
      
      
      
      if ( _number == 11 OR _number == 12 ) then
      {
          _number = 10;
      
      
      
      
      }
      else 
      {
          if( _number == 13 ) then
          {
              _number = "ACE";
          };
      
      
      
      
      };
      
      
      
      
      _Pcard1 ctrlSetText format["%1",_number];
      
      
      
      
      sleep 0.5;
      
      
      
      
      _number = ceil(random 11);
      _number = _number + 2;
      
      
      
      
      if ( _number == 11 OR _number == 12 ) then
      {
          _number = 10;
      
      
      
      
      }
      else 
      {
          if( _number == 13 ) then
          {
              _number = "ACE";
          };
      
      
      
      
      };
      
      
      
      
      _Dcard1 ctrlSetText format["%1",_number];
      
      
      
      
      sleep 0.5;
      
      
      
      
      _number = ceil(random 11);
      _number = _number + 2;
      
      
      
      
      if ( _number == 11 OR _number == 12 ) then
      {
          _number = 10;
      
      
      
      
      }
      else 
      {
          if( _number == 13 ) then
          {
              _number = "ACE";
          };
      
      
      
      
      };
      
      
      
      
      _Pcard2 ctrlSetText format["%1",_number];
      
      
      
      
      _P1 = ctrlText _Pcard1;
      _P2 = ctrlText _Pcard2;
      _D1 = ctrlText _Dcard1;
      
      
      
      
      sleep 0.5;
      _winnings = _display displayCtrl 6001;
      _total = 0;
      if( _P1 == "ACE" ) then
      {
          if( _P2 == "10" ) then
          {
              _total = 21;
          }else
          {
              if( _P2 == "ACE" ) then
              {
                  _total = 12;
              }
              else
              {
                  _total = 11 + (parseNumber _P2);
              };
          };
      }
      else
      {
          if( _P2 == "ACE" ) then
          {
              if( _P1 == "10" ) then 
              {
                  _total = 21;
              }
              else
              {
                  if( _P1 == "ACE" ) then
                  {
                      _total = 12;
                  }
                  else
                  {
                      _total = 11 + (parseNumber _P1);
                  };
      
              };
          }
          else
          {
              _total = (parseNumber _P1) + (parseNumber _P2);
      
          };
      
      
      
      
      };
      
      
      
      
      _TOTALTXT ctrlSetText format["%1",_total];
      
      
      
      
      if( _total == 21 ) then 
      { 
          _win = 4 * _betamt;
          life_cash = life_cash + _win;
          _winnings ctrlSetText format["%1",_win];
      
          _bet1 ctrlEnable true;
          _bet2 ctrlEnable true;
          _bet3 ctrlEnable true;
          _bet4 ctrlEnable true;
      }
      else
      {
      
      
      
      
          _number = ceil(random 11);
          _number = _number + 2;
      
      
      
      
          //check if dealer got ace and then a 10.
          //10 then ace?
      
          if( _number == 13 ) then
          {
              _number = "ACE";
              if( _D1 == "10" ) then
              {        
                  _Dcard2 ctrlSetText format["%1",_number];
                  _winnings = _display displayCtrl 6001;
                  _winnings ctrlSetText "You Lose. Dealer got Black Jack.";
                  _bet1 ctrlEnable true;
                  _bet2 ctrlEnable true;
                  _bet3 ctrlEnable true;
                  _bet4 ctrlEnable true;
              }
              else
              {
                  _Dcard2 ctrlSetText "XX";
              };
          }
          else
          {
              if( _D1 == "ACE" ) then 
              {
                  if( _number == 10 ) then 
                  {
                      _Dcard2 ctrlSetText format["%1",_number];
                      _winnings = _display displayCtrl 6001;
                      _winnings ctrlSetText "You Lose. Dealer got Black Jack.";
                      _bet1 ctrlEnable true;
                      _bet2 ctrlEnable true;
                      _bet3 ctrlEnable true;
                      _bet4 ctrlEnable true;
                  }
                  else
                  {
                      _Dcard2 ctrlSetText "XX";
                  };
      
              }
              else
              {
                  _Dcard2 ctrlSetText "XX";
              };
      
          };
      
      
      
      
          _Hit ctrlEnable true;
          _Stay ctrlEnable true;
      
      
      
      
      };
      Alles anzeigen

      6. immernoch im gleichen Ordner eine neue Datei erstellen namens fn_BJstay.sqf mit folgendem Inhallt:

      Code
      /*
          File: fn_BJstay.sqf
          Description: Blackjack
          Created by Blacklistgaming.org
              Coder: PapaBear
      */
      //stay
      //calculate value of player
      //reveal dealer
      //if dealer higher, lose
      //if dealer lower, dealer hit.
      //check dealer value, win/lose hits.
      
      
      
      
      disableSerialization;
      _display = findDisplay 5980;
      
      
      
      
      //setup variables
      _Pcard1 = _display displayCtrl 5992;
      _Pcard2 = _display displayCtrl 5993;
      _Pcard3 = _display displayCtrl 5994;
      _Pcard4 = _display displayCtrl 5997;
      _Dcard1 = _display displayCtrl 5990;
      _Dcard2 = _display displayCtrl 5991;
      _Dcard3 = _display displayCtrl 5995;
      _Dcard4 = _display displayCtrl 5996;
      _TOTALTXT = _display displayCtrl 6007;
      _bet5KTEXT = _display displayCtrl 6003;
      _bet10KTEXT = _display displayCtrl 6004;
      _bet25KTEXT = _display displayCtrl 6005;
      _bet50KTEXT = _display displayCtrl 6006;
      _betamt = 0;
      
      
      
      
      if( (ctrlText _bet5KText) != "" ) then
      {
          _betamt = 5000;
      }
      else
      {
          if( (ctrlText _bet10KText) != "" ) then
          {
              _betamt = 10000;
          }
          else
          {
              if( (ctrlText _bet25KText) != "" ) then
              {
                  _betamt = 25000;
              }
              else
              {
                  _betamt = 50000;
              };
          };
      };
      
      
      
      
      _bet1 = _display displayCtrl 5984;
      _bet2 = _display displayCtrl 5985;
      _bet3 = _display displayCtrl 5986;
      _bet4 = _display displayCtrl 5987;
      _Stay = _display displayCtrl 5982;
      _Hit = _display displayCtrl 5983;
      _winnings = _display displayCtrl 6001;
      _bet1 ctrlEnable false;
      _bet2 ctrlEnable false;
      _bet3 ctrlEnable false;
      _bet4 ctrlEnable false;
      _Hit ctrlEnable false;
      _Stay ctrlEnable false;
      
      
      
      
      _P1T = ctrlText _Pcard1;
      _P2T = ctrlText _Pcard2;
      _P3T = ctrlText _Pcard3;
      _P4T = ctrlText _Pcard4;
      _D1T = ctrlText _Dcard1;
      
      
      
      
      _gameover = false;
      _totalPlayer = 0;
      _totalDealer = 0;
      _totalDealer2 = 0;
      _totalDealer3 = 0;
      _totalDealer4 = 0;
      _totalPlayer = ctrlText _TOTALTXT;
      _totalPlayer = parseNumber _totalPlayer;
      _totalDealer = 0;
      _win = 0;
      
      
      
      
      _number = ceil(random 11);
      _number = _number + 2;
      
      
      
      
      if ( _number == 11 OR _number == 12 ) then
      {
          _number = 10;
      
      
      
      
      }
      else 
      {
          if( _number == 13 ) then
          {
              _number = 10;
          };
      
      
      
      
      };
      
      
      
      
      _Dcard2 ctrlSetText format["%1",_number];
      
      
      
      
      if( _D1T == "ACE" ) then 
      {
          if( _number == 10 ) then 
          {
              _totalDealer = 21;
          }
          else
          {
              _totalDealer = 11 + _number;
          };
      }
      else
      {
          _totalDealer = _number + (parseNumber _D1T);
      };
      
      
      
      
      if( _totalDealer > _totalPlayer ) then 
      {
          //dealer beat player
          //dealer wins
          //no money for player
          _gameover = true;
      }
      else
      {
          if( _totalDealer == _totalPlayer ) then 
          {
              //tie, betamt won back
              _win = 1;
              _gameover = true;
          }
          else 
          {
              _gameover = false;
      
          };
      
      };
      
      
      
      
      if( !_gameover ) then 
      {
          _number = ceil(random 11);
          _number = _number + 2;
      
      
      
      
          if ( _number == 11 OR _number == 12 ) then
          {
              _number = 10;
              _Dcard3 ctrlSetText  format["%1",_number];
      
      
      
      
          }
          else 
          {
              if( _number == 13 ) then
              {
                  _Dcard3 ctrlSetText "ACE";
              }
              else
              {
                  _Dcard3 ctrlSetText  format["%1",_number];
              };
      
          };
      
      
      
      
          
      
          if( _number == 13 ) then 
          {
              _totalTemp = _totalDealer + 11;
              _totalTemp2 = _totalDealer + 1;
      
              if( _totalTemp == 21 OR _totalTemp2 == 21 ) then 
              {
                      _gameover = true;            
              }
              else
              {
                  if( _totalTemp > 21 AND _totalTemp2 > 21 ) then 
                  {
                      _gameover = true;
                      _win = 2;
                  };
      
      
      
      
              };
      
              if( !_gameover ) then 
              {
                  if( _totalTemp > _totalPlayer ) then 
                  {
                      if( _totalTemp < 21 ) then 
                      {
                          _gameover = true;
                      };
                  }
                  else
                  {
                      if( _totalTemp2 > _totalPlayer ) then 
                      {
                          if( _totalTemp2 < 21 ) then 
                          {
                              _gameover = true;
                          };
                      };
      
                  };
      
              };
          }
          else
          {
              //should check for aces... but ya
              _totalDealer = _totalDealer + _number;
      
              if( _totalDealer > 21 ) then 
              {
                  //player wins
                  //dealer bust
                  _gameover = true;
                  _win = 2;
              }
              else
              {
                  if( _totalDealer > _totalPlayer ) then 
                  {
                      //dealer beats player
      
                      _gameover = true;
                  }
                  else 
                  {
                      if( _totalDealer == _totalPlayer ) then 
                      {
                          _gameover = true;
                          _win = 1;
                      }
                      else
                      {
                          _gameover = false;
                      };
      
                  };
      
              };
      
          };
      
      
      
      
      };
      
      
      
      
      //draw another card for dealer... card 4. fuck this shit....
      if( !_gameover ) then 
      {
          _win = 2;
      };
      
      
      
      
      //last check to see if they lose, win,still playing
      
      
      
      
      if( _win != 0 ) then 
      {
          _cash = _betamt * _win;
          life_cash = life_cash + _cash;
          _winnings ctrlSetText  format["%1",_cash];
          //you win, give money
          //set text 
          //free up bet buttons
      }
      else
      {
          _winnings ctrlSetText "You lose. Dealer Wins.";
      
      
      
      
          //you lose
          //set text
          //free up bet buttons
      };
      
      
      
      
          _bet1 ctrlEnable true;
          _bet2 ctrlEnable true;
          _bet3 ctrlEnable true;
          _bet4 ctrlEnable true;
          _bet5KTEXT  ctrlSetText "BET";
          _bet10KTEXT ctrlSetText "BET";
          _bet25KTEXT ctrlSetText "BET";
          _bet50KTEXT ctrlSetText "BET";
      Alles anzeigen

      7. ALs letztes noch eine neue Datei erstellen im gleichen Ordner namens fn_BJhit.sqf mit folgendem Inhallt:

      Code
      /*
          File: fn_BJhit.sqf
          Description: Blackjack
          Created by Blacklistgaming.org
              Coder: PapaBear
      */
      //hit phase
      //check value of cards
      //stop if bust
      //if 5th hit and still good win
      
      
      
      
      disableSerialization;
      _display = findDisplay 5980;
      
      
      
      
      //setup variables
      _Pcard1 = _display displayCtrl 5992;
      _Pcard2 = _display displayCtrl 5993;
      _Pcard3 = _display displayCtrl 5994;
      _Pcard4 = _display displayCtrl 5997;
      _Pcard5 = _display displayCtrl 5998;
      _TOTALTXT = _display displayCtrl 6007;
      _bet5KTEXT = _display displayCtrl 6003;
      _bet10KTEXT = _display displayCtrl 6004;
      _bet25KTEXT = _display displayCtrl 6005;
      _bet50KTEXT = _display displayCtrl 6006;
      _betamt = 0;
      
      
      
      
      if( (ctrlText _bet5KText) != "" ) then
      {
          _betamt = 5000;
      }
      else
      {
          if( (ctrlText _bet10KText) != "" ) then
          {
              _betamt = 10000;
          }
          else
          {
              if( (ctrlText _bet25KText) != "" ) then
              {
                  _betamt = 25000;
              }
              else
              {
                  _betamt = 50000;
              };
          };
      };
      
      
      
      
      _gameover = false;
      _bet1 = _display displayCtrl 5984;
      _bet2 = _display displayCtrl 5985;
      _bet3 = _display displayCtrl 5986;
      _bet4 = _display displayCtrl 5987;
      _Stay = _display displayCtrl 5982;
      _Hit = _display displayCtrl 5983;
      _winnings = _display displayCtrl 6001;
      _bet1 ctrlEnable false;
      _bet2 ctrlEnable false;
      _bet3 ctrlEnable false;
      _bet4 ctrlEnable false;
      _Hit ctrlEnable false;
      _Stay ctrlEnable false;
      
      
      
      
      _P1T = ctrlText _Pcard1;
      _P2T = ctrlText _Pcard2;
      _P3T = ctrlText _Pcard3;
      _P4T = ctrlText _Pcard4;
      _P5T = ctrlText _Pcard5;
      
      
      
      
      _ACES = false;
      _ACE1 = 0;
      _ACE2 = 0;
      _ACE3 = 0;
      _ACE4 = 0;
      _total = 0;
      _win = 0;
      _cash = 0;
      
      
      
      
      //figure out which card is next to be dealt
      _NextCard = 0;
      if(_P3T != "" ) then
      {
          if(_P4T != "" ) then
          {        
              _NextCard = 5;
          }
          else
          {
              _NextCard = 4;
          };
      }
      else
      {
          _NextCard = 3;
      };
      
      
      
      
      //deal next card
      _number = ceil(random 11);
      _number = _number + 2;
      if ( _number == 11 OR _number == 12 ) then
      {
          _number = 10;
      
      
      
      
      }
      else 
      {
          if( _number == 13 ) then
          {
              _number = "ACE";
          };
      
      
      
      
      };
      
      
      
      
      //assign card to its place
      switch ( _NextCard ) do
      {
          case 3: { _Pcard3 ctrlSetText format["%1",_number]; _P3T = ctrlText _Pcard3; };
          case 4: { _Pcard4 ctrlSetText format["%1",_number]; _P4T = ctrlText _Pcard4; };
          case 5: { _Pcard5 ctrlSetText format["%1",_number]; _P5T = ctrlText _Pcard5; };
          default { _Pcard3 ctrlSetText format["%1",_number]; _P3T = ctrlText _Pcard3; }
      };
      
      
      
      
      _totalAces = 0;
      //check if there are any aces
      //and where they are
      if( _P1T == "ACE" ) then
      {
          _ACES = true;
          _ACE1 = 1;
          _totalAces = 1;
      };
      
      
      
      
      if( _P2T == "ACE" ) then
      {
          _ACES = true;
          if( _ACE1 == 0 ) then
          {
              _ACE1 = 2;
              _totalAces = 1;
          }
          else
          {
              _ACE2 = 2;
              _totalAces = 2;
          };
      
      };
      
      
      
      
      if( _P3T == "ACE" ) then
      {
          _ACES = true;
          if( _ACE1 == 0 ) then
          {
              _ACE1 = 3;
              _totalAces = 1;
          }
          else
          {
              if( _ACE2 == 0 ) then
              {
                  _ACE2 = 3;
                  _totalAces = 2;
              }
              else
              {
                  _ACE3 = 3;
                  _totalAces = 3;
              };
      
          };
      
      };
      
      
      
      
      if( _P4T == "ACE" ) then
      {
          _ACES = true;
          if( _ACE1 == 0 ) then
          {
              _ACE1 = 4;
              _totalAces = 1;
          }
          else
          {
              if( _ACE2 == 0 ) then
              {
                  _ACE2 = 4;
                  _totalAces = 2;
              }
              else
              {
                  if( _ACE3 == 0 ) then
                  {
                      _ACE3 = 4;
                      _totalAces = 3;
                  }
                  else
                  {
                      _ACE4 = 4;
                      _totalAces = 4;
                  };
              };
      
          };
      
      };
      
      
      
      
      if( _P5T == "ACE" ) then 
      {    
          _ACES = true;
          if( _ACE1 == 0 ) then
          {
              _ACE1 = 5;
              _totalAces = 1;
          }
          else
          {
              if( _ACE2 == 0 ) then
              {
                  _ACE2 = 5;
                  _totalAces = 2;
              }
              else
              {
                  if( _ACE3 == 0 ) then
                  {
                      _ACE3 = 5;
                      _totalAces = 3;
                  }
                  else
                  {        
                      _ACE4 = 5;
                      _totalAces = 4;
                  };
              };
          };
      };
      
      
      
      
          _temp1 = 0;
          _temp2 = 0;
      //aces check complete.
      //now we need total the players cards
      //if there are aces we need to compare
      // 11 vs 1 totals
      // the total values of whether is 21 or under
      if( _ACES ) then 
      {
          if( _ACE4 != 5 OR _ACE3 != 5 OR _ACE2 != 5 OR _ACE1 != 5 ) then 
          {
              _total = _total + (parseNumber _P5T);
          };
      
          if( _ACE4 != 4 OR _ACE3 != 4 OR _ACE2 != 4 OR _ACE1 != 4 ) then 
          {
              _total = _total + (parseNumber _P4T);
          };
      
          if( _ACE3 != 3 OR _ACE2 != 3 OR _ACE1 != 3 ) then 
          {
              _total = _total + (parseNumber _P3T);
          };
      
          if( _ACE2 != 2 OR _ACE1 != 2 ) then 
          {
              _total = _total + (parseNumber _P2T);
          };
      
          if( _ACE1 != 1 ) then 
          {
              _total = _total + (parseNumber _P1T);
          };
      
      
      
      
      
          switch ( _totalAces ) do 
          {
              case 4:
              {
                  //11,1,1,1 
                  _temp1 = 14;
                  //1,1,1,1
                  _temp2 = 4;
              };
              case 3:
              {
                  //11,1,1
                  _temp1 = 13;
                  //1,1,1
                  _temp2 = 3;
              };
              case 2:
              {
                  //11,1
                  _temp1 = 12;
                  //1,1
                  _temp2 = 2;
              };
              case 1:
              {
                  //11
                  _temp1 = 11;
                  //1
                  _temp2 = 1;
              };
              default {_temp1 = 0; _temp2 = 0;}
      
          };
      
          _totalTemp = _total + _temp2;
          _total = _total + _temp1;
      
          //if player hit 21 then he wins 4X
          if( _total == 21 ) then
          {
              _TOTALTXT ctrlSetText format["%1",_total];
              _win = 4;
          }
          else
          {
              //player didnt hit 21
              //now check if he went bust using the 11
              //if he didnt then can keep playing
              if( _total > 21 ) then 
              {
                  //using 11 he went over 21
                  //lets check if he is still over using a 1 instead
                  //if over 21 he loses, else keeps playing                        
                  if( _totalTemp > 21 ) then
                  {
                      _TOTALTXT ctrlSetText format["%1",_totalTemp];
                      _gameover = true;
                  }
                  else
                  {
                      //if using 1 in total and still under 21
                      //while using 5 cards, player wins 3X
                      if( _NextCard == 5 ) then 
                      {
                          _win = 4;
                      }
                      else
                      {                
                          _TOTALTXT ctrlSetText format["%1",_totalTemp];
                      };
                  };
              }
              else
              {
                  _TOTALTXT ctrlSetText format["%1",_total];
              };
          }; 
      }
      else
      {    
          // NO ACES!!!! Total all cards
          _total = (parseNumber _P1T) + (parseNumber _P2T) + (parseNumber _P3T) + (parseNumber _P4T) + (parseNumber _P5T);
          _TOTALTXT ctrlSetText format["%1",_total];
          //if hit 21, win
          if( _total == 21 ) then
          {
              _win = 4;
              _gameover = true;
          }
          else
          {
              if( _total > 21 ) then 
              {
                  _gameover = true;
              };
          };
      };
      
      
      
      
      //last check to see if they lose, win,still playing
      if( _gameover ) then 
      {
          if( _win != 0 ) then 
          {
              _cash = _betamt * _win;
              life_cash = life_cash + _cash;
              _winnings ctrlSetText  format["%1",_cash];
      
              //you win, give money
              //set text 
              //free up bet buttons
          }
          else
          {
              _winnings ctrlSetText "You lose. BUST";
      
              //you lose
              //set text
              //free up bet buttons
          };
      
          _bet1 ctrlEnable true;
          _bet2 ctrlEnable true;
          _bet3 ctrlEnable true;
          _bet4 ctrlEnable true;
          _bet5KTEXT  ctrlSetText "BET";
          _bet10KTEXT ctrlSetText "BET";
          _bet25KTEXT ctrlSetText "BET";
          _bet50KTEXT ctrlSetText "BET";
          _Hit ctrlEnable false;
          _Stay ctrlEnable false;
      
      
      
      
      }
      else
      {
      
      
      
      
          
          //below 21, can still play
              //free up hit/stay buttons.
      
              _Hit ctrlEnable true;
              _Stay ctrlEnable true;
      };
      Alles anzeigen

      8. Öffnet euren Arma3 Editor, und fügt einen npc (Oder ein Objekt) hinzu mit folgendem Init befehl:

      Code
      this allowdamage false; this enablesimulation false; this addAction ["Play BlackJack", life_fnc_blackjack];

      Viel spaß :thumbup:

      MfG
      Noldy

    • [Tutorial] Scheduler.xml richtig einstellen

      • Noldy
      • 9. August 2015 um 05:39

      Hallo.

      Viele fragen nach, wie man den Scheduler richtig configuriert.

      Ich erkläre euch mal die Begriffe:

      // --> Euer erster Eintrag hat immer die ID 0. Ein weiterer Eintrag muß dann die ID 1 haben. <job id="0">
      // --> Die Tage, andem die Nachricht angezeigt werden soll. Montag 1 Dienstag 2 Mittwoch 3 Donnerstag 4 Freitag 5 Samstag 6 Sonntag 7 <day>1,2,3,4,5,6,7</day>
      // --> Hier kommt die Uhrzeit rein, wann der Scheduler die gewünschte Nachricht in Chat posten soll. <start>000000</start>
      // --> Hier kann man bestimmen, das z.b. jede 20 Minuten eine Meldung im Chat kommt. <runtime>000200</runtime>
      // --> Die Wiederhollungsfunktion. 0=aus -1= an <loop>0</loop>
      // --> Hier kommt die Nachricht rein, was der Scheduler in Chat posten soll. <cmd>say -1 BEC gestarted | Scheduler meldet sich zum Dienst</cmd>
      // --> Finde ich gerade keine beschreibung für, aber das muß immer an letzter stelle stehen! <cmdtype>0</cmdtype>
      // --> Schliest die ID ab. Soll aso am schluss immer kommen. </job>

      Beispiel für einen Begrüsungstext:

      Code
      <Scheduler>
          <!-- Test Nachricht, zwei Minuten nach dem Start von BEC -->
          <job id="0">
              <day>1,2,3,4,5,6,7</day>
              <start>000000</start>
              <runtime>000200</runtime>
              <loop>0</loop>
              <cmd>say -1 BEC gestarted | Scheduler meldet sich zum Dienst</cmd>
              <cmdtype>0</cmdtype>            
          </job>


      Ihr sieht ID 0 weil es der erste "Job" ist.
      Day sind 1-7 eingetragen. Sollte auch klar sein.
      Start 000000 ist auch klar, ihr wollt ja nicht an einer gewissen Zeit die Nachricht posten.
      Runtime ist auf 000200, da wird es jetzt Interessant. Bedeutet, das nur einmal nach Restart nach 2 Minuten der Scheduler die gewünschte Nachricht abspielt. Hier im Beispiel: BEC gestarted | Scheduler meldet sich zum Dienst
      Loop ist auf 0, sollte auch klar sein. Ihr wollt ja die Nachricht nur einmal als Begrüssung bekommen und nicht das diese sich wiederhollt.
      Bei cmd ist der "say" text drin. BEC gestarted | Scheduler meldet sich zum Dienst

      Beispiel für jede 20 Minuten einen Post:

      Code
      <!-- ****** TEXTNACHRICHTEN WIEDERHOLEND ******* -->
          <!-- 3 Textnachrichten im Abstand von 20 Minuten -->
      
          <!-- Textnachricht 1 -->
          <job id="1">
              <day>1,2,3,4,5,6,7</day>
              <start>000000</start>
              <runtime>010000</runtime>
              <loop>-1</loop>
              <cmd>say -1 HIER KOMMT DEIN TEXT REIN!</cmd>
              <cmdtype>0</cmdtype>            
          </job>
      Alles anzeigen


      ID 1 klar, ist ja nun euer zweiter "Job"
      Start 000000, soll sich ja wiederhollen und nicht ab einer gewissen Zeit.
      Runtime 010000.
      Loop. Da ist jetzt eine -1 drin, weil es ja immerwieder wiederhollt werden soll.
      cmd. Tein Text.

      Ein weiterer Text im 20 Minuten abstand würde dann so aussehen:

      Code
      <!-- Textnachricht 2 (20 Minuten versetzt zur ersten) -->
          <job id="2">
              <day>1,2,3,4,5,6,7</day>
              <start>002000</start>
              <runtime>010000</runtime>
              <loop>-1</loop> 
              <cmd>say -1 Restartzeiten: 00:00 | 06:00 | 12:00 | 18:00</cmd>
              <cmdtype>0</cmdtype>            
          </job>

      Soweit mal die Wiederhollungen.
      Nun kommen die Restartmeldungen.

      Eigentlich nicht anderst, wie die obrigen. Nur, das bei Start die Uhrzeit reinkommt, bei Runtime 000000 stehen muß und natürlich der Loop auf 0 stehen mu0.
      Ein Beispiel:

      Code
      <!-- *** NACHRICHTEN VOR 00:00Uhr SERVER NEUSTART *** -->
      
          <!-- 30min Warnung um 23:30 Uhr -->
          <job id="4">
              <day>1,2,3,4,5,6,7</day>
              <start>23:30:00</start>
              <runtime>000000</runtime>
              <loop>0</loop> 
              <cmd>say -1 Achtung: Serverrestart in 30 minuten.</cmd>
              <cmdtype>0</cmdtype>            
          </job>
      
          <!-- 15min Warnung um 23:45 Uhr -->
          <job id="5">
              <day>1,2,3,4,5,6,7</day>
              <start>23:45:00</start>
              <runtime>000000</runtime>
              <loop>0</loop> 
              <cmd>say -1 Achtung: Serverrestart in 15 minuten.</cmd>
              <cmdtype>0</cmdtype>            
          </job>
      
          <!-- 5min Warnung um 23:55 Uhr -->
          <job id="6">
              <day>1,2,3,4,5,6,7</day>
              <start>23:55:00</start>
              <runtime>000000</runtime>
              <loop>0</loop> 
              <cmd>say -1 Achtung: Serverrestart in 5 minuten.</cmd>
              <cmdtype>0</cmdtype>            
          </job>
      
          <!-- 1min Warnung um 23:59 Uhr -->
          <job id="7">
              <day>1,2,3,4,5,6,7</day>
              <start>23:59:00</start>
              <runtime>000000</runtime>
              <loop>0</loop> 
              <cmd>say -1 Achtung: Serverrestart in 1 minute. Speichern nicht vergessen.</cmd>
              <cmdtype>0</cmdtype>            
          </job>
      Alles anzeigen

      Hier wird am 23:30 Uhr eine Meldung kommen mit Achtung: Serverrestart in 30 minuten.
      23:45 Uhr: Achtung: Serverrestart in 15 minuten.
      23:55 Uhr: Achtung: Serverrestart in 5 minuten.
      23:59 Uhr: Achtung: Serverrestart in 1 minute. Speichern nicht vergessen.

      Eigentlich recht Simpel.

      Wichtig ist nur, die IDs müssen übereinstimmen.

      1. Job ID 0
      2. Job ID 1
      usw.....

      In eurer BEC/Config/Config.cfg müsst ihr folgendes suchen:

      Code
      # Setze hier den Pfad der Scheduler.xml  // Diese Einstellung sollte nicht geändert werden!
      #Scheduler = Scheduler.xml


      Ändern in:

      Code
      # Setze hier den Pfad der Scheduler.xml  // Diese Einstellung sollte nicht geändert werden!
      Scheduler = Scheduler.xml


      Damit wird der Scheduler aktiviert.

      Im Webinterface natürlich noch BEC Aktivieren, und dann sollte der Scheduler bei euch ohne probleme laufen.

      Hier mal meine scheduler:

      Spoiler anzeigen

      <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
      <?xml-stylesheet href="acs.xsl" type="text/xsl" ?>

      <Scheduler>
      <!-- Test Nachricht, zwei Minuten nach dem Start von BEC -->
      <job id="0">
      <day>1,2,3,4,5,6,7</day>
      <start>000000</start>
      <runtime>000200</runtime>
      <loop>0</loop>
      <cmd>say -1 BEC gestarted | Scheduler meldet sich zum Dienst</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- ****** TEXTNACHRICHTEN WIEDERHOLEND ******* -->
      <!-- 3 Textnachrichten im Abstand von 20 Minuten -->

      <!-- Textnachricht 1 -->
      <job id="1">
      <day>1,2,3,4,5,6,7</day>
      <start>000000</start>
      <runtime>010000</runtime>
      <loop>-1</loop>
      <cmd>say -1 DEIN TEXT</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- Textnachricht 2 (20 Minuten versetzt zur ersten) -->
      <job id="2">
      <day>1,2,3,4,5,6,7</day>
      <start>002000</start>
      <runtime>010000</runtime>
      <loop>-1</loop>
      <cmd>say -1 DEIN TEXT</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- Textnachricht 3 (40 Minuten versetzt zur ersten) -->
      <job id="3">
      <day>1,2,3,4,5,6,7</day>
      <start>004000</start>
      <runtime>010000</runtime>
      <loop>-1</loop>
      <cmd>say -1 DEIN TEXT</cmd>
      <cmdtype>0</cmdtype>
      </job>


      <!-- *** NACHRICHTEN VOR 00:00Uhr SERVER NEUSTART *** -->

      <!-- 30min Warnung um 23:30 Uhr -->
      <job id="4">
      <day>1,2,3,4,5,6,7</day>
      <start>23:30:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Achtung: Serverrestart in 30 minuten.</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- 15min Warnung um 23:45 Uhr -->
      <job id="5">
      <day>1,2,3,4,5,6,7</day>
      <start>23:45:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Achtung: Serverrestart in 15 minuten.</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- 5min Warnung um 23:55 Uhr -->
      <job id="6">
      <day>1,2,3,4,5,6,7</day>
      <start>23:55:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Achtung: Serverrestart in 5 minuten.</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- 1min Warnung um 23:59 Uhr -->
      <job id="7">
      <day>1,2,3,4,5,6,7</day>
      <start>23:59:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Achtung: Serverrestart in 1 minute. Speichern nicht vergessen.</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- *** NACHRICHTEN VOR 06:00Uhr SERVER NEUSTART *** -->

      <!-- 30min Warnung um 05:30 Uhr -->
      <job id="8">
      <day>1,2,3,4,5,6,7</day>
      <start>05:30:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Achtung: Serverrestart in 30 minuten.</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- 15min Warnung um 05:45 Uhr -->
      <job id="9">
      <day>1,2,3,4,5,6,7</day>
      <start>05:45:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Achtung: Serverrestart in 15 minuten.</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- 5min Warnung um 05:55 Uhr -->
      <job id="10">
      <day>1,2,3,4,5,6,7</day>
      <start>05:55:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Achtung: Serverrestart in 5 minuten.</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- 1min Warnung um 05:59 Uhr -->
      <job id="11">
      <day>1,2,3,4,5,6,7</day>
      <start>05:59:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Achtung: Serverrestart in 1 minute. Speichern nicht vergessen.</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- *** NACHRICHTEN VOR 12:00Uhr SERVER NEUSTART *** -->

      <!-- 30min Warnung um 11:30 Uhr -->
      <job id="12">
      <day>1,2,3,4,5,6,7</day>
      <start>11:30:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Achtung: Serverrestart in 30 minuten.</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- 15min Warnung um 11:45 Uhr -->
      <job id="13">
      <day>1,2,3,4,5,6,7</day>
      <start>11:45:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Achtung: Serverrestart in 15 minuten.</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- 5min Warnung um 11:55 Uhr -->
      <job id="14">
      <day>1,2,3,4,5,6,7</day>
      <start>11:55:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Achtung: Serverrestart in 5 minuten.</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- 1min Warnung um 11:59 Uhr -->
      <job id="15">
      <day>1,2,3,4,5,6,7</day>
      <start>11:59:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Achtung: Serverrestart in 1 minute. Speichern nicht vergessen.</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- *** NACHRICHTEN VOR 18:00Uhr SERVER NEUSTART *** -->

      <!-- 30min Warnung um 17:30 Uhr -->
      <job id="16">
      <day>1,2,3,4,5,6,7</day>
      <start>17:30:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Achtung: Serverrestart in 30 minuten.</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- 15min Warnung um 17:45 Uhr -->
      <job id="17">
      <day>1,2,3,4,5,6,7</day>
      <start>17:45:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Achtung: Serverrestart in 15 minuten.</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- 5min Warnung um 17:55 Uhr -->
      <job id="18">
      <day>1,2,3,4,5,6,7</day>
      <start>17:55:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Achtung: Serverrestart in 5 minuten.</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- 1min Warnung um 17:59 Uhr -->
      <job id="19">
      <day>1,2,3,4,5,6,7</day>
      <start>17:59:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Achtung: Serverrestart in 1 minute. Speichern nicht vergessen.</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <!-- Funnymessanges -->
      <job id="20">
      <day>5</day>
      <start>18:00:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Wochenende Yeah!</cmd>
      <cmdtype>0</cmdtype>
      </job>

      <job id="21">
      <day>1,2,3,4,5,6,7</day>
      <start>12:00:00</start>
      <runtime>000000</runtime>
      <loop>0</loop>
      <cmd>say -1 Mittagszeit. Mach mal Pause.</cmd>
      <cmdtype>0</cmdtype>
      </job>

      </Scheduler>

      Einfach die Nachricht ändern und fertig.

      Ich hoffe, ich konnte damit einige helfen den Scheduler richtig einzustellen.

      Falls irgentwo was falsch sein sollte, einfach mir melden und ich editiere es.

      MfG
      Noldy

    • [Tutorial] Benzinverbrauch ändern

      • Noldy
      • 9. August 2015 um 05:37

      Hier erkläre ich euch, wie ihr euren Tankverbrauch ganz einfach ändern könnt.

      1. geht in eure Functions.h
      fügt unter class functions folgendes ein:

      Code
      class emptyFuel {};

      2. Erstellt eine neue sqf datei namens fn_emptyFuel.sqf mit folgendem Inhalt:

      Code
      /*
            Created by Mokomoko
            Date: 04.08.2014
            Related Forum Post: http://www.altisliferpg.com/topic/4812-tutorial-how-to-increase-the-fuel-usage/
      */
      
      
      
      
      private["_vehicleToFuel","_velocityOfVehicle","_fuelConsumption"];
      
      
      
      
      while{true} do 
      {
      	_vehicleToFuel = (vehicle player);
      	if(isEngineOn _vehicleToFuel && ((driver _vehicleToFuel) == player) && !(_vehicleToFuel isKindOf "Air") && (_vehicleToFuel != player) ) then
      	{
      		_velocityOfVehicle = sqrt(((velocity _vehicleToFuel select 0)^2)+((velocity _vehicleToFuel select 1)^2))*3.6;
      
      		_fuelConsumption = _velocityOfVehicle/100000 + 0.0001;
      		if(_fuelConsumption > 0.002) then
      		{
      			_fuelConsumption = 0.002;
      		};
      		_vehicleToFuel setFuel ((fuel _vehicleToFuel)-_fuelConsumption);
      
      		//hint format["Benzinverbrauch: %1L/km",_fuelConsumption*10000/2];
      
      
      
      
      		if(fuel _vehicleToFuel < 0.2 && fuel _vehicleToFuel > 0.18) then
      		{
      			hint "Your gas tank is empty. Hurry to the next gas station!";
      		}
      		else
      		{
      			if(fuel _vehicleToFuel < 0.03) then
      			{
      				hint "I hope you can run - because you just ran out of gas!";
      			};
      		};
      	};
      	sleep 2;
      };
      Alles anzeigen

      3. Zieht die erstellte sqf in den folgenden dazugehörigen Ordner functions

      4. Fügt folgendes in eure initPlayerLocal.sqf ein:
      Sucht folgenden Inhalt [] execVM "core\init.sqf";
      und fügt direkt darunter das ein:

      Code
      [] execVM "core\functions\fn_emptyFuel.sqf";


      Das ganze müsste in etwa so aussehen:

      Spoiler anzeigen

      /*
      File: initPlayerLocal.sqf

      Description:
      Starts the initialization of the player.
      */
      if(!hasInterface) exitWith {}; //This is a headless client, he doesn't need to do anything but keep being headless..
      #define __CONST__(var1,var2) var1 = compileFinal (if(typeName var2 == "STRING") then {var2} else {str(var2)})
      __CONST__(BIS_fnc_endMission,BIS_fnc_endMission);
      [] execVM "core\init.sqf";
      [] execVM "core\functions\fn_emptyFuel.sqf";

      //Execute JIP code.
      if((_this select 1)) then {
      [] execVM "core\jip.sqf";
      };

      Und fertig.

      Wie langsam oder schnell ihr euren Tankverbrauch ändern wollt ist euch überlassen.
      Dafür ändert einfach in eurer datei fn_emptyFuel.sqf folgendes:

      Code
      _fuelConsumption = _velocityOfVehicle/100000 + 0.0001;

      die 100000 z.b. in 10000. Da wird der Tank sehr schnell leer gehen.
      Einfach in der datei die Zahl 100000 bisschen rumspielen und für euch anpassen.

      Viel spaß mit diesem Script.

      MfG
      Noldy

    • [Tutorial] Automatisches Speichern

      • Noldy
      • 9. August 2015 um 05:37

      Hallo,

      Hier erkläre ich euch, wie ihr eine automatischer Speicher Script einfügt:

      Legen wir mal los, geht in folgende Datei:
      core\init.sqf
      und fügt dies ganz unten ein

      Code
      // Init automatically saving gear
      [] spawn life_fnc_autoSave;

      Geht in eure Functions.H und sucht folgende class "class Functions"
      und fügt dies ganz unten ein

      Code
      class autoSave {};

      Das ganze sollte in etwa so aussehen

      Code
      class Functions
          {
              file = "core\functions";
              class calWeightDiff {};
              class fetchCfgDetails {};
              class handleInv {};
              class hudSetup {};
              class hudUpdate {};
              class fetchGear{};
              class tazeSound {};
              class animSync {};
              class simDisable {};
              class keyHandler {};
              class dropItems {};
              class handleDamage {};
              class numberText {};
              class handleItem {};
              class accType {};
              class onDeath {};
              class onRespawn {};
              class receiveItem {};
              class giveDiff {};
              class receiveMoney {};
              class playerTags {};
              class clearVehicleAmmo {};
              class pulloutVeh {};
              class nearUnits {};
              class fedSuccess {};
              class actionKeyHandler {};
              class playerCount {};
              class fetchDeadGear {};
              class loadDeadGear {};
              class isnumeric {};
              class escInterupt {};
              class onTakeItem {};
              class fetchVehInfo {};
              class pushObject {};
              class callCellPhone {};
              class autoSave {};
      Alles anzeigen

      Ihr erstellt eine neue SQF namens fn_autoSave.sqf mit folgendem Inhallt:

      Code
      /*
          @Author: =IFD= Cryptonat
          @Created: 2/22/14
      
          Description:
          Saves the player's gear every 10 minutes.
      */
      
      
      
      
      while {true} do {    //Tells the function to continually loop.
          sleep 600;   //Sleep for 600 seconds/10 minutes
          if (alive player) then   //If the player is alive, then do this
              {
              [false] call SOCK_fnc_syncData;;  //Same function used by the "Sync" button
              hint "Spiel automatisch gespeichert."   //Just to tell you that the game is saving
          };
      };
      Alles anzeigen


      Mit diesem Script Speichert euer Spiel alle 10 Minuten.
      Kann man aber beliebig ändern, indem man die sleep 600; ändert.

      MfG
      Noldy

    • [Tutorial] Slot Maschine (Spielautomat)

      • Noldy
      • 9. August 2015 um 05:36

      Hallo GG Community,

      Da mir schon einige per PN angeschrieben haben, oder im Forum danach gefragt haben werde ich das Tutorial für euch nun übersetzen.
      Ich bin nicht der Author, sondern PapaBear. Also habt so viel respekt, und entfernt ihn nicht als Author!
      Dieses Script wurde von mir ein bisschen Übersetzt.

      Fangen wir mal an.

      1. Öffnet eure functions.h und fügt unter class Shops folgendes hinzu:

      Code
      class slotmachine {};
      class slotSpin {};

      2. Öffnet eure dialog\Masterhandler und fügt folgendes hinz:

      Code
      #include "slot_machine.hpp"

      3. Öffnet euren dialog Ordner und erstelle eine neue datei namens slot_machine.hpp mit folgendem Inhallt:

      Code
      /*
          File: slot_machine.hpp
              Author: Jacob "PapaBear" Tyler
          Description: Gui for slotmachine
      */
      
      
      
      
      #define GUI_GRID_X    (0)
      #define GUI_GRID_Y    (0)
      #define GUI_GRID_W    (0.025)
      #define GUI_GRID_H    (0.04)
      #define GUI_GRID_WAbs    (1)
      #define GUI_GRID_HAbs    (1)
      
      
      
      
      class SlotMachineGUI
      {
          idd = 5780;
          movingEnabled = false;
          enableSimulation = true;
      
          class controlsBackground
          {
      
              class RscFrame_1800: life_RscText
              {
                  idc = 5770;
                  colorBackground[] = {0,0,0,0.7};
                  x = 0 * GUI_GRID_W + GUI_GRID_X;
                  y = 0 * GUI_GRID_H + GUI_GRID_Y;
                  w = 40 * GUI_GRID_W;
                  h = 25 * GUI_GRID_H;
              };
      
              class RscText_1000: life_RscText
              {
                  idc = 5774;
                  text = "Gewonnen: $"; //--- ToDo: Localize;
                  x = 13 * GUI_GRID_W + GUI_GRID_X;
                  y = 21 * GUI_GRID_H + GUI_GRID_Y;
                  w = 5 * GUI_GRID_W;
                  h = 2 * GUI_GRID_H;
              };
      
              class RscText_1003: life_RscText
              {
                  idc = 5783;
                  text = "Bet"; //--- ToDo: Localize;
                  x = 6 * GUI_GRID_W + GUI_GRID_X;
                  y = 14 * GUI_GRID_H + GUI_GRID_Y;
                  w = 2 * GUI_GRID_W;
                  h = 1 * GUI_GRID_H;
              };
              class RscText_1004: life_RscText
              {
                  idc = 5784;
                  text = "Bet"; //--- ToDo: Localize;
                  x = 15 * GUI_GRID_W + GUI_GRID_X;
                  y = 14 * GUI_GRID_H + GUI_GRID_Y;
                  w = 2 * GUI_GRID_W;
                  h = 1 * GUI_GRID_H;
              };
              class RscText_1005: life_RscText
              {
                  idc = 5786;
                  text = "Bet"; //--- ToDo: Localize;
                  x = 23 * GUI_GRID_W + GUI_GRID_X;
                  y = 14 * GUI_GRID_H + GUI_GRID_Y;
                  w = 2 * GUI_GRID_W;
                  h = 1 * GUI_GRID_H;
              };
              class RscText_1006: life_RscText
              {
                  idc = 5787;
                  text = "Bet"; //--- ToDo: Localize;
                  x = 32 * GUI_GRID_W + GUI_GRID_X;
                  y = 14 * GUI_GRID_H + GUI_GRID_Y;
                  w = 2 * GUI_GRID_W;
                  h = 1 * GUI_GRID_H;
              };
      
              class RscText_1002: life_RscText
              {
                  idc = 5776;
                  text = "Spielautomat"; //--- ToDo: Localize;
                  x = 6 * GUI_GRID_W + GUI_GRID_X;
                  y = 0 * GUI_GRID_H + GUI_GRID_Y;
                  w = 28 * GUI_GRID_W;
                  h = 3.5 * GUI_GRID_H;
                  sizeEx = 4 * GUI_GRID_H;
              };
      
          };
      
          class controls
          {
      
              class SLOT_1: life_RscPicture
              {
                  idc = 5771;
                  text = "#(argb,8,8,3)color(1,1,1,1)";
                  x = 4 * GUI_GRID_W + GUI_GRID_X;
                  y = 4 * GUI_GRID_H + GUI_GRID_Y;
                  w = 8 * GUI_GRID_W;
                  h = 9 * GUI_GRID_H;
              };
              class SLOT_2: life_RscPicture
              {
                  idc = 5772;
                  text = "#(argb,8,8,3)color(1,1,1,1)";
                  x = 16 * GUI_GRID_W + GUI_GRID_X;
                  y = 4 * GUI_GRID_H + GUI_GRID_Y;
                  w = 8 * GUI_GRID_W;
                  h = 9 * GUI_GRID_H;
              };
              class SLOT_3: life_RscPicture
              {
                  idc = 5773;
                  text = "#(argb,8,8,3)color(1,1,1,1)";
                  x = 28 * GUI_GRID_W + GUI_GRID_X;
                  y = 4 * GUI_GRID_H + GUI_GRID_Y;
                  w = 8 * GUI_GRID_W;
                  h = 9 * GUI_GRID_H;
              };
      
              class Winnings: life_RscText
              {
                  idc = 5775;
                  test = "";
                  x = 18.5 * GUI_GRID_W + GUI_GRID_X;
                  y = 21 * GUI_GRID_H + GUI_GRID_Y;
                  w = 7 * GUI_GRID_W;
                  h = 2 * GUI_GRID_H;
              };
      
              class EXIT_BTN: life_RscButtonMenu
              {
                  idc = -1;
                  text = "EXIT"; //--- ToDo: Localize;
                  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};
                  onButtonClick = "closeDialog 0;";
                  x = 35.5 * GUI_GRID_W + GUI_GRID_X;
                  y = 0.5 * GUI_GRID_H + GUI_GRID_Y;
                  w = 3.5 * GUI_GRID_W;
                  h = 1 * GUI_GRID_H;
              };
              class BET_5K: life_RscButtonMenu
              {
                  idc = 5778;
                  text = "5000$"; //--- ToDo: Localize;
                  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};
                  onButtonClick = "[5000] spawn life_fnc_slotSpin;";
                  x = 5 * GUI_GRID_W + GUI_GRID_X;
                  y = 15 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2 * GUI_GRID_H;
              };
              class BET_50K: life_RscButtonMenu
              {
                  idc = 5779;
                  text = "50000$"; //--- ToDo: Localize;
                  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};
                  onButtonClick = "[50000] spawn life_fnc_slotSpin;";
                  x = 31 * GUI_GRID_W + GUI_GRID_X;
                  y = 15 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2 * GUI_GRID_H;
              };
              class BET_25K: life_RscButtonMenu
              {
                  idc = 5781;
                  text = "25000$"; //--- ToDo: Localize;
                  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};
                  onButtonClick = "[25000] spawn life_fnc_slotSpin;";
                  x = 22 * GUI_GRID_W + GUI_GRID_X;
                  y = 15 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2 * GUI_GRID_H;
              };
              class BET_10K: life_RscButtonMenu
              {
                  idc = 5782;
                  text = "10000$"; //--- ToDo: Localize;
                  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};
                  onButtonClick = "[10000] spawn life_fnc_slotSpin;";
                  x = 14 * GUI_GRID_W + GUI_GRID_X;
                  y = 15 * GUI_GRID_H + GUI_GRID_Y;
                  w = 4 * GUI_GRID_W;
                  h = 2 * GUI_GRID_H;
              };
      
          };
      };
      Alles anzeigen

      4. Öffnet euren core\shops Ordner, und erstellt eine neue Datei namens fn_slotmachine.sqf mit folgendem Inhallt:

      Code
      /*
      	File: fn_slotmachine.sqf
      	Author: Jacob "PapaBear" Tyler
      	Description: intializes the slotmachine gui
      */
      
      
      
      
      createDialog "SlotMachineGUI";
      disableSerialization;
      Alles anzeigen

      5. Im selben Ordner ebenfalls wieder eine neue Datei erstellen namens fn_slotSpin.sqf mit folgendem Inhallt:

      Code
      /*
          File: fn_slotSpin.sqf
          Author: Jacob "PapaBear" Tyler
          Description: Takes bet, spins slots, determines if win, pays
      
      
      
      
      */
      private["_slot","_slot1","_slot2","_slot3","_winnings","_slotcash","_betamt","_display"];
      _betamt = [_this,0,1,[0]] call BIS_fnc_param;
      if(life_cash < _betamt) exitWith {hint format["Du hast nicht genug Geld, um zu spielen.",_betamt];};
      life_cash = life_cash - _betamt;
      disableSerialization;
      _display = findDisplay 5780;
      
      
      
      
      _slotPic1 = _display displayCtrl 5771;
      _slotPic2 = _display displayCtrl 5772;
      _slotPic3 = _display displayCtrl 5773;
      _winningsText = _display displayCtrl 5775;
      _bet1 = _display displayCtrl 5778;
      _bet2 = _display displayCtrl 5779;
      _bet3 = _display displayCtrl 5781;
      _bet4 = _display displayCtrl 5782;
      
      
      
      
      _bet1 ctrlEnable false;
      _bet2 ctrlEnable false;
      _bet3 ctrlEnable false;
      _bet4 ctrlEnable false;
      
      
      
      
      _number = ceil(random 7);
      _pplayer = _this select 0;
      
      
      
      
      if (_number == 0) then {_slot1 = 0; _slotPic1 ctrlSetText "textures\automat\slot_zero.jpg";};
      if (_number == 1) then {_slot1 = 100; _slotPic1 ctrlSetText "textures\automat\slot_one.jpg";};
      if (_number == 2) then {_slot1 = 200; _slotPic1 ctrlSetText "textures\automat\slot_two.jpg";};
      if (_number == 3) then {_slot1 = 300; _slotPic1 ctrlSetText "textures\automat\slot_three.jpg";};
      if (_number == 4) then {_slot1 = 400; _slotPic1 ctrlSetText "textures\automat\slot_four.jpg";};
      if (_number == 5) then {_slot1 = 500; _slotPic1 ctrlSetText "textures\automat\slot_five.jpg";};
      if (_number == 6) then {_slot1 = 600; _slotPic1 ctrlSetText "textures\automat\slot_six.jpg";};
      if (_number == 7) then {_slot1 = 700; _slotPic1 ctrlSetText "textures\automat\slot_seven.jpg";};
      life_action_inUse = true;    
      
      
      
      
      sleep 0.5;
      _number = ceil(random 7);
      _pplayer = _this select 0;
      if (_number == 0) then {_slot2 = 0; _slotPic2 ctrlSetText "textures\automat\slot_zero.jpg";};
      if (_number == 1) then {_slot2 = 10; _slotPic2 ctrlSetText "textures\automat\slot_one.jpg";};
      if (_number == 2) then {_slot2 = 20; _slotPic2 ctrlSetText "textures\automat\slot_two.jpg";};
      if (_number == 3) then {_slot2 = 30; _slotPic2 ctrlSetText "textures\automat\slot_three.jpg";};
      if (_number == 4) then {_slot2 = 40; _slotPic2 ctrlSetText "textures\automat\slot_four.jpg";};
      if (_number == 5) then {_slot2 = 50; _slotPic2 ctrlSetText "textures\automat\slot_five.jpg";};
      if (_number == 6) then {_slot2 = 60; _slotPic2 ctrlSetText "textures\automat\slot_six.jpg";};
      if (_number == 7) then {_slot2 = 70; _slotPic2 ctrlSetText "textures\automat\slot_seven.jpg";};    
      
      
      
      
      sleep 0.5;
      _number = ceil(random 7);
      _pplayer = _this select 0;
      
      
      
      
      if (_number == 0) then {_slot3 = 0; _slotPic3 ctrlSetText "textures\automat\slot_zero.jpg";};
      if (_number == 1) then {_slot3 = 1; _slotPic3 ctrlSetText "textures\automat\slot_one.jpg"; };
      if (_number == 2) then {_slot3 = 2; _slotPic3 ctrlSetText "textures\automat\slot_two.jpg"; };
      if (_number == 3) then {_slot3 = 3; _slotPic3 ctrlSetText "textures\automat\slot_three.jpg"; };
      if (_number == 4) then {_slot3 = 4; _slotPic3 ctrlSetText "textures\automat\slot_four.jpg"; ;};
      if (_number == 5) then {_slot3 = 5; _slotPic3 ctrlSetText "textures\automat\slot_five.jpg"; };
      if (_number == 6) then {_slot3 = 6; _slotPic3 ctrlSetText "textures\automat\slot_six.jpg"; };
      if (_number == 7) then {_slot3 = 7; _slotPic3 ctrlSetText "textures\automat\slot_seven.jpg"; };
      
      
      
      
      sleep 0.5;
      
      
      
      
      _slot = _slot1 + _slot2 + _slot3;
      
      
      
      
      //cases for wins
      switch (_slot) do
      {
          case 111:{_winnings = 4000;}; 
          case 110:{_winnings = 800;};
          case 123:{_winnings = 900;};
          case 211:{_winnings = 80;};
          case 123:{_winnings = 800;};
          case 234:{_winnings = 850;};
          case 345:{_winnings = 9000;};
          case 456:{_winnings = 1100;};
          case 567:{_winnings = 1200;};
          case 311:{_winnings = 800;};
          case 411:{_winnings = 800;};
          case 511:{_winnings = 800;};
          case 611:{_winnings = 800;};
          case 110:{_winnings = 800;};
          case 112:{_winnings = 800;};
          case 113:{_winnings = 800;};
          case 114:{_winnings = 800;};
          case 115:{_winnings = 800;};
          case 116:{_winnings = 800;};
          case 121:{_winnings = 600;};
          case 131:{_winnings = 600;};
          case 141:{_winnings = 600;};
          case 151:{_winnings = 600;};
          case 171:{_winnings = 600;};
          case 121:{_winnings = 600;};
          case 222:{_winnings = 3000;};
          case 333:{_winnings = 2000;};
          case 444:{_winnings = 2000;};
          case 555:{_winnings = 1500;};
          case 666:{_winnings = 40000;};
          case 777:{_winnings = 100000;};
          default {_winnings = 0;}
      };
      
      
      
      
      //multiple winnings by bet amount
      _slotcash = _winnings * ( _betamt / 1000 );
      
      
      
      
      life_cash = life_cash + _slotcash;
      _winningsText ctrlSetText format["%1",_slotcash];
      
      
      
      
      _bet1 ctrlEnable true;
      _bet2 ctrlEnable true;
      _bet3 ctrlEnable true;
      _bet4 ctrlEnable true;
      life_action_inUse = false;
      Alles anzeigen


      Hier könnt ihr auserdem der Gewinn ändern.

      6. Öffnet euren textures Ordner, und erstellt in diesem einen neuen Ordner namens automat und zieht da bitte alle Bilder rein. (Bilder im Anhang dabei)

      7. und der letzte Punk. Öffnet euren Arma3 Editor, und erstellt einen npc (Oder ein Objekt) mit folgendem Initbefehl:

      Code
      this allowdamage false; this enablesimulation false; this addAction ["Play Slots ($2500)", life_fnc_slotmachine];

      Viel spaß dabei :thumbup:

      MfG
      Noldy

      Dateien

      Automat Icons.zip 62,9 kB – 537 Downloads
    • [Tutorial] Medic Marker

      • Noldy
      • 9. August 2015 um 05:34

      Hallo,

      In diesem Tutorial zeige ich euch, wie ihr als Medic eure Kollegen auf der Map sieht.

      1. Öffnet eure Functions.h und fügt unter class Medical_System folgendes ein:

      Code
      class teamMarkers {};

      2. Geht in eure core\functions\fn_keyHandler.sqf und fügt folgendes unter case _mapKey: bei case independent: ein:

      Code
      [] spawn life_fnc_teamMarkers;


      Sollte so aussehen:

      Code
      //Map Key
      case _mapKey:
      {
      switch (playerSide) do
      {
      case west: {if(!visibleMap) then {[] spawn life_fnc_copMarkers;}};
      case independent: {
      if(!visibleMap) then {
      [] spawn life_fnc_medicMarkers;
      [] spawn life_fnc_teamMarkers;
      }
      };
      };
      };
      Alles anzeigen

      3. Erstellt eine neue sqf mit dem namen fn_teamMarkers.sqf mit folgendem Inhallt:

      Code
      /*
      File: fn_teamMarkers.sqf
      Author: Bryan "Tonic" by Daniel Larusso & LordNaikon (Keep Calm and RolePlay)
      
      
      
      
      Description:
      Marks medics on the map for other medics when it's open.
      */
      private["_markers","_medic"];
      _markers = [];
      _medic = [];
      
      
      
      
      sleep 0.5;
      if(visibleMap) then {
      {if(side _x == independent) then {_medic set[count _medic,_x];}} foreach playableUnits; //Fetch list of Medics
      
      
      
      
      //Create markers
      {
      _marker = createMarkerLocal [format["%1_marker",_x],visiblePosition _x];
      _marker setMarkerColorLocal "ColorBlue";
      _marker setMarkerTypeLocal "Mil_dot";
      _marker setMarkerTextLocal format["%1", _x getVariable["realname",name _x]];
      
      
      
      
      _markers set[count _markers,[_marker,_x]];
      } foreach _medic;
      
      
      
      
      while {visibleMap} do
      {
      {
      private["_marker","_unit"];
      _marker = _x select 0;
      _unit = _x select 1;
      if(!isNil "_unit") then
      {
      if(!isNull _unit) then
      {
      _marker setMarkerPosLocal (visiblePosition _unit);
      };
      };
      } foreach _markers;
      if(!visibleMap) exitWith {};
      sleep 0.02;
      };
      
      
      
      
      {deleteMarkerLocal (_x select 0);} foreach _markers;
      _markers = [];
      _medic = [];
      };
      Alles anzeigen


      Und zieht die Datei bei core\medical rein.

      Das war es.

      Viel spaß

      MfG
      Noldy

    • [Tutorial] Slide Door Krankenhaus

      • Noldy
      • 9. August 2015 um 05:33

      Moin,

      Heute zeige ich euch, wie ihr bei eurem Krankenhaus einen Slide Door effekt reinmacht.

      1. Öffnet eure initServer.sqf und überschreibt folgendes alles mit folgendem Code:

      Code
      /*
      File: initServer.sqf
      
      
      
      
      Description:
      Starts the initialization of the server.
      */
      if(!(_this select 0)) exitWith {}; //Not server
      [] call compile PreprocessFileLineNumbers "\life_server\init.sqf";
      master_group attachTo[bank_obj,[0,0,0]];
      
      
      
      
      onMapSingleClick "if(_alt) then {vehicle player setPos _pos};";
      
      
      
      
      //Spawn the new hospitals.
      {
      _hs = createVehicle ["Land_Hospital_main_F", [0,0,0], [], 0, "NONE"];
      _hs setDir (markerDir _x);
      _hs setPosATL (getMarkerPos _x);
      _var = createVehicle ["Land_Hospital_side1_F", [0,0,0], [], 0, "NONE"];
      _var attachTo [_hs, [4.69775,32.6045,-0.1125]];
      detach _var;
      _var = createVehicle ["Land_Hospital_side2_F", [0,0,0], [], 0, "NONE"];
      _var attachTo [_hs, [-28.0336,-10.0317,0.0889387]];
      detach _var;
      {
      _var = createTrigger [ "EmptyDetector", _hs modelToWorld _x ];
      _var setVariable ["parent", _hs];
      _var setTriggerArea [5, 5, 0, false];
      _var setTriggerActivation ["ANY", "PRESENT", true];
      _var setTriggerStatements [ "this", format [ " (thisTrigger getVariable 'parent') animate ['Door_%1A_move', 1]; (thisTrigger getVariable 'parent') animate ['Door_%1B_move', 1]; ", _forEachIndex + 2 ], format [ " (thisTrigger getVariable 'parent') animate ['Door_%1A_move', 0]; (thisTrigger getVariable 'parent') animate ['Door_%1B_move', 0]; ", _forEachIndex + 2 ] ];
      _hs setVariable [format [ "bis_disabled_Door_%1", _forEachIndex + 2 ], 1, true];
      } forEach [ [2.80469,15.7993,-8.47323], [2.78027,7.52686,-8.4725], [-4.17358,-7.89453,-8.4725] ]
      
      
      
      
      } foreach ["hospital_2","hospital_3"];
      
      
      
      
      call {
      if (!isDedicated || worldName != "Altis") exitWith {};
      private ["_hs","_var"];
      _hs = [3760,12990,0] nearestObject "Land_Hospital_main_F";
      {
      _var = createTrigger [
      "EmptyDetector",
      _hs modelToWorld _x
      ];
      _var setVariable ["parent", _hs];
      _var setTriggerArea [5, 5, 0, false];
      _var setTriggerActivation ["ANY", "PRESENT", true];
      _var setTriggerStatements [
      "this",
      format [
      "
      (thisTrigger getVariable 'parent')
      animate ['Door_%1A_move', 1];
      (thisTrigger getVariable 'parent')
      animate ['Door_%1B_move', 1];
      ", _forEachIndex + 2
      ],
      format [
      "
      (thisTrigger getVariable 'parent')
      animate ['Door_%1A_move', 0];
      (thisTrigger getVariable 'parent')
      animate ['Door_%1B_move', 0];
      ", _forEachIndex + 2
      ]
      ];
      _hs setVariable [format [
      "bis_disabled_Door_%1",
      _forEachIndex + 2
      ], 1, true];
      } forEach [
      [2.80469,15.7993,-8.47323],
      [2.78027,7.52686,-8.4725],
      [-4.17358,-7.89453,-8.4725]
      ];
      };
      Alles anzeigen

      Das war es schon^^

      Nun habt ihr beim Krankenhaus in Kavala, und bei dem in Pyrgos und Airport einen Slide effekt.

      MfG
      Noldy

    • [Tutorial] Playertag ausschallten, wenn Spieler maskiert ist

      • Noldy
      • 9. August 2015 um 05:32

      Moin GG Community

      Titel sagt schon alles.

      Ihr müsst dafür nur eine Datei ändern.

      Öffnet eure core\functions\fn_playerTags und fügt folgendes unter #define scale 0.8

      Code
      _headgear = ["H_Shemag_olive","H_Shemag_khk","H_ShemagOpen_tan","H_ShemagOpen_khk","H_Shemag_olive_hs"];
      _goggles = ["G_Balaclava_blk"];

      (Hier könnt ihr natürlich noch mehr sachen eintragen, wo der Name verschwinden soll wenn man es trägt.)

      Etwas weiter unten sucht ihr nach _text = switch (true) do { und fügt das hier direkt darunter:

      Code
      case ((headgear _x) in _headgear): {format["<t color='#000000'>Unbekannt</t>"];};
      case ((goggles _x) in _goggles): {format["<t color='#000000'>Unbekannt</t>"];};

      #000000 ist die Farbe. Hier eine gute html farbcode seite:
      HTML Farbencodes

      Unbekannt ist der name, der angezeigt wird über dem Kopf.

      Viel spaß mit dem Script. :thumbup:

    • [Tutorial] 1 Shot Taser

      • Noldy
      • 9. August 2015 um 05:31

      Hallo GG Community

      Heute mal ein kleines Taser Script, bei dem man nur einmal schiesen kann und er lädt dann automatisch nach für den 2. Schuss.

      1. Öffnet eure core/functions/fn_onFired.sqf und ersetzt alles mit folgendem:

      Code
      /*
      	Author: Bryan "Tonic" Boardwine
      
      	Description:
      	Handles various different ammo types being fired.
      */
      private["_ammoType","_projectile"];
      _player = _this select 0;
      _weap = currentWeapon _player;
      _ammo = _player ammo _weap;
      _ammoType = _this select 4; 
      _projectile = _this select 6;
      
      
      
      
      if(_ammoType == "GrenadeHand_stone") then {
      	_projectile spawn {
      		private["_position"];
      		while {!isNull _this} do {
      			_position = getPosATL _this;
      			sleep 0.1;
      		};
      		[[_position],"life_fnc_flashbang",true,false] spawn life_fnc_MP;
      	};
      };
      
      
      
      
      if (_weap == "hgun_P07_snds_F" && playerSide == west ) then {
          reload _player;
      };
      Alles anzeigen

      Das war es schon. :thumbup:

      Viel spaß.

    • [Tutorial] Umlackierungsshop

      • Noldy
      • 9. August 2015 um 05:30

      Moin leute,


      Bevor ihr fragt, nein das Tutorial ist nicht das gleiche wie das [Tutorial] Paint Shop


      Mit diesem Tutorial könnt ihr eure Autos umlackieren lassen in andere Skins (Die wo auf dem Server vorhanden sind für die Autoklasse)


      Fangen wir mal an:



      MPMissions


      1. Geht in euer core Ordner, und erstellt darin ein neuer Ordner namens repaint.


      2. Erstellt nun eine neue sqf namens fn_Repaintcolor.sqf und kopiert diese datei in euer repaint Ordner mit folgendem Inhallt:

      Code
      /*
      File: fn_Repaintcolor.sqf
      Author: MooN-Gaming
      
      
      
      
      
      
      
      Description: Opens the display to recolor the vehicle
      
      
      
      
      
      
      
      */
      private["_index","_veh","_c_arr","_id","_colorcost","_i","_text"];
      if(!isNull (findDisplay 2300)) then {
      _index = lbCurSel 2302;
      lbClear 2303;
      _veh = lbData[2302,_index];
      _c_arr = [_veh] call life_fnc_vehicleColorCfg;
      _id = switch(playerSide) do {case civilian: {"civ"}; case west:{"cop"}; default {"civ"};};
      _colorcost = 100;
      for "_i" from 0 to (count _c_arr)-1 do
      {
      if((_c_arr select _i) select 1 == _id) then
                  {
      _text = [_veh,_i] call life_fnc_vehicleColorStr;
      
      
      
      
      
      
      
      lbAdd[2303,format["%1",_text]];
      lbSetValue [2303,(lbSize 2303)-1,_i];
      //lbSetData[2303, [_colorcost] call life_fnc_numberText];
      };
      };
      
      
      
      
      
      
      
      lbSetCurSel [2303,0];
      if((lbSize 2303)-1 != -1) then
      {
          ctrlShow[2303,true];
      }
          else
      {
          ctrlShow[2303,false];
      };
      
      
      
      
      
      
      
      };
      _haha = typeOf _x;
      _vehicles lbSetData [(lbSize _vehicles)-1,_haha];
      Alles anzeigen

      3. Erstellt eine neue sqf namens fn_RepaintVehicle.sqf  und kopiert diese datei in euer repaint Ordner mit folgendem Inhallt:

      Code
      /*
      File: fn_RepaintVehicle.sqf
      Author: MooN-Gaming
      
      
      
      
      
      
      
      Description: Does the active repaint man....read the title!
      */
      private["_index","_veh","_color","_color_index"];
      if(!isNull (findDisplay 2300)) then {
      _veh = nearestObject [position player, "LandVehicle"];
      _color = lbcursel 2303;
      _color_index = lbValue[2303,_color];
      closeDialog 0;
      
      
      
      
      
      
      
      _baseprice = 20000;
      _vehicleData = _veh getVariable["vehicle_info_owners",[]];
      _vehOwner = (_vehicleData select 0) select 0;
      if(life_cash < _basePrice) exitWith {hint "Du hast keine 20000$ um den Lackierer zu bezahlen."};
      
      
      
      
      
      
      
      if(isNil {_vehicleData}) exitWith {hint "Es gibt keine Infos zu diesem Fahrzeug, es ist entweder gemietet oder gecheated."};
      if ((getPlayerUID player) != _vehOwner) exitWith {hint "Du bist nicht der Besitzer des Fahrzeugs das lackiert werden soll."};
      
      
      
      
      
      
      
      life_action_inUse = true;
      
      
      
      
      
      
      
      [player,"spraycan"] call life_fnc_globalSound;
      
      
      
      
      
      
      
      _displayName = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "displayName");
      _upp = format["Lackiere %1",_displayName];
      //Setup our progress bar.
      disableSerialization;
      5 cutRsc ["life_progress","PLAIN"];
      _ui = uiNameSpace getVariable "life_progress";
      _progress = _ui displayCtrl 38201;
      _pgText = _ui displayCtrl 38202;
      _pgText ctrlSetText format["%2 (1%1)...","%",_upp];
      _progress progressSetPosition 0.01;
      _cP = 0.01;
      
      
      
      
      
      
      
      while{true} do
      {
      if(animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then {
      [[player,"AinvPknlMstpSnonWnonDnon_medic_1"],"life_fnc_animSync",true,false] spawn life_fnc_MP;
      player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1";
      }; 
      sleep 0.29;
      
      
      
      
      
      
      
      _cP = _cP + 0.01;
      _progress progressSetPosition _cP;
      _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp]; 
      if(_cP >= 1) exitWith {};
      if(!alive player) exitWith {};
      if(player != vehicle player) exitWith {};
      if(life_interrupted) exitWith {};
      };
      
      
      
      
      
      
      
      life_action_inUse = false;
      5 cutText ["","PLAIN"];
      player playActionNow "stop";
      if(life_interrupted) exitWith {life_interrupted = false; titleText["Abgebrochen!","PLAIN"]; life_action_inUse = false;};
      if(player != vehicle player) exitWith {titleText["Du musst aus dem Fahrzeug aussteigen, um es lackieren zu können!","PLAIN"];};
      
      
      
      
      
      
      
      life_cash = life_cash - _basePrice;
      //Send toDB
      [[_veh,_color_index],"TON_fnc_vehicleRepaint",false,false] spawn life_fnc_MP;
      
      
      
      
      
      
      
      //Color vehicle locally
      [_veh,_color_index] call life_fnc_colorVehicle;
      
      
      
      
      
      
      
      [] call SOCK_fnc_updateRequest; //Sync silently because it's obviously silently..
      
      
      
      
      
      
      
      hint format["Fahrzeug: %1 || Neue Farbe: %2 || Besitzer: %3",_veh,_color_index,_vehicledata];
      
      
      
      
      
      
      
      };
      Alles anzeigen

      4. Erstellt eine neue sqf namens fn_RepaintMenu.sqf und kopiert diese datei in euer repaint Ordner mit folgendem Inhallt:

      Code
      /*
      File: fn_RepaintMenu.sqf
      Author: MooN-Gaming
      
      
      
      
      
      
      
      Description: What could it do bro?!
      
      
      
      
      
      
      
      */
      
      
      
      
      
      
      
      private["_display","_vehicles","_objects","_color","_haha","_pic","_text"];
      createDialog "Life_vehicle_repaint";
      disableSerialization;
      if(!isNull (findDisplay 2300)) then {
      _display = findDisplay 2300;
      _vehicles = _display displayCtrl 2302;
      
      
      
      
      
      
      
      _objects = nearestObjects[getPos (_this select 0),["Car","Air","Ship"],8];
      //_objects = nearestObject [position player, "LandVehicle"];
      _xx = _objects select 0;
      
      
      
      
      
      
      
      //List vehicles
      {
      
                  if(vehicle player != _x) then {
                  _color = [(typeOf _xx),(_xx getVariable "Life_VEH_color")] call life_fnc_vehicleColorStr;
                  _pic = getText(configFile >> "CfgVehicles" >> typeOf _x >> "picture");            
                  _text = format["(%1)",_color];
                  _haha = typeOf _x;            
                  if(_text == "()") then
                  {
                  _text = "";
                  };            
                  _vehicles lbAdd format ["%1 || %2", getText(configFile >> "cfgVehicles" >> typeOf _x >> "DisplayName"), _text];        
                  _vehicles lbSetPicture [(lbSize _vehicles)-1,_pic];    
                  _vehicles lbSetData [(lbSize _vehicles)-1,_haha];
              };        
          } foreach  _objects;
      };
      Alles anzeigen

      5. Erstellt eine neue hpp namens veh_repaint.hpp und kopiert diese datei in euer dialog Ordner mit folgendem Inhallt:

      Code
      class Life_vehicle_repaint {
          idd = 2300;
          name= "life_vehrepaint_menu";
          movingEnable = false;
          enableSimulation = true;
          //onLoad = "[] execVM 'core\client\keychain\init.sqf'";
      
          class controlsBackground {
              class Life_RscTitleBackground:Life_RscText {
                  colorBackground[] = {0.4, 0, 0, 0.7};
                  idc = -1;
                  x = 0.1;
                  y = 0.2;
                  w = 0.8;
                  h = (1 / 25);
              };
      
              class MainBackground:Life_RscText {
                  colorBackground[] = {0, 0, 0, 0.7};
                  idc = -1;
                  x = 0.1;
                  y = 0.2 + (11 / 250);
                  w = 0.8;
                  h = 0.6 - (22 / 250);
              };
          };
      
          class controls {
      
      
      
      
      
      
      
              
              class Title : Life_RscTitle {
                  colorBackground[] = {0, 0, 0, 0};
                  idc = 2301;
                  text = "Auto umlackierung";
                  x = 0.1;
                  y = 0.2;
                  w = 0.8;
                  h = (1 / 25);
              };
      
              class VehicleList : Life_RscListBox 
              {
                  idc = 2302;
                  text = "";
                  sizeEx = 0.035;
                  colorBackground[] = {0,0,0,0};
                  onLBSelChanged = "[_this] call life_fnc_Repaintcolor";
      
                  x = 0.12; y = 0.26;
                  w = 0.76; h = 0.4;
              };
      
              class ColorList : Life_RscCombo
              {
                  idc = 2303;
                  x = 0.42; y = 0.68;
                  w = 0.275; h = 0.03;
              };
      
      
      
      
      
      
      
              class CloseButtonKey : Life_RscButtonMenu {
                  idc = -1;
                  text = "$STR_Global_Close";
                  onButtonClick = "closeDialog 0;";
                  x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH));
                  y = 0.8 - (1 / 25);
                  w = (6.25 / 40);
                  h = (1 / 25);
              };        
      
              class RepaintCar : life_RscButtonMenu {
                  idc = -1;
                  text = "Repaint ($20000)";
                  onButtonClick = "[] spawn life_fnc_RepaintVehicle;";
                  x = 0.26 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH));
                  y = 0.8 - (1 / 25);
                  w = (10 / 40);
                  h = (1 / 25);
              };
      
      
      
      
      
      
      
          };
      };
      Alles anzeigen

      6. Geht in eure dialog/MasterHandler.h und fügt folgendes ein:

      Code
      #include "veh_repaint.hpp"

      7. Öffnet eure Functions.h und fügt eine neue class hinzu:

      Code
      class anstrich
          {
              file = "core\repaint";
      
              class RepaintMenu;
              class Repaintcolor;
              class RepaintVehicle;        
          };

      8. Geht in eure Description.ext und fügt einen neuen Sound ein:

      Code
      class spraycan
          {
          name = "spraycan";    
          sound[] = {"\sounds\spraycan.ogg", 1.0, 1};
          titles[] = {};
          };

      life_server


      1. Geht in eure config.cpp und sucht nach class MySQL und fügt folgendes darunter:

      Code
      class repaintVehicle {};

      Sucht weiter nach in Class Systems und fügt das noch ein:

      Code
      class vehicleRepaint {};

      2. Erstellt eine neue sqf namens fn_repaintVehicle.sqf und kopiert diese datei in euer Functions/MySQL Ordner mit folgendem Inhallt:

      Code
      /*
      
      
      
      
      
      
      
      Author: MooN-Gaming
      
      
      
      
      
      
      
      Thanks to Black lagoon developing
      
      
      
      
      
      
      
      */
      
      
      
      
      
      
      
      private["_uid","_side","_type","_className","_color","_plate","_query","_sql"];
      _uid = [_this,0,"",[""]] call BIS_fnc_param;
      _plate = [_this,1,-1,[0]] call BIS_fnc_param;
      _color = [_this,2,0,[0]] call BIS_fnc_param;
      //Stop bad data being passed.
      if(_uid == "" OR _color == -1 OR _plate == -1) exitWith {diag_log "repaintVehicle canceled!";};
      _query = format["UPDATE vehicles SET color='%1' WHERE plate='%2' AND pid='%3'",_color, _plate, _uid];
      
      
      
      
      
      
      
      waitUntil {sleep (random 0.3); !DB_Async_Active};
      _queryResult = [_query,1] call DB_fnc_asyncCall;
      Alles anzeigen

      3. Erstellt eine neue sqf namens fn_vehicleRepaint.sqf und kopiert diese datei in euer Functions/Systems Ordner mit folgendem Inhallt:

      Code
      /*
      Author: MooN-Gaming
      
      
      
      
      
      
      
      Thanks to Black lagoon Developing
      */
      private["_uid","_type","_classname","_color","_plate","_vInfo"];
      _vehicle = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param;
      _color = [_this,1,-1,[0]] call BIS_fnc_param;
      //Error checks
      if(isNull _vehicle) exitWith {diag_log "Tried to repaint null vehicle. Canceled.";};
      if(!alive _vehicle) exitWith {diag_log "Tried to repaint non alive vehicle. Canceled.";};
      _vInfo = _vehicle getVariable["dbInfo",[]];
      if(count _vInfo == 0) exitWith
      {
      diag_log "Tried to repaint a non persistent vehicle. Canceled.";
      };
      _plate = _vInfo select 1;
      _uid = _vInfo select 0;
      diag_log "Vehicle repainted.";
      [_uid,_plate,_color] call DB_fnc_repaintVehicle;
      Alles anzeigen

      Editor


      Zuletzt noch sucht ihr euch ein plätzchen aus, wo ihr gerne diesen Shop haben wollt.
      Erstellt einen neuen NPC mit folgendem INIT Befehl:

      Code
      this allowDamage false; this enableSimulation false; this addAction ["Auto umlackieren", life_fnc_RepaintMenu];

      Das war es. Preis für eine Umlackierung kostet 20000.
      Kann beliebig geändert werden in der fn_RepaintVehicle.sqf

      Code
      _baseprice = 20000;

      Vergisst bitte nicht, falls ihr den Preis ändert diesen auch in der life_server anzupassen. Der Knopf zum Shop das man das Auto umlackieren kann darin steht nähmlich der Preis.


      !!Wichtig!!
      Wenn ihr ein Auto Umlackiert, seht vorerst nur ihr der neue Skin auf eurem Auto. Die anderen sehen alle noch den alten.
      Parkt einfach euer auto in die Garage, und hollt es wieder raus, somit sehen dann alle den neuen Skin.




      Viel spaß damit. :thumbup:


      MfG
      Noldy

      Dateien

      spraycan.zip 175,35 kB – 516 Downloads
    • [Tutorial] Voll Uran inklusive Damage Zone Script

      • Noldy
      • 9. August 2015 um 05:29

      Hallo,

      Hier mal ein etwas größerer Script, der ich für euch übersetze.
      Es handelt sich um Uran inkl Radioaktive Zone (Dmg Zone) wenn ihr kein Strahlenanzug habt.
      Das ganze ist in 4x prozessen fertig.

      So, fangen wir mal an:

      1. Geht in eure Functions.h und fügt folgendes unter class actions ein:

      Code
      class gatherUranium {};
      class processActionDual {};
      class processActionLsd {};

      2. Erstellt eine neue sqf Datei namens fn_gatherUranium.sqf und fügt diese datei bei core/actions ein mit folgendem Inhallt:

      Spoiler anzeigen

      /*
      File: fn_gatherUranium.sqf

      Description:
      Gathers Uranium?
      */
      private["_sum","_dice"];

      _dice=ceil(random 3);
      _sum = ["uranium1",_dice,life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff;

      if(_sum > 0) then
      {
      life_action_inUse = true;
      titleText["Sammle Uranabfall...","PLAIN"];
      titleFadeOut 6;
      sleep 6;
      if(([true,"uranium1",_sum] call life_fnc_handleInv)) then
      {
      titleText[format["Du hast %1 Uranabfall gesammelt.",_sum],"PLAIN"];
      };
      };

      life_action_inUse = false;

      3. Erstellt eine neue sqf Datei namens fn_processActionDual.sqf und fügt diese datei bei core/actions ein mit folgendem Inhallt:

      Spoiler anzeigen

      /*
      File: fn_processActionDual.sqf
      Author: Bryan "Tonic" Boardwine

      Description:
      Master handling for processing an item.
      */
      private["_vendor","_type","_itemInfo","_oldItem1","_oldItem2","_newItem","_cost","_upp","_hasLicense","_itemName","_oldVal","_oldVal1","_oldval2","_ui","_progress","_pgText","_cP","_speed"];
      _vendor = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param;
      _type = [_this,3,"",[""]] call BIS_fnc_param;
      _speed = "medium";
      //Error check
      if(isNull _vendor OR _type == "" OR (player distance _vendor > 10)) exitWith {};
      if ((_type == "uranium2") && (life_inv_puranium == 0)) exitWith {hint "Du hast kein Produkt, um das Uran zu lösen";};

      //unprocessed item,processed item, cost if no license,Text to display (I.e Processing (percent) ..."
      _itemInfo = switch (_type) do
      {
      case "uranium2": {["uranium2","puranium","uranium3",6000,"Legale Uran Auflösung"];};
      case "uranium2b": {["uranium2","ipuranium","uranium3",6000,"Uran Auflösung"];};
      default {[]};
      };

      //Error checking
      if(count _itemInfo == 0) exitWith {};

      //Setup vars.
      _oldItem1 = _itemInfo select 0;
      _oldItem2 = _itemInfo select 1;
      _newItem = _itemInfo select 2;
      _cost = _itemInfo select 3;
      _upp = _itemInfo select 4;
      _hasLicense = missionNamespace getVariable (([_type,0] call life_fnc_licenseType) select 0);
      _itemName = [([_newItem,0] call life_fnc_varHandle)] call life_fnc_varToStr;
      _oldVal1 = missionNamespace getVariable ([_oldItem1,0] call life_fnc_varHandle);
      _oldVal2 = missionNamespace getVariable ([_oldItem2,0] call life_fnc_varHandle);

      if(_oldVal1 <= _oldVal2) then
      {
      _oldVal = _oldVal1;
      }
      else
      {
      _oldVal = _oldVal2;
      };

      _cost = _cost * _oldVal;
      //Some more checks
      if(_oldVal == 0) exitWith {};

      //Setup our progress bar.
      disableSerialization;
      5 cutRsc ["life_progress","PLAIN"];
      _ui = uiNameSpace getVariable "life_progress";
      _progress = _ui displayCtrl 38201;
      _pgText = _ui displayCtrl 38202;
      _pgText ctrlSetText format["%2 (1%1)...","%",_upp];
      _progress progressSetPosition 0.01;
      _cP = 0.01;

      life_is_processing = true;

      if(_hasLicense) then
      {

      while{true} do
      {
      sleep 0.25;
      _cP = _cP + 0.01;
      _progress progressSetPosition _cP;
      _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp];
      if(_cP >= 1) exitWith {};
      if(player distance _vendor > 10) exitWith {};
      };
      if(player distance _vendor > 10) exitWith {hint "Du musst in der nähe bleiben: 10m."; 5 cutText ["","PLAIN"]; life_is_processing = false;};
      if(!([false,_oldItem1,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; life_is_processing = false;};
      if(!([false,_oldItem2,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; life_is_processing = false;};
      if(!([true,_newItem,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; [true,_oldItem1,_oldVal] call life_fnc_handleInv; [true,_oldItem2,_oldVal] call life_fnc_handleInv; life_is_processing = false;};
      5 cutText ["","PLAIN"];
      titleText[format["Du hast %1 zu %2 verarbeitet",_oldVal,_itemName],"PLAIN"];
      life_is_processing = false;
      }
      else
      {

      if(life_cash < _cost) exitWith {hint format["Du brauchst $%1 um ohne Lizenz zu verarbeiten!",[_cost] call life_fnc_numberText]; 5 cutText ["","PLAIN"]; life_is_processing = false;};

      while{true} do
      {
      sleep 0.5;
      _cP = _cP + 0.01;
      _progress progressSetPosition _cP;
      _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp];
      if(_cP >= 1) exitWith {};
      if(player distance _vendor > 10) exitWith {};
      };
      if(player distance _vendor > 10) exitWith {hint "Du musst in der nähe bleiben: 10m."; 5 cutText ["","PLAIN"]; life_is_processing = false;};
      if(life_cash < _cost) exitWith {hint format["Du brauchst $%1 um ohne lizenz zu verarbeiten!",[_cost] call life_fnc_numberText]; 5 cutText ["","PLAIN"]; life_is_processing = false;};
      if(!([false,_oldItem1,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; life_is_processing = false;};
      if(!([false,_oldItem2,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; life_is_processing = false;};
      if(!([true,_newItem,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; [true,_oldItem1,_oldVal] call life_fnc_handleInv; [true,_oldItem2,_oldVal] call life_fnc_handleInv; life_is_processing = false;};
      5 cutText ["","PLAIN"];
      titleText[format["Du hast %1 zu %2 zu $%3 verarbeitet",_oldVal,_itemName,[_cost] call life_fnc_numberText],"PLAIN"];
      life_cash = life_cash - _cost;
      life_is_processing = false;
      };

      4. Erstellt eine neue sqf Datei namens fn_processActionLsd.sqf und fügt diese datei bei core/actions ein mit folgendem Inhallt:

      Spoiler anzeigen

      /*
      File: fn_processActionLsd.sqf
      Author: Bryan "Tonic" Boardwine

      Description:
      Master handling for processing an item.
      */
      private["_vendor","_type","_itemInfo","_oldItem","_newItem","_cost","_upp","_hasLicense","_itemName","_oldVal","_ui","_progress","_pgText","_cP"];
      _vendor = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param;
      _type = [_this,3,"",[""]] call BIS_fnc_param;
      //Error check
      if(isNull _vendor OR _type == "" OR (player distance _vendor > 10)) exitWith {};

      //unprocessed item,processed item, cost if no license,Text to display (I.e Processing (percent) ..."
      _itemInfo = switch (_type) do
      {
      case "uranium3": {["uranium3","uranium4",10000,"Uran trennen"]};
      default {[]};
      };

      //Error checking
      if(count _itemInfo == 0) exitWith {};

      //Setup vars.
      _oldItem = _itemInfo select 0;
      _newItem = _itemInfo select 1;
      _cost = _itemInfo select 2;
      _upp = _itemInfo select 3;
      _hasLicense = missionNamespace getVariable (([_type,0] call life_fnc_licenseType) select 0);
      _itemName = [([_newItem,0] call life_fnc_varHandle)] call life_fnc_varToStr;
      //_oldVal = missionNamespace getVariable ([_oldItem,0] call life_fnc_varHandle);
      _oldVal = 1;

      _cost = _cost * _oldVal;
      //Some more checks
      if(_oldVal == 0) exitWith {};

      //Setup our progress bar.
      disableSerialization;
      5 cutRsc ["life_progress","PLAIN"];
      _ui = uiNameSpace getVariable "life_progress";
      _progress = _ui displayCtrl 38201;
      _pgText = _ui displayCtrl 38202;
      _pgText ctrlSetText format["%2 (1%1)...","%",_upp];
      _progress progressSetPosition 0.01;
      _cP = 0.01;

      life_is_processing = true;

      if(_hasLicense) then
      {
      titleText["Du musst jedes einzeln verarbeiten!","PLAIN"];
      while{true} do
      {
      sleep 0.05;
      _cP = _cP + 0.01;
      _progress progressSetPosition _cP;
      _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp];
      if(_cP >= 1) exitWith {};
      if(player distance _vendor > 10) exitWith {};
      };

      if(player distance _vendor > 10) exitWith {hint "Du musst in der nähe bleiben: 10m"; 5 cutText ["","PLAIN"]; life_is_processing = false;};
      if(!([false,_oldItem,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; life_is_processing = false;};
      if(!([true,_newItem,_oldVal] call life_fnc_handleInv)) exitWith {5 cutText ["","PLAIN"]; [true,_oldItem,_oldVal] call life_fnc_handleInv; life_is_processing = false;};
      5 cutText ["","PLAIN"];

      titleText[format["Du hast %1 zu %2 verarbeitet",_oldVal,_itemName],"PLAIN"];

      life_is_processing = false;

      }
      else
      {

      hint "Du kannst nicht ohne Lizenz verarbeiten.";
      life_is_processing = false;
      };

      5. Geht in eure core\action\fn_processAction.sqf und fügt folgendes ein:

      Code
      case "uranium1":
          {
              ["uranium1","uranium2",5000,"Uran Reinigen"]
          };
          case "uranium4":
          {
              ["uranium4","uranium",15000,"Uran Anreichern"]
          };

      6. Geht in eure core\config\fn_ItemWeight.sqf und fügt folgende dazu:

      Code
      case "puranium": {5};
          case "ipuranium": {3};
          case "uranium1": {6};
          case "uranium2": {4};
          case "uranium3": {4};
          case "uranium4": {4};
          case "uranium": {3};

      7. Geht in eure core\config\fn_licensePrice.sqf und fügt dies hinzu:

      Code
      case "uranium": {2000000};

      8. Geht in eure core_config_fn_licenseType.sqf und fügt folgendes bei case 0: hinzu:

      Code
      case "uranium": {_var = "license_civ_uranium"};
                  case "uranium1": {_var = "license_civ_uranium"};
                  case "uranium2": {_var = "license_civ_uranium"};
                  case "uranium2b": {_var = "license_civ_uranium"};
                  case "uranium3": {_var = "license_civ_uranium"};
                  case "uranium4": {_var = "license_civ_uranium"};


      Bei case 1:

      Code
      case "license_civ_uranium": {_var = "uranium"};
                  case "license_civ_uranium": {_var = "uranium1"};
                  case "license_civ_uranium": {_var = "uranium2"};
                  case "license_civ_uranium": {_var = "uranium2b"};
                  case "license_civ_uranium": {_var = "uranium3"};
                  case "license_civ_uranium": {_var = "uranium4"};

      9. Öffnet eure core\config\varHandle.sqf und fügt folgendes bei case: 0 hinzu:

      Code
      case "puranium": {"life_inv_puranium"};
                  case "ipuranium": {"life_inv_ipuranium"};
                  case "uranium1": {"life_inv_uranium1"};
                  case "uranium2": {"life_inv_uranium2"};
                  case "uranium3": {"life_inv_uranium3"};
                  case "uranium4": {"life_inv_uranium4"};
                  case "uranium": {"life_inv_uranium"};


      Bei case: 1

      Code
      case "life_inv_puranium": {"puranium"};
                  case "life_inv_ipuranium": {"ipuranium"};
                  case "life_inv_uranium1": {"uranium1"};
                  case "life_inv_uranium2": {"uranium2"};
                  case "life_inv_uranium3": {"uranium3"};
                  case "life_inv_uranium4": {"uranium4"};
                  case "life_inv_uranium": {"uranium"};

      10. Geht in eure core\config\fn_VarToStr.sqf und fügt folgendes hinzu:

      Code
      case "life_inv_ipuranium": {"Illegale Uranlösung"};
      case "life_inv_puranium": {"Legale Uranauflösung"};
          case "life_inv_uranium1": {"Uranabfall"};
          case "life_inv_uranium2": {"Gereinigtes Uran"};
          case "life_inv_uranium3": {"Aufgelöstes Uran"};
          case "life_inv_uranium4": {"Uran"};
          case "life_inv_uranium": {"Angereichertes Uran"};


      Unter //License Block noch das hier:

      Code
      case "license_civ_uranium": {"Uran Lizenz"};

      11. Geht in eure core\config\fn_virtshops.sqf und fügt einen neuen shop hinzu:

      Code
      case "uranium": {["Uranhändler",["uranium","puranium"]]};


      (Ihr könnt natürlich das uranium und das puranium auch in ein anderen Shop platzieren.) Denkt dran, puranium ist LEGAL.
      und nun noch die Illegale Lösung hinzufügen.

      Code
      case "rebel": {["Rebellen Markt",["ipuranium"]]};


      Ich habe das so gemmacht, das man nur das ipuranium kaufen kann und diese in den Schwarzmarkt gemmacht. Heisst im Klartext, bei mir ist dieser Job nur auf Illegalem wege abzuschliessen.

      12. Geht in eure core\config\fn_clothing_bruce.sqf und fügt jetzt der Strahlenanzug ein. Fügt nun am schluß der case: 0 dies hinzu:

      Code
      ["U_C_Scientist","Strahlenanzug",100000]


      Bitte achtet darauf, das kein Komma am schluß ist.

      13. Geht in eure core\configuraiton.sqf und fügt nun folgende sachen hinzu:
      life_inv_items =

      Code
      "life_inv_puranium",
      "life_inv_ipuranium",
      "life_inv_uranium1",
      "life_inv_uranium2",
      "life_inv_uranium3",
      "life_inv_uranium4",
      "life_inv_uranium"


      life_licenses =

      Code
      ["license_civ_uranium","civ"]


      life_illegal_items =

      Code
      ["ipuranium",10000] ];


      sell_array =

      Code
      ["uranium",35000]


      buy_array =

      Code
      ["puranium",15000],
      ["ipuranium",9000]


      Auch hier bitte auf die Kommas achten!

      14. Geht in eure core\init_survival.sqf und fügt folgendes ganz unten hinzu:

      Code
      [] spawn
      {
          while {true} do
          {
              sleep 1.5;
              if(life_inv_uranium2 != 0) then {
                  player forceWalk true;
                  player setFatigue 1;
                  hint "Du transportierst Uranium das sehr schwer ist, deswegen bewegst du dich langsamer!";
              } else {
                  if(isForcedWalk player) then {
                      player forceWalk false;
                  };
              };
          };
      };
      
      
      
      
      [] spawn
      {
          while {true} do
          {
              private["_damage"];
              sleep 1;
              while {((player distance (getMarkerPos "Warm_Marker") < 150) && (player getVariable["Revive",TRUE]))} do
              {
                  if(uniform player == "U_C_Scientist") then
                  {
                      hint "!!! Du betrittst die Radioaktive Sperrzone !!! Aber dein Schutzanzug schützt dich";
                      sleep 5;
                  }else
                  {
                      hint "!!! ACHTUNG RADIOAKTIVE ZONE !!! DU KANNST STERBEN, WENN DU KEINEN SCHUTZANZUG AN HAST";
                      _damage = damage player;
                      _damage = _damage + 0.1;
                      player setDamage (_damage);
                      [] call life_fnc_hudUpdate;
                      sleep 5;
                  };
              };
          };
      };
      Alles anzeigen

      15. Jetzt erstellen wir noch die Zone. Geht in eure core/civilian/fn_zoneCreator.sqf und fügt folgendes hinzu:

      Code
      _uranZones = ["uran_1"];
      Code
      //Create uran zones
      {
          _zone = createTrigger ["EmptyDetector",(getMarkerPos _x)];
          _zone setTriggerArea[150,150,0,false];
          _zone setTriggerActivation["CIV","PRESENT",true];
          _zone setTriggerStatements["player in thislist","LIFE_Action_Uranium = player addAction['Sammle Uran Abfall',life_fnc_gatherUranium,'',0,false,false,'','!life_action_inUse'];","player removeAction LIFE_Action_Uranium;"];
      } foreach _uranZones;

      16. Öffnet eure core/vehicle/fn_vehStoreItem.sqf und sucht nach:

      Code
      if(_ctrl == "goldbar" && {!(life_trunk_vehicle isKindOf "LandVehicle" OR life_trunk_vehicle isKindOf "House_F")}) exitWith {hint "You cannot store that in anything but a land vehicle!"};


      und fügt darunter dies ein:

      Code
      if(_ctrl == "uranium1" && {!(life_trunk_vehicle isKindOf "LandVehicle" OR life_trunk_vehicle isKindOf "House_F")}) exitWith {hint "Du kannst keinen Radioaktivien Uranabfall mit dem Heli transportieren!"};

      So, nun geht ihr in euren Arma3 Editor.

      17. Sucht euch auf eurer Map einen Platz aus, wo ihr gerne die Radioaktive Zone haben wollt. Wenn ihr eine stelle gefunden habt, geht wiefolgt vor.
      erstellt einen Leeren Marker mit dem namen:

      Code
      uran_1


      Mit diesem Marker, könnt ihr in einem Radius von 150 150 Uranabfall sammeln.
      Erstellt einen neuen Marker, was für einen ist euch überlassen. (Ich empfelle Minenfeld [PB]) und gebt folgendes bei name ein:

      Code
      Warm_Marker


      und bei Text:

      Code
      Radioaktive Zone!


      Der Marker ist dafür da, das ihr in einem Radius von 150 150 Damage kriegt.
      Schaut, das alle 2 Marker aufeinander sind. Beide haben einen Radius von 150 150.

      Nun kommen noch die verschiedene NPCs, die ihr erstellen müsst. Gebt jeweills folgendes in die INIT ein:

      Uran Händler INIT:

      Code
      this allowDamage false; this enableSimulation false; this addAction["Uran Händler",life_fnc_virt_menu,"uranium"];

      Prozess 1:

      Code
      this enableSimulation false; this allowDamage false; this addAction["Uran reinigen",life_fnc_processAction,"uranium1",0,false,false,"",' life_inv_uranium1 > 0 && !life_is_processing'];

      Prozess 2:

      Code
      this enableSimulation false; this allowDamage false; this addAction["Illegale Uranauflösung",life_fnc_processActionDual,"uranium2b",0,false,false,"",' life_inv_uranium2 > 0 && life_inv_ipuranium > 0 && !life_is_processing'];
      this addAction["Legale Uranauflösung",life_fnc_processActionDual,"uranium2",0,false,false,"",' life_inv_uranium2 > 0 && life_inv_puranium > 0 && !life_is_processing'];

      Prozess 3:

      Code
      this enableSimulation false; this allowDamage false; this addAction["Uran trennen",life_fnc_processActionLsd,"uranium3",0,false,false,"",' life_inv_uranium3 > 0 && !life_is_processing'];

      Prozess 4:

      Code
      this enableSimulation false; this allowDamage false; this addAction["Uran anreichern",life_fnc_processAction,"uranium4",0,false,false,"",' life_inv_uranium4 > 0 && !life_is_processing'];

      Lizenz:

      Code
      this addAction[format["%1 ($%2)",["license_civ_uranium"] call life_fnc_varToStr,[(["uranium"] call life_fnc_licensePrice)] call life_fnc_numberText],life_fnc_buyLicense,"uranium",0,false,false,"",' !license_civ_uranium && playerSide == civilian '];

      Das war es.

      Nun habt ihr Angereichertes Uran und könnt dies verkaufen wo immer ihr es eingetragt habt.

      Denkt daran, eine Illegale Uranauflösung oder eine Legale Auflösung müsst ihr kaufen um überhaupt an das ferige Uran zu kommen. Angenommen ihr sammelt 10 Uranabfall, so müsst ihr auch 10 Uranauflösungen kaufen. Pro Auflösung 1 Uran.

      Wenn ihr irgentwo schwierigkeiten habt, dürft ihr gerne es hier posten und ich versuche euch so gut wie möglich zu helfen.

      Viel spaß damit.

      MfG
      Noldy

    • [Tutorial] Polizei in geschlossene Fahrzeuge ein und aussteigen

      • Noldy
      • 9. August 2015 um 05:28

      Hallo NG Community,

      Lange her, als ich mein letztes Tutorial gemmacht habe.

      Bei diesem Tutorial können Polizisten bei geschlossenen Türen als Fahrer oder Beifahrer einsteigen.

      So können also die leute, denen das Trollen spaß macht nicht mehr Trollen ;)

      Fangen wir mal an:

      1. Erstellt eine neue SQF datei namens fn_copEnter.sqf mit folgendem Inhallt, und fügt diese in euren core/cop Ordner:

      Code
      /*
      	File: fn_copEnter.sqf
      	Author: I dunno, I do not care!
      
      	Description:
      	Allows Cops to enter locked Vehicles
      */
      if(playerSide != west) exitWith {};
      private ["_position","_veh"];
      _position = _this select 3;
      
      
      
      
      switch (_position) do
      {
      	case "driver":
      	{
      		cursorTarget lock false;
      		player action ["getInDriver", cursorTarget];
      		cursorTarget lock true;
      	};
      	case "passenger":
      	{
      		cursorTarget lock false;
      		player action ["getInCargo", cursorTarget];
      		cursorTarget lock true;
      	};
      	case "gunner":
      	{
      		cursorTarget lock false;
      		player action ["getIngunner", cursorTarget];
      		cursorTarget lock true;
      	};
      	case "exit":
      	{
      		_veh = vehicle player;
      		_veh lock false;
      		player action ["getOut", _veh];
      		_veh lock true;
      	};
      };
      Alles anzeigen

      2. Öffnet eure functions.h und fügt folgendes unter class cop hinzu:

      Code
      class copEnter {};

      3. Öffnet eure core/fn_setupActions.sqf und fügt folgendes unter case west hinzu:

      Code
      //CopEnter - Driver Seat
      		life_actions = life_actions + [player addAction[localize "STR_pAct_DriverSeat",life_fnc_copEnter,"driver",200,false,false,"",'!isNull cursorTarget && ((cursorTarget isKindOf "Car")||(cursorTarget isKindOf "Air")||(cursorTarget isKindOf "Ship")) && (locked cursorTarget) != 0 && cursorTarget distance player < 3.5']];
      		//CopEnter - Passenger Seat
      		life_actions = life_actions + [player addAction[localize "STR_pAct_PassengerSeat",life_fnc_copEnter,"passenger",100,false,false,"",'!isNull cursorTarget && ((cursorTarget isKindOf "Car")||(cursorTarget isKindOf "Air")||(cursorTarget isKindOf "Ship")) && (locked cursorTarget) != 0 && cursorTarget distance player < 3.5']]; 
      		//CopEnter - Gunner Seat
      		life_actions = life_actions + [player addAction[localize "STR_pAct_GunnerSeat",life_fnc_copEnter,"gunner",100,false,false,"",'!isNull cursorTarget && ((cursorTarget isKindOf "Car")||(cursorTarget isKindOf "Air")||(cursorTarget isKindOf "Ship")) && (locked cursorTarget) != 0 && cursorTarget distance player < 3.5']]; 
      		//CopEnter - Exit
      		life_actions = life_actions + [player addAction[localize "STR_pAct_GoOut",life_fnc_copEnter,"exit",100,false,false,"",'(vehicle player != player) && (locked(vehicle player)==2)']];

      4. Öffnet eure Stringtable.xml und fügt folgendes dazu:

      Code
      <Key ID="STR_pAct_DriverSeat">
      			<Original>Auf den Fahrersitz</Original>
      		</Key>
      		<Key ID="STR_pAct_PassengerSeat">
      			<Original>Auf den Passagiersitz</Original>
      		</Key>
      		<Key ID="STR_pAct_GunnerSeat">
      			<Original>Gunner Seat</Original>
      		</Key>
      		<Key ID="STR_pAct_GoOut">
      			<Original>Aus dem Fahrzeug austeigen</Original>
      		</Key>
      Alles anzeigen

      Das war es schon.

      Nun können Polizisten in geschlossene Fahrzeugen ein und aussteigen.

      MfG
      Noldy

    • [Tutorial] Paintball Script

      • Noldy
      • 9. August 2015 um 05:26

      Hallo GG Community

      Heute werde ich euch erklären, wie ihr einen Paintball Script auf euren Server einbaut.
      Das Script ist nicht von mir, übersetze das nur für euch. Gepostet wurde es von RyanTT.

      Euer Aktuelles Gear wird gespeichert. Ihr bekommt beim Beitritt eines Spieles eine Uniform, Waffe und Magazine. Ist das Spiel zuende, ist die Uniform, Waffe und Magazine wieder weg und ihr habt euer Aktuelles Gear wieder.


      Diese Nachricht werden alle sehen, wo auf dem Server sind. Meldet sich in den 60 Sekunden niemand an, wird die Lobby geschlossen.
      Melden sich 2-10 Spieler an, wird das Spiel in 60 Sekunden beginnen.

      Getestet wurde das auf der 3.1.4.8 und läuft ohne probleme.

      Was braucht ihr dafür?
      Eine Paintball Arena (Seid Kreativ, und baut euch eine im Editor)

      Fangen wir mal an.

      1. Öffnet eure Functions.h und fügt folgendes hinzu: (Achtet auf die { };)

      Code
      class Paintball
      	{
      		file = "core\paintball";
      		class pb_response {};
      	};


      Unter class Functions das hier hinzufügen:

      Code
      class ryn_message {};

      2. Geht in euren Ordner core und erstellt da einen neuen Ordner namens paintball

      3. In diesem Ordner erstellt ihr nun eine neue sqf datei namens pb_join.sqf mit folgendem Inhallt:

      Code
      if (joinmode==0) then {
          _PUID = getPlayerUID player;
          _spielerGeld = life_cash;
          hint "Eine Anfrage wurde an den Server gesendet, bitte warte einen Moment";
          [[_PUID,_spielerGeld],"TON_fnc_paintball",false,false] spawn life_fnc_MP;
          joinmode = 1;
      } else {
          hint "Du bist der Lobby bereits beigetreten, versuche es später noch einmal!";
      };

      4. Im gleichen Ordner wieder eine neue sqf erstellen namens fn_pb_response.sqf mit folgendem Inhallt:

      Code
      private["_respondmode","_message"];
      
      
      
      
      _respondmode = [_this,0,0,[0]] call BIS_fnc_param;
      
      
      
      
      if (_respondmode==1) then {
          _message = [_this,1,"",[""]] call BIS_fnc_param;
          hint format ["%1",_message];
      };
      
      
      
      
      if (_respondmode==2) then {
          player addEventHandler ["handleDamage", {false}];
          playMusic "LeadTrack02_F_Bootcamp";
          hint "Willkommen in der Paintballarena! Das kommende Spiel wird 5 Minuten gehen, viel Spaß!";
          meinePos = getPos player;
          [] call life_fnc_saveGear;
          player enableFatigue false;
          meingear = life_gear;
          life_gear set [16,[]];
          RemoveAllWeapons player;
          {player removeMagazine _x;} foreach (magazines player);
          removeUniform player;
          removeVest player;
          removeBackpack player;
          removeGoggles player;
          removeHeadGear player;
          player forceAddUniform "U_I_Protagonist_VR";
          player addWeaponGlobal "hgun_Pistol_heavy_02_Yorris_F";
          player addMagazines ["6Rnd_45ACP_Cylinder" , 25];
          {
              player unassignItem _x;
              player removeItem _x;
          } foreach (assignedItems player);
          player allowDamage false;
          _wohin = round(random (count pb_positionen));
          if (_wohin==count pb_positionen) then {_wohin=_wohin-1;};
          _position = pb_positionen select _wohin;
          player setPos _position;
          tode = 0;
          player addEventHandler ["Hit", {
              _wohin = round(random (count pb_positionen));
              if (_wohin==count pb_positionen) then {_wohin=_wohin-1;};
              _position = pb_positionen select _wohin;
              player setPos _position;
              tode = tode+1;
              _maxGeld = 100;
              _grenzeAusz = 30;
              _geldTod = _maxGeld/_grenzeAusz;
              _punkte = _grenzeAusz-tode;
              hintSilent parseText format ["<t align='center' color='#00E500' size='1.3'>Statistik</t><br/><br/><t align='left'>Tode</t><t align='right'>%1</t><br/><t align='left'>Punkte</t><t align='right'>%2</t>",tode,_punkte];
          }];
      };
      
      
      
      
      if (_respondmode==3) then {
          life_gear = meingear;
          [] spawn life_fnc_Loadgear;
          player setPos meinePos;
          player allowDamage true;
          player removeAllEventHandlers "Hit";
          player addEventHandler["handleDamage",{_this call life_fnc_handleDamage;}];
          player enableFatigue true;
          _grenzeAusz = 30;
          if (tode>=_grenzeAusz) then {
              hint "Das Spiel wurde beendet. Leider hast du nicht genügend Punkte erspielt, um einen Geldpreis zu erhalten!";
          } else {
              _maxGeld = 100;
              _geldTod = _maxGeld/_grenzeAusz;
              _punkte = _grenzeAusz-tode;
              _geldMin= _geldTod*tode;
              _gesamt = _maxGeld-_geldMin;
              life_cash = life_cash + _gesamt;
              hint format ["Das Spiel wurde beendet. Du hast insgesamt %1 Punkte erspielt und einen Geldpreis ($%2) erhalten. Glückwunsch!",_punkte,_gesamt];
          };
      };
      
      
      
      
      if (_respondmode==4) then {playMusic "LeadTrack06_F";};
      
      
      
      
      if (_respondmode==5) then {
          _message = [_this,1,"",[""]] call BIS_fnc_param;
          hint format ["%1",_message];
          life_cash = life_cash - 100;
      };
      Alles anzeigen


      player forceAddUniform "U_I_Protagonist_VR";
      player addWeaponGlobal "hgun_Pistol_heavy_02_Yorris_F";
      player addMagazines ["6Rnd_45ACP_Cylinder" , 25];
      Hier könnt ihr selber entscheiden, welche Uniform und Waffen ihr benutzen wollt für Paintball. Denkt daran, falls ihr die Waffe änderet, auch die richtigen Magazine dafür einzutragen.

      Etwas weiterunten, könnt ihr auch noch das Preisgeld bestimmen. Sollte eigentlich selbsterklärend sein.

      5. Öffnet eure core\functions und erstellt dort eine neue sqf namens fn_ryn_message.sqf mit folgendem Inhallt:

      Code
      private["_titel","_message"];
      
      
      
      
      _titel = [_this,0,"",[""]] call BIS_fnc_param;
      _message = [_this,1,"",[""]] call BIS_fnc_param;
      
      
      
      
      _hint = parseText format ["<t color='#ffff00'>%1</t><br/><br/><t color='#FFFFFF'>%2</t>", _titel,_message];
      
      
      
      
      hint _hint;
      Alles anzeigen

      Nun kommen wir zur life_server

      1. Öffnet eure config.cpp und fügt folgendes unter class Gangs ein:

      Code
      class Paintball
      		{
      			file = "\life_server\Functions\paintball";
      			class paintball {};
      			class game {};
      		};


      Das ganze sollte nun in etwa so aussehen:

      Spoiler anzeigen

      class Gangs
      {
      file = "\life_server\Functions\Gangs";
      class insertGang {};
      class queryPlayerGang {};
      class removeGang {};
      class updateGang {};
      };

      class Smartphone
      {
      file = "\life_server\Functions\Smartphone";
      class handleMessages {};
      class msgRequest {};
      class cleanupMessages {};
      };

      class Paintball
      {
      file = "\life_server\Functions\paintball";
      class paintball {};
      class game {};
      };

      2. Öffnet eure init.sqf und fügt folgendes ganz unten ein:

      Code
      pb_spieler = [];
      pb_spielstatus = 0;
      pb_maxspieler = 10;

      3. Geht in euren Ordner Functions und erstellt darin einen neuen Ordner namens paintball

      4.
      Erstellt in dem Ordner paintball eine neue sqf namens fn_game.sqf mit folgendem Inhallt:

      Code
      pb_spielstatus=1;
      [["Paintballarena","Ein Spieler hat soeben eine Lobby in der Paintballarena eröffnet! Die Lobby schließt sich in 60 Sekunden!"],"life_fnc_ryn_message",true,false] spawn life_fnc_MP;
      sleep 60;
      
      
      
      
      if (count pb_spieler>=2) then {
      
      
      
      
          pb_spielstatus=2;
          {
              [[2],"life_fnc_pb_response",_x,false] spawn life_fnc_MP;
          } forEach pb_spieler;
          sleep 60;
          _msg = "Das Spiel läuft noch 4 Minuten";
          {
              [[1,_msg],"life_fnc_pb_response",_x,false] spawn life_fnc_MP;
          } forEach pb_spieler;
          sleep 60;
          _msg = "Das Spiel läuft noch 3 Minuten";
          {
              [[1,_msg],"life_fnc_pb_response",_x,false] spawn life_fnc_MP;
          } forEach pb_spieler;
          sleep 60;
          _msg = "Das Spiel läuft noch 2 Minuten";
          {
              [[1,_msg],"life_fnc_pb_response",_x,false] spawn life_fnc_MP;
          } forEach pb_spieler;
          sleep 60;
          _msg = "Das Spiel läuft noch eine Minute!";
          {
              [[1,_msg],"life_fnc_pb_response",_x,false] spawn life_fnc_MP;
              [[4],"life_fnc_pb_response",_x,false] spawn life_fnc_MP;
          } forEach pb_spieler;
          sleep 60;
          {
              [[3],"life_fnc_pb_response",_x,false] spawn life_fnc_MP;
          } forEach pb_spieler;
          pb_spieler = [];
          pb_spielstatus = 0;
          joinmode = 0;
          publicVariable "joinmode";
      
      
      
      
      } else {
      
      
      
      
          _msg = "Da zu wenig Spieler sich in der Lobby befanden wurde das Spiel abgebrochen!";
          {
              [[1,_msg],"life_fnc_pb_response",_x,false] spawn life_fnc_MP;
          } forEach pb_spieler;
          pb_spieler = [];
          pb_spielstatus=0;
          joinmode = 0;
          publicVariable "joinmode";
      
      
      
      
      };
      Alles anzeigen

      5. Erstellt im gleichen Ordner eine neue sqf namens fn_paintball.sqf mit folgendem Inhallt:

      Code
      private["_uid"];
      _uid = [_this,0,"",[""]] call BIS_fnc_param;
      
      
      
      
      if (count pb_spieler==0&&pb_spielstatus==0) then {
          [[],"TON_fnc_game",false,false] spawn life_fnc_MP;
          pb_spielstatus = 1;
      };
      
      
      
      
      if (pb_spielstatus==1) then {
          _uidarr = [_uid];
          _geld = [_this,1,0,[0]] call BIS_fnc_param;
          if (_geld>=5000) then {
              pb_spieler = pb_spieler + _uidarr;
              [[5,"Du wurdest erfolgreich für das kommende Spiel angemeldet!"],"life_fnc_pb_response",_uid,false] spawn life_fnc_MP;
          } else {
              [[1,"Du hast keine 5000 Dollar bei dir!"],"life_fnc_pb_response",_uid,false] spawn life_fnc_MP;
          };
      };
      
      
      
      
      if ((pb_spielstatus==2&&count pb_spieler>=2)||(count pb_spieler==pb_maxspieler)) then {
          [[1,"Leider hat das Spiel bereits begonnen oder die Lobby ist bereits voll, versuche es später noch einmal!"],"life_fnc_pb_response",_uid,false] spawn life_fnc_MP;
      };
      Alles anzeigen

      Nun kommen wir zum Editor.

      1. Erstellt einen npc bei eurer Paintball Arena mit folgender Init:

      Code
      this allowdamage false; this enablesimulation false; this addaction ["Join Paintball","core\paintball\pb_join.sqf"];


      Dieser ist dazu da, um ein Paintball Spiel zu starten.
      Wollt ihr es so Real wie möglich hallten, stehlt diesen vor eure Paintball Arena.
      Annsonsten kann der NPC kopiert werden, und z.b. in jede Größere Stadt platziert werden.

      2. Jetzt geht es um die Spawns. Wiefiele Spawns ihr machen wollt ist euch überlassen. Öffnet eure initPlayerLocal im Hauptverzeichniss und fügt dies schonmal ganz unten ein: (Nicht schließen)

      Code
      pb_positionen = [[3608.85,2219.53,0.00143051],[3584.06,2214.19,0.0014081],[3585.87,2187.19,0.00141621],[3581.91,2160.09,0.00136614],[3588.32,2136.56,0.00113297],[3609.25,2142.77,0.00124598],[3622.72,2151.85,0.001472],[3639.73,2159.28,0.00142336],[3643.36,2183.16,0.00156975],[3579.91,2196.1,0.0014658]];
      joinmode = 0;


      Ihr bewegt euch also in eurer Paintball Arena und sucht einen passenden Spawn aus. Wo der ist, ist euch überlassen. Habt ihr in gefunden, drückt ESC und gebt folgendes in eure Debug Konsole ein:

      Code
      hintSilent str getPos player;


      Danach auf Lokal ausführen.

      Drückt erneut ESC, nun solltet ihr oben rechts einen hint angezeigt bekommen mit den Kordinaten.

      Überschreibt diese Zahlen, die in eurer initPlayerLocal stehen.

      Habt ihr nur 5 Spawns, ist das nicht schlimm. So tragt da nur 5 ein, und löscht die restlichen. (Auch hier bitte auf die [ ] , achten)

      Wir sind nun am ende angekommen.

      Sollte etwas nicht funktionieren, könnt ihr einfach in diesem Thread posten.

      Viel spaß :thumbup:

      MfG
      Noldy

    • [Tutorial] SQL Smartphone 3.1.4 (Only extDB)

      • Noldy
      • 9. August 2015 um 05:25

      Hallo
      Heut zeige ich euch, wie ihr das SQL Smartphone auf eurem Server instaliert.
      Ich bin nicht der hersteller dieses Scriptes, sondern Silex.

      Bitte vorher ein Backup machen!

      1. Öffnet eure configuration.sqf und fügt folgendes unter Life Variables ein:

      Code
      life_smartphoneTarget = ObjNull;

      2. Geht in eure Functions.h und fügt folgendes unter class Player_Menu ein:

      Code
      class smartphone {};
      class newMsg {};
      class showMsg {};

      3. Geht in euer Ordner /dialog/player_inv.hpp und sucht nach class ButtonCell. Dort findest du ein onButtonClick Event mit einem Code dahinter. Ersetze diesen mit folgendem:

      Code
      onButtonClick = "createDialog ""Life_my_smartphone"";";

      4. Öffnet euer Ordner /dialog/MasterHandler.h und fügt folgendes dazu:

      Code
      #include "smartphone.hpp"

      5. Öffnet eure /dialog/common.hpp und sucht nach der class Life_RscListNBox und komentiert dieses aus in den {} Das ganze sieht so aus:

      Spoiler anzeigen

      class Life_RscListNBox
      {
      /*
      style = 16;
      type = 102;
      shadow = 0;
      font = "PuristaMedium";
      sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
      color[] = {0.95,0.95,0.95,1};
      colorText[] = {1,1,1,1.0};
      colorDisabled[] = {1,1,1,0.25};
      colorScrollbar[] = {0.95,0.95,0.95,1};
      colorSelect[] = {0,0,0,1};
      colorSelect2[] = {0,0,0,1};
      colorSelectBackground[] = {0.8,0.8,0.8,1};
      colorSelectBackground2[] = {1,1,1,0.5};
      soundSelect[] = {"",0.1,1};
      soundExpand[] = {"",0.1,1};
      soundCollapse[] = {"",0.1,1};
      period = 1.2;
      maxHistoryDelay = 0.5;
      autoScrollSpeed = -1;
      autoScrollDelay = 5;
      autoScrollRewind = 0;
      class ListScrollBar: Life_RscScrollBar{};
      class ScrollBar: Life_RscScrollBar{};
      */


      Direkt darunter fügt nun folgendes ein:

      Code
      style = 16;
          type = 102;
          shadow = 0;
          font = "PuristaMedium";
          sizeEx = "(            (            (            ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
          color[] = {0.95,0.95,0.95,1};
          colorText[] = {1,1,1,1.0};
          colorDisabled[] = {1,1,1,0.25};
          colorScrollbar[] = {0.95,0.95,0.95,1};
          colorSelect[] = {0,0,0,1};
          colorSelect2[] = {0,0,0,1};
          colorSelectBackground[] = {0.8,0.8,0.8,1};
          colorSelectBackground2[] = {1,1,1,0.5};
          soundSelect[] = {"",0.1,1};
          soundExpand[] = {"",0.1,1};
          soundCollapse[] = {"",0.1,1};
          period = 1.2;
          maxHistoryDelay = 0.5;
          autoScrollSpeed = -1;
          autoScrollDelay = 5;
          autoScrollRewind = 0;
          rowHeight = 0.04;
          drawSideArrows = 0;
          idcLeft = -1;
          idcRight = -1;
          class ListScrollBar: Life_RscScrollBar{};
          class ScrollBar: Life_RscScrollBar{};
      Alles anzeigen


      Das ganze müsste jetzt so aussehen:

      Spoiler anzeigen

      class Life_RscListNBox
      {
      /*
      style = 16;
      type = 102;
      shadow = 0;
      font = "PuristaMedium";
      sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
      color[] = {0.95,0.95,0.95,1};
      colorText[] = {1,1,1,1.0};
      colorDisabled[] = {1,1,1,0.25};
      colorScrollbar[] = {0.95,0.95,0.95,1};
      colorSelect[] = {0,0,0,1};
      colorSelect2[] = {0,0,0,1};
      colorSelectBackground[] = {0.8,0.8,0.8,1};
      colorSelectBackground2[] = {1,1,1,0.5};
      soundSelect[] = {"",0.1,1};
      soundExpand[] = {"",0.1,1};
      soundCollapse[] = {"",0.1,1};
      period = 1.2;
      maxHistoryDelay = 0.5;
      autoScrollSpeed = -1;
      autoScrollDelay = 5;
      autoScrollRewind = 0;
      class ListScrollBar: Life_RscScrollBar{};
      class ScrollBar: Life_RscScrollBar{};
      */
      style = 16;
      type = 102;
      shadow = 0;
      font = "PuristaMedium";
      sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
      color[] = {0.95,0.95,0.95,1};
      colorText[] = {1,1,1,1.0};
      colorDisabled[] = {1,1,1,0.25};
      colorScrollbar[] = {0.95,0.95,0.95,1};
      colorSelect[] = {0,0,0,1};
      colorSelect2[] = {0,0,0,1};
      colorSelectBackground[] = {0.8,0.8,0.8,1};
      colorSelectBackground2[] = {1,1,1,0.5};
      soundSelect[] = {"",0.1,1};
      soundExpand[] = {"",0.1,1};
      soundCollapse[] = {"",0.1,1};
      period = 1.2;
      maxHistoryDelay = 0.5;
      autoScrollSpeed = -1;
      autoScrollDelay = 5;
      autoScrollRewind = 0;
      rowHeight = 0.04;
      drawSideArrows = 0;
      idcLeft = -1;
      idcRight = -1;
      class ListScrollBar: Life_RscScrollBar{};
      class ScrollBar: Life_RscScrollBar{};
      };

      6. Datei im Anhanh herunterladen, und im Ordner dialog einfügen.

      7. Geht in euer stringtable.xml und fügt folgendes dazu in einer neuen Package:

      Code
      <Package name="Smartphone">
      		<Key ID="STR_PM_Smartphone">
      			<Original>Smartphone</Original>
      		</Key>
      		<Key ID="STR_SMARTPHONE_TITLE">
      			<Original>Smartphone Menu</Original>
      		</Key>
      		<Key ID="STR_SMARTPHONE_PLAYERLISTTITLE">
      			<Original>Playerlist</Original>
      		</Key>
      		<Key ID="STR_SMARTPHONE_MESSAGETITLE">
      			<Original>Nachrichten  | VON | WANN</Original>
      		</Key>
      		<Key ID="STR_SMARTPHONE_RANDOMTITLE">
      			<Original>Nachricht zum lesen auswählen</Original>
      		</Key>
      		<Key ID="STR_Global_Close">
      			<Original>Close</Original>
      		</Key>
      		<Key ID="STR_SMARTPHONE_SCHREIBEN">
      			<Original>Schreiben</Original>
      		</Key>
      		<Key ID="STR_SMARTPHONE_NOTRUF">
      			<Original>Notruf</Original>
      		</Key>
      		<Key ID="STR_SMARTPHONE_Absenden">
      			<Original>Absenden</Original>
      		</Key>
      		<Key ID="STR_SMARTPHONE_NACHRICHTTITLE">
      			<Original>Nachricht an:</Original>
      		</Key>
      		<Key ID="STR_SMARTPHONE_Notruftitle">
      			<Original>NOTRUFE | Abuse führt zum BAN!</Original>
      		</Key>
      	</Package>
      Alles anzeigen

      8. Datei im Anhang herunterladen, und folgende 3 dateien in den /core/pmenu Ordner machen:
      fn_newMsg.sqf
      fn_showMsg.sqf
      fn_smartphone.sqf

      Das war es an der MPMissions. Nun geht es ab zu dem @life_server.

      9. Öffnet eure config.cpp und sucht nach class TON_system und fügt folgendes darunter:

      Code
      class GHBSystem
      	{
      		tag = "GHB";
      		class Smartphone
      		{
      			file = "\life_server\Functions\Smartphone";
      			class handleMessages {};
      			class msgRequest {};
      		};	
      	};

      10. Ebenfalls in der Datei vorhanden. Der Ordner Smartphone einfach in den functions Ordner ziehen.

      11. Das letzte was ihr jetzt noch machen müsst, ist folgendes in eure Datenbank einzuspielen:

      Code
      CREATE TABLE IF NOT EXISTS `messages` (
        `uid` int(12) NOT NULL AUTO_INCREMENT,
        `fromID` varchar(50) NOT NULL,
        `toID` varchar(50) NOT NULL,
        `message` text,
        `fromName` varchar(32) NOT NULL,
        `toName` varchar(32) NOT NULL,
        `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
        PRIMARY KEY (`uid`)
      ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

      Läuft perfekt auf der 3.1.4 exDB

      Ich hoffe, ich konnte euch mit diesem Tutorial helfen.

      MfG
      Noldy

      Dateien

      SQL Smartphone.zip 8,03 kB – 337 Downloads

    Registrieren oder Einloggen

    Du bist noch kein Mitglied von NodeZone.net? Registriere dich kostenlos und werde Teil einer großartigen Community!

    Registrieren

    Wichtige Links & Informationen

    Server & Hosting-Ressourcen

      Server Administration & Hosting Basics

      Windows Server Support & Guides

      Linux Server Configuration & Help

      Setting up TeamSpeak 3 & VoIP Servers

      Domains & Web Hosting for Beginners & Professionals

      Cloud Hosting, Docker & Kubernetes Tutorials

    Gameserver & Modding-Ressourcen

      ArmA 3 Tutorials & Script Collection

      Renting & Operating Gameservers

      DayZ Server Management & Help

      FiveM (GTA V) Server & Script Development

      Rust Server Modding & Administration

      Setting up & Optimizing ARK Survival Servers

    NodeZone.net – Deine Community für Gameserver, Server-Hosting & Modding

      NodeZone.net ist dein Forum für Gameserver-Hosting, Rootserver, vServer, Webhosting und Modding. Seit 2015 bietet unsere Community eine zentrale Anlaufstelle für Server-Admins, Gamer und Technikbegeisterte, die sich über Server-Management, Hosting-Lösungen und Spielemodding austauschen möchten.


      Ob Anleitungen für eigene Gameserver, Hilfe bei Root- und vServer-Konfigurationen oder Tipps zu Modding & Scripting – bei uns findest du fundiertes Wissen und praxisnahe Tutorials. Mit einer stetig wachsenden Community findest du hier Antworten auf deine Fragen, Projektpartner und Gleichgesinnte für deine Gaming- und Serverprojekte. Schließe dich NodeZone.net an und werde Teil einer aktiven Community rund um Server-Hosting, Gameserver-Management und Modding-Ressourcen.

    Wer jetzt nicht teilt ist selber Schuld:
    1. Nutzungsbestimmungen
    2. Datenschutzerklärung
    3. Impressum
    4. Urheberrechts- oder Lizenzverstoß melden
  • Trimax Design coded & layout by Gino Zantarelli 2023-2025©
    Community-Software: WoltLab Suite™