SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4683|回复: 1
打印 上一主题 下一主题

[network] 设置多人对战势力时相关变量

[复制链接]

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
跳转到指定楼层
楼主
发表于 2020-9-4 08:45:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注:对加入玩家来说,它会把AI玩家的控制模式认为是CNTR_NETWORK。

  • std::vector<connected_user> users_:存储账号玩家信息。变量类型见之下的“struct connected_user”。
  • std::vector<std::pair<std::string, int> > player_types_:存储普通版的玩家类型。
  • std::vector<std::pair<std::string, int> > player_xtypes_:存储增强版的玩家类型。
  • std::string side::player_id_:玩家标识。它对应“创建势力”窗口中玩家栏显示的内容。和那里不同的是,在控制模式小于CNTR_LAST时player_id_值是空

struct connected_user
name:账号。实例:ancientcc、laji431。
controller:控制模式。实例:CNTR_LOCAL、CNTR_NETWORK。值不会超过CNTR_LAST。
connection:连接套接字。实例:2、3、4。
group:团队。它不是引用是克隆出的对象。
side:分配到的势力索引。实例:0、1、2、3

users_何时增加单元
1、初始增加本地玩家
2、收到[side]块
3、收到[observer]块

player_types_、player_xtypes_中的std::vector<std::pair<std::string, int> >
  • first:玩家标识串。网络玩家、本地玩家、电脑玩家、空位、ancientcc
  • second:类型索引。CNTR_NETWORK(0)、CNTR_LOCAL(1)、CNTR_COMPUTER(2)、CNTR_EMPTY(3)。player_types_中的不会超过CNTR_LAST;player_xtypes_中的和player_types_一致的部分不会超过player_xtypes_,多出的则一定超过CNTR_LAST。

增强版和普通版区别:增强版增加了本地、网络玩家映射。在随机地图时,两个变量是同一内容。网络对战时,因为肯定存在本地玩家,增强版的尺寸至少要比普通版多1,有网络玩家加入时再增加的则视网络玩家数量。
  1. 增强版尺寸 = 普通版尺寸 + users尺寸
复制代码

回复

使用道具 举报

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
沙发
 楼主| 发表于 2020-9-4 08:46:18 | 只看该作者

创建者需发向加入者的数据

在启动游戏前,创建者需要把关卡数据发向加入玩家。

数据位置描述
random_seed[scenario]块下伪随机种子(注1)


  • 关卡中有些单位是各方独立(即不通过一方的恢复包)产生,像一开始时的城市、城外部队。由于是独立生成,必须保证它们使用相同的伪随机种子,否则生成的像特质就可能出现不同步。由于不是恢复包产生,构造这些单位时需使用game_state中的随机数产生器,具体参考game_state::build_team(const config& side_cfg, ...)。为杜绝意外,level_to_gamestate要求level必须设置“random_seed”,即使单机可不需要这字段,但为防止联机时漏掉赋值,强制要求单机也给出一个值。

    “random_calls”是个和“random_seed”关联的字段。在新战役中,“random_calls”是0,因而创建者可不发送此字段,“存档”时则必须发送它。




回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-1 22:46 , Processed in 0.053999 second(s), 19 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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