weil er 4.4r4 verwendet die umstellung auf extdb3 war erst mit 5 glaube ich
Beiträge von moeck
-
-
Grundsätzlich ist alles möglich
. Im ersten Schritt solltest Du die Cop Sachen kopieren und dort das mit der Wanted erntfernen. Alles weitere kann man dann natürlich entwickeln
-
Schau mal in das Repo von Lucian ich glaube er hatte sowas
-
Moin,
also ich habe mir das jetzt Spaßeshalber mal angeschaut. Was ich gut finde, ihr habt gewisse neue Configs angelegt um die Konfiguration zu vereinfachen. Was mir spontan auf gefallen ist, dass ihr bestimmte Sachen nicht aufgeräumt habt. Zum Beispiel das Thema gather und mine
. Genauso das Thema Größe der Rucksäcke oder die VehicleAnimation.
Nur um noch eins zu nennen, hätte man auch die Chance gehabt sich der leidigen cop-, medic- und vehicleInteractionMenus entledigen können. Ich hätte mir doch tatsächlich ein schickes Nachrichtensystem (z.B. Smartphone) gewünscht.
Bitte nicht falsch verstehen, ich persönlich finde es gut, dass man sich über eine Weiterentwicklung des Frameworks Gedanken macht. Falls ihr hier wirklich weitermachen wollte würde ich Euch empfehlen ein Git Repository anzulegen und dort den Code weiter pflegen. Es gibt hier bestimmt Leute, die sich an einer Weiterentwicklung beteiligen. Eine weitere Alternative wäre die Sachen als Feature Request an das Altis Life Framework zu geben. Auch hier gibt es Leute, die sich aktiv an der Weiterentwicklung des "Standard" Frameworks beteiligen.
In diesem Sinne frohes Schaffen,
moeck
-
Moin,
ja das Thema ist bekannt
und wenn Du mal im Forum gesucht hättest wärest Du auch fündig gewurden.
bitte um Hilfe das man ohne Lizenz nicht Verarbeiten kann
Hier geht es zwar um das Thema unter Wasser farmen aber ist genau das selbe Thema. Ich gehe jetzt mal spontan davon aus, dass sich die Bohrinsel auf dem Wasser befindet.
Aktuell wird halt im Framework davon ausgegangen, dass wen man sich im Wasser befindet nur Fische bzw. Schildkröten gesammelt werden.
Code
Alles anzeigen_isWater = surfaceIsWater (visiblePositionASL player); if (playerSide isEqualTo west && {player getVariable ["isEscorting",false]}) exitWith { [] call life_fnc_copInteractionMenu; }; if (LIFE_SETTINGS(getNumber,"global_ATM") isEqualTo 1) then{ //Check if the player is near an ATM. if ((call life_fnc_nearATM) && {!dialog}) exitWith { [] call life_fnc_atmMenu; }; }; if (isNull _curObject) exitWith { if (_isWater) then { _fish = (nearestObjects[player,(LIFE_SETTINGS(getArray,"animaltypes_fish")),3]) select 0; if (!isNil "_fish") then { if (!alive _fish) then { [_fish] call life_fnc_catchFish; }; }; } else { _animal = (nearestObjects[player,(LIFE_SETTINGS(getArray,"animaltypes_hunting")),3]) select 0; if (!isNil "_animal") then { if (!alive _animal) then { [_animal] call life_fnc_gutAnimal; }; } else { private "_handle"; if (playerSide isEqualTo civilian && !life_action_gathering) then { _whatIsIt = [] call life_fnc_whereAmI; if (life_action_gathering) exitWith {}; //Action is in use, exit to prevent spamming. switch (_whatIsIt) do { case "mine" : { _handle = [] spawn life_fnc_mine }; default { _handle = [] spawn life_fnc_gather }; }; life_action_gathering = true; waitUntil {scriptDone _handle}; life_action_gathering = false; }; }; }; };
heißt wenn Du immer Wasser bist kommst du nie an die Stelle wo die fn_gather aufgerufen wird. Schau dir mal den folgenden actionKeyHandler an. https://native-network.net/attachment/129…keyhandler-sqf/ da ist das Problem gelöst wurden.
Gruß,
moeck
-
Und dann schaue dir https://github.com/AsYetUntitled/…pawnVehicle.sqf und das https://github.com/AsYetUntitled/…icleAnimate.sqf an
-
Moin,
also von mir ein klares +1 für vi(m)
.
Ich kann den bisherigen Meinungen zustimmmen. Grundsätzlich sollte man aber niemand an einen Server lassen, der nicht weiß was er tut
. Auch wenn das jetzt ein wenig vom Thema abschweift, gibt es sogar noch eine Steigerung des Ganzen. Ich erlebe momentan ganz oft, dass Leute sich etwas in der Cloud bauen ohne auch nur ansatzweise eine Ahnung davon zu haben was sie da tun.
Aber zurück zum Thema
ich habe ArmA Server sowohl auf Windows als auch Linux Servern betrieben. Klare Erkenntnis , wenn man die Einrichtung erstmal fertig hat läuft es auf beiden Systemen. Falls man einen Linux Server nutzt kann man z.B. LGSM nutzen um den ArmA aber auch andere Gameserver zu betreiben. Hier bekommt man auch gleich eine Überwachung und andere Werkzeuge mitgeliefert.
Bei Windows kommt auch immer wieder die Thematik auf, dass ich mich durch gewisse Dialoge quälen muss um z.B. den automatisierten Restart einzustellen. Auf einem Linux System muss ich nur eine Zeile in die Crontab eintragen.
Ok ich muss auch dazu sagen ich habe auch die entsprechenden Erfahrung im Bereich Linux Server und verzichte nur zu gern auf eine nervige GUI, wenn ich die Sachen auch auf der Shell erledigen kann.
Man kann bestimmt mittlerweile mit Powershell auch auf Windows Systemen einige Sachen anstellen aber was Server angeht fülle ich mich einfach auf Linux deutlich wohler.
Fazit:
Es gibt nicht DAS Betriebssystem sondern es kommt immer auf den Einsatzzweck und die Kenntnisse des Betreibers an. Ich kann nur empfehlen sich vor der Anmietung eines Servers sich mit der Materie zu beschäftigen und vielleicht auch einfach mal einen eigenen Server bei sich zuu Hause aufzusetzen. Hier kann man auch mit den Betriebssystemen spielen z.B. mit Virtualisierung. In der Regel sind aktuelle PC's (einige Laptops) durchaus in der Lage einen virtuelles System zu hosten und zusätzlich mit dem PC auch noch zu testen.
Gruß,
moeck
-
ihr verwendet den falschen db user, auch hier steht alles im log
-
das einfachste gehe in den editor setze das gebäude, verschließe die türen die gesperrt sein sollen und dann exportiere es als sqf
-
Schaue Dir mal das https://community.bistudio.com/wiki/createVehicle/vehicles und das https://community.bistudio.com/wiki/animateSource an. Zum einen findest Du da Informationen zu den Objekten und wie man diese per animateSource bedient
-
In Zeile 456 fehlt eine "}" vor dem Komma
-
Moin,
was heißt bei Dir Rebellen? Ist die Bedingung eine Lizenz oder etwas anderes?
Gruß,
moeck
-
einfach die aktuelle mission sqm aus dem git repo ziehen da ist die reichweite für alle shops auf 5 meter beschränkt
-
ne, die shops sind bei meinem framework komplett in der db
-
Moin,
ich hatte darüber nachgedacht allerdings sind die Shops nicht für die Configs gebaut sondern für das Laden der Sachen aus der DB. Momentan habe ich keinen Bock das auf die Configs umzubauen.
Gruß,
moeck
-
ist ein bekanntes problem und es gibt aktuell dafür keinen fix, dazu müsste man die komplette speichermethode umschreiben
-
bitte mal näher beschreiben. Wann sind die Aufsätze weg? Wenn man die Waffe mit Aufsätzen in der Hand hält oder mit Aufsätzen in den Rucksack packt? Des Weiteren wäre es auch hilfreich wenn du uns mal deine Version des Framework verrätst und hier auch mal die Client-, Server- und extDB Logs anhängst.
-
-
Code
Alles anzeigen#include "..\..\script_macros.hpp" /* File: fn_notification_system.sqf Date: 2016-07-23 18:15:17 Author: Patrick "Lucian" Schmidt Edit: EvoPanker Description: Arguments: 0: Text <STRING> 1: Type <STRING> Allowed RED, GREEN, BLUE, WHITE, BLACK, CYAN, YELLOW, PINK, PURPLE 2: Speed <Number> ["TEXT","COLOR",TIMEinSec] spawn life_fnc_notification_system; 5 Sec Normal 10 Sec Error PINK = Info / Tipp RED = Error / Warnung GREEN = Success YELLOW = SCRIPT_WAIT BLUE = GATHER / MINE / PROCESS SUCCESS WHITE = ADMIN_MENU BLACK = NOT_USED CYAN = SERVER_INFORMATION aka BROADCAST PURPLE = SCRIPT_INFOMATION */ params[ "_text", ["_color","RED",[""]], ["_speed",5,[0]] ]; private _allowedColors = ["RED","GREEN","BLUE","WHITE","BLACK","CYAN","YELLOW","PINK","PURPLE"]; if !(_color in _allowedColors) then {_color = "RED";}; if (isServer || !hasInterface) exitWith {}; disableSerialization; _display = finddisplay 46; /* if (profileNamespace getVariable ["de100_notify",true]) then { playSound "HintExpand"; }; */ private _headerColor = call { if(_color isEqualTo "RED") exitWith {[255,0,0,0.5]}; if(_color isEqualTo "GREEN") exitWith {[0,255,0,0.5]}; if(_color isEqualTo "BLUE") exitWith {[0,0,255,0.5]}; if(_color isEqualTo "WHITE") exitWith {[255,255,255,0.5]}; if(_color isEqualTo "BLACK") exitWith {[0,0,0,0.5]}; if(_color isEqualTo "YELLOW") exitWith {[255,255,0,0.5]}; if(_color isEqualTo "PINK") exitWith {[255,0,255,0.5]}; if(_color isEqualTo "CYAN") exitWith {[0,255,255,0.5]}; if(_color isEqualTo "PURPLE") exitWith {[130,0,255,0.5]}; [0,0,0]; }; /*if (_error) then { [0.538433,0,0,0.8]; } else { [(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843]),(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019]),(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862]),(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])]; };*/ if (_text isEqualType "") then { _text = parseText _text; }; private _Header = _display ctrlCreate ["RscText", -1]; _Header ctrlSetPosition [0.78 * safezoneW + safezoneX, 0.11 * safezoneH + safezoneY, 0.2 * safezoneW, 0.002 * safezoneH]; _Header ctrlSetBackgroundColor _headerColor; _Header ctrlSetFade 1; _Header ctrlCommit 0; _Header ctrlSetFade 0; _Header ctrlCommit 0.4; private _TextField = _display ctrlCreate ["RscStructuredText", -1]; _TextField ctrlSetStructuredText _text; _TextField ctrlSetPosition [0.78 * safezoneW + safezoneX, 0.112 * safezoneH + safezoneY,0.2 * safezoneW, 0.5]; _TextField ctrlCommit 0; _TextField ctrlSetPosition [0.78 * safezoneW + safezoneX, 0.112 * safezoneH + safezoneY,0.2 * safezoneW, ((ctrlTextHeight _TextField)+ (0.002 * safezoneH))]; _TextField ctrlSetBackgroundColor [0,0,0,0.75]; _TextField ctrlSetFade 1; _TextField ctrlCommit 0; _TextField ctrlSetFade 0; _TextField ctrlCommit 0.4; [_TextField,_Header,_speed] spawn { disableSerialization; params ["_TextField","_Header","_speed"]; uiSleep _speed; _TextField ctrlSetFade 1; _TextField ctrlCommit 0.3; _Header ctrlSetFade 1; _Header ctrlCommit 0.3; uiSleep 0.3; ctrlDelete _Header; ctrlDelete _TextField; }; private _posText = (ctrlPosition (_TextField)) select 1; private _posHeader = (ctrlPosition (_Header)) select 1; private _textHigh = (ctrlPosition (_TextField)) select 3; if (count life_open_notifications > 0) then { private _activeNotifications = 0; { private _ctrlHeader = _x select 0; private _ctrlText = _x select 1; if (!isNull _ctrlHeader && !isNull _ctrlText) then { _ctrlHeader ctrlSetPosition [0.78 * safezoneW + safezoneX, (_posHeader + _textHigh + 1.5*(0.002 * safezoneH))]; _ctrlText ctrlSetPosition [0.78 * safezoneW + safezoneX, (_posText + _textHigh + 1.5*(0.002 * safezoneH))]; _ctrlHeader ctrlCommit 0.25; _ctrlText ctrlCommit 0.25; _posText = (_posText + _textHigh + 1.5*(0.005 * safezoneH)); _posHeader = (_posHeader + _textHigh + 1.5*(0.005 * safezoneH)); _textHigh = (ctrlPosition (_ctrlText)) select 3; if (_activeNotifications > 3) then { _ctrlText ctrlSetFade 1; _ctrlHeader ctrlSetFade 1; _ctrlText ctrlCommit 0.2; _ctrlHeader ctrlCommit 0.2; }; _activeNotifications = _activeNotifications + 1; }; } forEach life_open_notifications; }; life_open_notifications = ([[_Header,_TextField]] + life_open_notifications) select {!isNull (_x select 0) && !isNull (_x select 1)}; // Add the Element to the Front of the Array and remove the deleted Arrays
Achtung das kannst Du nicht eins zu eins übernehmen, da der Aufruf gegenüber dem Orginal ein wenig anders aussieht.
-
Moin,
also über missionstart wird das nicht funktionieren aber wenn du eh schon realtime nutzt sollte das kein problem sein. Theoretisch kannst du ja sogar die Position mit in der DB speichern so dass er nach 14 tagen nicht direkt wieder an der selben per random wieder spawned.
Vom Ansatz her würde ich eine Tabelle "Map_Objects" anlegen und dort als Spalten das folgenden einfügen
ID Typ Position / Mapmarker
active Last_use 1 Baustelle baustelle_1 1 2019-04-24 2 Baustelle baustelle_2 0 2019-04-20 3 Trader Trader_1 0 2019-03-20 4 Trader Trader_2 1 2019-04-10 Das kannst ja im life_server, das dann abfragen und dann per select random dir dort eine rausholen wenn die Zeit abgelaufen ist. Den Abgleich kann man über Timestamp/Date-Funktionen realisieren.
Code
Alles anzeigen/* Demoscript life_server random object spawn Autor: moeck */ params [ ["_type","",[""]] ,["_days",14,[0]] ]; private _new = false; if (_type isEqualto "") exitWith { diaglog "Random object spawn: no type specified!"}; private _query = format ["select id,type,mapmarker,active,last_use from mapobjects where type = '%1'",_type]; tickTime = diag_tickTime; private _queryResult = [_query,2,true] 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 { diaglog "no db entry existing"}; if (count _queryResult isEqualTo 0) exitWith { diaglog "no db entry existing"}; // calc the time here // finish calc private _lastmarker = "baustelle_1"; _new = true; // as result of the calc //check time private _spawnmarkers = []; if (_new && {(count _queryResult > 1)}) then { { if !(_x select 2 isEqualTo _lastmarker) then {_spawnmarkers pushbackUnique (_x select 2)}; } foreach _queryResult; _newmarker = selectRandom _spawnmarkers; _query = format ["update mapobjects set active = '1' where mapmarker = '%1'",_newmarker]; _lastmarker = _newmarker; }; _lastmarker call life_fnc_spawnRandomObjects;
So natürlich muss Du dann noch die Objekte auf der Karte platzieren und konfigurieren. Vielleicht hilft es als Denkanstoß.
Gruß,
moeck