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); } } } }
void UnlockAllByID(long player) { if (Initialized) { foreach (var cube in MyDefinitionManager.Static.GetAllDefinitions()) { if (cube != null && cube.Public) { MyVisualScriptLogicProvider.PlayerResearchUnlock(player, cube.Id); } } } }
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); } } }
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); } } }
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)); }
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(); } }