骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 小黑盒加速器
查看: 1205|回复: 5

[功能与代码] 【流水线】一个便宜战斗伤害系统框架

[复制链接]

15

主题

139

回帖

151

积分

见习骑士

Rank: 3

UID
3048044
第纳尔
2026
精华
0
互助
17
荣誉
2
贡献
20
魅力
284
注册时间
2018-12-15
鲜花(30) 鸡蛋(0)
发表于 2023-9-30 19:08:21 | 显示全部楼层 |阅读模式
本帖最后由 黑暗路西法 于 2023-9-30 22:05 编辑

因为我自己的mod新版本添加了一套战斗伤害判断系统,所以顺便发中文站看有没有人需要

已经把我mod中的特殊判定去掉,纯净框架版
本体是一个script,然后在mt里加一个common判定,引用到场景里
  1.    ("cf_battle_buffs",[
  2.       (store_script_param, ":inflicted_agent", 1),
  3.       (store_script_param, ":dealer_agent", 2),  
  4.       (store_script_param, ":inflicted_damage", 3),
  5.           (store_script_param, ":player_agent", 4),
  6.           (assign,":ranged",0),
  7.           (agent_get_troop_id, ":inflicted_troop", ":inflicted_agent"),
  8.           (agent_get_horse, ":agent_is_riding", ":inflicted_agent"),
  9.           (gt, ":inflicted_damage", 0),
  10.           (try_begin),  #报错保险
  11.                (agent_get_wielded_item, ":dealer_item_id", ":dealer_agent", 0),
  12.                (gt,":dealer_item_id",0),
  13.                (item_get_type, ":item_type",":dealer_item_id"),
  14.            (else_try),
  15.                (assign,":dealer_item_id",0),
  16.                 (assign,":item_type", itp_type_two_handed_wpn),
  17.           (try_end),
  18.           (item_get_slot,":magic_atk",":dealer_item_id",slot_item_magic_atk),  #获取原伤害的千分之x作为魔法伤害附加
  19.           (val_mul,":magic_atk",":inflicted_damage"),
  20.           (val_div,":magic_atk",1000),
  21.           (store_skill_level, ":ironflesh_level", "skl_ironflesh", ":inflicted_troop"),#获取铁骨等级作为近战免伤依据
  22.           (store_skill_level, ":athletics_level", "skl_athletics", ":inflicted_troop"),#获取跑动等级作为远程减伤依据
  23.           (agent_get_troop_id,":inflicted_agent_trp",":inflicted_agent"),#获取troop id
  24.           (agent_get_troop_id,":dealer_agent_trp",":dealer_agent"),                   
  25.          (try_begin),
  26.             (troop_get_slot,":side_def",":inflicted_agent_trp",slot_troop_melee_protect), #获取额外减伤
  27.             (eq, "$less_hurt_ironflesh", 1), #铁骨减伤开关,留不留看你
  28.             (gt, ":dealer_item_id", -1),
  29.             (ge, ":ironflesh_level", 0),
  30.             (this_or_next|eq, ":item_type", itp_type_one_handed_wpn),
  31.             (this_or_next|eq, ":item_type", itp_type_two_handed_wpn),
  32.             (eq, ":item_type", itp_type_polearm),
  33.             (assign,":melee",1),
  34.              (try_begin),        #不骑马一级2%,否则0.75%
  35.                   (eq, ":agent_is_riding", -1),
  36.                   (store_mul, ":reduced_damage", ":ironflesh_level", 200),
  37.                  (else_try),
  38.                   (store_mul, ":reduced_damage", ":ironflesh_level", 75),                 
  39.              (try_end),
  40.            (else_try),
  41.                 (troop_get_slot,":side_def",":inflicted_agent_trp",slot_troop_ranged_protect),           #获取远程减伤,弓弩投
  42.                 (eq, "$less_hurt_athletics", 1), #同开关
  43.                 (gt, ":dealer_item_id", -1),
  44.                 (ge, ":athletics_level", 0),               
  45.                 (this_or_next|eq, ":item_type", itp_type_bow),
  46.                 (this_or_next|eq, ":item_type", itp_type_crossbow),
  47.                 (eq, ":item_type", itp_type_thrown),
  48.                 (assign,":ranged",1),
  49.                 (try_begin),        #不骑马才有免伤
  50.                    (eq, ":agent_is_riding", -1),
  51.                   (store_mul, ":reduced_damage", ":athletics_level", 300),         
  52.                 (try_end),
  53.            (else_try),
  54.                 (troop_get_slot,":side_def",":inflicted_agent_trp",slot_troop_ranged_protect),          
  55.                 (eq, "$less_hurt_athletics", 1),
  56.                 (gt, ":dealer_item_id", -1),
  57.                 (ge, ":athletics_level", 0),
  58.                 (this_or_next|eq, ":item_type", itp_type_pistol),
  59.                 (eq, ":item_type", itp_type_musket),
  60.                 (assign,":ranged",1),
  61.                 (try_begin),        #不骑马才有免伤,一级1%
  62.                   (eq, ":agent_is_riding", -1),
  63.                   (store_mul, ":reduced_damage", ":athletics_level", 100),         
  64.                 (try_end),               
  65.           (try_end),

  66.           (val_add,":reduced_damage",":side_def"),
  67.           (troop_get_slot,":crush",":dealer_agent_trp",slot_troop_arm_penetrate), #计算攻击者伤害穿透
  68.           (val_sub,":reduced_damage",":crush"),
  69.           (val_max,":reduced_damage",-2500), #最多+25%伤害,-98%伤害
  70.           (val_min,":reduced_damage",9800),
  71.           (val_mul, ":reduced_damage", ":inflicted_damage"),
  72.           (val_div, ":reduced_damage", 10000),
  73.           (val_sub, ":inflicted_damage", ":reduced_damage"),

  74.           (val_add,":inflicted_damage",":magic_atk"),        #魔伤加回去  
  75.           
  76.           (try_begin),
  77.             (gt,":magic_atk",0),
  78.             (eq,":dealer_agent",":player_agent"), #通知玩家魔法伤害
  79.             (assign,reg21,":magic_atk"),
  80.             (display_message,"@create {reg21} magatk",0x33CCFF),
  81.            (else_try),
  82.             (gt,":magic_atk",0),          
  83.             (eq,":inflicted_agent",":player_agent"),
  84.             (assign,reg21,":magic_atk"),
  85.             (display_message,"@earn {reg21} magatk",0x33CCFF),
  86.            (else_try),
  87.           (try_end),
  88.           
  89.           
  90.           (troop_get_slot,":all_def",":inflicted_agent_trp",slot_troop_all_protect),#计算特殊抗性
  91.          (val_mul, ":all_def", ":inflicted_damage"),
  92.          (val_div, ":all_def", 10000),
  93.          (val_sub, ":inflicted_damage", ":all_def"),
  94.           
  95.           (troop_get_slot,":all_def",":inflicted_agent_trp",slot_troop_block),#计算格免
  96.           (val_sub, ":inflicted_damage", ":all_def"),
  97.           (val_max,":inflicted_damage", 0),
  98.           
  99.           (try_begin),
  100.              (agent_slot_ge, ":inflicted_agent",slot_agent_war_shield,1),  #agent护盾计算
  101.              (agent_get_slot, ":val", ":inflicted_agent",slot_agent_war_shield),
  102.            (try_begin),       
  103.               (gt,":val",":inflicted_damage"),
  104.               (val_sub,":val",":inflicted_damage"),
  105.               (assign,":inflicted_damage",0),
  106.               (agent_set_slot, ":inflicted_agent",slot_agent_war_shield, ":val"),
  107.            (else_try),
  108.               (val_sub,":inflicted_damage",":val"),
  109.               (agent_set_slot, ":inflicted_agent",slot_agent_war_shield,0),
  110.            (try_end),                  
  111.           (try_end),
  112.           
  113.           (try_begin),
  114.             (troop_slot_ge,":dealer_agent_trp",slot_troop_sp_buff,1),    #获取攻击者是不是特殊trp进行伤前后计算       
  115.           (try_end),
  116.           

  117.           
  118.           (try_begin),          
  119.             (troop_slot_ge,":inflicted_agent_trp",slot_troop_sp_buff,1), #获取受击者是不是特殊trp进行伤前后计算       
  120.            (try_end),
  121.           (try_begin),
  122.                  (team_slot_eq,":d_team",slot_team_xxxx,1), #一些team slot的位置,可以用来上集体buff
  123.           (try_end),
  124.           (set_trigger_result, ":inflicted_damage"), #伤判

  125.           (try_begin),          
  126.             (troop_slot_ge,":inflicted_agent_trp",slot_troop_sp_buff,1), #获取受击者是不是特殊trp进行伤判后计算       
  127.           (try_end),
  128.           
  129.           (try_begin),
  130.            (item_slot_ge,":dealer_item_id",slot_item_sp_buff,1), #获取攻击者的物品id,看是不是特殊武器以便进行后续计算
  131.           (try_end),
  132.           
  133.    ]),       
