SDL中文论坛

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

[MOD] 玩家环境变量:player

[复制链接]

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
跳转到指定楼层
楼主
发表于 2020-11-29 11:12:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
玩家环境变量存储玩家相关设置。编写mod过程中可以用这些变量来得到玩家设置的相关信息。

变量内容
hero:十进制数值。选择的武将编号。
shroud:yes/no。是否使能战争黑幕。
fog:yes/no。是否使能战争迷雾。
navigation:十进制数值。玩家势力的航海文明值。
candidate_cards:以逗号分隔的范围。候选卡牌。范围指形式:“0-2”,3,“7-9”。
holded_cards:以逗号分隔的数字。拥有卡牌。

变量来源
hero:<data>/campaigns/<campaign>/_main.cfg中的[player]块中。
shroud:“玩家选择”对括框中“战争黑幕”选择框中值。
fog:“玩家选择”对括框中“战争迷雾”选择框中值。
navigation:第一关卡一由关卡剧本设置,下一关卡则来自上一关卡结束时human玩家的navigation。
candidate_cards:“玩家选择”对括框中选择了的卡牌类型。
holded_cards:第一关卡一般是空,下一关卡自上一关卡结束时human玩家拥用的卡牌。

mod中如何使用
hero、shroud、fog、navigation、candidate_cards和holded_cards都被归属到player这个干变量。它们以player.hero这种方式被使用。

变量可以用在两种场合,1)[if]下[variable]块中的name值;2)[side]块下shroud、fog、navigation值。
[if]下[variable]块中name值
play.hero形式。例如:
  1. [variable]
  2.         name=player.hero
  3.         equals=4
  4. [/variable]
复制代码
[side]块下shroud、fog、navigation值
需要前缀$,以$play.hero形式。例如:
  1. [side]
  2.         ...
  3.         shroud=$player.shroud
  4.         ...
  5. [/side]
复制代码
回复

使用道具 举报

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
沙发
 楼主| 发表于 2020-11-29 11:13:03 | 只看该作者

C/C++编程FAQ

A:player变量存储格式?
Q:player变量存储在game_state的variables块中。以下是一个例子。

  • 当前variables块中只一个[player]块。属性则可能有多个,像x1、x2、y1、y2、side_number、turn_number、damage_inflicated,当时触发什么时件会影响这些值。[player]块中内容和那些属性值无关。
  • [player]块中属性就是编写mod时可用的、以类似player.hero格式来引用的那些个属性。
  • [armory]不用于编写mod,C/C++程序用它把本地玩家部队、武将从N关卡迁移到N+1关卡。N关卡的play_controller::~play_controller形成该块(同时会更新navigation、holded_cards),N+1关卡的play_controller::init执行到gamestate_.build_team、build时使把[armory]中部队、武将加入到本地玩家势力,加入完后会从variables删除[armory]块。
  • [armory]下存在一个heros属性和M个[unit]块。heros属性是以逗号分隔的数字,数字来自武将编号,表示下一回合时要加入的空闲武将。M个[unit]块表示M只部队,一只[unit]表示一只部队,[unit]格式和存档中的[unit]一致。
  • N+1关卡[scenario]如果存在[camp]块,会促使弹出个重编框,重编可能会导致[armory]有变化。为支持回放,此个变化同时要更新到game_state的starting_pos的[variables]块。(??要是build_team时不删除[armory],或许不用更新starting_pos??)

A:到下一场景,player变量是如何迁移的?
Q:playcampaing.cpp中的play_game(...)执行迁移。
  • 把game_state迁移到下一场景时,game_state中的[variable]“未”变化(有变化的是在play_controller::~play_controller),因而player块也就未变。
  • 为了在scenariostart_savegame中/回放时有效环境变量,需要把这个player块(程序其实是整个[variables]块)导入初始场景(game_state::starting_pos)中。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-2 03:59 , Processed in 0.047698 second(s), 22 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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