記事一覧

【インスタントアイテム 最終回】ボツ気味

■過去の記事
【インスタントアイテム 第1回】妄想

即席アイテムのソース一式を公開しました。こちらからどうぞ。
(上部メニュー「メモ」→「ダウンロード」の「インスタントアイテム」にあります。)

db/item_instant_db.txtでインスタントアイテムの効果を定義し、
db/mob_drop_db.txtでモンスターにドロップさせるだけで実現できます。
詳しくは附属のReadme.txtをご覧ください。

ここまで引っ張ってきたものの、実はボツ気味のソースです。
というのは、サーバーの処理だけではアイテムの表示に関与できず、クライアントの対応が必須なためです。
代替案としてアイテムの見た目を既存アイテムに変更する定義を追加しましたが、イマイチ使い辛いです。
アイテムの表示をオリジナルにしたい場合はクライアントのデータの定義もしてあげてください。

どうもアイテムのオリジナル要素はクライアントと密接な関係なため、手が付けづらいです。がっくし。

ちなみにmob_drop_db.txtのドロップ拡張はインスタントアイテムに限らず、既存のアイテムのドロップ定義もできます。
通常のドロップ定義と異なり、倍率に左右されない定倍率でドロップします。
mob_db.txtの拡張に役立ててあげてください。

コメント一覧

chokoko69 (09/17 00:50) 編集・削除

お世話になっております。
今回のインスタントアイテム機能も色々できそうで非常にありがたいソースの公開ありがとうございます。
ようやく実装にとりかかり妄想しながら実装実験を行ってるのですが一点気になるところがあります。
インスタントアイテムにランダム系のアイテムを設定するとアイテム取得時に
ランダム系アイテム名の次にインスタントアイテム名、と両方表示されてしまい
順番も逆なのでなんか気持ち悪いなぁと…
Blazeさんてきにはボツ気味のソースとの事で改良する気はないのかもしれないですけど、
インスタントアイテムを拾った際にインスタントアイテム名を表示「する・しない」てきな設定が出来るような
改良を施して頂けたらこれ幸いと

現状はPC.Cにある clif_additem_simple(sd,item_data->nameid,amount); をコメントアウトして
回避は出来てるんですけどプログラムてきに問題ないでしょうか?

Blaze (09/17 21:10) 編集・削除

