>>621
すません。全然修正のこと書いて無かったですね…。
カートの修正個所は>>599 の
i := i + Skill[39].Data.Data1[Skill[39].EffectLV];
を
i := i + Skill[39].Data.Data1[Skill[39].Lv];
に
カートを着けたとき鯖移動などで落ちるのは >>616 に書かれている通り、
プッシュカート未修得の際起きます。
CalcStat()の移動速度の部分に
if Skill[39].Lv = 0 then
i := i + Skill[39].Data.Data1[1]
else
i := i + Skill[39].Data.Data1[Skill[39].Lv];
と書き換えることで回避できます。
さてと、読み直してみたらまたきちんと書いてない…。
ClacStat()の移動部分のカート部を書き換えてください。
if (Option and 8) <> 0 then begin //カート
if Skill[39].Lv = 0 then
i := i + Skill[39].Data.Data1[1]
else
i := i + Skill[39].Data.Data1[Skill[39].Lv];
end;
こんな感じで。
if (tc.Item[i].ID <> 0) and (tc.Item[i].Amount <> 0) and tc.Item[i].Data.IEquip and
((tc.Item[i].Equip and l) = l) and (tc.Item[i].Card[0] <> $00ff) and
(tc.Item[i].Refine < 10) then begin
↓
if (tc.Item[i].ID <> 0) and (tc.Item[i].Amount <> 0) and tc.Item[i].Data.IEquip and
((tc.Item[i].Equip and l) = l) and (tc.Item[i].Refine < 10) then begin
>>645
の範囲チェックエラーですが、
Main.pasの
MonsterDie手続き内、ターゲット解除処理の
if (tc1.MMode = 0) and (tc1.MTarget = ts.ID) then begin
tc1.MMode := 0;
tc1.MTarget := 0;
end;
を
if (tc1.MMode <> 0) and (tc1.MTarget = ts.ID) then begin
tc1.MMode := 0;
tc1.MTarget := 0;
end;
に変更すると直ると思います。
連続で失礼します。と、ちょっと長くて申し訳ないのですが、
>複数接続の際に装備の変更が他のキャラに送信されない
のはCommon.pas内部、SendCStatの最後にある
if View then begin
//見た目変更
{中略}
end;
これを
if View then begin
//見た目変更
tm := TMap(Map.Objects[Map.IndexOf(tc.Map)]);
for j := tc.Point.Y div 8 - 2 to tc.Point.Y div 8 + 2 do begin
for i := tc.Point.X div 8 - 2 to tc.Point.X div 8 + 2 do begin
for k := 0 to tm.Block[i][j].CList.Count - 1 do begin
tc1 := tm.Block[i][j].CList.Objects[k] as TChara;
if (tc <> tc1) and (abs(tc.Point.X - tc1.Point.X) < 16) and (abs(tc.Point.Y - tc1.Point.Y) < 16) then begin
WFIFOW(0, $00c3);
WFIFOL(2, tc.ID);
WFIFOB(6, 2);
WFIFOB(7, tc.Weapon);
tc1.Socket.SendBuf(buf, 8);
WFIFOB(6, 3);
WFIFOB(7, tc.Head3);
tc1.Socket.SendBuf(buf, 8);
WFIFOB(6, 4);
WFIFOB(7, tc.Head1);
tc1.Socket.SendBuf(buf, 8);
WFIFOB(6, 5);
WFIFOB(7, tc.Head2);
tc1.Socket.SendBuf(buf, 8);
WFIFOB(6, 8);
WFIFOB(7, tc.Shield);
tc1.Socket.SendBuf(buf, 8);
end;
end;
end;
end;
end;
とすると正常に周囲に通知されると思います(余計なパケが増えそうですが)。
変数j, k, tc1, tmは未定義なのでj, kはinteger, tc1はTChara, tmはTMap
として定義して下さい。
#BugFixのコードも技術スレの方がいいでしょうか?
失礼、
>if (tc <> tc1) and (abs(tc.Point.X - tc1.Point.X) < 16) and
(abs(tc.Point.Y - tc1.Point.Y) < 16) then begin
(先の書き込みだと1行、読みにくくて申し訳ありません)
これは
if (abs(tc.Point.X - tc1.Point.X) < 16) and
(abs(tc.Point.Y - tc1.Point.Y) < 16) then begin
の間違いです。
>PT公平分配のバグ
Common.pas PartyDistribution内の
l := (tpa.EXP + (tpa.EXP div 10) * (m - 1)) div m + 1; //適当〜
w := (tpa.JEXP + (tpa.JEXP div 10) * (m - 1)) div m + 1; //適当〜
この二行を
l := (tpa.EXP + 1) div (m - 1);
w := (tpa.JEXP + 1) div (m - 1);
if 2 < m then begin
l := l + (tpa.EXP div 4) * (m - 2) div (m - 1);
w := w + (tpa.JEXP div 4) * (m - 2) div (m - 1);
end;
これに差し替えると、公平分配が正常に動作します。
Note: If this is a derivative of Athena, then you are required by law to post the source code for it, as it is an open source project and you have posted screenshots, which is a form of the open source project in question..
Note also, if it is a derivative of Yare or any other Open Source project and you post those screenshots then what I posted above is also valid.
Not obeying will lead to prosecution, and changing websites will just further the punishment
>>682
At first it's not a derivative of athena.
Old version of Weiss use athena's route search algorithm,
but now use different code. And other code is original.
Weiss official site is stop since 3 months ago. This site is not official.
however, Weiss is under GPL license, I prepare to open Weiss source code.
please wait for some time.
今日はじめてWeissを使い始めたのですがログインしてキャラを作成するまではいいのですが
「Access violation at address 0046531F in module 'Weiss.exe'.Read of adress 00000090」
と読み込み違反やでとでてゲームが始まりません。
何でこうなるんでしょうか?
//47バイト受信
while (len<47) do begin
len := Socket.ReceiveLength;
end;
if len >= 47 then begin
Socket.ReceiveBuf(buf, len);
if (buf[0] = $dd) and (buf[1] = $1) then begin
///////////////////
{
変更前
if len >= 55 then begin
Socket.ReceiveBuf(buf, len);
if (buf[0] = $64) and (buf[1] = $0) then begin
RFIFOL(2, l);
}
////////////////////
それと暗号化されているから取りあえずはパスワード無視
//if tp.Pass = userpass then begin
if tp.Pass <> userpass then begin