public EditShader ( int package, string name, byte newData, byte &oldData ) : bool | ||
package | int | The id of the package containing the shader to edit. |
name | string | The name of the shader to edit. |
newData | byte | The data with which to replaced the existing shader data. |
oldData | byte | Returns the existing shader data. |
return | bool |
/// <summary> /// Edits the specified game specific value. /// </summary> /// <remarks> /// This method writes the given value in the specified game specific value, if it /// is owned by the mod being upgraded. If the specified edit is not owned by the /// mod being upgraded, the edit is archived in the install log. /// /// If the edit was not previously installed by the mod, then the normal install /// rules apply, including confirming overwrite if applicable. /// </remarks> /// <param name="p_strKey">The key of the edited Game Specific Value.</param> /// <param name="p_bteValue">The value to install.</param> /// <returns><c>true</c> if the value was set; <c>false</c> otherwise.</returns> public override bool EditGameSpecificValue(string p_strKey, byte[] p_bteValue) { IList<IMod> lstInstallers = InstallLog.GetGameSpecificValueEditInstallers(p_strKey); if (lstInstallers.Contains(Mod, ModComparer.Filename)) { if (!ModComparer.Filename.Equals(lstInstallers[lstInstallers.Count - 1], Mod)) InstallLog.ReplaceGameSpecificValueEdit(Mod, p_strKey, p_bteValue); else { ShaderEdit sedShader = new ShaderEdit(p_strKey); SDPArchives sdpManager = new SDPArchives(GameModeInfo, FileUtility); if (!TouchedFiles.Contains(sdpManager.GetPath(sedShader.Package))) { TouchedFiles.Add(sdpManager.GetPath(sedShader.Package)); TransactionalFileManager.Snapshot(sdpManager.GetPath(sedShader.Package)); } byte[] oldData; if (!sdpManager.EditShader(sedShader.Package, sedShader.ShaderName, p_bteValue, out oldData)) throw new Exception("Failed to edit the shader"); } OriginallyInstalledEdits.Remove(p_strKey); return true; } return base.EditGameSpecificValue(p_strKey, p_bteValue); }
/// <summary> /// Edits the specified game specific value. /// </summary> /// <param name="p_strKey">The key of the edited Game Specific Value.</param> /// <param name="p_bteValue">The value to install.</param> /// <returns><c>true</c> if the value was set; <c>false</c> otherwise.</returns> public virtual bool EditGameSpecificValue(string p_strKey, byte[] p_bteValue) { if (m_booDontOverwriteAll) return false; ShaderEdit sedShader = new ShaderEdit(p_strKey); SDPArchives sdpManager = new SDPArchives(GameModeInfo, FileUtility); if (!TouchedFiles.Contains(sdpManager.GetPath(sedShader.Package))) { TouchedFiles.Add(sdpManager.GetPath(sedShader.Package)); TransactionalFileManager.Snapshot(sdpManager.GetPath(sedShader.Package)); } IMod modOldMod = InstallLog.GetCurrentGameSpecificValueEditOwner(p_strKey); if (!m_booOverwriteAll && (modOldMod != null)) { string strMessage = String.Format("Shader '{0}' in package '{1}' has already been overwritten by '{2}'\n" + "Overwrite the changes?", sedShader.ShaderName, sedShader.Package, modOldMod.ModName); switch (m_dlgOverwriteConfirmationDelegate(strMessage, false, false)) { case OverwriteResult.YesToAll: m_booOverwriteAll = true; break; case OverwriteResult.NoToAll: m_booDontOverwriteAll = true; break; case OverwriteResult.Yes: break; default: return false; } } byte[] oldData; if (!sdpManager.EditShader(sedShader.Package, sedShader.ShaderName, p_bteValue, out oldData)) throw new Exception("Failed to edit the shader"); //if we are overwriting an original shader, back it up if ((modOldMod == null) && (oldData != null)) InstallLog.LogOriginalGameSpecificValue(p_strKey, oldData); InstallLog.AddGameSpecificValueEdit(Mod, p_strKey, p_bteValue); return true; }