【GAME】ARMA3 EXILE MODサーバの旅その96

2019年5月27日プライベートarma3,dayz,exile,mod,server

追記:鯖味噌の密告書が復旧

追記:Chernarus reduxマップでの動作確認

追記:忘却の修正

追記:プレーヤーデータ忘却機能(サーバ)

先程、自作アドオンを、EXILE MOD公式にて、正式に公開致しました。

[Released] Loot-box add-on by nabek(゚∀゚)ノ

過酷過ぎたサーバの旅にて、何度も、情報を得るため舐めるように観まくったウェブサイトです。

恥ずかしいやら、なんやらです。

(;´∀`)

一応、多少なりとも貢献が出来たという事で、感激です。

名だたる有名なアドオンのすぐ直下に、わたしのアドオンが。。

すぐ、下に追いやられるでしょう。記念のスクショですw

(;^ω^)

これも、世界共通語になる英訳の協力者による所が最も大きい。感謝で御座います。

追記:プレーヤーデータ忘却機能

ゲーム内には、既にインしてないプレーヤーさん達の遺物が結構残ってます。無論、サーバ負荷になり得ます。

Exileでは、デフォルトで、1週間程度で車両が消えるなどで対処されてますが、あいにく、うちのサーバでは3ヶ月程度に伸ばしまくってます。

あと、プレーヤースコアランキングなるウェブサイトがあるから、なのかもしれませんが、これに関して、ある機能を入れ込みました(前々から案内してたもの)

名付けて、忘却機能!m9( ゚д゚)

リスペクト(尊敬)を上げた所で、時間が立てば、人々から忘れ去られる。

車両だって、古くなれば、壊れやすくなる。

ポケットにだって、穴ぐらい、空いてたりもする訳・・です。

インしなくなって、1週間が立つとリスペクト&ポップタブが1%程度減っていきます。車両は、初期スポーンからのカウントで、ガソリン・ダメージが2%程度、ランダムで、ロックが外れちゃう。

リスタート毎なので、チリも積もれば・・という感じにしてます。

(;^ω^)そんな機能です。

サーバ的には、リスタート時にこれらのプログラムを動かす事になります。とってもシンプルです。

SQLコードを実行するだけのPythonコードで、SQLを流してるだけです(セキュリティ的には問題有り、中にSQL埋め込んでも良いですね)

これを、サーバ終了後辺りに埋め込んで置けば良いだけです。

SQLコードは、こんなです。一応、これで動いてます。

リスペクトの減衰(前回インから1週間後)

UPDATE exile.account as a
SET a.score = truncate(a.score * 0.98,0)
WHERE last_disconnect_at IS NOT NULL and (a.score > 100) and (a.last_disconnect_at < now() – INTERVAL 7 DAY)
;

ポップタブの減衰(前回インから1週間後)

UPDATE exile.player as p,
     (SELECT a.uid
     FROM exile.account as a
     WHERE (a.last_disconnect_at IS NOT NULL) and (a.last_disconnect_at < now() – INTERVAL 7 DAY))as ac
SET p.money = truncate(p.money * 0.98,0)
WHERE (ac.uid = p.account_uid) and (p.money > 100)
;

車両の故障&ポップタブ減衰&ガソリンの気化(初期から1週間後)

UPDATE exile.vehicle as v
SET v.fuel = truncate(v.fuel * 0.97,6),
     v.damage = IF(v.damage=0,0.1,truncate(v.damage * 1.02,6)),
     v.money = truncate(v.money * 0.98,0)
WHERE (v.spawned_at < now() – INTERVAL 7 DAY) AND (v.damage < 0.95)
;

車両のロック外れ(初期から1ヶ月・確率)

UPDATE exile.vehicle as v
SET v.is_locked = 0
WHERE (v.spawned_at < now() – INTERVAL 1 MONTH) AND (v.is_locked = -1) AND (RAND() < 0.1)
;

シンプルですので、改造も容易でしょう。

追記:忘却の修正

車両がアップデートされなくなると、一定でサーバから削除されますが、何を見て判断してるのかというと。

DB内のlast_updated_atになるのですが、上記の忘却機能を入れ込んじゃうと、自動でこの項目が更新されてしまいます。

よって、忘却機能で、車両ダメージを”破壊”まで持っていく事にします。これで、解決です。

ですが、SQL内の計算によってダメージを入れ込んでるので、setDammageに0~1を超える値を入れても動作するのかが気になったので確かめた。

1を超えれば、どんな値でも爆発してくれるようですw

(;^ω^)えがった

よって、忘却の車両SQLはこーしました。

UPDATE exile.vehicle as v
SET v.fuel = truncate(v.fuel * 0.95,6),
     v.damage = IF(v.damage<0.1,0.1,truncate(v.damage * 1.03,6)),
     v.money = truncate(v.money * 0.95,0)
WHERE (v.spawned_at < now() – INTERVAL 7 DAY)
;
/* AND (v.damage < 0.95)
;*/

初期スポーンから、7日後から適用されて、ガス&ポップタブが5%程度消失します。ダメージは、3%加算といった具合。最初ノーダメ(10%以下)だった場合は、10%にします。

サーバによる車両削除が不要になります(というか、機能しなくなる)

追記:Chernarus reduxマップでの動作確認

チェルナルスReduxのマップでの動作確認を実施。

一応、エラー無く動作してるようです。自動認識した軍事施設は3箇所。すべて空港なので、手動での登録が必要っぽい。

バンディットの動作もOK。

やっぱ、チェルノ雰囲気ありますね。

テント発見。

どーなんでしょ。建物オブジェクトに、AI配置用のデータが無いのか、少ないのか、ほとんどが屋外設置になってしまってるようです。

早速、マップの開発者にご報告w

(;^ω^)

追記:鯖味噌の密告書が復旧

ウェブサーバのOS全更新に伴って、密告書のシステムが停止してました。

先程、復旧しました。すげー疲れた

(;´Д`)

作業はメモっておきましょう。すっかり忘れてましたw

仕組みは、arma3サーバ側のデータベース(MySQL)から、定時で情報を抜き取って、jsonファイルを作っておきます。

それを、ウェブサーバに、SCPでコピーして、表示してるだけです。

今回は、認証周りを変更したので、一切がっさい動かなかったという事です。

2019年5月27日プライベートarma3,dayz,exile,mod,server

Posted by nabe