| kbUnitQuery系列函数可用于地图触发程序、剧情编辑器触发程序、AI文件
 首先用kbUnitQueryCreate创建查询,然后kbUnitQueryResetResults清除之前的查询数据;kbUnitQuerySet系列函数 设定各种查询条件,但似乎必须含有kbUnitQuerySetPlayerID函数,否则查询失败。
 除此之外,必须用xsSetContextPlayer指定对象玩家,不然连queryID都不存在;还有一点xsSetContextPlayer与kbUnitQuerySetPlayerID的对象玩家必须一致(意义不明,多此一举),否则查询结果为空。
 
 以下是一个地图注入式触发程序查询例子
 aoebbs("rule _Debug71 minInterval 2 active runImmediately {");
 aoebbs("if((trTime()-cActivationTime) >= 5.00000000){");
 aoebbs("int UnitTypeID = 0;");
 aoebbs("while(kbGetUnitTypeName(UnitTypeID)!=\"unit\"){");
 aoebbs("UnitTypeID = UnitTypeID+1;");
 aoebbs("}");
 aoebbs("xsSetContextPlayer(1);");
 aoebbs("trChatSend(0,\"UnitTypeID:\"+UnitTypeID+\":\"+kbGetUnitTypeName(UnitTypeID));");
 aoebbs("int queryID = kbUnitQueryCreate(\"QueryAliveUnit\");");
 aoebbs("trChatSend(0,\"queryID:\"+queryID);");
 aoebbs("kbUnitQueryResetData(queryID);");
 aoebbs("kbUnitQueryResetResults(queryID);");
 aoebbs("kbUnitQuerySetUnitType(queryID,UnitTypeID);");
 aoebbs("kbUnitQuerySetState(queryID, cUnitStateAlive);");
 aoebbs("kbUnitQuerySetAscendingSort(queryID,true);");
 aoebbs("kbUnitQuerySetPlayerID(queryID, 1,false);");
 aoebbs("int resultCount = kbUnitQueryExecute(queryID);");
 aoebbs("resultCount = kbUnitQueryNumberResults(queryID);");
 aoebbs("trChatSend(0,\"resultCount:\"+resultCount);");
 aoebbs("int unitID = 0;");
 aoebbs("for(i=0;<resultCount) {");
 aoebbs("unitID = kbUnitQueryGetResult(queryID,i);");
 aoebbs("trChatSend(0,\"unitID[\"+unitID+\"]:\"+kbGetProtoUnitName(kbUnitGetProtoUnitID(unitID)));");
 aoebbs("}");
 aoebbs("xsDisableSelf();");
 aoebbs("}");
 aoebbs("}");
 aoebbsE("");
 
 
  
 
  
 
  
 
  
 
  
 |