Example #1
0
        internal void UnlockTechGroupForAllPlayers(TechGroup techGroup)
        {
            if (UnlockedTechs.Contains(techGroup))
            {
                return; // Already unlocked
            }

            HashSet <MyDefinitionId> technologies;

            if (!techsForGroup.TryGetValue(techGroup, out technologies))
            {
                ModLog.Error("No technologies for group: " + techGroup);
                return;
            }

            var players = new List <IMyPlayer>();

            MyAPIGateway.Players.GetPlayers(players);
            foreach (var player in players)
            {
                foreach (var technology in technologies)
                {
                    MyVisualScriptLogicProvider.PlayerResearchUnlock(player.IdentityId, technology);
                }
            }
            UnlockedTechs.Add(techGroup);
            audioSystem.PlayAudio(GetAudioClipForTechGroup(techGroup));
        }
        public void UnlockTechsSilently(long playerId, HashSet <TechGroup> techGroups)
        {
            foreach (var techGroup in techGroups)
            {
                var technologies = techsForGroup[techGroup];
                if (technologies == null)
                {
                    ModLog.Error("No technologies for group: " + techGroup);
                    return;
                }

                foreach (var technology in technologies)
                {
                    if (bNewResearch)
                    {
                        // unknown: does this work for ALL players?
                        MyVisualScriptLogicProvider.ResearchListRemoveItem(technology); // SE 1.189
                    }
                    else
                    {
                        MyVisualScriptLogicProvider.PlayerResearchUnlock(playerId, technology);
                    }
                }
            }
        }
Example #3
0
 void UnlockAllByID(long player)
 {
     if (Initialized)
     {
         foreach (var cube in MyDefinitionManager.Static.GetAllDefinitions())
         {
             if (cube != null && cube.Public)
             {
                 MyVisualScriptLogicProvider.PlayerResearchUnlock(player, cube.Id);
             }
         }
     }
 }
Example #4
0
 public void UnlockRefresh(MyDefinitionId id)
 {
     if (MyDefinitionManager.Static.GetDefinitionAny(id) is MyCubeBlockDefinition)
     {
         if (HasUnlocked(id))
         {
             MyVisualScriptLogicProvider.PlayerResearchUnlock(Player.IdentityId, id);
         }
         else
         {
             MyVisualScriptLogicProvider.PlayerResearchLock(Player.IdentityId, id);
         }
     }
 }
Example #5
0
        public void UnlockTechForJoiningPlayer(long playerId)
        {
            foreach (var techGroup in UnlockedTechs)
            {
                var technologies = techsForGroup[techGroup];
                if (technologies == null)
                {
                    ModLog.Error("No technologies for group: " + techGroup);
                    return;
                }

                foreach (var technology in technologies)
                {
                    MyVisualScriptLogicProvider.PlayerResearchUnlock(playerId, technology);
                }
            }
        }
Example #6
0
        public void UnlockTechsSilently(long playerId, HashSet <TechGroup> techGroups)
        {
            foreach (var techGroup in techGroups)
            {
                var technologies = techsForGroup[techGroup];
                if (technologies == null)
                {
                    ModLog.Error("No technologies for group: " + techGroup);
                    return;
                }

                foreach (var technology in technologies)
                {
                    MyVisualScriptLogicProvider.PlayerResearchUnlock(playerId, technology);
                }
            }
        }
        internal void UnlockTechGroupForAllPlayers(TechGroup techGroup)
        {
            if (UnlockedTechs.Contains(techGroup))
            {
//                ModLog.Info("UTGFAP():" + UnlockedTechs.Count.ToString() + " unlocked groups. Already contains TechGroup:"+techGroup.ToString());
                return; // Already unlocked
            }

            HashSet <MyDefinitionId> technologies;

            if (!techsForGroup.TryGetValue(techGroup, out technologies))
            {
                ModLog.Error("No technologies for group: " + techGroup);
                return;
            }
            var players = new List <IMyPlayer>();

            MyAPIGateway.Players.GetPlayers(players);
            foreach (var player in players)
            {
                foreach (var technology in technologies)
                {
                    if (bNewResearch)
                    {
                        MyVisualScriptLogicProvider.ResearchListRemoveItem(technology); // SE 1.189
                    }
                    else
                    {
//                        ModLog.Info("Old research Method: Unlock for player:" + player.IdentityId.ToString() + " tech=" + technology.ToString());
                        MyVisualScriptLogicProvider.PlayerResearchUnlock(player.IdentityId, technology);
                    }
                }
            }
            UnlockedTechs.Add(techGroup);
            audioSystem.PlayAudio(GetAudioClipForTechGroup(techGroup));
        }
