📄 common.pas
字号:
Inc(DamageFixR[o][j],td.DamageFixR[j]); Inc(DamageFixE[o][j],td.DamageFixE[j]); end; for j:=0 to 2 do begin Inc(DamageFixS[j],td.DamageFixS[j]); end; for j:=0 to 4 do begin Inc(SFixPer1[0][j],td.SFixPer1[j]); Inc(SFixPer2[0][j],td.SFixPer2[j]); end; Inc(DrainFix[0],td.DrainFix[0]); Inc(DrainPer[0],td.DrainPer[0]); Inc(DrainFix[1],td.DrainFix[1]); Inc(DrainPer[1],td.DrainPer[1]); if td.SplashAttack then SplashAttack := true; for j :=1 to 330 do begin //僗僉儖捛壛 if td.AddSkill[j] <> 0 then begin if (not Skill[j].Data.Job[JID]) and (not DisableSkillLimit) then begin Skill[j].Lv := td.AddSkill[j]; Skill[j].Card := True; end; end; end; //for j :=1 to 330 do begin if td.Cast <> 0 then MCastTimeFix := MCastTimeFix * td.Cast div 100; //塺彞帪娫% if td.HP1 <> 0 then begin //MAXHP%(1001埲忋偱+) if td.HP1 > 1000 then begin
MAXHP := MAXHP + (td.HP1 - 1000);
//end else Inc(MAXHPPer,(td.HP1-100));
end else Inc(MAXHPPer,(td.HP1 - 100));
end;
if td.HP2 <> 0 then begin //HP夞暅懍搙%
HPDelayFix := HPDelayFix + 100 - td.HP2;
end;
if td.SP1 <> 0 then begin //MAXSP%(1001埲忋偱+)
if td.SP1 > 1000 then begin
MAXSP := MAXSP + (td.SP1 - 1000);
end else Inc(MAXSPPer,(td.SP1 - 100));
end;
if td.SP2 <> 0 then begin //SP夞暅懍搙%
SPDelayFix := SPDelayFix + 100 - td.SP2;
end;
end;end;//------------------------------------------------------------------------------procedure CalcEquip(tc:TChara);var i,j,k,o :integer; Side :byte;begin with tc do begin for i := 1 to 100 do begin if Item[i].ID <> 0 then begin Weight := Weight + Item[i].Data.Weight * Item[i].Amount;// if Item[i].Data.IEquip and (Item[i].Equip <> 0) then begin if Item[i].Equip <> 0 then begin Side := 0; o := 0; if Item[i].Data.IType = 4 then begin //晲婍 if Item[i].Equip = $20 then Side := 1; ATK[Side][1] := Item[i].Data.ATK; WeaponType[Side] := Item[i].Data.View; if Item[i].Refine > 0 then begin case Item[i].Data.wLV of 1: j := 2; 2: j := 3; 3: j := 5; 4: j := 7; //Comodo Patch埲崀偼7丄偦傟埲慜偼5 else j := 0; end; ATK[Side][3] := Item[i].Refine * j; Inc(ATK[1][0], Item[i].Refine * j); end; if Side = 0 then Range := Range + Item[i].Data.Range; WElement[Side] := Item[i].Data.Element; end else if Item[i].Data.IType = 5 then begin if (Item[i].Equip and 256) <> 0 then begin //摢忋抜 Head1 := Item[i].Data.View; end else if (Item[i].Equip and 512) <> 0 then begin //摢拞抜 Head2 := Item[i].Data.View; end else if (Item[i].Equip and 1) <> 0 then begin //摢壓抜 Head3 := Item[i].Data.View; end else if (Item[i].Equip and 32) <> 0 then begin //弬 Shield := Item[i].Data.View; end; if Item[i].Refine > 0 then begin DEF1 := DEF1 + Item[i].Refine; end; o := 1; end else if (Item[i].Data.IType = 10) and (Weapon = 11) then begin //栴 Arrow := i; WElement[1] := Item[i].Data.Element; ATK[1][2] := Item[i].Data.ATK; end; CalcAbility(tc, Item[i].Data, o);{傾僀僥儉惢憿廋惓} for k := 0 to Item[i].Data.Slot - 1 do begin //僇乕僪曗惓1 //惢憿晲婍偺娭學偱僇乕僪僗儘僢僩偵DB偵側偄悢帤偑擖傞偨傔(4001-4149)偺帪偩偗僇乕僪張棟偡傞傛偆偵廋惓 if (Item[i].Card[k] <> 0) and (Item[i].Card[k] > 4000) and (Item[i].Card[k] < 4149) then begin CalcAbility(tc, (ItemDB.IndexOfObject(Item[i].Card[k]) as TItemDB), o); end; end; //惢憿晲婍偺懏惈丄惎偺偐偗傜偺敾掕 if (Item[i].Card[0] = $00FF) and (Item[i].Card[1] <> 0) then begin //僇乕僪僗儘僢僩1偵擖傟傜傟偨悢帤傪$0500偱妱偭偨梋傝偑偦偺晲婍偺懏惈偲側傞 WElement[Side] := Item[i].Card[1] mod $0500; //僇乕僪僗儘僢僩1偵擖傟傜傟偨悢帤傪$0500偱妱偭偨彜偑偦偺晲婍偵杽傔傜傟偨惎偺偐偗傜偺悢偲側傞 //Item[i].Card[1] div $0500; end;{傾僀僥儉惢憿捛壛僐僐傑偱} end; end; end; end;end;//------------------------------------------------------------------------------procedure CalcSkill(tc:TChara; Tick:cardinal);var i,j :Integer;begin with tc do begin //廋楙 ATK[0][4] if (Skill[2].Lv <> 0) and ((WeaponType[0] = 1) or (WeaponType[0] = 2)) then begin //抁寱丄寱 ATK[0][4] := Skill[2].Data.Data1[Skill[2].Lv]; end else if (Skill[3].Lv <> 0) and (WeaponType[0] = 3) then begin //椉庤寱 ATK[0][4] := Skill[3].Data.Data1[Skill[3].Lv]; end else if (Skill[55].Lv <> 0) and ((WeaponType[0] = 4) or (WeaponType[0] = 5)) then begin //憚 if (Option and 32) = 0 then begin ATK[0][4] := Skill[55].Data.Data1[Skill[55].Lv]; end else begin ATK[0][4] := Skill[55].Data.Data2[Skill[55].Lv]; end; end else if (Skill[65].Lv <> 0) and (WeaponType[0] = 8) then begin //儊僀僗 ATK[0][4] := Skill[65].Data.Data1[Skill[65].Lv]; end else if (Skill[107].Lv <> 0) then begin //added by The Harbinger -- darkWeiss version ATK[0][4] := Skill[107].Data.Data1[Skill[107].Lv]; end else if (Skill[134].Lv <> 0) and (WeaponType[0] = 16) then begin //僇僞乕儖 ATK[0][4] := Skill[134].Data.Data1[Skill[134].Lv]; end else if (Skill[226].Lv <> 0) and (WeaponType[0] = 6) then begin //added by The Harbinger -- darkWeiss version ATK[0][4] := Skill[226].Data.Data1[Skill[226].Lv]; end else if (Skill[259].Lv <> 0) and (WeaponType[0] = 12) then begin //added by The Harbinger -- darkWeiss version ATK[0][4] := Skill[259].Data.Data1[Skill[259].Lv] end else if (Skill[274].Lv <> 0) and (WeaponType[0] = 15) then begin //added by The Harbinger -- darkWeiss version ATK[0][4] := Skill[274].Data.Data1[Skill[274].Lv]; end else if (Skill[315].Lv <> 0) and (WeaponType[0] = 13) then begin //added by The Harbinger -- darkWeiss version ATK[0][4] := Skill[315].Data.Data1[Skill[315].Lv]; end else if (Skill[323].Lv <> 0) and (WeaponType[0] = 14) then begin //added by The Harbinger -- darkWeiss version ATK[0][4] := Skill[323].Data.Data1[Skill[323].Lv]; end; //僨傿償傽僀儞僾儘僥僋僔儑儞 if Skill[22].Lv <> 0 then begin DEF3 := Skill[22].Data.Data1[Skill[22].Lv]; end else begin DEF3 := 0; end; //僨乕儌儞儀僀儞 ATK[0][5] if Skill[23].Lv <> 0 then ATK[0][5] := Skill[23].Data.Data1[Skill[23].Lv]; //懍搙憹壛(AGI+) if Skill[29].Tick > Tick then begin Bonus[1] := Bonus[1] + 2 + Skill[29].EffectLV; end; //懍搙尭彮(AGI-) if Skill[30].Tick > Tick then begin Bonus[1] := Bonus[1] - byte(Skill[30].Effect1); end; //僽儗僗(STR,INT,DEX+) if Skill[34].Tick > Tick then begin Bonus[0] := Bonus[0] + Skill[34].EffectLV; Bonus[3] := Bonus[3] + Skill[34].EffectLV; Bonus[4] := Bonus[4] + Skill[34].EffectLV; end; //強帩尷奅検憹壛僗僉儖 if Skill[36].Lv <> 0 then begin MaxWeight := MaxWeight + cardinal(Skill[36].Data.Data1[Skill[36].Lv]) * 10; end; //傆偔傠偆偺栚僗僉儖(DEX+) if Skill[43].Lv <> 0 then begin Bonus[4] := Bonus[4] + Skill[43].Lv; end; //儚僔偺栚僗僉儖(幩掱丄柦拞棪+) if Skill[44].Lv <> 0 then begin if Weapon = 11 then Range := Range + Skill[44].Lv; HIT := HIT + Skill[44].Lv; end; //僟僽儖傾僞僢僋 if (Skill[48].Lv <> 0) and (WeaponType[0] = 1) then begin DAPer := Skill[48].Data.Data1[Skill[48].Lv]; DAFix := Skill[48].Data.Data2[Skill[48].Lv]; end else if (WeaponType[0] <> 0) and Skill[48].Card then begin //杮棃偺巇條丠 DAPer := Skill[48].Data.Data1[Skill[48].Lv]; DAFix := Skill[48].Data.Data2[Skill[48].Lv]; end else if (Skill[263].Lv <> 0) then begin DAPer := Skill[263].Data.Data1[Skill[263].Lv]; DAFix := Skill[263].Data.Data2[Skill[263].Lv]; end else if (Skill[263].Card) then begin DAPer := Skill[263].Data.Data1[Skill[263].Lv]; DAFix := Skill[263].Data.Data2[Skill[263].Lv]; end else begin DAPer := 0; DAFix := 100; end; //夞旔棪憹壛僗僉儖 if Skill[49].Lv <> 0 then begin FLEE2 := Skill[49].Data.Data1[Skill[49].Lv]; end else begin FLEE2 := 0; end; if Skill[107].Lv <> 0 then begin //added by The Harbinger -- darkWeiss version Hit := Hit + Skill[107].Data.Data1[Skill[107].Lv] end; if Skill[265].Lv <> 0 then begin //added by The Harbinger -- darkWeiss version FLEE1 := FLEE1 + Skill[265].Data.Data1[Skill[265].Lv] end;{捛壛:119} //僌儘儕傾(LUK+) if Skill[75].Tick > Tick then begin Bonus[5] := Bonus[5] + 30; end; //戝惡壧彞(STR+) if Skill[155].Tick > Tick then begin Bonus[0] := Bonus[0] + 5; end; //傾僗儁儖僔僆 if Skill[68].Tick > Tick then begin WElement[0] := 6; WElement[1] := 6; end;{捛壛:119} //僄儞僠儍儞僩_億僀僘儞 if Skill[138].Tick > Tick then begin WElement[0] := 4; WElement[1] := 4; end; end;end;{捛壛僐僐傑偱}//------------------------------------------------------------------------------procedure CalcStat(tc:TChara; Tick:cardinal = 0);var i,j,k,o,p :integer; Side :byte; td :TItemDB; tl :TSkillDB;begin if Tick = 0 then Tick := timeGetTime(); with tc do begin Weight := 0; Range := 0; WeaponType[0] := 0; WeaponType[1] := 0; Arrow := 0; Head1 := 0; Head2 := 0; Head3 := 0; Shield := 0; for i := 0 to 1 do for j := 0 to 5 do ATK[i][j] := 0; DEF1 := 0; MDEF1 := 0; for i := 0 to 5 do begin //儃乕僫僗抣偺弶婜壔 Bonus[i] := 0; for j := 1 to JobLV do begin if JobBonusTable[JID][j] = i + 1 then Inc(Bonus[i]); end; end;{捛壛} //弶婜壔 //ArrowElement := 0; MAXHP := 0; MAXSP := 0; MAXHPPer := 100; MAXSPPer := 100; for i := 0 to 3 do begin HPDelayFix := 0; SPDelayFix := 0; end; ATTPOWER := 0; MATK1 := 0; MATK2 := 0; MATKFix := 0; HIT := 0; Lucky := 1; Critical := 1; FLEE1 := 1; MaxWeight := 20000; DEF1 := 0; for i:=0 to 1 do begin WElement[i] := 0; DrainFix[i] := 0; DrainPer[i] := 0; end; for i:=0 to 9 do begin DamageFixR[0][i] := 100; DamageFixR[1][i] := 0; DamageFixE[0][i] := 100; DamageFixE[1][i] := 0; end; DamageFixS[0] := 100; DamageFixS[1] := 100; DamageFixS[2] := 100; SplashAttack := false; for i:=0 to 4 do begin SFixPer1[0][i] := 0; SFixPer1[1][i] := 0; SFixPer2[0][i] := 0; SFixPer2[1][i] := 0; end;{捛壛僐僐傑偱}{曄峏} if not DisableSkillLimit then begin //僗僉儖僣儕乕偺嵞峔抸 for i := 1 to 330 do begin if not Skill[i].Data.Job[JID] then begin if not Skill[i].Card then begin SkillPoint := SkillPoint + Skill[i].Lv; end; Skill[i].Lv := 0; end; Skill[i].Card := False; end; if SkillPoint > 714 then SkillPoint := 714; //偙傟偩偗桳傟偽廫暘 end; CalcEquip(tc); CalcSkill(tc,Tick); for i := 0 to 5 do begin ParamUp[i] := ((ParamBase[i] - 1) div 10) + 2; Param[i] := ParamBase[i] + Bonus[i]; end; //廤拞椡岦忋(AGI,DEX+) if Skill[45].Tick > Tick then begin Bonus[1] := Bonus[1] + Param[1] * (2 + Skill[45].EffectLV) div 100; Param[1] := Param[1] * (102 + Skill[45].Lv) div 100; Bonus[4] := Bonus[4] + Param[4] * (2 + Skill[45].EffectLV) div 100; Param[4] := Param[4] * (102 + Skill[45].Lv) div 100; end; if ((MAXHP + (35 + BaseLV * 5 + ((1 + BaseLV) * BaseLV div 2) * HPTable[JID] div 100) * (100 + Param[2]) div 100) > 65535) then begin MAXHP := 65535; end else begin MAXHP := MAXHP + (35 + BaseLV * 5 + ((1 + BaseLV) * BaseLV div 2) * HPTable[JID] div 100) * (100 + Param[2]) div 100; end; if (Skill[248].Lv <> 0) then begin tl := Skill[248].Data; if (MAXHP + tl.Data1[Skill[248].Lv] > 65535) then begin MAXHP := 65535; end else begin MAXHP := MAXHP + tl.Data1[Skill[248].Lv]; end; end; MAXSP := MAXSP + BaseLV * SPTable[JID] * (100 + Param[3]) div 100; MATK1 := Param[3] + (Param[3] div 7) * (Param[3] div 7); MATK2 := Param[3] + (Param[3] div 5) * (Param[3] div 5); MATKFix := MATKFix + 100; //忨側偳偵傛傞MATK曗惓 HIT := HIT + BaseLV + Param[4]; Lucky := Lucky + (Param[5] div 10); Critical := Critical + 1 + (Param[5] div 3); MaxWeight := MaxWeight + Param[0] * 300 + WeightTable[JID]; DEF2 := Param[2]; MDEF2 := Param[3]; FLEE1 := FLEE1 + Param[1] + BaseLV + FLEE2;{曄峏僐僐傑偱} //晲婍僌儔僼傿僢僋 if WeaponType[1] = 0 then begin Weapon := WeaponType[0]; ArmsFix[0] := 100; ArmsFix[1] := 100; end else begin case WeaponType[0] * $100 + WeaponType[1] of
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -