internal static void SetCodeCollection( CodeDefinition codeDefinition, List <string> codeCollection, DataContainer dataContainer) { var code = string.Empty; var columnCollection = Def.ColumnDefinitionCollection .Where(o => o.TableName == dataContainer.TableName) .Where(o => !CheckExclude(codeDefinition, o)) .OrderBy(o => o[Strings.CoalesceEmpty(codeDefinition.Order, "No")]) .ToList(); var count = columnCollection.Count(); columnCollection.ForEach(columnDefinition => { dataContainer.ColumnName = columnDefinition.ColumnName; Creators.SetCodeCollection( ref code, codeCollection, codeDefinition, dataContainer, () => ReplaceCode( ref code, codeDefinition, columnDefinition, count)); dataContainer.ColumnName = string.Empty; }); }
internal static void SetCodeCollection( CodeDefinition codeDefinition, List <string> codeCollection, DataContainer dataContainer) { var code = string.Empty; dataContainer .XlsIoCollection[dataContainer.DefinitionName] .XlsSheet .Columns .ForEach(definitionColumnName => Creators.SetCodeCollection( ref code, codeCollection, codeDefinition, dataContainer, () => { var definitionColumnNameAlternate = definitionColumnName .EscapeReservedWord() .Replace("-", "_"); var definitionColumnType = dataContainer .XlsIoCollection[dataContainer.DefinitionName] .XlsSheet[0][definitionColumnName] .ToString(); ReplaceCode( ref code, codeDefinition, dataContainer.DefinitionName, definitionColumnName, definitionColumnNameAlternate, definitionColumnType); })); }
private static void ReplaceCode( ref string code, CodeDefinition codeDefinition, DataContainer dataContainer) { foreach (var placeholder in code.RegexValues(CodePatterns.ReplacementPlaceholder)) { switch (placeholder) { case "File": code = code.Replace("#File#", dataContainer.DefinitionName); break; case "file": code = code.Replace("#file#", dataContainer.DefinitionName.ToLowerFirstChar()); break; case "ColumnNames": code = code.Replace("#ColumnNames#", ColumnNames(dataContainer)); break; } } if (!codeDefinition.ReplaceOld.IsNullOrEmpty()) { code = code.Replace(codeDefinition.ReplaceOld, codeDefinition.ReplaceNew); } }
internal static void SetCodeCollection( CodeDefinition codeDefinition, List <string> codeCollection, DataContainer dataContainer) { var code = string.Empty; Def.BaseItemColumnDefinitionCollection(order: codeDefinition.Order) .Where(o => Column.CheckExclude(codeDefinition, o) == false) .Where(o => !o.EachModel) .ForEach(columnDefinition => { dataContainer.TableName = "_BaseItems"; dataContainer.ColumnName = columnDefinition.ColumnName; Creators.SetCodeCollection( ref code, codeCollection, codeDefinition, dataContainer, () => Column.ReplaceCode( ref code, codeDefinition, columnDefinition)); dataContainer.TableName = string.Empty; dataContainer.ColumnName = string.Empty; }); }
internal static void SetCodeCollection_Default( CodeDefinition codeDefinition, List <string> codeCollection, DataContainer dataContainer) { if (!Table.CheckExclude(codeDefinition, dataContainer.TableName) || dataContainer.TableName == string.Empty) { var code = Creators.Create(codeDefinition, dataContainer); if (dataContainer.ColumnName != string.Empty) { var columnDefinition = Def.ColumnDefinitionCollection.First(o => o.TableName == dataContainer.TableName && o.ColumnName == dataContainer.ColumnName); if (!CheckExclude(codeDefinition, columnDefinition)) { ReplaceCode(ref code, codeDefinition, columnDefinition); codeCollection.Add(code); } } else { codeCollection.Add(code); } } }
internal static void SetCodeCollection( CodeDefinition codeDefinition, List <string> codeCollection, DataContainer dataContainer) { var code = string.Empty; Def.ColumnDefinitionCollection .Where(o => !Column.CheckExclude(codeDefinition, o)) .Where(o => o.TableName == dataContainer.TableName) .OrderBy(o => o.No) .ForEach(columnDefinition => { dataContainer.ColumnName = columnDefinition.ColumnName; Creators.SetCodeCollection( ref code, codeCollection, codeDefinition, dataContainer, () => { var tableNameAlias = TableNameAlias(columnDefinition); ReplaceCodeOfJoin( ref code, codeDefinition, columnDefinition, tableNameAlias: TableNameAlias(columnDefinition), columnNameAlias: ColumnNameAlias(columnDefinition), joinType: JoinType(columnDefinition), joinExpression: columnDefinition.JoinExpression); }); dataContainer.ColumnName = string.Empty; }); }
internal static string FormattedCode(this CodeDefinition codeRow) { string code = string.Empty; if (codeRow.Body.IndexOf("\r\n") == -1) { code += Strings.Tab(codeRow.Indent) + codeRow.Body; } else { codeRow.Body.SplitReturn().ForEach(line => { if (line.Trim().IsNullOrEmpty()) { code += "\r\n"; } else if (line.StartsWith("<!--")) { code += line + "\r\n"; } else { code += Strings.Tab(codeRow.Indent) + line + "\r\n"; } }); } code = code.NoSpace(codeRow.NoSpace); return(code); }
internal static void SetCodeCollection( CodeDefinition codeDefinition, List <string> codeCollection, DataContainer dataContainer) { dataContainer.Type = "Table"; var code = string.Empty; var parentTableName = dataContainer.TableName; var parentModelName = dataContainer.ModelName; Def.TableNameCollection(order: codeDefinition.Order) .Where(o => !CheckExclude(codeDefinition, o)) .ForEach(tableName => { dataContainer.TableName = tableName; dataContainer.ModelName = Def.ModelNameByTableName(tableName); Creators.SetCodeCollection( ref code, codeCollection, codeDefinition, dataContainer, () => ReplaceCode(ref code, codeDefinition, dataContainer)); }); dataContainer.TableName = parentTableName; dataContainer.ModelName = parentModelName; }
private static string CodeChildCollection( string code, string placeholder, CodeDefinition codeChildDefinition, List <string> codeChildCollection) { return(code.Replace( placeholder, codeChildCollection.Join(codeChildDefinition.Separator.Replace("\\r\\n", "\r\n")))); }
internal static void SetCodeCollection_Default( CodeDefinition codeDefinition, List <string> codeCollection, DataContainer dataContainer) { if (!CheckExcludeConditionsByDefName(codeDefinition, dataContainer)) { codeCollection.Add(Creators.Create(codeDefinition, dataContainer)); } }
internal static void SetCodeCollection( ref string code, List <string> codeCollection, CodeDefinition codeDefinition, DataContainer dataContainer, Action replaceCode) { code = Create(codeDefinition, dataContainer); replaceCode(); codeCollection.Add(code); }
internal static bool CheckExclude(CodeDefinition codeDefinition, string tableName) { var columns = Def.ColumnDefinitionCollection .Where(o => o.TableName == tableName) .ToList(); if (codeDefinition.ItemOnly && !columns.Any(o => o.ItemId > 0)) { return(true); } if (codeDefinition.NotItem && columns.Any(o => o.ItemId > 0)) { return(true); } if (codeDefinition.GenericUi && !columns.Any(o => o.GenericUi)) { return(true); } if (codeDefinition.NotGenericUi && columns.Any(o => o.GenericUi)) { return(true); } if (codeDefinition.UpdateMonitor && !columns.Any(o => o.UpdateMonitor)) { return(true); } if (codeDefinition.HasIdentity && !columns.Any(o => o.Identity)) { return(true); } if (codeDefinition.HasNotIdentity && columns.Any(o => o.Identity)) { return(true); } if (codeDefinition.HasTableNameId && tableName.CsTypeIdColumn().IsNullOrEmpty()) { return(true); } if (codeDefinition.HasNotTableNameId && !tableName.CsTypeIdColumn().IsNullOrEmpty()) { return(true); } if (codeDefinition.Exclude.Split(',').Contains(tableName)) { return(true); } if (!codeDefinition.Include.IsNullOrEmpty() && !codeDefinition.Include.Split(',').Contains(tableName)) { return(true); } return(false); }
private static void ReplaceCode( ref string code, CodeDefinition codeDefinition, string formName, string modelName) { code = code.Replace("#FormName#", !formName.IsNullOrEmpty() ? formName : modelName + "Form"); if (!codeDefinition.ReplaceOld.IsNullOrEmpty()) { code = code.Replace(codeDefinition.ReplaceOld, codeDefinition.ReplaceNew); } }
private static void ReplaceCode( ref string code, CodeDefinition codeDefinition, string formName, string modelName) { code = code.Replace("#FormName#", formName != string.Empty ? formName : modelName + "Form"); if (codeDefinition.ReplaceOld != string.Empty) { code = code.Replace(codeDefinition.ReplaceOld, codeDefinition.ReplaceNew); } }
public static Guid ToGuid(this FilterChannel filterChannel, CodeDefinition codeDefinition) { // With the filter extension, channels are produced dynamically, so there // is no way to generate an ID once and store it somewhere. Therefore the // ID must be generated each time the filter code is instantiated. To avoid // having ever changing IDs, the ID is effectively a good hash code based // on the project ID and channel name. In the end this means that the // channel name determines the ID. And so renaming a channel means changing // the ID. var value = $"({codeDefinition.Id}) {filterChannel.ProjectId}/{filterChannel.ChannelName}"; var md5 = MD5.Create(); // compute hash is not thread safe! var hash = md5.ComputeHash(Encoding.UTF8.GetBytes(value)); // return(new Guid(hash)); }
private static void ReplaceCode( ref string code, CodeDefinition codeDefinition, string definitionName, string definitionColumnName, string definitionColumnNameAlternate, string definitionColumnType) { foreach (var placeholder in code.RegexValues(CodePatterns.ReplacementPlaceholder)) { switch (placeholder) { case "DefColumnName": code = code.Replace("#DefColumnName#", definitionColumnNameAlternate); break; case "DefColumnNameOriginal": code = code.Replace("#DefColumnNameOriginal#", definitionColumnName); break; case "Type": code = code.Replace("#Type#", definitionColumnType); break; case "CastType": code = code.Replace("#CastType#", definitionColumnType.CastType()); break; case "File": code = code.Replace("#File#", definitionName); break; case "file": code = code.Replace("#file#", definitionName.ToLowerFirstChar()); break; case "SetDefault": code = code.Replace("#SetDefault#", definitionColumnType .DefaultSetter()); break; } } if (codeDefinition.ReplaceOld != string.Empty) { code = code.Replace(codeDefinition.ReplaceOld, codeDefinition.ReplaceNew); } }
public static bool TryGetFilterCodeDefinition(DatasetInfo datasetInfo, out CodeDefinition codeDefinition) { codeDefinition = default; if (FilterDataReader.FilterDataReaderCache.TryGetValue(datasetInfo.Registration, out var cacheEntries)) { var cacheEntry = cacheEntries .FirstOrDefault(entry => entry.SupportedChanneIds.Contains(datasetInfo.Parent.Id)); if (cacheEntry is not null) { codeDefinition = cacheEntry.FilterCodeDefinition; return(true); } } return(false); }
internal static bool CheckExclude(CodeDefinition codeDefinition, string tableName) { if (codeDefinition.ItemOnly && !Def.ExistsTable(tableName, o => o.ItemId > 0)) { return(true); } if (codeDefinition.NotItem && Def.ExistsTable(tableName, o => o.ItemId > 0)) { return(true); } if (codeDefinition.GenericUi && !Def.ExistsTable(tableName, o => o.GenericUi)) { return(true); } if (codeDefinition.UpdateMonitor && !Def.ExistsTable(tableName, o => o.UpdateMonitor)) { return(true); } if (codeDefinition.HasIdentity && !Def.ExistsTable(tableName, o => o.Identity)) { return(true); } if (codeDefinition.HasNotIdentity && Def.ExistsTable(tableName, o => o.Identity)) { return(true); } if (codeDefinition.HasTableNameId && tableName.CsTypeIdColumn() == string.Empty) { return(true); } if (codeDefinition.HasNotTableNameId && tableName.CsTypeIdColumn() != string.Empty) { return(true); } if (codeDefinition.Exclude.Split(',').Contains(tableName)) { return(true); } if (codeDefinition.Include != string.Empty && !codeDefinition.Include.Split(',').Contains(tableName)) { return(true); } return(false); }
internal static void SetCodeCollection( CodeDefinition codeDefinition, List <string> codeCollection, DataContainer dataContainer) { var code = string.Empty; DisplayAccessor.Displays.DisplayHash .Select(o => o.Value) .ForEach(display => display.Languages .Where(element => !CheckExclude(codeDefinition, display, element)) .ForEach(element => Creators.SetCodeCollection( ref code, codeCollection, codeDefinition, dataContainer, () => ReplaceCode(ref code, display, element)))); }
private static bool CheckExclude( CodeDefinition codeDefinition, DisplayAccessor.Display display, DisplayAccessor.DisplayElement element) { if (!codeDefinition.DisplayLanguages && !element.Language.IsNullOrEmpty()) { return(true); } if (!codeDefinition.DisplayType.IsNullOrEmpty() && !codeDefinition.DisplayType.Split(',').Contains(display.Type.ToString())) { return(true); } if (codeDefinition.ClientScript && display.ClientScript != true) { return(true); } return(false); }
//unlock all 12 outfits. don't mess with toggle codes here public static void UnlockAllCodes() { List <CodeDefinition> codes = Game.Data.Codes.GetAll(); foreach (CodeDefinition code in codes) { //if (Game.Manager.Settings.unlockCodes.ContainsKey(code.codeHash)) { CodeDefinition codeDefinition = code; CodeType codeType = codeDefinition.codeType; if (codeType == CodeType.UNLOCK) { if (!Game.Persistence.playerData.unlockedCodes.Contains(codeDefinition)) { Game.Persistence.playerData.unlockedCodes.Add(codeDefinition); } } } } }
internal static void SetCodeCollection( CodeDefinition codeDefinition, List <string> codeCollection, DataContainer dataContainer) { var code = string.Empty; dataContainer.XlsIoCollection.Keys.ForEach(definitionName => { dataContainer.DefinitionName = definitionName; Creators.SetCodeCollection( ref code, codeCollection, codeDefinition, dataContainer, () => ReplaceCode( ref code, codeDefinition, dataContainer)); }); }
private static void ReplaceCode( ref string code, CodeDefinition codeDefinition, DataContainer dataContainer) { foreach (var placeholder in code.RegexValues(CodePatterns.ReplacementPlaceholder)) { switch (placeholder) { case "ModelName": code = code.Replace("#ModelName#", dataContainer.ModelName); break; case "modelName": code = code.Replace("#modelName#", dataContainer.ModelName.ToLowerFirstChar()); break; case "modelname": code = code.Replace("#modelname#", dataContainer.ModelName.ToLower()); break; case "TableName": code = code.Replace("#TableName#", dataContainer.TableName); break; case "tableName": code = code.Replace("#tableName#", dataContainer.TableName.ToLowerFirstChar()); break; case "tablename": code = code.Replace("#tablename#", dataContainer.TableName.ToLower()); break; } } if (codeDefinition.ReplaceOld != string.Empty) { code = code.Replace(codeDefinition.ReplaceOld, codeDefinition.ReplaceNew); } }
internal static void SetCodeCollection( CodeDefinition codeDefinition, List <string> codeCollection, DataContainer dataContainer) { var code = string.Empty; Def.ColumnDefinitionCollection .Where(o => o.TableName == dataContainer.TableName) .Select(o => new { ModelName = o.ModelName, FormName = o.FormName }) .Distinct() .ForEach(data => { dataContainer.FormName = data.FormName; Creators.SetCodeCollection( ref code, codeCollection, codeDefinition, dataContainer, () => ReplaceCode(ref code, codeDefinition, data.FormName, data.ModelName)); }); }
internal static void SetCodeCollection( CodeDefinition codeDefinition, List <string> codeCollection, DataContainer dataContainer) { var code = string.Empty; dataContainer .XlsIoCollection[dataContainer.DefinitionName] .XlsSheet .AsEnumerable() .Skip(1) .Where(o => o[0].ToString() != string.Empty) .ForEach(definitionRow => Creators.SetCodeCollection( ref code, codeCollection, codeDefinition, dataContainer, () => code = code.Replace( "#Id#", ReservedWords.ValidName(definitionRow[0].ToString())))); }
internal static void ReplaceCodeOfJoin( ref string code, CodeDefinition codeDefinition, ColumnDefinition columnDefinition, string tableNameAlias, string columnNameAlias, string joinType, string joinExpression) { foreach (var placeholder in code.RegexValues(CodePatterns.ReplacementPlaceholder)) { switch (placeholder) { case "TableName": code = code.Replace("#TableName#", columnDefinition.TableName); break; case "ColumnName": code = code.Replace("#ColumnName#", columnDefinition.ColumnName); break; case "Type": code = code.Replace("#Type#", columnDefinition.TypeName.CsType()); break; case "ColumnBracket": code = code.Replace("#ColumnBracket#", ColumnBracket(columnDefinition)); break; case "ColumnBrackets": code = code.Replace( "#ColumnBrackets#", ColumnBrackets( columnDefinition, tableNameAlias, columnNameAlias, selectColumnAlias: true)); break; case "Columns": code = code.Replace( "#Columns#", Columns(columnDefinition)); break; case "OrderByColumns": code = code.Replace( "#OrderByColumns#", OrderByColumns( columnDefinition, tableNameAlias)); break; case "Alias": code = code .Replace("#Alias#", columnNameAlias) .Replace("#BeforeAlias#", columnNameAlias.ChangePrefixNumber(-1)); break; case "As": code = code.Replace( "#As#", !columnDefinition.ComputeColumn.IsNullOrEmpty() ? "\"" + columnDefinition.ColumnName + "\"" : "null"); break; case "JoinTableName": code = code.Replace( "#JoinTableName#", !columnDefinition.JoinTableName.IsNullOrEmpty() ? columnDefinition.JoinTableName : columnDefinition.TableName); break; case "JoinType": code = code.Replace("#JoinType#", joinType); break; case "TableNameAlias": code = code.Replace("#TableNameAlias#", " as [" + tableNameAlias + "]"); break; case "JoinExpression": code = code.Replace("#JoinExpression#", joinExpression); break; case "RecordingData": code = code.Replace("#RecordingData#", columnDefinition.RecordingData); break; case "MaxLength": code = code.Replace( "#MaxLength#", Column.CodeMaxLength(columnDefinition)); break; default: break; } } if (!codeDefinition.ReplaceOld.IsNullOrEmpty()) { code = code.Replace(codeDefinition.ReplaceOld, codeDefinition.ReplaceNew); } }
private static bool CheckExcludeConditionsByDefName( CodeDefinition codeDefinition, DataContainer dataContainer) { return(!codeDefinition.Include.IsNullOrEmpty() && !codeDefinition.Include.Split(',').Contains(dataContainer.DefinitionName)); }
internal static bool CheckExclude( CodeDefinition codeDefinition, ColumnDefinition columnDefinition) { if (codeDefinition.NotJoin && columnDefinition.JoinTableName != string.Empty) { return(true); } if (codeDefinition.Join && columnDefinition.JoinTableName == string.Empty) { return(true); } if (codeDefinition.JoinExpression && columnDefinition.JoinExpression == string.Empty) { return(true); } if (codeDefinition.Pk && columnDefinition.Pk == 0) { return(true); } if (codeDefinition.NotPk && columnDefinition.Pk != 0) { return(true); } if (codeDefinition.Session && !columnDefinition.Session) { return(true); } if (codeDefinition.Identity && !columnDefinition.Identity) { return(true); } if (codeDefinition.NotIdentity && columnDefinition.Identity) { return(true); } if (codeDefinition.Unique && !columnDefinition.Unique) { return(true); } if (codeDefinition.NotUnique && columnDefinition.Unique) { return(true); } if (codeDefinition.NotDefault && columnDefinition.Default != string.Empty) { return(true); } if (codeDefinition.ItemId && Def.ExistsModel(columnDefinition.ModelName, o => o.ItemId > 0) && columnDefinition.ColumnName != columnDefinition.ModelName + "Id") { return(true); } if (codeDefinition.NotItemId && Def.ExistsModel(columnDefinition.ModelName, o => o.ItemId > 0) && columnDefinition.ColumnName == columnDefinition.ModelName + "Id") { return(true); } if (codeDefinition.Calc && columnDefinition.Calc == string.Empty) { return(true); } if (codeDefinition.NotCalc && columnDefinition.Calc != string.Empty) { return(true); } if (codeDefinition.NotWhereSpecial && columnDefinition.WhereSpecial) { return(true); } if (codeDefinition.SearchIndex && columnDefinition.SearchIndexPriority == 0) { return(true); } if (codeDefinition.NotByForm && columnDefinition.ByForm != string.Empty) { return(true); } if (codeDefinition.Form && columnDefinition.NotForm) { return(true); } if (codeDefinition.Select && columnDefinition.NotSelect) { return(true); } if (codeDefinition.Update && columnDefinition.NotUpdate) { return(true); } if (codeDefinition.SelectColumns && columnDefinition.SelectColumns == string.Empty) { return(true); } if (codeDefinition.NotSelectColumn && columnDefinition.SelectColumns != string.Empty) { return(true); } if (codeDefinition.ComputeColumn && columnDefinition.ComputeColumn == string.Empty) { return(true); } if (codeDefinition.NotSelectColumn && columnDefinition.ComputeColumn != string.Empty) { return(true); } if (codeDefinition.Aggregatable && !columnDefinition.Aggregatable) { return(true); } if (codeDefinition.Computable && !columnDefinition.Computable) { return(true); } if (codeDefinition.Include != string.Empty && !codeDefinition.Include.Split(',').Contains(columnDefinition.ColumnName)) { return(true); } if (codeDefinition.Exclude != string.Empty && codeDefinition.Exclude.Split(',').Contains(columnDefinition.ColumnName)) { return(true); } if (codeDefinition.IncludeTypeName != string.Empty && !codeDefinition.IncludeTypeName.Split(',').Contains(columnDefinition.TypeName)) { return(true); } if (codeDefinition.ExcludeTypeName != string.Empty && codeDefinition.ExcludeTypeName.Split(',').Contains(columnDefinition.TypeName)) { return(true); } if (codeDefinition.IncludeTypeCs != string.Empty && !codeDefinition.IncludeTypeCs.Split(',').Contains(columnDefinition.TypeCs)) { return(true); } if (codeDefinition.ExcludeTypeCs != string.Empty && codeDefinition.ExcludeTypeCs.Split(',').Contains(columnDefinition.TypeCs)) { return(true); } if (codeDefinition.IncludeDefaultCs != string.Empty && !codeDefinition.IncludeDefaultCs.Split(',').Contains(columnDefinition.DefaultCs)) { return(true); } if (codeDefinition.ExcludeDefaultCs != string.Empty && codeDefinition.ExcludeDefaultCs.Split(',').Contains(columnDefinition.DefaultCs)) { return(true); } if (codeDefinition.NotTypeCs && columnDefinition.TypeCs != string.Empty) { return(true); } if (codeDefinition.History && columnDefinition.History == 0) { return(true); } if (codeDefinition.PkHistory && columnDefinition.PkHistory == 0) { return(true); } if (codeDefinition.GridColumn && columnDefinition.GridColumn == 0) { return(true); } if (codeDefinition.FilterColumn && columnDefinition.FilterColumn == 0) { return(true); } if (codeDefinition.EditorColumn && columnDefinition.EditorColumn == 0) { return(true); } if (codeDefinition.TitleColumn && columnDefinition.TitleColumn == 0) { return(true); } if (codeDefinition.UserColumn && !columnDefinition.UserColumn) { return(true); } if (codeDefinition.NotUserColumn && columnDefinition.UserColumn) { return(true); } if (codeDefinition.EnumColumn && !columnDefinition.EnumColumn) { return(true); } if (codeDefinition.Exclude.Split(',').Contains(columnDefinition.ColumnName)) { return(true); } if (codeDefinition.NotItem && Def.ExistsTable(columnDefinition.TableName, o => o.ItemId > 0)) { return(true); } if (codeDefinition.ItemOnly && !Def.ExistsTable(columnDefinition.TableName, o => o.ItemId > 0)) { return(true); } if (codeDefinition.GenericUi && !Def.ExistsTable(columnDefinition.TableName, o => o.GenericUi)) { return(true); } if (codeDefinition.UpdateMonitor && !Def.ExistsTable(columnDefinition.TableName, o => o.UpdateMonitor)) { return(true); } if (codeDefinition.ControlType != string.Empty && codeDefinition.ControlType != columnDefinition.ControlType) { return(true); } if (codeDefinition.Null && !columnDefinition.Nullable) { return(true); } if (codeDefinition.NotNull && columnDefinition.Nullable) { return(true); } if (codeDefinition.Like && !columnDefinition.Like) { return(true); } if (codeDefinition.NotBase) { if (Def.ItemModelNameCollection().Contains(columnDefinition.ModelName)) { if (Def.ExistsColumnBaseItem(o => o.ColumnName == columnDefinition.ColumnName && !o.EachModel)) { return(true); } } else { if (Def.ExistsColumnBase(o => o.ColumnName == columnDefinition.ColumnName && !o.EachModel)) { return(true); } } } if (codeDefinition.IdentityOrPk) { if ((HasUniqueColumn(columnDefinition) && !(columnDefinition.Identity || columnDefinition.Unique)) || (!HasUniqueColumn(columnDefinition) && columnDefinition.Pk == 0)) { return(true); } } return(false); }
private void Update() //called by Unity every frame { if (!Game.Manager) { return; //don't run update code before Game.Manager exists } BasePatches.Update(); CheatPatches.Update(); InputPatches.Update(); RunTimerPatches.Update(); if (tooltip != null) { if (tooltipTimer.ElapsedMilliseconds > tooltipLength) { tooltipTimer.Reset(); tooltip.Hide(); tooltip = null; } } //if tooltip became null, stop timer else { tooltipTimer.Reset(); } //Check for the Return hotkey if (ResetKey.Value.IsDown() || ResetKey2.Value.IsDown()) { if (UnloadGame()) { hasReturned = true; BasePatches.searchForMe = -111; if (run != null) { run.reset(); run = null; } } } if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl)) { //display the splits folder on Ctrl+S if (Input.GetKeyDown(KeyCode.S)) { if (Game.Manager.Ui.currentCanvas.titleCanvas) { System.Diagnostics.Process.Start(Directory.GetCurrentDirectory() + "/splits"); } /* * else if (run != null) * { * run.save(); * ShowNotif("Run saved!", 2); * }*/ //don't allow saving midrun, could be done accidentally } //reset run on Ctrl+R if (Input.GetKeyDown(KeyCode.R) && run != null) { run.reset(true); ShowNotif("Run reset!", 2); } //quit run on Ctrl+Q if (Input.GetKeyDown(KeyCode.Q) && run != null) { run.reset(false); ShowNotif("Run quit!", 2); } } //if currently in a puzzle, and the status bar is up, and it's not nonstop mode, send data to autosplitters if (!Game.Manager.Ui.currentCanvas.titleCanvas && Game.Session && Game.Session.Puzzle.isPuzzleActive && !Game.Session.gameCanvas.cellphone.isOpen && Game.Session.Puzzle.puzzleStatus.statusType != PuzzleStatusType.NONSTOP) { //this is a possibly bold but necessary assumption to make about cellphone._currentApp UiCellphoneAppStatus status = (UiCellphoneAppStatus)AccessTools.Field(typeof(UiCellphone), "_currentApp").GetValue(Game.Session.gameCanvas.cellphone); bool isBonusRound = Game.Session.Puzzle.puzzleStatus.bonusRound; if (status.affectionMeter.currentValue == 0) { startingRelationshipType = Game.Persistence.playerFile.GetPlayerFileGirlPair(Game.Session.Location.currentGirlPair).relationshipType; startingCompletedPairs = Game.Persistence.playerFile.completedGirlPairs.Count; } if (status.affectionMeter.currentValue == status.affectionMeter.maxValue && (Game.Session.gameCanvas.puzzleGrid.roundState == PuzzleRoundState.SUCCESS || isBonusRound)) { if (!splitThisDate && run != null) { bool didSplit = false; //always split for the two tutorial splits if (Game.Session.Location.currentGirlPair.girlDefinitionOne.girlName == "Kyu") { didSplit = run.split(isBonusRound); } //don't split for dates in 48 Shoes, or in postgame else if (run.goal != 48 && Game.Persistence.playerFile.storyProgress < 13) { if (run.goal == 1 || SplitRules.Value <= 0) { didSplit = run.split(isBonusRound); } else if (SplitRules.Value == 1 && !isBonusRound) { didSplit = run.split(isBonusRound); } else if (SplitRules.Value == 2 && isBonusRound) { didSplit = run.split(isBonusRound); } //check for final split regardless of option else if (isBonusRound && (run.goal == startingCompletedPairs + 1 || (run.goal == 25 && Game.Session.Puzzle.puzzleStatus.statusType == PuzzleStatusType.BOSS))) { didSplit = run.split(isBonusRound); } } if (didSplit) { //initiate the timers for displaying and removing our split times RunTimerPatches.initialTimerDelay.Start(); if (!isBonusRound) { RunTimerPatches.undoTimer.Start(); } GirlPairDefinition pair = Game.Session.Location.currentGirlPair; int dateNum = 1; if (startingRelationshipType == GirlPairRelationshipType.ATTRACTED) { dateNum = 2; } if (isBonusRound) { dateNum = 3; } //Kyu pair starts at ATTRACTED (2) and her bonus should be 2, not 3, so this is the easiest way if (pair.girlDefinitionOne.girlName == "Kyu") { dateNum--; } if (Game.Session.Puzzle.puzzleStatus.statusType == PuzzleStatusType.BOSS) { dateNum = 5 - (Game.Session.Puzzle.puzzleStatus.girlListCount / 2); } string newSplit = pair.girlDefinitionOne.girlName + " & " + pair.girlDefinitionTwo.girlName; //don't put a number on the date if they started as lovers, or it's nonstop mode? (for 100%) //the storyProgress check probably makes this pointless if (startingRelationshipType != GirlPairRelationshipType.LOVERS && Game.Session.Puzzle.puzzleStatus.statusType != PuzzleStatusType.NONSTOP) { newSplit += " #" + dateNum; } newSplit += "\n " + run.splitText + "\n"; run.push(newSplit); if (isBonusRound && pair.girlDefinitionOne.girlName != "Kyu") { //I think it's possible that, with a huge chain reaction, completedGirlPairs.Count might not have updated yet //so use the number from before the date, +1 //funnily enough, that also makes the final boss's goal of "25" count //but I'll leave the double-check there if (run.goal == startingCompletedPairs + 1 || (run.goal == 25 && Game.Session.Puzzle.puzzleStatus.statusType == PuzzleStatusType.BOSS)) { Logger.LogMessage("initiating run.save"); if (run.rerollOccurred) { run.push("\n(Rerolled for Lillian)\n"); } //run.save(); RunTimerPatches.savePBDelay.Start(); } } } } if (isBonusRound) { BasePatches.searchForMe = 200; } else { BasePatches.searchForMe = 100; } splitThisDate = true; } else { BasePatches.searchForMe = 0; splitThisDate = false; } } //title-screen only options, to prevent non-vanilla things happening midrun if (Game.Manager.Ui.currentCanvas.titleCanvas) { UiTitleCanvas tc = (UiTitleCanvas)Game.Manager.Ui.currentCanvas; bool isLoading = (bool)AccessTools.Field(typeof(UiTitleCanvas), "_loadingGame").GetValue(tc); //display New Version tooltip for 10 seconds if (newVersionAvailable && !alertedOfUpdate) { alertedOfUpdate = true; ShowTooltip("Update Available!\nClick on Credits!", 10000, 0, 45); } if (!InputPatches.codeScreen && Input.GetKeyDown(KeyCode.A)) { CodeDefinition codeDefinition = Game.Data.Codes.Get(ABIAHAIR); if (!Game.Persistence.playerData.unlockedCodes.Contains(codeDefinition)) { Game.Persistence.playerData.unlockedCodes.Add(codeDefinition); ShowTooltip("Abia's Hair Enabled!", 2000); } else { Game.Persistence.playerData.unlockedCodes.Remove(codeDefinition); ShowTooltip("Abia's Hair Disabled!", 2000); } Game.Manager.Ui.currentCanvas.GetComponent <UiTitleCanvas>().coverArt.Refresh(); } //check for Kyu outfits if (Input.GetKey(KeyCode.K)) { bool hairstyle = (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl)); for (int i = (int)KeyCode.Alpha0; i <= (int)KeyCode.Alpha5; i++) { //Alpha0 = 48, Keypad0 = 256 int num = i - 48; if ((Input.GetKeyDown((KeyCode)i) || Input.GetKeyDown((KeyCode)(i + 208)))) { SetKyuOutfit(num, hairstyle); string s = "Kyu "; if (hairstyle) { s += "Hairstyle #"; } else { s += "Outfit #"; } s += num + " Chosen!"; ShowTooltip(s, 2000); } } } //check for the Cheat Mode hotkey if (!InputPatches.codeScreen && cheatsEnabled == false && !isLoading && CheatHotkey.Value.IsDown()) { Game.Manager.Audio.Play(AudioCategory.SOUND, Game.Manager.Ui.sfxReject); PlayCheatLine(); Harmony.CreateAndPatchAll(typeof(CheatPatches), null); CheatPatches.UnlockAllCodes(); ShowTooltip("Cheat Mode Activated!", 2000, 0, 30); cheatsEnabled = true; } } }
internal static void ReplaceCode( ref string code, CodeDefinition codeDefinition, ColumnDefinition columnDefinition, int columnCount = 0) { foreach (var placeholder in code.RegexValues(CodePatterns.ReplacementPlaceholder)) { switch (placeholder) { case "ByForm": code = code.ByForm(columnDefinition); break; case "ByApi": code = code.ByApi(columnDefinition); break; case "ByDataRow": code = code.ByDataRow(columnDefinition); break; case "BySession": code = code.BySession(columnDefinition); break; } } foreach (var placeholder in code.RegexValues(CodePatterns.ReplacementPlaceholder)) { switch (placeholder) { case "columnName": code = code.Replace( "#columnName#", columnDefinition.ColumnName.LocalalVariableName()); break; case "ColumnName": code = code.Replace( "#ColumnName#", columnDefinition.ColumnName.PublicVariableName()); break; case "Type": code = code.Replace("#Type#", Strings.CoalesceEmpty( columnDefinition.TypeCs, columnDefinition.TypeName.CsType())); break; case "RecordingType": code = code.Replace("#RecordingType#", columnDefinition.TypeName.CsType()); break; case "RecordingData": code = code.Replace("#RecordingData#", columnDefinition.RecordingData); break; case "CastType": code = code.Replace("#CastType#", columnDefinition.TypeName.CastType()); break; case "DefaultData": code = code.Replace( "#DefaultData#", columnDefinition.DefaultData()); break; case "InitialValue": code = code.Replace( "#InitialValue#", columnDefinition.InitialValue()); break; case "RecordingDefaultData": code = code.Replace( "#RecordingDefaultData#", columnDefinition.DefaultData(recordingData: true)); break; case "Hash": code = code.Replace( "#Hash#", columnDefinition.Hash ? ".Sha512Cng()" : string.Empty); break; case "MaxLength": code = code.Replace( "#MaxLength#", CodeMaxLength(columnDefinition)); break; case "Calc": code = code.Replace("#Calc#", columnDefinition.Calc .Replace("#TableName#", columnDefinition.TableName) .Replace("#ModelName#", columnDefinition.ModelName)); break; case "ColumnCount": code = code.Replace("#ColumnCount#", columnCount.ToString()); break; case "GridEnable": code = code.Replace("#GridEnable#", columnDefinition.GridEnabled .ToOneOrZeroString()); break; default: code = ReplaceCode(code, columnDefinition, placeholder); break; } } if (codeDefinition.ReplaceOld != string.Empty) { code = code.Replace(codeDefinition.ReplaceOld, codeDefinition.ReplaceNew); } }