《热血传奇之韩服传奇2-水晶端(Crystal)》祝福油武器幸运加点揭秘
最近体验了韩服传奇2的水晶端是Wemade开源出来的水晶端实现语言是c#。目前从1级体验到了67级了主要升级路径及操作方式已有完整体验过程中也修复了一些问题比如英雄Buff下线就消失问题。最近觉得武器打怪太慢了想让武器有个高幸运打怪快一点于是就查找源码看看祝福油的概率逻辑。在看了武器祝福幸运加点的逻辑后明白了一个道理游戏里幸运加点基本都是概率问题哪有什么一诅咒二连成的都是伪随机数的概率问题。下面放出我自己维护的源码修改内容都在git提交记录中。韩服传奇2水晶端C#源码(gitee链接)下面具体分析代码中的实现当然你也可以在这个武器幸运加点函数中多做些文章比如将当前武器和对当前武器使用的祝福油瓶数存到数据库设置个保底瓶数这些可能盛大会做但水晶端里就是直接判断的随机数概率(当然了伪随机数其实是不随机的)。下面放出源码 解析下在源码的这个文件中 英雄和主号都是这一个文件 都属于Human 后面重载的各自的特点Server\MirObjects\HumanObject.cs-TryLuckWeapon()这个函数protected bool TryLuckWeapon() { var item Info.Equipment[(int)EquipmentSlot.Weapon]; if (item null || item.AddedStats[Stat.Luck] 7) return false; if (item.Info.Bind.HasFlag(BindMode.DontUpgrade)) return false; if (item.RentalInformation ! null item.RentalInformation.BindingFlags.HasFlag(BindMode.DontUpgrade)) return false; string message String.Empty; ChatType chatType; //诅咒概率 1/205% Envir.Random.Next(20) 0 随机20以内的整数 等于0 诅咒 // if (item.AddedStats[Stat.Luck] (Settings.MaxLuck * -1) Envir.Random.Next(20) 0) if (item.AddedStats[Stat.Luck] (Settings.MaxLuck * -1) Envir.Random.Next(20) 100)//永不诅咒 { Stats[Stat.Luck]--; item.AddedStats[Stat.Luck]--; Enqueue(new S.RefreshItem { Item item }); message GameLanguage.WeaponCurse; chatType ChatType.System; } //诅咒状态下必定祝福 下一点祝福概率为 1/(10 * 当前幸运点数) eg:当前祝福点数为3 则概率为 1/(10 * 3) 1/30 3.333% // else if (item.AddedStats[Stat.Luck] 0 || Envir.Random.Next(10 * item.GetTotal(Stat.Luck)) 0) else if (1 1)//一定祝福 100% { Stats[Stat.Luck]; item.AddedStats[Stat.Luck]; Enqueue(new S.RefreshItem { Item item }); message GameLanguage.WeaponLuck; chatType ChatType.Hint; } else { message GameLanguage.WeaponNoEffect; chatType ChatType.Hint; } if (this is HeroObject hero) { if (message GameLanguage.WeaponCurse || message GameLanguage.WeaponLuck) { hero.Owner.Enqueue(new S.RefreshItem { Item item }); } hero.Owner.ReceiveChat($[Hero: {hero.Name}] {message}, chatType); } else { ReceiveChat(message, chatType); } return true; }1.首先 这个函数先获取了手中拿着的武器 如果没有或幸运值大于等于7 就返回 结束2.判断是否有不允许升级的标记 有 就返回 不进行后续操作3.然后就判断了下装备是否为租赁的 并且是否有不允许升级标记 有这个标记的话 就返回4.然后开始是否诅咒的判断判断当前武器幸运值是否大于等于最大诅咒值 MaxLuck 10; 10 * -1 -10 也就是 最低是诅咒10如果满足幸运值大于-10诅咒10 就进行后面的诅咒的概率判断Envir.Random.Next(20) 0 这句是生成一个20以内的随机数 如果随机出来的值是0 则将当前武器诅咒//诅咒概率 1/205% Envir.Random.Next(20) 0 随机20以内的整数 等于0 诅咒5.然后开始进行是否加幸运的判断判断 如果当前武器诅咒了 或者生成一个伪随机数这个伪随机数根据当前幸运值进行随机Envir.Random.Next(10 * item.GetTotal(Stat.Luck)) 0公式是 生成一个10 * 当前幸运值的随机数 如果为0 则加幸运 也就是说 加幸运的概率是当前武器幸运值乘以10 然后随机其内的数据 如果为0 则加幸运 比如当前武器幸运5 则加幸运的概率为random(10 * 5) 0 即1/50 2%这个判断的结果就是 如果当前武器诅咒 必定加幸运 随机数为0了 加幸运诅咒状态下必定祝福 下一点祝福概率为 1/(10 * 当前幸运点数) eg:当前祝福点数为3 则概率为 1/(10 * 3) 1/30 3.333%6.后面就是将系统消息发送给主号或英雄的所有者了至此 热血传奇 韩服传奇2 水晶端的武器加幸运解析完成了下面放几张图 目前还在体验中 如果你也想体验 建议目标等级为70 我是开了500倍经验的 不然一级要一周 到70要几个月 当前服务端已进行部分汉化 等体验完 会将数据库修改为mysql、语言也进行汉化下面说明一下伪随机数的问题 伪随机数其实是不随机的 而是一个固定有序序列 只要种子一样 每次生成的序列都是一样的 比如下面的PHP代码?php // 设置种子 mt_srand(12345); // 使用 mt_rand() 生成随机数 $randomNumber mt_rand(1, 100); echo $randomNumber . PHP_EOL; $randomNumber mt_rand(1, 100); echo $randomNumber . PHP_EOL; $randomNumber mt_rand(1, 100); echo $randomNumber . PHP_EOL; $randomNumber mt_rand(1, 100); echo $randomNumber . PHP_EOL; ?这段代码 只要种子是12345 后面运行几次的生成的序列都是 一样的PS C:\soft\wamp64\www php .\random.php91828654PS C:\soft\wamp64\www php .\random.php91828654PS C:\soft\wamp64\www php .\random.php91828654所以 其实游戏中的随机数概率问题 其实是有迹可循的 这个种子跟服务器重启的时间有关也可能和服务器的当前时间戳有关也有可能和你进入游戏的时间有关这取决于开发者的实现
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2425380.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!