【发布时间】:2020-08-17 12:30:55
【问题描述】:
我正在编辑视频游戏的一些文件,并且有一个名为battle_check_target 的函数可以确定玩家可以攻击的对象。
battle_check_target
//which has these definitions set for it
BCT_NOONE = 0x000000, ///< No one
BCT_SELF = 0x010000, ///< Self
BCT_ENEMY = 0x020000, ///< Enemy
BCT_PARTY = 0x040000, ///< Party members
BCT_GUILDALLY = 0x080000, ///< Only allies, NOT guildmates
BCT_NEUTRAL = 0x100000, ///< Neutral target
BCT_SAMEGUILD = 0x200000, ///< Guildmates, No Guild Allies
BCT_ALL = 0x3F0000, ///< All targets
BCT_WOS = 0x400000, ///< Except self (currently used for skipping if src == bl in skill_area_sub)
BCT_GUILD = BCT_SAMEGUILD|BCT_GUILDALLY, ///< Guild AND Allies (BCT_SAMEGUILD|BCT_GUILDALLY)
BCT_NOGUILD = BCT_ALL&~BCT_GUILD, ///< Except guildmates
BCT_NOPARTY = BCT_ALL&~BCT_PARTY, ///< Except party members
BCT_NOENEMY = BCT_ALL&~BCT_ENEMY, ///< Except enemy
BCT_ALLY = BCT_PARTY|BCT_GUILD,
BCT_FRIEND = BCT_NOENEMY,
BCT_CLAN = BCT_SAMECLAN|BCT_CLANALLY ///< **What I added**
玩家、敌人、你的公会、你的队伍等
游戏中还有一个称为氏族的系统,其运作方式类似于公会和派对。氏族有氏族成员和氏族盟友,就像公会一样。他们不能互相攻击,这就是为什么我想像这样添加氏族定义:
BCT_SAMECLAN = 0x300000, ///< Clanmates
BCT_CLANALLY = 0x280000, ///< Clan allies
然后将它们放在确定谁可以攻击谁的条件语句中:
if( !state ) //If not an enemy, nor a guild, nor party, nor yourself, it's neutral.
state = BCT_NEUTRAL;
//Alliance state takes precedence over enemy one.
else if( state&BCT_ENEMY && strip_enemy && state&(BCT_SELF|BCT_PARTY|BCT_GUILD|**BCT_CLAN**) )
state&=~BCT_ENEMY;
return (flag&state)?1:-1;
}
///> I also added the **BCT_CLAN**
我相信这些值,例如 0x000000,是一些 32 位类型的值,它决定了鼠标玩家的鼠标悬停在什么地方?此代码是服务器端的,因此它会向客户端发送关于如何制作鼠标光标等的响应。
我的问题是如何找出这些值是什么?它是您在 .exe 中寻找的东西吗?我检查了所有其他 .cpp 和 .hpp 文件,并且能够在任何地方找到该值。有人知道我应该去哪里看吗?
【问题讨论】:
-
“我的问题是如何找出这些值是什么?” - 你的意思是值的类型吗?我不明白你的问题是什么。
-
那些看起来像面具。如果是这种情况,你不能使用
0x300000,它会搞砸一切。 -
是的,值的类型。
-
您显示的第一个代码块似乎是一个长变量声明语句,分成几行,类型只是
battle_check_target。 0x000000 等值是 int 字面量。 -
我知道这是一个很长的镜头,但你知道我在哪里可以找到与部落有关的地方吗? "BCT_SAMEGUILD = 0x200000, ///
标签: c++ definition game-development