//================================ // Athena Script //このスクリプトは「道化ふぃなーれ」が //自作エミュ鯖ミキサーバーに設置するために作成しました。 //Athena2272(バグ自己修正版)をさらに改造したヤツで動作確認済です。 //ご使用になられる方は自己責任でどうぞ。 //それから自分の自己満足のために、このスクリプトを作った過程で発生した問題と、 //その解決策、そしてそうなる原因であった関数や命令の特徴などを、 //見苦しくないようスクリプト下に書いておきます。 //偉そうにものを教える口調で書いてありますが気にしないでください。 // //カードとモンスター名が合わない場合は使えません。 //例:デリーター(mob)とスカイデリーター //  アシダス(mob)とブルーアシダス、オシドスなど。 // //複数設置する場合は、スクリプト全てコピーしてコメント「設定」#の後の番号を変えてください。 //================================ thana_boss.gat,80,75,4 script モンスター召喚機#1 124,{ //設定 mes "[モンスター召喚機]"; mes "こんにちは。"; mes "こちらではモンスターのカードを"; mes "使うことによってモンスターを"; mes "10体召喚できます。"; mes "召喚したいモンスターの名前をどうぞ"; next; input(@callmonster$); set @cardname$,@callmonster$ + "カード"; if (getitemid(@cardname$)<=0 || countitem(@cardname$)<=0){ mes "[モンスター召喚機]"; mes "カードを持っていないようです"; close;} if (getareamobs("this",60,55,100,95)){ mes "[モンスター召喚機]"; mes "近くにモンスターが既にいます"; mes "危険ですので先に倒してください。"; close; } delitem getitemid(@cardname$),1; areamonster "thana_boss.gat",76,71,84,79,"召喚モンスター",@callmonster$,10,"E_killcallmonster#1"; //設定 initnpctimer; hideonnpc; mes "[モンスター召喚機]"; mes "五分して倒せないようでしたら"; mes "危険と判断し私が排除します。"; mes "それではお気をつけて。"; close; OnTimer300000: hideoffnpc; killmonster "this","E_killcallmonster#1"; //設定 stopnpctimer; end; } thana_boss.gat,80,75,4 script E_killcallmonster#1 -1,{ //設定 if(getareamobs("this",60,55,100,95)<=1){ hideoffnpc "モンスター召喚機#1"; //設定 killmonster "this","E_killcallmonster#1"; //設定 stopnpctimer "モンスター召喚機#1"; //設定 } end; } thana_boss.gat,111,113,4 script Mobcheck#1 111,4,4{ //設定 if(getareausers("thana_boss.gat",60,55,105,105) <= 0) { hideoffnpc "モンスター召喚機#1"; //設定 killmonster "this","E_killcallmonster#1"; //設定 }else{ mes "誰かがこの先で戦っているようだ。"; close; } end; } //================================ //AthenScriptの「ここが困った」 //1.モンスターが出てこねぇよ!! // 数時間自分を悩ませました。 // 原因はHideonnpc命令の後にmonster命令があったことのようです。 // 順番を変えたら動いただけなので確証はありません。 // ただ、npcをハイドさせた後は上手く動かない命令が他にあってもおかしくないかも。 // ちなみに、monster命令を日本語モンスター名などでモンスター指定する場合は、 // mobid(script_ref.txtの記述では)に文字列で名前を入れて構いません。 //2.モンスターが削除されねぇよ!! // script_ref.txtのkillmonster命令の説明では、 // モンスターを出現させたevent名を指定すれば殺せるとありますが、 // 無理でした。monster命令によって殺した後のeventを組み込んで出したモンスターは、 // 組み込んだevent名を指定することで、killmonster命令で殺すことが出来ます。 // つまり。「killmonster 殺したいマップ,殺したいmobが死んだときに発動するevent名」 // になります。eventを組み込まずに出したモンスターに関しては未確認です。 //3.存在しないモンスター名でも召喚できちまうよ!! // countitemという関数は、因数として渡したモノが、数字であった場合はそのまま、 // アイテムの数を数えに行きますが、文字列だった場合一度アイテムIDに直します。 // その時、アイテム名でIDを見つけられなかった場合、自動的にIDが512に、つまりリンゴに // されてしまうので、「存在しないmob名」を召喚NPCで入力すると、 // 「存在しないmob名カード」を探し、当然ないので勝手にリンゴをカウントしてしまい、 // リンゴを持っていたら、カードを持っていたら分岐をすり抜けてしまって結果、 // 「存在しないmob名カード」を一枚削除(無いので無意味)、 // 「存在しないmob名」モンスターを召喚(居ないので無意味)、 // NPCはバグとも知らずハイド→5分ぼけーっ、という状況になります。 //  // scriptの関数や命令は、Script_ref.txtに書いてある以上の性能があったり、 // 時には読み方によってとらえ方を間違ってしまうことがあります。 // 命令が上手く動いていなかったら、src内のScript.cというヤツを覗いて、 // 実際命令や関数がどんな仕事をしているのかチェックした方が良いでしょう。 // 最初は分からなくて読めないモノですが、10時間ぐらいC++解説サイトを見ながら読めば // なんとなく何をしているのか分かってくるはずです。 // 余計なお節介もありましたが、道化ふぃなーれの戯言として終わらせて頂きます。 //================================