-
Notifications
You must be signed in to change notification settings - Fork 4
cellCall(服务端报参数错误)(exposed缺少一个参数)?
ilvxna edited this page Aug 7, 2018
·
6 revisions
问:
def文件中定义了这么一个函数(CellMethods)
<requestHandsUp>
<Exposed>
</Exposed>
<Arg>ENTITY_ID</Arg>
<Arg>BOOL</Arg>
</requestHandsUp>
python脚本这么实现:
def requestHandsUp(self, desEntityId, isValue):
_pitboss = KBEngine.entities.get(desEntityId)
if (isinstance(_pitboss, PitBoss)):
_pitboss.requestHandsUp(self.id, isValue)
else:
pass
pass
客户端这么调用:
public void requestHandsUp(Int32 pitbossId, bool isValue)
{
cellCall ("requestHandsUp", new object[]{pitbossId, isValue});
}
结果出现了这么个错误,为什么啊?
S_ERR cellapp01 24906 8001 [2015-04-13 15:37:39 618] - TypeError: requestHandsUp() takes 3 positional arguments but 4 were given
答: 这里有一个潜规则, 在cellapp上所有的exposed接口, 第一个参数是调用者的ID, 因为在客户端可以直接调用某个NPC的某个暴露的方法, 那么在NPC那个方法的第一个参数ID就是你这个玩家, 可以用此ID判断调用者合法性。
你这个方法在def中给定了2个参数, 那么在脚本中应该是:
def requestHandsUp(self, callerID, desEntityId, isValue):
你客户端调用是正确的, 只是服务端少了一个潜规则参数。
所有exposed的cell方法引擎会自动加个参数代表调用者的id。 你在客户端可以调用其他实体的暴露方法,这个参数可以验证身份。