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
Sa: 17 Mai 2025
  • Anmelden oder registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • 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. Forum
    3. Gameserver & Hosting
    4. ArmA Series - ArmA 3 / Reforger
    5. Tutorials & Releases

    [Tutorial] Altis Life 4.4 ADAC (OPFOR) einfügen

      • Altis Life
    • Raptor772000
    • 1. Juli 2016 um 00:34
    1. offizieller Beitrag
    • Raptor772000
      Anfänger
      Reaktionen
      23
      Trophäen
      9
      Beiträge
      25
      • 1. Juli 2016 um 00:34
      • #1

      Hallo liebe Community,

      heute will ich euch zeigen, wie ihr die 4.Fraktion (OPFOR) in der 4.4 Altis Life einfügen könnt.

      Alle Scripts wurden gründlich durchgetestet, und versprechen Erfolgsgarantie. :thumbup:

      Wenn bei euch trotzdem Fehler auftreten sollten, lasst es mich doch gerne Wissen. Ich werde dann versuchen euch zu helfen.


      Programme die ihr brauchen werdet: - Notepad++ (wer es noch übersichtlicher haben will, kann gerne noch ein SQF Sprachpaket reinhauen ---> Installationsanleitung steht auf der Downloadpage von Armaholic)
      - PBO Manager

      Bitte macht vorher noch ein Backup eurer MPMission, eurem @life_server, und euer Datenbank. :)


      MPMission

      1. Entpackt, wenn nötig, euren Altis_Life.Altis Ordner mit dem PBO Manager.


      2. Öffnet eureConfig_Master.hpp und fügt folgendes unter "allow_medic_weapons = true;" ein:

      Code
      allow_adac_weapons = true; // true = wenn ihr wollt das eure ADACs ne Knarre halten können - false = wenn nicht


      Dann fügt ihr etwas weiter unten unter "bank_med = 6500;" das ein:

      Code
      bank_adac = 6500; //Startgeld für den ADAC


      Und noch etwas weiter unten fügt ihr unter "paycheck_med = 3000;" das ein:

      Code
      paycheck_adac = 3000; //Gehaltscheck für den ADAC


      3. Öffnet eure Config_Clothing.hpp und fügt folgende neue class hinzu:

      Code
      class adac_clothing {
          title = "STR_MAR_Adac_Clothing_Shop";
          license = "";
          side = "adac";
          uniforms[] = {
              { "NONE", "Uniform entfernen", 0, { "", "", -1 } },
              { "U_B_HeliPilotCoveralls", "ADAC Uniform", 50, { "", "", -1 } }
          };
          headgear[] = {
              { "NONE", "Kopfbedeckung entfernen", 0, { "", "", -1 } },
              { "H_Cap_marshal", "", 10, { "", "", -1 } }
          };
          goggles[] = {
              { "NONE", "Brille etfernen", 0, { "", "", -1 } },
              { "G_Shades_Black", "", 10, { "", "", -1 } },
              { "G_Shades_Blue", "", 10, { "", "", -1 } },
      	{ "G_Sport_Blackred", "", 10, { "", "", -1 } },
              { "G_Sport_Checkered", "", 10, { "", "", -1 } },
              { "G_Sport_Blackyellow", "", 10, { "", "", -1 } },
              { "G_Sport_BlackWhite", "", 10, { "", "", -1 } },
              { "G_Aviator", "", 10, { "", "", -1 } },
              { "G_Squares", "", 10, { "", "", -1 } },
              { "G_Lowprofile", "", 10, { "", "", -1 } }
          };
          vests[] = {
             { "NONE", "Weste entfernen", 0, { "", "", -1 } }
          };
          backpacks[] = {
              { "NONE", "Rucksack entfernen", 0, { "", "", -1 } },
              { "B_Kitbag_cbr", "ADAC Rucksack", 3000, { "", "", -1 } }
          };
      };
      Alles anzeigen


      4. Öffnet eure Config_VItems.hpp und fügt unter "class VirtuelShops" folgende neue class hinzu:

      Code
      class adac {
          name = "STR_Shops_Adac";
          side = "adac";
          license = "";
          level[] = { "", "", -1, "" };
          items[] = { "apple", "peach", "tbacon", "rabbit", "water", "redgull", "fuelF" };
      };


      5. Öffnet eure Config_Weapons.hpp und fügt folgende neue class hinzu:

      Code
      //Adac Shops
      class adac_basic {
          name = "ADAC Fundgrube";
          side = "adac";
          license = "";
          level[] = { "", "", -1, "" };
          items[] = {
              { "ItemGPS", "", 100, 45 },
              { "Binocular", "", 150, -1 },
              { "ToolKit", "", 250, 75 },
              { "FirstAidKit", "", 150, 65 },
              { "NVGoggles", "", 1200, 980 }
          };
          mags[] = {};
      };
      Alles anzeigen


      6. Öffnet eure Config_Licenses.hpp und fügt folgende 2 neue classes hinzu:

      Code
      //ADAC Licenses
      class adacAir {
          variable = "adacAir";
          displayName = "STR_License_Pilot";
          price = 15000;
          illegal = false;
          side = "adac";
      };
      class adacCar {
          variable = "adacCar";
          displayName = "STR_License_Abschleppen";
          price = 10000;
          illegal = false;
          side = "adac";
      };
      Alles anzeigen


      7. Öffnet eure Config_Vehicles.hpp und fügt folgende 2 classes unter "class CarShops" mit folgendem Inhalt ein:

      Code
      class adac_air_hs {
          side = "adac";
          vehicles[] = {
              { "B_Heli_Transport_03_unarmed_F", 75000, { "adacAir" }, { "", "", -1 } },
              { "I_Heli_light_03_unarmed_F", 60000, { "adacAir" }, { "", "", -1 } },
              { "O_Heli_Light_02_unarmed_F", 60000, { "adacAir" }, { "", "", -1 } }
          };
      };
      class adac_shop {
          side = "adac";
          vehicles[] = {
              { "C_Offroad_01_repair_F", 1500, { "" }, { "", "", -1 } },
              { "C_SUV_01_F", 2000, { "" }, { "", "", -1 } },
              { "B_Truck_01_mover_F", 25000, { "adacCar" }, { "", "", -1 } }
          };
      };
      Alles anzeigen


      Fügt dann unter "class LifeCfgVehicles" diese 4 neuen classes ein:

      Code
      class C_Offroad_01_repair_F {
          vItemSpace = 65;
          storageFee[] = { 0, 0, 0, 200 };
          garageSell[] = { 0, 0, 0, 500 };
          insurance = 2500;
          chopShop = 6250;
          textures[] = {
              { "ADAC", "adac", {
                  "textures\adac_offroad.jpg"
              } }
          };
      };
      class B_Truck_01_mover_F {
          vItemSpace = 1000;
          storageFee[] = { 0, 0, 0, 2000 };
          garageSell[] = { 0, 0, 0, 5000 };
          insurance = 2500;
          chopShop = 50000;
          textures[] = {
              { "ADAC", "adac", {
                  "textures\adac_hemtt.jpg"
              } }
          };
      };
      class I_Heli_light_03_unarmed_F {
          vItemSpace = 210;
          storageFee[] = { 55000, 0, 22000, 3000 };
          garageSell[] = { 72500, 0, 35000, 20000 };
          insurance = 2500;
          chopShop = 375000;
          textures[] = {
      	{ "ADAC", "adac", {
                  "textures\hellcat_adac.jpg"
              } }
          };
      };
      class B_Heli_Transport_03_unarmed_F {
          vItemSpace = 1000;
          storageFee[] = { 55000, 0, 22000, 3500 };
          garageSell[] = { 72500, 0, 35000, 25000 };
          insurance = 2500;
          chopShop = 400000;
          textures[] = {
              { "ADAC", "adac", {
                  "textures\huron_pd1.jpg",
                  "textures\huron_pd2.jpg"
              } }
          };
      };
      Alles anzeigen


      Sucht dann nach "class O_Heli_Light_02_unarmed_F" und ersetzt diese class durch das hier:

      Code
      class O_Heli_Light_02_unarmed_F {
          vItemSpace = 210;
          storageFee[] = { 55000, 0, 22000, 3000 };
          garageSell[] = { 72500, 0, 35000, 20000 };
          insurance = 2500;
          chopShop = 375000;
          textures[] = {
              { "Black", "cop", {
                  "\a3\air_f\Heli_Light_02\Data\heli_light_02_ext_co.paa"
              } },
              { "White / Blue", "civ", {
                  "\a3\air_f\Heli_Light_02\Data\heli_light_02_ext_civilian_co.paa"
              } },
              { "Digi Green", "civ", {
                "\a3\air_f\Heli_Light_02\Data\heli_light_02_ext_indp_co.paa"
              } },
              { "Desert Digi", "reb", {
                 "\a3\air_f\Heli_Light_02\Data\heli_light_02_ext_opfor_co.paa"
              } },
              { "EMS White", "med", {
                  "#(argb,8,8,3)color(1,1,1,0.8)"
              } },
              { "ADAC", "adac", {
                  "textures\adac_orca.jpg"
              } }
          };
      };
      Alles anzeigen

      Dann sucht nach "class C_SUV_01_F" und ersetzt diese class durch folgende:

      Code
      class C_SUV_01_F {
          vItemSpace = 50;
          storageFee[] = { 1000, 0, 0, 500 };
          garageSell[] = { 15000, 7500, 0, 1000 };
          insurance = 2500;
          chopShop = 15000;
          textures[] = {
              { "Dark Red", "civ", {
                  "\a3\soft_f_gamma\SUV_01\Data\suv_01_ext_co.paa"
              } },
              { "Silver", "civ", {
                  "\a3\soft_f_gamma\SUV_01\Data\suv_01_ext_03_co.paa"
              } },
              { "Orange", "civ", {
                  "\a3\soft_f_gamma\SUV_01\Data\suv_01_ext_04_co.paa"
              } },
              { "Police", "cop", {
                  "\a3\soft_f_gamma\SUV_01\Data\suv_01_ext_02_co.paa"
              } },
              { "ADAC", "adac", {
                  "textures\adac_suv.paa"
              } }
          };
      };
      Alles anzeigen


      8. Öffnet eure description.ext und fügt ganz unten diese class ein:

      Code
      class AdacMessage
      {
          title = "Notruf";
          iconPicture = "icons\messagenew.paa";
          description = "%1";
          duration = 10;
          priority = 5;
      };


      9. Öffnet eure Functions.hpp und fügt folgendes unter "class Master_Directory" ein:

      Code
      class initAdac {};

      Erstellt danach eine neue class wie folgt:

      Code
      class Adac
      {
          file = "core\adac";
          class adacMarkers {};
          class adacLoadout {};
      };



      10. Öffnet eure stringtable.xml und sucht nach "STR_Shops_Cop", dann fügt darunter das ein:

      XML
      <Key ID="STR_Shops_Adac">
        <Original>ADAC Item Shop</Original>
        <German>ADAC Gegenstände</German>
        <Italian>articoli ADAC</Italian>
        <French>articles ADAC</French>
        <Portuguese>itens ADAC</Portuguese>
        <Polish>szt ADAC</Polish>
      </Key>

      Sucht dann nach "STR_CELL_EMSRequest" und fügt darunter folgendes ein:

      XML
      <Key ID="STR_CELL_AdacRequest">
        <Original>ADAC</Original>
        <German>ADAC Notruf</German>
        <French>ADAC</French>
        <Italian>ADAC</Italian>
        <Portuguese>ADAC</Portuguese>
        <Polish>ADAC</Polish>
      </Key>

      Danach sucht ihr nach "STR_Shop_NotaCop" und fügt folgendes drunter ein:

      XML
      <Key ID="STR_Shop_NotaAdac">
        <Original>You need to be a ADAC to use this store!</Original>
        <German>Du musst ein ADAC sein, um diesen Shop nutzen zu können!</German>
        <French>Vous devez être une voiture à utiliser ce magasin peut!</French>
        <Italian>Si deve essere una cabina di utilizzare questo negozio può!</Italian>
        <Portuguese>Você deve ser um carro para usar esta loja lata!</Portuguese>
        <Polish>Musisz mieć samochód, aby skorzystać z tej sklepie można!</Polish>
      </Key>

      Dann sucht nach "STR_MAR_EMS_Item_Shop" und fügt folgendes darunter ein:

      XML
      <Key ID="STR_MAR_Adac_Item_Shop">
        <Original>ADAC Item Shop</Original>
        <German>ADAC Ausrüstung</German>
        <Portuguese>Loja de Items ADAC</Portuguese>
        <Polish>Wyposażenie ADAC</Polish>
      </Key>

      Und etwas weiter unten fügt ihr unter "STR_MAR_EMS_Clothing_Shop" das hier ein:

      XML
      <Key ID="STR_MAR_Adac_Clothing_Shop">
        <Original>ADAC Clothing Shop</Original>
        <German>ADAC Kleidungsladen</German>
        <Portuguese>ADAC Roupa Loja</Portuguese>
        <Polish>Sklep odzieżowy ADAC</Polish>
      </Key>


      11. Ladet euch dann meine IgiLoad Datei runter und packt sie in euer Hauptverzeichnis. ---> es ist wichtig das ihr diese nimmt, da ich ein paar nötige Änderungen daran vorgenommen habe.


      12. Erstellt eine neue SQF core\fn_initAdac.sqf mit folgendem Inhalt:

      Code
      #include "..\script_macros.hpp"/*    File: fn_initAdac.sqf    Author: Bryan "Tonic" Boardwine    Edit: Raptor772000    Description:    Initializes the adac..*/private["_end"];player addRating 99999999;waitUntil {!(isNull (findDisplay 46))};if((FETCH_CONST(life_adaclevel)) < 1 && (FETCH_CONST(life_adminlevel) == 0)) exitWith {    ["Notwhitelisted",FALSE,TRUE] call BIS_fnc_endMission;    sleep 35;};if(EQUAL(LIFE_SETTINGS(getNumber,"allow_adac_weapons"),0)) then{    [] spawn    {        while {true} do	{            waitUntil {sleep 3; currentWeapon player != ""};            removeAllWeapons player;	};    };};[] call life_fnc_spawnMenu;waitUntil{!isNull (findDisplay 38500)}; //Wait for the spawn selection to be open.waitUntil{isNull (findDisplay 38500)}; //Wait for the spawn selection to be done.[] execVM "IgiLoad\IgiLoadInit.sqf"; //wenn ihr kein IgiLoad wollt, einfach mit 2 Strichen vor der Zeile ignorieren Bsp. //_igiload = execVM.......


      13. Öffnet eure core\init.sqf und fügt oben unter "case independent" das ein:

      Code
      case east: {    BANK = LIFE_SETTINGS(getNumber,"bank_adac");    life_paycheck = LIFE_SETTINGS(getNumber,"paycheck_adac");};

      Etwas weiter unten fügt ihr dann das unter "case independent" ein:

      Code
      case east: {    //Initialisie ADAC    _handle = [] spawn life_fnc_initAdac;    waitUntil {scriptDone _handle};};


      14. Öffnet eure core\shops\fn_atmMenu.sqf und fügt folgendes unter "case independent: {_type = "EMS"};" ein:

      Code
      case east: {_type = "Adac"};


      15. Öffnet eure core\shops\vehicleShopBuy.sqf und fügt folgendes unter "case independent" ein:

      Code
      case east: {    [_vehicle,"adac_offroad",true] spawn life_fnc_vehicleAnimate;};


      16. Öffnet eure core\shops\fn_clothingMenu.sqf und ersetzt folgende Zeile "_flag =..." durch das hier:

      Code
      _flag = switch(playerSide) do {case west: {"cop"}; case independent: {"med"}; case east: {"adac"}; default {"civ"};};

      Und dann fügt ihr etwas weiter unten unter "if((SEL(_this,3) in ["dive"]..." das hier ein:

      Code
      if((SEL(_this,3) in ["adac_clothing"] && playerSide != east)) exitWith {hint localize "STR_Shop_NotaAdac"; closeDialog 0;};


      17. Öffnet eure core\shops\fn_weaponShopMenu.sqf und ersetzt folgende Zeile "_flag =..." durch das:

      Code
      _flag = switch(playerSide) do {case west: {"cop"}; case independent: {"med"}; case east: {"adac"}; default {"civ"};};


      18. Öffnet eure core\session\fn_updateRequest.sqf und ersetzt folgende Zeile "_flag =..." durch das hier:

      Code
      _flag = switch(playerSide) do {case west: {"cop"}; case civilian: {"civ"}; case independent: {"med"}; case east: {"adac"};};


      19. Öffnet eure core\session\fn_requestReceived.sqf und ersetzt das ganze "switch(playerSide) do {" durch das hier:

      Code
      switch(playerSide) do {    case west: {        CONST(life_coplevel, parseNumber(SEL(_this,7)));	CONST(life_medicLevel,0);	CONST(life_adaclevel,0);	life_blacklisted = SEL(_this,9);	if(EQUAL(LIFE_SETTINGS(getNumber,"save_playerStats"),1)) then {	    life_hunger = SEL(SEL(_this,10),0);	    life_thirst = SEL(SEL(_this,10),1);    };};    case civilian: {        life_is_arrested = SEL(_this,7);        CONST(life_coplevel, 0);        CONST(life_medicLevel, 0);        CONST(life_adaclevel, 0);        life_houses = SEL(_this,10);        if(EQUAL(LIFE_SETTINGS(getNumber,"save_playerStats"),1)) then {	    life_hunger = SEL(SEL(_this,9),0);	    life_thirst = SEL(SEL(_this,9),1);        };        {            _house = nearestBuilding (call compile format["%1",     SEL(_x,0)]);	    life_vehicles pushBack _house;        } foreach life_houses;        life_gangData = SEL(_this,11);        if(!(EQUAL(count life_gangData,0))) then {            [] spawn life_fnc_initGang;        };        [] spawn life_fnc_initHouses;    };    case independent: {        CONST(life_medicLevel, parseNumber(SEL(_this,7)));        CONST(life_coplevel,0);        CONST(life_adaclevel,0);        if(EQUAL(LIFE_SETTINGS(getNumber,"save_playerStats"),1)) then {            life_hunger = SEL(SEL(_this,9),0);	    life_thirst = SEL(SEL(_this,9),1);        };    };    case east: {        CONST(life_adaclevel, parseNumber(SEL(_this,7)));        CONST(life_medicLevel,0);        CONST(life_coplevel,0);        if(EQUAL(LIFE_SETTINGS(getNumber,"save_playerStats"),1)) then {            life_hunger = SEL(SEL(_this,9),0);	    life_thirst = SEL(SEL(_this,9),1);        };    };};


      20. Öffnet eure core\pmenu\fn_cellphone.sqf und fügt unter "case independent: {_type = "Med"};" das ein:

      Code
      case east: {_type = "Adac"};


      21. Öffnet eure core\pmenu\fn_p_updateMenu.sqf und ersetzt folgende Zeile "_side =..." durch:

      Code
      _side = switch(playerSide) do {case west:{"cop"}; case civilian:{"civ"}; case independent:{"med"}; case east:{"adac"};};


      22. Öffnet eure core\pmenu\fn_p_openMenu.sqf und ersetzt eure ganze "switch(playerSide) do {" durch das hier:

      Code
      switch(playerSide) do {    case west: {        ctrlShow[2011,false];	ctrlShow[2025,false];    };    case civilian: {	ctrlShow[2012,false];    };    case independent : {	ctrlShow[2012,false];	ctrlShow[2025,false];	ctrlShow[2011,false];    };    case east: {	ctrlShow[2012,false];	ctrlShow[2025,false];	ctrlShow[2011,false];    };};


      23. Öffnet eure core\medical\fn_respawned.sqf und fügt folgendes unter "case independent" ein:

      Code
      case east: {    _handle = [] spawn life_fnc_adacLoadout;};


      24. Erstellt nun einen neuen Ordner und darin eine neue SQF namens core\adac\adacLoadout.sqf mit folgendem Inhalt:

      Code
      #include "..\..\script_macros.hpp"/*    File: fn_adacLoadout.sqf    Author: Bryan "Tonic" Boardwine    Edit: Raptor772000    Description:    ADAC anziehen...*/private["_handle"];_handle = [] spawn life_fnc_stripDownPlayer;waitUntil {scriptDone _handle};player forceAddUniform "U_B_HeliPilotCoveralls";player addBackpack "B_Kitbag_cbr";player addItem "ItemMap";player assignItem "ItemMap";player addItem "ItemCompass";player assignItem "ItemCompass";player addItem "ItemWatch";player assignItem "ItemWatch";[] call life_fnc_playerSkins;[] call life_fnc_saveGear;

      Dann erstellt ihr in diesem neuen Ordner noch eine zweite SQF namens core\adac\fn_adacMarkers.sqf mit folgendem Inhalt:

      Code
      /*    File: fn_adacMarkers.sqf    Author: Bryan "Tonic" Boardwine    Edit: Raptor772000    Description:    Markiert eure Kollegen auf der Karte.*/private["_markers","_adacs"];_markers = [];_adacs = [];sleep 0.5;if(visibleMap) then {    {if(side _x == east) then {_adacs pushBack _x;}} foreach playableUnits;    //Create markers    {	if(_x != player) then {	    _marker = createMarkerLocal [format["%1 _marker",_x],visiblePosition _x];	    _marker setMarkerColorLocal "ColorYellow";	    _marker setMarkerTypeLocal "Mil_dot";	    _marker setMarkerTextLocal format["%1", _x getVariable["realname",name _x]];	   _markers pushBack [_marker,_x];	};    } foreach _adacs;    while {visibleMap} do {    {        private["_marker","_unit"];	_marker = _x select 0;        _unit = _x select 1;	if(!isNil "_unit" && !isNull _unit) then {	    _marker setMarkerPosLocal (visiblePosition _unit);        };    } foreach _markers;    if(!visibleMap) exitWith {};    sleep 0.02;    };    {deleteMarkerLocal (_x select 0);} foreach _markers;    _markers = [];    _adacs = [];};


      25. Öffnet eure core\functions\fn_playerSkins.sqf und fügt unter "case independet" das hier ein:

      Code
      case east: {    if(uniform player == "U_B_HeliPilotCoveralls") then {        player setObjectTextureGlobal [0, "textures\adac_uniform.paa"];    };    if(backpack player == "B_Kitbag_cbr") then {        (unitBackpack player) setObjectTextureGlobal [0, "textures\adac_backpack.jpg"];    };};


      26. Öffnet eure core\functions\fn_loadGear.sqf und fügt das hier unter "case independent" ein:

      Code
      case east: {    [] call life_fnc_adacLoadout;};


      27. Öffnet eure core\functions\fn_keyHandler.sqf und fügt das unter "case civilian" ein:

      Code
      case east: {if(!visibleMap) then {[] spawn life_fnc_adacMarkers;}};


      28. Öffnet eure core\config\fn_vehicleAnimate.sqf und fügt dieses case hinzu:

      Code
      case "adac_offroad":{    _vehicle animate ["HidePolice", 0];    _vehicle setVariable["lights",false,true];};


      29. Öffnet eure dialog\cell_phone.hpp und fügt folgendes unter "class EMSRequest : life_RscButtonMenu" hinzu:

      Code
      class AdacRequest : life_RscButtonMenu{    idc = 3023;    text = "$STR_CELL_AdacRequest";    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 = "[] call TON_fnc_cell_adacrequest";    x = 0.32;    y = 0.45;    w = 0.2;    h = (1 / 25);};


      30. Öffnet eure dialog\function\fn_spawnPointCfg.sqf und fügt folgendes unter "case independent" ein:

      Code
      case east: {    _return = [        ["adac_spawn_1","ADAC-Leitstelle","\a3\ui_f\data\map\MapControl\watertower_ca.paa"]    ];};


      31. Ladet euch meinen textures Ordner runter und fügt ihn bei euch ein.


      Karte
      [size=10]

      1. Nimmt euch eure mission.sqm und editiert diese im 2D-Editor!!!


      2. Geht auf die Spawninsel und setzt dort eine KI mit folgenden Einstellungen
      Gruppierung: CSAT
      Klasse: Männer
      Einheit: Sanitäter
      Speziell: In Formation
      Kontrolle: Spielbar
      Name: adac_1
      Beschreibung: Whitelist | ADAC 1

      Wiederholt diesen Vorgang jetzt so oft, wie viel ADACs ihr haben wollt.----> Die Zahl muss pro eine KI immer um eins höher gesetzt werden: Also ---> adac_1, adac_2...usw. Whitelist | ADAC 1, Whitelist | ADAC 2....usw. <---Wichtig!!!!


      3. Erstellt einen Spawn für eure ADACs. Dazu an die gewünschte Stelle eine Markierung mit dem Namen adac_spawn_1 setzten.


      4. Erstellt eure Spawns für die ADAC Helis und Autos. Hier wieder wie oben genannt. An die gewünschte Stelle Markierung setzten mit dem Namen:
      für Autospawn: adac_car_1
      für Helispawn: adac_air_1

      5. Erstellt eine KI an einen gewünschten Platzt, die soll euer Shop für eure ADACs sein, folgende Einstellungen:
      Gruppierung: NATO
      Klasse: Männer
      Einheit: Schießplatzverwalter
      Speziell: Keine
      Kontrolle: Nicht Spielbar
      Initialisierung:

      Code
      this enableSimulation false;   this allowDamage false; this addAction[format["%1 ($%2)",localize (getText(missionConfigFile >> "Licenses" >> "adacAir" >> "displayName")), [(getNumber(missionConfigFile >> "Licenses" >> "adacAir" >> "price"))] call life_fnc_numberText],life_fnc_buyLicense,"adacAir",0,false,false,"",' !license_adac_adacAir && playerSide == east ']; this addAction[format["%1 ($%2)",localize (getText(missionConfigFile >> "Licenses" >> "adacCar" >> "displayName")), [(getNumber(missionConfigFile >> "Licenses" >> "adacCar" >> "price"))] call life_fnc_numberText],life_fnc_buyLicense,"adacCar",0,false,false,"",' !license_adac_adacCar && playerSide == east ']; this addAction[localize"STR_MAR_Adac_Item_Shop",life_fnc_weaponShopMenu,"adac_basic"]; this addAction[localize"STR_MAR_Adac_Clothing_Shop",life_fnc_clothingMenu,"adac_clothing"]; this addAction[localize"STR_MAR_W_E_Vehicle Shop",life_fnc_vehicleShopMenu,["adac_shop",east,"adac_car_1","adac","ADAC Kavala"]]; this addAction[localize"STR_MAR_Helicopter_Shop", life_fnc_vehicleShopMenu,["adac_air_hs",east,"adac_air_1","adac","ADAC Kavala"]]; this addAction[localize"STR_MAR_W_Car_Garage",  {   [getPlayerUID player,playerSide,"Car",player] remoteExecCall ["TON_fnc_getVehicles",2];   createDialog "Life_impound_menu";   disableSerialization;   ctrlSetText[2802,"Fahrzeug einparken"];   life_garage_sp = "adac_car_1"; life_garage_type = "Car";  },"",0,false,false,"",'playerSide == east']; this addAction[localize"STR_MAR_Helicopter_Garage",  {   [getPlayerUID player,playerSide,"Air",player] remoteExecCall ["TON_fnc_getVehicles",2];   createDialog "Life_impound_menu";   disableSerialization;   ctrlSetText[2802,"Fahrzeug einparken"];   life_garage_sp = "adac_air_1"; life_garage_type = "Air";  },"",0,false,false,"",'playerSide == east ']; this addAction[localize"STR_MAR_Store_vehicle_in_Garage",life_fnc_storeVehicle,"",0,false,false,"",'!life_garage_store']; this addAction["<t color='#ADFF2F'>ATM</t>",life_fnc_atmMenu,"",0,FALSE,FALSE,"",' vehicle player == player && player distance _target < 4 ']; removeHeadgear this; removeBackpack this; removeGoggles this; removeVest this; removeUniform this;  this forceaddUniform "U_B_HeliPilotCoveralls"; this setObjectTextureGlobal [0,"textures\adac_uniform.paa"];


      6. Erstellt eine Markierung in eurer ADAC-Leitstelle, damit andere Leute sie auf der Karte finden können:
      Symbol: Wartung
      Farbe: Gelb
      Name: ADAC_Kavala
      Text: ADAC Kavala


      7. Speichert eure mission.sqm wieder ab und packt sie zurück in euren MPMissions Ordner. Danach packt ihr diesen wieder in eine .pbo.

      Dateien

      textures.zip 3,4 MB – 671 Downloads IgiLoad.zip 22,63 kB – 556 Downloads

      Einmal editiert, zuletzt von Raptor772000 (3. Juli 2016 um 12:43)

    • Raptor772000
      Anfänger
      Reaktionen
      23
      Trophäen
      9
      Beiträge
      25
      • 1. Juli 2016 um 00:34
      • #2

      @life_server

      1. Entpackt addons\life_server.pbo in einen Ordner mithilfe eures PBO Managers.


      2. Öffnet eure functions.sqf und fügt das unter "TON_fnc_cell_textcop =..." ein:

      Code
      //Zum ADAC
      TON_fnc_cell_adacrequest =
      compileFinal "
      private[""_msg"",""_to""];
          ctrlShow[3023,false];
          _msg = ctrlText 3003;
          _to = ""The ADAC"";
          if(_msg == """") exitWith {hint ""Du must eine Nachricht erst eine Nachricht schreiben!"";ctrlShow[3023,true];};
          [_msg,name player,6,mapGridPosition player,player] remoteExecCall [""TON_fnc_clientMessage"",east];
          [] call life_fnc_cellphone;
          hint format[""Notruf abgesendet"",_to,_msg];
          ctrlShow[3023,true];
      ";
      Alles anzeigen


      Geht dann nach unten und fügt das unter "case 5" ein:

      Code
      case 6: {
          if(side player != east) exitWith {};
          private[""_message"",""_loc"",""_unit""];
          _loc = _this select 3;
          _unit = _this select 4;
          _message = format[""!!! ADAC NOTRUF: %1"",_msg];
          hint parseText format [""<t color='#FFCC00'><t size='2'><t align='center'>Eingehender Notruf<br/><br/><t color='#33CC33'><t align='left'><t size='1'>Von: <t color='#ffffff'>%1<br/><t color='#33CC33'>Koordinaten: <t color='#ffffff'>%2<br/><br/><t color='#33CC33'>Nachricht:<br/><t color='#ffffff'>%3"",_from,_loc,_msg];
      
      
      
      
          [""AdacMessage"",[format[""Notruf von %1"",_from]]] call bis_fnc_showNotification;
      };
      Alles anzeigen


      3. Öffnet eure life_copLevel = 0; und fügt das unter "life_copLevel = 0;" ein:

      Code
      life_adacLevel = 0;


      4. Öffnet eure Functions\MYSQL\fn_insertRequest.sqf und ersetzt diese Zeile "_query =..." durch diese hier:

      Code
      _query = format["INSERT INTO players (playerid, name, cash, bankacc, aliases, cop_licenses, med_licenses, civ_licenses, adac_licenses, adac_gear, civ_gear, cop_gear, med_gear) VALUES('%1', '%2', '%3', '%4', '%5','""[]""','""[]""','""[]""','""[]""','""[]""','""[]""','""[]""','""[]""')",


      5. Öffnet eure Functions\MYSQL\fn_queryRequest.sqf und fügt das unter "case independent" ein:

      Code
      case east: {_returnCount = 10; format["SELECT playerid, name, cash, bankacc, adminlevel, donatorlvl, adac_licenses, adaclevel, adac_gear, adac_stats FROM players WHERE playerid='%1'",_uid];};


      6. Öffnet eure Functions\MYSQL\fn_updateRequest.sqf und fügt das unter "case independent" ein:

      Code
      case east: {_query = format["UPDATE players SET name='%1', cash='%2', bankacc='%3', adac_licenses='%4', adac_gear='%5', adac_stats='%6' WHERE playerid='%7'",_name,_cash,_bank,_licenses,_gear,_stats,_uid];};


      7. Öffnet eure Functions\Systems\fn_getVehicles.sqf und fügt das hier unter "case independent: {"med"};" ein:

      Code
      case east: {"adac"};


      8. Öffnet eure Functions\Systems\fn_vehicleCreate.sqf und fügt das hier unter "case independent: {"med"};" ein:

      Code
      case east: {"adac"};


      [size=10]

      9. Packt den Ordner wieder in eine .pbo

    • Raptor772000
      Anfänger
      Reaktionen
      23
      Trophäen
      9
      Beiträge
      25
      • 1. Juli 2016 um 00:40
      • #3

      Datenbank


      1. Führt diesen Code in eurer Datenbank aus: ----> Achtung, Datenbank muss blank sein, das heisst, keine Spielereinträge, Fahrzeugeinträge etc.

      SQL
      ALTER TABLE `players` ADD (
      `adaclevel` enum('0','1','2','3','4','5') NOT NULL DEFAULT '0'
      );
      
      
      
      
      ALTER TABLE `players` ADD (
      `adac_licenses` text NOT NULL
      );
      
      
      
      
      ALTER TABLE `players` ADD (
      `adac_gear` text NOT NULL
      );
      
      
      
      
      ALTER TABLE `players` ADD (
      `adac_stats` varchar(11) NOT NULL DEFAULT '"[100,100]"'
      );
      Alles anzeigen

      Wer will, kann seine Datenbank komplett löschen und dafür eine neue drauf ziehen: ------> nur für Root ausgelegt, Nitrado Nutzer können den Code auch benutzen, müssen ihn jedoch leicht umschreiben.

      SQL
      SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
      SET time_zone = "+00:00";
      
      
      
      
      
      
      
      /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
      /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
      /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
      /*!40101 SET NAMES utf8 */;
      
      
      
      
      --
      -- Database: `AltisLife`
      -- Default Schema
      --
      CREATE DATABASE IF NOT EXISTS `AltisLife` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
      USE `AltisLife`;
      
      
      
      
      DELIMITER $$
      --
      -- Procedures
      -- Edit arma3 to match a user in MySQ
      -- For external databases: Edit localhost to match arma3server IP
      --
      CREATE DEFINER=`root`@`localhost` PROCEDURE `resetLifeVehicles`()
      BEGIN
        UPDATE `vehicles` SET `active`= 0;
      END$$
      
      
      
      
      CREATE DEFINER=`root`@`localhost` PROCEDURE `deleteDeadVehicles`()
      BEGIN
        DELETE FROM `vehicles` WHERE `alive` = 0;
      END$$
      
      
      
      
      CREATE DEFINER=`root`@`localhost` PROCEDURE `deleteOldHouses`()
      BEGIN
        DELETE FROM `houses` WHERE `owned` = 0;
      END$$
      
      
      
      
      CREATE DEFINER=`root`@`localhost` PROCEDURE `deleteOldGangs`()
      BEGIN
        DELETE FROM `gangs` WHERE `active` = 0;
      END$$
      
      
      
      
      CREATE DEFINER=`root`@`localhost` PROCEDURE `deleteOldContainers`()
      BEGIN
        DELETE FROM `containers` WHERE `owned` = 0;
      END$$
      
      
      
      
      DELIMITER ;
      
      
      
      
      -- --------------------------------------------------------
      
      
      
      
      --
      -- Table structure for table `players`
      --
      
      
      
      
      CREATE TABLE IF NOT EXISTS `players` (
        `uid` int(12) NOT NULL AUTO_INCREMENT,
        `name` varchar(32) NOT NULL,
        `aliases` text NOT NULL,
        `playerid` varchar(50) NOT NULL,
        `cash` int(100) NOT NULL DEFAULT '0',
        `bankacc` int(100) NOT NULL DEFAULT '0',
        `coplevel` enum('0','1','2','3','4','5','6','7') NOT NULL DEFAULT '0',
        `mediclevel` enum('0','1','2','3','4','5') NOT NULL DEFAULT '0',
        `adaclevel` enum('0','1','2','3','4','5') NOT NULL DEFAULT '0',
        `civ_licenses` text NOT NULL,
        `cop_licenses` text NOT NULL,
        `med_licenses` text NOT NULL,
        `adac_licenses` text NOT NULL,
        `civ_gear` text NOT NULL,
        `cop_gear` text NOT NULL,
        `med_gear` text NOT NULL,
        `adac_gear` text NOT NULL,
        `civ_stats` varchar(11) NOT NULL DEFAULT '"[100,100]"',
        `cop_stats` varchar(11) NOT NULL DEFAULT '"[100,100]"',
        `med_stats` varchar(11) NOT NULL DEFAULT '"[100,100]"',
        `adac_stats` varchar(11) NOT NULL DEFAULT '"[100,100]"',
        `arrested` tinyint(1) NOT NULL DEFAULT '0',
        `adminlevel` enum('0','1','2','3','4','5') NOT NULL DEFAULT '0',
        `donatorlvl` enum('0','1','2','3','4','5') NOT NULL DEFAULT '0',
        `blacklist` tinyint(1) NOT NULL DEFAULT '0',
        PRIMARY KEY (`uid`),
        UNIQUE KEY `playerid` (`playerid`),
        KEY `name` (`name`),
        KEY `blacklist` (`blacklist`)
      ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
      
      
      
      
      -- --------------------------------------------------------
      
      
      
      
      --
      -- Table structure for table `vehicles`
      --
      
      
      
      
      CREATE TABLE IF NOT EXISTS `vehicles` (
        `id` int(12) NOT NULL AUTO_INCREMENT,
        `side` varchar(15) NOT NULL,
        `classname` varchar(32) NOT NULL,
        `type` varchar(12) NOT NULL,
        `pid` varchar(32) NOT NULL,
        `alive` tinyint(1) NOT NULL DEFAULT '1',
        `active` tinyint(1) NOT NULL DEFAULT '0',
        `plate` int(20) NOT NULL,
        `color` int(20) NOT NULL,
        `inventory` varchar(500) NOT NULL,
        `gear` text NOT NULL,
        `fuel` double NOT NULL DEFAULT '1',
        PRIMARY KEY (`id`),
        KEY `side` (`side`),
        KEY `pid` (`pid`),
        KEY `type` (`type`)
      ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
      
      
      
      
      -- --------------------------------------------------------
      
      
      
      
      --
      -- Table structure for table `houses`
      -- Needed for extDB latest update on git
      --
      
      
      
      
      CREATE TABLE IF NOT EXISTS `houses` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `pid` varchar(32) NOT NULL,
        `pos` varchar(64) DEFAULT NULL,
        `owned` tinyint(4) DEFAULT '0',
        PRIMARY KEY (`id`,`pid`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
      
      
      
      
      -- --------------------------------------------------------
      
      
      
      
      --
      -- Table structure for table `gangs`
      -- Needed for extDB latest update on git
      --
      
      
      
      
      CREATE TABLE IF NOT EXISTS `gangs` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `owner` varchar(32) DEFAULT NULL,
        `name` varchar(32) DEFAULT NULL,
        `members` text,
        `maxmembers` int(2) DEFAULT '8',
        `bank` int(100) DEFAULT '0',
        `active` tinyint(4) DEFAULT '1',
        PRIMARY KEY (`id`),
        UNIQUE KEY `name_UNIQUE` (`name`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
      
      
      
      
      -- --------------------------------------------------------
      
      
      
      
      --
      -- Table structure for table `containers`
      -- Needed for extDB latest update on git
      --
      
      
      
      
      CREATE TABLE IF NOT EXISTS `containers` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `pid` varchar(32) NOT NULL,
        `classname` varchar(32) NOT NULL,
        `pos` varchar(64) DEFAULT NULL,
        `inventory` varchar(500) NOT NULL,
        `gear` text NOT NULL,
        `dir` varchar(64) DEFAULT NULL,
        `active` tinyint(1) NOT NULL DEFAULT '0',
        `owned` tinyint(4) DEFAULT '0',
        PRIMARY KEY (`id`,`pid`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
      
      
      
      
      -- --------------------------------------------------------
      
      
      
      
      --
      -- Table structure for table `wanted`
      -- Needed for extDB latest update on git
      --
      
      
      
      
      CREATE TABLE `wanted` (
        `wantedID` varchar(50) NOT NULL,
        `wantedName` varchar(52) NOT NULL,
        `wantedCrimes` text NOT NULL,
        `wantedBounty` int(100) NOT NULL,
        `active` tinyint(1) NOT NULL DEFAULT '0',
        PRIMARY KEY (`wantedID`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
      
      
      
      
      -- --------------------------------------------------------
      
      
      
      
      /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
      /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
      /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
      Alles anzeigen


      DAS WÄRS, VIEL SPAß :thumbup:

    • Exodoos
      Fortgeschrittener
      Reaktionen
      164
      Trophäen
      10
      Beiträge
      332
      • 1. Juli 2016 um 23:50
      • #4

      Du bist genial! werde ich morgen gleich austesten :thumbup: :thumbup: :thumbup:

      Mit freundlichen Grüßen,

      Exodoos
      ________________________________

      Macht euch doch ein Bild!

      Ohne Logs & entsprechende Dateien kein Support!

    • malicutt
      Schüler
      Reaktionen
      17
      Trophäen
      10
      Beiträge
      89
      • 2. Juli 2016 um 12:44
      • #5

      Betrifft mich zwar nicht aber ich muss schon sagen, tolles wahnsinnig übersichtliches und genaues Tutorial! Danke dafür.

    • chris89
      Schüler
      Reaktionen
      15
      Trophäen
      10
      Beiträge
      108
      • 2. Juli 2016 um 14:01
      • #6

      Erst mal Lob an dich für diese arbeit aber muss gleich sagen es ist nicht für die 4.4r3 Version da einiges fehlt wo man selbst noch ergänzen oder abändern muss!


      Gruß

      Chris

    • chris89
      Schüler
      Reaktionen
      15
      Trophäen
      10
      Beiträge
      108
      • 2. Juli 2016 um 14:13
      • #7

      Nach der Zeile 152 muss doch noch Case East eingebaut werden oder Irre ich mich?

      betrifft die Version 4.4r3

      Und der beschriebene Eintrag in der Zeile 30 musste ich auch abändern!


      Brainfuck: fn_queryRequest.sqf
      #include "\life_server\script_macros.hpp"
      /*
          File: fn_queryRequest.sqf
          Author: Bryan "Tonic" Boardwine
      
      
      
      
          Description:
          Handles the incoming request and sends an asynchronous query
          request to the database.
      
      
      
      
          Return:
          ARRAY - If array has 0 elements it should be handled as an error in client-side files.
          STRING - The request had invalid handles or an unknown error and is logged to the RPT.
      */
      private["_uid","_side","_query","_queryResult","_tickTime","_tmp"];
      _uid = [_this,0,"",[""]] call BIS_fnc_param;
      _side = [_this,1,sideUnknown,[civilian]] call BIS_fnc_param;
      _ownerID = [_this,2,ObjNull,[ObjNull]] call BIS_fnc_param;
      
      
      
      
      if (isNull _ownerID) exitWith {};
      _ownerID = owner _ownerID;
      
      
      
      
      _query = switch (_side) do {
          // West - 11 entries returned
          case west: {format["SELECT playerid, name, cash, bankacc, adminlevel, donorlevel, cop_licenses, coplevel, cop_gear, blacklist, cop_stats, playtime FROM players WHERE playerid='%1'",_uid];};
          // Civilian - 12 entries returned
          case civilian: {format["SELECT playerid, name, cash, bankacc, adminlevel, donorlevel, civ_licenses, arrested, civ_gear, civ_stats, civ_alive, civ_position, playtime FROM players WHERE playerid='%1'",_uid];};
          // Independent - 10 entries returned
          case independent: {format["SELECT playerid, name, cash, bankacc, adminlevel, donorlevel, med_licenses, mediclevel, med_gear, med_stats, playtime FROM players WHERE playerid='%1'",_uid];};
      	// East Adac
      	case east: {format["SELECT playerid, name, cash, bankacc, adminlevel, donatorlvl, adac_licenses, adaclevel, adac_gear, adac_stats FROM players WHERE playerid='%1'",_uid];};
      };
      
      
      
      
      _tickTime = diag_tickTime;
      _queryResult = [_query,2] call DB_fnc_asyncCall;
      
      
      
      
      if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then {
          diag_log "------------- Client Query Request -------------";
          diag_log format["QUERY: %1",_query];
          diag_log format["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)];
          diag_log format["Result: %1",_queryResult];
          diag_log "------------------------------------------------";
      };
      
      
      
      
      if (_queryResult isEqualType "") exitWith {
          [] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID];
      };
      
      
      
      
      if (count _queryResult isEqualTo 0) exitWith {
          [] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID];
      };
      
      
      
      
      //Blah conversion thing from a2net->extdb
      _tmp = _queryResult select 2;
      _queryResult set[2,[_tmp] call DB_fnc_numberSafe];
      _tmp = _queryResult select 3;
      _queryResult set[3,[_tmp] call DB_fnc_numberSafe];
      
      
      
      
      //Parse licenses (Always index 6)
      _new = [(_queryResult select 6)] call DB_fnc_mresToArray;
      if (_new isEqualType "") then {_new = call compile format["%1", _new];};
      _queryResult set[6,_new];
      
      
      
      
      //Convert tinyint to boolean
      _old = _queryResult select 6;
      for "_i" from 0 to (count _old)-1 do {
          _data = _old select _i;
          _old set[_i,[_data select 0, ([_data select 1,1] call DB_fnc_bool)]];
      };
      
      
      
      
      _queryResult set[6,_old];
      
      
      
      
      _new = [(_queryResult select 8)] call DB_fnc_mresToArray;
      if (_new isEqualType "") then {_new = call compile format["%1", _new];};
      _queryResult set[8,_new];
      //Parse data for specific side.
      switch (_side) do {
          case west: {
              _queryResult set[9,([_queryResult select 9,1] call DB_fnc_bool)];
      
      
      
      
              //Parse Stats
              _new = [(_queryResult select 10)] call DB_fnc_mresToArray;
              if (_new isEqualType "") then {_new = call compile format["%1", _new];};
              _queryResult set[10,_new];
      
      
      
      
              //Playtime
              _new = [(_queryResult select 11)] call DB_fnc_mresToArray;
              if (_new isEqualType "") then {_new = call compile format["%1", _new];};
              _index = TON_fnc_playtime_values_request find [_uid, _new];
              if (_index != -1) then {
                  TON_fnc_playtime_values_request set[_index,-1];
                  TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1];
                  TON_fnc_playtime_values_request pushBack [_uid, _new];
              } else {
                  TON_fnc_playtime_values_request pushBack [_uid, _new];
              };
              [_uid,_new select 0] call TON_fnc_setPlayTime;
          };
      
      
      
      
          case civilian: {
              _queryResult set[7,([_queryResult select 7,1] call DB_fnc_bool)];
      
      
      
      
              //Parse Stats
              _new = [(_queryResult select 9)] call DB_fnc_mresToArray;
              if (_new isEqualType "") then {_new = call compile format["%1", _new];};
              _queryResult set[9,_new];
      
      
      
      
              //Position
              _queryResult set[10,([_queryResult select 10,1] call DB_fnc_bool)];
              _new = [(_queryResult select 11)] call DB_fnc_mresToArray;
              if (_new isEqualType "") then {_new = call compile format["%1", _new];};
              _queryResult set[11,_new];
      
      
      
      
              //Playtime
              _new = [(_queryResult select 12)] call DB_fnc_mresToArray;
              if (_new isEqualType "") then {_new = call compile format["%1", _new];};
              _index = TON_fnc_playtime_values_request find [_uid, _new];
              if (_index != -1) then {
                  TON_fnc_playtime_values_request set[_index,-1];
                  TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1];
                  TON_fnc_playtime_values_request pushBack [_uid, _new];
              } else {
                  TON_fnc_playtime_values_request pushBack [_uid, _new];
              };
              [_uid,_new select 2] call TON_fnc_setPlayTime;
      
      
      
      
              _houseData = _uid spawn TON_fnc_fetchPlayerHouses;
              waitUntil {scriptDone _houseData};
              _queryResult pushBack (missionNamespace getVariable[format["houses_%1",_uid],[]]);
              _gangData = _uid spawn TON_fnc_queryPlayerGang;
              waitUntil{scriptDone _gangData};
              _queryResult pushBack (missionNamespace getVariable[format["gang_%1",_uid],[]]);
          };
      
      
      
      
          case independent: {
              //Parse Stats
              _new = [(_queryResult select 9)] call DB_fnc_mresToArray;
              if (_new isEqualType "") then {_new = call compile format["%1", _new];};
              _queryResult set[9,_new];
      
      
      
      
              //Playtime
              _new = [(_queryResult select 10)] call DB_fnc_mresToArray;
              if (_new isEqualType "") then {_new = call compile format["%1", _new];};
              _index = TON_fnc_playtime_values_request find [_uid, _new];
              if (_index != -1) then {
                  TON_fnc_playtime_values_request set[_index,-1];
                  TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1];
                  TON_fnc_playtime_values_request pushBack [_uid, _new];
              } else {
                  TON_fnc_playtime_values_request pushBack [_uid, _new];
              };
              [_uid,_new select 1] call TON_fnc_setPlayTime;
          };
      };
      
      
      
      
      publicVariable "TON_fnc_playtime_values_request";
      
      
      
      
      _keyArr = missionNamespace getVariable [format["%1_KEYS_%2",_uid,_side],[]];
      _queryResult set[15,_keyArr];
      
      
      
      
      _queryResult remoteExec ["SOCK_fnc_requestReceived",_ownerID];
      Alles anzeigen
    • chris89
      Schüler
      Reaktionen
      15
      Trophäen
      10
      Beiträge
      108
      • 2. Juli 2016 um 14:18
      • #8

      Dann noch in der Zeile 48


      Brainfuck: fn_insertRequest.sqf
      #include "\life_server\script_macros.hpp"
      /*
          File: fn_insertRequest.sqf
          Author: Bryan "Tonic" Boardwine
      
      
      
      
          Description:
          Adds a player to the database upon first joining of the server.
          Recieves information from core\sesison\fn_insertPlayerInfo.sqf
      */
      private["_queryResult","_query","_alias"];
      params [
          "_uid",
          "_name",
          ["_money",-1,[0]],
          ["_bank",-1,[0]],
          ["_returnToSender",objNull,[objNull]]
      ];
      
      
      
      
      //Error checks
      if ((_uid isEqualTo "") || (_name isEqualTo "")) exitWith {systemChat "Bad UID or name";}; //Let the client be 'lost' in 'transaction'
      if (isNull _returnToSender) exitWith {systemChat "ReturnToSender is Null!";}; //No one to send this to!
      
      
      
      
      _query = format["SELECT playerid, name FROM players WHERE playerid='%1'",_uid];
      
      
      
      
      
      
      
      _tickTime = diag_tickTime;
      _queryResult = [_query,2] call DB_fnc_asyncCall;
      
      
      
      
      if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then {
          diag_log "------------- Insert Query Request -------------";
          diag_log format["QUERY: %1",_query];
          diag_log format["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)];
          diag_log format["Result: %1",_queryResult];
          diag_log "------------------------------------------------";
      };
      
      
      
      
      //Double check to make sure the client isn't in the database...
      if (_queryResult isEqualType "") exitWith {[] remoteExecCall ["SOCK_fnc_dataQuery",(owner _returnToSender)];}; //There was an entry!
      if (count _queryResult != 0) exitWith {[] remoteExecCall ["SOCK_fnc_dataQuery",(owner _returnToSender)];};
      
      
      
      
      //Clense and prepare some information.
      _name = [_name] call DB_fnc_mresString; //Clense the name of bad chars.
      _alias = [[_name]] call DB_fnc_mresArray;
      _money = [_money] call DB_fnc_numberSafe;
      _bank = [_bank] call DB_fnc_numberSafe;
      
      
      
      
      //Prepare the query statement..
      _query = format["INSERT INTO players (playerid, name, cash, bankacc, aliases, cop_licenses, med_licenses, civ_licenses, adac_licenses, adac_gear, civ_gear, cop_gear, med_gear) VALUES('%1', '%2', '%3', '%4', '%5','""[]""','""[]""','""[]""','""[]""','""[]""','""[]""','""[]""','""[]""')",
          _uid,
          _name,
          _money,
          _bank,
          _alias
      ];
      
      
      
      
      [_query,1] call DB_fnc_asyncCall;
      [] remoteExecCall ["SOCK_fnc_dataQuery",(owner _returnToSender)];
      Alles anzeigen

      darf man nicht einfach Copy Paste machen weil dann die Einträge gelöscht werden ich habe dies Manuel nach getragen!

    • LifeSushi
      Frischling
      Trophäen
      9
      Beiträge
      1
      • 2. Juli 2016 um 17:04
      • #9

      24. Erstellt nun einen neuen Ordner und darin eine neue SQF namens core\adac\adacLoadout.sqf mit folgendem Inhalt:

      Sollte eigentlich fn_adacLoadout.sqf heißen und die stringtable für STR_License_Abschleppen ist nicht deklariert ;)

    • Raptor772000
      Anfänger
      Reaktionen
      23
      Trophäen
      9
      Beiträge
      25
      • 2. Juli 2016 um 17:04
      • #10

      Danke @Exodoos und @malicutt :)

    • Raptor772000
      Anfänger
      Reaktionen
      23
      Trophäen
      9
      Beiträge
      25
      • 2. Juli 2016 um 17:07
      • #11

      Ja, hast recht @LifeSushi, danke für den Hinweis.

      Es muss fn_adacLoadout.sqf heißen . Und hier nochmal für alle:

      in der Stringtable.xml sucht bitte nach "STR_License_Pilot", darunter fügt ihr folgendes ein:

      XML
      <Key ID="STR_License_Abschleppen">
            <Original>towing license</Original>
            <German>Abschlepplizenz</German>
            <French>licence de remorquage</French>
            <Italian>licenza di traino</Italian>
            <Portuguese>licença de reboque</Portuguese>
            <Polish>licencja holowanie</Polish>
          </Key>
    • Raptor772000
      Anfänger
      Reaktionen
      23
      Trophäen
      9
      Beiträge
      25
      • 2. Juli 2016 um 17:17
      • #12

      @chris89
      ja, das kann gut sein, wenn das eine andere Version ist, dass man dann ein bisschen was ändern muss. Sollte aber denke ich nicht zu schwer sein, ist ja auch Schwierigkeitsgrad 3, also man sollte schon ein bisschen Vertraut mit sqf sein, und gegeben falls kleine Sachen umändern können.

    • Raptor772000
      Anfänger
      Reaktionen
      23
      Trophäen
      9
      Beiträge
      25
      • 2. Juli 2016 um 17:20
      • #13

      Ja hasst recht, in Zeile 152 musste noch den case east einfügen :D. Ich kucke mir das gleich mal nach dem Essen an, dann kann ich dir den Code dafür geben :)

    • Raptor772000
      Anfänger
      Reaktionen
      23
      Trophäen
      9
      Beiträge
      25
      • 2. Juli 2016 um 17:47
      • #14

      Also versuch doch einfach mal den gleichen Text von den independent für die east zu nehmen. Musste halt einfach nur dann den namen in east umändern.

      Und In Zeile 30. hat sich bei dir ein kleiner Fehler eingeschlichen:

      Code
      // East Adac
       case east: {format["SELECT playerid, name, cash, bankacc, adminlevel, donatorlvl, adac_licenses, adaclevel, adac_gear, adac_stats, playtime FROM players WHERE playerid='%1'",_uid];};

      da haste das , und das playtime vergessen :P

    • chris89
      Schüler
      Reaktionen
      15
      Trophäen
      10
      Beiträge
      108
      • 2. Juli 2016 um 18:03
      • #15
      Zitat von Raptor772000

      Also versuch doch einfach mal den gleichen Text von den independent für die east zu nehmen. Musste halt einfach nur dann den namen in east umändern.

      Und In Zeile 30. hat sich bei dir ein kleiner Fehler eingeschlichen:

      // East Adac
      case east: {format["SELECT playerid, name, cash, bankacc, adminlevel, donatorlvl, adac_licenses, adaclevel, adac_gear, adac_stats, playtime FROM players WHERE playerid='%1'",_uid];}; da haste das , und das playtime vergessen

      Kann nichts erkennen sry

    • chris89
      Schüler
      Reaktionen
      15
      Trophäen
      10
      Beiträge
      108
      • 2. Juli 2016 um 18:06
      • #16
      Zitat von Raptor772000

      Ja hasst recht, in Zeile 152 musste noch den case east einfügen :D. Ich kucke mir das gleich mal nach dem Essen an, dann kann ich dir den Code dafür geben

      Wäre nice wenn das machen würdest :)

    • Raptor772000
      Anfänger
      Reaktionen
      23
      Trophäen
      9
      Beiträge
      25
      • 2. Juli 2016 um 18:24
      • #17

      // East Adac
      case east: {format["SELECT playerid, name, cash, bankacc, adminlevel, donatorlvl, adac_licenses, adaclevel, adac_gear, adac_stats, playtime FROM players WHERE playerid='%1'",_uid];};

      Ist schon die korrigierte Version ;)

    • Exodoos
      Fortgeschrittener
      Reaktionen
      164
      Trophäen
      10
      Beiträge
      332
      • 2. Juli 2016 um 23:00
      • #18

      Hallo, was muss ich in fn_queryRequest.sqf ganz unten unter independent eintragen?

      SQL
      #include "\life_server\script_macros.hpp"
      /*
      	File: fn_queryRequest.sqf
      	Author: Bryan "Tonic" Boardwine
      
      
      
      
      	Description:
      	Handles the incoming request and sends an asynchronous query
      	request to the database.
      
      
      
      
      	Return:
      	ARRAY - If array has 0 elements it should be handled as an error in client-side files.
      	STRING - The request had invalid handles or an unknown error and is logged to the RPT.
      */
      private["_uid","_side","_query","_return","_queryResult","_qResult","_handler","_thread","_tickTime","_loops","_returnCount"];
      _uid = [_this,0,"",[""]] call BIS_fnc_param;
      _side = [_this,1,sideUnknown,[civilian]] call BIS_fnc_param;
      _ownerID = [_this,2,ObjNull,[ObjNull]] call BIS_fnc_param;
      
      
      
      
      if(isNull _ownerID) exitWith {};
      _ownerID = owner _ownerID;
      
      
      
      
      /*
      	_returnCount is the count of entries we are expecting back from the async call.
      	The other part is well the SQL statement.
      */
      _query = switch(_side) do {
      	case west: {_returnCount = 11; format["SELECT playerid, name, cash, bankacc, adminlevel, donatorlvl, cop_licenses, coplevel, cop_gear, blacklist, cop_stats FROM players WHERE playerid='%1'",_uid];};
      	case civilian: {_returnCount = 10; format["SELECT playerid, name, cash, bankacc, adminlevel, donatorlvl, civ_licenses, arrested, civ_gear, civ_stats FROM players WHERE playerid='%1'",_uid];};
      	case independent: {_returnCount = 10; format["SELECT playerid, name, cash, bankacc, adminlevel, donatorlvl, med_licenses, mediclevel, med_gear, med_stats FROM players WHERE playerid='%1'",_uid];};
          case east: {_returnCount = 10; format["SELECT playerid, name, cash, bankacc, adminlevel, donatorlvl, adac_licenses, adaclevel, adac_gear, adac_stats FROM players WHERE playerid='%1'",_uid];};
      };
      
      
      
      
      
      
      
      _tickTime = diag_tickTime;
      _queryResult = [_query,2] call DB_fnc_asyncCall;
      
      
      
      
      if(EXTDB_SETTING(getNumber,"DebugMode") == 1) then {
      	diag_log "------------- Client Query Request -------------";
      	diag_log format["QUERY: %1",_query];
      	diag_log format["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)];
      	diag_log format["Result: %1",_queryResult];
      	diag_log "------------------------------------------------";
      };
      
      
      
      
      if(typeName _queryResult == "STRING") exitWith {
      	[] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID];
      };
      
      
      
      
      if(count _queryResult == 0) exitWith {
      	[] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID];
      };
      
      
      
      
      //Blah conversion thing from a2net->extdb
      private["_tmp"];
      _tmp = _queryResult select 2;
      _queryResult set[2,[_tmp] call DB_fnc_numberSafe];
      _tmp = _queryResult select 3;
      _queryResult set[3,[_tmp] call DB_fnc_numberSafe];
      
      
      
      
      //Parse licenses (Always index 6)
      _new = [(_queryResult select 6)] call DB_fnc_mresToArray;
      if(typeName _new == "STRING") then {_new = call compile format["%1", _new];};
      _queryResult set[6,_new];
      
      
      
      
      //Convert tinyint to boolean
      _old = _queryResult select 6;
      for "_i" from 0 to (count _old)-1 do
      {
      	_data = _old select _i;
      	_old set[_i,[_data select 0, ([_data select 1,1] call DB_fnc_bool)]];
      };
      
      
      
      
      _queryResult set[6,_old];
      
      
      
      
      _new = [(_queryResult select 8)] call DB_fnc_mresToArray;
      if(typeName _new == "STRING") then {_new = call compile format["%1", _new];};
      _queryResult set[8,_new];
      //Parse data for specific side.
      switch (_side) do {
      	case west: {
      		_queryResult set[9,([_queryResult select 9,1] call DB_fnc_bool)];
      
      
      
      
      		//Parse Stats
      		_new = [(_queryResult select 10)] call DB_fnc_mresToArray;
      		if(typeName _new == "STRING") then {_new = call compile format["%1", _new];};
      		_queryResult set[10,_new];
      	};
      
      
      
      
      	case civilian: {
      		_queryResult set[7,([_queryResult select 7,1] call DB_fnc_bool)];
      
      
      
      
      		//Parse Stats
      		_new = [(_queryResult select 9)] call DB_fnc_mresToArray;
      		if(typeName _new == "STRING") then {_new = call compile format["%1", _new];};
      		_queryResult set[9,_new];
      
      
      
      
      		_houseData = [_uid] spawn TON_fnc_fetchPlayerHouses;
      		waitUntil {scriptDone _houseData};
      		_queryResult pushBack (missionNamespace getVariable[format["houses_%1",_uid],[]]);
      		_gangData = _uid spawn TON_fnc_queryPlayerGang;
      		waitUntil{scriptDone _gangData};
      		_queryResult pushBack (missionNamespace getVariable[format["gang_%1",_uid],[]]);
      	};
      
      
      
      
      	case independent: {
      		//Parse Stats
      		_new = [(_queryResult select 9)] call DB_fnc_mresToArray;
      		if(typeName _new == "STRING") then {_new = call compile format["%1", _new];};
      		_queryResult set[9,_new];
      	};
      };
      
      
      
      
      _keyArr = missionNamespace getVariable [format["%1_KEYS_%2",_uid,_side],[]];
      _queryResult set[13,_keyArr];
      
      
      
      
      _queryResult remoteExec ["SOCK_fnc_requestReceived",_ownerID];
      Alles anzeigen

      Mit freundlichen Grüßen,

      Exodoos
      ________________________________

      Macht euch doch ein Bild!

      Ohne Logs & entsprechende Dateien kein Support!

    • SirEaglefire
      Frischling
      Trophäen
      9
      Beiträge
      5
      • 3. Juli 2016 um 02:10
      • #19

      @'Raptor772000

      Du hast hier wirkich ein sehr gutes und übersichtliches TuT für Altis Life 4.4 :thumbup: :thumbup: :thumbup:

      Hat mir sehr geholfen, würde mich freuen wenn Du es noch mal überabeitest.

      Und kann jemand die Änderungen die in der @extDB2 gemacht werden müssen hier mit anhängt ?

      MFG

      [NDS] Das Opfer
      Clanleader
      https://nodezone.net/www.nds-gaming.de

    • SirEaglefire
      Frischling
      Trophäen
      9
      Beiträge
      5
      • 3. Juli 2016 um 02:15
      • #20

      Hey hier mein Eintrag aus fn_queryRequest.sqf


      case east: {
      //Parse Stats
      _new = [(_queryResult select 9)] call DB_fnc_mresToArray;
      if(typeName _new == "STRING") then {_new = call compile format["%1", _new];};
      _queryResult set[9,_new];
      };

      das ist alles

      Hoffe das ist was Du suchst.

    Registrieren oder Einloggen

    Du bist noch kein Mitglied von Native-Servers.com? Registriere dich kostenlos und werde Teil einer großartigen Community!

    Benutzerkonto erstellen

    Ähnliche Themen

    • [Tutorial] Altis Life 4.4r4 ADAC (OPFOR) einfügen

      • amdgeode
      • 17. Januar 2017 um 01:47
      • Tutorials & Releases
    • [Sammelthread] Scripts/Links/Tutorials/Anleitungen ArmA 3

      • Stig
      • 2. September 2016 um 18:29
      • Tutorials & Releases
    • ADAC/East einfügen

      • znake
      • 21. Dezember 2016 um 22:46
      • Hilfeforum
    • Inventar wird nicht geladen

      • Lurack
      • 21. Oktober 2016 um 13:47
      • Hilfeforum
    • ADAC Einfügen Gefailt fn_requestReceived

      • HelperLee
      • 20. September 2016 um 22:42
      • Hilfeforum

    Tags

    • adac
    • opfor
    • Altis Life
    • tutorial
    • 4.4
    • einfügen
    • 4.Fraktion

    Benutzer online in diesem Thema

    • 1 Besucher

    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™