收版本
网络安全
传奇开区版本定制开区加Q:1116114 能单机=能互动的传奇=你不来试试 点击赞助此处文字位(#3) 点击赞助此处文字位(#4) 泰=山=服=务=器=打=死=退=款
精修群服,白嫖通关,Q:3033889502 点击赞助此处文字位(#7) 古怪加速器 免费20小时兑换码 5188 古怪加速器 每天16小时免费码 5288 点击赞助此处文字位(#109)
 .齐天大圣 . 单职业迷失 迷失元素◆爆率高◆一切靠打◆长期耐玩 ‖   一个福利怪直接起飞   ‖ 领先市场全新给力版本
╲ 热血战神 ╱ 单职业神器 新版耐玩,光柱满屏,终极必爆,经典品牌 点击赞助此处文字位(#118) 领先市场全新给力版本
★成神之路★ 单职业专属 吊打所有专属●内容丰富●装备无限爆 超高爆率メ散人称霸メ等级好升メ 领先市场全新给力版本
部分体验推荐
版本名称 版本类型 版本介绍 版本说明 游戏网站
【血战杀神】 【单职业激情】 经典杀神恶魔攻速神器﹏长久耐玩.全屏切割 领先市场全新给力版本 进入游戏
【盛世遗忘】 【单职业倍功】 回忆经典,梦回传奇套装版 领先市场全新给力版本 进入游戏
【西游沉默】 【单职业沉默】 独家聚宝玩法,神将武神、零充毕业新玩法 领先市场全新给力版本 进入游戏
【霸王大陆】 【神器单职业】 大陆多·专属装备多·背包神器·白嫖货币 领先市场全新给力版本 进入游戏
【完美复古】 【三职业复古】 PK更爽快,玩法多样,最新神通,天赋系 领先市场全新给力版本 进入游戏
【破天一剑】 【单职业神器】 背包攻速神器﹏超多首爆﹏长久耐玩 领先市场全新给力版本 进入游戏
【魅力沉默】 【三职业沉默】 三职业平衡◆特色怀旧◆爆率全开 领先市场全新给力版本 进入游戏
▇▃天下火龙▃▇ 【单职业】 兄弟们无所畏惧 带您重燃传奇热血 每日免费领取50元 进入游戏
【雄霸天下】 【微变单职业】 \散\\\人\\\好\\\混\ 领先市场全新给力版本 进入游戏
查看: 3683|回复: 0

传奇服务端代码结构,极品机率算法详解。

[复制链接]

4984

主题

-5

回帖

33万

积分

管理员

积分
337898
QQ
发表于 2024-2-15 13:16:22 | 显示全部楼层 |阅读模式
1.png


         别再跟我说什么砍墙角,别在跟我说什么0-100收拾稳加属性,别在跟我说什么北京时间几点几点容易成。。。。。本人开过f,深知服务器如何设定,但是一下代码部分为一高人赐教。现在发给大家,望有助飞升。
第一讲:
炼武器众所周知,需要两种材料,一个是首饰,一个是黑铁矿,黑铁矿仅仅影响练成武器的持久,和成功几率不相关,所以最关键的变量就是首饰的属性,成功几率的计算相当复杂,我们先考虑首饰只有一种攻击型属性的情况。
成功几率的代码
第一段
nDc := HiWord(StdItem80.DC) + LoWord(StdItem80.DC);
nSc := HiWord(StdItem80.SC) + LoWord(StdItem80.SC);
nMc := HiWord(StdItem80.MC) + LoWord(StdItem80.MC);
这段代码表示
NDC为首饰的攻击上限+首饰的攻击下限
if nDcMin < nDc then begin
nDcMax := nDcMin;
nDcMin := nDc;
end else begin
if nDcMax < nDc then nDcMax := nDc;
这段代码表示,仅仅只有两件上下限之和最高的首饰,影响成功几率
ndcmin=上下限攻击之和最高的首饰的上下限攻击之和
ndcmax=上下限攻击之和次高的首饰的上下限攻击之和
第三段代码
btDc := nDcMin div 5 + nDcMax div 3;
btSc := nScMin div 5 + nScMax div 3;
btMc := nMcMin div 5 + nMcMax div 3;

btdc等于dcmax整除3+dcmin整除5

这三段代码的核心就是计算出btdc 这是是影响武器升级成功几率的第一个参数

第四段代码
n90 := _MIN(11, UpgradeInfo.btDc)
计算n90的值,n90为11和btdc两个值中小的一个

第五段代码
n10 := _MIN(85, n90 shl 3 - n90 + 10 + UpgradeInfo.UserItem.btValue[3] - UpgradeInfo.UserItem.btValue[4] + User.m_nBodyLuckLevel);
这段代码是计算n10的值
n10为85和n90*7+10+武器的幸运-武器的诅咒+人物幸运等级 这两个值中小的一个
由这段代码我们可以发现,武器的额外附加的幸运值是影响武器成功几率的一个重要参数!!
所以幸运高的武器成功几率更高!!!
另外,还有一个重要参数User.m_nBodyLuckLevel 这个参数表示人物的幸运等级
这就是传奇的一个隐藏属性,就是人物的幸运值
幸运等级的计算过程
procedure TBaseObject.AddBodyLuck(dLuck: Double); //004BF580
var n: Integer;
begin
if (dLuck > 0) and (m_dBodyLuck < 5 * BODYLUCKUNIT) then
begin m_dBodyLuck := m_dBodyLuck + dLuck;
end;
if (dLuck < 0) and (m_dBodyLuck > -(5 * BODYLUCKUNIT)) then
begin m_dBodyLuck := m_dBodyLuck + dLuck;
end;
n := Trunc(m_dBodyLuck / BODYLUCKUNIT);
if n > 5 then n := 5;
if n < -10 then n := -10;
m_nBodyLuckLevel := n;
end;
影响m_nBodyLuckLevel 即人物的幸运等级有三个参数 dLuck m_dBodyLuck BODYLUCKUNIT
dluck有这么几个过程影响
1.获得经验 dluck= exp*0.002
2.升级 dluck=100
3.死亡 dluck=-人物等级*5
4.杀人 dluck=-500
BODYLUCKUNIT 为服务器设定的固定参数 等于5000
m_dBodyLuck由dluck和BODYLUCKUNIT计算产生
因而,为了获得高的幸运等级,你不能杀人,最好在升级武器之前能够不断的练级,获得经验
幸运等级最高时5,最低是-10

总结一下
这一大段的代码,结合起来武器成功几率的计算函数就是
1.上下限攻击最高的首饰的上下限攻击 我们令为nDCmin
2.上下限攻击次高的首饰的上下限攻击 我们令为nDCmax
3.人物的幸运等级 m_nBodyLuckLevel
计算公式
min(85,min(11,dcmin整除5+dcmax整除3)*7+武器额外幸运-武器额外诅咒+人物幸运等级)/引擎设定的升级成功几率

比如 我们令引擎设定的升级成功几率为100
升级用的首饰为2个绿色项链
人物的幸运等级为0
武器的额外幸运为0
额外诅咒为0
那么升级的成功几率就是
1.dcmin=2+5=7
2.dcmax=2+5=7
3.dcmin整除5+dcmax整除3=1+2=3
4.min(11,3)=3
5.3*7+0-0+0=21
6.min(85,21)=21
7.21/100=21%就是武器的成功几率!!!!!!

在这段公式中我们可以发现什么??
1.在M2中,我们可以设定的参数仅仅只有一个就是
看图

就是成功几率 这个值影响成功几率的分母 设置100的话就是原始的升级难度 设置50就是50%的升级难度
2.在成功几率默认为100的情况下,升级武器的成功几率最高位85
3.武器附加的幸运和诅咒值将影响成功几率 影响效果为额外增加值*(100/成功几率)
,如果成功几率默认为100 ,那么一点额外的幸运奖附加1%的成功几率,如果为50
则附加2%,所以升级武器,武器的幸运越高越好
4.人物的幸运等级也影响成功几率,由于重启服务器之后,人物的幸运等级为0,所以一定要在升级武器之前获得足够的幸运等级,可以通过获得经验的方式来增加幸运等级,根据上文的公式,1点经验将增加0.002点nluck 获得满值的幸运等级需要获得 500*5*5000 1250千万的经验!!!浩大的工程,而且,你还不能死亡,不能杀人,幸运等级影响的最高几率为5%
5.升级武器最关键的还是两件首饰,只有两件,多用首饰都是无用的,而且这两件首饰的属性并不是越高越好,
比如在76服中
法师升级 如果是2个铃铛 那么8整除5+8整除3=5 贡献5*7%=35%的成功几率
法师升级 如果是2个生命 那么6整除5+6整除3=3 贡献3*7%=21%的成功几率
一个生命一个铃铛 那么8整除5+6整除3=4 贡献4*7%=28%的成功几率
这个贡献值最高位11 即最高实现77%的成功几率的贡献
武器升级的首饰相对属性不好 2个记忆的话 效果相当于2个生命 2个绿色的话 也仅仅相当于2个生命 只有两个圣战 效果才相当于两个铃铛,道士也一样
因为在76服中,武器升级,法师有很大的优势

第二部分, 跳点的计算
跳点的实现min(85,min(11,dcmin整除5+dcmax整除3)*7+武器额外幸运-武器额外诅咒+人物幸运等级)这段计算过程相关
如果这个值>63 并且Random(g_Config.nUpgradeWeaponMCTwoPointRate) = 0 那么挑2点
如果这个值>79 并且Random(g_Config.nUpgradeWeaponMCThreePointRate) = 0 那么挑3点
g_Config.nUpgradeWeaponMCTwoPointRate和g_Config.nUpgradeWeaponMCThreePointRate
是在M2上设定的

就是这两个数值
如果你能理解前面的推算过程,那么明确的说,跳点的实现实在是太难了,基本不可能不仅仅是几率的问题,更重要的是,你基本没有办法实现63 79的成功参数

总结来说
影响武器升级成功几率的参数
1.幸运 + 额外幸运点数*(100/成功几率(M2设定的))%
2.诅咒 - 额外诅咒点数*(100/成功几率(M2设定的))%
3.幸运等级 最高+5% 最低-10%
4.首饰的属性函数 n90值

min(85,min(11,dcmin整除5+dcmax整除3)*7+武器额外幸运-武器额外诅咒+人物幸运等级)/引擎设定的升级成功几率 这个是成功几率的公式
别再跟我说什么赤月恶魔能暴极品,别在跟我说什么祖玛教主才出极品,别在跟我说北京时间几点几点出极品,别再跟我说什么服务器重启出极品。
第二讲:
传奇极品装备的生成原理
传奇M2里可以设置装备极品属性的概率,那么这个概率和具体增加的属性点数是怎么计算的呢?
为了让大家能够更好的理解,我尽量不适用专业术语,大拿勿扰!!
影响装备极品属性的参数有两类,一类是可以再M2设置的,一类是引擎内部固定的
以hero引擎为例 武器 有3个参数影响 戒指 手镯 项链 铠甲 头盔 有4个参数影响
靴子 腰带 宝石 勋章 不产生极品属性


这4个参数是 1.极品属性出现几率 2.最高点数 3.点数几率 4.属性几率(属性几率武器没有)

具体的代码为
1.武器极品属性生成过程

procedure TItem.RandomUpgradeItem(UserItem: pTUserItem);
var nUpgrade, nIncp, nVal: Integer;
begin
case ItemType of
ITEM_WEAPON:
begin
nUpgrade := GetRandomRange(g_Config.nWeaponDCAddValueMaxLimit {12}, g_Config.nWeaponDCAddValueRate {15});
if Random(15) = 0 then UserItem.btValue[0] := nUpgrade + 1;


这段代码是生成武器极品攻击属性的过程的一部分,
GetRandomRange 这个函数是产生装备极品属性的核心函数
比如 在这个过程中 GetRandomRange的两个参数是
1.g_Config.nWeaponDCAddValueMaxLimit {12} 这个就是最高点数
2.g_Config.nWeaponDCAddValueRate {15} 这个是点数几率
这个函数的过程是
function TItemUnit.GetRandomRange(nCount, nRate: Integer): Integer;
var I: Integer;
begin
Result := 0;
for I := 0 to nCount - 1 do
if Random(nRate) = 0 then Inc(Result);
end;
具体来算 如果最高点数是 10 点数几率是15的话
那么产生N点极品属性的概率是 (1/15+1)^(N-1)
比如 如果N=1 则概率=1 N=2 概率=1/16 N=3 概率=(1/16)^2
所以 点数几率这个参数是最最影响极品属性的产生几率的!!!它和产生极品属性的点数成指数关系
在hero的引擎中,武器和戒指没有属性几率的参数,引擎固定的是15,也就是if Random(15) = 0 这一段 就是说 在我们刚才设置的 10 15参数的基础上 武器获得一点攻击的极品属性的概率是 1/16*1/极品属性出现几率

如果我们令 产生某项属性的点数为 N
那么 概率=(1/极品属性出现几率)*(1/属性几率)*(1/点数几率+1)^(N-1)
最高点数影响 N的最大值

其他装备各项属性的参数 持久不做考虑 铠甲 手镯 项链 所有参数都可以再M2设定
装备 属性 极品属性出现几率 属性几率 点数几率 最高点数 备注
武器 准确 M2设定 24 15 12

戒指这个装备很特殊 调整属性几率 需要在!setup.txt修改 M2上不可以直接调整,默认值为30
这也就解释了,为什么HERO引擎的服,为什么戒指的几率实行概率为什么这么低....

总结来说 就是这么个公式
可以帮助大家计算极品属性出现的概率
概率=(1/极品属性出现几率)*(1/属性几率)*(1/点数几率+1)^(N-1)
宝宝相关
1。诱惑之光的几率
在M2我们可以设置的参数是
怪物等级 g_Config.nMagTammingTargetLevel 默认是10
怪物血量 g_Config.nMagTammingHPRate 默认是100

第一段代码 诱惑人物 诱惑他人宝宝时的过程
if (TargeTActorObject.m_btRaceServer <> RC_PLAYOBJECT) and (TargeTActorObject.m_btRaceServer <> RC_HEROOBJECT) and ((Random(4 - nMagicLevel) = 0)) then
begin TargeTActorObject.m_TargetCret := nil;
if TargeTActorObject.m_Master = BaseObject then
begin TargeTActorObject.OpenHolySeizeMode((nMagicLevel * 5 + 10) * 1000);
Result := True;

这段代码解释
如果 目标不是人物 不是英雄 随机(4-诱惑之光等级)=0 那么设定目标怪物的m_TargetCret=nil
如果 目标怪物存在主人,则宝宝变黄 这段代码就是诱惑他人的宝宝 然后宝宝会变黄

第二段 代码 诱惑怪物的判断

if Random(2) = 0 then begin
if TargeTActorObject.m_Abil.Level <= BaseObject.m_Abil.Level + 2 then begin if Random(3) = 0 then begin
if Random((BaseObject.m_Abil.Level + 20) + (nMagicLevel * 5)) > (TargeTActorObject.m_Abil.Level + g_Config.nMagTammingTargetLevel {10}) then begin
if not (TargeTActorObject.bo2C1) and
(TargeTActorObject.m_btLifeAttrib = 0) and
(TargeTActorObject.m_Abil.Level < g_Config.nMagTammingLevel {50}) and
(BaseObject.m_SlaveList.Count < g_Config.nMagTammingCount {(nMagicLevel + 2)}) then begin
这一系列的条件就是
1.诱惑的宝宝等级小于人物等级+2
2.怪物是不死系怪物
3.怪物的等级小于M2中设置的允许召唤怪物的最高等级
4.自身的宝宝数量小于允许召唤的宝宝最高数量
5.诱惑的成功几率1=(目标怪物等级+怪物等级(M2设定参数))/自身等级+20+诱惑之光等级*5

第三段代码 实现诱惑

if g_Config.nMagTammingHPRate <= 0 then g_Config.nMagTammingHPRate := 100; n14 := TargeTActorObject.m_WAbil.MaxHP div g_Config.nMagTammingHPRate {100} if n14 <= 2 then n14 := 2
else Inc(n14, n14);
if (TargeTActorObject.m_Master <> BaseObject) and (Random(n14) = 0) then begin TargeTActorObject.BreakCrazyMode()
if TargeTActorObject.m_Master <> nil then begin
TargeTActorObject.m_WAbil.HP := TargeTActorObject.m_WAbil.HP div 10
end;

解释 1.第一行 如果 g_Config.nMagTammingHPRate参数小于等于0的话 初始化这个参数为100
2.第2-4行 诱惑成功几率n14=目标怪物的最高血量 整除 g_Config.nMagTammingHPRate参数
如果N14小于等于2 那么N14=2
否则 N14=N14*2
这段计算中 N14是关键 最低值为 2 几率为 1/(目标怪物最高血量 整除 怪物血量(M2设定的参数))

3.接下来的过程的意思是 如果诱惑的是别人的宝宝的话 那么诱惑成功之后 宝宝的血量仅为最高血量的10%

为了方便大家理解 不考虑宝宝红名的过程 这段代码有点长 就不考虑了

那么从上面的分析中,我们可以发现,影响诱惑之光成功的概率的参数为
1.人物自身的等级
2.目标怪物的等级
3.M2设定的两个参数 怪物等级 怪物血量
4.诱惑之光的等级

具体诱惑成功的几率为 1/6*(目标怪物等级+怪物等级(M2设定参数))/(自身等级+20+诱惑之光等级*5)*1/(2*(目标怪物最高血量 整除 怪物血量(M2设定)))

这样大家可能理解较难 还是举例说明
比如 在M2设定都是默认值的情况下 30级 3级诱惑之光的法师诱惑26级多多的几率就是
1/6*(26+10)/(30+20+15)*1/(2*(900 整除 100))
=1/6*36/55*1/18
=0.6%。。。。。
真够低的了
千分之6 百分之1都不到 按1秒1个诱惑的话 大约平均需要3分钟左右才能诱惑成功一个多多
宝宝升级属性加成

代码

procedure TActorObject.MonsterRecalcAbilitys;//宝宝升级获得属性的过程
var n8: Integer;
begin m_WAbil.DC := MakeLong(LoWord(m_WAbil.DC), HiWord(m_Abil.DC)); //初始化宝宝的攻击
n8 := 0;
if (m_btRaceServer = 100) or (m_btRaceServer = 113) or (m_btRaceServer = 114) then begin//检测是不是骷髅 神兽 月灵
// 下面一段是宝宝升级之后攻击的变化
//公式 增加的攻击=(宝宝等级*0.1+0.3)*3*宝宝等级=0.9lv+0.1*lv^2
//如果是7级神兽的话 攻击增加 6.3+4.9=11.2=11点攻击上限
//宝宝升级后仅仅增加攻击上限,不是很高
m_WAbil.DC := MakeLong(LoWord(m_WAbil.DC), _MIN(MAXHUMPOWER, Round((m_btSlaveExpLevel * {1.0e-1} 0.1 + {3.0000000000000000001e-1} 0.3) * {3.0} 3.0 * m_btSlaveExpLevel + HiWord(m_WAbil.DC))));
//下面是血量的增加
//公式 每级的血量=宝宝等级*0.1+0.3)*宝宝初始血量*宝宝等级+宝宝初始血量
//必须3级狗 血量=3*0.1+0.3)*300*3+300=840点HP
n8 := n8 + Round((m_btSlaveExpLevel * {1.0e-1} 0.1 + {3.0000000000000000001e-1} 0.3) * m_Abil.MaxHP) * m_btSlaveExpLevel;
n8 := n8 + m_Abil.MaxHP;
if m_btSlaveExpLevel > 0 then m_WAbil.MaxHP := n8
else m_WAbil.MaxHP := m_Abil.MaxHP;
end else
//其他类型怪物的属性升级
//这段升级相对好理解的多
//1.HP增加,每级增加60点
//2.攻击上限增加 等级*2
begin
n8 := m_Abil.MaxHP;
m_WAbil.DC := MakeLong(LoWord(m_WAbil.DC), _MIN(MAXHUMPOWER, Round(m_btSlaveExpLevel * 2 + HiWord(m_WAbil.DC))));
n8 := n8 + Round(m_Abil.MaxHP * {1.5000000000000000001e-1} 0.15) * m_btSlaveExpLevel;
m_WAbil.MaxHP := MinLong(Round(m_Abil.MaxHP + m_btSlaveExpLevel * 60), n8);


总计
重要 需要理解两个lv
1.m_btSlaveExpLevel 宝宝等级 即0-7级
2.m_Abil.Level 宝宝自身的等级
启示
1.宝宝升级的速度和宝宝自身的等级(DB库中设定的等级) 成反比 等级越高的宝宝越难升级
2.神兽类宝宝升级之后 血量加成较多,而攻击加成较少
3.其他类型的宝宝 血量加成为固定的60点 攻击加成为宝宝等级*2
4.由此可见 在最初传奇的设计中,道士宝宝耐*,法师宝宝攻高
传奇中的其他属性
传奇中还是有很多属性的,总结起来有,
幸运 诅咒 这个很多人都是了解的 暂时不表
神圣 一个奇怪的 属性
生命恢复
魔法恢复
毒物躲避
中毒恢复
攻击速度
我们一个个说
先说幸运和诅咒
幸运和诅咒对攻击力的影响函数是这样的 幸运和诅咒都用nluck代表 正就是幸运 负就是诅咒
我手上的这套代码比较老,不能设置多少点幸运实现最大伤害,我们假设9点幸运能够实现最大伤害0
if m_nLuck > 0 //如果NLUCK大于0 就是附加幸运
then begin
if Random(10 - _MIN(9, m_nLuck)) = 0
//这个是核心计算公式
//如果 你自身的幸运点数为 X (0 < X < 10)
//那么1/(10-X)的几率能够实现最大的攻击 即 攻击上限加攻击下限
//这段代码的最大作用是揭示了运9和运8质的不同 如果是运9的话 那么实现最大攻击的概率是100% 而运8 只有1/2 运7是 1/3...
then Result := nBasePower + nPower
else Result := nBasePower + Random(nPower + 1);
end
else begin
Result := nBasePower + Random(nPower + 1);
if m_nLuck < 0 then begin
if Random(10 - _MAX(0, -m_nLuck)) = 0 then Result := nBasePower;
end;
//诅咒的计算可以参考幸运的计算
那么 我们令人物的攻击为 a-b a为攻击下限 b为攻击上限 幸运点数为x
那么 平均攻击力=b*(1/(10-x))+(a+b)/2*(1-(1/(10-x)))
化简 power=(a+b)-(b-a)/(10-x)


神圣
神圣这个属性的作用其实非常简单
它作为人物的属性 代码是 bt1DF
在两段代码中出现
第一段
function TActorObject.GetHitStruckDamage(Target: TActorObject; nDamage: Integer): Integer;
.....//中间省略N段..
if (m_btLifeAttrib = LA_UNDEAD) and (Target <> nil) //如果是不死怪物 并且 目标确实存在
then begin
Inc(nDamage, Target.m_AddAbil.bt1DF);//增加伤害bt1DF 点
第二段
function TActorObject.GetMagStruckDamage(BaseObject: TActorObject; nDamage: Integer): Integer
.....//中间省略N段..
if (m_btLifeAttrib = LA_UNDEAD) and (Target <> nil) //如果是不死怪物 并且 目标确实存在
then begin
Inc(nDamage, Target.m_AddAbil.bt1DF);//增加伤害bt1DF 点


这两段代码就是获取对方物理和魔法防御力
由此可见 神圣就是增加对不死怪物的伤害 无论是物理还是魔法伤害 而且忽视防御 这个属性还是很厉害的


生命恢复和魔法恢复
真正的假属性 我研究的所有源码 sky05年的 飞尔 361 包括最老的传奇源码 都没有真正的作用......第一冒牌属性!!!!

毒物躲避和中毒恢复
1.毒物躲避 这里涉及到什么是毒物 只有两种 主要是防止麻痹的概率
被麻痹的概率= 1/(M2设定的概率+毒物躲避点数(每10%1点))
那么毒物躲避100%的话 并不是100%防麻痹 麻痹的概率是 1/(M2+10)

2.中毒恢复 无用属性 冒牌货.....

吸血属性
这个属性也有意思的
吸血有两种情况
1种是虹魔类首饰 anicount 为吸血参数
1种是吸血武器 重量是吸血参数

虹魔类
if m_nHongMoSuite > 0
then
begin
m_db3B0 := nPower / 100 * m_nHongMoSuite;
if m_db3B0 >= 2.0
then
begin
n20 := Trunc(m_db3B0);
m_db3B0 := n20;
DamageHealth(-n20);
end;
end;
npower为 攻击对方时能够伤害的点数

也就是说 如果你能够对对方造成100点伤害的时候 你佩戴了5件虹膜首饰
那么 你能吸血的点数是
100/100*25=25点血.......还是很可怜的
所以虹魔吸血和攻击力有非常大的关系!!!

武器类吸血 同样 不同的是 重量增加m_nHongMoSuite值 这个是吸血的重要属性
如果重新定义下吸血的作用的话就是
百分比 anicount=5 就是伤害值5%的吸血量
武器 weight=100 就是伤害值100%的吸血量
procedure TBaseObject.AddBodyLuck(dLuck: Double); //004BF580
var n: Integer;
begin
if (dLuck > 0) and (m_dBodyLuck < 5 * BODYLUCKUNIT) then
如果dluck大于0并且m_dBodyLuck小于25000,那么m_dBodyLuck =m_dBodyLuck +dluck也就是说m_dBodyLuck 最大值不超过25000 25000/0。002=1250W的经验,也就是说如果在不死的情况下能练1250W经验不死的话,m_dBodyLuck就可以达到最大值了是么。我有个问题请教楼主,如果下线或服务器重启的话,m_dBodyLuck 的值会清零么?盼赐教。
begin m_dBodyLuck := m_dBodyLuck + dLuck;
end;
if (dLuck < 0) and (m_dBodyLuck > -(5 * BODYLUCKUNIT)) then
begin m_dBodyLuck := m_dBodyLuck + dLuck;
end;
n := Trunc(m_dBodyLuck / BODYLUCKUNIT);
这一段是m_dBodyLuck /BODYLUCKUNIT,因为最大的m_dBodyLuck 值为25000,所以除以BODYLUCKUNIT 一般在5左右。也就是说最有参与武器升级的m_nBodyLuckLevel 也就是n最大值不过超过5,那么练级的1250W经验就要分成5份来练。每250万为一个等级,如果练了490,
m_nBodyLuckLevel 仍然是1是么?

if n > 5 then n := 5;
if n < -10 then n := -10;
m_nBodyLuckLevel := n;

end
温馨提示:

如需运营或商用本站资源,请在下载源码后联系版权方进行授权,本站不参与任何运营游戏相关活动,仅供从业者交流技术使用.对于因后续运营游戏产生的版权纠纷,与本站无关。


郑重声明:本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!→ 详情点击查看
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ在线咨询
咨询客服
87599992
QQ群交流
834337883
快速回复 返回顶部 返回列表