复制代码






common_battle_damage = (
      ti_on_agent_hit, 0.000000, 0.000000,
      [
      (store_trigger_param_1, ":inflicted_agent"),
      (store_trigger_param_2, ":dealer_agent"),
      (store_trigger_param_3, ":inflicted_damage"),
      (get_player_agent_no, ":player_agent"),
      (gt,":inflicted_damage",0),        
      (agent_is_human, ":dealer_agent"),#防止造成伤害的是马匹找不到原始trp信息
      (agent_is_human, ":inflicted_agent"),
      (call_script,"script_cf_battle_buffs",":inflicted_agent",":dealer_agent",":inflicted_damage",":player_agent"),
      ],[])


就差不多完事了
然后每个slot的设置这块


slot_troop_melee_protect   = 200  ##近战穿透,按照万分之x填
slot_troop_ranged_protect  = 201  #远程穿透,按照万分之x填
slot_troop_all_protect     = 202  #特殊抗性,按照万分之x填
slot_troop_arm_penetrate   = 203  #伤害穿透,按照万分之x填
slot_troop_arm_shield   = 204  #护盾,直接填值
slot_troop_block   = 205  #格免,直接填值

slot_troop_sp_buff =206  #大于1的情况下该兵种进入特殊判定

slot_agent_war_shield      = 40#agent护盾

