>>521
回復速度について
CalcAbility()
〜省略〜
if td.HP2 <> 0 then begin //HP回復速度%
HPDelayFix := HPDelayFix + 100 - td.HP2;
end;
if td.SP2 <> 0 then begin //SP回復速度%
SPDelayFix := SPDelayFix + 100 - td.SP2;
end;
CalcStat()
〜省略〜
for i := 0 to 3 do begin
HPDelayFix := 0;
SPDelayFix := 0;
end;
〜省略〜
j := 100 - HPDelayFix;
if j < 0 then j := 0;
k := 100 - SPDelayFix;
if k < 0 then k := 0;
for i:=0 to 3 do begin
HPDelay[i] := HPDelay[i] * Cardinal(j) div 100;
if HPDelay[i] < 150 then HPDelay[i] := 150;
SPDelay[i] := SPDelay[i] * Cardinal(k) div 100;
if SPDelay[i] < 150 then SPDelay[i] := 150;
end;
該当個所は解ると思うのでこれに差し替えてください…。
PT分配エラーについては
if tpa.Member[i].Map = Map then Inc(m);
を
tc1 := tpa.Member[i];
if tc1 <> nil then begin
if tc1.Map = Map then Inc(m);
にして、同様に
if tpa.Member[i].Map = Map then CalcLvUP(tpa.Member[i],l,w);
を
tc1 := tpa.Member[i];
if tc1 <> nil then begin
if tc1.Map = Map then CalcLvUP(tc1,l,w);
に換えてください。
リミットについては
MonsterDie()内の
if DisableLevelLimit or (tc1.BaseLV < 99) then
と
if DisableLevelLimit or ((tc1.Job = 0) and (tc1.JobLV < 10)) or ((tc1.Job <> 0) and (tc1.JobLV < 50)) then
の条件分岐を外して、
CalcLvUP()内の
tc1.BaseEXP := tc1.BaseEXP + EXP;
を
if DisableLevelLimit or (tc1.BaseLV < 99) then
tc1.BaseEXP := tc1.BaseEXP + EXP;
に、
tc1.JobEXP := tc1.JobEXP + JEXP;
を
if DisableLevelLimit or ((tc1.Job = 0) and (tc1.JobLV < 10)) or ((tc1.Job <> 0) and (tc1.JobLV < 50)) then
tc1.JobEXP := tc1.JobEXP + JEXP;
にしてください。
U系にてVerを問わず、マップ移動時に追加移動処理の場所でエラーがでました。
現状他のユーザの方を呼びこんでの実験だったので006では>534>532の線もあり、
004・005での検証でした。前Verでの報告申し訳御座いません。
main.pas
if (tc.MMode = 0) and (tm.gat[NextPoint.X][NextPoint.Y] <> 0) then begin
>>536
やっぱり私の方では出ませんね…。
とりあえず調べる点は
if (tc.MMode = 0) and (tm.gat[NextPoint.X][NextPoint.Y] <> 0) then begin
だと、tcがnilかどうかとNextPointがgatの最大より大きくないか、
tn.Map := ts.Map;
ならtsがnilでないか。
main.pas
//アイテム&スキル効能地処理
k := k + NPCAction(tm,tn,Tick)
箇所にてマグヌスを使い複数の敵を当てた時にエラーが発生致しました。
U0x007cではDec(tn.Count);の位置でデバッガがストップします。
複数の敵が重なった時、マグヌスが消える際の値がおかしくなっているものではと思い、
置き換えて再度テストして見ましたが、上記の効能地の場所にてエラーが起きました。
此方で書き換えたものは$84: //マグヌス以下を
DamageProcess1(tm, tn.CData, ts1, dmg[0], Tick);
if tn.Count >= 1 then Dec(tn.Count);
if tn.Count <= 0 then begin
DelSkillUnit(tm, tn);
に置き換えましたが、上記エラーを含め問題・修正がありましたら
ご意見ご対処等お聞き出来れば幸いです。宜しくお願い致します。
>初心者スレ120様
いつもご意見・修正等有難う御座います。
U0x007cにてポータルが展開せずSPはそのまま消費された状態になっていたのは
此方のスレを読み返して見ると>>566で書かれていた事はこれを差していたのですね。 >>572
はい、書かれました通りです。実力不備な点もあり、曖昧に書いてしまい申し訳御座いませんでした。 >>571
②項ですが、此方では2人以上で叩いている時、敵を撃破したらエラーになりました。
エラーの箇所はMain.pasの
if (tc1.PartyName = '') or (tpa.EXPShare = 0) then begin
でデバッガストップしました。
DB異常ではないと思うので一応。
Weiss:U0x008a
skill_db:あぷろだ2の[Weiss046](THX!)
で、カート引っ張ってマップ移動すると範囲エラーが出ます。
Common.pas Line:1521
if (Option and 8) <> 0 then begin //カート
i := i + Skill[39].Data.Data1[Skill[39].EffectLV];
を
if (Option and 8) <> 0 then begin //カート
i := i + Skill[39].Data.Data1[Skill[39].Lv];
に修正すると動作しました。
ソースを詳しく追っているわけではないので、もしEffectLvがセットされて
呼び出される状況があったら申し訳ないですが。
死体ヒールが仕様なら…ということでちょっとコード書き換えました。
未テストなので自己責任で。
Main.pas Line:2905辺り(ずれてたらごめんなさい)
54: //リザレクション
begin
//if (tc1.Sit <> 1) or (tc1.HP > 0) then beginこれを
if (tc1.Sit <> 1) then begin //こっちに
更に、6,7行ほど下って
tc1.HP := tc1.HP + dmg[0];//これの後に
if tc1.HP > tc1.MAXHP then tc1.HP := tc1.MAXHP;//追加
これで死体ヒールをかけても蘇生出来ると思います。問題は、「死んだふり」中でも
蘇生で強制起立がかかるということでしょうか。
リザとヒールの問題なのですが、今の条件だと死んでいてもスキルがかかってしまうので
わたしはターゲットの判定を
if (tc1 <> nil) or ((tc1.HP = 0) and (MSkill <>54)) then begin
としています
わたしの古い記憶だと本サーバでは死体ヒールができなくなっていたような気がしましたので〜
>>615
うーむ。65さんもDisableSkillLimit辺りが怪しいという返答が来ているので、
SendCSkillList()のforループ先頭に
if (tc.ver2 <> 9) and (157 < i) then Break;
if (157 < i) and (i < 210) then Continue;
コレでも付けてみてください。
DisableSkillLimit関連で怪しいところはコレぐらいですし。