骑马与砍杀中文站论坛

标题: 战场兵种克制(py代码)+领主受伤身亡(py代码) [打印本页]

作者: 快乐风猫    时间: 2024-1-2 15:38
标题: 战场兵种克制(py代码)+领主受伤身亡(py代码)
本帖最后由 快乐风猫 于 2024-2-6 22:36 编辑

突发奇想战场里,骑克射,射克步,步克枪,枪克骑 ,更能体现各王国的兵种优势,玩家在野战前也能更谨慎的选择合适的队伍进行战斗,通过兵种类型和所用的武器来判断是什么兵种,
[spoiler=图片] mb3.jpg mb4.jpg mb5.jpg mb6.jpg [/spoiler]


兵种克制:骑兵X步兵,步兵X射手,射手X骑兵,从步兵里分出一个单独的枪兵用作克制骑兵,骑射手不作处理,因为骑射已经很变态了,不能再加强了


领主受伤身亡:相较于抓住领主处决,我觉得在战场中的战斗也影响领主的生死比较真实,战斗中领主被击晕后为受伤状态,战后领主逃跑或被俘虏都有几率重伤身亡
.......................

[spoiler=兵种克制代码]代码如下
  1. kezhi = (
  2.   ti_on_agent_hit, 0, 0,
  3.   [
  4.     (store_trigger_param_1, ":shoushang"),#受击者
  5.     (store_trigger_param_2, ":gongji"),#攻击者
  6.     (store_trigger_param_3, ":zhi"),#伤害
  7.     (agent_is_human,":shoushang"),#是人类
  8.     (agent_is_human,":gongji"),#是人类
  9.     (agent_is_alive,":shoushang"),#是存活的
  10.     (agent_is_alive,":gongji"),#是存活的
  11.     (agent_get_class ,":bingzhong", ":shoushang"),#获取受击者兵种类型
  12.     (agent_get_class ,":bingzhong_1", ":gongji"),#获取攻击者兵种类型
  13.    (try_begin),
  14.     ##骑兵只能用近战武器对步兵造成伤害,骑射手为正常伤害
  15.     (eq,":bingzhong_1",grc_cavalry),#攻击者是骑兵
  16.     (eq,":bingzhong",grc_infantry),#受击者是步兵
  17.     (agent_get_wielded_item,":wuqi",":shoushang",0),#获取步兵装备的武器
  18.     (item_get_type, ":leixing", ":wuqi"),
  19.     (neg|eq,":leixing",itp_type_polearm),#不是长杆(区分枪兵与普通步兵作用)
  20.     (agent_get_wielded_item,":wuqi2",":gongji",0),#获取骑兵装备的武器
  21.     (item_get_type, ":leixing2", ":wuqi2"),
  22.     (neg|eq,":leixing2",itp_type_bow),#不能是弓骑兵
  23.     (neg|eq,":leixing2",itp_type_crossbow),#不能是弩骑兵
  24.     (assign,":shanghai",":zhi"),#获取伤害
  25.     (val_div, ":shanghai", 5),#造成20%额外伤害
  26.     (store_agent_hit_points, ":hp", ":shoushang", 1),
  27.     (val_sub, ":hp", ":shanghai"),
  28.     (val_max, ":hp", 0),#取较大值
  29.     (agent_set_hit_points, ":shoushang", ":hp", 1),
  30.     (assign, reg1,":shanghai"),#输出数据
  31.     (display_message, "@骑 兵 对 步 兵 造 成 {reg1}点 伤 害 !", 0xFF0000),
  32.    (else_try),
  33.     (eq,":bingzhong_1",grc_infantry),#攻击者是步兵
  34.     (eq,":bingzhong",grc_archers),#受击者是射手
  35.     ##不判断射手武器,只判断兵种类型,检测是射手都会受到步兵额外伤害(包括弓箭手+弩手+投掷)
  36.     (agent_get_wielded_item,":wuqi",":gongji",0),#获取步兵装备的武器
  37.     (item_get_type, ":leixing", ":wuqi"),
  38.     (neg|eq,":leixing",itp_type_polearm),#不是长杆(区分枪兵与普通步兵作用)
  39.     (assign,":shanghai",":zhi"),#获取伤害
  40.     (val_div, ":shanghai", 5),#造成20%额外伤害
  41.     (store_agent_hit_points, ":hp", ":shoushang", 1),
  42.     (val_sub, ":hp", ":shanghai"),
  43.     (val_max, ":hp", 0),#取较大值
  44.     (agent_set_hit_points, ":shoushang", ":hp", 1),
  45.     (assign, reg1,":shanghai"),#输出数据
  46.     (display_message, "@步 兵 对 射 手 造 成 {reg1}点 伤 害 !", 0xFF0000),
  47.    (else_try),
  48.     (eq,":bingzhong_1",grc_archers),#攻击者是射手
  49.     (eq,":bingzhong",grc_cavalry),#受击者是骑兵
  50.     ##不判断骑兵武器,只判断兵种类型,检测是有马的单位都可以造成额外伤害(包括骑射手)
  51.     (agent_get_wielded_item,":wuqi",":gongji",0),#获取射手装备的武器
  52.     (item_get_type, ":leixing", ":wuqi"),
  53.     (this_or_next|eq, ":leixing",itp_type_bow),#是弓
  54.     (this_or_next|eq, ":leixing",itp_type_crossbow),#是弩
  55.     (eq, ":leixing",itp_type_thrown),#是投掷武器
  56.     ##判断射手武器,只能以弓箭、弩、投掷武器造成额外伤害(其余武器不生效)
  57.     (assign,":shanghai",":zhi"),#获取伤害
  58.     (val_div, ":shanghai", 5),#造成20%额外伤害
  59.     (store_agent_hit_points, ":hp", ":shoushang", 1),
  60.     (val_sub, ":hp", ":shanghai"),
  61.     (val_max, ":hp", 0),#取较大值
  62.     (agent_set_hit_points, ":shoushang", ":hp", 1),
  63.     (assign, reg1,":shanghai"),#输出数据
  64.     (display_message, "@射 手 对 骑 兵 造 成 {reg1}点 伤 害 !", 0xFF0000),
  65.    (else_try),
  66.     (eq,":bingzhong_1",grc_infantry),#攻击者是枪兵
  67.     (eq,":bingzhong",grc_cavalry),#受击者是骑兵
  68.     (agent_get_wielded_item,":wuqi",":gongji",0),
  69.     (item_get_type, ":leixing", ":wuqi"),
  70.     (eq,":leixing", itp_type_polearm),#获取步兵武器(只能是长杆武器才能造成额外伤害)
  71.     (assign,":shanghai",":zhi"),#获取伤害
  72.     (val_div, ":shanghai", 5),#造成20%额外伤害
  73.     (store_agent_hit_points, ":hp", ":shoushang", 1),
  74.     (val_sub, ":hp", ":shanghai"),
  75.     (val_max, ":hp", 0),#取较大值
  76.     (agent_set_hit_points, ":shoushang", ":hp", 1),
  77.     (assign, reg1,":shanghai"),#输出数据
  78.     (display_message, "@枪 兵 对 骑 兵 造 成 {reg1}点 伤 害 !", 0xFF0000),
  79.    (try_end),
  80.    
  81.     ], [])
