Melde mich nach langer zeit mal kurz wieder:
AN ALLE, bei denen seit dem Einbau des Scripts, die Listen wie: Garage, Kofferraum, zInventar etc länger zum laden brauchen:
ENTFRENT DAS VEHICLEROTATE!
Melde mich nach langer zeit mal kurz wieder:
AN ALLE, bei denen seit dem Einbau des Scripts, die Listen wie: Garage, Kofferraum, zInventar etc länger zum laden brauchen:
ENTFRENT DAS VEHICLEROTATE!
Eins vorweg:
Hier wird in die Datenbank eingegriffen!
BACKUPS SIND PFLICHT!
Weder ich, noch Native-Network sind für eure Fehler verantwortlich!
Einbau auf EIGENE GEFAHR
Dieses Tutorial sorgt dafür, dass ihr euren Schaden am Auto, sowie die Tankfüllung in der Datenbank speichert.
ES IST NUR AUF "LANDVEHICLE" anwendbar.
Helicopter / Flugzeuge / Boote sind unbetroffen.
Diese nutzen andere Hitpoints
Mir selber waren nur Autos wichtig!
Schritt eins:
Die Datenbank muss erweitert werden:
ALTER TABLE `vehicles`
ADD `fuelstand` float(20,5) NOT NULL DEFAULT '1.00000',
ADD `HitBody` float(20,5) NOT NULL,
ADD `HitEngine` float(20,5) NOT NULL,
ADD `HitFuel` float(20,5) NOT NULL,
ADD `HitLFWheel` float(20,5) NOT NULL,
ADD `HitRFWheel` float(20,5) NOT NULL,
ADD `HitLF2Wheel` float(20,5) NOT NULL,
ADD `HitRF2Wheel` float(20,5) NOT NULL,
ADD `HitLMWheel` float(20,5) NOT NULL,
ADD `HitRMWheel` float(20,5) NOT NULL,
ADD `HitLBWheel` float(20,5) NOT NULL,
ADD `HitRBWheel` float(20,5) NOT NULL
AFTER `inventory`;
Alles anzeigen
Schritt zwei:
ACHTUNG! - FUNKTIONIERT NUR, WENN DIESE DATEIEN NOCH NICHT ANGEPASST WURDEN!
Solltet ihr diese Dateien schon bearbeitet haben, schaut euch die Querys an.
Im Grunde ist es alles was ich mit den *********************************** markiert habe.
Öffne life_server\Functions\System\fn_getVehicles.sqf und ersetzt den Inhalt mit diesem
/*
File: fn_getVehicles.sqf
Author: Bryan "Tonic" Boardwine
Description:
Sends a request to query the database information and returns vehicles.
*/
private["_pid","_side","_type","_unit","_ret","_tickTime","_queryResult","_vFuel","_vHitBody","_vHitEngine","_vHitFuel","_vHitLFWheel","_vHitRFWheel","_vHitLF2Wheel","_vHitRF2Wheel","_vHitLMWheel","_vHitRMWheel","_vHitLBWheel","_vHitRBWheel"];
_pid = [_this,0,"",[""]] call BIS_fnc_param;
_side = [_this,1,sideUnknown,[west]] call BIS_fnc_param;
_type = [_this,2,"",[""]] call BIS_fnc_param;
_unit = [_this,3,ObjNull,[ObjNull]] call BIS_fnc_param;
//Error checks
if(_pid == "" OR _side == sideUnknown OR _type == "" OR isNull _unit) exitWith
{
if(!isNull _unit) then
{
[[[]],"life_fnc_impoundMenu",(owner _unit),false] spawn life_fnc_MP;
};
};
_unit = owner _unit;
_side = switch(_side) do
{
case west:{"cop"};
case civilian: {"civ"};
case independent: {"med"};
default {"Error"};
};
if(_side == "Error") exitWith {
[[[]],"life_fnc_impoundMenu",(owner _unit),false] spawn life_fnc_MP;
};
/*
**************************
* DATENBANK
* ORIGINAL QUERY
* _query = format["SELECT id, side, classname, type, pid, alive, active, plate, color FROM vehicles WHERE pid='%1' AND alive='1' AND active='0' AND side='%2' AND type='%3'",_pid,_side,_type];
**************************
*/
_query = format[
"SELECT
id,
side,
classname,
type,
pid,
alive,
active,
plate,
color,
fuelstand,
HitBody,
HitEngine,
HitFuel,
HitLFWheel,
HitRFWheel,
HitLF2Wheel,
HitRF2Wheel,
HitLMWheel,
HitRMWheel,
HitLBWheel,
HitRBWheel
FROM vehicles
WHERE pid='%1' AND alive='1' AND active='0' AND side='%2' AND type='%3'",
_pid,
_side,
_type
];
waitUntil{sleep (random 0.3); !DB_Async_Active};
_tickTime = diag_tickTime;
_queryResult = [_query,2,true] call DB_fnc_asyncCall;
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(typeName _queryResult == "STRING") exitWith {
[[[]],"life_fnc_impoundMenu",(owner _unit),false] spawn life_fnc_MP;
};
[[_queryResult],"life_fnc_impoundMenu",_unit,false] spawn life_fnc_MP;
Alles anzeigen
Öffne life_server\Functions\System\fn_vehicleStore.sqf und ersetzt den Inhalt mit diesem
/*
File: fn_vehicleStore.sqf
Author: Bryan "Tonic" Boardwine
Description:
Stores the vehicle in the 'Garage'
*/
private["_vehicle","_impound","_vInfo","_vInfo","_plate","_uid","_query","_sql","_unit","_vFuel","_vHitBody","_vHitEngine","_vHitFuel","_vHitLFWheel","_vHitRFWheel","_vHitLF2Wheel","_vHitRF2Wheel","_vHitLMWheel","_vHitRMWheel","_vHitLBWheel","_vHitRBWheel"];
_vehicle = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param;
_impound = [_this,1,false,[true]] call BIS_fnc_param;
_unit = [_this,2,ObjNull,[ObjNull]] call BIS_fnc_param;
if(isNull _vehicle OR isNull _unit) exitWith {life_impound_inuse = false; (owner _unit) publicVariableClient "life_impound_inuse";life_garage_store = false;(owner _unit) publicVariableClient "life_garage_store";}; //Bad data passed.
_vInfo = _vehicle getVariable["dbInfo",[]];
if(count _vInfo > 0) then
{
_plate = _vInfo select 1;
_uid = _vInfo select 0;
};
/*
**************************
* SPRIT
**************************
*/
_vFuel = fuel _vehicle;
/*
**************************
* DAMAGE ZUWEISUNG
**************************
*/
if (_vehicle isKindOf "LandVehicle") then
{
_vHitBody = _vehicle getHitPointDamage "HitBody";
_vHitEngine = _vehicle getHitPointDamage "HitEngine";
_vHitFuel = _vehicle getHitPointDamage "HitFuel";
_vHitLFWheel = _vehicle getHitPointDamage "HitLFWheel";
_vHitRFWheel = _vehicle getHitPointDamage "HitRFWheel";
_vHitLF2Wheel = _vehicle getHitPointDamage "HitLF2Wheel";
_vHitRF2Wheel = _vehicle getHitPointDamage "HitRF2Wheel";
_vHitLMWheel = _vehicle getHitPointDamage "HitLMWheel";
_vHitRMWheel = _vehicle getHitPointDamage "HitRMWheel";
_vHitLBWheel = _vehicle getHitPointDamage "HitLBWheel";
_vHitRBWheel = _vehicle getHitPointDamage "HitRBWheel";
}else{
_vHitBody = 0;
_vHitEngine = 0;
_vHitFuel = 0;
_vHitLFWheel = 0;
_vHitRFWheel = 0;
_vHitLF2Wheel = 0;
_vHitRF2Wheel = 0;
_vHitLMWheel = 0;
_vHitRMWheel = 0;
_vHitLBWheel = 0;
_vHitRBWheel = 0;
};
if(_impound) then
{
if(count _vInfo == 0) then
{
life_impound_inuse = false;
(owner _unit) publicVariableClient "life_impound_inuse";
if(!isNil "_vehicle" && {!isNull _vehicle}) then {
deleteVehicle _vehicle;
};
}
else
{
/*
**************************
* DATENBANK EINTRAG
* ORIGINAL QUERY
* _query = format["UPDATE vehicles SET active='0' WHERE pid='%1' AND plate='%2'",_uid,_plate];
**************************
*/
_query = format[
"UPDATE vehicles SET
active='0',
fuelstand='%3',
HitBody='%4',
HitEngine='%5',
HitFuel='%6',
HitLFWheel='%7',
HitRFWheel='%8',
HitLF2Wheel='%9',
HitRF2Wheel='%10',
HitLMWheel='%11',
HitRMWheel='%12',
HitLBWheel='%13',
HitRBWheel='%14'
WHERE pid='%1' AND plate='%2'",
_uid,
_plate,
_vFuel,
_vHitBody,
_vHitEngine,
_vHitFuel,
_vHitLFWheel,
_vHitRFWheel,
_vHitLF2Wheel,
_vHitRF2Wheel,
_vHitLMWheel,
_vHitRMWheel,
_vHitLBWheel,
_vHitRBWheel
];
waitUntil {!DB_Async_Active};
_thread = [_query,1] call DB_fnc_asyncCall;
//waitUntil {scriptDone _thread};
if(!isNil "_vehicle" && {!isNull _vehicle}) then {
deleteVehicle _vehicle;
};
life_impound_inuse = false;
(owner _unit) publicVariableClient "life_impound_inuse";
};
}
else
{
if(count _vInfo == 0) exitWith
{
[[1,(localize "STR_Garage_Store_NotPersistent")],"life_fnc_broadcast",(owner _unit),false] spawn life_fnc_MP;
life_garage_store = false;
(owner _unit) publicVariableClient "life_garage_store";
};
if(_uid != getPlayerUID _unit) exitWith
{
[[1,(localize "STR_Garage_Store_NoOwnership")],"life_fnc_broadcast",(owner _unit),false] spawn life_fnc_MP;
life_garage_store = false;
(owner _unit) publicVariableClient "life_garage_store";
};
/*
**************************
* DATENBANK EINTRAG
* ORIGINAL QUERY
* _query = format["UPDATE vehicles SET active='0' WHERE pid='%1' AND plate='%2'",_uid,_plate];
**************************
*/
_query = format[
"UPDATE vehicles SET
active='0',
fuelstand='%3',
HitBody='%4',
HitEngine='%5',
HitFuel='%6',
HitLFWheel='%7',
HitRFWheel='%8',
HitLF2Wheel='%9',
HitRF2Wheel='%10',
HitLMWheel='%11',
HitRMWheel='%12',
HitLBWheel='%13',
HitRBWheel='%14'
WHERE pid='%1' AND plate='%2'",
_uid,
_plate,
_vFuel,
_vHitBody,
_vHitEngine,
_vHitFuel,
_vHitLFWheel,
_vHitRFWheel,
_vHitLF2Wheel,
_vHitRF2Wheel,
_vHitLMWheel,
_vHitRMWheel,
_vHitLBWheel,
_vHitRBWheel
];
waitUntil {!DB_Async_Active};
_thread = [_query,1] call DB_fnc_asyncCall;
//waitUntil {scriptDone _thread};
if(!isNil "_vehicle" && {!isNull _vehicle}) then {
deleteVehicle _vehicle;
};
life_garage_store = false;
(owner _unit) publicVariableClient "life_garage_store";
[[1,(localize "STR_Garage_Store_Success")],"life_fnc_broadcast",(owner _unit),false] spawn life_fnc_MP;
};
Alles anzeigen
Öffne life_server\Functions\System\fn_spawnVehicle.sqf und ersetzt den Inhalt mit diesem
/*
File: fn_spawnVehicle.sqf
Author: Bryan "Tonic" Boardwine
Description:
Sends the query request to the database, if an array is returned then it creates
the vehicle if it's not in use or dead.
*/
private["_vid","_sp","_pid","_query","_sql","_vehicle","_nearVehicles","_name","_side","_tickTime","_dir","_vFuel","_vHitBody","_vHitEngine","_vHitFuel","_vHitLFWheel","_vHitRFWheel","_vHitLF2Wheel","_vHitRF2Wheel","_vHitLMWheel","_vHitRMWheel","_vHitLBWheel","_vHitRBWheel"];
_vid = [_this,0,-1,[0]] call BIS_fnc_param;
_pid = [_this,1,"",[""]] call BIS_fnc_param;
_sp = [_this,2,[],[[],""]] call BIS_fnc_param;
_unit = [_this,3,ObjNull,[ObjNull]] call BIS_fnc_param;
_price = [_this,4,0,[0]] call BIS_fnc_param;
_dir = [_this,5,0,[0]] call BIS_fnc_param;
_unit_return = _unit;
_name = name _unit;
_side = side _unit;
_unit = owner _unit;
if(_vid == -1 OR _pid == "") exitWith {};
if(_vid in serv_sv_use) exitWith {};
serv_sv_use pushBack _vid;
/*
**************************
* ORIGINAL QUERY
* _query = format["SELECT id, side, classname, type, pid, alive, active, plate, color FROM vehicles WHERE id='%1' AND pid='%2'",_vid,_pid];
**************************
*/
_query = format["SELECT id, side, classname, type, pid, alive, active, plate, color, fuelstand, HitBody, HitEngine, HitFuel, HitLFWheel, HitRFWheel, HitLF2Wheel, HitRF2Wheel, HitLMWheel, HitRMWheel, HitLBWheel,HitRBWheel FROM vehicles WHERE id='%1' AND pid='%2'",_vid,_pid];
waitUntil{sleep (random 0.3); !DB_Async_Active};
_tickTime = diag_tickTime;
_queryResult = [_query,2] call DB_fnc_asyncCall;
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(typeName _queryResult == "STRING") exitWith {};
_vInfo = _queryResult;
if(isNil "_vInfo") exitWith {serv_sv_use = serv_sv_use - [_vid];};
if(count _vInfo == 0) exitWith {serv_sv_use = serv_sv_use - [_vid];};
if((_vInfo select 5) == 0) exitWith
{
serv_sv_use = serv_sv_use - [_vid];
[[1,format[(localize "STR_Garage_SQLError_Destroyed"),_vInfo select 2]],"life_fnc_broadcast",_unit,false] spawn life_fnc_MP;
};
if((_vInfo select 6) == 1) exitWith
{
serv_sv_use = serv_sv_use - [_vid];
[[1,format[(localize "STR_Garage_SQLError_Active"),_vInfo select 2]],"life_fnc_broadcast",_unit,false] spawn life_fnc_MP;
};
if(typeName _sp != "STRING") then {
_nearVehicles = nearestObjects[_sp,["Car","Air","Ship"],10];
} else {
_nearVehicles = [];
};
if(count _nearVehicles > 0) exitWith
{
serv_sv_use = serv_sv_use - [_vid];
[[_price,_unit_return],"life_fnc_garageRefund",_unit,false] spawn life_fnc_MP;
[[1,(localize "STR_Garage_SpawnPointError")],"life_fnc_broadcast",_unit,false] spawn life_fnc_MP;
};
_query = format["UPDATE vehicles SET active='1' WHERE pid='%1' AND id='%2'",_pid,_vid];
waitUntil {!DB_Async_Active};
[_query,false] spawn DB_fnc_asyncCall;
if(typeName _sp == "STRING") then {
_vehicle = createVehicle[(_vInfo select 2),[0,0,999],[],0,"NONE"];
waitUntil {!isNil "_vehicle" && {!isNull _vehicle}};
_vehicle allowDamage false;
_hs = nearestObjects[getMarkerPos _sp,["Land_Hospital_side2_F"],50] select 0;
_vehicle setPosATL (_hs modelToWorld [-0.4,-4,12.65]);
sleep 0.6;
} else {
_vehicle = createVehicle [(_vInfo select 2),_sp,[],0,"NONE"];
waitUntil {!isNil "_vehicle" && {!isNull _vehicle}};
_vehicle allowDamage false;
_vehicle setPos _sp;
_vehicle setVectorUp (surfaceNormal _sp);
_vehicle setDir _dir;
};
_vehicle allowDamage true;
/*
**************************
* TANK FÜLLUNG
**************************
*/
_vehicle setFuel (_vInfo select 9);
/*
**************************
* DAMAGE ZUWEISUNG
**************************
*/
_vHitBody = (_vInfo select 10);
_vHitEngine = (_vInfo select 11);
_vHitFuel = (_vInfo select 12);
_vHitLFWheel = (_vInfo select 13);
_vHitRFWheel = (_vInfo select 14);
_vHitLF2Wheel = (_vInfo select 15);
_vHitRF2Wheel = (_vInfo select 16);
_vHitLMWheel = (_vInfo select 17);
_vHitRMWheel = (_vInfo select 18);
_vHitLBWheel = (_vInfo select 19);
_vHitRBWheel = (_vInfo select 20);
/*
***********************************
* DAMAGE ZUWEISUNG
* NUR BEI FAHRZEUGEN
* FLUGZEUGE / BOOTE / HUBSCHRAUBER
* SIND NICHT INBEGRIFFEN!!
* DEREN DAMAGEPOINTS SIND ANDERS!
***********************************
*/
if (_vehicle isKindOf "LandVehicle") then
{
_vehicle setHitPointDamage ["HitBody",_vHitBody];
_vehicle setHitPointDamage ["HitEngine",_vHitEngine];
_vehicle setHitPointDamage ["HitFuel",_vHitFuel];
_vehicle setHitPointDamage ["HitLFWheel",_vHitLFWheel];
_vehicle setHitPointDamage ["HitRFWheel",_vHitRFWheel];
_vehicle setHitPointDamage ["HitLF2Wheel",_vHitLF2Wheel];
_vehicle setHitPointDamage ["HitRF2Wheel",_vHitRF2Wheel];
_vehicle setHitPointDamage ["HitLMWheel",_vHitLMWheel];
_vehicle setHitPointDamage ["HitRMWheel",_vHitRMWheel];
_vehicle setHitPointDamage ["HitLBWheel",_vHitLBWheel];
_vehicle setHitPointDamage ["HitRBWheel",_vHitRBWheel];
};
//Send keys over the network.
[[_vehicle],"life_fnc_addVehicle2Chain",_unit,false] spawn life_fnc_MP;
[_pid,_side,_vehicle,1] call TON_fnc_keyManagement;
_vehicle lock 2;
//Reskin the vehicle
[[_vehicle,_vInfo select 8],"life_fnc_colorVehicle",nil,false] spawn life_fnc_MP;
_vehicle setVariable["vehicle_info_owners",[[_pid,_name]],true];
_vehicle setVariable["dbInfo",[(_vInfo select 4),_vInfo select 7]];
//_vehicle addEventHandler["Killed","_this spawn TON_fnc_vehicleDead"]; //Obsolete function?
[_vehicle] call life_fnc_clearVehicleAmmo;
//Sets of animations
if((_vInfo select 1) == "civ" && (_vInfo select 2) == "B_Heli_Light_01_F" && _vInfo select 8 != 13) then
{
[[_vehicle,"civ_littlebird",true],"life_fnc_vehicleAnimate",_unit,false] spawn life_fnc_MP;
};
if((_vInfo select 1) == "cop" && (_vInfo select 2) in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F"]) then
{
[[_vehicle,"cop_offroad",true],"life_fnc_vehicleAnimate",_unit,false] spawn life_fnc_MP;
};
if((_vInfo select 1) == "med" && (_vInfo select 2) == "C_Offroad_01_F") then
{
[[_vehicle,"med_offroad",true],"life_fnc_vehicleAnimate",_unit,false] spawn life_fnc_MP;
};
[[1,"Your vehicle is ready!"],"life_fnc_broadcast",_unit,false] spawn life_fnc_MP;
serv_sv_use = serv_sv_use - [_vid];
Alles anzeigen
Also heißt es nicht "Würd mich auch mal interessieren" sondern "Lieber stolzerrabe, würdest du das ganze bitte auch für das normale Altis Life etwas umbauen?"
Ok... Werde mich die Tage dransetzten...
Verspreche aber keinen Schnellen Erfolg.
Sobald es drin ist, werde ich es zur Verfügung stellen.
@nox werde mich bei dir eh noch melden - Privat ist nur gerade wieder viel um die Ohren -
Danke dir... Dachte vor ein paar Tage noch "GPS Tracker..." xD
Hast mir viel arbeit erspaart
an das Ende jeder Datei, in der du den speedcheck eingebaut hast, kommt in der letzten Zeile
speedcheck = 0;
//Nachrüstblaulicht Malibu 02.06.2016
if(EQUAL(SEL(_vInfo,1),"med") && (SEL(_vInfo,2)) in ["gek_g65"]) then {
[_vehicle,"med_car",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit];
};
case "gek_g65":
{
_light = "Land_runway_edgelight_blue_F" createVehicle position _vehicle;
_light attachTo [_vehicle, [0.6, 0, 0] ];
};
Du übergibst an die fn_vehicleAnimate.sqf den namen: "med_car"
und die vehicleAnimate hat eine Case von: "gek_g65"
Das geht so nicht!
Die Case muss den Selben namen haben, den du übergibst!
Schau als vergleich:
Hier wird der name "civ_littlebird" übergeben
//Sets of animations
if(EQUAL(SEL(_vInfo,1),"civ") && EQUAL(SEL(_vInfo,2),"B_Heli_Light_01_F") && !(EQUAL(SEL(_vInfo,8),13))) then {
[_vehicle,"civ_littlebird",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit];
};
und auch als "civ_littlebird" ausgeführt!
Alles anzeigencase "civ_littlebird":
{
_vehicle animate ["addDoors",1];
_vehicle animate ["addBenches",0];
_vehicle animate ["addTread",0];
_vehicle animate ["AddCivilian_hide",1];
_vehicle lockCargo [2,true];
_vehicle lockCargo [3,true];
_vehicle lockCargo [4,true];
_vehicle lockCargo [5,true];
};
Habs gefunden =)
PMC...
Man suche einfach nach pg_services_pmc.pbo und findet Server mit einer index of/ wo alles gelistet ist =)
Benötigt werden:
Weil ich nicht weiss, ob ich diese Dateien (Da PG Services nicht mehr weitergeführt wird) hier verlinken darf,
soll mich einfach jeder anschreiben, der diese auch haben möchte:
DANKE =)
Ich suche schon seit 4 Monaten und dann kommst du
oO Noch nie gesehen
Genauer wäre es so besser
life_server\Functions\Systems\fn_spawnVehicle.sqf
if(EQUAL(SEL(_vInfo,1),"med") && EQUAL(SEL(_vInfo,2),"FAHRZEUGKLASSE")) then {
[_vehicle,"FAHRZEUGKLASSE",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit];
};
Und in der core\config\fn_vehicleAnimate.sqf
Dort in der switch (_animate) do eine neue Case:
Original:
if(EQUAL(SEL(_vInfo,1),"civ") && EQUAL(SEL(_vInfo,2),"B_Heli_Light_01_F") && !(EQUAL(SEL(_vInfo,8),13))) then {
[_vehicle,"civ_littlebird",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit];
};
Es wird für das Fahrzeug _vehicle genutzt!
Du nutzt _veh
So sollte es sein:
_licht = "Land_runway_edgelight_blue_F" createVehicle position _vehicle;
_licht attachTo [_vehicle, [0.6, 0, 0] ];
TFR nutze ich ja auch.
Nur mag ich diese RIESEN Rucksäcke nicht.
Habe schon normale und unsichtbare Rucksäcke als LongRange Rucksack eingebaut.
Jedoch würde ich mich freuen, wenn jemand mir damit helfen kann.
Das sieht einfach besser aus, als diese Rucksäcke.
Wenn ich modden könnte, würde ich mir das selber bauen -.-
Weiss jemand von euch, oder hat jemand von euch diese Mod / pbo file?
Ich weiss nur, das dieses Teil im Nightvision Slot ist.
TYRK / ESSGoogles hat es nicht drin!
Nein.
Wenn du auf deinem Server TFR installierst, ist in dem TFR-Odner eine task_force_radio_pipe.dll.
Diese kommuniziert mit der task_force_radio_win32.dll oder der task_force_radio_win64.dll, je nachdem, welche du im Teamspeak Ordner unter Plugins abgelegt hast.
(Sofern das Plugin auch aktiviert ist)
Joinst du nun auf dem Server, auf dem TFR läuft, und bist NICHT auf dem Ts, bekommst du keine Meldung, dass du auf den TS-Server YXZ musst.
Es erscheint lediglich ein hinweis "PIPE ERROR 9" (rechts unten am Bildschirm)
Connectest du nun auf einen TS3 Server, der den Channel taskforceradio (standard) eingestellt hast, wirst du darin verschoben, und im Spiel wird es aktiviert.
Hat der Gameserver XXC nun TFR so konfiguriert, dass er nicht den Channel taskforceradio, sondern zB TFRXXC nuzt, und du gehst auf einen fremden TS, wo dieser Channel fehlt,
passiert nichts.
Anders rum:
Bist du im TS mit aktiviertem TFR Plugin und connectest auf einen Server ohne TFR Unterstützung passiert nichts.
Ich würde es mal mit waitUntil probieren wie beim Spawnmenü (initMedic.sqf)
waitUntil{isNull (findDisplay 60001)};
call deine Datei
#nur ne Idee
I´ll give a try
Mein Auszug aus der Konversation:
Er hat die houses Tabbelle so erstellt
(hat er mir gesendet)
CREATE TABLE IF NOT EXISTS `houses` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pid` varchar(32) NOT NULL,
`pos` varchar(64) DEFAULT NULL,
`owned` tinyint(4) DEFAULT '0',
PRIMARY KEY (`id`,`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
Abgefragt werden:
SELECT pid, pos,inventory, containers FROM houses WHERE pid='%1' AND owned='1'
Er benutzt nach Version hier im Thread die 3.1.4.8
Die lautet aber so:
Hey Leute,
ich bin seit ein paar Tagen dran, ein komplett anderes ZInventar zu machen, wobei zB die Items und Lizenzen auf einem eigenem Button liegen.
Sprich ich öffne das Invetar -> Klicke auf Items -> Dort werden sie gelistet.
Sprich ich öffne das Invetar -> Klicke auf Lizenzen -> Dort werden sie gelistet.
Funktioniert auch!
Mein Problem:
Klicke ich nun auf ein anden Punkt. ZB Bank, und gehe zurück zu Lizenzen, werden diese nicht gelistet, alles andere (Gewicht, Konto, Cash) jedoch schon!.
Schließe ich das Menü komplett, und öffne es mit Z wieder, funktioniert es wieder.
DAS SELBE SPIEL IST MIT ITEMS!
Der Aufruf der Dialoge funktioniert so, wie es standardmäßig mit der life_fn_p_openMenu / life_fn_p_updateMenu ist.
RPT Logs gibt es leider keine.
Diese ist sauber.
Ein Check, ob das Richtige Display angezeigt wird, war erfolgreich.
Es ist sehr kurios, dass alles andere angezeigt wird, nur die foreach schleife wird einmalig nur angezeigt...
Beispielecodes:
LIZENZEN Update:
_side = switch(playerSide) do {case west:{"cop"}; case civilian:{"civ"}; case independent:{"med"};};
_dialog = findDisplay 60001;
_lic = _dialog displayCtrl 60061;
_struct = "";
ctrlSetText[60011,format["Gewicht: %1 | %2",life_carryWeight,life_maxWeight]];
ctrlSetText[60041,format["Bargeld: %1",[life_cash] call life_fnc_numberText]];
ctrlSetText[60051,format["Konto: %1",[life_atmcash] call life_fnc_numberText]];
{
if((_x select 1) == _side) then
{
_str = [_x select 0] call life_fnc_varToStr;
_val = missionNamespace getVariable (_x select 0);
if(_val) then
{
_struct = _struct + format["%1<br/>",_str];
};
};
} foreach life_licenses;
if(_struct == "") then{ _struct = "Keine"; };
_lic ctrlSetStructuredText parseText format["<t size='1px'>%1</t>",_struct];
Alles anzeigen
So wird jedes Dialog aufgerufen:
if(!alive player) exitWith {closedialog 0;};
if(dialog) then {closedialog 0;};
createDialog "playerSettings_items";
disableSerialization;
[] call life_fnc_razr_updateMenu_lizenzen;
Es ist auch unerheblich, ob ich mit
onButtonClick = "closedialog 0; createdialog ""playerSettings_lizenzen""; [] call life_fnc_razr_updateMenu_lizenzen;";
das Dialogfeld sofort erstelle, oder ob ich es über die openMenu datei mache:
onButtonClick = "[] call life_fnc_razr_openMenu_lizenzen";
Das Verhalten ist bei beiden verfahren identisch!
Es fehlt jedesmal die foreach schleife...
Für ein besseres Verständnis, habe ich mal das Problem Skizziert.
Ich selber arbeite noch mit der 3.1.4.8,
werde wohl aber bald umsteigen.
Als Einsteiger würde ich die 4.4 Empfehlen, da du dann gleich die neue Struktur lernst.
Nimmst du erst die 3.1.4.8, und entscheidest dich um, musst du umlernen. - Was sicher nicht schwierig ist, aber ein Mehraufwand. -
Steam -> Arma 3 Tools -> Publisher