private static void TryRecoverUnit(UnitRuntimeInfo info)
        {
            UnitInfo baseUnitInfo = info.baseUnitInfo;
            Units    units        = MapManager.Instance.GetUnit(baseUnitInfo.unitId);

            try
            {
                UnitType unitType = baseUnitInfo.unitType;
                if (unitType != UnitType.Hero)
                {
                    if (unitType != UnitType.Monster)
                    {
                        if (unitType != UnitType.Tower && unitType != UnitType.Home)
                        {
                            if (unitType == UnitType.MapItem)
                            {
                                if (!units)
                                {
                                    PvpProtocolTools.CreateMapItem(info, UnitControlType.None);
                                }
                                goto IL_179;
                            }
                            if (unitType != UnitType.Soldier)
                            {
                                if (unitType == UnitType.FenShenHero)
                                {
                                    if (!units)
                                    {
                                        units = PvpProtocolTools.CreateHeroByUnitInfo(info.baseUnitInfo);
                                    }
                                    PvpProtocolTools.SetUnitState(units, info);
                                    goto IL_179;
                                }
                                if (unitType != UnitType.EyeUnit && unitType != UnitType.SummonMonster && unitType != UnitType.Pet && unitType != UnitType.LabisiUnit)
                                {
                                    goto IL_179;
                                }
                            }
                        }
                        else
                        {
                            units = MapManager.Instance.GetUnit(baseUnitInfo.unitId);
                            if (!units)
                            {
                                ClientLogger.Error("TryCreateUnit: tower not found - " + StringUtils.DumpObject(baseUnitInfo));
                                return;
                            }
                            PvpProtocolTools.SetUnitState(units, info);
                            goto IL_179;
                        }
                    }
                    if (!units)
                    {
                        units = PvpProtocolTools.CreateMonsterByUnitInfo(info.baseUnitInfo);
                    }
                    PvpProtocolTools.SetUnitState(units, info);
                }
                else
                {
                    if (!units)
                    {
                        units = MapManager.Instance.TryFetchRecycledUnit(baseUnitInfo.unitId);
                        if (!units)
                        {
                            ClientLogger.Error("TryCreateUnit: hero not found - " + StringUtils.DumpObject(baseUnitInfo));
                            return;
                        }
                    }
                    PvpProtocolTools.SetUnitState(units, info);
                }
IL_179:
                if (units)
                {
                    units.UpdateVisible();
                    units.RefreshSyncState();
                }
            }
            catch (Exception e)
            {
                ClientLogger.LogException(e);
            }
        }