記事一覧

神器クエスト書き始め

先日体験した神器クエストを忘れないうちにと、スクリプトを書き始めようとしました。
まずは保存していたSSの整理整理・・・
ファイル 258-1.jpg
・・・(´~`;)ウーン

ま、まぁそのうち始めますorz

コメント一覧

apache (03/01 19:47) 編集・削除

ここまでSSがあると、BlazeさんはJRO一SSの数が多いプレイヤーなんじゃないかと勘ぐれます。

Cocoa (03/02 08:08) 編集・削除

SS撮るのもいいですが、スペックに余裕があるなら動画を撮ってみては?
あとで「ここ撮っとけば良かった・・・」なんて事がなくなると思いますし、NPCと会話の度にSS撮る必要もなくなりますよ。

Blaze (03/02 17:46) 編集・削除

>apacheさん
いえいえ、世間は広いですしもっと保存数が多い方もいるでしょう。
もしそうだとしても、こんな思い出にもならないSSなんて・・・orz

>Cocoaさん
今でもSSとは別に動画もキャプチャーしています。
ですが必然的に画質が悪くなりメッセージ色などの判別が困難なのと、部分的に抜き出したい時に面倒なので、
動画保存は複雑なエフェクトの判別、タイマーイベントのタイム間隔取得、モンスター湧き位置調査など迄に留めています。

Cocoa (03/02 17:57) 編集・削除

>必然的に画質が悪くなり
カハマルカの瞳ならBMPを最終データに出来ますよ。

忍者スキルskill_cast_db修正

本鯖で5スロット化により忍者を作る機会が出来たので早速作ってみました。
スキルは忍法型、Int-Dexで行こうかと思います。
氷閃槍Lv1連打がかなり強力で、なかなか面白いです。
このまま手甲改作成可能Lvまで育てたいと思います。

さて一方、追加職のスキルが曖昧なAthenaですが、ここで簡単に忍者の詠唱・ディレイを設定するskill_cast_db.txtの修正部分を記載します。
現在のとかなり相違点があり、本鯖風に近付くかと思います。
(氷閃槍の使い心地、風魔手裏剣投げの詠唱、苦無投げのディレイなど)

523,0,0,0,0,0//NJ_SYURIKEN#手裏剣投げ#
524,0,0,2500,0,0//NJ_KUNAI#苦無投げ#
525,3000,0,3000,0,0//NJ_HUUMA#風魔手裏剣投げ#
526,0,0,5000,0,0//NJ_ZENYNAGE#銭投げ#
527,0,0,3000,1000,3000//NJ_TATAMIGAESHI#畳返し#
528,0,0,1000,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000//NJ_KASUMIKIRI#霞斬り#
529,0,0,1000,0,0//NJ_SHADOWJUMP#影跳び#
530,0,0,0,0,0//NJ_KIRIKAGE#影斬り#
531,0,0,1500,10000:20000:30000:40000:50000,0//NJ_UTSUSEMI#空蝉#
532,4000:3500:3000:2500:2000:1500:1000:1000:1000:1000,0,1000,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0//NJ_BUNSINJYUTSU#影分身#
534,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,0,0,0,0//NJ_KOUENKA#紅炎華#
535,6000:5500:5000:4500:4000:3500:3000:2500:2000:1500,0,1000,20000,0//NJ_KAENSIN#火炎陣#
536,3000,0,3000,0,0//NJ_BAKUENRYU#龍炎陣#
537,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,0,0,0,0//NJ_HYOUSENSOU#氷閃槍#
538,3000,0,3000,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000//NJ_SUITON#水遁#
539,2000:2500:3000:3500:4000,0,3000,0,10000:12000:14000:16000:18000//NJ_HYOUSYOURAKU#氷柱落し#
540,1000:2000:2000:3000:3000:4000:4000:5000:5000:6000,0,1000,0,0//NJ_HUUJIN#風刃#
541,4000,0,0,0,0//NJ_RAIGEKISAI#雷撃砕#
542,4000,0,0,0,0//NJ_KAMAITACHI#朔風#
543,5000:4000:3000:2000:1000,0,0,30000:45000:60000:75000:90000,0//NJ_NEN#念#
544,0,0,0,0,0//NJ_ISSEN#一閃#

他にも修正したい箇所があるのですが、直そうとすると多すぎるのでとりあえずこれだけです。
特に火炎陣の多段HITは早急に直したいのですが・・・
(本鯖ではサンクチュアリのダメージ間隔が短くなったようなスキルです。)
また今後記載していきます。

コメント一覧

ペン (03/02 23:21) 編集・削除

ぜひともATHENAの開発板にアップしてもらえるとうれしいですね。

キレイなスクリプトの書き方

スクリプトを書いていらっしゃる方が沢山来ていただいているようで、スクリプターとしては嬉しい限りです。
それに加え、スクリプトの質問をされる方も多くなってきました。
書き方のことで質問された方もいるので、いい機会に勝手ながらアドバイスをさせてもらいます。

※久しぶりに開発者よりの日記です。興味ない方ごめんなさいorz

-

最近のスクリプトを見てお気付きの方もいらっしゃると思いますが、menu・gotoなど、ラベルを使う命令を一切排除しています。
これは去年の1月からしているNo more "goto" Good bye "goto"運動(AthenaDevさんにて命名?)によるもので、スクリプトの見直し・整形を行いました。
実際に見てみると、最新のAthenaデフォルトではsampleスクリプトを除き、gotoは使われていないと思います。

なぜgotoやmenuがいけないのか、答えはswitch、selectなどで綺麗に簡潔に代用できるからです。
実際に昔のスクリプトと改修後のスクリプトを見てみると、

lou_fild01.gat,175,173,4scriptクエン ホ819,{
    if(Lou_que1 == 4) goto L_OK2;
    if(Lou_que1 == 3) goto L_OK1;
    mes "[クエン ホ]";
    mes "ここは危険だ。帰れよ。";
    close2;
    warp "lou_fild01.gat",200,174;
    end;
L_OK1:
    emotion 18;
    mes "[クエン ホ]";
    mes "どうだい、素敵だろ~。";
    mes "落ち込んだり元気がなくなると";
    mes "ここに来るんだ。";
    mes "ここからじっと景色を眺めてると";
    mes "落ち着くんだよ。";
    next;
~~~~~略~~~~~
L_OK2:
    mes "[クエン ホ]";
    mes "どうする?";
    next;
    menu "叫ぶ",-,"帰る",L_CANCEL;
    mes "[クエン ホ]";
    mes "おし、叫んでみて!";
    next;
    input @annouce$;
    announce "「"+strcharinfo(0)+"」の叫び : "+@annouce$,0x01;
    mes "["+strcharinfo(0)+"]";
    mes @annouce$;
    next;
    mes "[クエン ホ]";
    mes "どう?すっきりした?";
    mes "また叫びたくなったら来なよ。";
    close;
L_CANCEL:
    mes "[クエン ホ]";
    mes "うん、じゃあまたね。";
    close2;
    warp "lou_fild01.gat",200,174;
    end;
}

改修前の龍乃城NPC、クエン ホです。
まだフラグが少ないNPCなので何とか目で追っていけますが、もしもクエストフラグが何十にも及ぶと大変ですね。

一方改修後は

lou_fild01.gat,175,173,4scriptクエン ホ819,{
    switch(LOU_1QUE) {
    default: //3,4以外のとき
        mes "[クエン ホ]";
        mes "ここは危険だ。帰れよ。";
        close2;
        warp "lou_fild01.gat",200,174;
        end;
    case 3:
        emotion 18;
        mes "[クエン ホ]";
        mes "どうだい、素敵だろ~。";
        mes "落ち込んだり元気がなくなると";
        mes "ここに来るんだ。";
        mes "ここからじっと景色を眺めてると";
        mes "落ち着くんだよ。";
        next;
~~~~~略~~~~~
    case 4:
        mes "[クエン ホ]";
        mes "どうする?";
        next;
        if(select("叫ぶ","帰る")==2) {
            mes "[クエン ホ]";
            mes "うん、じゃあまたね。";
            close2;
            warp "lou_fild01.gat",200,174;
            end;
        }
        mes "[クエン ホ]";
        mes "おし、叫んでみて!";
        break;
    }
    next;
    input '@word$;
    announce "「"+strcharinfo(0)+"」の叫び : " +'@word$,1,0x9BFD00;
    mes "["+strcharinfo(0)+"]";
    mes '@word$;
    next;
    if(LOU_1QUE == 3) {
        mes "[クエン ホ]";
        mes "どう?すっきりしたかな?へへ。";
        mes "ここには、好きに来ていいよ。";
        mes "今日は本当にありがとう!";
        set LOU_1QUE,4;
    }
    else {
        mes "[クエン ホ]";
        mes "どう?すっきりした?";
        mes "また叫びたくなったら来なよ。";
    }
    close;
}

フラグの状況と進行具合が目で追って分かりやすいです。
breakなどによる共通部分の処理も気軽に出来る点も魅力です。
またラベルを使っていないので、衝突を意識する必要もありません。
この大改修でほとんどのスクリプトが見やすくなり、また後から手を加える人にとって大変ありがたい偉業となりました。



スクリプトを書く際少なくとも私はこの点に注意し、見た目的に分かりやすく美しく、を追求しています。
まだまだ未熟な部分もありますが・・・orz
「スクリプトなんて動けばいいじゃん」と思う方もいらっしゃるかもしれません。
ですがプログラムも然り、それを見る人・手を加える人がいる限り整合の必要性があります。

いきなりswitchやselectなんて・・・という方、私も最初はそうでしたorz
が、いざやってみるとゴチャゴチャしていた物がキレイになっていく感じで意外とハマり、無駄な処理・不要な部分という物が見えてきます。
それを排除していくことでより一層綺麗に仕上がると思います。


スクリプトを作ってる方、まずはgoto・menuの排除に挑戦してみてはいかがでしょうか。

コメント一覧

Cocoa (02/14 00:27) 編集・削除

スクリプト公開所の濃縮エルNPCでgoto使ってたorz
ちょっくら書き直してくるぜ!
λ=3......

らの字 (02/14 06:08) 編集・削除

確かにswitchのほうが高性能だけど、
個人的にはmenuとラベルのように
各処理部分をはっきり分けられて
初心者にわかりやすいところが好きです。

はっきりとmenuとラベルをスクリプトから排除するより
場合によって使い分けすべきではないかと考えてます。

こより (02/14 17:26) 編集・削除

好みの問題だからなぁ。
ボクはswitchのほうが好き。

C寄りの考え方に慣れてくると、多分switch派になるんじゃないかなぁ。

Blaze (02/15 02:19) 編集・削除

個人的にラベルはイベント時やcallsub等呼び出しのみの使用と考えています。
汎用性が低いもの、例えばcancel時はラベル呼び出しよりもその条件分岐地点にぶら下げる形がスマートだと思いますので・・・

私では現状の改修後のカタチに慣れてしまいましたが、やはり人それぞれ使いやすいカタチがありますよね。
自主的な概念を強要するつもりはありませんので、人それぞれの書きやすいカタチで書いていくのも個性的でいいかもですね。

Gokismith (02/17 12:43) 編集・削除

swicthは便利だとは思うのですが、menuは全部排除となると躊躇します。

なぜならswicthだけだと、ラベルの全部が「CASE 数字」になってしまうので、mes文を読まないと
「これをしたのはNPCプログラムのどこだったっけ・・・?」
となってしまうから。

たとえば上のものだとLOU_1QUEが何の関数だったか忘れると一貫の終わりなわけで・・・

ラベルにそれこそLOWZENYとか具体的に書いてあればお金の足りない時の処理どうだったっけ・・・?を言葉で検索できますが、CASEだと全部読まないとムリになっちゃう。

明らかにBASIC臭い考えかただなぁと自分でも思いますけど orz

menuとラベルがAthenaから消えると自分はプログラム書くのきつくなっちゃいそうです。

elseif (02/22 00:54) 編集・削除

goto,menuはあまり使わない派だけど、テストNPCを書くときはmenuやgoto使います
それにAthenaのスクリプトは普通書き捨てなので、使っていってかまわないと考えています
Gokismithさんの言うように、switch,select時は戻り値が整数になるので分岐を増やすと追いかけづらくなりますしね

個人的には饒舌なNPCだとmes命令が冗長になるのと、永続キャラクター変数に何も修飾されないのが辛いです

ナナ氏 (03/06 11:28) 編集・削除

さすがBlazeさん。
この考えはダイクストラが唱えた構造化定理の提案と同じ考えですね。
「いかなる制御を行なうプログラムも、補助的なスイッチなどを用いればgoto文のないプログラム(gotoless program)を記述できる」ていうもの。

プログラマーとしてはこの構造化定理に沿って記述していくのが筋。
「gotoの方が使い易い」という人はまだ使い熟していない証拠でしょう。

2274一部修正版

2274に一部ミスがあったので修正版をあげておきます。
パッチにするには内容が薄いのでこちらに置いておきます。
ファイル 234-1.zip

修正内容は
・飛行船NPCの挙動を修正
・リヒタルゼン友情クエストの修正
の2点です。

気にならない程度だったり、気になる人は気になる修正点ですので、お好みで上書きしてください。
必ず2274の上書きという形をとってください。

2274

例のDUPE対策パッチを開発板にあげておきました。
一応DUPE問題は解消されているはずです。
他にもほとんどのスクリプトの手直しを同時に行いました。
あちらでは書ききれなかったので主な変更点を書いておきます。

-
・ほとんどの街スクリプトの整形(ifに出来る箇所のswitch排除、分別統一化、メッセージ修正等)
・ジュノーのバーンとバジンのアイテム作成が正常に動作するように。
・アルケミスト転職時にのみ↑の手伝いフラグが立つように(事前クリアではダメみたいなので)
・リヒタルゼン隔たりの友情クエストにNPCイラスト(以前この日記で投下していた物)
・コンロン他変数名が衝突していたのを修正
・アマツ通行手形クエストで狐を追い払う確率を本鯖仕様に
・アマツモモタロ体験クエストでの報酬を正常に
・アインブロック工場クエスト他の入手EXPの補完
・ジャワイのモンスターをnpc_monster.txtに引越し
・ウンバラのバンジーで-50%ダメージの場合は死なない様に暫定処理(-healでは死なないようにするのがスマートかも)
・スロットエンチャント、クリスマス、新春、2次クエストスキルなど実装

-
あと何か色々イジった気もします。
DUPE内容がバレないようにほとんど改変してみました。
今回はわざとスクリプト部のみのパッチです。
ぁ~~~疲れた・・・orz

対策が遅れてしまい、申し訳ありません。
メールにてご連絡を頂いた方、落ち着き次第こちらから返信させていただきます;

DUPE対策

先日のDUPE記事について、大変多くのメールを頂きました。
そのほとんどが鯖管理人さんのようで。こんなに鯖管さんが見ているとは驚き。
メールは確認しましたが、携帯からの確認なので返信は後日となりますorz

あまりのメールの数だったので、個別に対処するよりも対策パッチを作った方が早い気がしてきました。
対策だけではバレバレなので、溜りに溜まったスクリプトを混ぜてのパッチにしようか考え中です。

とにかく、今は動けない身なので目前の事を優先に、帰ってきてからまた考えてみます。

DUPE発見

DUPE、いわゆるプログラムの穴を突いた無限アイテム・Zeny増殖をデフォルトのAthenaで発見しました。
かなり悪意的なバグで、慣れてしまえばどんな鯖でも10分で10M~程稼げてしまいます。
初期からのファイルで随分前から存在していたことになりますが、既にご存知の方もいるのでしょうか。

早急に修正パッチを出したい所ですが、開発板では休止中の身。
ここで書くにもDUPEのやり方を広めてしまう結果となってしまい・・・
う~ん、どうしよう。
1番良いのはサーバー運営者さんに忠告のメール等出すこと。
しかし、どれだけ数あるんだ・・・orz

実験的に試行させてもらったサーバーさんにはメールを送信済み。
この後の対処としては・・・パッチ出せる状況になるまで待機、でしょうか。
しばらく広まってくれない事を祈ります。

コメント一覧

Cocoa Eメール (02/05 15:53) 編集・削除

お手数でなければDUPE箇所を教えていただきたいです。

Blaze (02/05 17:54) 編集・削除

メール等でコンタクトを頂いた方の幾人かの人に、サーバー管理人さんということを確認したうえでメールを送信しました。
これから多忙の身となりますので、少数ながら確認が取れなかった人に対しては後日対処いたします。

今回の情報はくれぐれも悪用されない様お願い申し上げます。

ペン (02/05 20:56) 編集・削除

そんな、バグがあるんですか;;
噂では聞いたことは歩けど、やっぱり実在するんですね。
だとするとeAthanaで、同様のバグがあるのでしょうか?
早急に修正パッチが出ることを、願います
もしダレカが、このバグを、自分のホムペなどで、紹介してしまって一気に広まったら、ソレこそ、エミュ界の終焉に・・

. (02/06 03:19) 編集・削除

>開発板では休止中の身。
そういう問題ではないのでは?

GANTS (02/06 04:53) 編集・削除

>.
今の開発板の状況では誰もパッチ出したくないと思う。
Bazeさんも思うところがあって休止したのでわ?

Blaze (02/08 00:48) 編集・削除

数多くのメールを頂き、対策も遅れていますが、柔軟に対処をし、落ち着き次第返答をさせてもらいます。
パッチも今の状況では少々気が引けますが、事態が事態なので現在の最優先事項とさせて頂きます。

>ペンさん
ちょっとしたプログラムのミスなのでeAthenaでは大丈夫だと思います。
すぐ直せる内容ですが、情報漏出の可能性から慎重に対策を行いたいと思います。

生体DOP強化前ステータス

ファイル 225-1.jpg
ありえない程の高効率で、本鯖でも乱獲されている生体3のMobたち。
確かに強いのですが、倒せない強さではありません。
実装後にEXPの高さからゲームバランスを大きく崩した存在となりました。

私もこのバランスの悪さはどうかなと思います。
この生体Dの実装を躊躇っている他国ROもあるぐらいです。

しかし、中には同様の事を考えている他国もあるようで。
韓国テスト中に取り入れた生体DOP第1次強化前のステータスで生体Dを実装されている国がちらほらと存在しているようです。
主な変更点はHP・EXPが下がっていること、ステータスが多少違うということぐらいでしょうか。

その強化前ステータスのデータを置いておきます。(add式mob_db)
ファイル 225-2.txt

生体Dでバランスが崩れて悩んでいる方、弱体化も考えてみてはどうでしょうか。

ビンゴ調査員募集!

本鯖調査にご協力頂ける方を募集しています。
対象はフィゲルで実装されたビンゴゲーム。
5人集まらないと参加できない為、4人程ご協力頂ける方を探しています。

開催日時は2月24日(土)の22時、サーバーはIrisサーバーを予定してます。
大体30分~1時間程で調査が終わると思います。終了後、追加で何かするかもしれません。

チケットは当方が負担、前日に1dayチケットを支給いたします。
ですがなるべく本鯖に繋げれる方、チケットをお持ちの方を優先させてもらいます。

詳細はMoxiの「RO本鯖」コミュニティにてイベント告知を立てております。
Moxiはこちらから↓(要登録)
http://moxi.at/

Moxiに参加できない方、質問などがある方はメール・メッセなどでご連絡ください。
アドレスは↓です。(@を半角に直してください)
ark_blaze@hotmail.co.jp

最新情報や詳細はMoxiのイベント告知にて更新していきます。
よろしくお願いします。

飛行船クエスト第2部 保存版

友達の家で待たされている長い間、ヒマだったので書いていました。
持ち帰れるよう、ここに保存として置いていきます。
ファイル 212-1.txt

こんなのを他人の家で作ってる私の神経を疑いたい。

実は裏でパンヤもやってたり・・・
それだけ長い間ヒマだったということです。ハイ。