したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

スクリプトTIPS

82まもる:2019/05/31(金) 21:13:25 ID:bc4OOigk
実施するかは別として、いうことをきかない病になったゴキちゃんのワクチンです。
ペットのミニチュア化システムのソースを持っていないので、ミニチュア化されたものまでは治せないかもしれません。
ミニチュア化のシステムが遠隔厩舎を使う方式なら、併せて治ると思います。

[Scripts\Mobiles\Normal\Beetle.cs] Deserialize() の最後

if (this is Beetle && ControlSlots == 1) // スロット1の個体のみ
{
CurrentTameSkill = 29.1;
}

上記を追加してサーバー再起動すると、ワクチンが発動します。
一度発動した後は、上記の追加コードを削除しても問題ありませんし、残っていたとしてもどうということはありません。
ローカルで一時的にCurrentTameSkillを98.7に設定して再起動した後、29.1になっていることを確認しました。
また、訓練してスロット2になっているゴキは、29.1にならないことも確認しました。

なお、this is Beetleの部分は、一見必要ないように思いますが、Beetleを継承するサブクラスがあったときに影響しないようにするために必要です。

83NARU ◆23uN154idM:2019/06/01(土) 22:11:50 ID:e.ZzRBAQ
>>82
まもちゃん
ありがとうございます。
デシリアライズで書き換え導入しました。
ああ、ServUOまともにしてくれ・・・w

84まもる:2019/06/02(日) 19:44:07 ID:RugYCLwg
>>83
サーバーのH/Wメンテお疲れ様でした〜!^^
あれ、ワクチン発動してない・・・。なぜだろ?うちの生産キャラのゴキはまだ要98.7でした。厩舎に入れてるとダメなのかなぁ。

85まもる:2019/06/03(月) 00:32:40 ID:RugYCLwg
これって、version 0 の古いゴキに対して、220行目にもろに
MinTameSkill = 98.7;
があるので、たぶん MinTameSkill の方が悪さしていますね。
CurrentTameSkill を修正してあげても、その後 MinTameSkill から上書きされている可能性が高いのかも。
となると、古いゴキに対してわざわざ MinTameSkill を 98.7 にしている ServUO 側の意図を知る必要が出てきました・・・。

86まもる:2019/06/03(月) 01:39:12 ID:RugYCLwg
連投すみません。いいかげんゴキのいうこときかない病に終止符を打ちたいので、少し長いですがご容赦ください。

さて、古いゴキの MinTameSkill を 98.7 にしている箇所てすが、コードを素直に読むと、
version = 0 の古いゴキで、現在ペット訓練システムが有効で、スロットが3以下で、追加能力がない(自然体から変更していない)個体に対して、
MinTameSkill = 98.7;
ControlSlotsMin = 1;
ControlSlots = 1;
という処理をやっちゃってます。

そこで、幸い私も本家で訓練システム導入前の古いゴキを持っていたので、確認に行ってまいりました。
その結果、古いゴキはスロット3のままで、要テイムスキル値は30.0でした。

このことから推察すると、ServUOでは、
「古いゴキもスロット1にしてやる代わりに、要テイムスキルを98.7にする。」
という処理をなぜかやってしまったようです。

ラピスでは、このままでは生産キャラが不便だと思いますので、先日のワクチンを少しだけ変更してもう一度試して頂けないでしょうか。

if (this is Beetle && ControlSlots == 1) // スロット1の個体のみ
{
CurrentTameSkill = MinTameSkill = 29.1; // ←★MinTameSkillも治療
}

なお、本家では要スキル30.0になっていてもテイム0でコントロールできましたが、ServUOではペットのコントロール可否判定処理に29.1という直接記載があるため、30.0にするのはやめておいた方がいいです。

87NARU ◆23uN154idM:2019/06/03(月) 06:58:17 ID:cfXdPuZA
>>84-86
まもちゃん
上記処理は既に入れてあります。
でも機能していないようです・・であれば、 version = 0 で profile == null の個体に対しては、の記述を素直に

if (version < 1 && profile == null)
{
MinTameSkill = 29.1;
ControlSlotsMin = 3;
ControlSlots = 3;
}
としちゃったらどうかなぁと考えていますが、まだ実験もなにもしていません汗
いかにもServUOらしい記述だなぁ・・
私も同じくテストを行いたいのですが、プレイヤーキャラでも既に古いゴキを持っていないのですよね。

88まもる:2019/06/03(月) 14:19:15 ID:RugYCLwg
なるさん、おつです。暑いですね〜。
既に MinTameSkill の治療も入れてくださっていたんですね。まさかそれでも効かないなんて・・・。

えと、当該箇所の profile == null っていうのは、おそらくその後に続く || !profile.HasCustomized() 用の assert 的な意味合いが強くて(本当はServUOのこのコーディングの仕方も危険※)、profile を持っていてもスロット1で 98.7 になっちゃってるゴキはありそうなんですよ。

あと、スロット1のゴキに対して単純に MinTameSkill = 29.1 が通用しなかったということであれば、たぶん if (version < 1 && profile == null) の条件を付けても、その中で MinTameSkill = 29.1 が効かないのは同じような気もします。

