Moin leute,
Bevor ihr mit diesem Tutorial anfängt, macht ein Backup.
Dieses Tutorial wurde auf der 3.1.4 exDB getestet und funktioniert auch einwandfrei. Sofern ihr nix falsch macht.
Kann natürlich auch auf der 3.1.3.5 exDB laufen, muß aber nicht!
Fangen wir mal an:
MPMissions
1. Geht in eure core\configuration.sqf und fügt folgendes ein:
case east:
{
life_atmcash = 25000; //Starting Bank Money
life_paycheck = 7000; //Paycheck Amount
};
2. Geht in eure core Ordner, und erstellt eine sqf namens fn_initAdac.sqf mit folgendem Inhallt:
Spoiler anzeigen
#include <macro.h>
/*
File: fn_initasadac.sqf
Author: Bryan "Tonic" Boardwine
Description:
Initializes the medic..
*/
private["_end"];
player addRating 99999999;
waitUntil {!(isNull (findDisplay 46))};
_igiload = execVM "IgiLoad\IgiLoadInit.sqf";
if((__GETC__(life_adaclevel)) < 1) exitWith {
["Notwhitelisted",FALSE,TRUE] call BIS_fnc_endMission;
sleep 35;
};
[] call life_fnc_spawnMenu;
waitUntil{!isNull (findDisplay 38500)}; //Wait for the spawn selection to be open.
waitUntil{isNull (findDisplay 38500)}; //Wait for the spawn selection to be done.
[] spawn
{
while {true} do
{
waitUntil {uniform player == "U_Rangemaster"};
player setObjectTextureGlobal [0,"textures\adac_uniform.paa"];
waitUntil {uniform player != "U_Rangemaster"};
};
};
3. Geht in eure core\init.sqf und fügt folgendes ein:
case east:
{
//Initialize ADAC and blah
_handle = [] spawn life_fnc_initAdac;
waitUntil {scriptDone _handle};
};
4. Geht in eure core\shops\fn_atmMenu.sqf und fügt folgendes ein:
5. Geht in eure core\session\fn_updateRequest.sqf und fügt folgende zwei sachen ein:
Sucht nach _flag und füge dies ein
das ganze sollte dann so aussehen:
_flag = switch(playerSide) do {case west: {"cop"}; case civilian: {"civ"}; case independent: {"med"}; case east: {"adac"};};
Und zum schluß, das hier noch einfügen unter case civilian
6. Geht in eure core\session\fn_requestReceived.sqf und ersetzt folgendes:
//Parse side specific information.
switch(playerSide) do {
case west: {
__CONST__(life_coplevel,parseNumber(_this select 7));
cop_gear = _this select 8;
[] spawn life_fnc_loadGear;
life_blacklisted = _this select 9;
__CONST__(life_medicLevel,0);
};
case civilian: {
life_is_arrested = _this select 7;
//life_is_arrested = call compile format["%1", _this select 7];
civ_gear = _this select 8;
__CONST__(life_coplevel,0);
__CONST__(life_medicLevel,0);
[] spawn life_fnc_civLoadGear;
life_houses = _this select 9;
{
_house = nearestBuilding (call compile format["%1", _x select 0]);
life_vehicles set[count life_vehicles,_house];
} foreach life_houses;
life_gangData = _This select 10;
if(count life_gangData != 0) then {
[] spawn life_fnc_initGang;
};
[] spawn life_fnc_initHouses;
};
case independent: {
__CONST__(life_mediclevel,parseNumber(_this select 7));
med_gear = _this select 8;
[] spawn life_fnc_medicLoadout;
};
case east: {
__CONST__(life_adaclevel,parseNumber(_this select 7));
adac_gear = _this select 8;
[] spawn life_fnc_adacloadGear;
};
};
Alles anzeigen
7. Geht in eure core\pmenu\fn_cellphone.sqf und fügt folgendes ein:
8. Geht in eure core\medical\fn_onPlayerRespawn.sqf und fügt folgendes ein:
9. Geht in euren core\medical\fn_respawned.sqf und fügt folgendes ein:
10. Geht in euer core\config und erstellt eine neue sqf namens fn_adacDefault.sqf mit folgendem Inhallt:
Spoiler anzeigen
/*
File: fn_AsADACDefault.sqf
Author: Bryan "Tonic" Boardwine
Description:
Default ADAC configuration.
*/
removeAllContainers player;
removeAllWeapons player;
player AddUniform "U_Rangemaster";
player addItem "ItemMap";
player assignItem "ItemMap";
player addItem "ItemCompass";
player assignItem "ItemCompass";
removeGoggles player;
removeHeadGear player;
if(hmd player != "") then {
player unlinkItem (hmd player);
};
player setObjectTextureGlobal [0,"textures\adac_uniform.paa"];
[] call life_fnc_saveGear;
11. Geht in euer core Ordner, und erstellt darin ein neuer Ordner namens adac
12. Geht in euren core\adac und erstellt eine neue sqf namens fn_adacloadGear.sqf mit folgendem Inhallt:
Spoiler anzeigen
private["_itemArray","_uniform","_vest","_backpack","_goggles","_headgear","_items","_prim","_seco","_uItems","_bItems","_vItems","_pItems","_hItems","_yItems","_uMags","_bMags","_vMags","_handle"];
_itemArray = adac_gear;
waitUntil {!(isNull (findDisplay 46))};
if(isNil "_itemArray") exitWith {[] call life_fnc_adacDefault;}; //Slot data doesn't exist
if(count _itemArray == 0) exitWith {[] call life_fnc_adacDefault;}; //Slot data doesn't exist
//Strip the unit down
RemoveAllWeapons player;
{player removeMagazine _x;} foreach (magazines player);
removeUniform player;
removeVest player;
removeBackpack player;
removeGoggles player;
removeHeadGear player;
{
player unassignItem _x;
player removeItem _x;
} foreach (assignedItems player);
_uniform = [_itemArray,0,"",[""]] call BIS_fnc_param;
_vest = [_itemArray,1,"",[""]] call BIS_fnc_param;
_backpack = [_itemArray,2,"",[""]] call BIS_fnc_param;
_goggles = [_itemArray,3,"",[""]] call BIS_fnc_param;
_headgear = [_itemArray,4,"",[""]] call BIS_fnc_param;
_items = [_itemArray,5,[],[[]]] call BIS_fnc_param;
_prim = [_itemArray,6,"",[""]] call BIS_fnc_param;
_seco = [_itemArray,7,"",[""]] call BIS_fnc_param;
_uItems = [_itemArray,8,[],[[]]] call BIS_fnc_param;
_uMags = [_itemArray,9,[],[[]]] call BIS_fnc_param;
_bItems = [_itemArray,10,[],[[]]] call BIS_fnc_param;
_bMags = [_itemArray,11,[],[[]]] call BIS_fnc_param;
_vItems = [_itemArray,12,[],[[]]] call BIS_fnc_param;
_vMags = [_itemArray,13,[],[[]]] call BIS_fnc_param;
_pItems = [_itemArray,14,[],[[]]] call BIS_fnc_param;
_hItems = [_itemArray,15,[],[[]]] call BIS_fnc_param;
_yItems = [_itemArray,16,[],[[]]] call BIS_fnc_param;
if(_prim != "") then {_handle = [_prim,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};};
if(_seco != "") then {_handle = [_seco,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};};
if(_goggles != "") then {_handle = [_goggles,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};};
if(_headgear != "") then {_handle = [_headgear,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};};
if(_uniform != "") then {_handle = [_uniform,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};};
if(_vest != "") then {_handle = [_vest,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};};
if(_backpack != "") then {_handle = [_backpack,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};};
{_handle = [_x,true,false,false,false] spawn life_fnc_handleItem; waitUntil {scriptDone _handle};} foreach _items;
{
if (_x != "") then {
player addPrimaryWeaponItem _x;
};
} foreach (_pItems);
{
if (_x != "") then {
player addHandgunItem _x;
};
} foreach (_hItems);
{player addItemToUniform _x;} foreach (_uItems);
{(uniformContainer player) addItemCargoGlobal [_x,1];} foreach (_uMags);
{player addItemToVest _x;} foreach (_vItems);
{(vestContainer player) addItemCargoGlobal [_x,1];} foreach (_vMags);
{player addItemToBackpack _x;} foreach (_bItems);
{(backpackContainer player) addItemCargoGlobal [_x,1];} foreach (_bMags);
{
_item = [_x,1] call life_fnc_varHandle;
[true,_item,1] call life_fnc_handleInv;
} foreach (_yItems);
[] call life_fnc_adacDefault;
13. Geht in euer Ordner core\adac und erstellt eine neue sqf namens fn_adacsaveGear.sqf mit folgendem Inhallt:
Spoiler anzeigen
private["_ret","_uItems","_bItems","_vItems","_pItems","_hItems","_yItems","_uMags","_vMags","_bMags","_pMag","_hMag","_uni","_ves","_bag","_handled"];
_ret = [];
_ret set[count _ret,uniform player];
_ret set[count _ret,vest player];
_ret set[count _ret,backpack player];
_ret set[count _ret,goggles player];
_ret set[count _ret,headgear player];
_ret set[count _ret,assignedItems player];
_ret set[count _ret,primaryWeapon player];
_ret set[count _ret,handGunWeapon player];
_uItems = [];
_uMags = [];
_bItems = [];
_bMags = [];
_vItems = [];
_vMags = [];
_pItems = [];
_hItems = [];
_yItems = [];
if(uniform player != "") then
{
{
if (_x in (magazines player)) then {
_uMags = _uMags + [_x];
} else {
_uItems = _uItems + [_x];
};
} forEach (uniformItems player);
};
if(backpack player != "") then
{
{
if (_x in (magazines player)) then {
_bMags = _bMags + [_x];
} else {
_bItems = _bItems + [_x];
};
} forEach (backpackItems player);
};
if(vest player != "") then
{
{
if (_x in (magazines player)) then {
_vMags = _vMags + [_x];
} else {
_vItems = _vItems + [_x];
};
} forEach (vestItems player);
};
if (count (primaryWeaponMagazine player) > 0 ) then
{
_pMag = ((primaryWeaponMagazine player) select 0);
if (_pMag != "") then
{
_uni = player canAddItemToUniform _pMag;
_ves = player canAddItemToVest _pMag;
_bag = player canAddItemToBackpack _pMag;
_handled = false;
if (_ves) then
{
_vMags = _vMags + [_pMag];
_handled = true;
};
if (_uni AND !_handled) then
{
_uMags = _uMags + [_pMag];
_handled = true;
};
if (_bag AND !_handled) then
{
_bMags = _bMags + [_pMag];
_handled = true;
};
};
};
if (count (handgunMagazine player) > 0 ) then
{
_hMag = ((handgunMagazine player) select 0);
if (_hMag != "") then
{
_uni = player canAddItemToUniform _hMag;
_ves = player canAddItemToVest _hMag;
_bag = player canAddItemToBackpack _hMag;
_handled = false;
if (_ves) then
{
_vMags = _vMags + [_hMag];
_handled = true;
};
if (_uni AND !_handled) then
{
_uMags = _uMags + [_hMag];
_handled = true;
};
if (_bag AND !_handled) then
{
_bMags = _bMags + [_hMag];
_handled = true;
};
};
};
if(count (primaryWeaponItems player) > 0) then
{
{
_pItems = _pItems + [_x];
} forEach (primaryWeaponItems player);
};
if(count (handGunItems player) > 0) then
{
{
_hItems = _hItems + [_x];
} forEach (handGunItems player);
};
{
_name = (_x select 0);
_val = (_x select 1);
if (_val > 0) then {
for "_i" from 1 to _val do {
_yItems = _yItems + [_name];
};
};
} forEach [
["life_inv_apple",life_inv_apple],["life_inv_rabbit",life_inv_rabbit],["life_inv_salema",life_inv_salema],["life_inv_ornate",life_inv_ornate],
["life_inv_mackerel",life_inv_mackerel],["life_inv_tuna",life_inv_tuna],["life_inv_mullet",life_inv_mullet],["life_inv_catshark",life_inv_catshark],
["life_inv_fishingpoles",life_inv_fishingpoles],["life_inv_water",life_inv_water],["life_inv_donuts",life_inv_donuts],["life_inv_turtlesoup",life_inv_turtlesoup],
["life_inv_coffee",life_inv_coffee],["life_inv_fuelF",life_inv_fuelF],["life_inv_fuelE",life_inv_fuelE],["life_inv_pickaxe",life_inv_pickaxe],
["life_inv_tbacon",life_inv_tbacon],["life_inv_lockpick",life_inv_lockpick],["life_inv_redgull",life_inv_redgull],["life_inv_peach",life_inv_peach]
];
_ret set[count _ret,_uItems];
_ret set[count _ret,_uMags];
_ret set[count _ret,_bItems];
_ret set[count _ret,_bMags];
_ret set[count _ret,_vItems];
_ret set[count _ret,_vMags];
_ret set[count _ret,_pItems];
_ret set[count _ret,_hItems];
_ret set[count _ret,_yItems];
adac_gear = _ret;
14. Erstellt eine neue sqf namens fn_adacMarkers.sqf mit folgendem Inhallt:
/*
File: fn_copMarkers.sqf
Author: Bryan "Tonic" Boardwine
Description:
Marks cops on the map for other cops. Only initializes when the actual map is open.
*/
private["_markers","_adac"];
_markers = [];
_adac = [];
sleep 0.5;
if(visibleMap) then {
{if(side _x == east) then {_adac set[count _adac,_x];}} foreach playableUnits; //Fetch list of cops / blufor
//Create markers
{
_marker = createMarkerLocal [format["%1_marker",_x],visiblePosition _x];
_marker setMarkerColorLocal "ColorGreen";
_marker setMarkerTypeLocal "Mil_dot";
_marker setMarkerTextLocal format["%1", name _x];
_markers set[count _markers,[_marker,_x]];
} foreach _adac;
while {visibleMap} do
{
{
private["_marker","_unit"];
_marker = _x select 0;
_unit = _x select 1;
if(!isNil "_unit") then
{
if(!isNull _unit) then
{
_marker setMarkerPosLocal (visiblePosition _unit);
};
};
} foreach _markers;
if(!visibleMap) exitWith {};
sleep 0.02;
};
{deleteMarkerLocal (_x select 0);} foreach _markers;
_markers = [];
_adac = [];
};
Alles anzeigen
15. Geht in eure description.ext und fügt folgendes ganz unten ein:
class AdacMessage
{
title = "Adac Message";
iconPicture = "icons\messagenew.paa";
description = "%1";
duration = 10;
priority = 5;
};
16. Geht in eure Functions.h und fügt folgendes unter class Master_Directory ein:
Und unter class Config folgendes hinzufügen:
Und als letztes, eine neue class anlegen. Da ihr ja einen Ordner erstellt habt mit dem namen adac. Fügt folgendes als neue class ein:
class Adac
{
file = "core\adac";
class adacloadGear {};
class adacsaveGear {};
class adacMarkers {};
};
17. Geht in eure dialog\cell_phone.hpp und fügt folgendes unter class EMSRequest : life_RscButtonMenu ein:
class AdacRequest : life_RscButtonMenu
{
idc = 3023;
text = "$STR_CELL_AdacRequest";
colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5};
onButtonClick = "[] call fnc_cell_adacrequest";
x = 0.32;
y = 0.45;
w = 0.2;
h = (1 / 25);
};
Alles anzeigen
18. Geht in eure dialog\function\fn_spawnPointCfg.sqf und fügt folgendes ein:
case east: {
_return = [
["adac_spawn_1","Kavala ADAC","\a3\ui_f\data\map\MapControl\watertower_ca.paa"]
];
};
(Ihr könnt hier natürlich mehrere spawns für den adac erstellen. Im Tutorial nehme ich mal nur einen).
19. Geht in eure stringtable.xml und sucht nach STR_CELL_EMSRequest und fügt folgendes darunter ein:
Das ganze sollte nun so aussehen:
Spoiler anzeigen
<Package name="Cell_Phone">
<Key ID="STR_CELL_Title">
<Original>Handy</Original>
</Key>
<Key ID="STR_CELL_TextToSend">
<Original>Nachricht:</Original>
</Key>
<Key ID="STR_CELL_TextMSGBtn">
<Original>Senden:</Original>
</Key>
<Key ID="STR_CELL_TextPolice">
<Original>Polizei</Original>
</Key>
<Key ID="STR_CELL_TextAdmins">
<Original>An Admin</Original>
</Key>
<Key ID="STR_CELL_AdminMsg">
<Original>Admin Message</Original>
</Key>
<Key ID="STR_CELL_AdminMSGAll">
<Original>AdminMsgAlle</Original>
</Key>
<Key ID="STR_CELL_EMSRequest">
<Original>Notarzt</Original>
</Key>
<Key ID="STR_CELL_AdacRequest">
<Original>ADAC</Original>
</Key>
</Package>
20. Geht in eure core\functions\fn_keyHandler.sqf und fügt folgendes unter map key hinzu:
21. Geht in eure core\pmenu\fn_p_updateMenu.sqf und ersetzt folgender schnipsel:
_side = switch(playerSide) do {case west:{"cop"}; case civilian:{"civ"}; case independent:{"med"}; case east:{"adac"};};
Nun kommen wir zu der @life_Server.
life_Server
1. Geht in eure functions.sqf und sucht nach fnc_cell_adminmsgall = und kopiert folgendes nach der ";
//To ADAC
fnc_cell_adacrequest =
compileFinal "
private[""_msg"",""_to""];
ctrlShow[3023,false];
_msg = ctrlText 3003;
_to = ""Adac Units"";
if(_msg == """") exitWith {hint ""You must enter a Message!"";ctrlShow[3023,true];};
[[_msg,name player,6],""clientMessage"",east,false] spawn life_fnc_MP;
[] call life_fnc_cellphone;
hint format[""You send a Message to all ADAC´s."",_to,_msg];
ctrlShow[3023,true];
";
Alles anzeigen
Unter publicVariable "fnc_cell_emsrequest"; folgendes einfügen:
Und zum schluß scrollt ihr nach ganz runter, und fügt dort eine case 6: ein:
case 6: {
private[""_message""];
_message = format[""!!!ADAC REQUEST: %1"",_msg];
hint parseText format [""<t color='#FFCC00'><t size='2'><t align='center'>ADAC Request<br/><br/><t color='#33CC33'><t align='left'><t size='1'>To: <t color='#ffffff'>You<br/><t color='#33CC33'>From: <t color='#ffffff'>%1<br/><br/><t color='#33CC33'>Message:<br/><t color='#ffffff'>%2"",_from,_msg];
[""TextMessage"",[format[""ADAC Request from %1"",_from]]] call bis_fnc_showNotification;
};
2. Geht in eure init.sqf und fügt folgendes ein:
3. Geht in eure functions\MYSQL\fn_insertRequest.sqf und ersetzt folgendes:
//Prepare the query statement..
_query = format["INSERT INTO players (playerid, name, cash, bankacc, aliases, cop_licenses, med_licenses, civ_licenses, civ_gear, cop_gear, med_gear, adac_gear, adac_licenses) VALUES('%1', '%2', '%3', '%4', '%5','""[]""','""[]""','""[]""','""[]""','""[]""','""[]""','""[]""','""[]""')",
_uid,
_name,
_money,
_bank,
_alias
];
4. Geht in eure functions\MYSQL\fn_queryRequest.sqf und fügt folgendes hinzu:
case east: {_returnCount = 10; format["SELECT playerid, name, cash, bankacc, adminlevel, donatorlvl, adac_licenses, adaclevel, adac_gear FROM players WHERE playerid='%1'",_uid];};
Etwas weiter unten das hier:
case east: {
_new = [(_queryResult select 8)] call DB_fnc_mresToArray;
if(typeName _new == "STRING") then {_new = call compile format["%1", _new];};
_queryResult set[8,_new];
_queryResult set[9,([_queryResult select 9,1] call DB_fnc_bool)];
};
5. Geht in eure functions\MYSQL\fn_updateRequest.sqf und fügt folgendes ein:
case east: {_query = format["UPDATE players SET name='%1', cash='%2', bankacc='%3', adac_gear='%4', adac_licenses='%5' WHERE playerid='%6'",_name,_cash,_bank,_gear,_licenses,_uid];};
6. Geht in eure Functions\Systems\fn_getVehicles.sqf und fügt folgendes dazu:
7. Geht in eure Functions\Systems\fn_vehicleCreate.sqf und fügt folgendes ein:
8. Geht in eure Functions\Systems\fn_spawnVehicle.sqf und fügt folgendes fast ganz unten ein:
if((_vInfo select 1) == "adac" && (_vInfo select 2) in ["C_Offroad_01_F","C_SUV_01_F"]) then
{
[[_vehicle,"adac_offroad",true],"life_fnc_vehicleAnimate",_unit,false] spawn life_fnc_MP;
};
Das war es an der @life_server. Nun geht es in den Editor:
Arma3 Editor
Geht zu der Spawninsel und erstellt eine neue Einheit:
Seite: Opfor
Klasse: Männer
Einheit: Sanitäter
Kontrolle: Spielbar
Name: adac_1
Beschreibung: Whitelisted - ADAC 1
Das ganze sollte so aussehen:
Eure zweite Einheit OPFOR
Klasse: Männer
Einheit: Sanitäter
Kontrolle: Spielbar
Name: adac_2
Beschreibung: Whitelisted - ADAC 2
Eure dritte Einheit OPFOR
Klasse: Männer
Einheit: Sanitäter
Kontrolle: Spielbar
Name: adac_3
Beschreibung: Whitelisted - ADAC 3
Eure vierte Einheit OPFOR
Klasse: Männer
Einheit: Sanitäter
Kontrolle: Spielbar
Name: adac_4
Beschreibung: Whitelisted - ADAC 4
Das ganze müsste dann so aussehen:
Nicht verwirren lassen, ich habe bei mir auf dem Server 10 ADAC Slots gemmacht. Das könnt ihr natürlich selber entscheiden wiefiele Slots ihr wollt. Im Tutorial erkläre ich das mal mit 4 Slots.
!!Ganz Wichtig!!
Alle erstellten Opfor müssen verbunden sein. Also erstellt immer eine neue Einheit, und nicht einfach kopieren!
Zum schluß noch einen Marker auf der Map erstellen, wo ihr den ADAC haben wollt. Marker Name:
Speichert die map.
Letzter schritt:
Öffnet eure mission.sqm mit eurem Notepadd ++ oder ähnlichem und sucht nach adac.
Bei euch müsste jetzt stehen:
ändern in
Und das bei alle vier, die ihr erstellt habt.
Schlussendlich müsste das bei euch so aussehen:
Spoiler anzeigen
class Item84
{
side="EAST";
class Vehicles
{
items=10;
class Item0
{
position[]={8478.0098,99.372452,25180.621};
id=216;
side="EAST";
vehicle="B_medic_F";
player="PLAY CDG";
leader=1;
skill=0.60000002;
text="adac_1";
description="Whitelisted - ADAC 1";
};
class Item1
{
position[]={8481.0273,99.923019,25180.678};
id=217;
side="EAST";
vehicle="B_medic_F";
player="PLAY CDG";
skill=0.60000002;
text="adac_2";
description="Whitelisted - ADAC 2";
};
class Item2
{
position[]={8477.8408,99.789711,25177.484};
id=218;
side="EAST";
vehicle="B_medic_F";
player="PLAY CDG";
skill=0.60000002;
text="adac_3";
description="Whitelisted - ADAC 3";
};
class Item3
{
position[]={8481.1611,100.29736,25177.732};
id=219;
side="EAST";
vehicle="B_medic_F";
player="PLAY CDG";
skill=0.60000002;
text="adac_4";
description="Whitelisted - ADAC 4";
};
};
};
Spielt noch folgenden Code in eure DB ein:
ALTER TABLE `players` ADD (
`adac_licenses` TEXT NULL DEFAULT NULL
);
ALTER TABLE `players` ADD (
`adac_gear` TEXT NOT NULL
);
ALTER TABLE `players` ADD (
`adaclevel` enum('0','1','2','3','4','5') NOT NULL DEFAULT '0'
);
Alles anzeigen
Wenn ihr das gemmacht habt,gebt euch ein adac level, und ganz WICHTIG gebt bei adac_licenses folgendes ein:
So, nun habt ihr eure neue Fraktion Opfor und könnt als ADAC auf eurem Server spielen.
Lizenz erstellen
1. Geht in eure configuration.sqf und fügt folgendes unter life_licenses = ein:
2. Geht in eure core/config/fn_licenseType.sqf und fügt folgendes bei case 0: ein:
bei case 1:
3. Geht in eure core/config/fn_varToStr.sqf und fügt folgendes unter //License Block ein:
case "license_adac_car": {"ADAC Führerschein"};
case "license_adac_air": {"ADAC Pilotenschein"};
4. Geht in eure core/config/fn_licensePrice.sqf und fügt folgendes ein:
5. Geht in eure core/config/fn_vehShopLicenses.sqf und fügt folgendes unter case "reb_car": {_ret = license_civ_rebel;}; ein:
6. Die INIT für den NPC sieht wie folgt aus:
removeAllWeapons
this; this enableSimulation false; this allowDamage false; this
addAction[format["%1 ($%2)",["license_adac_car"] call
life_fnc_varToStr,[(["car"] call life_fnc_licensePrice)] call
life_fnc_numberText],life_fnc_buyLicense,"car",0,false,false,"",'
!license_adac_car && playerSide == east ']; this
addAction[format["%1 ($%2)",["license_adac_air"] call
life_fnc_varToStr,[(["air"] call life_fnc_licensePrice)] call
life_fnc_numberText],life_fnc_buyLicense,"air",0,false,false,"",'
!license_adac_air && playerSide == east '];
Nun könnt ihr als ADAC Fahrzeuge kaufen.
SQL Smartphone
Solltet ihr das SQL Smartphone haben, so fügt noch folgendes hinzu:
life_server\Functions\Smartphone/fn_handleMessages.sqf
//ADAC request
case 6:
{
[[_msg,name _player,6],"clientMessage",east,false] spawn life_fnc_MP;
};
core/pmenu/fn_newMsg.sqf
//ADACrequest
case 8:
{
if(({side _x == east} count playableUnits) == 0) exitWith {hint format["Zurzeit ist kein ADAC im Dienst. Bitte probiere es später nochmal."];};
ctrlShow[888900,false];
if(_msg == "") exitWith {hint "Du musst eine Nachricht eingeben.";ctrlShow[888900,true];};
[[ObjNull,_msg,player,6],"GHB_fnc_handleMessages",false] spawn life_fnc_MP;
hint format["Du hast eine Nachricht an die Pannennotrufzentrale gesendet.",_msg];
ctrlShow[888900,true];
closeDialog 887890;
};
Alles anzeigen
Nun sind wir am Ende angekommen.
Eine bitte an euch.
Wenn es geklapt hat oder nicht, bitte schreibt es. Ich helfe gerne.
Ich möchte das Tutorial immer up2date hallten, weil Opfor einfügen eines der meistgesuchten sachen sind.
MfG
Noldy