Hey Community,
ich habe nach langem Versuchen und probieren mich nun entschieden hier einmal nach Hilfe zu Fragen!
Mein Problem: Blaulicht bei den Medics funktioniert nur bei Offroad (egal ob neugekauft oder ausgeparkt)
Version: 5.0 mit extDB3
Logdateien: keine Fehler weder in extdb3 noch Server.rtp
Server: Arma 3 GameServer bei Host-Unlimited (Windows Server 64bit)
Ansätze: Bearbeitet Dateien: fn_spawnVehicle.sqf , fn_medicSirenLights.sqf , fn_medicLights.sqf , fn_keyHandler.sqf
Ich hoffe mal jemand kann mir den entscheidenden Hinweise geben.
Vielen Dank schonmal an die Leute, die sich die Mühe machen, sich mein Chaos anzuschauen
Ich werde mal den Inhalt der Dateien auflisten, vielleicht habe ich irgendwo einen Fehler, etwas vergessen oder kaputt gemacht!
fn_spawnVehicle.sqf (@life_server)
Spoiler anzeigen
#include "\life_server\script_macros.hpp"
/*
File: fn_spawnVehicle.sqf
Author: Bryan "Tonic" Boardwine
Description:
Sends the query request to the database, if an array is returned then it creates
the vehicle if it's not in use or dead.
*/
params [
["_vid", -1, [0]],
["_pid", "", [""]],
["_sp", [], [[],""]],
["_unit", objNull, [objNull]],
["_price", 0, [0]],
["_dir", 0, [0]],
"_spawntext"
];
private _unit_return = _unit;
private _name = name _unit;
private _side = side _unit;
_unit = owner _unit;
if (_vid isEqualTo -1 {_pid isEqualTo ""}) exitWith {};
if (_vid in serv_sv_use) exitWith {};
serv_sv_use pushBack _vid;
private _servIndex = serv_sv_use find _vid;
private _query = format ["SELECT id, side, classname, type, pid, alive, active, plate, color, inventory, gear, fuel, damage, blacklist FROM vehicles WHERE id='%1' AND pid='%2'",_vid,_pid];
private _tickTime = diag_tickTime;
private _queryResult = [_query,2] call DB_fnc_asyncCall;
if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then {
diag_log "------------- Client Query Request -------------";
diag_log format ["QUERY: %1",_query];
diag_log format ["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)];
diag_log format ["Result: %1",_queryResult];
diag_log "------------------------------------------------";
};
if (_queryResult isEqualType "") exitWith {};
private _vInfo = _queryResult;
if (isNil "_vInfo") exitWith {serv_sv_use deleteAt _servIndex;};
if (count _vInfo isEqualTo 0) exitWith {serv_sv_use deleteAt _servIndex;};
if ((_vInfo select 5) isEqualTo 0) exitWith {
serv_sv_use deleteAt _servIndex;
[1,"STR_Garage_SQLError_Destroyed",true,[_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit];
};
if ((_vInfo select 6) isEqualTo 1) exitWith {
serv_sv_use deleteAt _servIndex;
[1,"STR_Garage_SQLError_Active",true,[_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit];
};
private "_nearVehicles";
if !(_sp isEqualType "") then {
_nearVehicles = nearestObjects[_sp,["Car","Air","Ship"],10];
} else {
_nearVehicles = [];
};
if (count _nearVehicles > 0) exitWith {
serv_sv_use deleteAt _servIndex;
[_price,_unit_return] remoteExecCall ["life_fnc_garageRefund",_unit];
[1,"STR_Garage_SpawnPointError",true] remoteExecCall ["life_fnc_broadcast",_unit];
};
_query = format ["UPDATE vehicles SET active='1', damage='""[]""' WHERE pid='%1' AND id='%2'",_pid,_vid];
private _trunk = [(_vInfo select 9)] call DB_fnc_mresToArray;
private _gear = [(_vInfo select 10)] call DB_fnc_mresToArray;
private _damage = [call compile (_vInfo select 12)] call DB_fnc_mresToArray;
private _wasIllegal = _vInfo select 13;
_wasIllegal = if (_wasIllegal isEqualTo 1) then { true } else { false };
[_query,1] call DB_fnc_asyncCall;
private "_vehicle";
if (_sp isEqualType "") then {
_vehicle = createVehicle[(_vInfo select 2),[0,0,999],[],0,"NONE"];
waitUntil {!isNil "_vehicle" && {!isNull _vehicle}};
_vehicle allowDamage false;
_hs = nearestObjects[getMarkerPos _sp,["Land_Hospital_side2_F"],50] select 0;
_vehicle setPosATL (_hs modelToWorld [-0.4,-4,12.65]);
uiSleep 0.6;
} else {
_vehicle = createVehicle [(_vInfo select 2),_sp,[],0,"NONE"];
waitUntil {!isNil "_vehicle" && {!isNull _vehicle}};
_vehicle allowDamage false;
_vehicle setPos _sp;
_vehicle setVectorUp (surfaceNormal _sp);
_vehicle setDir _dir;
};
_vehicle allowDamage true;
//Send keys over the network.
[_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit];
[_pid,_side,_vehicle,1] call TON_fnc_keyManagement;
_vehicle lock 2;
//Reskin the vehicle
[_vehicle,(_vInfo select 8)] remoteExecCall ["life_fnc_colorVehicle",_unit];
_vehicle setVariable ["vehicle_info_owners",[[_pid,_name]],true];
_vehicle setVariable ["dbInfo",[(_vInfo select 4),(_vInfo select 7)],true];
_vehicle disableTIEquipment true; //No Thermals.. They're cheap but addictive.
_vehicle setVariable ["lights",false,true];
[_vehicle] call life_fnc_clearVehicleAmmo;
if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then {
_vehicle setVariable ["Trunk",_trunk,true];
if (_wasIllegal) then {
private _refPoint = if (_sp isEqualType "") then {getMarkerPos _sp;} else {_sp;};
private _distance = 100000;
private "_location";
{
private _tempLocation = nearestLocation [_refPoint, _x];
private _tempDistance = _refPoint distance _tempLocation;
if (_tempDistance < _distance) then {
_location = _tempLocation;
_distance = _tempDistance;
};
false
} count ["NameCityCapital", "NameCity", "NameVillage"];
_location = text _location;
[1,"STR_NOTF_BlackListedVehicle",true,[_location,_name]] remoteExecCall ["life_fnc_broadcast",west];
_query = format ["UPDATE vehicles SET blacklist='0' WHERE id='%1' AND pid='%2'",_vid,_pid];
[_query,1] call DB_fnc_asyncCall;
};
} else {
_vehicle setVariable ["Trunk",[[],0],true];
};
if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then {
_vehicle setFuel (_vInfo select 11);
}else{
_vehicle setFuel 1;
};
if (count _gear > 0 && (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1)) then {
_items = _gear select 0;
_mags = _gear select 1;
_weapons = _gear select 2;
_backpacks = _gear select 3;
for "_i" from 0 to ((count (_items select 0)) - 1) do {
_vehicle addItemCargoGlobal [((_items select 0) select _i), ((_items select 1) select _i)];
};
for "_i" from 0 to ((count (_mags select 0)) - 1) do {
_vehicle addMagazineCargoGlobal [((_mags select 0) select _i), ((_mags select 1) select _i)];
};
for "_i" from 0 to ((count (_weapons select 0)) - 1) do {
_vehicle addWeaponCargoGlobal [((_weapons select 0) select _i), ((_weapons select 1) select _i)];
};
for "_i" from 0 to ((count (_backpacks select 0)) - 1) do {
_vehicle addBackpackCargoGlobal [((_backpacks select 0) select _i), ((_backpacks select 1) select _i)];
};
};
if (count _damage > 0 && (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1)) then {
_parts = getAllHitPointsDamage _vehicle;
for "_i" from 0 to ((count _damage) - 1) do {
_vehicle setHitPointDamage [format ["%1",((_parts select 0) select _i)],_damage select _i];
};
};
//Sets of animations
if ((_vInfo select 1) isEqualTo "civ" && (_vInfo select 2) isEqualTo "B_Heli_Light_01_F" && !((_vInfo select isEqualTo 13)) then {
[_vehicle,"civ_littlebird",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit];
};
if ((_vInfo select 1) isEqualTo "cop" && ((_vInfo select 2)) in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then {
[_vehicle,"cop_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit];
};
if ((_vInfo select 1) isEqualTo "med" && ((_vInfo select 2)) in ["C_Offroad_01_F","C_Offroad_01_repair_F","C_SUV_01_F","C_Van_01_box_F","O_MRAP_02_F"]) then {
[_vehicle,"med_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit];
};
[1,_spawntext] remoteExecCall ["life_fnc_broadcast",_unit];
serv_sv_use deleteAt _servIndex;
fn_medicsirenLights.sqf
Spoiler anzeigen
#include "..\..\script_macros.hpp"
/*
File: fn_sirenLights.sqf
Author: Bryan "Tonic" Boardwine
Description:
Lets play a game! Can you guess what it does? I have faith in you, if you can't
then you have failed me and therefor I lose all faith in humanity.. No pressure.
*/
private ["_vehicle","_trueorfalse"];
_vehicle = param [0,objNull,[objNull]];
if (isNull _vehicle) exitWith {}; //Bad entry!
if (!(typeOf _vehicle in ["C_Offroad_01_F","C_SUV_01_F","C_Offroad_01_repair_F","C_Van_01_box_F","O_MRAP_02_F"])) exitWith {}; //Last chance check to prevent something from defying humanity and creating a monster.
_trueorfalse = _vehicle getVariable ["lights",false];
if (_trueorfalse) then {
_vehicle setVariable ["lights",false,true];
} else {
_vehicle setVariable ["lights",true,true];
[_vehicle,0.22] remoteExec ["life_fnc_medicLights",RCLIENT];
};
fn_medicLights.sqf
Spoiler anzeigen
/*
File: fn_medicLights.sqf
Author: mindstorm, modified by Adanteh
Link: http://forums.bistudio.com/showthread.php…s-and-underglow
Description:
Adds the light effect to cop vehicles, specifically the offroad.
*/
Private ["_vehicle","_lightRed","_lightBlue","_lightleft","_lightright","_leftRed"];
_vehicle = _this select 0;
if (isNil "_vehicle" isNull _vehicle !(_vehicle getVariable "lights")) exitWith {};
_lightRed = [0.1, 0.1, 20];
_lightBlue = [0.1, 0.1, 20];
_lightleft = "#lightpoint" createVehicle getPos _vehicle;
sleep 0.2;
_lightleft setLightColor _lightBlue;
_lightleft setLightBrightness 0.2;
_lightleft setLightAmbient [0.1,0.1,1];
switch (typeOf _vehicle) do
{
case "C_Offroad_01_F":
{
_lightleft lightAttachObject [_vehicle, [-0.37, 0.0, 0.56]];
};
case "C_SUV_01_F":
{
_lightleft lightAttachObject [_vehicle, [-0.37,-1.2,0.42]];
};
case "C_Offroad_01_repair_F":
{
_lightleft lightAttachObject [_vehicle, [-0.37, 0.0, 0.56]];
};
case "C_Van_01_box_F":
{
_lightleft lightAttachObject [_vehicle, [-0.75, 0.2, 1.55]];
};
case "O_MRAP_02_F":
{
_lightleft lightAttachObject [_vehicle, [-1, -2.8, 0.55]];
};
};
_lightleft setLightAttenuation [0.181, 0, 1000, 130];
_lightleft setLightIntensity 10;
_lightleft setLightFlareSize 0.38;
_lightleft setLightFlareMaxDistance 150;
_lightleft setLightUseFlare true;
_lightright = "#lightpoint" createVehicle getPos _vehicle;
sleep 0.2;
_lightright setLightColor _lightBlue;
_lightright setLightBrightness 0.2;
_lightright setLightAmbient [0.1,0.1,1];
switch (typeOf _vehicle) do
{
case "C_Offroad_01_F":
{
_lightright lightAttachObject [_vehicle, [0.37, 0.0, 0.56]];
};
case "C_SUV_01_F":
{
_lightright lightAttachObject [_vehicle, [0.37,-1.2,0.42]];
};
case "C_Offroad_01_repair_F":
{
_lightleft lightAttachObject [_vehicle, [0.37, 0.0, 0.56]];
};
case "C_Van_01_box_F":
{
_lightleft lightAttachObject [_vehicle, [0.67, 0.2, 1.55]];
};
case "O_MRAP_02_F":
{
_lightleft lightAttachObject [_vehicle, [-1, -2.8, 0.55]];
};
};
_lightright setLightAttenuation [0.181, 0, 1000, 130];
_lightright setLightIntensity 10;
_lightright setLightFlareSize 0.38;
_lightright setLightFlareMaxDistance 150;
_lightright setLightUseFlare true;
//ARE YOU ALL HAPPY?!?!?!?!?!?!?!?!?%#?@WGD?TGD?BN?ZDHBFD?GA
_lightleft setLightDayLight true;
_lightright setLightDayLight true;
_leftRed = true;
while{ (alive _vehicle)} do
{
if (!(_vehicle getVariable "lights")) exitWith {};
if (_leftRed) then
{
_leftRed = false;
_lightright setLightBrightness 0.0;
sleep 0.05;
_lightleft setLightBrightness 6;
}
else
{
_leftRed = true;
_lightleft setLightBrightness 0.0;
sleep 0.05;
_lightright setLightBrightness 6;
};
sleep (_this select 1);
};
deleteVehicle _lightleft;
deleteVehicle _lightright
fn_keyHandler.sqf
Spoiler anzeigen
case 38: {
//If cop run checks for turning lights on.
if (_shift && playerSide in [west,independent]) then {
if (!(isNull objectParent player) && (typeOf vehicle player) in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F","C_Offroad_01_repair_F","C_Van_01_box_F","O_MRAP_02_F"]) then {
if (!isNil {vehicle player getVariable "lights"}) then {
if (playerSide isEqualTo west) then {
[vehicle player] call life_fnc_sirenLights;
} else {
[vehicle player] call life_fnc_medicSirenLights;
};
_handled = true;
};
};
};
if (!_alt && !_ctrlKey) then { [] call life_fnc_radar; };
};