Achja und bitte mal die folgenden Dateien mit anhängen
fn_vehicleListCfg.sqf
fn_VehicleColorCfg.sqf
fn_vehicleColorStr.cfg
Du musst das nämlich in allen 3 Dateien richtig eintragen
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.
Achja und bitte mal die folgenden Dateien mit anhängen
fn_vehicleListCfg.sqf
fn_VehicleColorCfg.sqf
fn_vehicleColorStr.cfg
Du musst das nämlich in allen 3 Dateien richtig eintragen
was sagen den deine Clientlogs? Da es sich hier eher um eine Clientfunktion handelt. So und wenn Du mitgedacht hättest wäre Dir der Fehler auch aufgefallen. Tausche bitte mal folgende Zeile
_ziel = [_this,1,ObjNull,[ObjNull]] call BIS_fnc_param;
durch
_ziel = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param;
Wir übergeben ja nur einen Parameter. Hatte gestern ursprünglich noch eine andere Idee im Kopf aber hatte die dann verworfen.
warum baust Du das nicht in das Cop Interaction Modul. per Scrollrad muss der befehl von button 9 einfach ins cop setupaction eingebaut werden.
switch (playerSide) do{
case civilian:
{
//Ausweis
life_actions = life_actions + [player addAction["Ausweis zeigen",[cursorTarget] call life_fnc_Persozeigen,"",1,false,true,"",'!isNull cursorTarget && cursorTarget isKindOf "Man"']];
};
case west:
{
//Ausweis
life_actions = life_actions + [player addAction["Ausweis zeigen",[cursorTarget] call life_fnc_Persozeigen,"",1,false,true,"",'!isNull cursorTarget && cursorTarget isKindOf "Man"']];
life_actions = life_actions + [player addAction["Ausweis suchen",[player] call life_fnc_Persozeigen,"",1,false,true,"",'!isNull cursorTarget && cursorTarget isKindOf "Man"' ]];
};
case independent:
{
//Ausweis
life_actions = life_actions + [player addAction["Ausweis zeigen",[cursorTarget] call life_fnc_Persozeigen,"",1,false,true,"",'!isNull cursorTarget && cursorTarget isKindOf "Man"']];
};
case east:
{
//Ausweis
life_actions = life_actions + [player addAction["Ausweis zeigen",[cursorTarget] call life_fnc_Persozeigen,"",1,false,true,"",'!isNull cursorTarget && cursorTarget isKindOf "Man"']];
};
};
Alles anzeigen
das mit dem restrained musste noch einbauen aber ein bissel was kannst auch selbst machen!
Gruß,
moeck
ja mach mal einfach mal bei den Booten setPosASL natürlich musst Du auch den Marker setzen.
Moin,
so hier mal mein Vorschlag zur Lösung des Problems, ich habe das Ganze aber noch nicht getestet!
switch (playerSide) do{
case civilian:
{
//Ausweis
life_actions = life_actions + [player addAction["Ausweis zeigen",[cursorTarget] call life_fnc_Persozeigen,"",1,false,true,"",'!isNull cursorTarget && cursorTarget isKindOf "Man"']];
};
case west:
{
//Ausweis
life_actions = life_actions + [player addAction["Ausweis zeigen",[cursorTarget] call life_fnc_Persozeigen,"",1,false,true,"",'!isNull cursorTarget && cursorTarget isKindOf "Man"']];
};
case independent:
{
//Ausweis
life_actions = life_actions + [player addAction["Ausweis zeigen",[cursorTarget] call life_fnc_Persozeigen,"",1,false,true,"",'!isNull cursorTarget && cursorTarget isKindOf "Man"']];
};
case east:
{
//Ausweis
life_actions = life_actions + [player addAction["Ausweis zeigen",[cursorTarget] call life_fnc_Persozeigen,"",1,false,true,"",'!isNull cursorTarget && cursorTarget isKindOf "Man"']];
};
};
Alles anzeigen
if(isServer)exitWith{};
private["_ziel", "_rang", "_marke", "_org", "_message"];
//----------------neue--------------------------------
_ziel = [_this,1,ObjNull,[ObjNull]] call BIS_fnc_param;
//--------------- neu ende ----------------------------
if(vehicle player != player )exitWith{};
if(isNull _ziel) then {_ziel = player;};
if(!(_ziel isKindOf "Man")) then {_ziel = player;};
if(!(alive _ziel)) then {_ziel = player;};
switch(playerSide)do{
case west:{
switch (call life_coplevel) do{
case 1: { _rang = "Polizei-Anwärter"; };
case 2: { _rang = "Polizeimeister"; };
case 3: { _rang = "Polizeihauptmeister"; };
case 4: { _rang = "Kommissar"; };
case 5: { _rang = "Hauptkommissar"; };
case 6: { _rang = "Polizeidirektor"; };
case 7: { _rang = "Polizeipräsident"; };
default { _rank = "Error";};
};
_marke = "marke_cop";
_org = "Polizei Altis";
};
case east:{
switch (call life_adaclevel) do{
case 1: { _rang = "ADAC Praktikant"; };
case 2: { _rang = "ADAC Azubi"; };
case 3: { _rang = "ADAC Geselle"; };
case 4: { _rang = "ADAC Techniker"; };
case 5: { _rang = "ADAC Meister"; };
case 6: { _rang = "ADAC Co.Chef"; };
case 7: { _rang = "ADAC Chef"; };
case 8: { _rang = "Leitung"; };
};
_marke = "marke_ziv";
_org = "ADAC Altis";
};
case independent:{
switch (call life_mediclevel) do{
case 1: { _rang = "Ersthelfer"; };
case 2: { _rang = "Rettungshelfer"; };
case 3: { _rang = "Rettungsanitäter"; };
case 4: { _rang = "Notfallsanitäter"; };
case 5: { _rang = "Notarzt"; };
case 6: { _rang = "Lehrrettungsassistent"; };
case 7: { _rang = "ÄrztlicherLeiter"; };
default { _rank = "Error";};
};
_marke = "marke_ziv";
_org = "Republik Altis";
};
case civilian:{
if(playerSide == civilian)then{
_rang = "Zivilist";
_marke = "marke_ziv";
_org = "Republik Altis";
}else{
_rang = "Zivilist";
_marke = "marke_abi";
_org = "Republik Altis";
};
};
};
_message = format["<img size='10' color='#FFFFFF' image='icons\%1.paa'/><br/><br/><t size='2.5'>%2</t><br/><t size='1.8'>%3</t><br/><t size='1'>%4</t>",_marke, name player, _rang, _org];
[[player, _message],"life_fnc_Persosehen",_ziel,false]
Alles anzeigen
und natürlich musst du dann bei den Cops das copInteractionMenü noch anpassen. Hier mal ein Beispiel Code
#define Btn9 37458;
_Btn9 = _display displayCtrl Btn9;
_Btn9 ctrlSetText localize "Ausweis suchen";
_Btn9 buttonSetAction "[player] call life_fnc_Persozeigen; closeDialog 0;";
Achtung im letzten Teil musste Du die Sachen richtig einfügen, ich habe hier nur mal alles zusammengeschrieben, das befindet in der Datei an verschiedenen Stellen!
Wie gesagt ist erstmal ohne Gewähr aber ich denke das müsste funktionieren.
Gruß,
moeck
Moin,
mh... mir kommt das sehr bekannt vor .
Gruß,
moeck
Moin,
ich gebe Dir mal einen kleinen Denkanstoß, was alles gemacht werden muss. Allerdings werde ich nicht die komplette Lösung posten, da man sich schon mal selbst auch damit auseinander setzen sollte. Grundsätzlich musst Du halt bei Speichern ein Flag setzen und natürlich das Ganze bei der Anzeige auch wieder mit auslesen. Ich bin mir gerade nicht mal sicher ob ich das nicht hier schon mal gepostet habe .
So hier mal die Hinweise:
1. fn_handleMessages.sqf Änderung der cases 1 und 3 also Cops und Medics. Hier muss das SQL entsprechend angepasst werden.
2. fn_msgRequest.sqf Erweiterung des SQL Statements um das Flag für Cops (west) und Medics (independent), optional natürlich ADAC (opfor) falls vorhanden
Eigentlich war es das auch schon außer man möchte auch gleich noch das mit dem Antworten mit einbauen. Sofern man sich mit SQF bzw. SQL einwenig auskennt ist das vielleicht ein Aufwand von 10 Minuten. Mit den Hinweisen geht es so gar noch schneller.
Gruß,
moeck
ja selber schreiben , es funktioniert auf jeden fall.
in der init auf der map
du musst zeile 6 ändern und deinen marker dort eintragen. des weiteren in der mission.sqm an shop (NPC) den deinen marker eintragen
Also "air_g_med_pyrgos" und "air_med" sind 2 karten marker. Die musst du natürlich ersetzen wenn deine Spawnpunkte anders heissen. Beide spawnen auf dem boden. Falls du die Höhe ein stellen möchtest dann geht das wie folgt.
so hier nochmal deine komplette Datei inklusive der Änderung!
#include "..\..\script_macros.hpp"
/*
File: fn_vehicleShopBuy.sqf
Author: Bryan "Tonic" Boardwine
Description:
Does something with vehicle purchasing.
*/
params [["_mode",true,[true]]];
if ((lbCurSel 2302) isEqualTo -1) exitWith {hint localize "STR_Shop_Veh_DidntPick";closeDialog 0;};
private _className = lbData[2302,(lbCurSel 2302)];
private _vIndex = lbValue[2302,(lbCurSel 2302)];
private _vehicleList = M_CONFIG(getArray,"CarShops",(life_veh_shop select 0),"vehicles");
private _shopSide = M_CONFIG(getText,"CarShops",(life_veh_shop select 0),"side");
private _initalPrice = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"price");
private "_buyMultiplier";
private "_rentMultiplier";
switch (playerSide) do {
case civilian: {
_buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN");
_rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_CIVILIAN");
};
case west: {
_buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP");
_rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_COP");
};
case independent: {
_buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC");
_rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_MEDIC");
};
case east: {
_buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR");
_rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_OPFOR");
};
};
private "_purchasePrice";
if (_mode) then {
_purchasePrice = round(_initalPrice * _buyMultiplier);
} else {
_purchasePrice = round(_initalPrice * _rentMultiplier);
};
private _conditions = M_CONFIG(getText,"LifeCfgVehicles",_className,"conditions");
if !([_conditions] call life_fnc_levelCheck) exitWith {hint localize "STR_Shop_Veh_NoLicense";};
private _colorIndex = lbValue[2304,(lbCurSel 2304)];
if (_purchasePrice < 0) exitWith {closeDialog 0;}; //Bad price entry
if (CASH < _purchasePrice) exitWith {hint format [localize "STR_Shop_Veh_NotEnough",[_purchasePrice - CASH] call life_fnc_numberText];closeDialog 0;};
private _spawnPoints = life_veh_shop select 1;
private _spawnPoint = "";
if ((life_veh_shop select 0) == "med_air_hs") then {
if (nearestObjects[(getMarkerPos _spawnPoints),["Air"],35] isEqualTo []) exitWith {_spawnPoint = _spawnPoints};
} else {
//Check if there is multiple spawn points and find a suitable spawnpoint.
if (_spawnPoints isEqualType []) then {
//Find an available spawn point.
{
if ((nearestObjects[(getMarkerPos _x),["Car","Ship","Air"],5]) isEqualTo []) exitWith {_spawnPoint = _x};
true
} count _spawnPoints;
} else {
if (nearestObjects[(getMarkerPos _spawnPoints),["Car","Ship","Air"],5] isEqualTo []) exitWith {_spawnPoint = _spawnPoints};
};
};
if (_spawnPoint isEqualTo "") exitWith {hint localize "STR_Shop_Veh_Block"; closeDialog 0;};
CASH = CASH - _purchasePrice;
[0] call SOCK_fnc_updatePartial;
hint format [localize "STR_Shop_Veh_Bought",getText(configFile >> "CfgVehicles" >> _className >> "displayName"),[_purchasePrice] call life_fnc_numberText];
//Spawn the vehicle and prep it.
private "_vehicle";
/* -------------------- Orginal ----------------------------------------------------------
if ((life_veh_shop select 0) == "med_air_hs") then {
_vehicle = createVehicle [_className,[0,0,999],[], 0, "NONE"];
waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; //Wait?
_vehicle allowDamage false;
_hs = nearestObjects[getMarkerPos _spawnPoint,["Land_Hospital_side2_F"],50] select 0;
_vehicle setPosATL (_hs modelToWorld [-0.4,-4,12.65]);
sleep 0.6;
} else {
_vehicle = createVehicle [_className, (getMarkerPos _spawnPoint), [], 0, "NONE"];
waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; //Wait?
_vehicle allowDamage false; //Temp disable damage handling..
_vehicle setPos (getMarkerPos _spawnPoint);
_vehicle setVectorUp (surfaceNormal (getMarkerPos _spawnPoint));
_vehicle setDir (markerDir _spawnPoint);
};
*/
// moeck's Ersatz Anfang
if ((life_veh_shop select 0) == "med_air_hs") then {
_vehicle = createVehicle [_className,[0,0,999],[], 0, "NONE"];
waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; //Wait?
_vehicle allowDamage false;
_hs = nearestObjects[getMarkerPos _spawnPoint,["Land_Hospital_side2_F"],50] select 0;
if (_spawnPoint isEqualTo "air_g_med_pyrgos" || _spawnPoint isEqualTo "air_med") then { //falls der Spawnpunkt nicht auf dem Krankenhaus sein soll, sondern auf dem Boden
_hs = getMarkerPos _spawnPoint;
_vehicle setDir (markerDir _spawnPoint);
_vehicle setPos _hs;
} else {
_vehicle setPosATL (_hs modelToWorld [-0.4,-4,12.65]);
};
sleep 0.6;
} else {
_pos = getMarkerPos _spawnPoint; // Auslesen des Spawnpunktes
//-------------- Nur interessant, wenn man einen Ziv Spawn in der Höhe verschieben möchte
/*if (_spawnPoint isEqualTo "dein_spawnmarker") then { //Bitte hier deinen Spawnmarker eintragen
_pos = [_pos select 0,_pos select 1,6.0]; //Höhe kann man im Editor mit einen Schild ermitteln, einfach setzen und bei den Attributen den Z-Wert übernehmen. Hier ist die Höhenänderung. In diesem Fall 6 Meter über dem Boden.
};*/
// -------------- das einfach auskommentieren
_vehicle = createVehicle [_className, (getMarkerPos _spawnPoint), [], 0, "NONE"];
waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; //Wait?
_vehicle allowDamage false; //Temp disable damage handling..
_vehicle setPos _pos; //Hier wird die _pos übernommen, inklusive der Höhe
_vehicle setVectorUp (surfaceNormal (getMarkerPos _spawnPoint));
_vehicle setDir (markerDir _spawnPoint);
};
//moeck's Ersatz Ende
_vehicle lock 2;
[_vehicle,_colorIndex] call life_fnc_colorVehicle;
[_vehicle] call life_fnc_clearVehicleAmmo;
[_vehicle,"trunk_in_use",false,true] remoteExecCall ["TON_fnc_setObjVar",RSERV];
[_vehicle,"vehicle_info_owners",[[getPlayerUID player,profileName]],true] remoteExecCall ["TON_fnc_setObjVar",RSERV];
_vehicle disableTIEquipment true; //No Thermals.. They're cheap but addictive.
//Side Specific actions.
switch (playerSide) do {
case west: {
[_vehicle,"cop_offroad",true] spawn life_fnc_vehicleAnimate;
};
case civilian: {
if ((life_veh_shop select 2) isEqualTo "civ" && {_className == "B_Heli_Light_01_F"}) then {
[_vehicle,"civ_littlebird",true] spawn life_fnc_vehicleAnimate;
};
};
case independent: {
[_vehicle,"med_offroad",true] spawn life_fnc_vehicleAnimate;
};
};
_vehicle allowDamage true;
life_vehicles pushBack _vehicle;
//Always handle key management by the server
[getPlayerUID player,playerSide,_vehicle,1] remoteExecCall ["TON_fnc_keyManagement",RSERV];
if (_mode) then {
if !(_className in LIFE_SETTINGS(getArray,"vehicleShop_rentalOnly")) then {
if (life_HC_isActive) then {
[(getPlayerUID player),playerSide,_vehicle,_colorIndex] remoteExecCall ["HC_fnc_vehicleCreate",HC_Life];
} else {
[(getPlayerUID player),playerSide,_vehicle,_colorIndex] remoteExecCall ["TON_fnc_vehicleCreate",RSERV];
};
};
};
if (LIFE_SETTINGS(getNumber,"player_advancedLog") isEqualTo 1) then {
if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then {
advanced_log = format [localize "STR_DL_AL_boughtVehicle_BEF",_className,[_purchasePrice] call life_fnc_numberText,[CASH] call life_fnc_numberText,[BANK] call life_fnc_numberText];
} else {
advanced_log = format [localize "STR_DL_AL_boughtVehicle",profileName,(getPlayerUID player),_className,[_purchasePrice] call life_fnc_numberText,[CASH] call life_fnc_numberText,[BANK] call life_fnc_numberText];
};
publicVariableServer "advanced_log";
};
closeDialog 0; //Exit the menu.
true;
Alles anzeigen
Die Änderung ist in Zeile 105 -133! Ich hoffe das ist nun verständlich
wenn du mal das komplette logfile als anhang ranhängst klappt es auch mit dem nachbarn
DeadBang schau dir mal den link an. da ist alles drin "Autos weiter übern Boden Spawnen?"
so hier noch mal ein wenig anders formatiert
if ((life_veh_shop select 0) == "med_air_hs") then {
_vehicle = createVehicle [_className,[0,0,999],[], 0, "NONE"];
waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; //Wait?
_vehicle allowDamage false;
_hs = nearestObjects[getMarkerPos _spawnPoint,["Land_Hospital_side2_F"],50] select 0;
if (_spawnPoint isEqualTo "air_g_med_pyrgos" || _spawnPoint isEqualTo "air_med") then { //falls der Spawnpunkt nicht auf dem Krankenhaus sein soll, sondern auf dem Boden
_hs = getMarkerPos _spawnPoint;
_vehicle setDir (markerDir _spawnPoint);
_vehicle setPos _hs;
} else {
_vehicle setPosATL (_hs modelToWorld [-0.4,-4,12.65]);
};
sleep 0.6;
} else {
_pos = getMarkerPos _spawnPoint; // Auslesen des Spawnpunktes
if (_spawnPoint isEqualTo "dein_spawnmarker") then { //Bitte hier deinen Spawnmarker eintragen
_pos = [_pos select 0,_pos select 1,6.0]; //Höhe kann man im Editor mit einen Schild ermitteln, einfach setzen und bei den Attributen den Z-Wert übernehmen. Hier ist die Höhenänderung. In diesem Fall 6 Meter über dem Boden.
};
_vehicle = createVehicle [_className, (getMarkerPos _spawnPoint), [], 0, "NONE"];
waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; //Wait?
_vehicle allowDamage false; //Temp disable damage handling..
_vehicle setPos _pos; //Hier wird die _pos übernommen, inklusive der Höhe
_vehicle setVectorUp (surfaceNormal (getMarkerPos _spawnPoint));
_vehicle setDir (markerDir _spawnPoint);
};
Alles anzeigen
das fehlende if ist in zeile 6
Hast Du auf dem Server schon mal Arma neuinstalliert. Irgendwie lädt er nämlich gar nix von Arma
16:46:56 ============================================================================================= List of mods ===============================================================================================
16:46:56 modsReadOnly = true
16:46:56 safeModsActivated = false
16:46:56 customMods = true
16:46:56 hash = '52E1123DE9B5382DCDE90BEBDF18BA8E78FC5A6D'
16:46:56 hashShort = '2340b892'
16:46:56 name | modDir | default | origin | hash | hashShort | fullPath
Da fehlt einfach alles
welche Arma Version läuft auf deinem Root? Du kannst die Datei nur speichern wenn BE nicht läuft. Solltest Du die 64 Bit Version laufen haben, dann musst du die BE dll tauschen sonst wird das nix. Du brauchst nämlich dann auch die 64bit Version der dll
Edit: keine Ahnung ob es die Bibliothek auch für Linux gibt. Wer lesen kann ist klar im Vorteil
ja hier ist das ganze auch nochmal komplett falls ihr doch mal spawnpoint in der höhe verschieben wollt
Ja kann man auch machen, da ich aber auch einige Civ Spawns in der Höhe verschieben musste und wir zum Teil Krankenhäuser haben und zum Teil nicht ist das für die einfachere Lösung und ich muss nicht 2 Shops definieren. Ich mache einfach in der VehicleShopBuy die Unterscheidung und fertig. Andernfalls müsste ich dann in der Config immer 2 Shops pflegen und das macht unter Umständen deutlich mehr Aufwand, wenn die Medics mal wieder neue Fahrzeuge haben wollen bzw. sich die Skins ändern