英雄远征Erlang源码分析(7)-场景与副本

本文分析Erlang在游戏开发中的应用,详细探讨场景和副本的创建与管理。场景由mod_scene和lib_scene模块管理,初始化时加载配置信息,创建NPC、怪物和坐标。副本在玩家进入时创建,由mod_dungeon模块处理,包括玩家加入、退出、副本清除等操作。九宫格广播系统用于优化玩家状态更新的广播范围。
摘要由CSDN通过智能技术生成

场景和副本是玩家活动的区域,场景在服务器启动的时候由mod_scene进程创建,场景信息保存在?ETS_SCENE中,并一直存在;副本在玩家请求进入的时候会创建副本服务进程,当玩家离开的时候会撤销进程。

场景:

场景相关的模块为mod_scene.erl和lib_scene.erl,
场景的基本要素:怪物,NPC,mask(包含场景可移动坐标信息),它们在场景初始化的时候被加载。

场景初始化过程:
1.服务器启动的时候,通过mod_scene.erl启动一个场景管理进程,将所有场景id载入
2.使用load_scene(SceneId)初始化场景:

load_scene(SceneId) ->
    S = data_scene:get(SceneId),
    case S#ets_scene.type =:= 2 orelse S#ets_scene.type =:= 3 of
        true -> %% 副本、帮会的原始场景,就不加载
            ok;
        false ->
            load_npc(S#ets_scene.npc, SceneId),
            load_mon(S#ets_scene.mon, SceneId),
            ets:insert(?ETS_SCENE, S#ets_scene{id = SceneId, mon=[], npc=[], mask=[]}),
            case data_mask:get(SceneId) of
                "" -> ?ERR("场景的坐标MASK为空:~w", [SceneId]);
                Mask1 -> load_mask(Mask1, 0, 0, SceneId)
            end
    end.

场景加载过程:

1.获取对应的配置信息,根据配置信息创建NPC和怪物,将场景插入ETS_SCENE表中。
2.获取每一个NPC配置信息,插入ETS_NPC表中
3.获取每一个怪物配置信息,开启一个怪物进程(gen_fsm),并打开怪物的战斗进程,将怪物信息保存到ETS_MON中。
4.获取场景坐标mask配置信息并加载,将可移动的坐标写入ETS_CENEN_POSES中

场景管理进程state:

-record(state, {auto_sid, auto_eid}).

其中auto_sid负责生成并返回每一个副本的唯一Id

九宫格广播系统:
当玩家状态发生变化时,需要将玩家状态的改变广播给场景中的其他玩家,(例如玩家进入新场景,需要告知旧场景的人玩家已离

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值