TEAM SLOTS没怎么用,可以大大滴加

然后是item的魔攻
slot_item_magic_atk #按照百分之x填


非要说这osp其实没什么特别的,主要优点是如果完全没想法用我参考的比从零开始写快一点



评分

参与人数 1第纳尔 +1 互助 +1 收起 理由
vegetto + 1 + 1 便宜那就一块第纳尔

查看全部评分

29

主题

690

回帖

551

积分

骑士

Rank: 4Rank: 4

UID
3322408
第纳尔
1738
精华
0
互助
67
荣誉
0
贡献
0
魅力
4
注册时间
2022-2-3
鲜花(55) 鸡蛋(0)
发表于 2023-10-1 11:17:51 来自手机 | 显示全部楼层
宇宙人的手,好汗。来自: Android客户端

0

主题

25

回帖

18

积分

随仆

Rank: 1

UID
3319238
第纳尔
585
精华
0
互助
0
荣誉
1
贡献
10
魅力
200
注册时间
2022-1-28
鲜花(9) 鸡蛋(0)
发表于 2024-3-5 02:49:20 | 显示全部楼层
达到怎么一个效果呢

15

主题

139

回帖

151

积分

见习骑士

Rank: 3

UID
3048044
第纳尔
2026
精华
0
互助
17
荣誉
2
贡献
20
魅力
284
注册时间
2018-12-15
鲜花(30) 鸡蛋(0)
 楼主| 发表于 2024-3-5 12:18:22 | 显示全部楼层
殇垣 发表于 2024-3-5 02:49
达到怎么一个效果呢

在战团的伤害框架上加上这个可以达到一个修改伤害系统的效果,如不同的兵种抗性等等等等,什么长枪兵打骑兵有加成之类的

25

主题

184

回帖

188

积分

见习骑士

Rank: 3

UID
3225805
第纳尔
1442
精华
0
互助
25
荣誉
0
贡献
0
魅力
196
注册时间
2021-3-14
鲜花(46) 鸡蛋(0)
发表于 2024-3-5 13:01:47 | 显示全部楼层
抗性和伤害加成,可以继续简化的,长串代码看着头疼

15

主题

139

回帖

151

积分

见习骑士

Rank: 3

UID
3048044
第纳尔
2026
精华
0
互助
17
荣誉
2
贡献
20
魅力
284
注册时间
2018-12-15
鲜花(30) 鸡蛋(0)
 楼主| 发表于 2024-3-5 23:03:20 | 显示全部楼层
快乐风猫 发表于 2024-3-5 13:01
抗性和伤害加成,可以继续简化的,长串代码看着头疼

理论上最简单还可以开局脚本跑一下兵种存抗性更简单,单纯这么写方便动态可以偷懒
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2024-5-1 19:07 , Processed in 0.128772 second(s), 29 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表