Skip to content

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, callerIDdesEntityId, isValue):

你客户端调用是正确的, 只是服务端少了一个潜规则参数。

所有exposed的cell方法引擎会自动加个参数代表调用者的id。 你在客户端可以调用其他实体的暴露方法,这个参数可以验证身份。

Clone this wiki locally