発言者: cosmos
発言日: 2006 11/18 17:11
初めまして。遅くながらもスクリプトオブサガの運営を始めさせていただきました。今まで数多くの改造を施していき、ある程度順調にいっていたのですが何箇所か引っかかってしまいました。
のでこんな遅い時期で質問されても冷めていたら難ですが、教えてください。
一つ目は私は戦闘ファイル(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;
はアイテムを盗んだときと盗まれたときの判定です。
▼関連発言
│
└◆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