using System.Text.Json.Serialization; using System.Collections.Generic; namespace Config; public static partial class ExcelConfig { public partial class WeaponBase { /// <summary> /// 武器属性id /// </summary> [JsonInclude] public string Id; /// <summary> /// 备注 /// </summary> [JsonInclude] public string Remark; /// <summary> /// 属性绑定武器的Id,这个id时ActivityBase表Id,如果是Ai使用的数据, 则填空字符串串 /// </summary> public ActivityBase Activity; /// <summary> /// 重量 /// </summary> [JsonInclude] public float Weight; /// <summary> /// 武器类型: <br/> /// 1.副武器 <br/> /// 2.主武器 <br/> /// 3.重型武器 /// </summary> [JsonInclude] public byte WeightType; /// <summary> /// 标记是否是近战武器 /// </summary> [JsonInclude] public bool IsMelee; /// <summary> /// 是否连续发射, 如果为false, 则每次发射都需要扣动扳机 /// </summary> [JsonInclude] public bool ContinuousShoot; /// <summary> /// 弹夹容量 /// </summary> [JsonInclude] public int AmmoCapacity; /// <summary> /// 弹药容量上限 /// </summary> [JsonInclude] public int MaxAmmoCapacity; /// <summary> /// 默认起始备用弹药数量 /// </summary> [JsonInclude] public int StandbyAmmoCapacity; /// <summary> /// 换弹是否显示换弹进度 /// </summary> [JsonInclude] public bool ShowReloadBar; /// <summary> /// 弹夹打空是否自动换弹 /// </summary> [JsonInclude] public bool AutoReload; /// <summary> /// 装弹时间 (单位: 秒) /// </summary> [JsonInclude] public float ReloadTime; /// <summary> /// 每粒子弹是否是单独装填, 如果是, 那么每上一发子弹的时间就是 ReloadTime, 可以做霰弹枪装填效果 /// </summary> [JsonInclude] public bool AloneReload; /// <summary> /// 单独装填时每次装填子弹数量, 必须要将 'AloneReload' 属性设置为 true /// </summary> [JsonInclude] public int AloneReloadCount; /// <summary> /// 单独装弹模式下,从触发装弹到开始装第一发子弹中间的间隔时间, 必须要将 'AloneReload' 属性设置为 true /// </summary> [JsonInclude] public float AloneReloadBeginIntervalTime; /// <summary> /// 单独装弹模式下,从装完最后一发子弹到可以射击中间的间隔时间, 必须要将 'AloneReload' 属性设置为 true /// </summary> [JsonInclude] public float AloneReloadFinishIntervalTime; /// <summary> /// 单独装填的子弹时可以立即射击, 必须要将 'AloneReload' 属性设置为 true /// </summary> [JsonInclude] public bool AloneReloadCanShoot; /// <summary> /// 是否为松发开火, 也就是松开扳机才开火, 若要启用该属性, 必须将 'ContinuousShoot' 设置为 false /// </summary> [JsonInclude] public bool LooseShoot; /// <summary> /// 最少需要蓄力多久才能开火, 必须将 'LooseShoot' 设置为 true /// </summary> [JsonInclude] public float MinChargeTime; /// <summary> /// 单次射击后是否需要手动上膛动作, 必须将 'ContinuousShoot' 设置为 false /// </summary> [JsonInclude] public bool ManualBeLoaded; /// <summary> /// 手动上膛模式下, 单次射击后是否自动执行上膛操作, 必须将 'ManualBeLoaded' 设置为 true /// </summary> [JsonInclude] public bool AutoManualBeLoaded; /// <summary> /// 上膛时间, 如果时间为0, 则不会播放上膛动画和音效, 可以视为没有上膛动作, 必须将 'ManualBeLoaded' 设置为 true /// </summary> [JsonInclude] public float BeLoadedTime; /// <summary> /// 连续发射次数区间, 仅当 'ContinuousShoot' 为 false 时生效 <br/> /// 格式为[value]或者[min,max] /// </summary> [JsonInclude] public int[] ContinuousCountRange; /// <summary> /// 按下一次扳机后需要多长时间才能再次感应按下 /// </summary> [JsonInclude] public float TriggerInterval; /// <summary> /// 初始射速, 初始每分钟能开火次数 /// </summary> [JsonInclude] public float StartFiringSpeed; /// <summary> /// 最终射速, 最终每分钟能开火次数, 仅当 'ContinuousShoot' 为 true 时生效 /// </summary> [JsonInclude] public float FinalFiringSpeed; /// <summary> /// 按下扳机并开火后射速每秒增加量 /// </summary> [JsonInclude] public float FiringSpeedAddSpeed; /// <summary> /// 松开扳机后射速消散速率 /// </summary> [JsonInclude] public float FiringSpeedBackSpeed; /// <summary> /// 松开扳机后射速消散开始时间, 单位: 秒 /// </summary> [JsonInclude] public float FiringSpeedBackTime; /// <summary> /// 单次开火发射子弹数量区间 <br/> /// 格式为[value]或者[min,max] /// </summary> [JsonInclude] public int[] FireBulletCountRange; /// <summary> /// 从按下扳机到发射第一发子弹的延时时, 如果中途松开扳机, 那么延时时间会重新计算, 必须将 'LooseShoot' 设置为 false /// </summary> [JsonInclude] public float DelayedTime; /// <summary> /// 初始散射半径 /// </summary> [JsonInclude] public float StartScatteringRange; /// <summary> /// 最终散射半径 /// </summary> [JsonInclude] public float FinalScatteringRange; /// <summary> /// 每次发射后散射增加值 /// </summary> [JsonInclude] public float ScatteringRangeAddValue; /// <summary> /// 散射值销退速率 /// </summary> [JsonInclude] public float ScatteringRangeBackSpeed; /// <summary> /// 开始销退散射值的延时时间 /// </summary> [JsonInclude] public float ScatteringRangeBackDelayTime; /// <summary> /// 开火后相机抖动强度,只有玩家拾起武器开火才会抖动相机 /// </summary> [JsonInclude] public float CameraShake; /// <summary> /// 后坐力区间 (仅用于开火后武器身抖动) <br/> /// 格式为[value]或者[min,max] /// </summary> [JsonInclude] public float[] BacklashRange; /// <summary> /// 后坐力偏移回归回归速度 /// </summary> [JsonInclude] public float BacklashRegressionSpeed; /// <summary> /// 开火后武器口上抬角度 /// </summary> [JsonInclude] public float UpliftAngle; /// <summary> /// 武器默认上抬角度 /// </summary> [JsonInclude] public float DefaultAngle; /// <summary> /// 开火后武器口角度恢复速度倍数 /// </summary> [JsonInclude] public float UpliftAngleRestore; /// <summary> /// 开火特效, 该特效脚本必须实现IEffect接口 /// </summary> [JsonInclude] public string FireEffect; /// <summary> /// 默认射出的子弹 /// </summary> public BulletBase Bullet; /// <summary> /// 默认抛出的弹壳 /// </summary> public ActivityBase Shell; /// <summary> /// 是否在换弹时才抛弹壳 /// </summary> [JsonInclude] public bool ReloadThrowShell; /// <summary> /// 抛壳数量 /// </summary> [JsonInclude] public int ThrowShellCount; /// <summary> /// 投抛弹壳的延时时间 /// </summary> [JsonInclude] public float ThrowShellDelayTime; /// <summary> /// 是否可以触发近战攻击 /// </summary> [JsonInclude] public bool CanMeleeAttack; /// <summary> /// 近战攻击伤害区间 <br/> /// 格式为格式为[value]或者[min,max] /// </summary> [JsonInclude] public int[] MeleeAttackHarmRange; /// <summary> /// 近战攻击造成伤害后击退值区间 <br/> /// 格式为[value]或者[min,max] /// </summary> [JsonInclude] public float[] MeleeAttackRepelRange; /// <summary> /// 射击音效 /// </summary> public Sound ShootSound; /// <summary> /// 开始换弹音效 /// </summary> public Sound BeginReloadSound; /// <summary> /// 开始换弹音效延时时间 /// </summary> [JsonInclude] public float BeginReloadSoundDelayTime; /// <summary> /// 换弹音效,单独装弹时也会出发 /// </summary> public Sound ReloadSound; /// <summary> /// 换弹音效延时时间 /// </summary> [JsonInclude] public float ReloadSoundDelayTime; /// <summary> /// 换弹结束音效 /// </summary> public Sound ReloadFinishSound; /// <summary> /// 换弹结束音效在换弹结束前多久开始 <br/> /// 注意: 如果'AloneReload'为true, 那么当前属性的值应该小于'AloneReloadFinishIntervalTime' /// </summary> [JsonInclude] public float ReloadFinishSoundAdvanceTime; /// <summary> /// 上膛音效 /// </summary> public Sound BeLoadedSound; /// <summary> /// 上膛音效延时时间, 这个时间应该小于'BeLoadedTime' /// </summary> [JsonInclude] public float BeLoadedSoundDelayTime; /// <summary> /// 其他音效 /// </summary> public Dictionary<string, Sound> OtherSoundMap; /// <summary> /// Ai使用该武器开火时的一些额外配置属性 <br/> /// 玩家使用的武器不需要填写该字段 /// </summary> public AiAttackAttr AiAttackAttr; /// <summary> /// 返回浅拷贝出的新对象 /// </summary> public WeaponBase Clone() { var inst = new WeaponBase(); inst.Id = Id; inst.Remark = Remark; inst.Activity = Activity; inst.Weight = Weight; inst.WeightType = WeightType; inst.IsMelee = IsMelee; inst.ContinuousShoot = ContinuousShoot; inst.AmmoCapacity = AmmoCapacity; inst.MaxAmmoCapacity = MaxAmmoCapacity; inst.StandbyAmmoCapacity = StandbyAmmoCapacity; inst.ShowReloadBar = ShowReloadBar; inst.AutoReload = AutoReload; inst.ReloadTime = ReloadTime; inst.AloneReload = AloneReload; inst.AloneReloadCount = AloneReloadCount; inst.AloneReloadBeginIntervalTime = AloneReloadBeginIntervalTime; inst.AloneReloadFinishIntervalTime = AloneReloadFinishIntervalTime; inst.AloneReloadCanShoot = AloneReloadCanShoot; inst.LooseShoot = LooseShoot; inst.MinChargeTime = MinChargeTime; inst.ManualBeLoaded = ManualBeLoaded; inst.AutoManualBeLoaded = AutoManualBeLoaded; inst.BeLoadedTime = BeLoadedTime; inst.ContinuousCountRange = ContinuousCountRange; inst.TriggerInterval = TriggerInterval; inst.StartFiringSpeed = StartFiringSpeed; inst.FinalFiringSpeed = FinalFiringSpeed; inst.FiringSpeedAddSpeed = FiringSpeedAddSpeed; inst.FiringSpeedBackSpeed = FiringSpeedBackSpeed; inst.FiringSpeedBackTime = FiringSpeedBackTime; inst.FireBulletCountRange = FireBulletCountRange; inst.DelayedTime = DelayedTime; inst.StartScatteringRange = StartScatteringRange; inst.FinalScatteringRange = FinalScatteringRange; inst.ScatteringRangeAddValue = ScatteringRangeAddValue; inst.ScatteringRangeBackSpeed = ScatteringRangeBackSpeed; inst.ScatteringRangeBackDelayTime = ScatteringRangeBackDelayTime; inst.CameraShake = CameraShake; inst.BacklashRange = BacklashRange; inst.BacklashRegressionSpeed = BacklashRegressionSpeed; inst.UpliftAngle = UpliftAngle; inst.DefaultAngle = DefaultAngle; inst.UpliftAngleRestore = UpliftAngleRestore; inst.FireEffect = FireEffect; inst.Bullet = Bullet; inst.Shell = Shell; inst.ReloadThrowShell = ReloadThrowShell; inst.ThrowShellCount = ThrowShellCount; inst.ThrowShellDelayTime = ThrowShellDelayTime; inst.CanMeleeAttack = CanMeleeAttack; inst.MeleeAttackHarmRange = MeleeAttackHarmRange; inst.MeleeAttackRepelRange = MeleeAttackRepelRange; inst.ShootSound = ShootSound; inst.BeginReloadSound = BeginReloadSound; inst.BeginReloadSoundDelayTime = BeginReloadSoundDelayTime; inst.ReloadSound = ReloadSound; inst.ReloadSoundDelayTime = ReloadSoundDelayTime; inst.ReloadFinishSound = ReloadFinishSound; inst.ReloadFinishSoundAdvanceTime = ReloadFinishSoundAdvanceTime; inst.BeLoadedSound = BeLoadedSound; inst.BeLoadedSoundDelayTime = BeLoadedSoundDelayTime; inst.OtherSoundMap = OtherSoundMap; inst.AiAttackAttr = AiAttackAttr; return inst; } } private class Ref_WeaponBase : WeaponBase { [JsonInclude] public string __Activity; [JsonInclude] public string __Bullet; [JsonInclude] public string __Shell; [JsonInclude] public string __ShootSound; [JsonInclude] public string __BeginReloadSound; [JsonInclude] public string __ReloadSound; [JsonInclude] public string __ReloadFinishSound; [JsonInclude] public string __BeLoadedSound; [JsonInclude] public Dictionary<string, string> __OtherSoundMap; [JsonInclude] public string __AiAttackAttr; } }