少なくとも、ServUOのソースに MinTameSkill = 98.7; という数値が書かれたコードが存在していて、実際にその要スキル値になってバグっているという点から、やはりもう少し MinTameSkill を中心に調査した方が無難な気がします。
とりあえず、バグっているゴキをテスト用にほしさんが提供してくださるようで良かったです。
うちでは MinTameSkill と CurrentTameSkill を同時に治療したら効果あったんですけどね・・・。うーむ。

※ 以下は、今回の問題とは直接関係なく、プログラミングの余談です。
ご存知と思いますが、if文の条件内で A || B() という表現で関数呼び出しをしていると、コンパイラによっては、A の条件が成立した時点で B を実行しないコンパイラもあれば、A が成立しても、B() もとりあえず実行してくれるコンパイラもあります。
ここで問題なのは、後者のコンパイラの場合、profile == null であっても .HasCustomized() を実行してしまう点です。

89Hosi:2019/06/03(月) 15:33:02 ID:VUVjzJc6
>古いゴキに対してわざわざ MinTameSkill を 98.7 にしている ServUO 側の意図
手掛かりになるかわかりませんが、その部分が追加された時期のゴキに関する過去ログを貼っておきます。
https://www.servuo.com/threads/animal-taming-problems-after-latest-svn-changes.9932/
https://www.servuo.com/threads/fire-beetle-and-number-of-control-slots.9942/

90まもる:2019/06/03(月) 17:45:20 ID:RugYCLwg
おー!さすがほしさん、アンテナでっかいアレシボ級!
これは参考になりますね〜。ありがとうございます。
残念ながら98.7云々については載っていないので、やっぱりServUOの独断で入れてた可能性が高そうですね。

91ほし:2019/06/03(月) 20:41:37 ID:VUVjzJc6
ごめんなさい、よく見たらもうちょっと古い所にありました。
https://www.servuo.com/threads/pet-slots-vs-control-chance-bug-since-last-update.9602/

92まもる:2019/06/03(月) 20:45:33 ID:RugYCLwg
ゴキ治ってるぅぅ〜!なるさん、あめりあさん、ほしさん、ありがとうございます。

93まもる:2019/06/15(土) 18:04:57 ID:TlzyDcEA
>>82
すみません、ServUO には直接関係ないのですが、一部訂正があります。
今更かもしれませんが this is Beetle の箇所は、正しくは this.GetType() == typeof(Beetle) にすべきでした。
is 演算子の場合は、サブクラスのインスタンスであっても true が返ってしまうので不適切でした。
実際は Beetle を継承したサブクラスがいない(FireBeetleもBaseMount継承)ので影響はありませんでしたが、もしC#を学習している方がいらっしゃった場合に誤った使い方を示したことになってしまうので、改めて訂正させて下さい。失礼いたしました。

94出来るだけ代表プレイヤー名を書いてくださいな名無しさん:2023/01/12(木) 14:07:55 ID:sNaixQ46
|   |  ;|イ|  ∨/>'  ||    .|| |`>==ミ 、 !|ハ    |、   ∧
   |   ; ..;|; |,,ィ彡=.ヘ   ||    .|| | ",,ニニミミヽリ ',     | ヽ_ノ  ゝ
   ',   ', .|| .// /::::::::Y.  ;ゝ   リ. ノ /::::::::::::::::Yヾ、 .',   ノ
    ',   ', ||.∥ i::::::::(..}            ;::::::::::::::::(..} Yi! \"   || i! i!
    ハ  ',..|.i.|| |:::::::::::::|         |:::::::::::::::::::::| .|}}  Y.  ||==
   , ヘ   ' .|| |:::::::::::::|         |:::::::::::::::::::::| .||!_ノ.   ||
   /   .  ハ`.. !::::::::::: |         |:::::::::::::::::::::|  \
.  /  /   / | 丶::::::::ノ           ';::::::::::::::::ノ  / Y   ||
 ,  ,{   ;.   | / l` ´           ゝ-- '    /_.ノ.    ||
 ;  ,{   {  {       ____      / | / \
...;   ,'',   ', /ヘ      |::::::::::::::::::::::: ̄::::ヘ     /__.ノ    ミ //
. |  / |    ∨  ヽ.    ;:::::::::::::::::::::::::::::::::::|   / \     ___//
...| { ハ   {  / ヘ    ';:::::::::::::::::::::::::::::::::;   {   .Y     ̄
 | .| |. ',  r‐<   \   ゝ:::::::::::::::::::::::::ノ    ゝ_,ノ   =||==ヾ
 | .', ! ',  ヘ  ``ー─''''''"´ ̄ ̄ ̄ ̄ ̄ ̄`` ヽ `ヽ..    ..|| ==
 ', ', |  ヘ  丶..______  ィ´         \ )     || ==
  ゝ |  | \  ヽ  /   /    /      <   
..   |  | 〔``ー‐'"   /   ,,ィ/    /   / )   \__/
..   ',  ',___ヽ、___,/   / .〈   ,ィ/     /<      || 
    ',  ;      /   /   ` ニ/   /  ヽ   ___
     ',  .',    / ノ , ィ      ./   / __ノ   //ヘヘ
     ヘ ヘ   ゝー'           (__,,/    `ヽ   |.| //
                              ノ    ̄"


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板