复制代码


[/spoiler]




[spoiler=重伤身亡代码]代码如下
slot_troop_shoushang      = 170
加一个新的slot槽
  1. shasi = (
  2.   ti_on_agent_killed_or_wounded, 0, 0, [],
  3.   [      
  4.     (store_trigger_param_1, ":agent_1"),#受伤
  5.     (store_trigger_param_2, ":agent_2"),#攻击
  6.     (agent_get_troop_id,":troop",":agent_1"),#获取被杀者troopID
  7.     (agent_get_troop_id,":troop_2",":agent_2"),#获取攻击者troopID
  8.     (try_for_range, ":hero", active_npcs_begin, active_npcs_end),#循环所有活跃NPC
  9.    (try_begin),
  10.     (troop_slot_eq, ":troop_2", slot_troop_occupation, slto_kingdom_hero),#攻击者是一位领主
  11.     (eq,":troop",":hero"),#受伤的是活跃的NPC
  12.     (store_character_level,":dengji",":troop"),#获取被杀者等级
  13.     (troop_set_slot, ":troop", slot_troop_shoushang, 1),#记录受伤的领主
  14.     (troop_get_slot, ":troop_renown", ":troop_2", slot_troop_renown),#获取击杀者声望
  15.     (store_mul,":shengwang",":dengji",5),#击杀者获得被杀者等级✖5的声望奖励
  16.     (val_add,":troop_renown",":shengwang"),#叠加声望
  17.     (troop_set_slot, ":troop_2", slot_troop_renown, ":troop_renown"),#获得声望
  18.    (else_try),#如果攻击者是士兵
  19.     (eq,":troop",":hero"),#受伤的是活跃的NPC
  20.     (store_character_level,":dengji",":troop"),#获取被杀者等级
  21.     (troop_set_slot, ":troop", slot_troop_shoushang, 1),#记录受伤的领主
  22.    (try_end),
  23.    (try_end),

  24.     ])

