英雄远征Erlang源码分析(9)-战斗流程解析

本文分析了Erlang源码中的战斗流程,涉及mod_battle模块,包括战斗进程创建、出手频率检查、技能使用判断、伤害计算及防御方响应。战斗涉及到玩家与怪物或玩家之间的交互,通过ETS获取信息,进行距离、CD和技能配置检查,然后计算伤害并更新状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

和战斗相关的模块有mod_battle.erl

当玩家进程和怪物进程被创建的时候都会通过mod_battle:start_link()创建一个战斗进程。

该战斗进程的state,用于保存玩家上次出手或者使用技能的时机,用于cd的判断

-record(state, {
        last_attack_time=0,   % 上次出手时间
        last_skill_time = []  % [{技能id,上次时间}]
}).

开始战斗的时候,生成攻击方和防守方的#battle_status记录实例,战斗中的伤害通过这两个记录实例来计算

战斗存在三种情况:玩家打怪,怪打玩家,玩家打玩家

战斗的大致流程:
    攻击方指定防守方Id,指定使用的技能Id,向服务器发送攻击请求(20001,20003)
    进入攻击方的战斗进程内,通过ETS获取防守方信息,进行攻击距离,cd,技能配置等检查
    检查通过,计算双方持续效果buff,计算技能buff,计算伤害
    更新持续buff列表,给防守方玩家(怪物)进程发送消息(Hp,Mp,坐标变换),更新双方状态,回写ETS,给客户端广播战斗结果
    
代码流程:

mod_battle:battle(Pid, Data) ->        发到战斗进程处理
start([Aer,Der,SkillId,State]) ->          初始化双方#battle_stat
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值