前回エラそうに「次回でソース公開~」と言っておきながら、まだ引っ張っていますorz
基本形は問題なく実装できているのですが、2点迷ってる箇所があり、なかなか解決に踏み切れていません。
どちらも形式上の問題でいわゆる「こだわり」の内容ですが、気にしだすと色々と変えたくなる性分でして・・・
だらだらと悩んでいても進まないので、内容と解決案を出してみます。
①monster定義の拡張について
理想としては、既存のmonster定義を流用し、後ろに墓標用の拡張定義を追加する形↓でした。
gef_dun02.gat,0,0,0,0 monster ドッペルゲンガー 1046,1,7200000,3600000,(eventname),(guild_id),(tombnpc_id),(tombnpc_duplicate),(tombnpc_name)
※赤文字部分が墓標の拡張定義
が、ここで邪魔になるのが(eventname)と(guild_id)です。
どちらも省略可能な定義であり、処理内ではsscanf()のカンマ問題により、解析時に特殊な例外処理が入っています。
要するに、この省略時の例外処理を様々なパターンを想定して拡張させる ⇒ 解析処理を作り直したくなってくる ⇒ 面倒臭い
という状態です。
解決案として、ここはすっぱり既存のmonster定義を拡張するのを諦めて、新しい墓標用のmonster定義(tombmonster?)を追加する形に逃げたいと思います。
②ソースから操作するNPC依存変数について
討伐時間や討伐者をソース側から情報を渡してスクリプト変数を操作する予定でしたが、
やっぱり責務を考えると気に入らないです。
討伐時間や討伐者情報なんていらないNPCも考えられ、不要な処理となりがちですし、
スクリプト上に明記していない変数が内部的に書き換えられるのが気持ち悪くなってきました。
解決案として、「OnTombKilled」のようなイベントラベルを用意し、モンスター死亡時にイベント実行させるようなことが出来ないかな~と考えています。
イベントラベルによって、討伐者をアタッチさせれば討伐者情報も取得できますし、不要であればイベントラベルを書かなくて済み、かなり理想的な形になりそうです。
一度イベントラベルを実行させる形で実装してみます。
だらだらと書いていますが、これで進めそうです。
ソース公開まで、もうしばらくお待ちください。