⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.pas

📁 仙境传说(RO)私人服务器端源代码。第一次上传。
💻 PAS
📖 第 1 页 / 共 5 页
字号:
			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 + -