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("");





|