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
Fr: 16 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

    Versicherungen für Fahrzeuge (Autos, LKW, Helikopter und Flugzeuge)

      • Altis Life
    • nox
    • 23. Juni 2016 um 09:22
    1. offizieller Beitrag
    • nox
      Administrator
      Reaktionen
      1.860
      Trophäen
      11
      Artikel
      2
      Beiträge
      1.866
      Dateien
      36
      Bilder
      11
      • 23. Juni 2016 um 09:22
      • Offizieller Beitrag
      • #1


      Hallo zusammen!


      Folgende Scriptinhalte stammen von Guitoxx, danke dafür.


      Was tut dieses Script?

      Mithilfe dieses Scripts könnt ihr sowohl eure Fahrzeuge als auch eure Helikopter oder Flugzeuge im Spiel versichern lassen.
      Ein versichertes Fahrzeug taucht im Falle seiner Zerstörung wieder in der Garage des Besitzers auf, die Versicherung selbst kann über das Garagen-Menu abgeschlossen werden.


      WICHTIG: Beachtet bitte den Schwierigkeitsgrad dieses Tutorials. Erklärungen zu Variablen, Klassen und Querys werden hier nicht beantwortet.

      Im Zweifelsfall: SQF Script Guide und Schwierigkeitsgrad für Tutorials


      Also fangen wir an.


      Öffnet zuerst folgende Datei: dialog\impound.hpp

      Fügt dort nun unter "Class controlsBackground" folgende neue Klasse hinzu:

      Code: impound.hpp
      class InsureCar : life_RscButtonMenu
              {
                  idc = 97480;
                  text = "Assurer";
                  onButtonClick = "[] call life_fnc_InsureCar;";
                  x = 0.43 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH));
                  y = 0.9 - (1 / 25);
                  w = (6.25 / 40);
                  h = (1 / 25);
              };


      Anschließend erstellt eine Datei mit dem Namen fn_insureCar.sqf und folgendem Inhalt in diesem Verzeichnis: dialog\function


      C: fn_insureCar.sqf
      #include "..\..\script_macros.hpp"
      /*
          File: fn_insureCar.sqf
          Author: Guit0x "Lintox"
          Description:
          Insure a vehicle from the garage.
      */
      private["_vehicle","_vehicleLife","_vid","_pid","_unit","_assurPrice"];
      disableSerialization;
      if(EQUAL(lbCurSel 2802,-1)) exitWith {hint localize "STR_Global_NoSelection"};
      _vehicle = lbData[2802,(lbCurSel 2802)];
      _vehicle = (call compile format["%1",_vehicle]) select 0;
      _vehicleLife = _vehicle;
      _vid = lbValue[2802,(lbCurSel 2802)];
      _pid = steamid;
      _unit = player;
      if(isNil "_vehicle") exitWith {hint localize "STR_Garage_Selection_Error"};
      if((time - life_action_delay) < 1.5) exitWith {hint localize "STR_NOTF_ActionDelay";};
      if(!isClass (missionConfigFile >> CONFIG_LIFE_VEHICLES >> _vehicleLife)) then {
          _vehicleLife = "Default"; //Use Default class if it doesn't exist
          diag_log format["%1: LifeCfgVehicles class doesn't exist",_vehicle];
      };
      _assurPrice = switch(playerSide) do {
          case civilian: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_vehicleLife,"assurPrice"),0)};
          case west: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_vehicleLife,"assurPrice"),1)};
          case independent: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_vehicleLife,"assurPrice"),2)};
          case east: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_vehicleLife,"assurPrice"),3)};
      };
      if(!(EQUAL(typeName _assurPrice,typeName 0)) OR _assurPrice < 1) then {_assurPrice = 1000};
      if(BANK < _assurPrice) exitWith {hint format[localize "STR_Garage_CashError",[_assurPrice] call life_fnc_numberText];};
      [_vid,_pid,_assurPrice,player,life_garage_type] remoteExecCall ["TON_fnc_insureCar",RSERV];
      hint format[localize "STR_Assur_OK"],
      SUB(BANK,_assurPrice);
      life_action_delay = time;
      closeDialog 0;
      Alles anzeigen




      Natürlich solltet ihr dann die Klasse "class insureCar{};" eurer Function.h unter "Class Dialog_Controls" hinzufügen.


      Nun wird Serverseitig in eurer config.cpp folgende Klasse unter "Class TON_System" erstellt: class insureCar{};

      Im Anschluss öffnet eure life_server\Functions\Systems\fn_spawnVehicle.sqf, sucht dort den "_query" und ersetzt ihn durch folgendes:

      SQL: fn_spawnVehicle.sqf
      _query = format["SELECT id, side, classname, type, pid, alive, active, plate, color, insure FROM vehicles WHERE id='%1' AND pid='%2'",_vid,_pid];


      Ebenfalls in dieser Datei sucht ihr folgende Zeile: _vehicle setVariable["dbInfo",[(_vInfo select 4),_vInfo select 7]];

      und fügt dort "_vInfo select 9" hinzu, das ganze sollte dann so aussehen:

      C: fn_spawnVehicle.sqf
      _vehicle setVariable["dbInfo",[(_vInfo select 4),_vInfo select 7, _vInfo select 9]];


      Ebenfalls innerhalb dieser Datei ersetzt ihr diese Zeile: [1,"Your vehicle is ready!"] remoteExecCall ["life_fnc_broadcast",_unit];

      Durch folgendes (Texte natürlich je nach Sprache ändern...):

      C: fn_spawnVehicle.sqf
      if((_vInfo select 9) == 1) then {
      [1,"Votre véhicule est prêt et assurer!"] remoteExecCall ["life_fnc_broadcast",_unit];
      }
      else {
      [1,"Votre véhicule est prêt!"] remoteExecCall ["life_fnc_broadcast",_unit];
      };


      Erstellt nun unter life_server\functions\Systems eine Datei mit dem Namen fn_insureCar.sqf und folgendem Inhalt:

      C: fn_insureCar.sqf
      /*
          File: fn_insureCar.sqf
          Author: Guit0x "Lintox"
          Description:
          Insure a vehicle from the garage.
      */
      private["_vid","_pid","_query","_sql", "_unit", "_assurPrice", "_thread"];
      _vid = [_this,0,-1,[0]] call BIS_fnc_param;
      _pid = [_this,1,"",[""]] call BIS_fnc_param;
      _unit = [_this,2,ObjNull,[ObjNull]] call BIS_fnc_param;
      _assurPrice = [_this,3,0,[0]] call BIS_fnc_param;
      _query = format["UPDATE vehicles SET insure='1' WHERE pid='%1' AND id='%2'",_pid,_vid];
      waitUntil {!DB_Async_Active};
      _thread = [_query,1] call DB_fnc_asyncCall;
      Alles anzeigen


      Danach ersetzt ihr den Inhalt folgender Datei in eurer Mission mit folgendem Inhalt: \dialog\function\fn_garageLBChange.sqf

      Code: fn_garageLBChange.sqf
      #include "..\..\script_macros.hpp"
      /*
          File: fn_garageLBChange.sqf
          Author: Bryan "Tonic" Boardwine
          Description:
          Can't be bothered to answer it.. Already deleted it by accident..
      */
      disableSerialization;
      private["_control","_index","_className","_classNameLife","_dataArr","_vehicleColor","_vehicleInfo","_trunkSpace","_sellPrice","_retrievePrice","_assurPrice","_assur"];
      _control = SEL(_this,0);
      _index = SEL(_this,1);
      //Fetch some information.
      _dataArr = CONTROL_DATAI(_control,_index);
      _dataArr = call compile format["%1",_dataArr];
      _className = SEL(_dataArr,0);
      _classNameLife = _className;
      _assur = SEL(_dataArr,2);
      if(!isClass (missionConfigFile >> CONFIG_LIFE_VEHICLES >> _classNameLife)) then {
          _classNameLife = "Default"; //Use Default class if it doesn't exist
          diag_log format["%1: LifeCfgVehicles class doesn't exist",_className];
      };
      _vehicleColor = SEL(SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"textures"),SEL(_dataArr,1)),0);
      if(isNil "_vehicleColor") then {_vehicleColor = "Default";};
      _vehicleInfo = [_className] call life_fnc_fetchVehInfo;
      _trunkSpace = [_className] call life_fnc_vehicleWeightCfg;
      _retrievePrice = switch(playerSide) do {
          case civilian: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"storageFee"),0)};
          case west: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"storageFee"),1)};
          case independent: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"storageFee"),2)};
          case east: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"storageFee"),3)};
      };
      _sellPrice = switch(playerSide) do {
          case civilian: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"garageSell"),0)};
          case west: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"garageSell"),1)};
          case independent: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"garageSell"),2)};
          case east: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"garageSell"),3)};
      };
      _assurPrice = switch(playerSide) do {
          case civilian: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"assurPrice"),0)};
          case west: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"assurPrice"),1)};
          case independent: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"assurPrice"),2)};
          case east: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"assurPrice"),3)};
      };
      if(!(EQUAL(typeName _sellPrice,typeName 0)) OR _sellPrice < 1) then {_sellPrice = 1000};
      if(!(EQUAL(typeName _retrievePrice,typeName 0)) OR _retrievePrice < 1) then {_retrievePrice = 1000};
      if(!(EQUAL(typeName _assurPrice,typeName 0)) OR _assurPrice < 1) then {_assurPrice = 10000};
      (CONTROL(2800,2803)) ctrlSetStructuredText parseText format[
          (localize "STR_Shop_Veh_UI_RetrievalP")+ " <t color='#8cff9b'>$%1</t><br/>
          " +(localize "STR_Shop_Veh_UI_SellP")+ " <t color='#8cff9b'>$%2</t><br/>
          Prix de l'assurance: <t color='#8cff9b'>$%9</t><br/>
          Etat de l'assurance: %10<br/>
          " +(localize "STR_Shop_Veh_UI_Color")+ " <t color='#8cff9b'>%8</t><br/>
          " +(localize "STR_Shop_Veh_UI_MaxSpeed")+ " <t color='#8cff9b'>%3 km/h</t><br/>
          " +(localize "STR_Shop_Veh_UI_HPower")+ " <t color='#8cff9b'>%4</t><br/>
          " +(localize "STR_Shop_Veh_UI_PSeats")+ " <t color='#8cff9b'>%5</t><br/>
          " +(localize "STR_Shop_Veh_UI_Trunk")+ " <t color='#8cff9b'>%6</t><br/>
          " +(localize "STR_Shop_Veh_UI_Fuel")+ " <t color='#8cff9b'>%7</t>
          ",
      [_retrievePrice] call life_fnc_numberText,
      [_sellPrice] call life_fnc_numberText,
      SEL(_vehicleInfo,8),
      SEL(_vehicleInfo,11),
      SEL(_vehicleInfo,10),
      if(_trunkSpace == -1) then {"None"} else {_trunkSpace},
      SEL(_vehicleInfo,12),
      _vehicleColor,
      [_assurPrice] call life_fnc_numberText,
      if(_assur == 1) then {"<t color='#8cff9b'>Assuré</t>"} else {"<t color='#FF0000'>Pas d'assurance</t>"},
      SEL(_vehicleInfo,9)
      ];
      if(_assur == 1) then {
      ctrlShow [97480,False];
      }else{
      ctrlShow [97480,True];
      };
      ctrlShow [2803,true];
      ctrlShow [2830,true];
      Alles anzeigen

      Für Farbänderungen dienen folgende Zeilen:


      C
      (localize "STR_Shop_Veh_UI_RetrievalP")+ " <t color='#8cff9b'>$%1</t><br/>
      " +(localize "STR_Shop_Veh_UI_SellP")+ " <t color='#8cff9b'>$%2</t><br/>
      Prix de l'assurance: <t color='#8cff9b'>$%9</t><br/>
      Etat de l'assurance: %10<br/>
      " +(localize "STR_Shop_Veh_UI_Color")+ " <t color='#8cff9b'>%8</t><br/>
      " +(localize "STR_Shop_Veh_UI_MaxSpeed")+ " <t color='#8cff9b'>%3 km/h</t><br/>
      " +(localize "STR_Shop_Veh_UI_HPower")+ " <t color='#8cff9b'>%4</t><br/>
      " +(localize "STR_Shop_Veh_UI_PSeats")+ " <t color='#8cff9b'>%5</t><br/>
      " +(localize "STR_Shop_Veh_UI_Trunk")+ " <t color='#8cff9b'>%6</t><br/>
      " +(localize "STR_Shop_Veh_UI_Fuel")+ " <t color='#8cff9b'>%7</t>
      if(_assur == 1) then {"<t color='#8cff9b'>Assuré</t>"} else {"<t color='#FF0000'>Pas d'assurance</t>"},
      Alles anzeigen


      Unter dialog\function\fn_impoundMenu.sqf sucht ihr nach folgender Zeile: _tmp = [_x select 2,_x select 8];
      und fügt dort "_x select 9" hinzu, was so aussehen sollte:

      C: fn_impoundMenu.sqf
      _tmp = [_x select 2,_x select 8, _x select 9];


      Öffnet nun eure cleanup.fsm unter life_server\FSM\cleanup.fsm und ersetzt den Inhalt durch folgenden:

      C: cleanup.fsm
      /*%FSM<COMPILE "D:\Bohemia Interactive\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, Server-Side Cleanup">*/
      /*%FSM<HEAD>*/
      /*
      item0[] = {"init",0,250,-65.004578,-391.651611,24.995417,-341.651672,0.000000,"init"};
      item1[] = {"true",8,218,-62.976639,-315.185364,27.023363,-265.185364,0.000000,"true"};
      item2[] = {"Share__Work_load",2,250,-64.183350,-224.681931,25.816656,-174.681931,0.000000,"Share " \n "Work-load"};
      item3[] = {"true",8,218,-54.709698,75.189262,35.290302,125.189262,0.000000,"true"};
      item4[] = {"Time_Check",4,218,-219.425827,-133.310532,-129.425964,-83.310455,0.000000,"Time Check"};
      item5[] = {"Delete_Dead_Cars",2,4346,-220.186951,-29.248400,-130.187195,20.751413,0.000000,"Delete" \n "Dead" \n "Cars"};
      item6[] = {"",7,210,-312.538239,95.295059,-304.538239,103.295059,0.000000,""};
      item7[] = {"",7,210,-311.750000,-203.033707,-303.750000,-195.033707,0.000000,""};
      link0[] = {0,1};
      link1[] = {1,2};
      link2[] = {2,4};
      link3[] = {3,6};
      link4[] = {4,5};
      link5[] = {5,3};
      link6[] = {6,7};
      link7[] = {7,2};
      globals[] = {0.000000,0,0,0,0,640,480,1,46,6316128,1,-629.444153,611.207214,293.309357,-434.050568,1243,885,1};
      window[] = {2,-1,-1,-1,-1,985,225,1868,225,3,1261};
      *//*%FSM</HEAD>*/
      class FSM
      {
        fsmName = "Server-Side Cleanup";
        class States
        {
          /*%FSM<STATE "init">*/
          class init
          {
            name = "init";
            init = /*%FSM<STATEINIT""">*/"private[""_impound"",""_cars"",""_objs"",""_totCars"",""_thread""];" \n
             "_impound = time;" \n
             "_cars = time;" \n
             "_objs = time;"/*%FSM</STATEINIT""">*/;
            precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
            class Links
            {
              /*%FSM<LINK "true">*/
              class true
              {
                priority = 0.000000;
                to="Share__Work_load";
                precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
                condition=/*%FSM<CONDITION""">*/"true"/*%FSM</CONDITION""">*/;
                action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
              };
              /*%FSM</LINK>*/
            };
          };
          /*%FSM</STATE>*/
          /*%FSM<STATE "Share__Work_load">*/
          class Share__Work_load
          {
            name = "Share__Work_load";
            init = /*%FSM<STATEINIT""">*/""/*%FSM</STATEINIT""">*/;
            precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
            class Links
            {
              /*%FSM<LINK "Time_Check">*/
              class Time_Check
              {
                priority = 0.000000;
                to="Delete_Dead_Cars";
                precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
                condition=/*%FSM<CONDITION""">*/"((time - _cars) > (3 * 60))"/*%FSM</CONDITION""">*/;
                action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
              };
              /*%FSM</LINK>*/
            };
          };
          /*%FSM</STATE>*/
          /*%FSM<STATE "Delete_Dead_Cars">*/
          class Delete_Dead_Cars
          {
            name = "Delete_Dead_Cars";
            init = /*%FSM<STATEINIT""">*/"{" \n
             "    if(!alive _x) then {" \n
             "        _dbInfo = _x getVariable[""dbInfo"",[]];" \n
             "        if(count _dbInfo > 0) then {" \n
             "            _uid = _dbInfo select 0;" \n
             "            _plate = _dbInfo select 1;" \n
             "            _insureSystem = _dbInfo select 2;" \n
             "            diag_log "" destroy vehicule !"";" \n
             "                diag_log format[""insureSystem = %1 "", _insureSystem];" \n
             "            if(_insureSystem == 1) then " \n
             "                 { " \n
             "                     diag_log "" Assurer !"";" \n
             "                     diag_log format[""insureSystem = %1 "", _insureSystem];" \n
             "                     _query_0 = format[""UPDATE vehicles SET alive='1', insure='0', active='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate]; " \n
             "                     _query_0 spawn " \n
             "                     {" \n
             "                         waitUntil {!DB_Async_Active};" \n
             "                         _thread_0 = [_this,1] spawn DB_fnc_asyncCall;" \n
             "                     };" \n
             "                  } " \n
             "                  else  " \n
             "                  {  " \n
             "                     diag_log "" Pas Assurer !"";" \n
             "                     diag_log format[""insureSystem = %1 "", _insureSystem];" \n
             "                     _query = format[""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate];  " \n
             "                     _query spawn " \n
             "                     {" \n
             "                          waitUntil {!DB_Async_Active};" \n
             "                         _thread = [_this,1] spawn DB_fnc_asyncCall;" \n
             "                     };      " \n
             "                 }; " \n
             "        };" \n
             "        if(!isNil ""_x"" && {!isNull _x}) then {" \n
             "            deleteVehicle _x;" \n
             "        };" \n
             "    };" \n
             "} foreach allMissionObjects ""LandVehicle"";" \n
             "" \n
             "{" \n
             "    if(!alive _x) then {" \n
             "        _dbInfo = _x getVariable[""dbInfo"",[]];" \n
             "        if(count _dbInfo > 0) then {" \n
             "            _uid = _dbInfo select 0;" \n
             "            _plate = _dbInfo select 1;" \n
             "            _insureSystem = _dbInfo select 2;" \n
             "            diag_log "" destroy vehicule !"";" \n
             "                diag_log format[""insureSystem = %1 "", _insureSystem];" \n
             "            if(_insureSystem == 1) then " \n
             "                 { " \n
             "                     diag_log "" Assurer !"";" \n
             "                     diag_log format[""insureSystem = %1 "", _insureSystem];" \n
             "                     _query_0 = format[""UPDATE vehicles SET alive='1', insure='0', active='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate]; " \n
             "                     _query_0 spawn " \n
             "                     {" \n
             "                         waitUntil {!DB_Async_Active};" \n
             "                         _thread_0 = [_this,1] spawn DB_fnc_asyncCall;" \n
             "                     };" \n
             "                  } " \n
             "                  else  " \n
             "                  {  " \n
             "                     diag_log "" Pas Assurer !"";" \n
             "                     diag_log format[""insureSystem = %1 "", _insureSystem];" \n
             "                     _query = format[""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate];  " \n
             "                     _query spawn " \n
             "                     {" \n
             "                          waitUntil {!DB_Async_Active};" \n
             "                         _thread = [_this,1] spawn DB_fnc_asyncCall;" \n
             "                     };      " \n
             "                 }; " \n
             "        };" \n
             "        if(!isNil ""_x"" && {!isNull _x}) then {" \n
             "            deleteVehicle _x;" \n
             "        };" \n
             "    };" \n
             "} foreach allMissionObjects ""Air"";" \n
             "" \n
             "_cars = time;" \n
             "" \n
             "//Group cleanup." \n
             "{" \n
             "    if(count units _x == 0 && local _x) then {" \n
             "        deleteGroup _x;" \n
             "    };" \n
             "} foreach allGroups;"/*%FSM</STATEINIT""">*/;
            precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
            class Links
            {
              /*%FSM<LINK "true">*/
              class true
              {
                priority = 0.000000;
                to="Share__Work_load";
                precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
                condition=/*%FSM<CONDITION""">*/"true"/*%FSM</CONDITION""">*/;
                action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
              };
              /*%FSM</LINK>*/
            };
          };
          /*%FSM</STATE>*/
        };
        initState="init";
        finalStates[] =
        {
        };
      };
      /*%FSM</COMPILE>*/
      Alles anzeigen


      Texte ändert ihr in folgenden Zeilen:


      C: cleanup.fsm
      diag_log "" Assurer !"";" \n
      
      
      
      
      diag_log "" Pas Assurer !"";" \n


      Öffnet nun eure Config_Vehicles.hpp und fügt für alle Fahrzeuge welche ihr versichern wollt unter LifeCfgVehicles folgendes hinzu: assurPrice[] = { 1000, 1000, 1000, 1000 };

      Erstellt dann folgenden Eintrag in eurer CfgRemoteExec.hpp: F(TON_fnc_insureCar,SERVER)

      Sucht nun unter life_server\functions\Systems\fn_getVehicles.sqf nach eurem "_query" und ersetzt diesen durch folgendes:

      SQL: fn_getVehicles.sqf
      _query = format["SELECT id, side, classname, type, pid, alive, active, plate, color, insure FROM vehicles WHERE pid='%1' AND alive='1' AND active='0' AND side='%2' AND type='%3'",_pid,_side,_type];


      Nun fügt ihr eurer Datenbanktabelle "vehicles" die Spalte "insure" hinzu, hier die Struktur:


      SQL: vehicles
      -- ----------------------------
      -- Table structure for `vehicles`
      -- ----------------------------
      DROP TABLE IF EXISTS `vehicles`;
      CREATE TABLE `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,
        `insure` int(1) NOT NULL DEFAULT '0',
        PRIMARY KEY (`id`),
        KEY `side` (`side`),
        KEY `pid` (`pid`),
        KEY `type` (`type`)
      ) ENGINE=InnoDB AUTO_INCREMENT=152 DEFAULT CHARSET=latin1;
      Alles anzeigen


      Zum Schluss öffnet eure life_server\Functions\Systems\fn_vehicleCreate.sqf und fügt unter private "_insureSystem " hinzu. Danach erstellt ihr dort noch folgende Variable am oberen Ende der Datei: _insureSystem = 0;

      danach sucht nach folgender Zeile: _vehicle setVariable["dbInfo",[_uid,_plate]];
      und fügt dort "_insureSystem" hinzu, das sollte dann so aussehen: _vehicle setVariable["dbInfo",[_uid,_plate,_insureSystem]];


      Das soll es gewesen sein. Viel Spaß damit! :P

      Wichtige Links:

      [Erklärung|Leitfaden] Arma 3 Logs - Client, Server & extDB Log
      [Tutorial] ArmA 3 Altis Life RPG & Tanoa Life RPG Server einrichten unter Windows (mit extDB & BEC)
      BattlEye Filter - Guide und Erklärungen

    • Shinji
      Profi
      Reaktionen
      576
      Trophäen
      10
      Beiträge
      778
      • 29. Juni 2016 um 16:40
      • #2

      ###### EDIT
      Vor mir war eine Frage wie man es einstellen könnte das bei jedem Neustart die Versicherung entfernt wird sowie das man die Fahrzeuge nicht im ChopShop verkaufen wenn sie versichert sind. ~


      Dafür schreibst du eine neue Prozedur in deine DB und lässt die am anfang callen wenn der grade hochgefahren wird:

      Das hier ist ein beispielcode, kein C&P Code!

      Code
      CREATE DEFINER=`minolife`@`localhost` PROCEDURE `deleteDeadVehicles`()
      BEGIN
      	UPDATE `vehicle` SET `insurance`= 0 WHERE `insurance`= 1;
      END


      Beim Chopshop fragst du einfach nach den DBinfos in der datei fn_chopShopMenu.sqf;
      Das hier ist ein beispielcode, kein C&P Code!

      Code
      ...
      
      
      
      
      _control = CONTROL(39400,39402);
      {
              _dbinfo = _x getvariable ["dbInfo",[]];
              _ins = 0;
              if (count _dbinfo > 0) then { _ins = _dbinfo select 2 };     
      	if(alive _x && _ins == 0) then {
      
      
      
      
      ...
      Alles anzeigen

      Sollte recht einfach sein :)

      Software Entwickler -
      Präzises Rätselraten, basierend auf unzuverlässigen Daten und fragwürdigem Wissen der Auftraggeber.

    • whocare
      Frischling
      Reaktionen
      1
      Trophäen
      11
      Beiträge
      14
      • 29. Juni 2016 um 17:15
      • #3

      Ich bekomme Fehler.

      Jemand eine Idee?

      Code
      Error in expression <,"_assurPrice","_assur"];
      _control = SEL(_this,0);
      _index = SEL(_this,1);
      
      
      
      
      _data>
        Error position: <(_this,0);
      _index = SEL(_this,1);
      
      
      
      
      _data>
        Error Missing ;
      File mpmissions\__cur_mp.Tanoa\dialog\function\fn_garageLBChange.sqf, line 10
      Error in expression <,"_assurPrice","_assur"];
      _control = SEL(_this,0);
      _index = SEL(_this,1);
      
      
      
      
      _data>
        Error position: <(_this,0);
      _index = SEL(_this,1);
      
      
      
      
      _data>
        Error Missing ;
      File mpmissions\__cur_mp.Tanoa\dialog\function\fn_garageLBChange.sqf, line 10
      Error in expression <rPrice"];
      disableSerialization;
      if(EQUAL(lbCurSel 2802,-1)) exitWith {hint local>
        Error position: <(lbCurSel 2802,-1)) exitWith {hint local>
        Error Missing )
      File mpmissions\__cur_mp.Tanoa\dialog\function\fn_insureCar.sqf, line 10
      Error in expression <rPrice"];
      disableSerialization;
      if(EQUAL(lbCurSel 2802,-1)) exitWith {hint local>
        Error position: <(lbCurSel 2802,-1)) exitWith {hint local>
        Error Missing )
      File mpmissions\__cur_mp.Tanoa\dialog\function\fn_insureCar.sqf, line 10
      Alles anzeigen
    • Shinji
      Profi
      Reaktionen
      576
      Trophäen
      10
      Beiträge
      778
      • 29. Juni 2016 um 17:39
      • #4

      Bei dir fehlen die Macros in deinen Dateien.

      Software Entwickler -
      Präzises Rätselraten, basierend auf unzuverlässigen Daten und fragwürdigem Wissen der Auftraggeber.

    • Cris-2015
      Anfänger
      Reaktionen
      3
      Trophäen
      10
      Beiträge
      27
      • 29. Juni 2016 um 22:57
      • #5

      So hab das jetzt hinzugefügt und kriege folgender Fehler:

      22:41:03 Error in expression <dbinfo select 2 };
      if(alive _x && _ins == 0) then {
      _className = typeOf _x;
      _cl>
      22:41:03 Error position: <== 0) then {
      _className = typeOf _x;
      _cl>
      22:41:03 Error Allgemeiner Fehler in Ausdruck
      22:41:03 File mpmissions\__CUR_MP.Altis\core\shops\fn_chopShopMenu.sqf, line 28

      und so Sieht die Chopshop aus:

      Spoiler anzeigen


      #include "..\..\script_macros.hpp"
      /*
      File: fn_chopShopMenu.sqf
      Author: Bryan "Tonic" Boardwine


      Description:
      Opens & initializes the chop shop menu.
      */
      if(life_action_inUse) exitWith {hint localize "STR_NOTF_ActionInProc"};
      disableSerialization;
      private["_nearVehicles","_control"];
      _nearVehicles = nearestObjects [getMarkerPos (_this select 3),["Car","Truck","Air"],25];


      life_chopShop = SEL(_this,3);
      //Error check
      if(EQUAL(count _nearVehicles,0)) exitWith {titleText[localize "STR_Shop_NoVehNear","PLAIN"];};
      if(!(createDialog "Chop_Shop")) exitWith {hint localize "STR_Shop_ChopShopError"};


      _control = CONTROL(39400,39402);
      {
      _dbinfo = _x getvariable ["dbInfo",[]];
      _ins = 0;
      if (count _dbinfo > 0) then { _ins = _dbinfo select 2 };
      if(alive _x && _ins == 0) then {
      _className = typeOf _x;
      _classNameLife = _className;
      _displayName = getText(configFile >> "CfgVehicles" >> _className >> "displayName");
      _picture = getText(configFile >> "CfgVehicles" >> _className >> "picture");


      if(!isClass (missionConfigFile >> CONFIG_LIFE_VEHICLES >> _classNameLife)) then {
      _classNameLife = "Default"; //Use Default class if it doesn't exist
      diag_log format["%1: LifeCfgVehicles class doesn't exist",_className];
      };


      _price = switch(playerSide) do {
      case civilian: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"rentalprice"),0)};
      case west: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"rentalprice"),1)};
      case independent: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"rentalprice"),2)};
      case east: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"rentalprice"),3)};
      };
      _multiplicator = LIFE_SETTINGS(getNumber,"vehicleChopShop_Multiplicator");
      _price = _multiplicator * _price;
      if(!isNil "_price" && EQUAL(count crew _x,0)) then {
      _control lbAdd _displayName;
      _control lbSetData [(lbSize _control)-1,str(_forEachIndex)];
      _control lbSetPicture [(lbSize _control)-1,_picture];
      _control lbSetValue [(lbSize _control)-1,_price];
      };
      };
      } foreach _nearVehicles;

      sowie in der SpawnVehicle.sqf:

      21:40:55 Error in expression <ate",_unit];
      };


      if((_vInfo select 9) == 1) then {
      [1,"Ihr Fahrzeug ist bereit>
      21:40:55 Error position: <== 1) then {
      [1,"Ihr Fahrzeug ist bereit>
      21:40:55 Error Generic error in expression
      21:40:55 File life_server\Functions\Systems\fn_spawnVehicle.sqf, line 187


      1:47:48 Error in expression <vehicleAnimate",_unit];
      };
      if((_vInfo,9) == 1) then {
      [1,"Ihr Fahrzeug ist be>
      1:47:48 Error position: <,9) == 1) then {
      [1,"Ihr Fahrzeug ist be>
      1:47:48 Error Missing )
      1:47:48 File life_server\Functions\Systems\fn_spawnVehicle.sqf, line 187

      Und hier noch die Spawn Vehicle:

      Spoiler anzeigen


      #include "\life_server\script_macros.hpp"
      /*
      File: fn_spawnVehicle.sqf
      Author: Bryan "Tonic" Boardwine


      Description:
      Sends the query request to the database, if an array is returned then it creates
      the vehicle if it's not in use or dead.
      */
      private["_vid","_sp","_pid","_query","_sql","_vehicle","_nearVehicles","_name","_side","_tickTime","_dir","_servIndex","_damage"];
      _vid = [_this,0,-1,[0]] call BIS_fnc_param;
      _pid = [_this,1,"",[""]] call BIS_fnc_param;
      _sp = [_this,2,[],[[],""]] call BIS_fnc_param;
      _unit = [_this,3,ObjNull,[ObjNull]] call BIS_fnc_param;
      _price = [_this,4,0,[0]] call BIS_fnc_param;
      _dir = [_this,5,0,[0]] call BIS_fnc_param;
      _spawntext = _this select 6;
      _unit_return = _unit;
      _name = name _unit;
      _side = side _unit;
      _unit = owner _unit;


      if(EQUAL(_vid,-1) OR EQUAL(_pid,"")) exitWith {};
      if(_vid in serv_sv_use) exitWith {};
      serv_sv_use pushBack _vid;
      _servIndex = serv_sv_use find _vid;


      /*_query = format["SELECT id, side, classname, type, pid, alive, active, plate, color, inventory, gear, fuel, damage FROM vehicles WHERE id='%1' AND pid='%2'",_vid,_pid];*/
      _query = format["SELECT id, side, classname, type, pid, alive, active, plate, color,inventory, gear, fuel, damage, insure FROM vehicles WHERE id='%1' AND pid='%2'",_vid,_pid];


      _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(EQUAL(typeName _queryResult,typeName "")) exitWith {};


      _vInfo = _queryResult;
      if(isNil "_vInfo") exitWith {serv_sv_use deleteAt _servIndex;};
      if(EQUAL(count _vInfo,0)) exitWith {serv_sv_use deleteAt _servIndex;};


      if(EQUAL(SEL(_vInfo,5),0)) exitWith {
      serv_sv_use deleteAt _servIndex;
      [1,format[(localize "STR_Garage_SQLError_Destroyed"),_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit];
      };


      if(EQUAL(SEL(_vInfo,6),1)) exitWith {
      serv_sv_use deleteAt _servIndex;
      [1,format[(localize "STR_Garage_SQLError_Active"),_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit];
      };


      if!(EQUAL(typeName _sp,typeName "")) then {
      _nearVehicles = nearestObjects[_sp,["Car","Air","Ship"],10];
      } else {
      _nearVehicles = [];
      };


      if(count _nearVehicles > 0) exitWith {
      serv_sv_use deleteAt _servIndex;
      [_price,_unit_return] remoteExecCall ["life_fnc_garageRefund",_unit];
      [1,(localize "STR_Garage_SpawnPointError")] remoteExecCall ["life_fnc_broadcast",_unit];
      };


      _query = format["UPDATE vehicles SET active='1', damage='""[]""' WHERE pid='%1' AND id='%2'",_pid,_vid];


      _trunk = [_vInfo select 9] call DB_fnc_mresToArray;
      _gear = [_vInfo select 10] call DB_fnc_mresToArray;
      _damage = [_vInfo select 12] call DB_fnc_mresToArray;


      [_query,1] spawn DB_fnc_asyncCall;
      if(typeName _sp == "STRING") then {
      _vehicle = createVehicle[(_vInfo select 2),[0,0,999],[],0,"NONE"];
      waitUntil {!isNil "_vehicle" && {!isNull _vehicle}};
      _vehicle allowDamage false;
      _hs = nearestObjects[getMarkerPos _sp,["Land_Hospital_side2_F"],50] select 0;
      _vehicle setPosATL (_hs modelToWorld [-0.4,-4,12.65]);
      sleep 0.6;
      } else {
      _vehicle = createVehicle [(_vInfo select 2),_sp,[],0,"NONE"];
      waitUntil {!isNil "_vehicle" && {!isNull _vehicle}};
      _vehicle allowDamage false;
      _vehicle setPos _sp;
      _vehicle setVectorUp (surfaceNormal _sp);
      _vehicle setDir _dir;
      };
      _vehicle allowDamage true;
      //Send keys over the network.
      [_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit];
      [_pid,_side,_vehicle,1] call TON_fnc_keyManagement;
      _vehicle lock 2;
      //Reskin the vehicle
      [_vehicle,_vInfo select 8] remoteExecCall ["life_fnc_colorVehicle",_unit];
      _vehicle setVariable["vehicle_info_owners",[[_pid,_name]],true];
      _vehicle setVariable["dbInfo",[(_vInfo select 4),_vInfo select 7,_vInfo select 9],true];
      _vehicle disableTIEquipment true; //No Thermals.. They're cheap but addictive.
      [_vehicle] call life_fnc_clearVehicleAmmo;


      // Avoid problems if u keep changing which stuff to save!
      if(EQUAL(LIFE_SETTINGS(getNumber,"save_veh_virtualItems"),1)) then {
      _vehicle setVariable["Trunk",_trunk,true];
      }else{
      _vehicle setVariable["Trunk",[[],0],true];
      };


      if(EQUAL(LIFE_SETTINGS(getNumber,"save_veh_fuel"),1)) then {
      _vehicle setFuel (_vInfo select 11);
      }else{
      _vehicle setfuel 1;
      };


      if (count _gear > 0 && (EQUAL(LIFE_SETTINGS(getNumber,"save_veh_gear"),1))) then {
      _items = _gear select 0;
      _mags = _gear select 1;
      _weapons = _gear select 2;
      _backpacks = _gear select 3;


      for "_i" from 0 to ((count (_items select 0)) - 1) do {
      _vehicle addItemCargoGlobal [((_items select 0) select _i), ((_items select 1) select _i)];
      };
      for "_i" from 0 to ((count (_mags select 0)) - 1) do {
      _vehicle addMagazineCargoGlobal [((_mags select 0) select _i), ((_mags select 1) select _i)];
      };
      for "_i" from 0 to ((count (_weapons select 0)) - 1) do {
      _vehicle addWeaponCargoGlobal [((_weapons select 0) select _i), ((_weapons select 1) select _i)];
      };
      for "_i" from 0 to ((count (_backpacks select 0)) - 1) do {
      _vehicle addBackpackCargoGlobal [((_backpacks select 0) select _i), ((_backpacks select 1) select _i)];
      };
      };


      if (count _damage > 0 && (EQUAL(LIFE_SETTINGS(getNumber,"save_veh_damage"),1))) then {
      _parts = getAllHitPointsDamage _vehicle;


      for "_i" from 0 to ((count _damage) - 1) do {
      _vehicle setHitPointDamage [format["%1",((_parts select 0) select _i)],(_damage select _i)];
      };
      };


      //Sets of animations
      if(EQUAL(SEL(_vInfo,1),"civ") && EQUAL(SEL(_vInfo,2),"B_Heli_Light_01_F") && !(EQUAL(SEL(_vInfo,8),13))) then {
      [_vehicle,"civ_littlebird",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit];
      };
      //Cop Lichter nach ausparken
      if((_vInfo select 1) == "cop" && (_vInfo select 2) in [
      "C_SUV_01_F","C_Hatchback_01_sport_F","C_Hatchback_01_F","B_MRAP_01_F","O_MRAP_02_F","B_Quadbike_01_F","B_MRAP_01_hmg_F","I_MRAP_03_F","I_MRAP_03_hmg_F","B_Heli_Light_01_F","O_Heli_Light_02_unarmed_F","B_Heli_Transport_01_F","I_Heli_light_03_unarmed_F","B_APC_Tracked_01_CRV_F"]) then {
      _vehicle setVariable["lights",false,true];
      };
      //Medic Lichter nach ausparken
      if((_vInfo select 1) == "med" && (_vInfo select 2) in [
      "C_SUV_01_F",
      "C_Hatchback_01_sport_F",
      "C_Hatchback_01_F",
      "B_MRAP_01_F",
      "C_Van_01_box_F",
      "C_Van_01_fuel_F",
      "O_MRAP_02_F",
      "B_Quadbike_01_F",
      "B_MRAP_01_hmg_F",
      "I_MRAP_03_F",
      "I_MRAP_03_hmg_F",
      "B_Heli_Light_01_F",
      "O_Heli_Light_02_unarmed_F",
      "B_Heli_Transport_01_F",
      "O_Truck_03_transport_F",
      "I_Heli_light_03_unarmed_F",
      "I_Truck_02_transport_F",
      "B_APC_Tracked_01_CRV_F"]) then {
      _vehicle setVariable["lights",false,true];
      };


      if(EQUAL(SEL(_vInfo,1),"cop") && (SEL(_vInfo,2)) in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then {
      [_vehicle,"cop_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit];
      };


      if(EQUAL(SEL(_vInfo,1),"med") && EQUAL(SEL(_vInfo,2),"C_Offroad_01_F")) then {
      [_vehicle,"med_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit];
      };


      /*[1,_spawntext] remoteExecCall ["life_fnc_broadcast",_unit];*/
      //Alter Text darüber

      if((_vInfo select 9) == 1) then {
      [1,"Ihr Fahrzeug ist bereit und versichert!"] remoteExecCall ["life_fnc_broadcast",_unit];
      } else {
      [1,"Ihr Fahrzeug ist bereit!"] remoteExecCall ["life_fnc_broadcast",_unit];
      };
      */
      serv_sv_use deleteAt _servIndex;


      Vielen dank für deine hilfe.

      Grüsse

      Einmal editiert, zuletzt von Cris-2015 (30. Juni 2016 um 02:04)

    • Shinji
      Profi
      Reaktionen
      576
      Trophäen
      10
      Beiträge
      778
      • 30. Juni 2016 um 08:32
      • #6

      Und wieder einen Sturen copy/paster erwischt...

      Code
      _control = CONTROL(39400,39402);
      {
      _dbinfo = _x getvariable ["dbInfo",[]];
      _ins = 0;
      if (count _dbinfo > 0) then { _ins = _dbinfo select 2 };
      if(alive _x && _ins == 0) then {
      _className = typeOf _x;
      _classNameLife = _className;
      _displayName = getText(configFile >> "CfgVehicles" >> _className >> "displayName");
      _picture = getText(configFile >> "CfgVehicles" >> _className >> "picture");


      Nächstes mal Code genauer anschauen und nicht direkt C&P... änder den Code zu folgendem:

      Code
      _dbinfo = _x getvariable ["dbInfo",[]];
      _ins = 0;
      if (count _dbinfo > 0) then { _ins = _dbinfo select 2 };
      if(alive _x && _ins == 0) then {
      _className = typeOf _x;
      _classNameLife = _className;
      _displayName = getText(configFile >> "CfgVehicles" >> _className >> "displayName");
      _picture = getText(configFile >> "CfgVehicles" >> _className >> "picture");

      Einfach die beiden oberen Zeilen löschen also das Control und die Klammer... Eventuelles Mitdenken setze ich voraus.


      Spawnvehicle ist es ähnlich:

      Code
      if((_vInfo select 9) == 1) then {
      [1,"Ihr Fahrzeug ist bereit und versichert!"] remoteExecCall ["life_fnc_broadcast",_unit];
      } else {
      [1,"Ihr Fahrzeug ist bereit!"] remoteExecCall ["life_fnc_broadcast",_unit];
      };

      Du fragst nach dem 9 Element im Array was bei dir offensichtlich


      Code
      _trunk = [_vInfo select 9] call DB_fnc_mresToArray;
      _gear = [_vInfo select 10] call DB_fnc_mresToArray;
      _damage = [_vInfo select 12] call DB_fnc_mresToArray;

      Der Trunk bzw das Virtuelle Inventar ist. ~ anders gesagt, du musst zählen wieviele Elemente du bereits aus dem Array holst.

      Da du beim punkt 12 schon den Schaden hast solltest du es auf 13 legen (Ohne nochmal groß drüber zu schauen).

      Code
      if((_vInfo select 13) == 1) then {
      [1,"Ihr Fahrzeug ist bereit und versichert!"] remoteExecCall ["life_fnc_broadcast",_unit];
      } else {
      [1,"Ihr Fahrzeug ist bereit!"] remoteExecCall ["life_fnc_broadcast",_unit];
      };

      Software Entwickler -
      Präzises Rätselraten, basierend auf unzuverlässigen Daten und fragwürdigem Wissen der Auftraggeber.

    • Cris-2015
      Anfänger
      Reaktionen
      3
      Trophäen
      10
      Beiträge
      27
      • 30. Juni 2016 um 18:35
      • #7

      Hallo
      Irgendwie checke ich es gerade nicht ganz

      jetzt habe ich folgender Fehler

      18:01:37 Error in expression <e "STR_Shop_ChopShopError"};


      _dbinfo = _x getvariable ["dbInfo",[]];
      _ins = 0;
      >
      18:01:37 Error position: <_x getvariable ["dbInfo",[]];
      _ins = 0;
      >
      18:01:37 Error Nicht definierte Variable in Ausdruck: _x
      18:01:37 File mpmissions\__CUR_MP.Altis\core\shops\fn_chopShopMenu.sqf, line 19


      Spoiler anzeigen


      if(life_action_inUse) exitWith {hint localize "STR_NOTF_ActionInProc"};
      disableSerialization;
      private["_nearVehicles","_control"];
      _nearVehicles = nearestObjects [getMarkerPos (_this select 3),["Car","Truck","Air"],25];


      life_chopShop = SEL(_this,3);
      //Error check
      if(EQUAL(count _nearVehicles,0)) exitWith {titleText[localize "STR_Shop_NoVehNear","PLAIN"];};
      if(!(createDialog "Chop_Shop")) exitWith {hint localize "STR_Shop_ChopShopError"};


      _dbinfo = _x getvariable ["dbInfo",[]];
      _ins = 0;
      if (count _dbinfo > 0) then { _ins = _dbinfo select 14 };
      if(alive _x && _ins == 0) then {
      _className = typeOf _x;
      _classNameLife = _className;
      _displayName = getText(configFile >> "CfgVehicles" >> _className >> "displayName");
      _picture = getText(configFile >> "CfgVehicles" >> _className >> "picture");


      if(!isClass (missionConfigFile >> CONFIG_LIFE_VEHICLES >> _classNameLife)) then {
      _classNameLife = "Default"; //Use Default class if it doesn't exist
      diag_log format["%1: LifeCfgVehicles class doesn't exist",_className];
      };


      _price = switch(playerSide) do {
      case civilian: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"rentalprice"),0)};
      case west: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"rentalprice"),1)};
      case independent: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"rentalprice"),2)};
      case east: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"rentalprice"),3)};
      };
      _multiplicator = LIFE_SETTINGS(getNumber,"vehicleChopShop_Multiplicator");
      _price = _multiplicator * _price;
      if(!isNil "_price" && EQUAL(count crew _x,0)) then {
      _control lbAdd _displayName;
      _control lbSetData [(lbSize _control)-1,str(_forEachIndex)];
      _control lbSetPicture [(lbSize _control)-1,_picture];
      _control lbSetValue [(lbSize _control)-1,_price];
      };
      } foreach _nearVehicles;

    • Shinji
      Profi
      Reaktionen
      576
      Trophäen
      10
      Beiträge
      778
      • 30. Juni 2016 um 18:41
      • #8

      Okay ja war ne Foreach

      Code
      _dbinfo = _x getvariable ["dbInfo",[]];
      _ins = 0;
      
      
      
      
      ^^^^ über dem hier eine eckige klammer auf also so:
      
      
      
      
      
      
      
      
      
      
      {
      _dbinfo = _x getvariable ["dbInfo",[]];
      _ins = 0;
      Alles anzeigen

      Software Entwickler -
      Präzises Rätselraten, basierend auf unzuverlässigen Daten und fragwürdigem Wissen der Auftraggeber.

    • powerafro2
      Profi
      Reaktionen
      357
      Trophäen
      11
      Beiträge
      1.342
      Dateien
      1
      Bilder
      4
      • 30. Juni 2016 um 18:49
      • #9

      Habe mal eine Frage,


      Müsste man viel umändern wenn man das in die 3.1.4.8 übernehmen würde oder nur gewisse Sachen ändern ??

      Mfg powerafro2

    • Cris-2015
      Anfänger
      Reaktionen
      3
      Trophäen
      10
      Beiträge
      27
      • 30. Juni 2016 um 18:59
      • #10

      Gut hab ich gemacht aber immernoch diesen Fehler:

      18:55:43 Error position: <_ins == 0) then {
      _className = typeOf _x>
      18:55:43 Error Nicht definierte Variable in Ausdruck: _ins
      18:55:43 File mpmissions\__CUR_MP.Altis\core\shops\fn_chopShopMenu.sqf, line 23

      Spoiler anzeigen


      #include "..\..\script_macros.hpp"
      /*
      File: fn_chopShopMenu.sqf
      Author: Bryan "Tonic" Boardwine


      Description:
      Opens & initializes the chop shop menu.
      */
      if(life_action_inUse) exitWith {hint localize "STR_NOTF_ActionInProc"};
      disableSerialization;
      private["_nearVehicles","_control"];
      _nearVehicles = nearestObjects [getMarkerPos (_this select 3),["Car","Truck","Air"],25];


      life_chopShop = SEL(_this,3);
      //Error check
      if(EQUAL(count _nearVehicles,0)) exitWith {titleText[localize "STR_Shop_NoVehNear","PLAIN"];};
      if(!(createDialog "Chop_Shop")) exitWith {hint localize "STR_Shop_ChopShopError"};


      {
      _dbinfo = _x getvariable ["dbInfo",[]];
      _ins = 0;
      if (count _dbinfo > 0) then { _ins = _dbinfo select 14 };
      if(alive _x && _insure == 0) then {
      _className = typeOf _x;
      _classNameLife = _className;
      _displayName = getText(configFile >> "CfgVehicles" >> _className >> "displayName");
      _picture = getText(configFile >> "CfgVehicles" >> _className >> "picture");


      if(!isClass (missionConfigFile >> CONFIG_LIFE_VEHICLES >> _classNameLife)) then {
      _classNameLife = "Default"; //Use Default class if it doesn't exist
      diag_log format["%1: LifeCfgVehicles class doesn't exist",_className];
      };


      _price = switch(playerSide) do {
      case civilian: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"rentalprice"),0)};
      case west: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"rentalprice"),1)};
      case independent: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"rentalprice"),2)};
      case east: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"rentalprice"),3)};
      };
      _multiplicator = LIFE_SETTINGS(getNumber,"vehicleChopShop_Multiplicator");
      _price = _multiplicator * _price;
      if(!isNil "_price" && EQUAL(count crew _x,0)) then {
      _control lbAdd _displayName;
      _control lbSetData [(lbSize _control)-1,str(_forEachIndex)];
      _control lbSetPicture [(lbSize _control)-1,_picture];
      _control lbSetValue [(lbSize _control)-1,_price];
      };
      };
      } foreach _nearVehicles;

    • Shinji
      Profi
      Reaktionen
      576
      Trophäen
      10
      Beiträge
      778
      • 30. Juni 2016 um 19:04
      • #11

      Verrätst du mir wo diese 14 her kommt?

      Code
      if (count _dbinfo > 0) then { _ins = _dbinfo select 14 }; // <<< die da????

      Die steht nirgendswo in irgendeinem Code drin.
      Auf jedenfall machst du aus der 14 eine 2

      Software Entwickler -
      Präzises Rätselraten, basierend auf unzuverlässigen Daten und fragwürdigem Wissen der Auftraggeber.

    • Cris-2015
      Anfänger
      Reaktionen
      3
      Trophäen
      10
      Beiträge
      27
      • 30. Juni 2016 um 19:12
      • #12

      Ich habe mich dachte das were der Datenbanksatz

      aber geht leider noch nicht

      kriege jetzt diesen Fehler

      19:08:29 Error in expression <_dbinfo select 2 };
      if(alive _x && _ins == 0) then {
      _className = typeOf _x;
      _cl>
      19:08:29 Error position: <== 0) then {
      _className = typeOf _x;
      _cl>
      19:08:29 Error Allgemeiner Fehler in Ausdruck
      19:08:29 File mpmissions\__CUR_MP.Altis\core\shops\fn_chopShopMenu.sqf, line 23
      19:08:42 Error in expression <_dbinfo select 2 };
      if(alive _x && _ins == 0) then {
      _className = typeOf _x;
      _cl>
      19:08:42 Error position: <== 0) then {
      _className = typeOf _x;
      _cl>
      19:08:42 Error Allgemeiner Fehler in Ausdruck
      19:08:42 File mpmissions\__CUR_MP.Altis\core\shops\fn_chopShopMenu.sqf, line 23


      Spoiler anzeigen


      #include "..\..\script_macros.hpp"
      /*
      File: fn_chopShopMenu.sqf
      Author: Bryan "Tonic" Boardwine


      Description:
      Opens & initializes the chop shop menu.
      */
      if(life_action_inUse) exitWith {hint localize "STR_NOTF_ActionInProc"};
      disableSerialization;
      private["_nearVehicles","_control"];
      _nearVehicles = nearestObjects [getMarkerPos (_this select 3),["Car","Truck","Air"],25];


      life_chopShop = SEL(_this,3);
      //Error check
      if(EQUAL(count _nearVehicles,0)) exitWith {titleText[localize "STR_Shop_NoVehNear","PLAIN"];};
      if(!(createDialog "Chop_Shop")) exitWith {hint localize "STR_Shop_ChopShopError"};


      {
      _dbinfo = _x getvariable ["dbInfo",[]];
      _ins = 0;
      if (count _dbinfo > 0) then { _ins = _dbinfo select 2 };
      if(alive _x && _ins == 0) then {
      _className = typeOf _x;
      _classNameLife = _className;
      _displayName = getText(configFile >> "CfgVehicles" >> _className >> "displayName");
      _picture = getText(configFile >> "CfgVehicles" >> _className >> "picture");


      if(!isClass (missionConfigFile >> CONFIG_LIFE_VEHICLES >> _classNameLife)) then {
      _classNameLife = "Default"; //Use Default class if it doesn't exist
      diag_log format["%1: LifeCfgVehicles class doesn't exist",_className];
      };


      _price = switch(playerSide) do {
      case civilian: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"rentalprice"),0)};
      case west: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"rentalprice"),1)};
      case independent: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"rentalprice"),2)};
      case east: {SEL(M_CONFIG(getArray,CONFIG_LIFE_VEHICLES,_classNameLife,"rentalprice"),3)};
      };
      _multiplicator = LIFE_SETTINGS(getNumber,"vehicleChopShop_Multiplicator");
      _price = _multiplicator * _price;
      if(!isNil "_price" && EQUAL(count crew _x,0)) then {
      _control lbAdd _displayName;
      _control lbSetData [(lbSize _control)-1,str(_forEachIndex)];
      _control lbSetPicture [(lbSize _control)-1,_picture];
      _control lbSetValue [(lbSize _control)-1,_price];
      };
      };
      } foreach _nearVehicles;

    • Shinji
      Profi
      Reaktionen
      576
      Trophäen
      10
      Beiträge
      778
      • 30. Juni 2016 um 19:16
      • #13

      Ich kann mich ja irren aber ich glaube dann hast du ein Fehler beim TUT gemacht. Außer , versuchst du ein Gemietet Fahrzeug zu verkaufen? Das kann man noch bedenken.

      Software Entwickler -
      Präzises Rätselraten, basierend auf unzuverlässigen Daten und fragwürdigem Wissen der Auftraggeber.

    • John_Parker
      Fortgeschrittener
      Reaktionen
      37
      Trophäen
      10
      Beiträge
      338
      • 4. Juli 2016 um 00:54
      • #14

      Ich habe das Versicherungs System eingebaut es Funktioniert auch alles bis auf das Ausparken! Und zwar wenn ich mein Fahrzeug in der Garage Versichere und ich es danach ausparken will Spawnt das Fahrzeug nicht mehr aus der Garage.

      Es steht oben Rechts nur "Fahrzeug wird bereitgestellt, bitte warten..."

      Aber es Spawnt nicht.

      Wäre nett wenn mir jemand weiterhelfen würde, ich habe jetzt 3 Stunden an dem Ding geschaut aber nichts gefunden woran es liegen könnte.

      Wie gesagt in der Datenbank wird "insure" auch auf "1" gesetzt wenn ich es Versichert habe, aber ingame will das Fahrzeug nicht mehr Spawnen... Komisch.. wäre echt nett wenn mir jemand weiterhelfen könnte, bin am Verzweifeln...

      Ich Benutze die Version 4.3

      MfG

      d4ccfe34e7e85df1132cf7f0832e56.gif

    • Shinji
      Profi
      Reaktionen
      576
      Trophäen
      10
      Beiträge
      778
      • 4. Juli 2016 um 08:20
      • #15

      Dann einmal die Server RPT bitte. Da wird mal wieder ein Fehlerteufel sein

      Software Entwickler -
      Präzises Rätselraten, basierend auf unzuverlässigen Daten und fragwürdigem Wissen der Auftraggeber.

    • John_Parker
      Fortgeschrittener
      Reaktionen
      37
      Trophäen
      10
      Beiträge
      338
      • 4. Juli 2016 um 18:26
      • #16

      Habe das hier gefunden in der RPT Log:

      Code
      18:05:54 Error in expression <fnc_vehicleAnimate",_unit];
      };
      if(EQUAAL( == 1) then {
      [1,"Ihr Fahrzeug ist bere>
      18:05:54   Error position: <( == 1) then {
      [1,"Ihr Fahrzeug ist bere>
      18:05:54   Error Missing )
      18:05:54 File life_server\Functions\Systems\fn_spawnVehicle.sqf, line 137
      18:05:54 Error in expression <fnc_vehicleAnimate",_unit];
      };
      if(EQUAAL( == 1) then {
      [1,"Ihr Fahrzeug ist bere>
      18:05:54   Error position: <( == 1) then {
      [1,"Ihr Fahrzeug ist bere>
      18:05:54   Error Missing )
      18:05:54 File life_server\Functions\Systems\fn_spawnVehicle.sqf, line 137
      Alles anzeigen


      Nur weiß ich nicht was ich dort genau abändern soll.

      Das ist die Datei:

      Code
      #include "\life_server\script_macros.hpp"
      /*
      	File: fn_spawnVehicle.sqf
      	Author: Bryan "Tonic" Boardwine
      
      
      
      
      	Description:
      	Sends the query request to the database, if an array is returned then it creates
      	the vehicle if it's not in use or dead.
      */
      private["_vid","_sp","_pid","_query","_sql","_vehicle","_nearVehicles","_name","_side","_tickTime","_dir","_servIndex"];
      _vid = [_this,0,-1,[0]] call BIS_fnc_param;
      _pid = [_this,1,"",[""]] call BIS_fnc_param;
      _sp = [_this,2,[],[[],""]] call BIS_fnc_param;
      _unit = [_this,3,ObjNull,[ObjNull]] call BIS_fnc_param;
      _price = [_this,4,0,[0]] call BIS_fnc_param;
      _dir = [_this,5,0,[0]] call BIS_fnc_param;
      _unit_return = _unit;
      _name = name _unit;
      _side = side _unit;
      _unit = owner _unit;
      
      
      
      
      if(EQUAL(_vid,-1) OR EQUAL(_pid,"")) exitWith {};
      if(_vid in serv_sv_use) exitWith {};
      serv_sv_use pushBack _vid;
      _servIndex = serv_sv_use find _vid;
      
      
      
      
      _query = format["SELECT id, side, classname, type, pid, alive, active, plate, color, inventory, gear, fuel, insure FROM vehicles WHERE id='%1' AND pid='%2'",_vid,_pid];
      
      
      
      
      
      
      
      _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(EQUAL(typeName _queryResult,typeName "")) exitWith {};
      
      
      
      
      _vInfo = _queryResult;
      if(isNil "_vInfo") exitWith {serv_sv_use deleteAt _servIndex;};
      if(EQUAL(count _vInfo,0)) exitWith {serv_sv_use deleteAt _servIndex;};
      
      
      
      
      if(EQUAL(SEL(_vInfo,5),0)) exitWith {
      	serv_sv_use deleteAt _servIndex;
      	[1,format[(localize "STR_Garage_SQLError_Destroyed"),_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit];
      };
      
      
      
      
      if(EQUAL(SEL(_vInfo,6),1)) exitWith {
      	serv_sv_use deleteAt _servIndex;
      	[1,format[(localize "STR_Garage_SQLError_Active"),_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit];
      };
      
      
      
      
      if!(EQUAL(typeName _sp,typeName "")) then {
      	_nearVehicles = nearestObjects[_sp,["Car","Air","Ship"],10];
      } else {
      	_nearVehicles = [];
      };
      
      
      
      
      if(count _nearVehicles > 0) exitWith {
      	serv_sv_use deleteAt _servIndex;
      	[_price,_unit_return] remoteExecCall ["life_fnc_garageRefund",_unit];
      	[1,(localize "STR_Garage_SpawnPointError")] remoteExecCall ["life_fnc_broadcast",_unit];
      };
      
      
      
      
      _query = format["UPDATE vehicles SET active='1' WHERE pid='%1' AND id='%2'",_pid,_vid];
      
      
      
      
      _trunk = [_vInfo select 9] call DB_fnc_mresToArray;
      _gear = [_vInfo select 10] call DB_fnc_mresToArray;
      
      
      
      
      [_query,false] spawn DB_fnc_asyncCall;
      if(typeName _sp == "STRING") then {
      	_vehicle = createVehicle[(_vInfo select 2),[0,0,999],[],0,"NONE"];
      	waitUntil {!isNil "_vehicle" && {!isNull _vehicle}};
      	_vehicle allowDamage false;
      	_hs = nearestObjects[getMarkerPos _sp,["Land_Hospital_side2_F"],50] select 0;
      	_vehicle setPosATL (_hs modelToWorld [-0.4,-4,12.65]);
      	sleep 0.6;
      } else {
      	_vehicle = createVehicle [(_vInfo select 2),_sp,[],0,"NONE"];
      	waitUntil {!isNil "_vehicle" && {!isNull _vehicle}};
      	_vehicle allowDamage false;
      	_vehicle setPos _sp;
      	_vehicle setVectorUp (surfaceNormal _sp);
      	_vehicle setDir _dir;
      };
      _vehicle setFuel (_vInfo select 11);
      _vehicle allowDamage true;
      //Send keys over the network.
      [_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit];
      [_pid,_side,_vehicle,1] call TON_fnc_keyManagement;
      _vehicle lock 2;
      //Reskin the vehicle
      [_vehicle,_vInfo select 8] remoteExecCall ["life_fnc_colorVehicle",_unit];
      _vehicle setVariable["vehicle_info_owners",[[_pid,_name]],true];
      _vehicle setVariable["dbInfo",[(_vInfo select 4),_vInfo select 7,_vInfo select 9]];
      _vehicle setVariable["Trunk",_trunk,true];
      _vehicle disableTIEquipment true; //No Thermals.. They're cheap but addictive.
      
      
      
      
      [_vehicle] call life_fnc_clearVehicleAmmo;
      
      
      
      
      if (count _gear > 0) then {
      	_items = _gear select 0;
      	_mags = _gear select 1;
      	_weapons = _gear select 2;
      	_backpacks = _gear select 3;
      
      
      
      
      	for "_i" from 0 to ((count (_items select 0)) - 1) do {
      		_vehicle addItemCargoGlobal [((_items select 0) select _i), ((_items select 1) select _i)];
      	};
      	for "_i" from 0 to ((count (_mags select 0)) - 1) do {
      		_vehicle addMagazineCargoGlobal [((_mags select 0) select _i), ((_mags select 1) select _i)];
      	};
      	for "_i" from 0 to ((count (_weapons select 0)) - 1) do {
      		_vehicle addWeaponCargoGlobal [((_weapons select 0) select _i), ((_weapons select 1) select _i)];
      	};
      	for "_i" from 0 to ((count (_backpacks select 0)) - 1) do {
      		_vehicle addBackpackCargoGlobal [((_backpacks select 0) select _i), ((_backpacks select 1) select _i)];
      	};
      };
      
      
      
      
      //Sets of animations
      if(EQUAL(SEL(_vInfo,1),"civ") && EQUAL(SEL(_vInfo,2),"B_Heli_Light_01_F") && !(EQUAL(SEL(_vInfo,8),13))) then {
      	[_vehicle,"civ_littlebird",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit];
      };
      
      
      
      
      if(EQUAL(SEL(_vInfo,1),"cop") && (SEL(_vInfo,2)) in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then {
      	[_vehicle,"cop_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit];
      };
      
      
      
      
      if(EQUAL(SEL(_vInfo,1),"med") && EQUAL(SEL(_vInfo,2),"C_Offroad_01_F")) then {
      	[_vehicle,"med_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit];
      };
      if(EQUAAL(SEL(_vInfo select 9) == 1) then {
      [1,"Ihr Fahrzeug ist bereit und Versichert!"] remoteExecCall ["life_fnc_broadcast",_unit];
      }
      else {
      [1,"Ihr Fahrzeug ist bereit!"] remoteExecCall ["life_fnc_broadcast",_unit];
      };
      serv_sv_use deleteAt _servIndex;
      Alles anzeigen


      Wäre Super wenn mir jemand weiterhelfen würde.

      MfG

      d4ccfe34e7e85df1132cf7f0832e56.gif

    • Shinji
      Profi
      Reaktionen
      576
      Trophäen
      10
      Beiträge
      778
      • 4. Juli 2016 um 18:32
      • #17

      Lesen und schauen

      Code
      if(EQUAAL(SEL(_vInfo select 9) == 1) then { <<< da fehlt eine klammer  wie im RPT log steht

      Software Entwickler -
      Präzises Rätselraten, basierend auf unzuverlässigen Daten und fragwürdigem Wissen der Auftraggeber.

    • John_Parker
      Fortgeschrittener
      Reaktionen
      37
      Trophäen
      10
      Beiträge
      338
      • 4. Juli 2016 um 18:34
      • #18
      Zitat von Shinji

      Lesen und schauen

      Code
      if(EQUAAL(SEL(_vInfo select 9) == 1) then { <<< da fehlt eine klammer  wie im RPT log steht

      O.o
      Hab ich übersehen
      So sollte es Richtig sein:

      Code
      if(EQUAAL(SEL(_vInfo select 9) == 1)) then {

      d4ccfe34e7e85df1132cf7f0832e56.gif

    • Shinji
      Profi
      Reaktionen
      576
      Trophäen
      10
      Beiträge
      778
      • 4. Juli 2016 um 18:37
      • #19
      Code
      if(EQUAL(SEL(_vInfo select 9)) == 1) then {

      Wäre richtig

      Software Entwickler -
      Präzises Rätselraten, basierend auf unzuverlässigen Daten und fragwürdigem Wissen der Auftraggeber.

    • John_Parker
      Fortgeschrittener
      Reaktionen
      37
      Trophäen
      10
      Beiträge
      338
      • 4. Juli 2016 um 19:39
      • #20

      jetzt bekomme ich wieder diesen fehler in der RPT:

      Code
      19:07:33 Error in expression <fnc_vehicleAnimate",_unit];
      };
      if(EQUAAL() == 1) then {
      [1,"Ihr Fahrzeug ist ber>
      19:07:33   Error position: <() == 1) then {
      [1,"Ihr Fahrzeug ist ber>
      19:07:33   Error Missing )
      19:07:33 File life_server\Functions\Systems\fn_spawnVehicle.sqf, line 137
      19:07:33 Error in expression <fnc_vehicleAnimate",_unit];
      };
      if(EQUAAL() == 1) then {
      [1,"Ihr Fahrzeug ist ber>
      19:07:33   Error position: <() == 1) then {
      [1,"Ihr Fahrzeug ist ber>
      19:07:33   Error Missing )
      19:07:33 File life_server\Functions\Systems\fn_spawnVehicle.sqf, line 137
      Alles anzeigen


      Hab es so abgeändert wie du mir geschrieben hast @Shinji

      Code
      #include "\life_server\script_macros.hpp"
      /*
      	File: fn_spawnVehicle.sqf
      	Author: Bryan "Tonic" Boardwine
      
      
      
      
      	Description:
      	Sends the query request to the database, if an array is returned then it creates
      	the vehicle if it's not in use or dead.
      */
      private["_vid","_sp","_pid","_query","_sql","_vehicle","_nearVehicles","_name","_side","_tickTime","_dir","_servIndex"];
      _vid = [_this,0,-1,[0]] call BIS_fnc_param;
      _pid = [_this,1,"",[""]] call BIS_fnc_param;
      _sp = [_this,2,[],[[],""]] call BIS_fnc_param;
      _unit = [_this,3,ObjNull,[ObjNull]] call BIS_fnc_param;
      _price = [_this,4,0,[0]] call BIS_fnc_param;
      _dir = [_this,5,0,[0]] call BIS_fnc_param;
      _unit_return = _unit;
      _name = name _unit;
      _side = side _unit;
      _unit = owner _unit;
      
      
      
      
      if(EQUAL(_vid,-1) OR EQUAL(_pid,"")) exitWith {};
      if(_vid in serv_sv_use) exitWith {};
      serv_sv_use pushBack _vid;
      _servIndex = serv_sv_use find _vid;
      
      
      
      
      _query = format["SELECT id, side, classname, type, pid, alive, active, plate, color, inventory, gear, fuel, insure FROM vehicles WHERE id='%1' AND pid='%2'",_vid,_pid];
      
      
      
      
      
      
      
      _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(EQUAL(typeName _queryResult,typeName "")) exitWith {};
      
      
      
      
      _vInfo = _queryResult;
      if(isNil "_vInfo") exitWith {serv_sv_use deleteAt _servIndex;};
      if(EQUAL(count _vInfo,0)) exitWith {serv_sv_use deleteAt _servIndex;};
      
      
      
      
      if(EQUAL(SEL(_vInfo,5),0)) exitWith {
      	serv_sv_use deleteAt _servIndex;
      	[1,format[(localize "STR_Garage_SQLError_Destroyed"),_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit];
      };
      
      
      
      
      if(EQUAL(SEL(_vInfo,6),1)) exitWith {
      	serv_sv_use deleteAt _servIndex;
      	[1,format[(localize "STR_Garage_SQLError_Active"),_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit];
      };
      
      
      
      
      if!(EQUAL(typeName _sp,typeName "")) then {
      	_nearVehicles = nearestObjects[_sp,["Car","Air","Ship"],10];
      } else {
      	_nearVehicles = [];
      };
      
      
      
      
      if(count _nearVehicles > 0) exitWith {
      	serv_sv_use deleteAt _servIndex;
      	[_price,_unit_return] remoteExecCall ["life_fnc_garageRefund",_unit];
      	[1,(localize "STR_Garage_SpawnPointError")] remoteExecCall ["life_fnc_broadcast",_unit];
      };
      
      
      
      
      _query = format["UPDATE vehicles SET active='1' WHERE pid='%1' AND id='%2'",_pid,_vid];
      
      
      
      
      _trunk = [_vInfo select 9] call DB_fnc_mresToArray;
      _gear = [_vInfo select 10] call DB_fnc_mresToArray;
      
      
      
      
      [_query,false] spawn DB_fnc_asyncCall;
      if(typeName _sp == "STRING") then {
      	_vehicle = createVehicle[(_vInfo select 2),[0,0,999],[],0,"NONE"];
      	waitUntil {!isNil "_vehicle" && {!isNull _vehicle}};
      	_vehicle allowDamage false;
      	_hs = nearestObjects[getMarkerPos _sp,["Land_Hospital_side2_F"],50] select 0;
      	_vehicle setPosATL (_hs modelToWorld [-0.4,-4,12.65]);
      	sleep 0.6;
      } else {
      	_vehicle = createVehicle [(_vInfo select 2),_sp,[],0,"NONE"];
      	waitUntil {!isNil "_vehicle" && {!isNull _vehicle}};
      	_vehicle allowDamage false;
      	_vehicle setPos _sp;
      	_vehicle setVectorUp (surfaceNormal _sp);
      	_vehicle setDir _dir;
      };
      _vehicle setFuel (_vInfo select 11);
      _vehicle allowDamage true;
      //Send keys over the network.
      [_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit];
      [_pid,_side,_vehicle,1] call TON_fnc_keyManagement;
      _vehicle lock 2;
      //Reskin the vehicle
      [_vehicle,_vInfo select 8] remoteExecCall ["life_fnc_colorVehicle",_unit];
      _vehicle setVariable["vehicle_info_owners",[[_pid,_name]],true];
      _vehicle setVariable["dbInfo",[(_vInfo select 4),_vInfo select 7,_vInfo select 9]];
      _vehicle setVariable["Trunk",_trunk,true];
      _vehicle disableTIEquipment true; //No Thermals.. They're cheap but addictive.
      
      
      
      
      [_vehicle] call life_fnc_clearVehicleAmmo;
      
      
      
      
      if (count _gear > 0) then {
      	_items = _gear select 0;
      	_mags = _gear select 1;
      	_weapons = _gear select 2;
      	_backpacks = _gear select 3;
      
      
      
      
      	for "_i" from 0 to ((count (_items select 0)) - 1) do {
      		_vehicle addItemCargoGlobal [((_items select 0) select _i), ((_items select 1) select _i)];
      	};
      	for "_i" from 0 to ((count (_mags select 0)) - 1) do {
      		_vehicle addMagazineCargoGlobal [((_mags select 0) select _i), ((_mags select 1) select _i)];
      	};
      	for "_i" from 0 to ((count (_weapons select 0)) - 1) do {
      		_vehicle addWeaponCargoGlobal [((_weapons select 0) select _i), ((_weapons select 1) select _i)];
      	};
      	for "_i" from 0 to ((count (_backpacks select 0)) - 1) do {
      		_vehicle addBackpackCargoGlobal [((_backpacks select 0) select _i), ((_backpacks select 1) select _i)];
      	};
      };
      
      
      
      
      //Sets of animations
      if(EQUAL(SEL(_vInfo,1),"civ") && EQUAL(SEL(_vInfo,2),"B_Heli_Light_01_F") && !(EQUAL(SEL(_vInfo,8),13))) then {
      	[_vehicle,"civ_littlebird",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit];
      };
      
      
      
      
      if(EQUAL(SEL(_vInfo,1),"cop") && (SEL(_vInfo,2)) in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then {
      	[_vehicle,"cop_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit];
      };
      
      
      
      
      if(EQUAL(SEL(_vInfo,1),"med") && EQUAL(SEL(_vInfo,2),"C_Offroad_01_F")) then {
      	[_vehicle,"med_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit];
      };
      if(EQUAAL(SEL(_vInfo select 9)) == 1) then {
      [1,"Ihr Fahrzeug ist bereit und Versichert!"] remoteExecCall ["life_fnc_broadcast",_unit];
      }
      else {
      [1,"Ihr Fahrzeug ist bereit!"] remoteExecCall ["life_fnc_broadcast",_unit];
      };
      serv_sv_use deleteAt _servIndex;
      Alles anzeigen

      d4ccfe34e7e85df1132cf7f0832e56.gif

    Registrieren oder Einloggen

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

    Benutzerkonto erstellen

    Tags

    • versicherung
    • altis life versicherung
    • altis life 4.0 versicherung
    • tanoa life versicherung
    • fahrzeug versicherung
    • altis life fahrzeug versicher
    • arma 3 versicherung
    • altis life versicherungen
    • versicherungen script
    • versicherung script
    • versicherungs script
    • tanoa life versicherung scrip
    • tanoa life versicherungen
    • auto versicherungen

    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. Verhaltensregeln
    3. Datenschutzerklärung
    4. Impressum
    5. Urheberrechts- oder Lizenzverstoß melden
  • Trimax Design coded & layout by Gino Zantarelli 2023-2025©
    Community-Software: WoltLab Suite™