1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Downloads
  4. Galerie
    1. Alben
  5. Toolbox
    1. Passwort Generator
    2. Portchecker
  6. Mitglieder
    1. Mitgliedersuche
    2. Benutzer online
    3. Trophäen
    4. Team
Mo: 30 Juni 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] Umlackierungsshop

      • Altis Life
    • Noldy
    • 9. August 2015 um 05:30
    • Noldy
      Amateur
      Reaktionen
      100
      Trophäen
      11
      Beiträge
      166
      • 9. August 2015 um 05:30
      • #1

      Moin leute,


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


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


      Fangen wir mal an:



      MPMissions


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


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

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

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

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

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

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

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

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

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

      Code
      #include "veh_repaint.hpp"

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

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

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

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

      life_server


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

      Code
      class repaintVehicle {};

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

      Code
      class vehicleRepaint {};

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

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

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

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

      Editor


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

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

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

      Code
      _baseprice = 20000;

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


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




      Viel spaß damit. :thumbup:


      MfG
      Noldy

      Dateien

      spraycan.zip 175,35 kB – 516 Downloads

    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 5. Januar 2017 um 10:26
      • #2

      Moin,

      ich habe das gestern mal getestet und das Umlackieren funktioniert auch wunderbar. Allerdings habe ich jetzt die Herausforderung, dass ich nur die "Standardfarben" auswählen kann. Ich möchte aber abhängig von der Lizenz auch andere Farben bzw. Skins zur Verfügung stellen. Kann mir einer nen Tipp geben wo ich ansetzen muss?

      Gruß,
      moeck

      Signatur? Was ist eine Signatur? Kann man das essen?

      Bitte beachten: Ich gebe keinen Support über private Nachrichten!


      Ganz wichtig: [Leitfaden] Wie frage Ich richtig um Hilfe?

      Nicht zu vergessen [Tutorial/Selbst-Test] Sollte ich einen Life Server eröffnen ?

    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 5. Januar 2017 um 11:17
      • #3

      hat sich geklärt. habe die Stelle gefunden ;)

      Signatur? Was ist eine Signatur? Kann man das essen?

      Bitte beachten: Ich gebe keinen Support über private Nachrichten!


      Ganz wichtig: [Leitfaden] Wie frage Ich richtig um Hilfe?

      Nicht zu vergessen [Tutorial/Selbst-Test] Sollte ich einen Life Server eröffnen ?

    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 6. Januar 2017 um 00:09
      • #4

      Moin nochmal,

      ich habe das Script jetzt ausführlich getestet und es funktioniert auch für Fahrzeuge. Leider habe ich noch keine Möglichkeit gefunden auch Helis und Boote mit einzubinden. Ich habe mittlerweile auch herausgefunden, dass an folgender Zeile liegt.

      C: fn_RepaintVehicle.sqf
      _veh = nearestObject [position player, "LandVehicle"];

      Leider hatte ich bisher noch nicht die richtige Idee wie ich dort auch die anderen Typen einbinde. Kann man das eventuell über lbData lösen?

      Gruß,
      moeck

      Signatur? Was ist eine Signatur? Kann man das essen?

      Bitte beachten: Ich gebe keinen Support über private Nachrichten!


      Ganz wichtig: [Leitfaden] Wie frage Ich richtig um Hilfe?

      Nicht zu vergessen [Tutorial/Selbst-Test] Sollte ich einen Life Server eröffnen ?

      Einmal editiert, zuletzt von moeck (6. Januar 2017 um 09:34)

    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 8. Januar 2017 um 02:42
      • #5

      Moin,

      so ich haben den PaintShop mal komplett überarbeitet, so dass man alle Fahrzeuge neulackieren kann. Den einen oder anderen Bugfix gab es gleich mit dazu ;-). Ich werde das Ganze in den nächsten Tagen mal aufbereiten und hier zur Verfügung stellen sofern Interesse besteht.

      Gruß,
      moeck

      Signatur? Was ist eine Signatur? Kann man das essen?

      Bitte beachten: Ich gebe keinen Support über private Nachrichten!


      Ganz wichtig: [Leitfaden] Wie frage Ich richtig um Hilfe?

      Nicht zu vergessen [Tutorial/Selbst-Test] Sollte ich einen Life Server eröffnen ?

    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 9. Januar 2017 um 16:42
      • #6

      Moin,

      so ich habe mir das TuT mal genauer angeschaut und ein paar kleinere bzw. größere Änderungen vorgenommen. Jetzt ist es möglich nicht nur Fahrzeuge mit einer neuen Farbe (Skins) auszustatten sondern auch Heli, Flugzeuge und Boote. Des Weiteren kann man für jede Fahrzeug(klasse) den Preis festlegen was das umlackieren kostet. Zusätzlich kann man auch per Lizenzen steuern welche Skins/Farben beim Lackierer zur Verfügung verfügung stehen.

      Grundsätzlich unterscheidet sich die Installation nicht vom Orginalpost, bis auf ein oder zwei Kleinigkeiten.

      Gut fangen wir mal an ;)

      MPMission

      1. Geht in den Ordner core und erstellt dort den Ordner repaint
      2. Erstellt nun eine neue sqf namens fn_Repaintcolor.sqf und kopiert diese Datei in eueren repaint Ordner mit folgendem Inhallt:

      C: fn_Repaintcolor.sqf
      #include <macro.h>
      /*
      File: fn_Repaintcolor.sqf
      Author: MooN-Gaming modified by moeck (http://www.lostofparadise.de)
      
      
      
      
      
      
      
      Description: Opens the display to recolor the vehicle
      
      
      
      
      
      
      
      */
      #define Repaint 37457
      private["_index","_veh","_c_arr","_id","_colorcost","_i","_text","_Repaint"];
      if(!isNull (findDisplay 2300)) then {
      _index = lbCurSel 2302;
      lbClear 2303;
      _veh = lbData[2302,_index];
      _id = [];
      _c_arr = [_veh] call life_fnc_vehicleColorCfg;
      switch(playerSide) do {
      	case civilian: {
      		_id pushBack "civ";
      		if (license_civ_rebel) then {_id pushBack "reb"};
      		if (license_civ_rebel2) then {_id pushBack "reb"};
      		if (license_civ_donator1) then {_id pushBack "donator1"};
      		//Hier weitere Lizenzen einfügen falls notwendig
      	}; 
      	case west:{
      		_id pushback "cop";
      		if (license_civ_swat) then {_id pushBack "swat"};
      		if (license_cop_zoll) then {_id pushBack "zoll"};
      	};
      	case independent:{_id pushBack "med";};
      	default {_id pushBack "civ";};
      };
      
      
      
      
      
      
      
      _colorcost = 100;
      for "_i" from 0 to (count _c_arr)-1 do
      {
      	if((_c_arr select _i) select 1 in _id) then
      	{
      		_text = [_veh,_i] call life_fnc_vehicleColorStr;
      		lbAdd[2303,format["%1",_text]];
      		lbSetValue [2303,(lbSize 2303)-1,_i];
      		//lbSetData[2303, [_colorcost] call life_fnc_numberText];
      	};
      };
      lbSetCurSel [2303,0];
      if((lbSize 2303)-1 != -1) then
      {
       ctrlShow[2303,true];
       _Repaint ctrlEnable true;
      }
       else
      {
       ctrlShow[2303,false];
       _Repaint ctrlEnable false;
      };
      
      
      
      
      
      
      
      };
      _haha = typeOf _x;
      _vehicles lbSetData [(lbSize _vehicles)-1,_haha];
      Alles anzeigen


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

      C: fn_RepaintVehicle.sqf
      #include <macro.h>
      /*
      File: fn_RepaintVehicle.sqf
      Author: MooN-Gaming modified by moeck (http://www.lostofparadise.de)
      
      
      
      
      
      
      
      Description: Does the active repaint man....read the title!
      */
      private["_index","_veh","_color","_color_index","_vehicle"];
      if(!isNull (findDisplay 2300)) then {
      
      
      
      
      _vehicle=lbdata [2302,lbcursel 2302];
      _veh = nearestObject [position player, _vehicle];
      _color = lbcursel 2303;
      _color_index = lbValue[2303,_color];
      if ((lbSize 2303)-1 == -1) exitWith {hint format["Du willst ernsthaft ein Fahrzeug ohne Farbe lackieren? Das lassen wir mal lieber!"];};
      closeDialog 0;
      
      
      
      
      
      
      
      //_baseprice = 20000;
      _baseprice = [_vehicle,__GETC__(life_repaint_prices)] call TON_fnc_index;
      if(_baseprice == -1) then {_baseprice = 1000;} else {_baseprice = (__GETC__(life_repaint_prices) select _baseprice) select 1;};
      _vehicleData = _veh getVariable["vehicle_info_owners",[]];
      _vehOwner = (_vehicleData select 0) select 0;
      if(life_cash < _basePrice) exitWith {hint format["Du hast keine %1$ um den Lackierer zu bezahlen.",_baseprice];};
      
      
      
      
      
      
      
      if(isNil {_vehicleData}) exitWith {hint "Es gibt keine Infos zu diesem Fahrzeug, es ist entweder gemietet oder gecheated."};
      if ((getPlayerUID player) != _vehOwner) exitWith {hint "Du bist nicht der Besitzer des Fahrzeugs das lackiert werden soll."};
      
      
      
      
      
      
      
      life_action_inUse = true;
      
      
      
      
      
      
      
      //[player,"spraycan"] call life_fnc_globalSound;
      
      
      
      
      
      
      
      _displayName = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "displayName");
      _upp = format["Lackiere %1",_displayName];
      //Setup our progress bar.
      disableSerialization;
      5 cutRsc ["life_progress","PLAIN"];
      _ui = uiNameSpace getVariable "life_progress";
      _progress = _ui displayCtrl 38201;
      _pgText = _ui displayCtrl 38202;
      _pgText ctrlSetText format["%2 (1%1)...","%",_upp];
      _progress progressSetPosition 0.01;
      _cP = 0.01;
      
      
      
      
      
      
      
      while{true} do
      {
      if(animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then {
      [[player,"AinvPknlMstpSnonWnonDnon_medic_1"],"life_fnc_animSync",true,false] spawn life_fnc_MP;
      player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1";
      }; 
      sleep 0.29;
      
      
      
      
      
      
      
      _cP = _cP + 0.01;
      _progress progressSetPosition _cP;
      _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp]; 
      if(_cP >= 1) exitWith {};
      if(!alive player) exitWith {};
      if(player != vehicle player) exitWith {};
      if(life_interrupted) exitWith {};
      };
      
      
      
      
      
      
      
      life_action_inUse = false;
      5 cutText ["","PLAIN"];
      player playActionNow "stop";
      if(life_interrupted) exitWith {life_interrupted = false; titleText["Abgebrochen!","PLAIN"]; life_action_inUse = false;};
      if(player != vehicle player) exitWith {titleText["Du musst aus dem Fahrzeug aussteigen, um es lackieren zu können!","PLAIN"];};
      
      
      
      
      
      
      
      life_cash = life_cash - _basePrice;
      //Send toDB
      [[_veh,_color_index],"TON_fnc_vehicleRepaint",false,false] spawn life_fnc_MP;
      
      
      
      
      
      
      
      //Color vehicle locally
      [_veh,_color_index] call life_fnc_colorVehicle;
      
      
      
      
      
      
      
      [] call SOCK_fnc_updateRequest; //Sync silently because it's obviously silently..
      
      
      
      
      
      
      
      hint format["Dein Fahrzeug hat jetzt einen neuen Lack. Bitte parke das Fahrzeug zum trockenen nochmal mal ein und wieder aus! Der neue Lack wird erst nach dem Ausparken für alle sichtbar."];
      
      
      
      
      
      
      
      };
      Alles anzeigen

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

      Code: fn_RepaintMenu.sqf
      #include <macro.h>
      /*
      File: fn_RepaintMenu.sqf
      Author: MooN-Gaming modified by moeck (http://www.lostofparadise.de)
      
      
      
      
      
      
      
      Description: What could it do bro?!
      
      
      
      
      
      
      
      */
      
      
      
      
      
      
      
      private["_display","_vehicles","_objects","_color","_haha","_pic","_text","_owners","_price"];
      createDialog "Life_vehicle_repaint";
      disableSerialization;
      if(!isNull (findDisplay 2300)) then {
      _display = findDisplay 2300;
      _vehicles = _display displayCtrl 2302;
      
      
      
      
      
      
      
      _objects = nearestObjects[getPos (_this select 0),["Car","Air","Ship"],20];
      //_objects = nearestObject [position player, "LandVehicle"];
      _xx = _objects select 0;
      
      
      
      
      
      
      
      //List vehicles
      {
       if(vehicle player != _x) then {
       _color = [(typeOf _xx),(_xx getVariable "Life_VEH_color")] call life_fnc_vehicleColorStr;
       _pic = getText(configFile >> "CfgVehicles" >> typeOf _x >> "picture"); 
       _text = format["(%1)",_color];
       _haha = typeOf _x;
       _price = [_haha,__GETC__(life_repaint_prices)] call TON_fnc_index;
       if(_price == -1) then {_price = 1000;} else {_price = (__GETC__(life_repaint_prices) select _price) select 1;};
      	if(_text == "()") then
      	{
      		_text = "";
      	}; 
       _vehicles lbAdd format ["%1 || %2 || %3$", getText(configFile >> "cfgVehicles" >> typeOf _x >> "DisplayName"), _text,_price]; 
       _vehicles lbSetPicture [(lbSize _vehicles)-1,_pic]; 
       _vehicles lbSetData [(lbSize _vehicles)-1,_haha];
       }; 
       } foreach _objects;
      };
      Alles anzeigen

      5. Erstellt oder kopiert die Datei macro.h in den repaint Ordner.

      Code: macro.h
      #define __CONST__(var1,var2) var1 = compileFinal (if(typeName var2 == "STRING") then {var2} else {str(var2)}) //Quick macro for creating a constant variable
      #define __GETC__(var) (call var) //Quick clean macro for getting a value of a constant / compileFinal variable. i.e if(__GETC__(numberone) == 1) then {}
      #define __SUB__(var1,var2) var1 = var1 - var2
      
      
      
      
      //Control Macros
      #define getControl(disp,ctrl) ((findDisplay ##disp) displayCtrl ##ctrl)
      #define getSelData(ctrl) (lbData[##ctrl,(lbCurSel ##ctrl)])
      
      
      
      
      //Player based quick macros
      #define grpPlayer group player
      #define steamid getPlayerUID player
      Alles anzeigen

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

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

      7. Ersetzt eure core/vehicle/fn_colorVehicle.sqf durch folgenden Code

      C: fn_colorVehicle.sqf
      /*
      	File: fn_colorVehicle.sqf
      	Author: Bryan "Tonic" Boardwine modified by moeck (www.lostofparadise.de)
      	Description:
      	Reskins the vehicle
      */
      private["_vehicle","_index","_texture","_texture2","_texture3","_texture4"];
      _vehicle = [_this,0,Objnull,[Objnull]] call BIS_fnc_param;
      _index = [_this,1,-1,[0]] call BIS_fnc_param;
      if(isNull _vehicle OR !alive _vehicle OR _index == -1) exitWith {};
      //Does the vehicle already have random styles? Halt till it's set.
      if(local _vehicle) then {
      	switch (typeOf _vehicle) do
      	{
      		case "C_Offroad_01_F": {[[_vehicle,"color",3,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
      		case "C_Hatchback_01_F": {[[_vehicle,"color",1,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
      		case "C_Hatchback_01_sport_F": {[[_vehicle,"color",1,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
      		case "C_SUV_01_F": {[[_vehicle,"color",1,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
      		case "C_Van_01_box_F": {[[_vehicle,"color",1,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
      		case "C_Van_01_transport_F": {[[_vehicle,"color",1,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
      	};
      };
      //Fetch texture from our present array.
      _texture = [(typeOf _vehicle)] call life_fnc_vehicleColorCfg;
      if(isNil "_texture") exitWith {};
      if(count _texture == 0) exitWith {};
      if(count (_texture select _index) > 2) then {_texture2 = (_texture select _index) select 2;};
      if(count (_texture select _index) > 3) then {_texture3 = (_texture select _index) select 3;};
      if(count (_texture select _index) > 4) then {_texture4 = (_texture select _index) select 4;};
      _texture = _texture select _index;
      if(typeName _texture == "ARRAY") then { _texture = _texture select 0;};
      //Local to us? Set it's color.
      if(local _vehicle) then
      {
      	_vehicle setVariable["Life_VEH_color",_index,true];
      };
      waitUntil{!isNil {_vehicle getVariable "Life_VEH_color"}};
      _vehicle setObjectTexture[0,_texture];
      _vehicle setObjectTextureGlobal [0,_texture];
      if(!isNil "_texture2") then
      {
      	_vehicle setObjectTexture[1,_texture2];
      	_vehicle setObjectTextureGlobal [1,_texture2];
      };
      if(!isNil "_texture3") then
      {
      	_vehicle setObjectTexture[2,_texture3];
      	_vehicle setObjectTextureGlobal [2,_texture3];
      };
      if(!isNil "_texture4") then
      {
      	_vehicle setObjectTexture[3,_texture4];
      	_vehicle setObjectTextureGlobal [3,_texture4];
      };
      if(typeOf _vehicle == "C_Offroad_01_F") then
      {
      	if(_index < 5) then
      	{
      		_vehicle setObjectTexture[1,_texture];
      	};
      };
      Alles anzeigen


      8. Öffnet eure core/configuration.sqf und fügt unter den Ausparkpreisen folgenden Zeilen ein.

      C: configuration.sqf
      life_repaint_prices =
      [
      	["B_QuadBike_01_F",1950],
      	["C_Hatchback_01_F",2400],
      	["C_Offroad_01_F",3000],
      	["B_G_Offroad_01_F",3500],
      	["C_SUV_01_F",5250],
      	["C_Van_01_transport_F",6000],
      	["C_Hatchback_01_sport_F",60000],
      	["C_Van_01_fuel_F",10000],
      	["I_Heli_Transport_02_F",405000],
      	["O_Heli_Transport_04_medevac_F",50000], //Medic
      	["O_Heli_Transport_04_F",75000], //ADAC
      	["O_Heli_Transport_04_bench_F",600000], // Rebellen
      	["O_Heli_Transport_04_fuel_F",570000], // Tanker
      	["O_Heli_Transport_04_box_F",540000], // Fracht
      	["B_Heli_Transport_03_unarmed_F",502500], //CIV Chainok
      	["B_Heli_Transport_03_F",75000], // Cop Chainok
      	["C_Kart_01_Blu_F",3750],
      	["C_Kart_01_Fuel_F",3750],
      	["C_Kart_01_Red_F",3750],
      	["C_Kart_01_Vrana_F",3750],
      	["C_Kart_01_F",3750],
      	["C_Van_01_box_F",9000],
      	["I_Truck_02_transport_F",26250],
      	["I_Truck_02_covered_F",30000],
      	["B_Truck_01_transport_F",25650],
      	["B_Truck_01_covered_F",52500],
      	["O_Truck_03_repair_F",540000],
      	["C_Offroad_02_unarmed_F",4500],
      	["B_T_LSV_01_unarmed_F",15000],
      	["O_T_LSV_02_unarmed_F",16500],
      	["C_Plane_Civil_01_F",300000],
      	["B_T_VTOL_01_infantry_F",750000],
      	["B_T_VTOL_01_vehicle_F",800000],
      	["O_T_VTOL_02_infantry_F",900000],
      	["I_C_Boat_Transport_02_F",22500],
      	["C_Scoooter_Transport_01_F",7500],
      	["O_Truck_03_device_F",999999],
      	["O_Plane_CAS_02_F",999999],
      	["O_Truck_03_ammo_F",999999],
      	["B_Truck_01_box_F",210000],
      	["O_MRAP_02_F",630000],
      	["B_Heli_Light_01_F",90000],
      	["C_Heli_Light_01_civil_F",90000],
      	["B_MRAP_01_hmg_F",10000],
      	["O_Heli_Light_02_unarmed_F",225000],
      	["C_Rubberboat",675],
      	["C_Boat_Civil_01_F",22500],
      	["B_Boat_Transport_01_F",450],
      	["C_Boat_Civil_01_police_F",3500],
      	["B_Boat_Armed_01_minigun_F",16500],
      	["B_SDV_01_F",25000],
      	["B_Truck_01_fuel_F",550000],
      	["B_Truck_01_ammo_F",225000],
      	["B_Truck_01_medical_F",30000],
      	["O_Truck_03_fuel_F",300000],
      	["O_Truck_03_transport_F",525000],
      	["I_Truck_02_fuel_F",28500],
      	["I_MRAP_03_F",999999],
      	["I_Heli_light_03_unarmed_F",30000],
      	["B_Heli_Transport_01_camo_F",10000],
      	["B_Heli_Transport_01_F",999999],
      	["O_Truck_03_covered_F",999999],
      	["B_MRAP_01_F",999999]
      ];
      __CONST__(life_repaint_prices,life_repaint_prices);
      Alles anzeigen

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

      Code
      #include "veh_repaint.hpp"

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


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

      11. Wer möchte kann noch Punkt 8 aus dem Ursprungstut übernehmen. Ich habe den Sound weggelassen.

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

      Code
      class repaintVehicle {};

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


      Code
      class vehicleRepaint {};

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


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

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

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

      Editor


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

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


      So damit hätten wir es auch geschafft. Ich habe Euch mal die Dateien angehängt. Ich hoffe ihr könnt damit was anfangen. :thumbup:

      Gruß,
      moeck

      Dateien

      Repaint.zip 9,06 kB – 379 Downloads

      Signatur? Was ist eine Signatur? Kann man das essen?

      Bitte beachten: Ich gebe keinen Support über private Nachrichten!


      Ganz wichtig: [Leitfaden] Wie frage Ich richtig um Hilfe?

      Nicht zu vergessen [Tutorial/Selbst-Test] Sollte ich einen Life Server eröffnen ?

      Einmal editiert, zuletzt von moeck (10. Januar 2017 um 14:43) aus folgendem Grund: Update fn_colorVehicle.sqf, da Taru Box, Blackfish und Xian aus 4 Texturen besteht.

    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 10. Januar 2017 um 14:51
      • #7

      Update Punkt 7 MPMission. Beim Testen mit Taru, Xian und Blackfish habe ich festgestellt, dass die fn_colorVehicle.sqf nur mit 3 Texturen umgehen kann. Daher habe ich Funktion mal erweitert, dass man die Fahrzeuge wieder komplett skinnen kann.

      Signatur? Was ist eine Signatur? Kann man das essen?

      Bitte beachten: Ich gebe keinen Support über private Nachrichten!


      Ganz wichtig: [Leitfaden] Wie frage Ich richtig um Hilfe?

      Nicht zu vergessen [Tutorial/Selbst-Test] Sollte ich einen Life Server eröffnen ?

    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 11. Mai 2017 um 08:12
      • #8

      Moin zusammen,

      ich hatte mal wieder etwas Zeit und habe für alle, die die 3.1.4.8 noch nutzen an der Funktion fn_colorVehicle.sqf ein paar Änderungen vorgenommen, damit man auch Fahrzeuge mit beliebig vielen Skin nutzen kann.

      C: fn_colorVehicle.sqf
      /*
          File: fn_colorVehicle.sqf
          Author: Bryan "Tonic" Boardwine modified by moeck (LoP)
          
          Description:
          Reskins the vehicle
      */
      private["_vehicle","_index","_texture","_textures"];
      _vehicle = [_this,0,Objnull,[Objnull]] call BIS_fnc_param;
      _index = [_this,1,-1,[0]] call BIS_fnc_param;
      if(isNull _vehicle OR !alive _vehicle OR _index == -1) exitWith {};
      //Does the vehicle already have random styles? Halt till it's set.
      
      if(local _vehicle) then {
          switch (typeOf _vehicle) do
          {
              case "C_Offroad_01_F": {[[_vehicle,"color",3,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
              case "C_Hatchback_01_F": {[[_vehicle,"color",1,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
              case "C_Hatchback_01_sport_F": {[[_vehicle,"color",1,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
              case "C_SUV_01_F": {[[_vehicle,"color",1,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
              case "C_Van_01_box_F": {[[_vehicle,"color",1,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
              case "C_Van_01_transport_F": {[[_vehicle,"color",1,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
          };
      };
      
      //Fetch texture from our present array.
      _textures = [(typeOf _vehicle)] call life_fnc_vehicleColorCfg;
      _texture=(_textures select _index);
      if(isNil "_texture") exitWith {};
      if(count _texture == 0) exitWith {};
      {
          if (_forEachIndex == 0) then {_vehicle setObjectTextureGlobal [_forEachIndex,_x];}
          else {
              if (_forEachIndex !=1) then {_vehicle setObjectTextureGlobal [_forEachIndex-1,_x];}
          };
      } forEach _texture;
      Alles anzeigen

      Gruß,

      moeck

      Signatur? Was ist eine Signatur? Kann man das essen?

      Bitte beachten: Ich gebe keinen Support über private Nachrichten!


      Ganz wichtig: [Leitfaden] Wie frage Ich richtig um Hilfe?

      Nicht zu vergessen [Tutorial/Selbst-Test] Sollte ich einen Life Server eröffnen ?

    • TW_Sebastian
      Profi
      Reaktionen
      241
      Trophäen
      9
      Beiträge
      1.009
      Dateien
      2
      Bilder
      26
      • 11. Mai 2017 um 14:28
      • #9

      Geht das jetzt mit deiner Version moeck auch füür die 4.x Versionen und wäre net wen du dein TUT als eigenen beitrag oder so machen kannst damit man es besser finden kann :)

      _____________________________________________________

      ☎ Kontaktdaten ☎

      Team-Leitung - Deutschland Life

      Discord: https://discord.gg/EnPVuXWfp2

      _____________________________________________________

    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 11. Mai 2017 um 14:39
      • #10

      TW_Sebastian eröffne mal einen Thread im Spieler helfen Spieler und poste dort die colorVehicle. Übrigens hier [TUTORIAL] Erweiterung colorVehicle auf eine beliebige Anzahl von Skindateien gibt es das auch nochmal eigenständig.

      Signatur? Was ist eine Signatur? Kann man das essen?

      Bitte beachten: Ich gebe keinen Support über private Nachrichten!


      Ganz wichtig: [Leitfaden] Wie frage Ich richtig um Hilfe?

      Nicht zu vergessen [Tutorial/Selbst-Test] Sollte ich einen Life Server eröffnen ?

    • TW_Sebastian
      Profi
      Reaktionen
      241
      Trophäen
      9
      Beiträge
      1.009
      Dateien
      2
      Bilder
      26
      • 11. Mai 2017 um 19:08
      • #11
      Zitat von moeck

      TW_Sebastian eröffne mal einen Thread im Spieler helfen Spieler und poste dort die colorVehicle. Übrigens hier [TUTORIAL] Erweiterung colorVehicle auf eine beliebige Anzahl von Skindateien gibt es das auch nochmal eigenständig.

      Ich wollte doch nur wissen ob sie in der 4.4 Geht warum deswegen ein extra Thread?

      _____________________________________________________

      ☎ Kontaktdaten ☎

      Team-Leitung - Deutschland Life

      Discord: https://discord.gg/EnPVuXWfp2

      _____________________________________________________

    • Hannkok
      Schüler
      Reaktionen
      18
      Trophäen
      11
      Beiträge
      146
      • 10. Dezember 2019 um 12:57
      • #12
      Zitat von moeck

      Moin,

      so ich habe mir das TuT mal genauer angeschaut und ein paar kleinere bzw. größere Änderungen vorgenommen. Jetzt ist es möglich nicht nur Fahrzeuge mit einer neuen Farbe (Skins) auszustatten sondern auch Heli, Flugzeuge und Boote. Des Weiteren kann man für jede Fahrzeug(klasse) den Preis festlegen was das umlackieren kostet. Zusätzlich kann man auch per Lizenzen steuern welche Skins/Farben beim Lackierer zur Verfügung verfügung stehen.

      Grundsätzlich unterscheidet sich die Installation nicht vom Orginalpost, bis auf ein oder zwei Kleinigkeiten.

      Gut fangen wir mal an ;)

      MPMission

      1. Geht in den Ordner core und erstellt dort den Ordner repaint
      2. Erstellt nun eine neue sqf namens fn_Repaintcolor.sqf und kopiert diese Datei in eueren repaint Ordner mit folgendem Inhallt:

      C: fn_Repaintcolor.sqf
      #include <macro.h>
      /*
      File: fn_Repaintcolor.sqf
      Author: MooN-Gaming modified by moeck (http://www.lostofparadise.de)
      
      
      
      
      
      
      
      Description: Opens the display to recolor the vehicle
      
      
      
      
      
      
      
      */
      #define Repaint 37457
      private["_index","_veh","_c_arr","_id","_colorcost","_i","_text","_Repaint"];
      if(!isNull (findDisplay 2300)) then {
      _index = lbCurSel 2302;
      lbClear 2303;
      _veh = lbData[2302,_index];
      _id = [];
      _c_arr = [_veh] call life_fnc_vehicleColorCfg;
      switch(playerSide) do {
      	case civilian: {
      		_id pushBack "civ";
      		if (license_civ_rebel) then {_id pushBack "reb"};
      		if (license_civ_rebel2) then {_id pushBack "reb"};
      		if (license_civ_donator1) then {_id pushBack "donator1"};
      		//Hier weitere Lizenzen einfügen falls notwendig
      	}; 
      	case west:{
      		_id pushback "cop";
      		if (license_civ_swat) then {_id pushBack "swat"};
      		if (license_cop_zoll) then {_id pushBack "zoll"};
      	};
      	case independent:{_id pushBack "med";};
      	default {_id pushBack "civ";};
      };
      
      
      
      
      
      
      
      _colorcost = 100;
      for "_i" from 0 to (count _c_arr)-1 do
      {
      	if((_c_arr select _i) select 1 in _id) then
      	{
      		_text = [_veh,_i] call life_fnc_vehicleColorStr;
      		lbAdd[2303,format["%1",_text]];
      		lbSetValue [2303,(lbSize 2303)-1,_i];
      		//lbSetData[2303, [_colorcost] call life_fnc_numberText];
      	};
      };
      lbSetCurSel [2303,0];
      if((lbSize 2303)-1 != -1) then
      {
       ctrlShow[2303,true];
       _Repaint ctrlEnable true;
      }
       else
      {
       ctrlShow[2303,false];
       _Repaint ctrlEnable false;
      };
      
      
      
      
      
      
      
      };
      _haha = typeOf _x;
      _vehicles lbSetData [(lbSize _vehicles)-1,_haha];
      Alles anzeigen


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

      C: fn_RepaintVehicle.sqf
      #include <macro.h>
      /*
      File: fn_RepaintVehicle.sqf
      Author: MooN-Gaming modified by moeck (http://www.lostofparadise.de)
      
      
      
      
      
      
      
      Description: Does the active repaint man....read the title!
      */
      private["_index","_veh","_color","_color_index","_vehicle"];
      if(!isNull (findDisplay 2300)) then {
      
      
      
      
      _vehicle=lbdata [2302,lbcursel 2302];
      _veh = nearestObject [position player, _vehicle];
      _color = lbcursel 2303;
      _color_index = lbValue[2303,_color];
      if ((lbSize 2303)-1 == -1) exitWith {hint format["Du willst ernsthaft ein Fahrzeug ohne Farbe lackieren? Das lassen wir mal lieber!"];};
      closeDialog 0;
      
      
      
      
      
      
      
      //_baseprice = 20000;
      _baseprice = [_vehicle,__GETC__(life_repaint_prices)] call TON_fnc_index;
      if(_baseprice == -1) then {_baseprice = 1000;} else {_baseprice = (__GETC__(life_repaint_prices) select _baseprice) select 1;};
      _vehicleData = _veh getVariable["vehicle_info_owners",[]];
      _vehOwner = (_vehicleData select 0) select 0;
      if(life_cash < _basePrice) exitWith {hint format["Du hast keine %1$ um den Lackierer zu bezahlen.",_baseprice];};
      
      
      
      
      
      
      
      if(isNil {_vehicleData}) exitWith {hint "Es gibt keine Infos zu diesem Fahrzeug, es ist entweder gemietet oder gecheated."};
      if ((getPlayerUID player) != _vehOwner) exitWith {hint "Du bist nicht der Besitzer des Fahrzeugs das lackiert werden soll."};
      
      
      
      
      
      
      
      life_action_inUse = true;
      
      
      
      
      
      
      
      //[player,"spraycan"] call life_fnc_globalSound;
      
      
      
      
      
      
      
      _displayName = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "displayName");
      _upp = format["Lackiere %1",_displayName];
      //Setup our progress bar.
      disableSerialization;
      5 cutRsc ["life_progress","PLAIN"];
      _ui = uiNameSpace getVariable "life_progress";
      _progress = _ui displayCtrl 38201;
      _pgText = _ui displayCtrl 38202;
      _pgText ctrlSetText format["%2 (1%1)...","%",_upp];
      _progress progressSetPosition 0.01;
      _cP = 0.01;
      
      
      
      
      
      
      
      while{true} do
      {
      if(animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then {
      [[player,"AinvPknlMstpSnonWnonDnon_medic_1"],"life_fnc_animSync",true,false] spawn life_fnc_MP;
      player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1";
      }; 
      sleep 0.29;
      
      
      
      
      
      
      
      _cP = _cP + 0.01;
      _progress progressSetPosition _cP;
      _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp]; 
      if(_cP >= 1) exitWith {};
      if(!alive player) exitWith {};
      if(player != vehicle player) exitWith {};
      if(life_interrupted) exitWith {};
      };
      
      
      
      
      
      
      
      life_action_inUse = false;
      5 cutText ["","PLAIN"];
      player playActionNow "stop";
      if(life_interrupted) exitWith {life_interrupted = false; titleText["Abgebrochen!","PLAIN"]; life_action_inUse = false;};
      if(player != vehicle player) exitWith {titleText["Du musst aus dem Fahrzeug aussteigen, um es lackieren zu können!","PLAIN"];};
      
      
      
      
      
      
      
      life_cash = life_cash - _basePrice;
      //Send toDB
      [[_veh,_color_index],"TON_fnc_vehicleRepaint",false,false] spawn life_fnc_MP;
      
      
      
      
      
      
      
      //Color vehicle locally
      [_veh,_color_index] call life_fnc_colorVehicle;
      
      
      
      
      
      
      
      [] call SOCK_fnc_updateRequest; //Sync silently because it's obviously silently..
      
      
      
      
      
      
      
      hint format["Dein Fahrzeug hat jetzt einen neuen Lack. Bitte parke das Fahrzeug zum trockenen nochmal mal ein und wieder aus! Der neue Lack wird erst nach dem Ausparken für alle sichtbar."];
      
      
      
      
      
      
      
      };
      Alles anzeigen

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

      Code: fn_RepaintMenu.sqf
      #include <macro.h>
      /*
      File: fn_RepaintMenu.sqf
      Author: MooN-Gaming modified by moeck (http://www.lostofparadise.de)
      
      
      
      
      
      
      
      Description: What could it do bro?!
      
      
      
      
      
      
      
      */
      
      
      
      
      
      
      
      private["_display","_vehicles","_objects","_color","_haha","_pic","_text","_owners","_price"];
      createDialog "Life_vehicle_repaint";
      disableSerialization;
      if(!isNull (findDisplay 2300)) then {
      _display = findDisplay 2300;
      _vehicles = _display displayCtrl 2302;
      
      
      
      
      
      
      
      _objects = nearestObjects[getPos (_this select 0),["Car","Air","Ship"],20];
      //_objects = nearestObject [position player, "LandVehicle"];
      _xx = _objects select 0;
      
      
      
      
      
      
      
      //List vehicles
      {
       if(vehicle player != _x) then {
       _color = [(typeOf _xx),(_xx getVariable "Life_VEH_color")] call life_fnc_vehicleColorStr;
       _pic = getText(configFile >> "CfgVehicles" >> typeOf _x >> "picture"); 
       _text = format["(%1)",_color];
       _haha = typeOf _x;
       _price = [_haha,__GETC__(life_repaint_prices)] call TON_fnc_index;
       if(_price == -1) then {_price = 1000;} else {_price = (__GETC__(life_repaint_prices) select _price) select 1;};
      	if(_text == "()") then
      	{
      		_text = "";
      	}; 
       _vehicles lbAdd format ["%1 || %2 || %3$", getText(configFile >> "cfgVehicles" >> typeOf _x >> "DisplayName"), _text,_price]; 
       _vehicles lbSetPicture [(lbSize _vehicles)-1,_pic]; 
       _vehicles lbSetData [(lbSize _vehicles)-1,_haha];
       }; 
       } foreach _objects;
      };
      Alles anzeigen

      5. Erstellt oder kopiert die Datei macro.h in den repaint Ordner.

      Code: macro.h
      #define __CONST__(var1,var2) var1 = compileFinal (if(typeName var2 == "STRING") then {var2} else {str(var2)}) //Quick macro for creating a constant variable
      #define __GETC__(var) (call var) //Quick clean macro for getting a value of a constant / compileFinal variable. i.e if(__GETC__(numberone) == 1) then {}
      #define __SUB__(var1,var2) var1 = var1 - var2
      
      
      
      
      //Control Macros
      #define getControl(disp,ctrl) ((findDisplay ##disp) displayCtrl ##ctrl)
      #define getSelData(ctrl) (lbData[##ctrl,(lbCurSel ##ctrl)])
      
      
      
      
      //Player based quick macros
      #define grpPlayer group player
      #define steamid getPlayerUID player
      Alles anzeigen

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

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

      7. Ersetzt eure core/vehicle/fn_colorVehicle.sqf durch folgenden Code

      C: fn_colorVehicle.sqf
      /*
      	File: fn_colorVehicle.sqf
      	Author: Bryan "Tonic" Boardwine modified by moeck (www.lostofparadise.de)
      	Description:
      	Reskins the vehicle
      */
      private["_vehicle","_index","_texture","_texture2","_texture3","_texture4"];
      _vehicle = [_this,0,Objnull,[Objnull]] call BIS_fnc_param;
      _index = [_this,1,-1,[0]] call BIS_fnc_param;
      if(isNull _vehicle OR !alive _vehicle OR _index == -1) exitWith {};
      //Does the vehicle already have random styles? Halt till it's set.
      if(local _vehicle) then {
      	switch (typeOf _vehicle) do
      	{
      		case "C_Offroad_01_F": {[[_vehicle,"color",3,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
      		case "C_Hatchback_01_F": {[[_vehicle,"color",1,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
      		case "C_Hatchback_01_sport_F": {[[_vehicle,"color",1,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
      		case "C_SUV_01_F": {[[_vehicle,"color",1,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
      		case "C_Van_01_box_F": {[[_vehicle,"color",1,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
      		case "C_Van_01_transport_F": {[[_vehicle,"color",1,true],"TON_fnc_setObjVar",false,false] spawn life_fnc_MP;};
      	};
      };
      //Fetch texture from our present array.
      _texture = [(typeOf _vehicle)] call life_fnc_vehicleColorCfg;
      if(isNil "_texture") exitWith {};
      if(count _texture == 0) exitWith {};
      if(count (_texture select _index) > 2) then {_texture2 = (_texture select _index) select 2;};
      if(count (_texture select _index) > 3) then {_texture3 = (_texture select _index) select 3;};
      if(count (_texture select _index) > 4) then {_texture4 = (_texture select _index) select 4;};
      _texture = _texture select _index;
      if(typeName _texture == "ARRAY") then { _texture = _texture select 0;};
      //Local to us? Set it's color.
      if(local _vehicle) then
      {
      	_vehicle setVariable["Life_VEH_color",_index,true];
      };
      waitUntil{!isNil {_vehicle getVariable "Life_VEH_color"}};
      _vehicle setObjectTexture[0,_texture];
      _vehicle setObjectTextureGlobal [0,_texture];
      if(!isNil "_texture2") then
      {
      	_vehicle setObjectTexture[1,_texture2];
      	_vehicle setObjectTextureGlobal [1,_texture2];
      };
      if(!isNil "_texture3") then
      {
      	_vehicle setObjectTexture[2,_texture3];
      	_vehicle setObjectTextureGlobal [2,_texture3];
      };
      if(!isNil "_texture4") then
      {
      	_vehicle setObjectTexture[3,_texture4];
      	_vehicle setObjectTextureGlobal [3,_texture4];
      };
      if(typeOf _vehicle == "C_Offroad_01_F") then
      {
      	if(_index < 5) then
      	{
      		_vehicle setObjectTexture[1,_texture];
      	};
      };
      Alles anzeigen


      8. Öffnet eure core/configuration.sqf und fügt unter den Ausparkpreisen folgenden Zeilen ein.

      C: configuration.sqf
      life_repaint_prices =
      [
      	["B_QuadBike_01_F",1950],
      	["C_Hatchback_01_F",2400],
      	["C_Offroad_01_F",3000],
      	["B_G_Offroad_01_F",3500],
      	["C_SUV_01_F",5250],
      	["C_Van_01_transport_F",6000],
      	["C_Hatchback_01_sport_F",60000],
      	["C_Van_01_fuel_F",10000],
      	["I_Heli_Transport_02_F",405000],
      	["O_Heli_Transport_04_medevac_F",50000], //Medic
      	["O_Heli_Transport_04_F",75000], //ADAC
      	["O_Heli_Transport_04_bench_F",600000], // Rebellen
      	["O_Heli_Transport_04_fuel_F",570000], // Tanker
      	["O_Heli_Transport_04_box_F",540000], // Fracht
      	["B_Heli_Transport_03_unarmed_F",502500], //CIV Chainok
      	["B_Heli_Transport_03_F",75000], // Cop Chainok
      	["C_Kart_01_Blu_F",3750],
      	["C_Kart_01_Fuel_F",3750],
      	["C_Kart_01_Red_F",3750],
      	["C_Kart_01_Vrana_F",3750],
      	["C_Kart_01_F",3750],
      	["C_Van_01_box_F",9000],
      	["I_Truck_02_transport_F",26250],
      	["I_Truck_02_covered_F",30000],
      	["B_Truck_01_transport_F",25650],
      	["B_Truck_01_covered_F",52500],
      	["O_Truck_03_repair_F",540000],
      	["C_Offroad_02_unarmed_F",4500],
      	["B_T_LSV_01_unarmed_F",15000],
      	["O_T_LSV_02_unarmed_F",16500],
      	["C_Plane_Civil_01_F",300000],
      	["B_T_VTOL_01_infantry_F",750000],
      	["B_T_VTOL_01_vehicle_F",800000],
      	["O_T_VTOL_02_infantry_F",900000],
      	["I_C_Boat_Transport_02_F",22500],
      	["C_Scoooter_Transport_01_F",7500],
      	["O_Truck_03_device_F",999999],
      	["O_Plane_CAS_02_F",999999],
      	["O_Truck_03_ammo_F",999999],
      	["B_Truck_01_box_F",210000],
      	["O_MRAP_02_F",630000],
      	["B_Heli_Light_01_F",90000],
      	["C_Heli_Light_01_civil_F",90000],
      	["B_MRAP_01_hmg_F",10000],
      	["O_Heli_Light_02_unarmed_F",225000],
      	["C_Rubberboat",675],
      	["C_Boat_Civil_01_F",22500],
      	["B_Boat_Transport_01_F",450],
      	["C_Boat_Civil_01_police_F",3500],
      	["B_Boat_Armed_01_minigun_F",16500],
      	["B_SDV_01_F",25000],
      	["B_Truck_01_fuel_F",550000],
      	["B_Truck_01_ammo_F",225000],
      	["B_Truck_01_medical_F",30000],
      	["O_Truck_03_fuel_F",300000],
      	["O_Truck_03_transport_F",525000],
      	["I_Truck_02_fuel_F",28500],
      	["I_MRAP_03_F",999999],
      	["I_Heli_light_03_unarmed_F",30000],
      	["B_Heli_Transport_01_camo_F",10000],
      	["B_Heli_Transport_01_F",999999],
      	["O_Truck_03_covered_F",999999],
      	["B_MRAP_01_F",999999]
      ];
      __CONST__(life_repaint_prices,life_repaint_prices);
      Alles anzeigen

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

      Code
      #include "veh_repaint.hpp"

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


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

      11. Wer möchte kann noch Punkt 8 aus dem Ursprungstut übernehmen. Ich habe den Sound weggelassen.

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

      Code
      class repaintVehicle {};

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


      Code
      class vehicleRepaint {};

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


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

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

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

      Editor


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

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


      So damit hätten wir es auch geschafft. Ich habe Euch mal die Dateien angehängt. Ich hoffe ihr könnt damit was anfangen. :thumbup:

      Gruß,
      moeck

      Alles anzeigen

      Funktioniert das in der 5.0 problemlos? Ich habe noch Rangabhängige Unterschiede , geht das damit auch?

      Projektleitung // Pascal Schulz

      Website: https://dieweltenbummler.eu/

      YouTube Channel: Youtube-Klickmich

      Teamspeak 3 Server: Hier drücken

      Discord: https://discord.gg/FbvsCCHV

    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 10. Dezember 2019 um 20:03
      • #13

      Hannkok nein, würde ich von abraten.

      Signatur? Was ist eine Signatur? Kann man das essen?

      Bitte beachten: Ich gebe keinen Support über private Nachrichten!


      Ganz wichtig: [Leitfaden] Wie frage Ich richtig um Hilfe?

      Nicht zu vergessen [Tutorial/Selbst-Test] Sollte ich einen Life Server eröffnen ?

    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 10. Dezember 2019 um 23:27
      • #14

      Ich kann ja mal in meinem altem kram nachschauen ob ich ich da noch einen rumfliegen habe. Ich habe vor einiger Zeit nämlich alles in die DB geschmissen, daher würde Dir mein aktueller Lackierer nix bringen 8o

      Signatur? Was ist eine Signatur? Kann man das essen?

      Bitte beachten: Ich gebe keinen Support über private Nachrichten!


      Ganz wichtig: [Leitfaden] Wie frage Ich richtig um Hilfe?

      Nicht zu vergessen [Tutorial/Selbst-Test] Sollte ich einen Life Server eröffnen ?

    • Hannkok
      Schüler
      Reaktionen
      18
      Trophäen
      11
      Beiträge
      146
      • 10. Dezember 2019 um 23:40
      • #15

      Wäre Interessant ein Lackiershop mit Rangabfrage :D , Vielleicht auch mit mehr Standardfarben die beim Kauf vllt sogar nicht mit drin sind :D

      Projektleitung // Pascal Schulz

      Website: https://dieweltenbummler.eu/

      YouTube Channel: Youtube-Klickmich

      Teamspeak 3 Server: Hier drücken

      Discord: https://discord.gg/FbvsCCHV

    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 11. Dezember 2019 um 08:24
      • #16

      Moin,

      ich habe mal ein wenig geforscht und siehe da im DE100 Repo gibt es auch einen Lackierer

      https://github.com/Clon1998/DE100…ds/core/repaint

      Vielleicht schaust Du Dir das mal an. Ich werde aber parallel aber auch nochmal auf meiner Platte schauen.

      Gruß,

      moeck

      Signatur? Was ist eine Signatur? Kann man das essen?

      Bitte beachten: Ich gebe keinen Support über private Nachrichten!


      Ganz wichtig: [Leitfaden] Wie frage Ich richtig um Hilfe?

      Nicht zu vergessen [Tutorial/Selbst-Test] Sollte ich einen Life Server eröffnen ?

    Registrieren oder Einloggen

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

    Registrieren

    Ähnliche Themen

    • Xian Textur in AltisLife 3.x

      • Feli
      • 19. April 2017 um 21:44
      • Hilfeforum
    • Umgang mit lbdata

      • moeck
      • 6. Januar 2017 um 16:37
      • Hilfeforum

    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™