【GAME】ARMA3 EXILE MODサーバの旅その96
追記:鯖味噌の密告書が復旧
追記: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でコピーして、表示してるだけです。
今回は、認証周りを変更したので、一切がっさい動かなかったという事です。