Rimworld Mod制作教程8 近战武器流程

1.伤害来源分析

先取出一段近战武器最重要def数据文件。和远程武器不同,这里没有子弹类,也找不到damage相关的def,第一眼看上去唯一可能与伤害计算有关的就是tools中有个stab,blunt,poke,这三个单词都和伤害相关。


    MeleeWeapon_Spear
    
    A polearm tipped with a sharp point for stabbing opponents.
    
      Things/Item/Equipment/WeaponMelee/Spear
      Graphic_Single
    
    Neolithic
    
      
  • NeolithicMeleeAdvanced
  • MedievalMeleeAdvanced
  • 75
  • RewardStandardQualitySuper
  • 12000 2 -25
  • Metallic
  • Woody
  • Blunt
  • Poke
  • 13 2.6
  • Stab
  • 23 0.50 2.6
    LongBlades 4

    首先我们要弄明白这三个值在C#中对应的class
    在这里插入图片描述
    在这里插入图片描述
    而ToolCapacityDef中仅有两个数据,Maneuvers,VerbProperties。
    Rimworld Mod制作教程8 近战武器流程_第1张图片
    但我们追查xml文件,ToolCapacityDef却是这样:
    几乎没什么数据

    
    
        
      
        SR_RC_Cut
        
      
      
        SR_RC_Stab
        
      
    
    
    

    而ManeuverDef则似乎包含了我们需要的数据

    
    
      
        SR_Maneuver_Cut
        SR_RC_Cut
        
          Verb_MeleeAttackDamage
          SR_Damage_Cut
        
        MeleeAttack
        Maneuver_Slash_MeleeHit
        Maneuver_Slash_MeleeDeflect
        Maneuver_Slash_MeleeMiss
        Maneuver_Slash_MeleeDodge
      
      
        SR_Maneuver_Stab
        SR_RC_Stab
        
          Verb_MeleeAttackDamage
          SR_Damage_Stab
        
        MeleeAttack
        Maneuver_Stab_MeleeHit
        Maneuver_Stab_MeleeDeflect
        Maneuver_Stab_MeleeMiss
        Maneuver_Stab_MeleeDodge
      
    
    
    

    看一眼这里恍然大悟,ToolCapacityDef仅仅是用来枢纽ManeuverDef,而ManeuverDef中则包含了战斗日志相关以及verb组件。而伤害计算相关则在verb中被调用。verb中的meleeDamageDef参数的class实际上就是个DamageDef,所以修改这里就可以实现自定义的武器伤害类别,buff效果。
    Rimworld Mod制作教程8 近战武器流程_第2张图片

    2.底层过程

    关于ManeuverDef的底层调用顺序,我大概说一下,需要仔细研究的话要追源码。
    1.创建角色或者复活角色

    Verse.PawnGenerator.TryGenerateNewPawnInternal(ref PawnGenerationRequest, out string, bool, bool) : Pawn @06001218
    RimWorld.ResurrectionUtility.Resurrect(Pawn) : void @06004245
    

    2.在1的过程中为小人创建所有控制器,其中包含我们需要的VerbTracker,管理小人身上的verb组件相关

    RimWorld.PawnComponentsUtility.CreateInitialComponents(Pawn) : void @06004129
    

    3.绑定角色与verb控制器

    Verse.VerbTracker..ctor(IVerbOwner) : void @060021E1
    

    4.初始化与更新控制器,除此之外带有CompEquippable组件的可装备物品会为角色提供额外的verb动作,我们的近战武器就属于这一类,默认的是小人基础动作,比如赤手空拳。

    Verse.VerbTracker.InitVerbs(Func) : void @060021E8
    Verse.VerbTracker.VerbsTick() : void @060021E2
    Verse.Pawn_EquipmentTracker.EquipmentTrackerTick() : void @060012BB(装备中的额外verb)
    

    5.调用verb的过程,不同的verb会重写该方法。

    Verse.Verb.TryCastNextBurstShot() : void @060021BF
    Verse.Verb.TryCastShot() : bool @060021C1
    

    以RimWorld.Verb_MeleeAttack.TryCastShot() : bool @06006082为例,近战的verb过程中实现了伤害机制计算,装备效果影响,闪避,反击,战斗技能熟练度获取,战斗日志等等。

    你可能感兴趣的:(Rimworld,Mod教程)