BaseNextEXP := ExpTable[0][BaseLV];
if Job = 0 then i := 0
else if Job < 7 then i := 1
else i := 2;
JobNextEXP := ExpTable[i][JobLV];
という部分がありますが
ここで
ノービスはbaseEXPテーブルを
1次職はノービスのJobEXPテーブルを
2次職は1次職のJobEXPテーブルを読みこんでしまっているようです
解決するには
BaseNextEXP := ExpTable[0][BaseLV];
if Job = 0 then i := 1
else if Job < 7 then i := 2
else i := 3;
JobNextEXP := ExpTable[i][JobLV];
とjobに応じて与えられているiの値を全部+1すればOKです
>>499
prontera.gat,150,89,6 script 案内要員 105,{
mes "[案内要員]";
mes "inputのテストを行います";
input @test;
mes "[案内要員]";
mes "入力された数値は$[@test]です。";
set Zeny = @test;
mes "所持金を$[@test]Zenyにしました。";
close;
}
今これで試してみたところ、うまく動作したのですが・・・どうでしょうか?
うまくいかないスクリプトがあれば、それを掲示してもらえると
原因追及が簡単になります。
お困りの時はスクリプトの掲載をお願いします〜<(_ _)>
>>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
でデバッガストップしました。