复制代码
  1. #script_get_troop_clear
  2.   ("get_troop_clear",
  3.     [
  4.       (store_script_param_1, ":clear_lord"),
  5.     (try_begin),
  6.       (store_troop_faction,":l_fac", ":clear_lord"),#获取兵种阵营
  7.       (faction_get_slot, ":l_fac_leader", ":l_fac", slot_faction_leader),#获取阵营国王
  8.       (try_for_range,":cur_center", centers_begin, centers_end),#循环中心
  9.       (store_faction_of_party,":cur_faction",":cur_center"),#获取中心阵营
  10.       (eq, ":cur_faction", ":l_fac"),#阵营相同
  11.       (party_slot_eq,":cur_center",slot_town_lord, ":clear_lord"),#兵种是中心领主
  12.       (call_script,"script_give_center_to_lord", ":cur_center",":l_fac_leader", 0),#把中心移交国王
  13.     (try_end),
  14.       (call_script,"script_change_troop_faction", ":clear_lord","fac_no_faction"),#改变兵种的阵营
  15.       (troop_set_slot,":clear_lord",slot_troop_occupation,slto_inactive),#设置兵种是不活跃的
  16.       (troop_set_note_available, ":clear_lord",0),#设置兵种信息不可用
  17.       (troop_set_faction, ":clear_lord", "fac_no_faction"),#设置兵种阵营
  18.       (troop_set_slot,":clear_lord",slot_troop_renown, -1),#设置兵种声望
  19.       (troop_set_slot, ":clear_lord", slot_troop_father, -1),#无父亲
  20.       (troop_set_slot, ":clear_lord", slot_troop_mother, -1),#无母亲
  21.       (troop_set_slot, ":clear_lord", slot_troop_guardian, -1),
  22.       (troop_set_slot, ":clear_lord", slot_troop_spouse, -1),
  23.       (troop_set_slot, ":clear_lord", slot_troop_betrothed, -1),
  24.       (troop_set_slot, ":clear_lord", slot_troop_prisoner_of_party, -1),#没有被俘虏
  25.       (troop_set_slot, ":clear_lord", slot_troop_wealth, 0),#清楚钱
  26.       (troop_get_slot,":lord_party", ":clear_lord", slot_troop_leaded_party),#获取兵种领导的队伍
  27.     (try_begin),
  28.       (party_is_active,":lord_party"),#队伍是活跃的
  29.       (neq, ":lord_party", "p_main_party"),#不等于玩家队伍
  30.       (remove_party,":lord_party"),#将队伍清除
  31.       (troop_set_slot,":clear_lord",slot_troop_leaded_party, -1),#设置兵种不可以带兵
  32.     (try_end),
  33.     (try_end),
  34.     ]),
