网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
可签
7
级以上的吧
50
个
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月25日
漏签
0
天
骑马与砍杀吧
关注:
755,005
贴子:
15,140,016
看贴
图片
吧主推荐
视频
玩乐
1
2
下一页
尾页
57
回复贴,共
2
页
,跳到
页
确定
<返回骑马与砍杀吧
>0< 加载中...
看了下霸主的代码,了解到npc什么时候去世了。
只看楼主
收藏
回复
动视暴雪-中国
新封骑士
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
运气逆天同时各种因素拉满的话,最大能活128岁。所有npc都是从47岁开始计算死亡概率,到了47之后,每到结算的时候都可能暴毙,大家还有什么想了解的,游戏里没说的,在帖子里回复,看能不能在代码里找到。
送TA礼物
IP属地:澳大利亚
来自
iPhone客户端
1楼
2024-06-04 20:51
回复
晓断言
四海游侠
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
看看ai部队行为,军团行为,藏身处行为,劫匪行为
,ai部队火星经验来源,ai宣战议和逻辑,贡金计算公式
IP属地:山西
来自
Android客户端
2楼
2024-06-04 20:57
回复(1)
收起回复
2025-07-25 04:37:45
广告
不感兴趣
开通SVIP免广告
SWㅤ
剑舞行者
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
想知道宣战是怎么回事 总是无缘无故宣战
IP属地:广东
来自
Android客户端
3楼
2024-06-04 22:05
回复
收起回复
1234客户
骑行武士
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
王国提案ai的投票逻辑是什么?
IP属地:福建
来自
Android客户端
4楼
2024-06-04 22:45
回复(1)
收起回复
坎扎特·奇马耶夫
百战精英
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
像看骑兵的AI代码,比如骑兵拉扯的距离,还有武器切换是怎么算的。相对速度的伤害计算公式
IP属地:浙江
5楼
2024-06-04 22:46
回复
收起回复
动视暴雪-中国
新封骑士
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
private void AddNewHideouts(){foreach (Clan clan in Clan.BanditFactions){if (!BanditsCampaignBehavior.IsLooterFaction(clan)){int num = 0;foreach (Hideout hideout in Campaign.Current.AllHideouts){if (hideout.IsInfested && hideout.Settlement.Culture == clan.Culture){num++;}}float num2 = 0f;if ((float)num < (float)this._numberOfMaxHideoutsAtEachBanditFaction * 0.5f){num2 = 1f - (float)num / (float)MathF.Ceiling((float)this._numberOfMaxHideoutsAtEachBanditFaction * 0.5f);num2 = MathF.Max(0f, num2 * num2);}if (MBRandom.RandomFloat < num2){this.FillANewHideoutWithBandits(clan);}}}}
这段 C# 代码的目标是管理不同匪帮派别的藏身处。该方法AddNewHideouts()遍历所有匪帮,并确定是否应为每个匪帮创建新的藏身处。
土匪家族的迭代:
代码循环遍历每个家族一个Clan.BanditFactions。
检查掠夺者派系:
它使用 检查当前是否家族为“掠夺者派系” BanditsCampaignBehavior.IsLooterFaction(clan)。 如果该家族是掠夺者派系,则跳至下一个家族。 否则,它继续处理。
统计现有藏身处:
它将计数器初始化num为零。
然后它循环遍历活动中的所有藏身处(Campaign.Current.AllHideouts)。
对于每个藏身处,它会检查藏身处是否被感染 ( hideout.IsInfested) 以及藏身处的文化是否与家族的文化相匹配 ( hideout.Settlement.Culture == clan.Culture)。如果两个条件都满足,它就会增加计数器num。
确定新藏身处的概率:
它初始化num2为零。
检查家族的藏身处数量 ( num) 是否小于派系允许的最大藏身处数量的一半 ( this._numberOfMaxHideoutsAtEachBanditFaction * 0.5f)。如果为真,则计算一个概率因子num2:
num2计算为1f - (float)num / (float)MathF.Ceiling((float)this._numberOfMaxHideoutsAtEachBanditFaction * 0.5f)。
然后将其平方num2(以二次方降低概率)并确保它不小于零MathF.Max(0f, num2 * num2)。
随机检查以添加新的藏身处:
它生成一个随机浮点值(MBRandom.RandomFloat)并将其与进行比较num2。
如果随机值小于num2,它会调用this.FillANewHideoutWithBandits(clan),这可能负责为该家族创建一个新的藏身处。
该方法AddNewHideouts()系统地检查每个强盗家族,并根据同一文化的现有藏身处的数量,以概率方式决定是否创建新的藏身处。随着现有藏身处的数量接近每个派系允许的最大值,概率会降低。
这时有人要的藏身处刷新逻辑的代码和分析
IP属地:澳大利亚
6楼
2024-06-05 06:45
回复(1)
收起回复
礼赞冕神🙏
骑士从者
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
128岁就强制死亡吗😨,包括玩家角色吗?
IP属地:山东
来自
Android客户端
7楼
2024-06-05 09:04
回复(9)
收起回复
擦亮我的lance
百战精英
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我有个疑问想知道很久了,请哥们帮我看下,自己生的孩子的名字,特质到底跟啥有关,为啥我纯种帝国人生的孩子个个都是巴丹风格,性格总是负面出现的概率高
IP属地:江苏
来自
Android客户端
8楼
2024-06-05 11:23
回复(7)
收起回复
2025-07-25 04:31:45
广告
不感兴趣
开通SVIP免广告
圣仙狙
未经战事
4
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
藏身处能不能改掉不生成,后期太尼玛麻烦了
IP属地:江西
来自
Android客户端
9楼
2024-06-05 11:51
回复(2)
收起回复
动视暴雪-中国
新封骑士
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这段代码是npc逻辑检查和随机的一些几率来确定土匪是否会在对话中投降,点了招募土匪那个天赋就很容易
详细步骤
初始投降逻辑检查:
该方法要求PartyBaseHelper.DoesSurrenderIsLogicalForParty根据各方的相对实力来确定土匪投降是否合乎逻辑。这里使用的阈值是0.04f。
如果结果为true,num则设置为33。否则,设置为67。
int num = PartyBaseHelper.DoesSurrenderIsLogicalForParty(MobileParty.ConversationParty, MobileParty.MainParty, 0.04f) ? 33 : 67;
玩家技能调整:
该方法检查主角是否具有流氓习气的刀疤脸技能
如果英雄拥有该技能,则num通过将其乘以1 + PrimaryBonus该技能的百分比,然后对结果进行四舍五入来调整。如果玩家拥有该技能,这会增加投降的几率。
if (Hero.MainHero.GetPerkValue(DefaultPerks.Roguery.Scarface))
{
num = MathF.Round((float)num * (1f + DefaultPerks.Roguery.Scarface.PrimaryBonus));
}
随机几率检查:
该方法用于RandomIntWithSeed生成一个介于 4 和 100 之间的随机整数。种子(4U)确保当前对话的可重复性。
然后检查这个随机整数是否小于或等于100 - num。
return MobileParty.ConversationParty.Party.RandomIntWithSeed(4U, 100) <= 100 - num
最终投降逻辑检查:
该方法PartyBaseHelper.DoesSurrenderIsLogicalForParty以稍高的阈值(0.06f)再次调用,以对投降是否合乎逻辑进行最终检查。
&& PartyBaseHelper.DoesSurrenderIsLogicalForParty(MobileParty.ConversationParty, MobileParty.MainParty, 0.06f);
返回值:
true如果随机几率检查和最终投降逻辑检查都通过,则该方法返回。
如果任何一项检查失败,该方法将返回false。
重点突出的部分
// Initial surrender logic check with a threshold of 0.04
int num = PartyBaseHelper.DoesSurrenderIsLogicalForParty(MobileParty.ConversationParty, MobileParty.MainParty, 0.04f) ? 33 : 67;
// Adjustment based on player's perk
if (Hero.MainHero.GetPerkValue(DefaultPerks.Roguery.Scarface))
{
num = MathF.Round((float)num * (1f + DefaultPerks.Roguery.Scarface.PrimaryBonus));
}
// Random chance check with seed 4U and threshold adjustment
return MobileParty.ConversationParty.Party.RandomIntWithSeed(4U, 100) <= 100 - num
// Final surrender logic check with a higher threshold of 0.06
&& PartyBaseHelper.DoesSurrenderIsLogicalForParty(MobileParty.ConversationParty, MobileParty.MainParty, 0.06f);
该conversation_bandits_surrender_on_condition()方法结合逻辑检查和随机概率来确定土匪是否会向玩家投降。投降的可能性受玩家的技能影响,尤其是技能树流氓习气的刀疤脸技能。
这是检查强盗投降几率的代码。
IP属地:澳大利亚
10楼
2024-06-05 13:22
回复
收起回复
动视暴雪-中国
新封骑士
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
当玩家进入游戏OnSettlementEntered时,将调用此方法。该方法处理多项检查和更新,特别是与匪徒队伍和藏身处相关的检查和更新。
MobilePartySettlement
该方法检查土匪小队是否进入了藏身处,并处理藏身处的可见性和物品交易。如果满足某些条件,它会更新藏身处的可见性状态并调整小队和城镇的金币数量。
mobileParty:进入城镇的一方。
settlement:正在进入城镇。
hero:与队伍相关的英雄(如果有)。
public void OnSettlementEntered(MobileParty mobileParty, Settlement settlement, Hero hero)
产卵土匪老大:
该方法要求CheckForSpawningBanditBoss在城镇附近产生一个强盗头目。
this.CheckForSpawningBanditBoss(settlement, mobileParty);
检查游戏状态和条件:
该方法检查游戏是否已经开始,如果mobileParty不为空,则检查是否是一支强盗队伍,并且是否已进入藏身处。
if (Campaign.Current.GameStarted && mobileParty != null && mobileParty.IsBandit && settlement.IsHideout)
藏身处发现逻辑:
如果藏身处尚未被发现且有强盗出没,该方法将根据距离和能见度计算玩家的队伍是否能发现藏身处。
lengthSquared:玩家队伍与城镇之间的平方距离。
seeingRange:玩家队伍的视野范围。
num:根据距离和视野范围决定可见度的因素。
partySpottingDifficulty:发现队伍的难度。
如果计算出的可见度num / partySpottingDifficulty大于或等于 1,则将藏身处标记为被发现,更新其可见性,并触发活动事件。
if (!settlement.Hideout.IsSpotted && settlement.Hideout.IsInfested)
{
float lengthSquared = (MobileParty.MainParty.Position2D - settlement.Position2D).LengthSquared;
float seeingRange = MobileParty.MainParty.SeeingRange;
float num = seeingRange * seeingRange / lengthSquared;
float partySpottingDifficulty = Campaign.Current.Models.MapVisibilityModel.GetPartySpottingDifficulty(MobileParty.MainParty, mobileParty);
if (num / partySpottingDifficulty >= 1f)
{
settlement.Hideout.IsSpotted = true;
settlement.Party.UpdateVisibilityAndInspected(0f);
CampaignEventDispatcher.Instance.OnHideoutSpotted(MobileParty.MainParty.Party, settlement.Party);
}
}
以队伍的交易技能和物品数量来计算的代码:
num2被初始化以累积多余物品的价值。
对于派对物品清单中的每个物品,如果该物品是食物且超过一定随机数量,则计算超出的值并将其添加到num2。
int num2 = 0;
foreach (ItemRosterElement itemRosterElement in mobileParty.ItemRoster)
{
int num3 = itemRosterElement.EquipmentElement.Item.IsFood ? MBRandom.RoundRandomized((float)mobileParty.MemberRoster.TotalManCount * ((3f + 6f * MBRandom.RandomFloat) / (float)itemRosterElement.EquipmentElement.Item.Value)) : 0;
if (itemRosterElement.Amount > num3)
{
int num4 = itemRosterElement.Amount - num3;
num2 += num4 * itemRosterElement.EquipmentElement.Item.Value;
}
}
更新金币:
如果num2大于0,表示有多余的物品:
如果队伍交易很高,则超额价值的 25% 将添加到派对的交易黄金中。
超出价值的 25% 也会被添加到城镇的金币中。
if (num2 > 0)
{
if (mobileParty.IsPartyTradeActive)
{
mobileParty.PartyTradeGold += (int)(0.25f * (float)num2);
}
settlement.SettlementComponent.ChangeGold((int)(0.25f * (float)num2));
}
当玩家进入城镇时,该OnSettlementEntered方法执行几项任务:MobilePartySettlement
它会检查城镇附近是否产生了一个强盗头目。
如果一队匪徒进入藏身处,它会根据距离和能见度来确定是否应该发现藏身处。
它处理队伍的物品清单,计算多余食物的价值。
它会根据超额物品的价值来更新队伍的金币和结算。
代码大概意思就是说,进城镇时有几率发现藏身处。
IP属地:澳大利亚
11楼
2024-06-05 17:52
回复
收起回复
珊多拉
凯尔薇
百战精英
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
大佬,土匪的刷新逻辑是什么?
IP属地:辽宁
来自
iPhone客户端
12楼
2024-06-05 19:56
回复
收起回复
路过的小韭菜
王室亲族
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
已知在某城市三个工坊都高铁匠铺,大概每十天左右刷一次高级盔甲(和武器),在刷的过程中发现似乎有一些固定的规律但又搞不太清,想了解刷出传奇前缀盔甲的规律
IP属地:北京
来自
iPhone客户端
13楼
2024-06-05 20:43
回复
收起回复
你好像很好吃
初获采邑
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
游戏刚开始不久,瓦兰迪亚德泰尔就去世了
IP属地:四川
来自
Android客户端
14楼
2024-06-06 01:04
回复(1)
收起回复
2025-07-25 04:25:45
广告
不感兴趣
开通SVIP免广告
动视暴雪-中国
新封骑士
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
GetBannerRewardForDefeatingNoble计算在当玩家在战斗中击败贵族时是否奖励他们一面旗帜物品
参数:
mapEvent:代表战斗的事件。
lootedCasualties:代表从战败方掠夺的伤亡人员的部队列表。
返回:
若有ItemObject旗帜被掠夺,则为 ,否则为null。
方法步骤
初始化英雄变量:
声明一个hero变量并将其设置为null。
Hero hero = null;
寻找军队领导者:
迭代失败方的各方mapEvent。
检查该队伍是否具有机动性并且属于军队的一部分。
如果军队拥有者有有效旗帜,则将此英雄赋值给变量hero。如果旗帜无效,则设置hero为null并中断循环。
foreach (MapEventParty mapEventParty in mapEvent.PartiesOnSide(mapEvent.DefeatedSide))
{
if (mapEventParty.Party.IsMobile && mapEventParty.Party.MobileParty.Army != null)
{
hero = mapEventParty.Party.MobileParty.Army.ArmyOwner;
if (hero.BannerItem.IsInvalid())
{
hero = null;
break;
}
break;
}
}
找到一名带有有效旗帜的随机英雄:
如果hero仍然如此null,寻找被抢劫的伤亡人数,找到一名拥有有效旗帜的随机英雄。
if (hero == null)
{
CharacterObject character = lootedCasualties.GetRandomElementWithPredicate((TroopRosterElement t) => t.Character.IsHero && !t.Character.HeroObject.BannerItem.IsInvalid()).Character;
hero = ((character != null) ? character.HeroObject : null);
}
确定横幅是否可以被掠夺:
如果找到持有有效旗帜的英雄并且可以掠夺该旗帜,则根据英雄的等级确定掠夺几率。
如果英雄是王国统治者、家族领袖或普通英雄,机会就会有所不同。
if (hero != null && this.CanBannerBeLootedFromHero(hero))
{
Clan clan = hero.Clan;
Hero hero2;
if (clan == null)
{
hero2 = null;
}
else
{
Kingdom kingdom = clan.Kingdom;
hero2 = ((kingdom != null) ? kingdom.RulingClan.Leader : null);
}
float num;
if (hero2 == hero)
{
num = Campaign.Current.Models.BattleRewardModel.DefeatKingdomRulerBannerLootChance;
}
else
{
Clan clan2 = hero.Clan;
if (((clan2 != null) ? clan2.Leader : null) == hero)
{
num = Campaign.Current.Models.BattleRewardModel.DefeatClanLeaderBannerLootChance;
}
else
{
num = Campaign.Current.Models.BattleRewardModel.DefeatRegularHeroBannerLootChance;
}
}
掠夺旗帜:
如果随机浮点值小于或等于计算出的概率,则记录横幅战利品并返回横幅物品。
若条件不满足,则返回null。
if (MBRandom.RandomFloat <= num)
{
this.LogBannerLootForHero(hero, ((BannerComponent)hero.BannerItem.Item.ItemComponent).BannerLevel);
return hero.BannerItem.Item;
}
}
return null;
该GetBannerRewardForDefeatingNoble方法的工作原理如下:
它会检查任何失败方是否拥有持有有效旗帜的军队所有者。
如果没有,它会从被抢劫的伤亡人员中随机找出一名拥有有效旗帜的英雄。
根据英雄的等级来决定旗帜是否可以被掠夺。
它会计算夺取旗帜的概率,如果成功则返回,否则返回null。
主要函数和类
MapEvent:代表战役事件。
MapEventParty:代表参与战斗的一方。
MobileParty:代表可以在地图上移动的队伍。
TroopRosterElement:代表部队名册中的一个元素。
Hero:代表游戏中的英雄人物。
ItemObject:代表游戏中的物品。
MBRandom.RandomFloat:返回 0 到 1 之间的随机浮点值。
Campaign.Current.Models.BattleRewardModel:包含不同等级英雄的战利品几率。
this.LogBannerLootForHero:记录英雄的战利品行动。
this.CanBannerBeLootedFromHero:检查是否可以从英雄身上夺取旗帜。
打领主决定掉不掉旗帜的代码
IP属地:澳大利亚
15楼
2024-06-06 09:39
回复
收起回复
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧热议榜
1
大学生坠入死亡矿浆,中金零事故豪言崩塌!
2340840
2
机毁人亡!俄罗斯客机被谁打下来了?
2275166
3
明末道歉补偿打发谁呢
1713628
4
Zeus父母求T1粉丝别骂了
1642167
5
《黑神话》的含金量还在上升
1411878
6
Ale一句话把IG和JDG都爆了
1007125
7
文艺片名导娄烨贪污千万被告
793776
8
JDG惨遭IG零封剃光头
565616
9
B萌战况升级内娱粉丝下场助战
409794
10
吉大花200万修景观却没钱装空调
342405
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示