ネット航海時代の改造

自分で考えたい人のために例は白文字にしています。

この例を使用する場合ご一報下さい。あなたの海を見に行くZE☆

一応コピペじゃ動作しないようにしてるから自力で頑張ってね。簡単に動くけど。
挿入場所も自力で考えてね。

 

なお付け焼刃の知識&昔遊んだ改造から掘り起こしているプログラムのため間違いや、もっとスマートな方法、文法があるかもしれないのであしからず。

 

Lvがあがった場合に表示する

簡単な方法としてsys.cgiの個人データに変数を追加し、Lvを記録させる。
記録したLvと現在のLvを比較し上がったなら文字列を表示させる。
これで出来ます。

 


if($現在冒険Lv > $記録した冒険Lv){&msg("冒険Lvが上がりました")$記録した冒険Lv=$冒険Lv}

 

履歴に時間と分を追加する

日付取得のsubの日付に時間と分を追加する。

 


$日付 = sprintf("%04d\/%02d\/%02d\ %02d\:%02d",$year,$month,$day,$時間,$分)

 

クリア済の冒険を終了表示にする

終了済みクエストと該当クエストを比較し含んでいれば終了表示にする。

if($終了済みクエスト【比較演算子】/$file/){print qq|<input type=radio name=goods value="$_"$checked>終了済み $price G<br>|}else{print qq|<input type=radio name=goods value="$_"$checked>$price G<br>|}
これを弄れば終了済みは表示しない、選択出来ないようにする等も出来ます。

 

港一覧に現在地を表示する

港リストから飛ばす処理をしている場所を弄ります。

 


if ($港 == $現在港) {print qq|<input type=否選択ラジオボタン>$港(現在地)<br>\n|next;}
同様に沖も処理。

 

CPUを作ってみる

CPUはユーザーをCPUとして処理することで作成できます。
場合によってはプログラムのみでも可(船にダメージを与える処理など)。
CPUデータの読み込みと書き込みを忘れないように気をつけてください。

 

CPUをストーカーさせてみる。これは簡単。ターゲット対象の処理は自分で考えてね
港の数値を弄れば沖のみ移動になります。
$uarea=$area $uport=$port

 

沖移動のみで待機させてみる。
$ulast=$last if($ulast>$umoved){$uarea=$area
$uport=""
$umoved=$moved+待機時間}
&set_u

 

移動、待機、戦闘を選択させてみる。
ここでは沖移動なので沖に居ない場合は攻撃しないように処理を加える。
$ulast=$last:if($ulast>$umoved){$アクション=int(rand(2))
if($アクション==0){$uarea=$area;$uport="":$umoved=$moved+600
}elsif($アクション==1 && $area == $uarea && !港にいない){&NPCとの戦闘処理
}else{$umoved=time+60;}}

 

戦闘処理(攻撃対象のみダメージ)

sub 戦闘処理{
&船データの読み込み;
&msg("NPC襲撃告知<br>")
for($攻撃回数=0;$攻撃回数<最大攻撃回数;$攻撃回数++){
my $CPUの攻撃力 = 1+int(rand(1));
$攻撃対象 = int(rand(@ship));
$攻撃対象のHP = $ship[$攻撃対象][2] - $攻撃力
if ($攻撃対象のHP <= 0) {&msg("<font color=\"#FF0000\">$ship[$攻撃対象][4]を撃沈されました!</font>");
&add_record("CPUに撃沈された告知 撃沈された船の告知:$ship[$攻撃対象][4]")
&i_lost;
undef @ship_ind;
return if @ship < 0;
foreach (0 .. $#ship) {
next if !$ship[$_][0];
push(@ship_ind , "$ship[$_][0],$ship[$_][1],$ship[$_][2],$ship[$_][3],$ship[$_][4]");}
return  if $#ship < 0;
} else {
splice(@ship_ind, $攻撃対象 , 1 , "$ship[$攻撃対象][0],$ship[$攻撃対象][1],$攻撃対象のHP,$ship[$攻撃対象][3],$ship[$攻撃対象][4]");
&msg("<font color=\"#FF0000\">$ship[$攻撃対象][4]を攻撃されました! $攻撃力 ptのダメージを受けました!</font>");
}}}

 


CPUにHPを設定しHP0で非表示にしてみる。ここでは商人名声をHPに設定。

CPUデータ読み込み
if($uid == "00001"){
        if($商人名声>0){
        $基本攻撃力=int(rand(2)+1);
        $攻撃力=int($a_i_atk*$基本攻撃力+30←おまけは適当に);
        $商人名声-=$攻撃力;&msg("$unameに$攻撃力 ptのダメージ")CPUデータ書き込み;}

HPが0以下になった場合
if($商人名声<=0){&event_write("$unameが消滅しました。");
    &msg("$unameを消滅させました。");$非表示判断=1;
    $umoved=time+1;
$負け数 増加処理;
    $商人名声=100*$負け数+500←おまけ;CPUデータ書き込み;}


で襲撃欄に表示する処理の所で非表示判断が1だった場合処理を飛ばせばOK。

非表示の解消 上の選択処理に追加すればOK.

 $ulast=$last;
    if($ulast>$umoved){
    $アクション=int(rand(2));
    if($非表示判断==1&&$アクション==0){$非表示判断=0;&event_write("$unameが復活");&msg("$unameが復活しました。")}elseif($非表示判断==0){
    if($アクション==0){
    $uarea=$area; ・・・・・

   

勝敗の記録と表示
SYSに変数を追加しBATTLEの勝敗部分で増加処理をして表示したい部分に表示させるだけなので例は省略。


探索
昔ソロモンコピって遊んでた時の産物を晒してみようと思ったけどまんま晒すのは改造できないのに改造鯖を作っちゃう人が居そうだからやめました。
ヒント的なことを書いておくと、既存の航海時代のプログラムを弄ってけば作れます。
特定の財宝がないと発見できないだとか、発見できても特定財宝(例えば鍵)が無ければ獲得できない等もできます。


何か知りたかったり分からなかったらTOPに書いてね。気分で返事する。


最終更新 2010/09/12 16:36  眠いから寝る(´・ω・`)

最終更新:2010年09月20日 19:12
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。