Народ, подскажите, пожалуйста, куда копать...Идей нет, что еще проверить. Пишу стратегию на C#. У меня есть словарь, в котором хранятся клетки с ресурсами, ключ-это их Id. Я в функции поиска ближайшего ресурса прохожу этот словарь через foreach, и возвращаю значение ключа наиболее подходящего элемента. После этого я пытаюсь создать MoveAction, в котором координата той клетки с ресурсами, и у меня при верификации стратегии на сервере падает с исключением KeyNotFoundException на этой строчке. В локальном раннере всё работает.
Псевдокод:
int? GetClosestResourceId(Vec2Int builderPosition)
{
int minSquaredDistance = -1;
int? answer = null;
foreach (var cachedEntity in cachedEntities)
{
...
answer = cachedEntity.Key;
minSquaredDistance = squaredDistance;
...
}
return answer;
}
void ProcessWorker()
{
...
int? resourceToMine = GetClosestResourceId(position);
if (resourceToMine.HasValue)
{
MoveAction move = new MoveAction(cachedEntities[resourceToMine.Value].Position, true, false); /// < Вот тут при верификации исключение System.Collections.Generic.KeyNotFoundException: The given key '5565' was not present in the dictionary
AttackAction attack = new AttackAction(resourceToMine.Value, null);
actionsDictionary.Add(unit.entityId, new EntityAction()
{
MoveAction = move,
AttackAction = attack
});
unit.currentAction = CurrentAction.Mining;
}
}
Могу предположить, что словарик у тебя не чистится, и ресурс закончился (враг собрал), стратегии он не передался (т.к. его нет уже), а ты пытаешь его id (у тебя есть знания о нём с прошлых ходов) указать как цель.