Example #8
0
        void UnlockById(MyDefinitionId blockId, long playerID, bool force = false)
        {
            var   ids = new HashSet <MyDefinitionId>();
            ulong steamId;
            bool  NextGenBlock = false;

            try
            {
                PlayerData playerData = players[playerID];
                if (!force && playerData.LearnedBocks.Contains(blockId))
                {
                    if (settings.EnhancedProgression)
                    {
                        /* Get the Next Block Tech */
                        BlockInformation BI = progress.GetNextBlock(blockId, playerData.LearnedBocks);
                        if (BI != null)
                        {
                            var cbtest = MyDefinitionManager.Static.GetCubeBlockDefinition(blockId);
                            MyLog.Default.WriteLine($"{cbtest.DisplayNameText} is Generated? {cbtest.IsGeneratedBlock}");
                            blockId      = BI.BlockId;
                            NextGenBlock = true;
                        }
                        else
                        {
                            return;
                        }
                    }
                    else
                    {
                        return;
                    }
                }

                if (!settings.InstantLearn || NextGenBlock)
                {
                    //double blockLuck = progress.getLuckValueByBlockId(blockId);
                    double playerluck = playerData.Luck;
                    //double settingsdifficulty = settings.LearnDifficulty; //1 = 20
                    //double RandomRoll = new Rnd(1,100).Next();
                    //double RandomRoll = 100;
                    double goal = settings.LearnDifficulty;
                    //double roll = RandomRoll*((playerluck*1.5));
                    //double goal = (100*(blockLuck)) * (settings.LearnDifficulty * 10);

                    //MyLog.Default.WriteLine($"Roll {roll} RandomRoll {RandomRoll} playerLuck {playerluck} Goal {goal}");

                    if (goal > playerluck)
                    {
                        //MyLog.Default.WriteLine($"{playerID} Luck Failed: {roll}");
                        if (userIds.TryGetValue(playerID, out steamId))
                        {
                            SendUnlockNotification(blockId, "White", $"Your Knowledge on { progress.GetbyBlockId(blockId).Type }s has increased. {playerluck} of {goal}", steamId);
                        }
                        playerData.Luck++;
                        return;
                    }
                    playerData.Luck = 1;
                    //MyLog.Default.WriteLine($"{playerID} Luck Roll Won: {roll}");
                }

                ids.Add(blockId);
                var cb = MyDefinitionManager.Static.GetCubeBlockDefinition(blockId);
                if (!cb.Public)
                {
                    return;
                }

                /* Start unlocking Blocks */
                var dg = MyDefinitionManager.Static.TryGetDefinitionGroup(cb.BlockPairName);
                if (dg != null)
                {
                    if (dg.Large != null)
                    {
                        ids.Add(dg.Large.Id);
                    }
                    if (dg.Small != null)
                    {
                        ids.Add(dg.Small.Id);
                    }
                }

                if (!cb.GuiVisible || (cb.BlockStages != null && cb.BlockStages.Length > 0))
                {
                    foreach (var bid in ids.ToList())
                    {
                        HashSet <MyDefinitionId> blocks;
                        if (variantGroups.TryGetValue(bid, out blocks))
                        {
                            if (blocks != null)
                            {
                                foreach (var block in blocks)
                                {
                                    ids.Add(block);
                                }
                            }
                        }
                    }
                }
                if (false && settings.EnhancedProgression)
                {
                    //Remove all blocks that the player already has
                    ids.UnionWith(progress.GetBlocksUnderBlockId(blockId));
                    //ids = new HashSet<MyDefinitionId>(ids.Except(playerData.LearnedBocks).ToList());
                }
                foreach (var id in ids)
                {
                    playerData.LearnedBocks.Add(id);
                    MyVisualScriptLogicProvider.PlayerResearchUnlock(playerID, id);
                }
                /* Send Message to Player */
                try
                {
                    if (!force && userIds.TryGetValue(playerID, out steamId))
                    {
                        var lockedBlock = new SerializableDefinitionId();
                        if (settings.AlwaysLocked.TryGetValue(blockId, out lockedBlock))
                        {
                            MyLog.Default.WriteLine($"Learning Denied: {lockedBlock.ToString()}");
                            SendUnlockNotification(blockId, "Red", $"{MyDefinitionManager.Static.GetCubeBlockDefinition(blockId).DisplayNameText} technology is out of your reach.", steamId);
                            return;
                        }
                        else
                        {
                            if (progress.GetNextBlock(blockId, playerData.LearnedBocks) == null)
                            {
                                SendUnlockNotification(blockId, "Blue", $"You can now build {MyDefinitionManager.Static.GetCubeBlockDefinition(blockId).DisplayNameText}. You've mastered { progress.GetbyBlockId(blockId).Type }!", steamId);
                            }
                            else
                            {
                                SendUnlockNotification(blockId, "White", $"You can now build {MyDefinitionManager.Static.GetCubeBlockDefinition(blockId).DisplayNameText}.", steamId);
                                //SendUnlockNotification(blockId, true, $"You can now build {MyDefinitionManager.Static.GetCubeBlockDefinition(blockId).DisplayNameText}. {progress.CurrentLearningCountByType(blockId, playerData.LearnedBocks)} out of {progress.GetBlockTechTreeCount(blockId)}", steamId);
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    MyLog.Default.WriteLine($"ERROR Sending Unlock notification: {e.Message}");
                    MyLog.Default.WriteLine($"ERROR Sending Unlock notification: {e.StackTrace}");
                    MyLog.Default.Flush();
                }
            }
            catch (Exception e)
            {
                MyLog.Default.WriteLine($"ERROR: {e.Message}");
                MyLog.Default.WriteLine($"ERROR: {e.StackTrace}");
                MyLog.Default.Flush();
            }
        }