复制代码
  1. (24, 0, 0.0,
  2.   [],
  3.   [
  4.     (try_for_range, ":hero", active_npcs_begin, active_npcs_end),#循环所有活跃NPC
  5.     (troop_get_slot, ":shoushang", ":hero", slot_troop_shoushang),#领主是否在战斗中负伤
  6.     (ge,":shoushang",1),#如果是负伤的状态
  7.     (store_random_in_range, ":jilv", 1, 101),
  8.    (try_begin),
  9.     (is_between,":jilv",1,6),#5%的几率重伤身亡
  10.     (call_script, "script_get_troop_clear",":hero"),#不治身亡
  11.     (str_store_troop_name,s10,":hero"),
  12.     (display_message, "@{s10}在 最 近 的 一 次 战 斗 中 受 伤 ,不 幸 重 伤 而 亡 !", 0xFF0000),
  13.    (else_try),
  14.     (is_between,":jilv",7,101),#95%的几率治愈伤势
  15.     (troop_set_slot, ":hero", slot_troop_shoushang, -1),#治愈伤势
  16.     (str_store_troop_name,s10,":hero"),
  17.     (display_message, "@{s10}在 最 近 的 一 次 战 斗 中 受 伤 ,现 在 已 经 痊 愈 !", 0xFF0000),
  18.    (try_end),
  19.    (try_end),
  20.   ]),
复制代码

清除领主用的脚本途方便就引用了@sheng1021z 的帖子一个简单的脚本,供大家学习使用
[/spoiler]



作者: 幼稚园殺手    时间: 2024-2-3 15:19
这个有意思啊,但是代码是不是没贴出来
作者: 快乐风猫    时间: 2024-2-3 22:18
本帖最后由 快乐风猫 于 2024-2-3 23:16 编辑
幼稚园殺手 发表于 2024-2-3 15:19
这个有意思啊,但是代码是不是没贴出来

哎  你不说我都没看!!代码确实没贴出来  代码已补上
作者: 幼稚园殺手    时间: 2024-2-4 16:22
快乐风猫 发表于 2024-2-3 22:18
哎  你不说我都没看!!代码确实没贴出来  代码已补上

啊哈可以的,这个功能可以授权一下吗
作者: 快乐风猫    时间: 2024-2-4 18:17
本帖最后由 快乐风猫 于 2024-2-4 19:43 编辑
幼稚园殺手 发表于 2024-2-4 16:22
啊哈可以的,这个功能可以授权一下吗

当然可以,随便用就好了,你如果能继续完善一下各种逻辑可得给我分享分享,又新加了一个小功能
作者: sheng1021z    时间: 2024-2-8 08:57
不错,挺有趣的。不过领主死亡触发器写在mt里可能更好一点。
作者: 快乐风猫    时间: 2024-2-13 20:52
sheng1021z 发表于 2024-2-8 08:57
不错,挺有趣的。不过领主死亡触发器写在mt里可能更好一点。

全部写在MT里直接清除领主的话旗帜和部队各方面会刷屏报错,我试过修改了几次,无能为力
作者: sheng1021z    时间: 2024-2-17 00:36
快乐风猫 发表于 2024-2-13 20:52
全部写在MT里直接清除领主的话旗帜和部队各方面会刷屏报错,我试过修改了几次,无能为力 ...

话说我好像看见你在小黑屋群里
作者: 快乐风猫    时间: 2024-2-17 01:01
sheng1021z 发表于 2024-2-17 00:36
话说我好像看见你在小黑屋群里

是的,加了小黑屋的
作者: 网一不    时间: 2024-10-27 12:55
作者大大666




欢迎光临 骑马与砍杀中文站论坛 (https://bbs.mountblade.com.cn/) Powered by Discuz! X3.4