▼スレッド
│
└◇1331:NPC遭遇で殺害しているのにアイテムが盗まれる [cosmos] 11/18 17:11
└◇1332:追記ですが・・ [cosmos] 11/18 17:14
└◇1333:Re:追記ですが・・ [moon] 11/18 19:02
└◇1335:Re[2]:追記ですが・・ [cosmos] 11/18 21:20
└◇1336:Re[3]:追記ですが・・ [moon] 11/18 22:31
└◇1339:Re[4]:追記ですが・・ [cosmos] 11/19 00:13
└◇1340:Re[5]:追記ですが・・ [moon] 11/19 00:47
└◇1341:Re[6]:追記ですが・・ [moon] 11/19 10:21
└◇1344:Re[7]:追記ですが・・ [cosmos] 11/19 19:22
└◇1350:Re[8]:追記ですが・・ [moon] 11/20 00:25
└◇1351:Re[9]:追記ですが・・ [cosmos] 11/20 01:02
└◇1352:Re[10]:追記ですが・・ [moon] 11/20 07:54
└◇1353:Re[11]:追記ですが・・ [cosmos] 11/20 08:08
└◇1355:Re[12]:追記ですが・・ [cosmos] 11/20 17:28
└◇1357:Re[13]:追記ですが・・ [moon] 11/20 20:52<-last
初めまして。遅くながらもスクリプトオブサガの運営を始めさせていただきました。今まで数多くの改造を施していき、ある程度順調にいっていたのですが何箇所か引っかかってしまいました。スレッド一覧
のでこんな遅い時期で質問されても冷めていたら難ですが、教えてください。
一つ目は私は戦闘ファイル(fight.pl)で攻撃力だけで勝敗が決定する仕様を変更し、交互に攻撃できるようなシステムに改造しています。なので攻撃だけで勝敗が決定してしまう「result == 」の箇所を素早さというステータスで先攻後攻を判断させるような仕様に変更し、勝ち負け判定は先攻の者と後攻の者がお互いに与えたダメージ量の大小で判定させるように別の比較演算を使って計算させています。
そこで不具合が発生しました。ダメージ量で勝敗判定をさせている比較演算に変更したせいかSIONJAM様で公開されているNPC遭遇のアイテムフラグ「Ms」スキル(強制戦闘スキル)を持つモンスターに限ってこちらが殺害しているのに関わらずアイテムを奪われてしまいます。
Msスキルを持つモンスター以外はこちらが殺害してもアイテムを奪ってくるような珍現象がないのですが・・原因を教えてくださいませんか?
とりあえず仕様を変更していてはよくわからないと思いますのでソースを一部出しておきます。
#---------ダメージ値の差で勝利判定
if (!$php) { $kl++ }; if (!$hp) { $pkl++ };
if ($wn) { $rt = &rate($wn,$lz,$kl,$dt) } else { $rt = 0 }
if ($pwn) { $prt = &rate($pwn,$plz,$pkl,$pdt) } else { $prt = 0 }
if ($def_wm && $dmgresult == -1) {
if ($rt < $prt) { $pay = int(($prt - $rt) * $def_wm) }
if ($def_lt) { $pay = $def_lt if $pay > $def_lt }
$mn += $pay;
push (@msg,"$pay\Gの戦利金を手に入れました") if $pay;
}
if ($def_lm && $dmgresult == 1) {
if ($prt < $rt) { $pay = int(($rt - $prt) * $def_lm) }
if ($def_lt) { $pay = $def_lt if $pay > $def_lt }
$pmn += $pay;
&fmsg('金') if $pay;
}
ちなみに$dmgresult == -1というのはダメージをより多く与えた方(勝利者)の結果を示しています。
if ($itemchance && $pitems[$Sidice]) {
&splititem('i');
($item,$sts,$price) = split(/△/,$pitems[$Sidice]);
if ($sts !~ /Ns/) {
#-EDIT- if ($sts =~ s/Q[swat]//g) { $pab -= substr($sts,4,2); $pdb -= substr($sts,6,2) }
# splice(@pitems,$Sidice,1); push(@items,"$item△$sts");
# $psp =~ s/Qb//g if $sts =~ /Bw/;
# $psp =~ s/Qk//g if $sts =~ /Kt/;
# $psp =~ s/Qx//g if $sts =~ /Ax/;
# $psp =~ s/Qm//g if $sts =~ /Sw/;
if ($psp =~ /Ng/ && $sts =~ /(Q[swat]|Cp)/) {
$sts =~ s/Cp//g;
push(@items,"$item△$sts");
} else {
if ($sts =~ s/Q[swat]//g) { $pab -= substr($sts,4,2); $pdb -= substr($sts,6,2) }
splice(@pitems,$Sidice,1); push(@items,"$item△$sts");
$psp =~ s/Qb//g if $sts =~ /Bw/;
$psp =~ s/Qk//g if $sts =~ /Kt/;
$psp =~ s/Qx//g if $sts =~ /Ax/;
$psp =~ s/Qm//g if $sts =~ /Sw/;
foreach (@ele_ak) { if ($sts =~ /$_([0-9])/) { $psp =~ s/$_$1// } }
foreach (@ele_df) { if ($sts =~ /$_([0-9])/) { $psp =~ s/$_$1// } }
}
#-END of EDIT- SION0026v1.00-3-4/4
&joinitem('iI'); &fmsg('奪');
if ($nm eq $Wn) {&event("$Wnが$Lnの$itemを奪いました。")}
else {&event("$Wnが$Lnの$itemを奪いました。")}
}
}
#-ADD-
} else {
if ($itemchance && $items[$Sidice]) {
&splititem('i');
($item,$sts,$price) = split(/△/,$items[$Sidice]);
if ($sts !~ /(Ns|Ms)/) {
if ($sts =~ s/Q[swat]//g) { $ab -= substr($sts,4,2); $db -= substr($sts,6,2) }
splice(@items,$Sidice,1); push(@pitems,"$item△$sts");
$sp =~ s/Qb//g if $sts =~ /Bw/;
$sp =~ s/Qk//g if $sts =~ /Kt/;
$sp =~ s/Qx//g if $sts =~ /Ax/;
$sp =~ s/Qm//g if $sts =~ /Sw/;
&joinitem('iI'); &fmsg('失');
} } }
#-END of ADD- SION0002v3.01-2-5(2)/18
# $bp = $bn = $pbp = $pbn = ''; $plf = $id;
$bp = $bn = $pbp = $pbn = ''; $time_now = time;
はアイテムを盗んだときと盗まれたときの判定です。
Perlは初心者なので難しい説明は理解できないかもしれませんスレッド一覧
> Msスキルを持つモンスター以外はこちらが殺害してもアイテムを奪ってくるような珍現象がないのですが・・原因を教えてくださいませんか?スレッド一覧
以下のようなことでしょうか?
http://www11.big.or.jp/~hazymoon/ownerbbs/treebbs.cgi?kako=1&all=1087&s=1087
このことでしたら同スレッドの下のほうに修正方法(未確認ですが)が書いてありますので、改造状態にあわせて適宜読み替えていただければ良いと思います。
> このことでしたら同スレッドの下のほうに修正方法(未確認ですが)が書いてありますので、改造状態にあわせて適宜読み替えていただければ良いと思います。スレッド一覧
ありがとうございますと同時に過去スレにあったのですね。すいませんでした。過去スレに記載されたことをやってみます。
2つ目の質問ですがHPというステータスともう一つMPというステータスもあります。
MPをセーブ後に自動回復させるようにしたいのですがどうすればいいのでしょうか?HPの自動回復の速度とは別の設定にしたいのですが。
あとHPを参考にしてもわかりませんでした。MPのフラグは$mp、最大MPは$xmです。
> 2つ目の質問ですがHPというステータスともう一つMPというステータスもあります。スレッド一覧
> MPをセーブ後に自動回復させるようにしたいのですがどうすればいいのでしょうか?HPの自動回復の速度とは別の設定にしたいのですが。
> あとHPを参考にしてもわかりませんでした。MPのフラグは$mp、最大MPは$xmです。
以下はオリジナルのsos2.cgiの場合です。
1. sub hprecoverとsub hpcheckをコピーしてsub mprecoverとsub mpcheckに変更する。
2. sub mprecover内の$Hhpを$Hmpに、$Hxpを$Hxmに、$rchpを$rcmpに、大文字HをMに変更する。
3. HP用の設定($def_pz、$def_hm、$def_hn、$def_hs、$def_hh)に対応するMP用の設定値をグローバル変数として定義する。
4. sub mprecover内の$def_pz、$def_hm、$def_hn、$def_hs、$def_hhを新しく定義した変数に変更する。
5. 必要に応じて、sub make_conの「$hp = &hpcheck($hp,$xp,$bp - $def_ha);」の下に以下を追加する。
$mp = &mpcheck($mp, $xm, $bp - $def_ha); # 「$bp - $def_ha」はお好きなように変更
6. sub make_conの「($hp) = &hprecover($hp,$xp,$sp,$av,$tm,$fg)」の次の処理として以下を追加する。
($mp) = &mprecover($mp, $xm, $sp, $av, $tm, $fg);
7. 必要に応じて、上記以外のhprecoverとhpcheckの呼び出し処理の後にmprecoverまたはmpcheckの呼び出しを追加する。(おそらく戦闘の時にはMPを使うのだろうとは思いますが省略しました。)
抜けや間違いがあるかもしれませんが大体こんなところです。
まあ、回復処理の内容はhprecoverとhpcheckを検索して流れを追ってみればわかると思います。
回復せずずっとそのままになってしまってます。改造の仕方がおかしかったのでしょうか・・スレッド一覧
# Sub Make Continue #の一部
if ($av eq 'dead') {
$bp += $now;
if ($bp >= $def_ha) {
$av = 'alive';
$hp = &hpcheck($hp,$xp,$bp - $def_ha);
$mp = &mpcheck($mp,$xm,$bp - $def_ha);
$bp = ''
}
}
else { ($hp) = &hprecover($hp,$xp,$sp,$av,$tm,$fg);($mp) = &mprecover($mp,$xm,$sp,$av,$tm,$fg) }
# Sub MagicPoint Recover #
sub mprecover {
($Mmp,$Mxm,$Msp,$Mav,$Mtm,$Mfg) =@_;
$now = time - $Htm; $tmb = 0;
# if ($Mav eq 'poison') { $tmb -= $def_pz }
# if ($Msp =~ /Hl/) { $tmb += $def_hm }
if ($Mfg eq 'NS') { $rcmp = int($now / (($def_mn * 3 - $tmb) * 60)) }
if ($Mfg eq 'SS') { $rcmp = int($now / (($def_ms * 3 - $tmb) * 60)) }
if ($Mfg eq 'HS') { $rcmp = int($now / (($def_mh * 3 - $tmb) * 60)) }
if ($Mfg eq 'IS') { $rcmp = int($now / (($def_mi - $tmb) * 60)) }
$Mmp = &mpcheck($Mmp,$Mxm,$rcmp); $Mtm = time;
return($Mmp,$Mtm);
}
# Sub MagicPoint Check #
sub mpcheck {
$_[0] += $_[2];
$_[0] = 1 if $_[0] < 1;
$_[0] = $_[1] if $_[0] > $_[1];
return($_[0]);
}
これだけでいいと思うのですが。iniファイルで設定もちゃんとしています
> 回復せずずっとそのままになってしまってます。改造の仕方がおかしかったのでしょうか・・スレッド一覧
略...
> これだけでいいと思うのですが。iniファイルで設定もちゃんとしています
先に書いたものではsub mprecover内のhpcheckをmpcheckに変更するということが足りなかったようですが、ちゃんと変更されているようなのでこれは大丈夫です。
一つだけ$Htmのままであることが原因だと考えられます。
書き忘れていたことがありましたので補足します。スレッド一覧
もし、sub fightなどで「($php,$ptm) = &hprecover($php,$pxp,$psp,$pav,$ptm,$pfg);」の下にmprecoverを追加する場合は追加するのではなく以下のように変更する必要があります。
($php) = &hprecover($php, $pxp, $psp, $pav, $ptm, $pfg); # $ptmの戻り値を代入しない
($pmp, $ptm) = &mprecover($pmp, $pxm, $psp, $pav, $ptm, $pfg);
もしくは、
my $tmpptm = $ptm;
($php, $ptm) = &hprecover($php, $pxp, $psp, $pav, $tmpptm, $pfg);
($pmp, $ptm) = &mprecover($pmp, $pxm, $psp, $pav, $tmpptm, $pfg); # $ptmの戻り値は代入してもしなくてもどちらでも良い
MPは無事回復するようになりました♪ごめんなさいあと2つ質問があります。今まで改造してきて気になる箇所が多くて・・スレッド一覧
3つ目ですが装備品として「ローブ、サークレット、兜、マント、靴」の5つの装備品を新しく取り入れたいのでhttp://www2k.biglobe.ne.jp/%7Eyamahon/sos2/の兜装備システムを参考にして追加する計画を立てています。
そこでまずswatの箇所をswathrame
として
$def_yh〜e = '○○の兜'; # 兜
$def_bn5〜9 = '0002'; # ボーナス
$def_pc5〜9 = 30; # 下取り価格
# を追加します
とそれぞれ設定し# Sub Use After #に
elsif ($sts =~ /(Hr〜略字|Yh〜Ye)/) { &arm($1,'Qh〜Qe') }
まで設定していってからここまであっていますでしょうか?
それでここからが問題です。
# Sub Blacksmith #の説明がよくわからないです。
そしてローブとサークレットと兜を装備した場合はアイテムデータの回復量の2桁が賢さ、次の2桁が防御として上昇し
靴とマントの場合はアイテムデータの回復量の2桁が素早さ、次の2桁が防御として上昇させ、杖を表すスキル(Wd)ではアイテムデータの回復量の2桁が攻撃、次の2桁が賢さとして変更したいのですが
賢さと素早さに関しては装備された分のプラス数値分を変数としてそれぞれ$bit,$bspeedとして追加したのですが、どこをどうすればいいのでしょうか?
> 3つ目ですが装備品として「ローブ、サークレット、兜、マント、靴」の5つの装備品を新しく取り入れたいのでhttp://www2k.biglobe.ne.jp/%7Eyamahon/sos2/の兜装備システムを参考にして追加する計画を立てています。スレッド一覧
>
> そこでまずswatの箇所をswathrame
> として
> $def_yh〜e = '○○の兜'; # 兜
> $def_bn5〜9 = '0002'; # ボーナス
> $def_pc5〜9 = 30; # 下取り価格
> # を追加します
>
> とそれぞれ設定し# Sub Use After #に
> elsif ($sts =~ /(Hr〜略字|Yh〜Ye)/) { &arm($1,'Qh〜Qe') }
> まで設定していってからここまであっていますでしょうか?
変数定義の「〜」は複数行に渡ることの省略だと思うのですが、elsif文の「〜」は微妙なところに「略字」があるため念の為に形式を書いておきます。
elsif ($sts =~ /(Hr|Yh)/) { &arm($1,'Qh') }
〜
elsif ($sts =~ /(略字|Ye)/) { &arm($1,'Qe') }
> それでここからが問題です。
> # Sub Blacksmith #の説明がよくわからないです。
最初のif-elsifブロックは習得しているスキルで作成可能な中から乱数で1つだけ選択しています。
そして、if ($trnd == 4) {〜}内が兜が作成される場合です。
> そしてローブとサークレットと兜を装備した場合はアイテムデータの回復量の2桁が賢さ、次の2桁が防御として上昇し
> 靴とマントの場合はアイテムデータの回復量の2桁が素早さ、次の2桁が防御として上昇させ、杖を表すスキル(Wd)ではアイテムデータの回復量の2桁が攻撃、次の2桁が賢さとして変更したいのですが
> 賢さと素早さに関しては装備された分のプラス数値分を変数としてそれぞれ$bit,$bspeedとして追加したのですが、どこをどうすればいいのでしょうか?
sub armの「$ab += $iak; $db += $idd;」を以下の形式に変更すれば良いです。
if($a1 eq 'ローブ略字' || $a1 eq 'オリジナルローブ略字' || 〜){
# ローブ系、サークレット系、兜系
$bit += $iak;
$db += $idd;
}
elsif($a1 eq '靴略字' || $a1 eq 'オリジナル靴略字' || 〜){
# 靴系、マント系
$bspeed += $iak;
$db += $idd;
}
elsif($a1 eq '杖略字' || $a1 eq 'オリジナル杖略字'){
# 杖系
$ab += $iak;
$bit += $idd;
}
else{
# その他
$ab += $iak;
$db += $idd;
}
ありがとうございました!あとは装備されて加算された分を戦闘に反映させるために戦闘ファイルのフラグにも足して処理していかないとダメってことですよね?スレッド一覧
取り敢えずやってみてまたつまづいてしまったときは質問致します
それで4つ目の質問なのですが手紙の機能をメールボックスのように拡張して、自分が送った手紙を何件か保存できる送信箱と、相手から送られた手紙を何件が溜めることができる受信箱があり、相手から送られた手紙に返信ボタンがあるようにしたいのです。更にMy Recordのことですが、手紙で送られた分と「〜を倒し〜の勝利金を獲得しました」という情報を別々のデータファイルに分け、かつ、ユーザーデータファイルから、手紙の内容とレコードの内容を分割して、
手紙を送るともしその相手が「メール設定」をしていると直接その相手に手紙の内容が送られるsendmailも搭載したいのですが、マイレコードの改造方法はよく見かけるのですが、上のように色々と機能を追加するとバグりそうなので、以上の改造をして、もっとSOS2にコミュニティ思考を強調させたいのですが、ズバリ上のような改造方法を教えてくださいませんか?
ここに設置されているSOS2のようなソート別機能とかはとてもオンラインゲームで重宝できると思いますのでどうか宜しくお願い致します
> 上のように色々と機能を追加するとバグりそうなので、以上の改造をして、もっとSOS2にコミュニティ思考を強調させたいのですが、ズバリ上のような改造方法を教えてくださいませんか?スレッド一覧
まずは試行錯誤してください。
1から教えるなどという真似はしたくありません。
> まずは試行錯誤してください。スレッド一覧
> 1から教えるなどという真似はしたくありません。
わかりました。頑張ってみます。
ありがとうございます。
すいません。装備品の追加改造をおこなっているときにつまづいた箇所がありますスレッド一覧
sionjam様のアイテム強化関連で#=======《 Sort ITEM 》==================================================#
の
if ($sts =~ /$eq_sts/) { $sitems[$_] = "90$sts△$sitems[$_]"; }
elsif ($sts =~ /(Sw|Kn|Kt|Ax|Gv|Bw|Mi|Wd|Yw)/) { $sitems[$_] = "91$sts△$sitems[$_]"; }
elsif ($sts =~ /(Sh|Ys)/) { $sitems[$_] = "92$sts△$sitems[$_]"; }
elsif ($sts =~ /(Ar|Ya)/) { $sitems[$_] = "93$sts△$sitems[$_]"; }
elsif ($sts =~ /(Jw|Yt)/) { $sitems[$_] = "94$sts△$sitems[$_]"; }
elsif ($sts =~ /Ca/) { $sitems[$_] = "50$sts△$sitems[$_]"; }
elsif ($sts =~ /Bg/) { $sitems[$_] = "60$sts△$sitems[$_]"; }
elsif ($sts =~ /Rb/) { $sitems[$_] = "40$sts△$sitems[$_]"; }
elsif ($sts =~ /Ss/) { $sitems[$_] = "41$sts△$sitems[$_]"; }
elsif ($sts =~ /Ig/ && $sp =~ /(Ws|As|Sc)/) { $sitems[$_] = "31$sts△$sitems[$_]"; }
elsif ($sts =~ /Hb/ && $sp =~ /Mf/) { $sitems[$_] = "19$sts△$sitems[$_]"; }
elsif ($sts =~ /Fd/) { $sitems[$_] = "20$sts△$sitems[$_]"; }
elsif ($sts =~ /Hb/) { $sitems[$_] = "21$sts△$sitems[$_]"; }
elsif ($sts =~ /Di/) { $sitems[$_] = "10$sts△$sitems[$_]"; }
elsif ($sts =~ /Lc/) { $sitems[$_] = "11$sts△$sitems[$_]"; }
elsif ($sts =~ /Pi/) { $sitems[$_] = "12$sts△$sitems[$_]"; }
elsif ($sts =~ /Oi/) { $sitems[$_] = "13$sts△$sitems[$_]"; }
elsif ($sts =~ /Na/ && $sp =~ /(Ws|As|Sc)/) { $sitems[$_] = "30$sts△$sitems[$_]"; }
else { $sitems[$_] = "00$sts△$sitems[$_]"; }
の辺りの箇所なのですが新しい装備を追加する場合どのように設定すればいいのでしょうか?設定しなければならないような場所に見えます
あと# Sub Blacksmith #でこの前少しアドバイスを頂いたのですが
$rnd = int(rand(100)) + 1;
if ($sp =~ /Ws/ && $sp =~ /As/ && $sp =~ /Sc/) { $trnd = int(rand(8)) }
elsif ($sp =~ /Ws/ && $sp =~ /As/) { $trnd = int(rand(3)) }
elsif ($sp =~ /Ws/ && $sp =~ /Sc/) { $trnd = (0,3)[int(rand(2))] }
elsif ($sp =~ /As/ && $sp =~ /Sc/) { $trnd = int(rand(3)) + 1 }
elsif ($sp =~ /Ws/) { $trnd = int(rand(1)) }
elsif ($sp =~ /As/) { $trnd = int(rand(2)) + 1 }
elsif ($sp =~ /Sc/) { $trnd = 3 }
の辺りの{ $trnd = int(rand(2)) + 1 }という乱数みたいなものは新しい装備を追加する場合どういう思考で変えていかなければならないのかいまいちわからないです・・
> すいません。装備品の追加改造をおこなっているときにつまづいた箇所がありますスレッド一覧
>
> sionjam様のアイテム強化関連で#=======《 Sort ITEM 》==================================================#
略...
> の辺りの箇所なのですが新しい装備を追加する場合どのように設定すればいいのでしょうか?設定しなければならないような場所に見えます
> elsif ($sts =~ /(Sw|Kn|Kt|Ax|Gv|Bw|Mi|Wd|Yw)/) { $sitems[$_] = "91$sts△$sitems[$_]"; }
> elsif ($sts =~ /(Sh|Ys)/) { $sitems[$_] = "92$sts△$sitems[$_]"; }
> elsif ($sts =~ /(Ar|Ya)/) { $sitems[$_] = "93$sts△$sitems[$_]"; }
> elsif ($sts =~ /(Jw|Yt)/) { $sitems[$_] = "94$sts△$sitems[$_]"; }
このあたりに追加することになると思います。
順番が宝珠の次で良いのでしたら95〜99を使えば良いですし、これらの中間に並べたい場合は例えば武器と盾の間なら92番以降をずらせば良いだろうと思います。
> あと# Sub Blacksmith #でこの前少しアドバイスを頂いたのですが
略...
> の辺りの{ $trnd = int(rand(2)) + 1 }という乱数みたいなものは新しい装備を追加する場合どういう思考で変えていかなければならないのかいまいちわからないです・・
コメントを追加しました。
概要としてはif文で作成スキルの全組み合わせを試し、乱数で$trndに武器なら0、盾なら1、鎧なら2、銀細工なら3が代入されるようになっています。
> if ($sp =~ /Ws/ && $sp =~ /As/ && $sp =~ /Sc/) { $trnd = int(rand(4)) } # 武器、防具、銀細工のすべての作成スキル所持
> elsif ($sp =~ /Ws/ && $sp =~ /As/) { $trnd = int(rand(3)) } # 武器と防具のみ
> elsif ($sp =~ /Ws/ && $sp =~ /Sc/) { $trnd = (0,3)[int(rand(2))] } # 武器と銀細工のみ
> elsif ($sp =~ /As/ && $sp =~ /Sc/) { $trnd = int(rand(3)) + 1 } # 防具と銀細工のみ
> elsif ($sp =~ /Ws/) { $trnd = int(rand(1)) } # 武器のみ
> elsif ($sp =~ /As/) { $trnd = int(rand(2)) + 1 } # 防具のみ
> elsif ($sp =~ /Sc/) { $trnd = 3 } # 銀細工のみ