|
- //计算伤害值, 第一公式如小于0则取一个随机数, 无第二公式
- function CalHurtValue(bnum1, bnum2, mnum, level: integer): integer;
- var
- i, rnum1, rnum2, mhurt, att, def, k1, k2, dis: integer;
- begin
- //计算双方武学常识
- k1 := 0;
- k2 := 0;
- for i := 0 to BRoleAmount - 1 do//当i<BRoleAmount - 1时,加1循环,应该是不超过最大武常的一个设定把
- begin
- if (Brole[i].Team = Brole[bnum1].Team) and (Brole[i].Dead = 0) and
- (Rrole[Brole[i].rnum].Knowledge > MIN_KNOWLEDGE)//大于最小有效武常 then
- k1 := k1 + Rrole[Brole[i].rnum].Knowledge;//把有效武常加0赋值给K1,至此K1这个数值就是武常了
- if (Brole[i].Team = Brole[bnum2].Team) and (Brole[i].Dead = 0) and
- (Rrole[Brole[i].rnum].Knowledge > MIN_KNOWLEDGE) then
- k2 := k2 + Rrole[Brole[i].rnum].Knowledge;
- end;
- rnum1 := Brole[bnum1].rnum;
- rnum2 := Brole[bnum2].rnum;
- if level > 0 then
- mhurt := Rmagic[mnum].Attack[level - 1]
- else
- mhurt := 0;
- att := Rrole[rnum1].Attack + k1 * 3 div 2 + mhurt div 3;//人物攻击+武常*3+武功伤害/3取整
- def := Rrole[rnum2].Defence * 2 + k2 * 3;//人物防御*2+武常*3
- case Rmagic[mnum].MagicType of //根据武功的所属的拳剑刀特来选择加什么系数
- 1:
- begin
- att := att + Rrole[rnum1].Fist;//把上面算的攻击+拳系数(猜的)
- def := def + Rrole[rnum2].Fist;
- end;
- 2:
- begin
- att := att + Rrole[rnum1].Sword;//把上面算的攻击+剑系数(猜的)
- def := def + Rrole[rnum2].Sword;
- end;
- 3:
- begin
- att := att + Rrole[rnum1].Knife;
- def := def + Rrole[rnum2].Knife;
- end;
- 4:
- begin
- att := att + Rrole[rnum1].Unusual;
- def := def + Rrole[rnum2].Unusual;
- end;
- end;
- //攻击, 防御按伤害的折扣
- att := att * (100 - Rrole[rnum1].Hurt div 2) div 100;//攻击*(100-受伤数值/2)/100取整
- def := def * (100 - Rrole[rnum2].Hurt div 2) div 100;
- //如果有武器增加攻击, 检查配合列表
- if Rrole[rnum1].Equip[0] >= 0 then
- begin
- att := att + Ritem[Rrole[rnum1].Equip[0]].AddAttack;
- for i := 0 to MAX_WEAPON_MATCH - 1 do
- begin
- if (Rrole[rnum1].Equip[0] = matchlist[i, 0]) and (mnum = matchlist[i, 1]) then
- begin
- att := att + matchlist[i, 2] * 2 div 3;//上面的攻击数值+武器配合数值*2/3(在这个公式里,配合数值的价值是武功数值的两倍)
- break;
- end;
- end;
- end;
- //防具增加攻击
- if Rrole[rnum1].Equip[1] >= 0 then
- att := att + Ritem[Rrole[rnum1].Equip[1]].AddAttack;//这个公式里,防具加的攻击无效,只有武器加的攻击有效?
- //武器, 防具增加防御
- if Rrole[rnum2].Equip[0] >= 0 then
- def := def + Ritem[Rrole[rnum2].Equip[0]].AddDefence;
- if Rrole[rnum2].Equip[1] >= 0 then
- def := def + Ritem[Rrole[rnum2].Equip[1]].AddDefence;
- //showmessage(inttostr(att)+' '+inttostr(def));
- Result := att - def + random(20) - random(20);//刚才所有算完后的攻击-防御+随即数20以内-随即数20以内
- dis := abs(Brole[bnum1].X - Brole[bnum2].X) + abs(Brole[bnum1].Y - Brole[bnum2].Y);//猜测是距离减轻伤害的设置吧
- if dis > 10 then
- dis := 10;//最大距离是10
- Result := max(Result, att div 10 + random(10) - random(10));//伤害数值,攻击/10+随即数10-随机数10,取小(如果你的总攻击>对方总防御的数值小于你的攻击/10取整,就不划算,要想不破,伤害小就把攻击/10的10改大
- Result := Result * (100 - (dis - 1) * 3) div 100;//距离最多减少27%的最终伤害
- if (Result <= 0) or (level <= 0) then
- Result := random(10) + 1;
- if (Result > 9999) then
- Result := 9999;//伤害最小随即数10+1,最大9999
- //showmessage(inttostr(result));
- end;
- //AI专用
- function CalHurtValue2(bnum1, bnum2, mnum, level: integer): integer;
- begin
- Result := CalHurtValue(bnum1, bnum2, mnum, level);
- if Result >= Rrole[Brole[bnum2].rnum].CurrentHP then//伤害大于我方的血,伤害*1.5???
- Result := Result * 3 div 2;
- if Rmagic[mnum].HurtType = 1 then
- Result := (Rmagic[mnum].HurtMP[level - 1] * 3) div 2;
- end;
复制代码
总结:原版复刻的伤害公式
【(人物攻击+武常*3+武功伤害/3取整)+相应的系数】*(100-受伤数值/2)/100 - (人物防御*2+武常*3)*(100-受伤数值/2)/100
最后伤害的数值受到距离的修正,最多减少27%的伤害
防具加的攻击数值无效
武器防具的其他数值视同人物本身的攻防
最后的一段电脑专用伤害公式,就看懂1.5倍,还是来的大大讲解下吧 |
|