やっぱり意味不明…。
発生条件は
ポタで移動する前のマップサイズより、移動後の座標位置が大きい場合。
のようです。
回避方法は
if tm.Block[a][b] = nil then continue;
を
if tm.Block[a][b].MobProcTick < Tick then begin
の前に追加する。
回復速度に関してですが、計算式とデータテーブルを勘違いしてました…。
遅くしてどうするんだ…。
if td.HP2 <> 0 then begin //HP回復速度%
HPDelayFix := HPDelayFix + td.HP2 - 100;
end;
if td.SP2 <> 0 then begin //SP回復速度%
SPDelayFix := SPDelayFix + td.SP2 - 100;
end;
〜略〜
{追加}
for i:=0 to 3 do begin
HPDelay[i] := HPDelay[i] * HPDelayFix div 100;
if HPDelay[i] < 150 then HPDelay[i] := 150;
SPDelay[i] := SPDelay[i] * SPDelayFix div 100;
if SPDelay[i] < 150 then SPDelay[i] := 150;
end;
{追加ココまで}
こんな感じにしておけばいいかと。
これでもダメそうな気がするけど…。
//--------------------------------------------------------------------------
$007d: //MAPロード完了
begin
tm := Map.Objects[Map.IndexOf(tc.Map)] as TMap;
while tm.Mode < 2 do
Application.ProcessMessages;
if tc.tmpMap <> '' then begin
tc.Map := tc.tmpMap;
tc.tmpMap := '';
end;
tc.MData := tm;
if CharaPID.IndexOf(tc.PID) = -1 then CharaPID.AddObject(tc.PID, tc);
移動時の範囲チェックエラーの個所が2つ出ましたので、下記に記したいと思います。
お役に立てれますかどうかは判りませんが、皆様方の何かのご助力になれれば幸いです。
main.pas
if (tc.MMode = 0) and (tm.gat[NextPoint.X][NextPoint.Y] <> 0) then begin
game.pas
tm.Block[tc.Point.X div 8][tc.Point.Y div 8].CList.AddObject(tc.PID, tc);