????????

??????????вμ???????????δ?????????????????й?????Щ?????????????????????????????????????????????????·??????????????????????????Щ???????????????????С??????????????????????м??????????????????+??????????????????????????Щ?????????д???

???????????????????????????????????а???????????

?????????о??????????“??·”??????з?????????????????????????д???????????????и?????????“??·”????Щ“??·”??????????????????????????????????Ч??????????????????????????????“??·”??????

????????????????????????????????Щ?????????????????????????????Щ??????

????????

???????潫????????????д????????????????????


bool EnemyChecker::isValidMonster(
NPCManagement::HordeIdType hrdId??
const NPCManagement::MonsterInfoSeq& mnsInfos??
NPCManagement::MonsterInfoSeq& vmnsInfos??
NPCManagement::FailedMonsterInfoSeq& ivmnsInfos)
{
bool bRet = true;
ivmnsInfos.length(mnsInfos.length());
vmnsInfos.length(mnsInfos.length());
unsigned int iip = 0; // index of invalid horde
unsigned int ivp = 0; // index of valid horde
//?????????????????
for (CORBA::ULong i = 0; i < mnsInfos.length(); ++i)
{
const NPCManagement::MonsterStatusInfoSeq& mnsStatusSeq
= mnsInfos[i].monsterInfos;
for (CORBA::ULong i = 0; i < mnsInfos.length(); ++i)
{
const NPCManagement::MonsterStatusInfoSeq& mnsStatusSeq
= mnsInfos[i].monsterInfos;
IntSet monsterIds;
for (CORBA::ULong j = 0; j < mnsStatusSeq.length(); ++j)
{
monsterIds.insert((int)mnsStatusSeq[j].monsterId);
}
if (monsterIds.empty())
{
vmnsInfos[ivp].horde = mnsInfos[i].horde;
vmnsInfos[ivp].monsterInfos.length(0);
++ivp;
continue;
}

std::map<int?? short> mnsTypes;
NPCManagement::MonsterLoader::getMonsterType(hrdId?? -1?? monsterIds?? mnsTypes);

MonsterVec invalidMnsIds;
getInvalidMnsIds(mnsStatusSeq?? mnsTypes?? invalidMnsIds);
//?????????????????????????????????
if ((monsterIds.size() != mnsTypes.size())
|| !invalidMnsIds.empty())
{
if (mnsTypes.empty())//?????Ч???????????????Ч????
{
ivmnsInfos[iip].horde = mnsInfos[i].horde;
ivmnsInfos[iip].monsters.length(mnsStatusSeq.length());
for (CORBA::ULong pos = 0; pos < mnsStatusSeq.length(); pos++)
{
ivmnsInfos[iip].monsters[pos].monsterId = mnsStatusSeq[pos].monsterId;
ivmnsInfos[iip].monsters[pos].monsterName
= mnsStatusSeq[pos].monsterName;
ivmnsInfos[iip].monsters[pos].reason =
NPC_STR2WSTR(WORLD::Message(getCvt()?? "import_invalid_monster"));
}
iip++;
}
 
else
{
MonsterVec validMonsters;
MonsterVec invalidMonsters;
validMonsters.reserve(monsterIds.size());
for (IntSet::iterator it = monsterIds.begin(); it != monsterIds.end();++it)
{
MonsterVec::iterator invalidIt
= std::find(invalidMnsIds.begin()?? invalidMnsIds.end()?? *it);
//??????д?????????????Ч
if ( invalidIt == invalidMnsIds.end()
&& mnsTypes.find(*it) != mnsTypes.end())
{
validMonsters.push_back(*it);
}
else // ????Id?????????????????????????????
{
invalidMonsters.push_back(*it);
}
}
vmnsInfos[ivp].horde = mnsInfos[i].horde;
vmnsInfos[ivp].monsterInfos.length((unsigned long)validMonsters.size());
for (unsigned int k = 0; k < validMonsters.size(); k++)
{
for (CORBA::ULong pos = 0; pos < mnsStatusSeq.length(); pos++)
{
if ((int)mnsStatusSeq[pos].monsterId == validMonsters[k])
{
vmnsInfos[ivp].monsterInfos[k] = mnsStatusSeq[pos];
break;
}
}
}
ivmnsInfos[iip].horde = mnsInfos[i].horde;
ivmnsInfos[iip].monsters.length((unsigned long)invalidMonsters.size());
for (unsigned int k = 0; k < invalidMonsters.size(); k++)
{
for (CORBA::ULong pos = 0; pos < mnsStatusSeq.length(); pos++)
{
if ((int)mnsStatusSeq[pos].monsterId == invalidMonsters[k])
{
ivmnsInfos[iip].monsters[k].monsterId = (unsignedint)invalidMonsters[k];
ivmnsInfos[iip].monsters[k].monsterName =
mnsStatusSeq[pos].monsterName;
ivmnsInfos[iip].monsters[k].reason =
NPC_STR2WSTR(WORLD::Message(getCvt()?? "import_invalid_monster"));
break;
}
}
}
ivp++;
iip++;
}
}
else//????????????£????????????????
{
vmnsInfos[ivp].horde = mnsInfos[i].horde;
vmnsInfos[ivp].monsterInfos = mnsStatusSeq;
ivp++;
}
}
ivmnsInfos.length(iip);
vmnsInfos.length(ivp);
return bRet;
}

???????????????

???????????

???????????????????????????????????????????????????????????????????????

??????????????????г???????“????”?“???”?????????????????????????????????????????

?????????????????????????????????????????“???????????”??????????????????????

?????????????????“????”??????“???”????????????????????????????{???????????У???