したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

【Weiss】技術的なスレ

1:2003/03/15(土) 21:09 ID:N/RDwX.g
技術的なスレはこちらに、
はじめてのWeissのスレがあまりに初心者と言えないので。。
例えばソースコードなどの修正や追加などはこちらに

2名無しさん:2003/03/16(日) 10:34 ID:rwQixM6A
はじめまして。Weissを愛用させてもらっている者です。

モンスを実装するとグラなどで落ちるバグですが、なんとなく原因がわかりました。
マップの端に居るモンスが移動しようとする際、そこが移動可能か確かめるためにマップの
*.gatが読み込まれているメモリにアクセスするのですが、その際にメモリ範囲外かどうかチェックされてないために、
アクセス違反を起こすようです。

なので、例えば、
until ((tm.gat[xy.X][xy.Y] and 1) <> 0) or (c = 100);
↑のようなgatのメモリを参照する式の手前で、
if (xy.X < 0) then beginxy.X := 0;end;
if (xy.Y < 0) then beginxy.Y := 0;end;
if (xy.X > tm.Size.X-1) then beginxy.X := tm.Size.X-1;end;
if (xy.Y > tm.Size.Y-1) then beginxy.Y := tm.Size.Y-1;end;
のような式を書いてやればエラー落ちしなくまりました。
私は、4376、4427、4599、4640、4645行目に修正を加えてあります。
xy.Xではなく、Point.Xなどとなっている場合もあるので適宜変更してください。


また、入っただけで落ちるprt_maze01、prt_maze03、pay_fild03は、
*.gatの読み込みに問題があるようで、該当するgatファイルを消すなりすれば問題なく入れます。
この場合、モンスが壁や段差を無視して歩くなど、モンスの行動がおかしくなりますが、
その場合でも上記修正を加えてあれば落ちる事はないと思います。

3109:2003/03/16(日) 18:33 ID:t7UtavwA
//shop buy/sell選択
のところなんですが

1: //sell
begin
w := 0;
for i := 1 to 100 do begin
if (tc.Item[i].Amount > 0) and (tc.Item[i].ID <> 0) then begin
w := w + 1;
end;
end;
WFIFOW(0, $00c7);
WFIFOW(2, 4 + w * 10);
j := 0;
for i := 1 to 100 do begin
if (tc.Item[i].Amount > 0) and (tc.Item[i].ID <> 0) then begin
j := j + 1;
WFIFOW(4 + (j-1)*10,j);
WFIFOL(6 + (j-1)*10,tc.Item[i].Data.Price);
WFIFOL(10+ (j-1)*10,tc.Item[i].Data.Price);//OC未対応
end;
end;
Socket.SendBuf(buf, 4 + w * 10);
end;
とやってみました まだ売るとこはつくってないんですが
Sell押したときに表示はされるとおもいます
なにぶんDelphiを始めて5日目なのでご指摘お願いします(;´д`)


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板