Beiträge von Henne
-
-
Ich kann deinen beschriebenen Fehler in der Log nicht erkennen.
Hast du die Mission denn in der Server.cfg eingetragen, dass diese auch gestartet werden soll?
Siehe: https://community.bistudio.com/wiki/server.cfg#Mission_rotation
-
Also in der Serverlog steht folgende Zeile: 14:28:22 Warning Message: Script \life_server\Functions\felixvonstudsinske\Personalausweis not found
Wurden die Scripts entsprechend eingefügt?
-
Da Linux in bezugnehmend zu Arma nicht wirklich Anfänger freundlich ist.
Mir ist nicht klar, was du damit meinst.
Denn Arma installiert man absolut einfach und schnell mit einem Befehl, natürlich nachdem man die SteamCMD installiert hat.Aber für die SteamCMD, sowie für Arma gibt es Anleitungen, denen man nur Schritt für Schritt folgen müsste.
Es ist richtig, dass für viele Linux ein schwerer Einstieg ist.
Das liegt aber vorallem daran, dass sich viele nicht mit der Materie beschäftigen wollen.Wenn du dich wirklich mit der Materie beschäftigen möchtest, dann ist Linux auf jeden Fall eine gute Wahl.
Wenn du dich nicht mit der Materie beschäftigen möchtest, dann ist ein Server sowie das falsche.
-
Die Variable _damage stellt den Schadens-Wert nach dem EventHandler dar.
Mit damage <OBJECT> lässt sich der aktuelle Schadens-Wert abfragen.
Der handleDamage-EventHandler erwartet den Schadens-Wert als Rückgabe.
-
Habe mal schnell das ganze aufgeräumt und minimal umgeschrieben:
Code
Alles anzeigenprivate _sleepDuration = 5; while {true} do { sleep _sleepDuration; { if (_y isEqualTo 0) then {continue}; _y = _y - _sleepDuration; if (_y > 0) then {life_cooldowns set [_x, _y]; continue}; life_cooldowns set [_x, 0]; switch (_x) do { case "life_questCooldownSanta": {systemChat "Santas Bote: Du kannst nun wieder einen Auftrag bei mir abgeben!"}; case "life_questCooldownIngo": {systemChat "Ingo: Du kannst nun wieder einen Auftrag bei mir abgeben!"}; case "life_questCooldownBlaubart": {systemChat "Blaubart: Du kannst nun wieder einen Auftrag bei mir abgeben!"}; case "life_animalcooldown": {hint parseText "<t size='1.3'><t color='#97FFFF'>Du kannst nun wieder</t></t><br></br><t size='1.6'><t color='#8B4513'>Tiere</t></t><br></br><t size='1.5'><t color='#6B8E23'>freisetzen</t>!</t>"}; case "life_medauftragcooldown": {hint parseText "<t size='1.7'><t color='#FF4040'>Auftragscooldown</t></t><br></br><t size='1.5'><t color='#32cd32'>abgelaufen!</t></t>"}; case "life_registrierungcooldown": {systemChat "Du kannst nun wieder bei checkpoints auf eine Registrierung geprüft werden!"}; case "life_checkpointtimer": {life_checkpoint = 0}; case "life_registrierungtimer": { systemChat "Deine Checkpointgenehmigung ist abgelaufen! Beantrage beim nächsten Checkpoint eine neue!"; hint "Deine Checkpointgenehmigung ist abgelaufen! Beantrage beim nächsten Checkpoint eine neue!"; life_registrierung = 0; }; case "life_ceoCooldown": {hint parseText "<t size='1.2'>Du kannst nun wieder einen<br></br><t color='#FF4500'>CEO</t><br></br><t color='#698B22'>einstellen</t>!</t>"}; case "life_ausraubCooldown": {hint parseText "<t size='1.2'>Du kannst nun wieder einen<br></br><t color='#FF4500'>Raub</t><br></br><t color='#698B22'>begehen</t>!</t>"}; default {}; } } forEach (life_cooldowns) }
Damit das ganze funktioniert, muss zuvor eine HashMap erstellt werden:
Code
Alles anzeigenlife_cooldowns = createHashMapFromArray [ ["life_questCooldownSanta", 0], ["life_questCooldownIngo", 0], ["life_questCooldownBlaubart", 0], ["life_animalcooldown", 0], ["life_medauftragcooldown", 0], ["life_registrierungcooldown", 0], ["life_checkpointtimer", 0], ["life_registrierungtimer", 0], ["life_ceoCooldown", 0], ["life_ausraubCooldown", 0] ]
An die Werte aus der HashMap kommt man einfach über diesen Command: life_cooldowns get "life_animalcooldown"
Der ursprüngliche Fehler ist/war, dass die Werte der Cooldowns zwar innerhalb des _x verändert wurden, aber nicht mehr auf die globale Variable gesetzt wurden.
-
Bin gerade nur am Handy, daher schaue ich später nochmal drüber wenn es noch keiner gemacht hat.
Das hier kann man ändern:
_cooldownZeit = _activeCooldowns select _count; -> _cooldownZeit = _x;
life_cooldownNamenStringArray select _count; -> life_cooldownNamenStringArray select _forEachIndex;
Dann kannst du "_count" komplett entfernen.
Zudem hast du hier vermutlich einen Logikfehler:
Denn die "_cooldownZeit" kann ja kleiner als 0 werden.
Also lieber <= 0 prüfen.
-
Damit die Lösung auch hier im Forum steht:
1. Der Vertikale Modus muss umgeschaltet werden (so, dass beim verschieben der Objekte sie sich nicht an der Höhe des Terrain ausrichten)
2. Man platziert die Objekte, die man verwenden möchte, in der Anzahl, die benötigt wird
3. Man setzt über die Objekteigenschaften die Position der Objekte auf die selbe stelle
4. Nun nur noch die Objekte so verschieben, wie sie benötigt wird
-
Mit dem Pflasterstein-Platten habe ich selber schon größere Flächen gepflastert. Auch abschüssige Ecken waren kein Problem.
Was für Probleme meinst du denn?
Mit der Promenade klappt es auch Recht gut.
Ansonsten fällt mir noch der Pier ein, wobei der nicht wirklich schön ist und je nach Platzierung ebenfalls kleine Kanten hat die rausschauen (wenn ich mich gerade richtig entsinne).
-
Es handelt sich hierbei aber um keine Workshop-Mission, sondern um eine standard Mission.
Mit ein bisschen suchen hättest du diese gefunden.
Wenn ich es richtig sehe, ist es in Expansion\Addons\missions_f_exp.pbo/MPScenarios/MP_EscapeFromTanoa.Tanoa.
-
Hier siehst du das HTML, dass von Arma unterstützt wird.
-
Deine "Client Log.txt" ist eigentlich die Serverlog.
Du hast da einen gravierenden Fehler:
Code2021/03/21, 13:38:32 Warning Message: Include file mpmissions\Altis_Life.Altis\dialog\hud_nameTags.h not found. 2021/03/21, 13:38:32 ? Context: Preprocessing file: mpmissions\Altis_Life.Altis\description.ext at 21 2021/03/21, 13:38:32 Cannot include file dialog\hud_nameTags.h 2021/03/21, 13:38:32 Warning Message: Preprocessor failed with error - Invalid file name(empty filename)
Wenn du das gelöst hast, könnte es klappen.
-
Ihr redet hier ja wohl von einem Problem auf der Client-Seite.
Dann ladet doch auch eine Client-Log hoch.
-
Schick uns doch mal diese Dateien
Ist nicht notwendig.
In den case-Fällen fehlt nach dem east ein :.
Es muss also so aussehen: east:
-
Dies reicht vollkommen um den Output umzuleiten:
<START_COMMAND> > <FILE> 2>&1
Je nachdem ob du screen oder ähnliches nutzt, kannst du auch die entsprechende Log-Funktion nutzen. Bei mir sieht das so aus:
screen -L -Logfile <PATH>/<FILE> -mdS <SCREEN_ID> <START_COMMAND>
-
Dialoge werden beim Client dargestellt. Also ist die Client-Log notwendig.
-
Man verwendet aus gutem Grund keine Leerzeichen in Dateinamen.
-
Und sich einige Spiele nochmal kaufen?
Denn einige Spiele lassen sich nur installieren, wenn das Spiel mit dem Account verknüpft ist.
Für alle anderen Spiele nutzt man sowieso den Anonymous Account.
Hast du möglicherweiße den Datenverkehr zustark limitiert?
Also z.B. Ports gesperrt?
-
Auf dem Bild sieht es so aus, als ob der Versatz zwischen den Pier-Objekten immer identisch ist.
Daher vermute ich aktuell eher, dass sich nicht die Objekte bewegen, sondern einfach nur leicht drehen. Hast du das ganze mal geprüft?
Hast du getestet, den fraglichen Bereich in einer seperaten Mission auf dem Server zu testen?
Oder lasse mir mal den Bereich zukommen, dann teste ich den mal auf einem Server.Da du aber schreibst, dass sich die Objekte nur mit Tonic-Life verändern, würde ich das Problem aktuell dort suchen.
-
Nein ist es nicht. Grundsätzlich funktioniert es genauso wie beim Client.
Also <OBJECT> say3D "alarm" würde vollkommen reichen. Siehe hier -> https://community.bistudio.com/wiki/say3D
Aber, wie in der Dokumentation zu erkennen ist, darf das Argument (das Object) global sein, hingegen der Effekt (der Sound) nur lokal ist.
Bedeutet, wenn du das auf dem Server ausführst, wird auf dem Server der Sound abgespielt. Da der Server aber weder eine Position auf der Karte, noch eine Soundausgabe hat, hört man es nunmal nicht.
Also muss der Sound dort abgespielt werden, wo er zu hören sein soll. Das sind nunmal die Clients. Also muss der Code bei den Clients ausgeführt werden.
Da du es aber vom Server aus steuern möchtest, muss der Server allen Client mitteilen, dass sie jetzt von der Quelle einen Sound abspielen sollen.
Um Code bei anderen (in diesem Fall den Clients) ausführen zu lassen, benötigt man remoteExecCall, remoteExec oder eine andere Möglichkeit.
Das schaut dann so aus: [<OBJECT>, "alarm"] remoteExecCall ["say3D", -2]
Das wars auch schon. Mit weiteren Parametern lässt sich das ganze noch verfeinern.
Auch ist die Funktion komplett unnötig.
Um an mehreren Objekten den Sound abzuspielen, wird ein forEach benötigt und das ganze sieht dann so aus:
{[<OBJECT>, "alarm"] remoteExecCall ["say3D", -2]} forEach (<ARRAY OF OBJECTS>)
Um das ganze lässt sich noch auf viele andere Weiße lösen, die mit Sicherheit einige Vorteile haben.
Ich wollte es jetzt aber nur so einfach wie möglich halten.
Was ich noch nicht ganz verstanden habe, ist deine Frage, ob es in die Init muss.
Grundsätzlich ist es so, dass der Sound dann abgespielt wird, wenn der Code ausgeführt wird.
Wenn es in der initServer.sqf ist, dann wird der Sound beim starten der Mission abgespielt. Wenn zu dem Zeitpunkt noch kein Spieler auf dem Server ist, dann wird niemand den Sound hören. Auch werden nachjoinende Spieler keinen Sound hören.
Wenn du davon redest, es in eine Object Init zu packen, ist es so, dass der Code bei jedem ausgeführt wird, wenn die Mission geladen wird. Also sagt jeder Spieler, zu allen Spielern spiel diesen Sound ab.
Ich weiß nicht was du bezwecken möchtest, aber du musst dir vermutlich erstmal Gedanken machen, wann soll was genau passieren.