実に鋭い指摘です(==

アイテム獲得メッセージは最後まで悩んでいた仕様で、
表示なしだとアイテム効果の発動が視覚的に分かり辛く、
表示した場合でも「拾ったのにインベントリに追加されない!」などと錯乱することもあります。


悩んだ結果、設定できるようにも考えたのですが、
たった1行の変更で対応できるため、割愛しました。
>現状はPC.Cにある clif_additem_simple(sd,item_data->nameid,amount); をコメントアウトして
>回避は出来てるんですけどプログラムてきに問題ないでしょうか?
まさしくご指摘の変更で正常にメッセージ非表示にできます。

夢くじら (09/19 01:42) 編集・削除

(*'ω')獲得の表示は消してdispbottom命令で「効果が発動しました」って表示すればいいと思うよ

時間がなくてソースも見てない状況ですが…

時間があるときに人柱になりまする

chokoko69 (09/19 13:33) 編集・削除

なるほど、Blazeさんにとってもアイテム獲得メッセージは
悩み所だったわけですね。
対処方法は間違ってなかったようで、ほっとしました。

>(*'ω')獲得の表示は消してdispbottom命令で「効果が発動しました」って表示すればいいと思うよ
夢くじらさんアドバイスありがとうございます。
盲点でした。dispbottom命令と組み合わせることで旨くいきました。
更にアイテムごとにメッセージが代えられるのでいい感じに仕上がりそうです。
こんな簡単に改良できるのに気付くことが出来ず、
Blazeさんに改良を希望していた自分が恥ずかしいです。

【インスタントアイテム 第1回】妄想

ある日の森の中、スポアを倒してたら・・・
ファイル 493-1.jpg
見知らぬアイテムをドロップした!

拾ってみると・・・
ファイル 493-2.jpg
体力が回復した!

今回は拾った瞬間に効果が発動するアイテム、
人呼んでインスタントアイテムを考えてみます。
通常のアイテムと異なり、拾ったときに持ち物に加えずに、
効果を発動して消えるアイテムです。
(長ったらしいので以降「即席アイテム」)

妄想段階での仕様としては、
・インベントリに入らないアイテム
・アイテムにスクリプトを登録、拾った瞬間にスクリプト実行する
・Mobのドロップデータを拡張して、通常ドロップと別に定義する
・即席アイテムのフラグを定義し、プレイヤーの所持物に加える際にフラグが立っていれば強制効果発動

ミソは「スクリプト実行」です。
体力回復、SP回復、一時的にステータス強化などの通常の効果はもちろん、
アイテムを拾ったときにイベントが発動したり、
変数を増加してクエスト専用アイテムとして扱ってみたり、
拾った瞬間に専用マップにワープさせてみたり・・・
アイディア満載の仕様で実装させるつもりです。

意外とソース改造範囲が狭いので、順調にいけば次回ソース公開できそうです。

コメント一覧

ふぐ (09/03 11:52) 編集・削除

あ、このネタいいですね(*´ω`)

ルートモンスターに即死アイテムを拾わせておいて、それを倒した人がうっかりオートルートしていたら・・・(ノω`)ペチ

とかとか、マリオカートみたいにレースゲーム作って、途中途中でランダムでアイテムぽこぽこ出現させてあげれば、
取得した瞬間に足はやーい的なことがついに可能になってしまうんですね(´ω`)

期待して待ってます(*´ω`)

夢くじら (09/03 18:09) 編集・削除

メイプルストーリーにはこういうアイテムがあって
それを使用するゲームみたいなのがあったはずです。
モンスターカーニバルだったかな?
コレが実装できるならそのスクリプトを作ってみたいですね~

【NPC露店 最終回】ソース公開!

■過去の記事
【NPC露店 第4回】スクリプトで操作してみる
【NPC露店 第3回】商品を買ってみる
【NPC露店 第2回】商品リストの表示
【NPC露店 第1回】NPC露店の仕様

お待たせしました!
これまで開発していたNPC露店のソース公開です。
ファイルとしてまとめましたので、こちらからどうぞ。
(上部メニュー「メモ」→「ダウンロード」の「NPC露店」にあります。)

今回実装したNPC露店ですが、
普通のプレイヤー露店やショップNPCには出来ない事が色々出来ちゃいます。
その一部を紹介していきましょう。

■アイテムを買ったときにイベントを起こす
ファイル 491-1.jpg
イグ葉お姉さんからアイテムを買ったら妹にお礼を言われた!

■商品数を管理
ファイル 491-2.jpg
メッセージでアイテム名や商品数を確認!

■ランダムで商品を変える
ファイル 491-3.jpg
紫箱で出るアイテムをランダムで出品!

■クジ引き
ファイル 491-4.jpg
未鑑定のアイテムの中にレアアイテムが!

なお、これらはサンプルスクリプトとしてファイル内に附属させました。ご参考ください。
サンプルなので内容は控えめにしましたが、他にも
制限時間付きアイテムを売ることが出来たり、
外部ファイルに商品情報を記録してサーバー起動時に自動で露店を立ち上げたり、
装備品アイテムが複数個出品出来たり、
装備品の精錬値、カードなどの詳細をプレイヤーが指定して露店に出させたり・・・

未鑑定アイテムや制限時間付きアイテムなどはわざと制約を外してみたりして、オリジナル性を広げてます。
アイデアを膨らませて実装したりと、楽しんでいただければ幸いです。

コメント一覧

はにわ (08/30 01:21) 編集・削除

驚くほど作るの早いですね。
ソースも綺麗にまとまってているし、感激です。
私も・・・もう少しで・・・

chokoko69 (08/30 11:42) 編集・削除

開発ご苦労様です。
投稿は初ですが、BBS・スクリプト公開所はいつも参考にさせて頂いてます。お世話になってます。
今回のNPC露店 第2回を見て「あー商人の露店スキルの拡張版だ、露店出したまま狩ができる」と、勝手に思い込んでました(笑)
このソースを実装すれば、淡白だったNPCとのやり取りに表情がもたせれますね。
次回作に期待しつつ、ありがたく使わせて頂きます。

aluc (08/30 22:09) 編集・削除

あれCSS吹っ飛んじゃいました?

aluc (08/30 22:15) 編集・削除

なんでもないっすうううう
cgi以外503出てまひた
時間置いてみます

夢くじら (08/30 23:57) 編集・削除

開発お疲れ様です。
wktkしながら待っていました♪
さっそく導入してみましたらすごい動作するんですね~

気になることがあったのでコメントさせていただきます。

サンプルでは物足りないので改造していたんですが
露店商人(兄)の商品を追加するときに
set 'item6,'item6+rand(10);
↑を追加するとNPCが消えるみたいですね・・
setvending 6,607,10,120000;//いぐ実
↑を追加すると数は増やせますが個数が増えないですよね~
自分でスクリプト見ても分からなかったので報告です。

もうひとつ。
露店商人(姉)のスクリプトで
最初は「商品が全部売り切れたら全て補充される」ような動作でしたので
私のほうでは「売り切れた商品だけを指定時間ごとに補充」に変更しました。
そのときにNPCに会話をするときに露天は邪魔ですか?とでますが
消して再度だしたときに会話をしようとするとmap鯖がエラーを吐いてしまい会話が始まりません。
エラー文は『unknown comand : 1073741824 @ 0x000237』です。

追記:露店商人(姉)の方のエラーですが
スクリプト内部を改良したらエラーが出なくなりすんなりいきました。
initnpctimer命令で露天を補充(露天開始)していて
閉じたときにstopnpctimer命令でタイマーを止めていなかったのが悪かったかもです。
露天再開もOnInit命令とOnTimer命令のところに飛ぶようにしているのでスムーズにいったみたいです。

気になった事ですが一度商品の設定をしていれば露天を閉じた後でも再度設定をしなくても、残っているアイテムがあればそれを続けて売るようになっているんですね。
わざわざ変数に保存する手間が省けてたすかりました♪

追記2:露店商人(兄)について
変数'item1を'item[1]のように配列変数にするとちゃんと動作するようになりました。
どうしてこっちだとうまくいくのか分からないですが報告しておきます。

眠い頭で考えても分かりませんね・・。
長文失礼しました。

TAQA (08/31 03:32) 編集・削除

すばらしいスクリプトありがとうございます、早速ダウンロードさせていただきました!
ほとんどは実行できたのですが1つだけ問題が。

露店商人(兄)に話しかけた際にnextのあと
サーバーがダウンしてしまうというものです。
自分でいろいろ見てもわからなかったので報告させていただきます。

関係ないですがここ最近更新が突然頻繁になり驚きつつ安心してたりもします(笑)
お忙しいとは思いますがこれからもがんばってください!
では失礼します。

Blaze (08/31 08:05) 編集・削除

いろいろご感想&ご報告ありがとうございます。

サンプルの露店商人(兄)ですが、売れたアイテム数を変数から減算しておらず、増加する一方でそのうちサイズオーバーしている可能性がありましたorz

その他、夢くじらさんのエラー報告から不具合が発覚しそうなので、また改良してみます。

【NPC露店 第4回】スクリプトで操作してみる

■過去の記事
【NPC露店 第3回】商品を買ってみる
【NPC露店 第2回】商品リストの表示
【NPC露店 第1回】NPC露店の仕様

NPC露店は主にスクリプトで制御するのですが、
今回はNPC露店用のスクリプト命令・関数をなんと6つも用意しました。
なかなか面倒くさい事になっていますが、一応説明をしていきましょう。

■setvending命令
・書式
setvending <index>,<itemid>,<num>,<value>[,<identify>,<refine>,<attribute>,<card1>,<card2>,<card3>,<card4>,<limit>,<npcname>];
・説明
NPCの商品リストの<index>番目にアイテム<itemid>をセットします。
・パラメータ
<index>
 商品リストの番号を指定(1~12)
 「0」を指定すると空き番号にセット
<itemid>
 商品のアイテムIDをセット
 アイテム名の文字列指定でも可(非推奨)
<num>
 商品の個数をセット
<value>
 商品の値段をセット

※↓ここから省略可
<identify>
<refine>
<attribute>
<card1>
<card2>
<card3>
<card4>
<limit>
 script_ref.txtの「getitem2命令」を参照
<npcname>
 商品リストをセットする対象NPC名を指定
 省略するとスクリプトを実行したNPCが対象

■delvending命令
・書式
getvending [<index>,<npcname>];
・説明
NPC商品リストの<index>番目のアイテムを削除します。
・パラメータ
<index>
 削除する商品リストの番号を指定(1~12まで)
 「0」または省略すると全てのアイテムを削除
<npcname>
 商品を削除する対象NPC名を指定
 省略するとスクリプトを実行したNPCが対象

■getvending命令
・書式
getvending [<npcname>];
・説明
NPCの商品リストの情報を以下の配列にセットします。
'@vending_num
 商品の個数
'@vending_title$
 露店のタイトル名
'@vending_status
 露店の状態(1で開設中、0で閉鎖中)
'@vending_itemid[n]
 n+1番目の商品アイテムID
'@vending_amount[n]
 n+1番目の商品の個数
'@vending_value[n]
 n+1番目の商品の値段
'@vending_identify[n]
 n+1番目の商品の鑑定状態
'@vending_refine[n]
 n+1番目の商品の精錬値
'@vending_attribute[n]
 n+1番目の商品の状態
'@vending_card1[n]
 n+1番目の商品のカード1
'@vending_card2[n]
 n+1番目の商品のカード2
'@vending_card3[n]
 n+1番目の商品のカード3
'@vending_card4[n]
 n+1番目の商品のカード4
'@vending_limit[n]
 n+1番目の商品の制限時間
※nは0から指定
・パラメータ
<npcname>
 省略可
 商品リストをセットする対象NPC名を指定
 省略するとスクリプトを実行したNPCが対象

■openvending命令
・書式
openvending <title>,[<event>,<npcname>];
・説明
NPCに露店を開設させます。
・パラメータ
<title>
 表示させる露店名を文字列で指定
<event>
 省略可
 商品が売れたときに実行するイベント名を指定
<npcname>
 省略可
 露店開設する対象NPC名を指定
 省略するとスクリプトを実行したNPCが対象
・備考
 予めsetvendingで商品リストをセットしないと失敗になります

■closevending命令
・書式
closevending [<npcname>];
・説明
NPCの露店を閉鎖させます。
<npcname>
 省略可
 露店を閉鎖する対象NPC名を指定
 省略するとスクリプトを実行したNPCが対象

■checkvending関数
・書式
checkvending(<npcname>)
・説明
NPCの露店の開設状態をチェックします。
露店が開設されていれば1が、それ以外は0が返ります。
・パラメータ
<npcname>
 省略可
 露店状態をチェックする対象NPC名を指定
 省略するとスクリプトを実行したNPCが対象

【NPC露店 第3回】商品を買ってみる

■過去の記事
【NPC露店 第2回】商品リストの表示
【NPC露店 第1回】NPC露店の仕様
ファイル 489-1.jpg
見た目は第1回から変わり映えないお姉さんから・・・

ファイル 489-2.jpg
アイテムが買えた!

ファイル 489-3.jpg
ちゃんとアイテムが減ります。

今回はNPC露店から商品が買えるところまで実装しました。
変更した箇所はたった1関数のみ。
それでも実際にアイテムを扱う箇所なので、コーディングを慎重にするはずだったんですが、これまたエラー無くすんなりと解決。
もっと不具合が検出されるはずなんですが。。逆に心配です。

ただし、1つだけ問題がありまして、
商品が完売しても露店が閉じません。
PC露店ではアイテム販売報告パケット(0x137)で解決してそうなんですが・・・う〜ん。
商品が売れたとき、商品リストをチェックして強引に閉鎖するようにします(==

さて、次回はスクリプト側からNPC露店に出させる商品を操作できるようにしてみますよ〜。
▼開発メモ

コメント一覧

Toshi (08/27 23:58) 編集・削除

すでに第3回まできてた~ぁ!
順調に進んでますね。
楽しみですぅ。

【NPC露店 第2回】商品リストの表示

■過去の記事
【NPC露店 第1回】NPC露店の仕様
ファイル 488-1.jpg
NPC露店実装の第2回です。
今回は看板をクリックすると商品リストを表示する、まで実装しました。
(前回は看板表示のみ)

通常の露店はカート内アイテム情報を渡しているのに対し、
今回はNPCに露店に出品するアイテム情報を保持し、渡すようにしました。
NPCがアイテムを持ってる感じです。

露店に関するパケットも幾つかあるのですが、
露店キャラのプレイヤー指定をNPC指定もできるように、
カート内アイテム情報をNPCアイテム情報に置き換えるだけで
難なくクリアしております。

さて、商品の表示と情報の保持は出来ましたが、
次回は実際に商品が買える所までやってみようと思います。

▼開発メモ

【NPC露店 第1回】NPC露店の仕様

ファイル 487-1.jpg

商人の最大の見せ場である「露店開設」。
それをNPCに使わせよう~というコードの長期連載(予定)のAurigaオリジナル開発記です。
「普通のショップNPCでいいじゃん!」と思う人もいるかと思いますが、色々と拡張予定なので長い目で見てあげてください(==

とりあえずさらっと露店看板表示までは出来ました。
コードは形になってきたらココで公開するかもです。

▼続き(仕様決め)

コメント一覧

名無し (08/22 11:52) 編集・削除

ooh...
何時か如何にか出来ないかなと考えていた、NPC露天をBlazeさんが作っているとは。

Toshi (08/22 16:12) 編集・削除

楽しそうなNPCですぅ。
鯖再起動しても継続ならとてもいい感じです。
DUPEが怖い「@at」の代わりに流行りそうです。

Blaze (08/23 17:58) 編集・削除

>Toshiさん
>鯖再起動しても継続ならとてもいい感じです。
NPCデータを直接保存するのは好ましくない(スクリプト変更による該当NPCが削除されたなど)ので、
データ保存はスクリプト実行側の責務となりそうです。
(露店閉鎖時に現商品データをスクリプト命令でcsvなどに保存→露店開設時にcsvから商品データを読み取り)

ただ、スクリプトで保存するタイミングが難しく、「商品が売れた~」時のイベント実行などを用意してあげないといけない気がしてきましたorz

ページ移動