Schritt 3. Geht in die dialog\common.hpp und fügt folgende Code ein
hast Du auch gemacht?
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.
Schritt 3. Geht in die dialog\common.hpp und fügt folgende Code ein
hast Du auch gemacht?
TheRedPhynix : mit was hast Du den Server aufgesetzt? übrigens @life_server ist auch ein Server mod
So hier mal ein Ansatz. Ist aber wirklich nur rudimentär und nicht einsatzfähig.
class CFGQuests {
class Quest1 {
name = "Meine erste Quest";
requestedItem[] = {{"ACE_morphine",1}};
requestedVItem[] = {};
resultmoney = 20000;
resultItems = {};
resultVItems = {};
Questdesc = "Hallo %1. Ich bin %2. Du willst Geld verdienen dann bring mir Morphin für meinen Freund hier ich gebe dir dann %3 Tausend bar auf die Hand";
nextQuest = "Quest2";
};
class Quest2 {
name = "Meine zweite Quest";
requestedItem = "ACE_morphine";
requestVItem = "pickaxe";
resultmoney = 20000;
resultItem = "";
Questdesc = "Hallo %1. Ich bin %2. Du willst Geld verdienen dann bring mir Morphin für meinen Freund hier ich gebe dir dann %3 Tausend bar auf die Hand"
};
};
Alles anzeigen
und dazu die fn_questsystem.sqf
#include "..\..\script_macros.hpp"
/*
Author : RLS
*/
params [
["_unit",objNull,[objNull]]
["_caller",objNull,[objNull]]
["_quest","",[""]]
];
if (!isClass (missionConfigFile >> "CFGQuest" >> _quest)) exitWith {};
_curConfig = missionConfigFile >> "CFGQuest" >> _quest;
_name = getText(_curConfig >> "name");
_requestedItem = getArray(_curConfig >> "requestedItem");
_requestedVItem = getArray(_curConfig >> "requestedVItem");
_resultmoney = getNumber(_curConfig >> "resultmoney");
_resultItems = getArray(_curConfig >> "resultItems");
_resultVItems = getArray(_curConfig >> "resultVItems");
_description = getText(_curConfig >> "Questdesc");
_nextQuest = getText(_curConfig >> "nextQuest");
if (_name isEqualTo "" && {_description isEqualTo "" && {(_requestedItem isEqualTo []) || (_requestedVItem isEqualTo [])}}) exitWith {};
if (_resultmoney isEqualTo 0 || _resultItems isEqualTo [] || _resultVItems isEqualTo []) exitWith {};
//hier muss noch geprüft werden
hint format [_description,name _caller, name _unit,_resultmoney];
playSound "hintt";
_unit removeAction _action;
_unit addAction ["Quest 1 Sachen Abgeben","core\RLS\fn_questsystemabgeben1.sqf"]; //das muss geändert werden!
Alles anzeigen
Moin,
mein Vorschlag wäre es nicht wie hier, in einzelne Dateien, siehe. fn_questsystemabgeben1.sqf, immer und immer wieder zu schreiben sondern eine große Config, zumindestens für die Quests die Items zum abgeben brauchen.
das wäre Punkt 2 bei mir
Moin,
ansich eine interessante Idee nur bei der Umsetzung hätte ich da ein paar Sachen zu verbessern .
1. Weshalb rufst Du das Script per "Quest 2 Starten","core\RLS\fn_questsystem1.sqf" auf obwohl Du es auch in den Functions definiert hast?
2. Würde ich eine Config für die Quests anlegen und die Quests von dort auslesen.
3. Ok, wenn man den Fortschritt bei den Quests nicht speichern möchte kann man das so machen ansonsten muss man zu mindestens den Fortschritt irgendwie in der DB speichern.
Bitte nicht böse sein, aber hier wäre noch das eine oder andere zu tun um ein brauchbares Questsystem daraus zu bauen.
Ich finde es aber gut, dass Du deine Ideen mit der Community teilst.
Gruß,
moeck
Moin,
meine Meinung dazu, wenn man sowas macht dann sollte man das Realtime zeugs einbauen und dann einfach prüfen wann die Restartzeit ereicht ist. Idealerweise legt man die Restartzeiten in der Config_Master ab. Das schont auf jeden Fall Ressourcen und man kann die Zeiten an Hande der Realtime und der konfigurierten Restartzeiten berechnen
Gruß,
moeck
Ja das einzige was mich wieder vom Wechsel aufhält ist das es unter Linux keine 64Bit Version gibt.
Aber ja Sonst ist alles besser unter Linux ^^.
Habe ich mich noch nicht mit auseinander gesetzt, da der Server noch in der Entwicklung ist und aktuell bei ca. 8% CPU Auslastung rumdümpelt . Falls notwendig ziehe ich dann einfach noch den HC hoch
Moin zusammen,
da ich gestern schon mal geschrieben hatte, dass ich gern die Konfiguration für die "Blaulichter" in der Config_Vehicle haben möchte hier mal das Tutorial dazu. Ich muss ehrlich gestehen ich habe es noch nicht testen können, daher vorläufig keine Garantie. Des Weiteren könnte man das Ganze sogar noch weiter treiben, da man theoretisch nur noch einmal die fn_copLights benötigt, aber zu einfach mache ich es Euch jetzt auch nicht . Ich werde alle geänderten Dateien als Zip anhängen für die faulen bzw. damit die Formatierung erhalten bleibt.
Folgende Sachen müssen geändert werden:
In der Mission:
1. Config_Vehicle.hpp Achtung nur der Auszug für den Offroader
class C_Offroad_01_F {
vItemSpace = 65;
conditions = "license_civ_driver || {!(playerSide isEqualTo civilian)}";
price = 12500;
ligths[]= {
{"left",{-0.45, 0.0, 0.56},{
{"cop",{20, 0.1, 0.1}} //color Cop Red
,{"med",{0.1, 0.1, 20}} //color Medic Blue
,{"adac",{20, 20, 0.1}} //color Adac Yellow
}
}
,{"right",{0.37, 0.0, 0.56},{
{"cop",{0.1, 0.1, 20}} //color Cop Blue
,{"med",{0.1, 0.1, 20}} //color Medic Blue
,{"adac",{20, 20, 0.1}} //color Adac Yellow
}
}
};
textures[] = {
{ "Red", "civ", {
"\A3\soft_F\Offroad_01\Data\offroad_01_ext_co.paa",
"\A3\soft_F\Offroad_01\Data\offroad_01_ext_co.paa"
}, "" },
{ "Yellow", "civ", {
"\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE01_CO.paa",
"\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE01_CO.paa"
}, "" },
{ "White", "civ", {
"\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE02_CO.paa",
"\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE02_CO.paa"
}, "" },
{ "Blue", "civ", {
"\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE03_CO.paa",
"\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE03_CO.paa"
}, "" },
{ "Dark Red", "civ", {
"\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE04_CO.paa",
"\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE04_CO.paa"
}, "" },
{ "Blue / White", "civ", {
"\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE05_CO.paa",
"\A3\soft_F\Offroad_01\Data\offroad_01_ext_BASE05_CO.paa"
}, "" },
{ "Taxi", "civ", {
"#(argb,8,8,3)color(0.6,0.3,0.01,1)"
}, "" },
{ "Police", "cop", {
"#(ai,64,64,1)Fresnel(1.3,7)"
}, "" }
};
};
Alles anzeigen
Hier gibt es einen neuen Eintrag namens "lights" im Prinzip ist nur der für das Tutorial interessant
2. fn_coplights.sqf
#include "..\..\script_macros.hpp"
/*
File: fn_copLights.sqf
Author: mindstorm, modified by Adanteh and moeck
Link: http://forums.bistudio.com/showthread.php?157474-Offroad-Police-sirens-lights-and-underglow
Description:
Adds the light effect to cop vehicles, specifically the offroad.
*/
params [
["_vehicle", objNull, [objNull]],
["_lightTime", 0.22, [0]]
];
if (isNil "_vehicle" || {isNull _vehicle || {!(_vehicle getVariable "lights") || {!(M_CONFIG(isArray,"LifeCfgVehicles",(typeOf _vehicle),"lights"))}}}) exitWith {};
private _lightLeft = "#lightpoint" createVehicleLocal getPos _vehicle;
private _lightRight = "#lightpoint" createVehicleLocal getPos _vehicle;
sleep 0.2;
private _lights = (M_CONFIG(getArray,"LifeCfgVehicles",(typeOf _vehicle),"lights"));
if !(count _lights isEqualTo 2) exitWith {};
_leftColor = ((_lights select 0) select 2);
_lightLeft setLightColor ((_leftColor select 0) select 1);
_lightLeft lightAttachObject [_vehicle, ((_lights select 0) select 1)];
_lightLeft setLightBrightness 0.2;
_lightLeft setLightAmbient [0.1,0.1,1];
_lightLeft setLightAttenuation [0.181, 0, 1000, 130];
_lightLeft setLightIntensity 10;
_lightLeft setLightFlareSize 0.38;
_lightLeft setLightFlareMaxDistance 150;
_lightLeft setLightUseFlare true;
sleep 0.2;
_lightRight lightAttachObject [_vehicle, ((_lights select 0) select 1)];
_rightColor = ((_lights select 1) select 2);
_lightRight setLightColor ((_rightColor select 1) select 1);
_lightRight setLightBrightness 0.2;
_lightRight setLightAmbient [0.1,0.1,1];
_lightRight setLightAttenuation [0.181, 0, 1000, 130];
_lightRight setLightIntensity 10;
_lightRight setLightFlareSize 0.38;
_lightRight setLightFlareMaxDistance 150;
_lightRight setLightUseFlare true;
_lightLeft setLightDayLight true;
_lightRight setLightDayLight true;
private _leftRed = true;
while {alive _vehicle} do {
if !(_vehicle getVariable "lights") exitWith {};
if (_leftRed) then {
_lightRight setLightBrightness 0.0;
sleep 0.05;
_lightLeft setLightBrightness 6;
} else {
_lightLeft setLightBrightness 0.0;
sleep 0.05;
_lightRight setLightBrightness 6;
};
_leftRed = !_leftRed;
sleep _lightTime;
};
deleteVehicle _lightLeft;
deleteVehicle _lightRight;
Alles anzeigen
Einfach komplett ersetzen .
3. fn_sirenLights.sqf
Dort ersetzt ihr den Eintrag
if (!(typeOf _vehicle 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"])) exitWith {}; //Last chance check to prevent something from defying humanity and creating a monster.
durch
if !(M_CONFIG(isArray,"LifeCfgVehicles",(typeOf _vehicle),"lights")) exitWith {};
4. fn_medicLights.sqf
#include "..\..\script_macros.hpp"
/*
File: fn_medicLights.sqf
Author: mindstorm, modified by Adanteh and moeck
Link: http://forums.bistudio.com/showthread.php?157474-Offroad-Police-sirens-lights-and-underglow
Description:
Adds the light effect to cop vehicles, specifically the offroad.
*/
params [
["_vehicle", objNull, [objNull]],
["_lightTime", 0.22, [0]]
];
if (isNil "_vehicle" || {isNull _vehicle || {!(_vehicle getVariable "lights") || {!(M_CONFIG(isArray,"LifeCfgVehicles",(typeOf _vehicle),"lights"))}}}) exitWith {};
private _lights = (M_CONFIG(getArray,"LifeCfgVehicles",(typeOf _vehicle),"lights"));
if !(count _lights isEqualTo 2) exitWith {};
_lightLeft = "#lightpoint" createVehicleLocal getPos _vehicle;
sleep 0.2;
_leftColor = ((_lights select 0) select 2);
diag_log format ["left %1",str((_leftColor select 1) select 1)];
_lightLeft setLightColor ((_leftColor select 1) select 1);
_lightLeft setLightBrightness 0.2;
_lightLeft setLightAmbient [0.1,0.1,1];
_lightLeft lightAttachObject [_vehicle, ((_lights select 0) select 1)];
_lightLeft setLightAttenuation [0.181, 0, 1000, 130];
_lightLeft setLightIntensity 10;
_lightLeft setLightFlareSize 0.38;
_lightLeft setLightFlareMaxDistance 150;
_lightLeft setLightUseFlare true;
_lightRight = "#lightpoint" createVehicleLocal getPos _vehicle;
sleep 0.2;
_rightColor = ((_lights select 1) select 2);
diag_log format ["right %1",str((_rightColor select 1) select 1)];
_lightRight setLightColor ((_rightColor select 1) select 1);
_lightRight setLightBrightness 0.2;
_lightRight setLightAmbient [0.1,0.1,1];
_lightRight lightAttachObject [_vehicle, ((_lights select 1) select 1)];
_lightRight setLightAttenuation [0.181, 0, 1000, 130];
_lightRight setLightIntensity 10;
_lightRight setLightFlareSize 0.38;
_lightRight setLightFlareMaxDistance 150;
_lightRight setLightUseFlare true;
_lightLeft setLightDayLight true;
_lightRight setLightDayLight true;
private _leftRed = true;
while {alive _vehicle} do {
if !(_vehicle getVariable "lights") exitWith {};
if (_leftRed) then {
_lightRight setLightBrightness 0.0;
sleep 0.05;
_lightLeft setLightBrightness 6;
} else {
_lightLeft setLightBrightness 0.0;
sleep 0.05;
_lightRight setLightBrightness 6;
};
_leftRed = !_leftRed;
sleep _lightTime;
};
deleteVehicle _lightLeft;
deleteVehicle _lightRight;
Alles anzeigen
Auch wieder komplett ersetzen.
5. fn_medicSirenLights
selbes Vorgehen wie bei der fn_sirenLights
Ersetzt die Zeile
if (!(typeOf _vehicle in ["C_Offroad_01_F"])) exitWith {}; //Last chance check to prevent something from defying humanity and creating a monster.
durch
if !(M_CONFIG(isArray,"LifeCfgVehicles",(typeOf _vehicle),"lights")) exitWith {};
6. fn_keyHandler.sqf
Sucht dort nach dem Case 38 und ersetzt dort die Zeile
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"]) then {
durch
if (!(isNull objectParent player) && (M_CONFIG(isArray,"LifeCfgVehicles",(typeOf vehicle player),"lights"))) then {
So damit hätten wir in der Mission auch schon alles erledigt. Machen wir mit dem life_server weiter.
7. life_server - fn_spawnVehicle.sqf
ersetzt die Zeile
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 {
durch
if ((_vInfo select 1) isEqualTo "cop" && (M_CONFIG(isArray,"LifeCfgVehicles",(_vInfo select 2),"lights"))) then {
und die Zeile
if ((_vInfo select 1) isEqualTo "med" && (_vInfo select 2) isEqualTo "C_Offroad_01_F") then {
durch
if ((_vInfo select 1) isEqualTo "med" && (M_CONFIG(isArray,"LifeCfgVehicles",(_vInfo select 2),"lights"))) then {
falls ihr den Headless Client nutzt müsst ihr Schritt 7 natürlich auch in der fn_spawnVehicle.sqf des life_hc wiederholen.
So und damit habt ihr es geschafft. Bitte achtet darauf, dass in allen geänderten Dateien der Include zur script_macros.hpp vorhanden ist
In der Mission: #include "..\..\script_macros.hpp"
im life_server / life_hc: #include "\life_server\script_macros.hpp"
Sonst fliegt auch der Kram um die Ohren.
In diesem Sinne viel Spass damit.
Gruß,
moeck
ähm, du hast vergessen die extDB mit als Servermod zu laden
20:17:18 name | modDir | default | origin | hash | hashShort | fullPath
20:17:18 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
20:17:18 @life_server | @life_server | false | GAME DIR | 1f16465125fda55a5fad6e29b8b1eb060259a886 | 1ff6a17e | /home/arma3server/serverfiles/@life_server
20:17:18 Arma 3 DLC Bundle 2 | dlcbundle2 | true | NOT FOUND | | |
20:17:18 Arma 3 DLC Bundle 1 | dlcbundle | true | NOT FOUND | | |
20:17:18 Arma 3 Tanks | tank | true | GAME DIR | 1687d1a28082a88df48d9a56f2f39bd547c059c4 | df9a305a | /home/arma3server/serverfiles/tank
20:17:18 Arma 3 Tac-Ops | tacops | true | GAME DIR | 681413cb6415a601f1e0728a6c25720be3d49ae4 | e5ebfd02 | /home/arma3server/serverfiles/tacops
20:17:18 Arma 3 Laws of War | orange | true | GAME DIR | 6e8274be7b769cfd0472e7a3034f95f80492ce83 | eaa5b563 | /home/arma3server/serverfiles/orange
20:17:18 Arma 3 Malden | argo | true | GAME DIR | adc7fbd43eabf6acc97aef5f87b2b5e3f2b33b08 | f784a4d6 | /home/arma3server/serverfiles/argo
20:17:18 Arma 3 Jets | jets | true | GAME DIR | 7483cc52ff5decc7a262a40353703f75663c70c2 | 5e99a6c1 | /home/arma3server/serverfiles/jets
20:17:18 Arma 3 Apex | expansion | true | GAME DIR | 559a5cf8309fee9d3297b17f481dd23d0e7c1cdb | 578970e7 | /home/arma3server/serverfiles/expansion
20:17:18 Arma 3 Marksmen | mark | true | GAME DIR | 8a4f6eb4dc1c96b47ea37bc1bafbe161df71dc93 | 267c31c4 | /home/arma3server/serverfiles/mark
20:17:18 Arma 3 Helicopters | heli | true | GAME DIR | 0d9b4822c62634ca9dac79f18f6efab669971211 | 3473e417 | /home/arma3server/serverfiles/heli
20:17:18 Arma 3 Karts | kart | true | GAME DIR | 6b1e56eed8f1e8bf598576c32be2f440eda5bf1f | 5e2d7aba | /home/arma3server/serverfiles/kart
20:17:18 Arma 3 Zeus | curator | true | GAME DIR | bc4789f5b4e1fc0cff757c153778678b2489d718 | eaf13475 | /home/arma3server/serverfiles/curator
20:17:18 Arma 3 | A3 | true | NOT FOUND | | |
20:17:18 ==========================================================================================================================================================================================================
20:17:19 InitSound ...
Alles anzeigen
BlueType die Variable wird noch im keyhandler abgefragt und an anderen Stellen. Man kann sie natürlich auch in der Mission komplett auf life_is_tazed ändern einfache lösung ist aber das einfach in der handleDamage auf life_istazed zurück zu ändern.
so habe den Fehler gefunden! Ändert mal Zeile 22 von if (playerSide isEqualTo civilian && {!life_is_tazed}) then { in if (playerSide isEqualTo civilian && {!life_istazed}) then { da hat wohl wer bei den Variablen gepennt
ja 2 sessions parallel sind im standard möglich. wenn man mehr braucht muss man eine lizenz kaufen?
So Jungs, ich habe mal bissel gebastelt. Damit sollte ein Dialog reichen und ich finde es deutlich übersichtlicher
Moin,
wieso macht ihr 2 unterschiedliche Dialoge für die Cops und Civs bzw. Medics? Ich würde das eher über das Anzeigen oder Ausblenden der Buttons machen oder gibt es einen Grund dafür?
Gruß,
moeck
blackfisch ja ich müsste einfach mal den Pull Request machen nur muss ich dazu erstmal eine saubere Version ziehen. Genauso kann man auch gleich mal das mit den Interactions bei den Medics und den Civs gerade ziehen und ins Standard Framework übernehmen.
blackfisch na ich werde di heute abend mal testen. Ich habe aus Sicherheitsgründen auf jeden fall das mit der P07 mal mit hinzugefügt.
if (currentWeapon _source in ["hgun_P07_snds_F","hgun_P07_F","arifle_SDAR_F"] && _projectile in ["B_9x21_Ball","B_556x45_dual"]) then {
Da ich hier auch ein paar Probleme hatte.
Moin,
ist das nicht eine Standardfunktionalität von Arma? Daher würde ich das vielleicht per Keyhandler lösen ;-).
//Numpad 0
case 82:{
if(_shift) then {_handled = true;};
if ((_shift) && (isNull objectParent player)) then {
[] call life_fnc_playerSkins;
hint "Deine Ausrüstung ist jetzt wieder hübsch";
};
};
nur so als Idee. Habe das pentoxide bei Twitch gesehen . Ich weis ist vielleicht nicht die beste Lösung aber auf jeden Fall ein Workaround
Gruß,
moeck