void イベントハンドラ(引数型 arg, 返値型 ret)

public static void イベントハンドラ(引数型 arg, 返値型 ret)
{
  // arg は キーは必ず文字列、値はintもしくはstring
  int あああ = arg["あああ"]; // キーは文字列、値はint
  string いいい = arg["いいい"]; // キーは文字列、値は文字列
}

arg は Dictionary。値はintもしくはstring型

arg は値を取得するために利用します。

C#に慣れている人向けに言えば、argは「Dictionary<string, object>」型 であり、objectは必ずintもしくはstringです。

C#に慣れていない人向けにいえば、argの使い方は、arg["キー"]で値を取得するためにあります。
値は「int(数値)」もしくは「string(文字列)」です。
少数(double)で渡ってきたり、真偽(boolean)で渡ってきたり、別のオブジェクトで渡ってきたりといったことはありません。

ret も Dictionary。値はintもしくはstring型

ret は値を設定することで、挙動を変更させる場合に利用します。

C#に慣れている人向けに言えば、retは「Dictionary<string, object>」型 であり、値を設定する際には、objectは必ずintもしくはstring を設定する必要があります。

C#に慣れていない人向けにいえば、retの使い方は、ret["キー"]で値を設定するためにあります。
値は「int(数値)」もしくは「string(文字列)」にする必要があります。
少数(double)にしたり、真偽(boolean)にしたり、別のオブジェクトを設定したりといったことはできません。

該当のイベントハンドラのargにどのような「キー」と「値」、その値はなんの「型」かを知る例

public static void on武将メッセージ要求時(引数型 arg, 返値型 ret)
{
    foreach (var obj in arg)
    {
        デバッグ出力($"キー:{obj.Key}, 型{obj.Value.GetType()}, 値:{obj.Value}");
    }
}