Content Create Script.sql

From Dragon Age Toolset Wiki
Jump to: navigation, search

This is one of the two SQL scripts used to create a blank database. See Database for more details.

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Module_t_ModuleType]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Module] DROP CONSTRAINT FK_t_Module_t_ModuleType
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ResourceDefinition_t_ResourceTables]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ResourceDefinition] DROP CONSTRAINT FK_t_ResourceDefinition_t_ResourceTables
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ResourceTableRelationship_t_ResourceTables]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ResourceTableRelationship] DROP CONSTRAINT FK_t_ResourceTableRelationship_t_ResourceTables
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ResourceTableRelationship_t_ResourceTables1]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ResourceTableRelationship] DROP CONSTRAINT FK_t_ResourceTableRelationship_t_ResourceTables1
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_StringExportHistory_StringExportLabel]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringExportHistory] DROP CONSTRAINT FK_StringExportHistory_StringExportLabel
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_StringExportLabelResourceStats_StringExportLabel]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringExportLabelResourceStats] DROP CONSTRAINT FK_StringExportLabelResourceStats_StringExportLabel
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_StringExportLabelStringTypeStats_StringExportLabel]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringExportLabelStringTypeStats] DROP CONSTRAINT FK_StringExportLabelStringTypeStats_StringExportLabel
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_StringLanguageVariantText_StringImportSession]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringLanguageVariantText] DROP CONSTRAINT FK_StringLanguageVariantText_StringImportSession
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_StringLanguageVariantVersion_StringImportSession]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringLanguageVariantVersion] DROP CONSTRAINT FK_StringLanguageVariantVersion_StringImportSession
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_String_t_StringTable]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_String] DROP CONSTRAINT FK_t_String_t_StringTable
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_StringVersion_t_StringType]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringVersion] DROP CONSTRAINT FK_t_StringVersion_t_StringType
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_StringLanguageVariant_t_StringVariant]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringLanguageVariant] DROP CONSTRAINT FK_t_StringLanguageVariant_t_StringVariant
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOSessionInstanceVersion_t_VOSessionInstance]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOSessionInstanceVersion] DROP CONSTRAINT FK_t_VOSessionInstanceVersion_t_VOSessionInstance
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ResRef_t_ResourceDefinition]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ResRef] DROP CONSTRAINT FK_t_ResRef_t_ResourceDefinition
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Area_t_String]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Area] DROP CONSTRAINT FK_t_Area_t_String
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ConversationLine_t_String]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ConversationLine] DROP CONSTRAINT FK_t_ConversationLine_t_String
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Creature_t_String]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Creature] DROP CONSTRAINT FK_t_Creature_t_String
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_CutsceneAction_t_String]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_CutsceneAction] DROP CONSTRAINT FK_t_CutsceneAction_t_String
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Item_t_String]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Item] DROP CONSTRAINT FK_t_Item_t_String
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Item_t_String1]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Item] DROP CONSTRAINT FK_t_Item_t_String1
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Merchant_t_String]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Merchant] DROP CONSTRAINT FK_t_Merchant_t_String
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Placeable_t_String]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Placeable] DROP CONSTRAINT FK_t_Placeable_t_String
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Plot_t_String]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Plot] DROP CONSTRAINT FK_t_Plot_t_String
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_PlotStatus_Journal_t_String]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_PlotStatus] DROP CONSTRAINT FK_t_PlotStatus_Journal_t_String
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_StringSound_t_String]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringSound] DROP CONSTRAINT FK_t_StringSound_t_String
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_StringVersion_t_String]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringVersion] DROP CONSTRAINT FK_t_StringVersion_t_String
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_StringExportHistoryAdjustmentLog_StringExportHistory]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringExportHistoryAdjustmentLog] DROP CONSTRAINT FK_StringExportHistoryAdjustmentLog_StringExportHistory
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Area_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Area] DROP CONSTRAINT FK_t_Area_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Area_t_ResRef1]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Area] DROP CONSTRAINT FK_t_Area_t_ResRef1
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AreaMusicVolume_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AreaMusicVolume] DROP CONSTRAINT FK_t_AreaMusicVolume_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AreaObject_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AreaObject] DROP CONSTRAINT FK_t_AreaObject_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AssociatedResource_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AssociatedResource] DROP CONSTRAINT FK_t_AssociatedResource_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Character_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Character] DROP CONSTRAINT FK_t_Character_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Character_t_ResRef2]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Character] DROP CONSTRAINT FK_t_Character_t_ResRef2
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Conversation_EndConversationPlotResRefID_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Conversation] DROP CONSTRAINT FK_t_Conversation_EndConversationPlotResRefID_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Conversation_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Conversation] DROP CONSTRAINT FK_t_Conversation_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Conversation_t_ResRef1]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Conversation] DROP CONSTRAINT FK_t_Conversation_t_ResRef1
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Conversation_t_ResRef3]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Conversation] DROP CONSTRAINT FK_t_Conversation_t_ResRef3
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ConversationCinematics_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ConversationCinematics] DROP CONSTRAINT FK_t_ConversationCinematics_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ConversationLine_ActionPlotResRefID_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ConversationLine] DROP CONSTRAINT FK_t_ConversationLine_ActionPlotResRefID_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ConversationLine_ConditionPlotResRefID_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ConversationLine] DROP CONSTRAINT FK_t_ConversationLine_ConditionPlotResRefID_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ConversationLine_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ConversationLine] DROP CONSTRAINT FK_t_ConversationLine_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ConversationLine_t_ResRef1]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ConversationLine] DROP CONSTRAINT FK_t_ConversationLine_t_ResRef1
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ConversationLine_t_ResRef2]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ConversationLine] DROP CONSTRAINT FK_t_ConversationLine_t_ResRef2
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ConversationLine_t_ResRef3]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ConversationLine] DROP CONSTRAINT FK_t_ConversationLine_t_ResRef3
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ConversationLine_t_ResRef4]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ConversationLine] DROP CONSTRAINT FK_t_ConversationLine_t_ResRef4
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ConversationLine_t_ResRef5]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ConversationLine] DROP CONSTRAINT FK_t_ConversationLine_t_ResRef5
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ConversationTagMap_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ConversationTagMap] DROP CONSTRAINT FK_t_ConversationTagMap_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Creature_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Creature] DROP CONSTRAINT FK_t_Creature_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Creature_t_ResRef1]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Creature] DROP CONSTRAINT FK_t_Creature_t_ResRef1
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Creature_t_ResRef2]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Creature] DROP CONSTRAINT FK_t_Creature_t_ResRef2
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Cutscene_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Cutscene] DROP CONSTRAINT FK_t_Cutscene_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Cutscene_t_ResRef1]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Cutscene] DROP CONSTRAINT FK_t_Cutscene_t_ResRef1
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Cutscene_t_ResRef2]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Cutscene] DROP CONSTRAINT FK_t_Cutscene_t_ResRef2
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_CutsceneAction_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_CutsceneAction] DROP CONSTRAINT FK_t_CutsceneAction_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_CutsceneObject_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_CutsceneObject] DROP CONSTRAINT FK_t_CutsceneObject_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Inventory_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Inventory] DROP CONSTRAINT FK_t_Inventory_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Item_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Item] DROP CONSTRAINT FK_t_Item_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Merchant_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Merchant] DROP CONSTRAINT FK_t_Merchant_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Module_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Module] DROP CONSTRAINT FK_t_Module_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Module_t_ResRef1]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Module] DROP CONSTRAINT FK_t_Module_t_ResRef1
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Module_t_ResRef2]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Module] DROP CONSTRAINT FK_t_Module_t_ResRef2
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ModuleResRef_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ModuleResRef] DROP CONSTRAINT FK_t_ModuleResRef_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Conversation_t_ResRef2]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Placeable] DROP CONSTRAINT FK_t_Conversation_t_ResRef2
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Placeable_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Placeable] DROP CONSTRAINT FK_t_Placeable_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Placeable_t_ResRef1]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Placeable] DROP CONSTRAINT FK_t_Placeable_t_ResRef1
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Plot_ParentPlotResRefID_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Plot] DROP CONSTRAINT FK_t_Plot_ParentPlotResRefID_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Plot_ScriptResRefID_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Plot] DROP CONSTRAINT FK_t_Plot_ScriptResRefID_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Plot_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Plot] DROP CONSTRAINT FK_t_Plot_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Script_Reference_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Script_Reference] DROP CONSTRAINT FK_t_Script_Reference_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Stage_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Stage] DROP CONSTRAINT FK_t_Stage_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_StringSound_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringSound] DROP CONSTRAINT FK_t_StringSound_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_StringVersion_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringVersion] DROP CONSTRAINT FK_t_StringVersion_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Trigger_t_ResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Trigger] DROP CONSTRAINT FK_t_Trigger_t_ResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ModuleAssociation_t_Module]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ModuleAssociation] DROP CONSTRAINT FK_t_ModuleAssociation_t_Module
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ModuleAssociation_t_Module1]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ModuleAssociation] DROP CONSTRAINT FK_t_ModuleAssociation_t_Module1
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ModuleResRef_t_Module]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ModuleResRef] DROP CONSTRAINT FK_t_ModuleResRef_t_Module
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ModuleResRefVersion_t_Module]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ModuleResRefVersion] DROP CONSTRAINT FK_t_ModuleResRefVersion_t_Module
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ModuleVariable_t_Module]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ModuleVariable] DROP CONSTRAINT FK_t_ModuleVariable_t_Module
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AreaAudioVolume_t_Area]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AreaAudioVolume] DROP CONSTRAINT FK_t_AreaAudioVolume_t_Area
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AreaInstanceAssociations_t_Area]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AreaInstanceAssociations] DROP CONSTRAINT FK_t_AreaInstanceAssociations_t_Area
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AreaMusicVolume_t_Area]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AreaMusicVolume] DROP CONSTRAINT FK_t_AreaMusicVolume_t_Area
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AreaObject_t_Area]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AreaObject] DROP CONSTRAINT FK_t_AreaObject_t_Area
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AreaReverbVolume_t_Area]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AreaReverbVolume] DROP CONSTRAINT FK_t_AreaReverbVolume_t_Area
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AreaSound_t_Area]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AreaSound] DROP CONSTRAINT FK_t_AreaSound_t_Area
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AreaWaypoint_t_Area]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AreaWaypoint] DROP CONSTRAINT FK_t_AreaWaypoint_t_Area
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ConversationCinematics_t_Conversation]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ConversationCinematics] DROP CONSTRAINT FK_t_ConversationCinematics_t_Conversation
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ConversationLine_t_Conversation]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ConversationLine] DROP CONSTRAINT FK_t_ConversationLine_t_Conversation
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ConversationTransit_t_Conversation]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ConversationTransition] DROP CONSTRAINT FK_t_ConversationTransit_t_Conversation
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ConversationAnimations_t_ConversationLine]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ConversationAnimations] DROP CONSTRAINT FK_t_ConversationAnimations_t_ConversationLine
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_CreatureAbility_t_Creature]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_CreatureAbility] DROP CONSTRAINT FK_t_CreatureAbility_t_Creature
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_CutsceneObject_t_Cutscene]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_CutsceneObject] DROP CONSTRAINT FK_t_CutsceneObject_t_Cutscene
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_CutsceneActionFBEParameter_t_CutsceneAction]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_CutsceneActionFBEParameter] DROP CONSTRAINT FK_t_CutsceneActionFBEParameter_t_CutsceneAction
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_CutsceneActionTransition_t_CutsceneAction]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_CutsceneActionTransition] DROP CONSTRAINT FK_t_CutsceneActionTransition_t_CutsceneAction
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_CutsceneActionTransition_t_CutsceneAction1]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_CutsceneActionTransition] DROP CONSTRAINT FK_t_CutsceneActionTransition_t_CutsceneAction1
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_CutsceneTrack_t_CutsceneObject]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_CutsceneTrack] DROP CONSTRAINT FK_t_CutsceneTrack_t_CutsceneObject
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_CutsceneAction_t_CutsceneTrack]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_CutsceneAction] DROP CONSTRAINT FK_t_CutsceneAction_t_CutsceneTrack
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ItemProperty_t_Item]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ItemProperty] DROP CONSTRAINT FK_t_ItemProperty_t_Item
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_MerchantRestrictedItem_t_Merchant]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_MerchantRestrictedItem] DROP CONSTRAINT FK_t_MerchantRestrictedItem_t_Merchant
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ModuleResRefVersion_t_ModuleResRef]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ModuleResRefVersion] DROP CONSTRAINT FK_t_ModuleResRefVersion_t_ModuleResRef
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOScript_t_ModuleResRef_Character]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOScript] DROP CONSTRAINT FK_t_VOScript_t_ModuleResRef_Character
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOScript_t_ModuleResRef_Resource]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOScript] DROP CONSTRAINT FK_t_VOScript_t_ModuleResRef_Resource
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Area_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Area] DROP CONSTRAINT FK_t_Area_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AreaList_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AreaList] DROP CONSTRAINT FK_t_AreaList_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AssociatedResource_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AssociatedResource] DROP CONSTRAINT FK_t_AssociatedResource_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Character_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Character] DROP CONSTRAINT FK_t_Character_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Conversation_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Conversation] DROP CONSTRAINT FK_t_Conversation_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ConversationTagMap_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ConversationTagMap] DROP CONSTRAINT FK_t_ConversationTagMap_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Creature_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Creature] DROP CONSTRAINT FK_t_Creature_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Cutscene_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Cutscene] DROP CONSTRAINT FK_t_Cutscene_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Inventory_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Inventory] DROP CONSTRAINT FK_t_Inventory_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Item_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Item] DROP CONSTRAINT FK_t_Item_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Map_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Map] DROP CONSTRAINT FK_t_Map_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Merchant_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Merchant] DROP CONSTRAINT FK_t_Merchant_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ModuleResRef_C_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ModuleResRef] DROP CONSTRAINT FK_t_ModuleResRef_C_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_ModuleResRef_S_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_ModuleResRef] DROP CONSTRAINT FK_t_ModuleResRef_S_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Placeable_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Placeable] DROP CONSTRAINT FK_t_Placeable_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Plot_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Plot] DROP CONSTRAINT FK_t_Plot_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Role_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Role] DROP CONSTRAINT FK_t_Role_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Script_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Script] DROP CONSTRAINT FK_t_Script_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Stage_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Stage] DROP CONSTRAINT FK_t_Stage_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_StringVersion_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringVersion] DROP CONSTRAINT FK_t_StringVersion_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Trigger_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Trigger] DROP CONSTRAINT FK_t_Trigger_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Variable_t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Variable] DROP CONSTRAINT FK_t_Variable_t_ModuleResRefVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_PlotStatus_t_Plot]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_PlotStatus] DROP CONSTRAINT FK_t_PlotStatus_t_Plot
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_PlotAssist_t_PlotStatus]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_PlotAssist] DROP CONSTRAINT FK_t_PlotAssist_t_PlotStatus
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_Script_Reference_t_Script]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_Script_Reference] DROP CONSTRAINT FK_t_Script_Reference_t_Script
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_StageObject_t_Stage]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StageObject] DROP CONSTRAINT FK_t_StageObject_t_Stage
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_StringLanguageTag_StringLanguage]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringLanguageTag] DROP CONSTRAINT FK_StringLanguageTag_StringLanguage
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_StringLanguageVariant_t_StringLanguage]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringLanguageVariant] DROP CONSTRAINT FK_t_StringLanguageVariant_t_StringLanguage
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOScriptInstance_t_StringLanguage]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOScriptInstance] DROP CONSTRAINT FK_t_VOScriptInstance_t_StringLanguage
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOSession_t_StringLanguage]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOSession] DROP CONSTRAINT FK_t_VOSession_t_StringLanguage
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_StringLanguage_StringLanguageTag]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringLanguage] DROP CONSTRAINT FK_StringLanguage_StringLanguageTag
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_StringLanguageVariantVersion_StringLanguageVariant]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringLanguageVariantVersion] DROP CONSTRAINT FK_StringLanguageVariantVersion_StringLanguageVariant
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_StringText_t_StringLanguageVariant]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringText] DROP CONSTRAINT FK_t_StringText_t_StringLanguageVariant
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOScriptStringRevision_t_StringLanguageVariant]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOScriptStringRevision] DROP CONSTRAINT FK_t_VOScriptStringRevision_t_StringLanguageVariant
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_StringLanguageVariant_StringLanguageVariantVersion_1]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringLanguageVariant] DROP CONSTRAINT FK_StringLanguageVariant_StringLanguageVariantVersion_1
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_StringLanguageVariant_StringLanguageVariantVersion_2]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringLanguageVariant] DROP CONSTRAINT FK_StringLanguageVariant_StringLanguageVariantVersion_2
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_StringLanguageVariantText_StringLanguageVariantVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringLanguageVariantText] DROP CONSTRAINT FK_StringLanguageVariantText_StringLanguageVariantVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_StringLanguageVariantVersion_StringLanguageVariantVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringLanguageVariantVersion] DROP CONSTRAINT FK_StringLanguageVariantVersion_StringLanguageVariantVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOScriptInstanceString_t_StringLanguageVariantVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOScriptInstanceString] DROP CONSTRAINT FK_t_VOScriptInstanceString_t_StringLanguageVariantVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOScriptInstanceString_t_StringText]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOScriptInstanceString] DROP CONSTRAINT FK_t_VOScriptInstanceString_t_StringText
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_StringText_t_StringVersion]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StringText] DROP CONSTRAINT FK_t_StringText_t_StringVersion
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOScriptBatchPrint_t_VOScript]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOScriptBatchPrint] DROP CONSTRAINT FK_t_VOScriptBatchPrint_t_VOScript
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOScriptInstance_t_VOScript]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOScriptInstance] DROP CONSTRAINT FK_t_VOScriptInstance_t_VOScript
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AreaAudioVolumeGeometry_t_AreaAudioVolume]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AreaAudioVolumeGeometry] DROP CONSTRAINT FK_t_AreaAudioVolumeGeometry_t_AreaAudioVolume
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AreaAudioVolumeSound_t_AreaAudioVolume]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AreaAudioVolumeSound] DROP CONSTRAINT FK_t_AreaAudioVolumeSound_t_AreaAudioVolume
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AreaReverbVolumeGeometry_t_AreaReverbVolume]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AreaReverbVolumeGeometry] DROP CONSTRAINT FK_t_AreaReverbVolumeGeometry_t_AreaReverbVolume
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_MapTrailPoint_t_MapTrail]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_MapTrailPoint] DROP CONSTRAINT FK_t_MapTrailPoint_t_MapTrail
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AreaMusicVolumeGeometry_t_AreaMusicVolume]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AreaMusicVolumeGeometry] DROP CONSTRAINT FK_t_AreaMusicVolumeGeometry_t_AreaMusicVolume
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AreaObjectGeometry_t_AreaObject]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AreaObjectGeometry] DROP CONSTRAINT FK_t_AreaObjectGeometry_t_AreaObject
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_AreaObjectVariable_t_AreaObject]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_AreaObjectVariable] DROP CONSTRAINT FK_t_AreaObjectVariable_t_AreaObject
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_MapPin_t_Map]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_MapPin] DROP CONSTRAINT FK_t_MapPin_t_Map
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_MapTrail_t_Map]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_MapTrail] DROP CONSTRAINT FK_t_MapTrail_t_Map
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_StageFBEParameter_t_StageObject]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StageFBEParameter] DROP CONSTRAINT FK_t_StageFBEParameter_t_StageObject
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_StageObjectReference_t_StageObject]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_StageObjectReference] DROP CONSTRAINT FK_t_StageObjectReference_t_StageObject
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOScriptBatchPrint_t_VOScriptInstance]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOScriptBatchPrint] DROP CONSTRAINT FK_t_VOScriptBatchPrint_t_VOScriptInstance
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOScriptInstanceString_t_VOScriptInstance]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOScriptInstanceString] DROP CONSTRAINT FK_t_VOScriptInstanceString_t_VOScriptInstance
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOSessionInstanceVersion_t_VOScriptInstance]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOSessionInstanceVersion] DROP CONSTRAINT FK_t_VOSessionInstanceVersion_t_VOScriptInstance
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOScriptBatchPrint_t_VOScriptInstanceString]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOScriptBatchPrint] DROP CONSTRAINT FK_t_VOScriptBatchPrint_t_VOScriptInstanceString
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOScriptInstanceString_t_VOScriptInstanceString]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOScriptInstanceString] DROP CONSTRAINT FK_t_VOScriptInstanceString_t_VOScriptInstanceString
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOScriptInstanceStringStatus_t_VOScriptInstanceString]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOScriptInstanceStringStatus] DROP CONSTRAINT FK_t_VOScriptInstanceStringStatus_t_VOScriptInstanceString
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOSessionInstanceVersion_t_VOSession]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOSessionInstanceVersion] DROP CONSTRAINT FK_t_VOSessionInstanceVersion_t_VOSession
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_t_VOSessionVersion_t_VOSession]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[t_VOSessionVersion] DROP CONSTRAINT FK_t_VOSessionVersion_t_VOSession
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_ModuleType_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_ModuleType_Update]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_ResourceTables_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_ResourceTables_Update]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_StringExportLabel_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_StringExportLabel_Update]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_StringTable_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_StringTable_Update]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_StringType_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_StringType_Update]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_StringVariant_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_StringVariant_Update]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_VOScriptInstanceManagementInsert]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_VOScriptInstanceManagementInsert]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_ResourceDefinition_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_ResourceDefinition_Update]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_ResourceTableRelationship_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_ResourceTableRelationship_Update]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_String_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_String_Update]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_Module_Delete]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_Module_Delete]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_Module_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_Module_Update]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_StringSound_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_StringSound_Update]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_ModuleAssociation_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_ModuleAssociation_Update]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_ModuleResRef_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_ModuleResRef_Update]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_Script_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_Script_Update]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_StringLanguage_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_StringLanguage_Update]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_StringLanguageVariant_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_StringLanguageVariant_Update]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_StringText_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_StringText_Update]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_StringText_Insert]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_StringText_Insert]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_VOSessionInstanceVersionInsert]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_VOSessionInstanceVersionInsert]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_VOSessionVersionInsert]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_VOSessionVersionInsert]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_VOScriptInstanceInsert]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_VOScriptInstanceInsert]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_VOScriptInstanceStringInsert]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_VOScriptInstanceStringInsert]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_VOScriptInstanceStringUpdate]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_VOScriptInstanceStringUpdate]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_VOScriptInstanceStringStatus_Insert]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_VOScriptInstanceStringStatus_Insert]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[udf_GetModuleResRefVersionID]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[udf_GetModuleResRefVersionID]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[udf_GetProcessedIncludes]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[udf_GetProcessedIncludes]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[udf_GetResourceName]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[udf_GetResourceName]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[udf_GetResourceTag]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[udf_GetResourceTag]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[udf_GetStringIDsWithVOHardTiming]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[udf_GetStringIDsWithVOHardTiming]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[udf_GetVOScriptConversationLineCounts]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[udf_GetVOScriptConversationLineCounts]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[udf_ParseIncludesFromScript]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[udf_ParseIncludesFromScript]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[udf_StringsRequiringTranslation]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[udf_StringsRequiringTranslation]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[udf_GetLockPermission]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[udf_GetLockPermission]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[udf_GetModuleHierarchy]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[udf_GetModuleHierarchy]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[udf_GetProjectStringLanguageID]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[udf_GetProjectStringLanguageID]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[udf_GetTopLevelFolder]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[udf_GetTopLevelFolder]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[udf_TextEquals]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[udf_TextEquals]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[udf_WordCount]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[udf_WordCount]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[udf_nTextEquals]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[udf_nTextEquals]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_AddResRef]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_AddResRef]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_AddString]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_AddString]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_AdjustVOScriptLineCharacterInternalForStats]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_AdjustVOScriptLineCharacterInternalForStats]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_AreaObjectInstanceChanges]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_AreaObjectInstanceChanges]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_BatchPrintVOScriptLines]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_BatchPrintVOScriptLines]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_CheckinResource]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_CheckinResource]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_CheckoutResource]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_CheckoutResource]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_CreateNewStringVersion]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_CreateNewStringVersion]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_CreateScratchStringLanguageVariantVersion]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_CreateScratchStringLanguageVariantVersion]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_CreateVOSession]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_CreateVOSession]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_DeleteResource]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_DeleteResource]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_DeleteString]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_DeleteString]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_DetermineVOScriptLineCharacters]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_DetermineVOScriptLineCharacters]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_DoNotReRecordVOScriptString]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_DoNotReRecordVOScriptString]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetAllStringsRequiringRecording]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetAllStringsRequiringRecording]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetAreaList]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetAreaList]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetAreaListList]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetAreaListList]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetCharacterLineCountsPerResource]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetCharacterLineCountsPerResource]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetCharacterList]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetCharacterList]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetCharacterWordAndLineCounts]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetCharacterWordAndLineCounts]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetConversationTagToCharacterList]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetConversationTagToCharacterList]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetForeignText]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetForeignText]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetInvalidConversationTagCharacters]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetInvalidConversationTagCharacters]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetLocalizationStatistics]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetLocalizationStatistics]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetMostRecentLocalizationDatesForVOScript]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetMostRecentLocalizationDatesForVOScript]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetResourceHistoryListByID]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetResourceHistoryListByID]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetResourceInfoByID]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetResourceInfoByID]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetResourceInfoByName]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetResourceInfoByName]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetResourceListByModuleAndType]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetResourceListByModuleAndType]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetResourceReferenceList]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetResourceReferenceList]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetRoleList]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetRoleList]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetVOScriptMaintenanceData]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetVOScriptMaintenanceData]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetVOScriptStats]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetVOScriptStats]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetVOScriptStringsRequiringForeignRecording]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetVOScriptStringsRequiringForeignRecording]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetVOScriptStringsRequiringRecording]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetVOScriptStringsRequiringRecording]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_ImportStringsNotInRange]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_ImportStringsNotInRange]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_InsertStringLanguageVariantText]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_InsertStringLanguageVariantText]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_LockResource]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_LockResource]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_ProcessPendingStringExportHistoryStatus]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_ProcessPendingStringExportHistoryStatus]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_ProcessStringImportData]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_ProcessStringImportData]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_RerecordVOScript]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_RerecordVOScript]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_RestoreResourceVersion]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_RestoreResourceVersion]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_SetStringReTranslationState]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_SetStringReTranslationState]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_UndoStringImportSession]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_UndoStringImportSession]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_UnprintVOScriptInstance]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_UnprintVOScriptInstance]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_UpdateResourceProperties]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_UpdateResourceProperties]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_UpdateVOScriptListing]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_UpdateVOScriptListing]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_ValidateResRefName]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_ValidateResRefName]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_AddModuleAssociation]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_AddModuleAssociation]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_AddNewModule]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_AddNewModule]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_DeleteModuleAssociations]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_DeleteModuleAssociations]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_AddStringTable]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_AddStringTable]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetNextStringID]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetNextStringID]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_CreateStringExportLabel]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_CreateStringExportLabel]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_CreateStringImportSession]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_CreateStringImportSession]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_CreateVOSessionInstance]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_CreateVOSessionInstance]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetResourceLineCharacters]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetResourceLineCharacters]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_SetCurrentStringImportSession]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_SetCurrentStringImportSession]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_CreateNewResourceVersion]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_CreateNewResourceVersion]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[bsp_GetLocalizationStatisticsVerbose]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[bsp_GetLocalizationStatisticsVerbose]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[v_ConversationLineSpeakerTag]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[v_ConversationLineSpeakerTag]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[v_StringVersionText]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[v_StringVersionText]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[v_StringsRequiringTranslation]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[v_StringsRequiringTranslation]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[v_StringsRequiringTranslationByResourceVersion]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[v_StringsRequiringTranslationByResourceVersion]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[v_UserResourceInfo]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[v_UserResourceInfo]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[v_VOScriptStringLanguageVariant]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[v_VOScriptStringLanguageVariant]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[v_ModuleTree]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[v_ModuleTree]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_AreaList]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_AreaList]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_AreaMusicVolume]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_AreaMusicVolume]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_AreaObject]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_AreaObject]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_AssociatedResource]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_AssociatedResource]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Character]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Character]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_ConversationCinematics]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_ConversationCinematics]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_ConversationTagMap]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_ConversationTagMap]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_ConversationTransition]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_ConversationTransition]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Inventory]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Inventory]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Map]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Map]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Role]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Role]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StageObject]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StageObject]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StringLanguageVariantText]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StringLanguageVariantText]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_VOScriptBatchPrint]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_VOScriptBatchPrint]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_VOScriptInstance]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_VOScriptInstance]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_VOScriptInstanceString]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_VOScriptInstanceString]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_VOScriptInstanceStringStatus]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_VOScriptInstanceStringStatus]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_VOScriptStringRevision]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_VOScriptStringRevision]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_VOSession]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_VOSession]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_AreaAudioVolume]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_AreaAudioVolume]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_AreaAudioVolumeGeometry]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_AreaAudioVolumeGeometry]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_AreaAudioVolumeSound]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_AreaAudioVolumeSound]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_AreaInstanceAssociations]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_AreaInstanceAssociations]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_AreaMusicVolumeGeometry]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_AreaMusicVolumeGeometry]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_AreaObjectGeometry]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_AreaObjectGeometry]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_AreaObjectVariable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_AreaObjectVariable]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_AreaReverbVolume]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_AreaReverbVolume]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_AreaReverbVolumeGeometry]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_AreaReverbVolumeGeometry]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_AreaSound]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_AreaSound]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_AreaWaypoint]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_AreaWaypoint]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_ConversationAnimations]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_ConversationAnimations]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_CreatureAbility]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_CreatureAbility]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_CutsceneActionFBEParameter]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_CutsceneActionFBEParameter]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_CutsceneActionTransition]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_CutsceneActionTransition]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_ItemProperty]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_ItemProperty]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_MapPin]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_MapPin]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_MapTrail]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_MapTrail]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_MapTrailPoint]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_MapTrailPoint]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_MerchantRestrictedItem]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_MerchantRestrictedItem]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_PlotAssist]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_PlotAssist]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StageFBEParameter]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StageFBEParameter]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StageObjectReference]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StageObjectReference]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_VOSessionInstanceVersion]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_VOSessionInstanceVersion]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_VOSessionVersion]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_VOSessionVersion]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Variable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Variable]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Area]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Area]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Conversation]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Conversation]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_ConversationLine]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_ConversationLine]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Creature]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Creature]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Cutscene]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Cutscene]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_CutsceneAction]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_CutsceneAction]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_CutsceneObject]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_CutsceneObject]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_CutsceneTrack]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_CutsceneTrack]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Item]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Item]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Merchant]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Merchant]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_ModuleResRef]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_ModuleResRef]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_ModuleResRefVersion]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_ModuleResRefVersion]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Placeable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Placeable]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Plot]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Plot]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_PlotStatus]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_PlotStatus]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Script]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Script]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Script_Reference]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Script_Reference]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Stage]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Stage]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StringLanguage]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StringLanguage]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StringLanguageTag]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StringLanguageTag]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StringLanguageVariant]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StringLanguageVariant]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StringLanguageVariantVersion]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StringLanguageVariantVersion]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StringText]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StringText]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StringVersion]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StringVersion]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Trigger]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Trigger]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_VOScript]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_VOScript]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_ModuleAssociation]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_ModuleAssociation]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_ModuleVariable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_ModuleVariable]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_Module]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_Module]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StringSound]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StringSound]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_ResRef]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_ResRef]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StringExportHistoryAdjustmentLog]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StringExportHistoryAdjustmentLog]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_ResourceDefinition]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_ResourceDefinition]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_ResourceTableRelationship]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_ResourceTableRelationship]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_String]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_String]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StringExportHistory]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StringExportHistory]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StringExportLabelResourceStats]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StringExportLabelResourceStats]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StringExportLabelStringTypeStats]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StringExportLabelStringTypeStats]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_CharacterDelta]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_CharacterDelta]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_GlobalParameters]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_GlobalParameters]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_JobProcessInformation]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_JobProcessInformation]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_KeyGenStringID]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_KeyGenStringID]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_ModuleType]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_ModuleType]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_ResourceTables]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_ResourceTables]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StringExportLabel]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StringExportLabel]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StringImportSession]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StringImportSession]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StringTable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StringTable]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StringType]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StringType]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_StringVariant]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_StringVariant]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_VOScriptInstanceManagement]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_VOScriptInstanceManagement]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_VOScriptLineCharacterInternal]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_VOScriptLineCharacterInternal]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_VOSessionInstance]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_VOSessionInstance]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO



CREATE FUNCTION [dbo].[udf_GetLockPermission] ()
RETURNS BIT AS  
BEGIN

DECLARE @bValid BIT

select @bValid = case count(*) when 0 then 0 else 1 end
from sysusers u
  join sysmembers m on u.uid = m.memberuid
  join sysusers g on g.name = 'bw_db_lock'
        and g.uid = m.groupuid
        and g.issqlrole = 1
  join master.dbo.syslogins sl on sl.sid = u.sid
        and sl.loginname = suser_sname()
    
return (@bValid)
END


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[udf_GetLockPermission]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO



CREATE FUNCTION [dbo].[udf_GetModuleHierarchy]
    (@a_iModuleID int,
    @a_bUseModuleHierarchy bit)
RETURNS @RESULT_SET TABLE (ModuleID int)
AS
BEGIN

IF (@a_bUseModuleHierarchy = 1)
 BEGIN
    INSERT @RESULT_SET
    SELECT mt.AssociatedModuleID
    FROM v_ModuleTree mt
    WHERE mt.ModuleID = @a_iModuleID
 END
ELSE
 BEGIN
    INSERT @RESULT_SET
    SELECT @a_iModuleID
 END

return
END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  SELECT  ON [dbo].[udf_GetModuleHierarchy]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------------------------
-- udf_GetProjectStringLanguageID
-- Chris Christou
-- October 10, 2006
------------------------------------------------------------------------------------------
-- This function should be used to load up the StringLanguageID used for the project.
--  Hardcoding of a specific integer should be avoided in C++ and SQL code everywhere
--  except here.
--
--  Params: NOTHING
--  Returns: t_StringLanguage.[ID] of the language this project is being developed in.
--  Note: its probably English.
------------------------------------------------------------------------------------------
CREATE FUNCTION [dbo].[udf_GetProjectStringLanguageID] ( )  
RETURNS int AS  
BEGIN 
------------------------------------------------------------------------
-- NOTE: We could select for the criteria where name = english, but 
-- returning the ID (ie: hardcoding it here) will be more efficient.
------------------------------------------------------------------------
    RETURN 1
END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[udf_GetProjectStringLanguageID]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------------------------
-- udf_GetTopLevelFolder
-- Chris Christou
-- April 09, 2008
------------------------------------------------------------------------------------------
-- Given a t_ModuleResRefVersion.Folder value, this returns the top level folder.
--  This returned value is assumed to be the "general plot" in the Localization world,
--  so this UDF is intended mostly as a convenience for some of the loc web reports.
--
-- A slash (\) character is looked for, and the first one found defines the folder.
-- If a slash is not found, the whole folder is returned.
--
--  Params: @a_sFolder -- t_ModuleResRefVersion.Folder value
--  Returns: varchar string of the top level folder.
--
------------------------------------------------------------------------------------------
CREATE FUNCTION [dbo].[udf_GetTopLevelFolder] ( @a_sFolder varchar(128) )
RETURNS varchar(128) AS
BEGIN
    DECLARE @iPos int
    
    -- Dont look in position one.  Most folders start with the slash character.
    SET @iPos = charindex('\', @a_sFolder, 2)

    IF (@iPos = 0)
    BEGIN
        RETURN @a_sFolder
    END

    RETURN SUBSTRING(@a_sFolder, 1, @iPos)
END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[udf_GetTopLevelFolder]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------------------------
-- udf_TextEquals
-- Chris Christou
-- March 27, 2007
------------------------------------------------------------------------------------------
-- This function was copied from AndyD's udf_TextEquals on Mass Effect.  It 
--  is for TEXT comparisons, and not NTEXT comparisons.
--
--  Params: @a_t1, @a_t2 -- TEXT strings to compare
--  Returns: 1 if text is equal, 0 if not
--  Note: 0 is returned if either/both strings are NULL
--
------------------------------------------------------------------------------------------
CREATE FUNCTION [dbo].[udf_TextEquals] ( @a_t1 text, @a_t2 text )  
RETURNS int AS  
BEGIN 
    
    DECLARE @l_iLen INT
    DECLARE @l_iBatch INT
    DECLARE @l_iSteps INT

    IF @a_t2 IS NULL OR @a_t1 IS NULL RETURN 0

    SET @l_iLen = Datalength( @a_t1 )

    IF @l_iLen <> Datalength( @a_t2 ) RETURN 0

    SET @l_iSteps = CEILING( @l_iLen / 4000.0 )
    SET @l_iBatch = 0

    WHILE @l_iBatch < @l_iSteps
    BEGIN
        IF SUBSTRING( @a_t1, 1+@l_iBatch*4000, 4000 ) <> SUBSTRING( @a_t2, 1+@l_iBatch*4000, 4000 ) return 0
        SET @l_iBatch = @l_iBatch + 1
    END

    RETURN 1
END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[udf_TextEquals]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE FUNCTION [dbo].[udf_WordCount] (@a_tString text)  
RETURNS INT AS  
BEGIN 
    IF (@a_tString IS NULL OR @a_tString LIKE '' ) 
        RETURN 0
    DECLARE @sSeparator VARCHAR(10)
    , @iWords INT
    , @bInWord BIT
    , @iLength INT
    , @iCur INT
    , @iSign INT
    Select @sSeparator = SPACE(1) + CHAR(9) + CHAR(10) + CHAR(13)
    , @iLength = DATALENGTH(@a_tString)
    , @iWords = 0
    , @iCur = 1
    , @bInWord = 0
    WHILE @iCur <= @iLength
    BEGIN
        SELECT @iSign = 1 - SIGN(CHARINDEX(SUBSTRING( @a_tString, @iCur, 1 ), @sSeparator))
        , @iWords = @iWords + ((@bInWord - @iSign) * @bInWord)
        , @bInWord = @iSign
        , @iCur = @iCur + 1
    END
    RETURN (@iWords + @bInWord)
END



GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[udf_WordCount]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------------------------
-- udf_nTextEquals
-- Chris Christou
-- June 26, 2006
------------------------------------------------------------------------------------------
-- This function is similar to AndyD's udf_TextEquals on Mass Effect, only it 
--  is for NTEXT and not TEXT comparisons.
--
--  Params: @a_t1, @a_t2 -- NTEXT strings to compare
--  Returns: 1 if text is equal, 0 if not
--  Note: 0 is returned if either/both strings are NULL
--
------------------------------------------------------------------------------------------
CREATE FUNCTION [dbo].[udf_nTextEquals] ( @a_t1 ntext, @a_t2 ntext )  
RETURNS int AS  
BEGIN 
    
    DECLARE @l_iLen INT
    DECLARE @l_iBatch INT
    DECLARE @l_iSteps INT
    IF @a_t2 IS NULL OR @a_t1 IS NULL RETURN 0
    SET @l_iLen = DATALENGTH( @a_t1 ) / 2
    IF @l_iLen <> (DATALENGTH( @a_t2 ) / 2) RETURN 0
    -- 4000 is the max amount of nText that can be processed at once
    SET @l_iSteps = CEILING( @l_iLen / 4000.0 ) 
    SET @l_iBatch = 0
    WHILE @l_iBatch < @l_iSteps
    BEGIN
        IF SUBSTRING( @a_t1, 1+@l_iBatch*4000, 4000 ) <> SUBSTRING( @a_t2, 1+@l_iBatch*4000, 4000 )  COLLATE SQL_Latin1_General_CP1_CS_AS return 0
        SET @l_iBatch = @l_iBatch + 1
    END
    RETURN 1
END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[udf_nTextEquals]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE FUNCTION [dbo].[udf_GetModuleResRefVersionID] (
    @a_iResRefID int, @a_iModuleID int, @a_bUseModuleTree bit, @a_sUserName varchar(32))
RETURNS int AS  
BEGIN 
    declare @iVersionID int

    select @iVersionID = (select isnull(mrrvs.id, mrrvc.id)
    from t_ModuleResRef mrr
        join t_ModuleResRefVersion mrrvc on mrr.CurrentModuleResRefVersionID = mrrvc.ID
        left outer join t_ModuleResRefVersion mrrvs on mrr.ScratchModuleResRefVersionID = mrrvs.ID
            and mrrvs.UserName = @a_sUserName
        join dbo.udf_GetModuleHierarchy(@a_iModuleID, @a_bUseModuleTree) mt on mrr.ModuleID = mt.ModuleID
    where mrr.ResRefID = @a_iResRefID)
    
    RETURN (@iVersionID)
END



GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[udf_GetModuleResRefVersionID]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO



CREATE FUNCTION [dbo].[udf_GetProcessedIncludes] ()
/*******************************************************************************
//   udf_GetProcessedIncludes
//
//  Copyright (c) 2008 BioWare Corp.
//
//  The source code included in this file is confidential,
//  secret, or proprietary information of BioWare Corp.  It
//  may not be used in whole or in part without express
//  written permission from BioWare Corp.
//
////////////////////////////////////////////////////////////////////////////////
//   Processes the list of scripting #include references to
//   present the full path of all included files from any root.
//   NOTE: As per the script compiler, when processing the includes 
//   of a root file, any include file is only processed once even if 
//   it is included more than once. For example if script "w" includes 
//   scripts "x" and "y" and both "x" and "y" include "z", "z" only 
//   gets included once. Effectively every include file has a built 
//   in header guard. For those example four files the results would 
//   show:
//       w -> x            w includes x
//       w -> x -> z       w includes z  ( through x )
//       w -> y            w includes y
//       x -> z            x includes z
//       y -> z            y includes z
////////////////////////////////////////////////////////////////////////////////
//
//  Owned by: Andy W. Desplenter
//  Created on: May 18, 2008
//
*******************************************************************************/
RETURNS @Return TABLE 
( 
    [Root]        INT, 
    [RootName]    VARCHAR(128), 
    [RootSize]    INT, 
    [Level]       INT, 
    [Leaf]        INT, 
    [LeafName]    VARCHAR(128), 
    [LeafSize]    INT, 
    [IncludePath] VARCHAR(7750)
)
AS
BEGIN

    DECLARE @Level INT
    DECLARE @RowCt INT
    
    DECLARE @Includes TABLE 
    ( [Parent] INT, [Child] INT, PRIMARY KEY ( [Parent], [Child] ) )
    
    DECLARE @Names TABLE 
    ( [ResRefID] INT, [ResRefName] VARCHAR(128), [Size] INT, PRIMARY KEY ( [ResRefID] ) )
    
    DECLARE @Results TABLE 
    ( [Root] INT, [Level] INT, [Leaf] INT, [IncludePath] VARCHAR(8000), PRIMARY KEY ( [Root], [Leaf] ) )

    -- get ResRefIDs for parent and child of all 'C'urrent include references
    INSERT INTO @Includes ( [Parent], [Child] )
    SELECT mrrv.[ResRefID], sr.[ReferencedResRefID]
    FROM   t_Script_Reference sr, t_ModuleResRefVersion mrrv
    WHERE  mrrv.[ID] = sr.[ModuleResRefVersionID]
    AND    mrrv.[Status] = 'C'

    -- get 'C'urrent Name and resource type for each ResRefID in any include
    INSERT INTO @Names ( [ResRefID], [ResRefName], [Size] )
    SELECT DISTINCT mrrv.[ResRefID], mrrv.[Name] + '.' + rr.[ResType],
        (select sum(sz) 
        from
            ( select datalength(a.Text) as sz from t_script a where mrrv.ID = a.ModuleResRefVersionID 
              UNION select 24+ datalength(mrrv.Name)*3 +sum(datalength(b.Name) + 15 + floor(log10(b.flag+.1)+1)) from t_plotstatus b where mrrv.ID = b.ModuleResRefVersionID
            ) a
        )
    FROM   t_ModuleResRefVersion mrrv, t_ResRef rr
    WHERE  mrrv.[Status] = 'C'
    AND    mrrv.[ResRefID] = rr.[ID]
    AND    mrrv.[ResRefID] IN ( SELECT [Parent] FROM @Includes UNION SELECT [Child]  FROM @Includes )

    SET @Level = 0

    -- seed first layer, with any resref that is ever a parent
    INSERT INTO @Results ( [Root], [Level], [Leaf], [IncludePath] )
    SELECT DISTINCT [Parent], @Level, [Parent], [ResRefName]
    FROM   @Includes I, @Names N
    WHERE  I.[Parent] = N.[ResRefID]

    SET @RowCt = @@ROWCOUNT

    -- while there are still rows to add
    WHILE @RowCt > 0 -- AND @Level < 3
    BEGIN

        -- select @Level as LoopNo, @RowCt as RowCt

        SET @Level = @Level + 1

        -- uses group by because w -> x -> z and w -> y -> z can happen
        INSERT INTO @Results ( [Root], [Level], [Leaf], [IncludePath] )
        SELECT a, b, c, MIN(d) -- use "first" path to new nested include "w -> x -> z"
        FROM (
            SELECT DISTINCT R1.[Root] a, @Level b, I.[Child] c, R1.[IncludePath] + ' -> ' + N.[ResRefName] d
            FROM   @Includes I, @Names N, @Results R1
            WHERE  R1.[Leaf] = I.[Parent]
            AND    N.[ResRefID] = I.[Child]
            AND    R1.[Level] = @Level - 1 -- only add on to previous layer 
            AND NOT EXISTS -- make sure this included child hasn't already been included in a lower layer
            ( SELECT 1 FROM @Results R2 WHERE R1.[Root] = R2.[Root] AND I.[Child] = R2.[Leaf] )
        ) x
        GROUP BY a, b, c

        SET @RowCt = @@ROWCOUNT

    END

    INSERT INTO @Return
    SELECT [Root], N1.[ResRefName] AS "RootName", N1.[Size] AS "RootSize",
        [Level], [Leaf], N2.[ResRefName] AS "LeafName", N2.[Size] AS "LeafSize",
        [IncludePath]
    FROM   @Results, @Names N1, @Names N2 
    WHERE  [Level] > 0
    AND    N1.[ResRefID] = [Root]
    AND    N2.[ResRefID] = [Leaf]
    ORDER BY [IncludePath]

    RETURN 
END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  SELECT  ON [dbo].[udf_GetProcessedIncludes]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE FUNCTION [dbo].[udf_GetResourceName] (
    @a_iModuleResRefVersionID int)
RETURNS varchar(128) AS  
BEGIN

declare @ResType varchar(4)
declare @Name varchar(128)

select @Name = NULL

select @ResType = rr.restype
from t_ResRef rr
join t_ModuleResRefVersion mrrv on rr.id = mrrv.ResRefID
 and mrrv.id = @a_iModuleResRefVersionID

if @ResType = 'are'
 BEGIN
    select @Name = st1.text
    from t_area t1 
        join t_StringText st1 on st1.moduleresrefVersionid = t1.moduleresrefversionid
           and st1.stringid = t1.namestringid and st1.stringlanguagevariantid = 1
           and st1.ModuleResRefVersionID = @a_iModuleResRefVersionID
    GOTO DONE
 END
if @ResType = 'utc'
 BEGIN
    select @Name = st1.text
    from t_Creature t1 
        join t_StringText st1 on st1.moduleresrefVersionid = t1.moduleresrefversionid
           and st1.stringid = t1.namestringid and st1.stringlanguagevariantid = 1
           and st1.ModuleResRefVersionID = @a_iModuleResRefVersionID
    GOTO DONE
 END
if @ResType = 'uti'
 BEGIN
    select @Name = st1.text
    from t_Item t1 
        join t_StringText st1 on st1.moduleresrefVersionid = t1.moduleresrefversionid
           and st1.stringid = t1.namestringid and st1.stringlanguagevariantid = 1
           and st1.ModuleResRefVersionID = @a_iModuleResRefVersionID
    GOTO DONE
 END
if @ResType = 'utm'
 BEGIN
    select @Name = st1.text
    from t_Merchant t1 
        join t_StringText st1 on st1.moduleresrefVersionid = t1.moduleresrefversionid
           and st1.stringid = t1.namestringid and st1.stringlanguagevariantid = 1
           and st1.ModuleResRefVersionID = @a_iModuleResRefVersionID
    GOTO DONE
 END
if @ResType = 'utp'
 BEGIN
    select @Name = st1.text
    from t_Placeable t1 
        join t_StringText st1 on st1.moduleresrefVersionid = t1.moduleresrefversionid
           and st1.stringid = t1.namestringid and st1.stringlanguagevariantid = 1
           and st1.ModuleResRefVersionID = @a_iModuleResRefVersionID
    GOTO DONE
 END

DONE:
return (@Name)
END


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[udf_GetResourceName]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE FUNCTION [dbo].[udf_GetResourceTag] (
    @a_iModuleResRefVersionID int)
RETURNS varchar(32) AS  
BEGIN

declare @ResType varchar(4)
declare @Tag varchar(32)

select @Tag = NULL

select @ResType = rr.restype
from t_ResRef rr
join t_ModuleResRefVersion mrrv on rr.id = mrrv.ResRefID
 and mrrv.id = @a_iModuleResRefVersionID

if @ResType = 'are'
 BEGIN
    select @Tag = mrrv.[Name]
    from t_ModuleResRefVersion mrrv
    where mrrv.ID = @a_iModuleResRefVersionID
    GOTO DONE
 END
if @ResType = 'utc'
 BEGIN
    select @Tag = t1.tag
    from t_Creature t1 
    where t1.ModuleResRefVersionID = @a_iModuleResRefVersionID
    GOTO DONE
 END
if @ResType = 'uti'
 BEGIN
    select @Tag = t1.tag
    from t_Item t1 
    where t1.ModuleResRefVersionID = @a_iModuleResRefVersionID
    GOTO DONE
 END
if @ResType = 'utm'
 BEGIN
    select @Tag = t1.tag
    from t_Merchant t1 
    where t1.ModuleResRefVersionID = @a_iModuleResRefVersionID
    GOTO DONE
 END
if @ResType = 'utp'
 BEGIN
    select @Tag = t1.tag
    from t_Placeable t1 
    where t1.ModuleResRefVersionID = @a_iModuleResRefVersionID
    GOTO DONE
 END
if @ResType = 'stg'
 BEGIN
    select @Tag = t1.tag
    from t_Stage t1 
    where t1.ModuleResRefVersionID = @a_iModuleResRefVersionID
    GOTO DONE
 END
if @ResType = 'utt'
 BEGIN
    select @Tag = t1.tag
    from t_Trigger t1 
    where t1.ModuleResRefVersionID = @a_iModuleResRefVersionID
    GOTO DONE
 END

DONE:
return (@Tag)
END


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[udf_GetResourceTag]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO

------------------------------------------------------------------------
--  FUNCTION: udf_GetStringIDsWithVOHardTiming
------------------------------------------------------------------------
--  Created By: Chris Christou
--  Created On: August 24, 2009
-- 
--  Description: 
--    Returns a list of StringIDs that have hard-timing 
--    restrictions on them.  
--    Applies to VO Recordings, and foreign translations.
-- 
--  Parameters:
--    (none)
--   
--  Returns:
--    set of StringIDs
------------------------------------------------------------------------
CREATE FUNCTION [dbo].[udf_GetStringIDsWithVOHardTiming] ()
RETURNS @RESULT_SET TABLE 
(
    [StringID] int
)
AS
BEGIN

    -- Create a temp location to gather data.  
    -- We do this because some times the same StringID will 
    --  be inserted more than once.
    DECLARE @tblStringID TABLE
    (
        [StringID] int NOT NULL
    )

    -- Take the Conversation Line Strings that are flagged 
    --  to use the Animation Duration.
    INSERT @tblStringID ([StringID])
    SELECT cl.[TextStringID]
    FROM t_ModuleResRefVersion mrv
        JOIN t_ConversationLine cl WITH ( NOLOCK ) 
            ON mrv.[ID] = cl.[ModuleResRefVersionID]
            AND mrv.[Status] = 'C'
            AND cl.[UseAnimationDuration] = 1

    -- Take all Conversation Lines on conversations flagged with VOHardTimeRestriction
    INSERT @tblStringID ([StringID])
    SELECT cl.[TextStringID]
    FROM t_ModuleResRefVersion mrv
        JOIN t_Conversation c WITH ( NOLOCK ) 
            ON mrv.[ID] = c.[ModuleResRefVersionID]
            AND mrv.[Status] = 'C'
            AND c.[VOHardTimeRestriction] = 1
        JOIN t_ConversationLine cl WITH ( NOLOCK ) 
            ON mrv.[ID] = cl.[ModuleResRefVersionID]

    -- Take all Cutscene Referenced Strings for Cutscenes
    --  marked to NOT Play until VO Completes.
    INSERT @tblStringID ([StringID])
    SELECT ca.int1
    FROM t_ModuleResRefVersion mrv
        JOIN t_Cutscene c WITH ( NOLOCK ) 
            ON mrv.[ID] = c.[ModuleResRefVersionID]
            AND mrv.[Status] = 'C'
            AND c.[PlayUntilVOCompletes] = 0
        JOIN t_CutsceneAction ca WITH ( NOLOCK ) 
            ON ca.[ModuleResRefVersionID] = mrv.[ID]
            AND ca.[Type] = 3
            AND ca.[int1] != -1

    -- Take all Cutscenes that reference more than one String.
    -- Include all strings in these particular cutscenes.
    DECLARE @tblCutsceneReferenceCount TABLE 
    (
        [ModuleID] int,
        [ResRefID] int,
        [RefCount] int
    )

    INSERT @tblCutsceneReferenceCount
    SELECT 
        mrv.ModuleID, 
        mrv.ResRefID, 
        count(*)
    FROM dbo.t_CutsceneAction ca WITH ( NOLOCK ) 
        JOIN dbo.t_ModuleResRefVersion mrv 
            ON ca.ModuleResRefVersionID = mrv.ID 
            AND mrv.Status = 'C' 
            AND ca.Type = 3
            AND ca.int1 != -1
    GROUP BY mrv.ModuleID, mrv.ResRefID
    HAVING COUNT(*) > 1

    INSERT @tblStringID ([StringID])
    SELECT ca.int1
    FROM dbo.t_CutsceneAction ca WITH ( NOLOCK )
        JOIN dbo.t_ModuleResRefVersion mrv 
            ON ca.ModuleResRefVersionID = mrv.ID 
            AND mrv.Status = 'C'
        JOIN @tblCutsceneReferenceCount crc 
            ON mrv.ModuleID = crc.ModuleID 
            AND mrv.ResRefID = crc.ResRefID 
            AND ca.Type = 3
            AND ca.int1 != -1

    -- Take the distinct list of StringIDs, and place it in the return table
    INSERT @RESULT_SET ( [StringID] )
    SELECT DISTINCT [StringID]
    FROM @tblStringID

    -- Done
    RETURN
END


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  SELECT  ON [dbo].[udf_GetStringIDsWithVOHardTiming]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO

------------------------------------------------------------------------
--  FUNCTION: udf_GetVOScriptConversationLineCounts
------------------------------------------------------------------------
--  Created By: Chris Christou
--  Created On: September 02, 2009
-- 
--  Description: 
--    Used by the VO Script Generator to show the absolute 
--    NPC and PC line counts of conversations used by VO Scripts.
--    
--    Blank lines are excluded.
--
--  Parameters:
--    < none >
--   
--  Returns Table:
--    Conversation ModuleID/ResRefID
--    IsPC - true: Line count is for PC Lines, false: Line count is for NPC Lines
--    LineCount - See IsPC
------------------------------------------------------------------------
CREATE FUNCTION [dbo].[udf_GetVOScriptConversationLineCounts]
(
)
RETURNS @RESULT_SET TABLE 
(
    [ModuleID] int,
    [ResRefID] int,
    [IsPC] bit,
    [LineCount] int
)
AS
BEGIN

    INSERT @RESULT_SET
    SELECT 
        mrv.[ModuleID], 
        mrv.[ResRefID], 
        cl.[IsPC], 
        COUNT(*) as [LineCount] 
    FROM t_ConversationLine cl WITH ( NOLOCK )
        JOIN t_ModuleResRefVersion mrv
            ON cl.[ModuleResRefVersionID] = mrv.[ID] 
            AND mrv.[Status] = 'C'
        JOIN 
        (   -- Filter the resources down to those known to be used by VO Scripts
            select DISTINCT ResourceModuleID, ResourceResRefID
            from t_VOScript
            WHERE [IsActive] = 1
        ) x
            on mrv.ModuleID = x.ResourceModuleID
            and mrv.ResRefID = x.ResourceResRefID
        JOIN t_StringText st WITH ( NOLOCK )
            ON cl.[TextStringID] = st.[StringID] 
            AND mrv.[ID] = st.[ModuleResRefVersionID] 
            AND st.[WordCount] > 0
    GROUP BY 
        mrv.[ModuleID], 
        mrv.[ResRefID], 
        cl.[IsPC] 

    RETURN
END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  SELECT  ON [dbo].[udf_GetVOScriptConversationLineCounts]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO



CREATE FUNCTION [dbo].[udf_ParseIncludesFromScript]
    (@ScriptMRRV INT)
RETURNS @Results TABLE 
(
    ResName  VARCHAR(128), 
    ResType  VARCHAR(4), 
    ResRefID INT
)
AS
BEGIN

    -- Script overview:
    --  This detects #includes after the current position. It scans from 
    --  current position upto the #include to make sure it's not in a 
    --  comment, and bails if there are no #includes after current position.

    DECLARE @Testing      BIT          -- flag used to avoid excessive nesting of ifs
    DECLARE @MaxLength    INT          -- Length of the script string
    DECLARE @CurLocation  INT          -- index into the script during parsing
    DECLARE @IncludeStart INT          -- location of nearest include found after current location
    DECLARE @InlineStart  INT          -- location of nearest inline comment found after current location
    DECLARE @BlockStart   INT          -- location of nearest block comment found after current location
    DECLARE @NameStart    INT          -- location of start of the quote delimited file name for the #include
    DECLARE @NameEnd      INT          -- location of end of the quote delimited file name for the #include
    DECLARE @ResName      VARCHAR(128) -- Resource Name extracted from #include
    DECLARE @ResType      VARCHAR(4)   -- Resource type of the #include'ed resource
    DECLARE @ResRefID     INT          -- ResRef ID of the #include'ed resource
    DECLARE @CurResType   VARCHAR(4)   -- Resource type of the passed script to be parsed
    DECLARE @CurModuleID  INT          -- Module ID of the passed script to be parsed
    DECLARE @Cache        TABLE        -- Table variable to hold the text value of the script in memory
    (
        [Script]   TEXT
    )

    -- Cache values from the passed script

    INSERT INTO @Cache
    SELECT [Text]
    FROM   t_Script s
    WHERE  s.[ModuleResRefVersionID] = @ScriptMRRV

    SELECT @CurResType  = [ResType], 
           @CurModuleID = [ModuleID]
    FROM   t_Script s 
    JOIN   t_ModuleResRefVersion m ON m.[ID] = s.[ModuleResRefVersionID]
    JOIN   t_ResRef r ON r.[ID] = m.[ResRefID]
    WHERE  s.[ModuleResRefVersionID] = @ScriptMRRV

    -- seed the loop
    SET @CurLocation = 1

    SELECT @MaxLength    = DATALENGTH( [Script] ),
           @IncludeStart = CHARINDEX('#include', [Script], @CurLocation),
           @InlineStart  = CHARINDEX('//', [Script], @CurLocation),
           @BlockStart   = CHARINDEX('/*', [Script], @CurLocation)
    FROM   @Cache 

    -- while there's still includes left to process or code we haven't looked at
    WHILE @CurLocation < @MaxLength AND @IncludeStart > 0
    BEGIN

        SET @Testing  = 1
        SET @ResName  = NULL
        SET @ResRefID = NULL
        SET @ResType  = @CurResType -- default to same type as passed script

        -- if there's a comment block before the #include skip past it
        IF @BlockStart >0 AND @BlockStart < @IncludeStart
        BEGIN
            -- look for first comment block end after the block start
            SELECT @CurLocation = CHARINDEX('*/', [Script], @BlockStart+2 )
            FROM   @Cache 

            -- if non found then skip to end of text
            IF @CurLocation = 0
            BEGIN
                SET @CurLocation = @MaxLength
            END

            -- skip rest of checks
            SET @Testing = 0
        END

        -- if there's an inline comment before the #include skip past it
        IF @Testing = 1 AND @InlineStart > 0 AND @InlineStart < @IncludeStart
        BEGIN

            -- look for first end of line after the inline comment
            SELECT @CurLocation = CHARINDEX(CHAR(10), [Script], @InlineStart+2 )
            FROM   @Cache 

            -- if non found then skip to end of text
            IF @CurLocation = 0
            BEGIN
                SET @CurLocation = @MaxLength
            END

            -- skip rest of checks
            SET @Testing = 0
        END

        -- if there were no comments to skip try to extract an included resource name
        IF @Testing = 1 
        BEGIN
    
            SET @CurLocation = @IncludeStart + 8
    
            SELECT @NameStart = CHARINDEX( '"', [Script], @CurLocation)
            FROM   @Cache 
    
            IF @NameStart > 0
            BEGIN
                SELECT @NameEnd = CHARINDEX( '"', [Script], @NameStart+1)
                FROM   @Cache 

                IF @NameEnd > @NameStart
                BEGIN
                    SELECT @ResName = SUBSTRING( [Script], @NameStart+1, @NameEnd-@NameStart-1)
                    FROM   @Cache 

                    SET @CurLocation = @NameEnd + 1

                    IF LOWER(SUBSTRING(@ResName,1,4)) = 'plt_'
                    BEGIN
                        SET @ResName = SUBSTRING(@ResName,5,8000)
                        SET @ResType = 'plo'
                    END
                END
            END
        END

        IF @ResName IS NOT NULL 
        BEGIN

            -- Get the ResRefID
            SELECT DISTINCT @ResRefID = r.[ID]
            FROM   v_ModuleTree mt
            JOIN   t_ModuleResRef mrr 
                ON  mrr.[ModuleID] = mt.[AssociatedModuleID]
            JOIN   t_ResRef r
                ON  r.[ID]      = mrr.[ResRefID]
                AND r.[ResType] = @ResType
            JOIN   t_ModuleResRefVersion mrrv 
                ON  mrrv.[ModuleID] = mrr.[ModuleID]
                AND mrrv.[ResRefID] = mrr.[ResRefID]
                AND mrrv.[Name]     = @ResName
                AND mrrv.[Status]   IN ('C', 'S')
            WHERE  mt.[ModuleID] = @CurModuleID

            -- Add to Results
            INSERT INTO @Results ( ResName, ResType, ResRefID )
            VALUES ( @ResName, @ResType, @ResRefID)
        END

        -- reseed start locations before looping
        SELECT @IncludeStart = CHARINDEX('#include', [Script], @CurLocation),
               @InlineStart  = CHARINDEX('//', [Script], @CurLocation),
               @BlockStart   = CHARINDEX('/*', [Script], @CurLocation)
        FROM   @Cache 

    END -- end of 'while still work to do' loop

    RETURN 
END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  SELECT  ON [dbo].[udf_ParseIncludesFromScript]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO


------------------------------------------------------------------------
--  FUNCTION: udf_StringsRequiringTranslation
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: November 23, 2006
--  Description: 
--  Params: NONE
--  Returns: Table that is similar to v_StringsRequiringTranslation
------------------------------------------------------------------------
CREATE FUNCTION [dbo].[udf_StringsRequiringTranslation] ( )  
RETURNS @ReturnTable TABLE
   (
    StringID int NOT NULL,
    ModuleResRefVersionID int NOT NULL,
    IsMajorChange int NOT NULL,
    IsNew int NOT NULL
   )
AS
BEGIN

-- updating major changes
INSERT INTO @ReturnTable
SELECT t.[StringID], t.[ModuleResRefVersionID], 1 as [IsMajorChange], 0 as [IsNew]
FROM t_StringText t
    JOIN t_ModuleResRefVersion mrv 
        ON t.[ModuleResRefVersionID] = mrv.[ID]
    JOIN t_StringExportHistory seh
        ON t.[StringID] = seh.[StringID]
        AND seh.[Status] = 'A'
WHERE mrv.[Status] = 'C' -- Ensures that we only care about current version strings
AND t.[LastMajorUpdateOn] > seh.[CompareDate] -- strings updated since last export are included


-- updating minor changes
INSERT INTO @ReturnTable
SELECT t.[StringID], t.[ModuleResRefVersionID], 0 as [IsMajorChange], 0 as [IsNew]
FROM t_StringText t
    JOIN t_ModuleResRefVersion mrv 
        ON t.[ModuleResRefVersionID] = mrv.[ID]
    JOIN t_StringExportHistory seh
        ON t.[StringID] = seh.[StringID]
        AND seh.[Status] = 'A'
WHERE mrv.[Status] = 'C' -- Ensures that we only care about current version strings
AND t.[LastMinorUpdateOn] > seh.[CompareDate] -- strings updated since last export are included
AND t.[StringID] NOT IN 
(
    SELECT [StringID] 
    FROM @ReturnTable 
)


-- never translated strings
INSERT INTO @ReturnTable
SELECT t.[StringID], t.[ModuleResRefVersionID], 1 as [IsMajorChange], 1 as [IsNew]
FROM t_StringText t
    JOIN t_ModuleResRefVersion mrv 
        ON t.[ModuleResRefVersionID] = mrv.[ID]
WHERE mrv.[Status] = 'C' -- Ensures that we only care about current version strings
AND t.[StringID] NOT IN 
(
    SELECT [StringID] 
    FROM t_StringExportHistory 
    WHERE [Status] = 'A'
)

   RETURN
END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

CREATE TABLE [dbo].[t_CharacterDelta] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [Comment] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_GlobalParameters] (
    [Name] [varchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Value] [varchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_JobProcessInformation] (
    [Name] [varchar] (120) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [Value] [varchar] (120) COLLATE SQL_Latin1_General_CP1_CI_AS NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_KeyGenStringID] (
    [LastUsedID] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_ModuleType] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [Name] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Directory] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastModifiedOn] [datetime] NOT NULL ,
    [LastModifiedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_ResourceTables] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [Name] [varchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastModifiedOn] [datetime] NOT NULL ,
    [LastModifiedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StringExportLabel] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [Name] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Comment] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Status] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ExportContent] [int] NOT NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastModifiedOn] [datetime] NOT NULL ,
    [LastModifiedBy] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StringImportSession] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [ImportedOn] [datetime] NOT NULL ,
    [ImportedBy] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Status] [varchar] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Comment] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StringTable] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [Name] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastModifiedOn] [datetime] NOT NULL ,
    [LastModifiedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StringType] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [Name] [varchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Description] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [IncludeFile] [varchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastModifiedOn] [datetime] NOT NULL ,
    [LastModifiedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Exported] [bit] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StringVariant] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [Name] [varchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Description] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastModifiedOn] [datetime] NOT NULL ,
    [LastModifiedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_VOScriptInstanceManagement] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [VOScriptInstanceID] [int] NOT NULL ,
    [Active] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Actor] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Studio] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [RequiresProcessing] [bit] NOT NULL ,
    [SentOn] [datetime] NULL ,
    [ReceivedOn] [datetime] NULL ,
    [ReceivedAllVOFiles] [bit] NOT NULL ,
    [Notes] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_VOScriptLineCharacterInternal] (
    [SPID] [int] NOT NULL ,
    [ResourceModuleID] [int] NOT NULL ,
    [ResourceResRefID] [int] NOT NULL ,
    [ResourceModuleResRefVersionID] [int] NOT NULL ,
    [StringID] [int] NOT NULL ,
    [CharacterModuleID] [int] NULL ,
    [CharacterResRefID] [int] NULL ,
    [ID] [int] IDENTITY (1, 1) NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_VOSessionInstance] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [Unused] [bit] NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_ResourceDefinition] (
    [ResType] [varchar] (4) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [BaseResourceTableID] [int] NOT NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastModifiedOn] [datetime] NOT NULL ,
    [LastModifiedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_ResourceTableRelationship] (
    [ParentResourceTableID] [int] NOT NULL ,
    [ChildResourceTableID] [int] NOT NULL ,
    [FullPath] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Level] [int] NOT NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastModifiedOn] [datetime] NOT NULL ,
    [LastModifiedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_String] (
    [StringTableID] [int] NOT NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastModifiedOn] [datetime] NOT NULL ,
    [LastModifiedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [TEMPID] [int] NULL ,
    [ID] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StringExportHistory] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [StringExportLabelID] [int] NOT NULL ,
    [StringID] [int] NOT NULL ,
    [ModuleResRefVersionID] [int] NOT NULL ,
    [Status] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [CompareDate] [datetime] NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StringExportLabelResourceStats] (
    [StringExportLabelID] [int] NOT NULL ,
    [ModuleResRefVersionID] [int] NOT NULL ,
    [NewLines] [int] NOT NULL ,
    [NewWords] [int] NOT NULL ,
    [UpdatedLines] [int] NOT NULL ,
    [UpdatedWords] [int] NOT NULL ,
    [TotalLines] [int] NOT NULL ,
    [TotalWords] [int] NOT NULL ,
    [NewNonBlankLines] [int] NOT NULL ,
    [UpdatedNonBlankLines] [int] NOT NULL ,
    [TotalNonBlankLines] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StringExportLabelStringTypeStats] (
    [StringExportLabelID] [int] NOT NULL ,
    [StringTypeID] [int] NOT NULL ,
    [NewLines] [int] NOT NULL ,
    [NewWords] [int] NOT NULL ,
    [UpdatedLines] [int] NOT NULL ,
    [UpdatedWords] [int] NOT NULL ,
    [TotalLines] [int] NOT NULL ,
    [TotalWords] [int] NOT NULL ,
    [NewNonBlankLines] [int] NOT NULL ,
    [UpdatedNonBlankLines] [int] NOT NULL ,
    [TotalNonBlankLines] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_ResRef] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [ResType] [varchar] (4) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StringExportHistoryAdjustmentLog] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [StringExportHistoryID] [int] NOT NULL ,
    [Action] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [OldCompareDate] [datetime] NOT NULL ,
    [NewCompareDate] [datetime] NOT NULL ,
    [Comment] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Module] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [Name] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [StringTableID] [int] NULL ,
    [IsCore] [bit] NOT NULL ,
    [Directory] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [StartTag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [StartAreaResRefID] [int] NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastModifiedOn] [datetime] NOT NULL ,
    [LastModifiedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ScriptResRefID] [int] NULL ,
    [Variable2da] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [IncludeInResBuild] [bit] NOT NULL ,
    [ClientScriptResRefID] [int] NULL ,
    [Type] [int] NOT NULL ,
    [DisplayNameStringID] [int] NULL ,
    [DescriptionStringID] [int] NULL ,
    [ExtendedModuleID] [int] NULL ,
    [UID] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Priority] [int] NULL ,
    [IconImage] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [RatingStringID] [int] NULL ,
    [RatingDescriptionStringID] [int] NULL ,
    [URLStringID] [int] NULL ,
    [ReleaseDate] [datetime] NULL ,
    [Version] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [GameVersion] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [PublisherStringID] [int] NULL ,
    [ProductID] [int] NULL ,
    [Price] [int] NULL ,
    [Presentation] [int] NULL ,
    [ContentModuleID] [int] NULL ,
    [RequiresLocalization] [bit] NOT NULL ,
    [RequiresVO] [bit] NOT NULL ,
    [StringIDBegin] [int] NOT NULL ,
    [StringIDEnd] [int] NOT NULL ,
    [StringIDLastUsed] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StringSound] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [StringID] [int] NOT NULL ,
    [SoundResRefID] [int] NOT NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastModifiedOn] [datetime] NOT NULL ,
    [LastModifiedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_ModuleAssociation] (
    [ParentModuleID] [int] NOT NULL ,
    [ChildModuleID] [int] NOT NULL ,
    [FullPath] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Level] [int] NOT NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastModifiedOn] [datetime] NOT NULL ,
    [LastModifiedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_ModuleVariable] (
    [ModuleID] [int] NOT NULL ,
    [Name] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Type] [int] NOT NULL ,
    [Data] [varchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Area] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [NameStringID] [int] NULL ,
    [ScriptResRefID] [int] NULL ,
    [Comments] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [NoTeleport] [bit] NOT NULL ,
    [NonHostile] [bit] NOT NULL ,
    [AreaMap] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [AreaMapWidth] [int] NOT NULL ,
    [AreaMapHeight] [int] NOT NULL ,
    [AreaLayout] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [NoPartyInPocket] [bit] NOT NULL ,
    [Variable2da] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [AreaListResRefID] [int] NULL ,
    [AreaMapNorth] [int] NOT NULL ,
    [ReverbPreset] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [MusicPreset] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Conversation] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [EndConversationScriptResRefID] [int] NULL ,
    [Comment] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [EndConversationPlotResRefID] [int] NULL ,
    [EndConversationPlotFlag] [int] NOT NULL ,
    [EndConversationParameter] [int] NOT NULL ,
    [EndConversationParameterText] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [EndConversationResult] [bit] NOT NULL ,
    [DefaultNPCSpeaker] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [StageResRefID] [int] NULL ,
    [DefaultNPCListener] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [DefaultPCListener] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [PreviewAreaResRefID] [int] NULL ,
    [PreviewStageUseFirstMatch] [bit] NOT NULL ,
    [PreviewStagePositionX] [real] NOT NULL ,
    [PreviewStagePositionY] [real] NOT NULL ,
    [PreviewStagePositionZ] [real] NOT NULL ,
    [PreviewStageOrientationX] [real] NOT NULL ,
    [PreviewStageOrientationY] [real] NOT NULL ,
    [PreviewStageOrientationZ] [real] NOT NULL ,
    [StageTag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [AllCameraLocked] [bit] NOT NULL ,
    [AllGesturesLocked] [bit] NOT NULL ,
    [AllPosesLocked] [bit] NOT NULL ,
    [AllRoboBradLocked] [bit] NOT NULL ,
    [StageAtCurrentLocation] [bit] NOT NULL ,
    [AmbientSoundSetType] [bit] NOT NULL ,
    [OwnerIsHenchman] [bit] NOT NULL ,
    [VOHardTimeRestriction] [bit] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_ConversationLine] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [Index] [int] NOT NULL ,
    [IsPC] [bit] NOT NULL ,
    [TextStringID] [int] NOT NULL ,
    [LanguageID] [int] NOT NULL ,
    [ConditionScriptResRefID] [int] NULL ,
    [ConditionParameter] [int] NOT NULL ,
    [ConditionParameterText] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ActionScriptResRefID] [int] NULL ,
    [ActionParameter] [int] NOT NULL ,
    [ActionParameterText] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Icon] [int] NOT NULL ,
    [Comment] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [VoiceOverTag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [VoiceOverComment] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ActionPlotResRefID] [int] NULL ,
    [ActionPlotFlag] [int] NOT NULL ,
    [ActionResult] [bit] NOT NULL ,
    [ConditionPlotResRefID] [int] NULL ,
    [ConditionPlotFlag] [int] NOT NULL ,
    [ConditionResult] [bit] NOT NULL ,
    [ListenerCharacterID] [int] NULL ,
    [SpeakerCharacterID] [int] NULL ,
    [EditorComment] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Speaker] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Listener] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Visibility] [int] NOT NULL ,
    [Ambient] [bit] NOT NULL ,
    [StageResRefID] [int] NULL ,
    [CameraTag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [CustomCutsceneResRefID] [int] NULL ,
    [SpeakerAnimation] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [CameraFunctionalShotResRefID] [int] NULL ,
    [Emotion] [int] NOT NULL ,
    [RoboBradSeed] [int] NOT NULL ,
    [RoboBradSeedOverride] [bit] NOT NULL ,
    [RoboBradLocked] [bit] NOT NULL ,
    [PreviewAreaResRefID] [int] NULL ,
    [PreviewStageUseFirstMatch] [bit] NOT NULL ,
    [PreviewStagePositionX] [real] NOT NULL ,
    [PreviewStagePositionY] [real] NOT NULL ,
    [PreviewStagePositionZ] [real] NOT NULL ,
    [PreviewStageOrientationX] [real] NOT NULL ,
    [PreviewStageOrientationY] [real] NOT NULL ,
    [PreviewStageOrientationZ] [real] NOT NULL ,
    [Skip] [bit] NOT NULL ,
    [FastPath] [int] NOT NULL ,
    [StageTag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [AnimationsLocked] [bit] NOT NULL ,
    [PlaySoundEvents] [bit] NOT NULL ,
    [CameraLocked] [bit] NOT NULL ,
    [SecondaryCameraTag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [SecondaryCameraDelay] [real] NOT NULL ,
    [UseAnimationDuration] [tinyint] NOT NULL ,
    [NoVOInGame] [tinyint] NOT NULL ,
    [RevertAnimation] [bit] NOT NULL ,
    [Narration] [bit] NOT NULL ,
    [SlideShowTexture] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [StageAtCurrentLocation] [bit] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Creature] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [NameStringID] [int] NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Race] [int] NOT NULL ,
    [Appearance] [int] NOT NULL ,
    [Gender] [int] NOT NULL ,
    [Group] [int] NOT NULL ,
    [Selectable] [bit] NOT NULL ,
    [Head] [int] NOT NULL ,
    [Class] [int] NOT NULL ,
    [Package] [int] NOT NULL ,
    [ConversationResRefID] [int] NULL ,
    [ScriptResRefID] [int] NULL ,
    [Comments] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Immortal] [bit] NOT NULL ,
    [Plot] [bit] NOT NULL ,
    [PerceptionRange] [int] NOT NULL ,
    [Gold] [int] NOT NULL ,
    [Autobalance] [int] NOT NULL ,
    [CharacterResRefID] [int] NULL ,
    [Hair] [int] NOT NULL ,
    [Eyes] [int] NOT NULL ,
    [Variable2da] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Beard] [int] NOT NULL ,
    [SkinTint] [int] NOT NULL ,
    [Tattoo] [int] NOT NULL ,
    [EyeTint] [int] NOT NULL ,
    [HairTint] [int] NOT NULL ,
    [HeadMorph] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Combatant] [int] NOT NULL ,
    [GUIBar] [int] NOT NULL ,
    [BodyTintMask] [int] NOT NULL ,
    [TattooTint] [int] NOT NULL ,
    [NoPermanentDeath] [bit] NOT NULL ,
    [BodyTint] [int] NOT NULL ,
    [Team] [int] NOT NULL ,
    [PlotGiver] [bit] NOT NULL ,
    [TreasureCategory] [int] NOT NULL ,
    [PackageType] [int] NOT NULL ,
    [PackageAI] [int] NOT NULL ,
    [MinLevel] [int] NOT NULL ,
    [MaxLevel] [int] NOT NULL ,
    [ArtFidelity] [int] NOT NULL ,
    [DescriptionStringID] [int] NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Cutscene] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [RunTime] [int] NOT NULL ,
    [EndScriptResRefID] [int] NULL ,
    [StageResRefID] [int] NULL ,
    [PrimaryActor] [int] NOT NULL ,
    [AreaResRefID] [int] NULL ,
    [Animatic] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [BeforeKeyBasedTracks] [bit] NOT NULL ,
    [ShowDynamics] [bit] NOT NULL ,
    [PlaySoundEvents] [bit] NOT NULL ,
    [UseMasterForLOD] [bit] NOT NULL ,
    [AreaPosOffsetX] [real] NOT NULL ,
    [AreaPosOffsetY] [real] NOT NULL ,
    [AreaPosOffsetZ] [real] NOT NULL ,
    [AreaOriOffsetX] [real] NOT NULL ,
    [AreaOriOffsetY] [real] NOT NULL ,
    [AreaOriOffsetZ] [real] NOT NULL ,
    [EnableLevelFBEs] [bit] NOT NULL ,
    [FPS] [int] NOT NULL ,
    [BeforeFixingGADOffsetBaking] [bit] NOT NULL ,
    [PlayUntilVOCompletes] [bit] NOT NULL ,
    [AreaRequired] [bit] NOT NULL ,
    [ShadowRadius] [real] NOT NULL ,
    [LightOcclusion] [bit] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_CutsceneAction] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [CutsceneObjectInstanceID] [int] NOT NULL ,
    [CutsceneTrackInstanceID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [StartTime] [int] NOT NULL ,
    [EndTime] [int] NOT NULL ,
    [Type] [int] NOT NULL ,
    [int1] [int] NOT NULL ,
    [int2] [int] NOT NULL ,
    [byte1] [tinyint] NOT NULL ,
    [real1] [real] NOT NULL ,
    [real2] [real] NOT NULL ,
    [real3] [real] NOT NULL ,
    [real4] [real] NOT NULL ,
    [real5] [real] NOT NULL ,
    [real6] [real] NOT NULL ,
    [bit1] [bit] NOT NULL ,
    [bit2] [bit] NOT NULL ,
    [varchar1] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [varchar2] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [StringID1] [int] NULL ,
    [VectorData] [image] NULL ,
    [int3] [int] NOT NULL ,
    [int4] [int] NOT NULL ,
    [int5] [int] NOT NULL ,
    [LoopingEndTime] [int] NOT NULL ,
    [varchar3] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ResRefID1] [int] NULL ,
    [bit3] [bit] NOT NULL ,
    [GroupID] [int] NOT NULL ,
    [Infinite] [bit] NOT NULL ,
    [bit4] [bit] NOT NULL ,
    [bit5] [bit] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_CutsceneObject] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [ResRefID] [int] NULL ,
    [Model] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [WalkmeshInitial] [bit] NOT NULL ,
    [GlobalActor] [bit] NOT NULL ,
    [PositionX] [real] NOT NULL ,
    [PositionY] [real] NOT NULL ,
    [PositionZ] [real] NOT NULL ,
    [OrientationX] [real] NOT NULL ,
    [OrientationY] [real] NOT NULL ,
    [OrientationZ] [real] NOT NULL ,
    [ActorID] [int] NOT NULL ,
    [Type] [int] NOT NULL ,
    [Name] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [real1] [real] NOT NULL ,
    [real2] [real] NOT NULL ,
    [real3] [real] NOT NULL ,
    [real4] [real] NOT NULL ,
    [int1] [int] NOT NULL ,
    [int2] [int] NOT NULL ,
    [AttachedToActorID] [int] NOT NULL ,
    [real5] [real] NOT NULL ,
    [UsePose] [bit] NOT NULL ,
    [Pose] [int] NOT NULL ,
    [PoseSpeed] [real] NOT NULL ,
    [OriginX] [real] NOT NULL ,
    [OriginY] [real] NOT NULL ,
    [OriginZ] [real] NOT NULL ,
    [OriginYaw] [real] NOT NULL ,
    [OriginPitch] [real] NOT NULL ,
    [OriginRoll] [real] NOT NULL ,
    [MappingTag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [TransitionDelay] [real] NOT NULL ,
    [PreviousPose] [int] NOT NULL ,
    [MappingRequired] [bit] NOT NULL ,
    [ExportResRef] [bit] NOT NULL ,
    [TargetActorID] [int] NOT NULL ,
    [LOD] [int] NOT NULL ,
    [ModelScale] [real] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_CutsceneTrack] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [CutsceneObjectInstanceID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [Name] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Type] [int] NOT NULL ,
    [VectorData] [image] NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Item] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [NameStringID] [int] NULL ,
    [DescriptionStringID] [int] NULL ,
    [ScriptResRefID] [int] NULL ,
    [BaseItemType] [int] NOT NULL ,
    [Appearance] [int] NOT NULL ,
    [MaterialType] [int] NOT NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Plot] [bit] NOT NULL ,
    [CostOverride] [int] NULL ,
    [Comments] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Ability] [int] NULL ,
    [Variable2da] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Heraldry] [int] NOT NULL ,
    [TintOverride] [int] NOT NULL ,
    [Damaged] [bit] NOT NULL ,
    [Icon] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [OnHitEffectID] [int] NOT NULL ,
    [OnHitPower] [int] NOT NULL ,
    [RecipeType] [int] NOT NULL ,
    [Unique] [bit] NOT NULL ,
    [MaterialProgression] [int] NOT NULL ,
    [BodyTintMask] [int] NOT NULL ,
    [BodyTint] [int] NOT NULL ,
    [InventorySubgroup] [int] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Merchant] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [NameStringID] [int] NULL ,
    [ScriptResRefID] [int] NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Comments] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [SellMarkUp] [int] NOT NULL ,
    [BuyMarkDown] [int] NOT NULL ,
    [BuyRestricted] [bit] NOT NULL ,
    [Variable2da] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_ModuleResRef] (
    [ModuleID] [int] NOT NULL ,
    [ResRefID] [int] NOT NULL ,
    [CurrentModuleResRefVersionID] [int] NULL ,
    [ScratchModuleResRefVersionID] [int] NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastModifiedOn] [datetime] NOT NULL ,
    [LastModifiedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_ModuleResRefVersion] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [ModuleID] [int] NOT NULL ,
    [ResRefID] [int] NOT NULL ,
    [Name] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Folder] [varchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Date] [datetime] NOT NULL ,
    [UserName] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Status] [varchar] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Comment] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [RevisionID] [int] NULL ,
    [State] [int] NOT NULL ,
    [OwnerModuleID] [int] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Placeable] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [NameStringID] [int] NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ScriptResRefID] [int] NULL ,
    [Group] [int] NOT NULL ,
    [Comments] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Appearance] [int] NOT NULL ,
    [InitialAnimation] [int] NOT NULL ,
    [Health] [int] NOT NULL ,
    [Indestructible] [bit] NOT NULL ,
    [PickLockLevel] [int] NOT NULL ,
    [KeyTag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [AutoRemoveKey] [bit] NOT NULL ,
    [TrapDetectionDifficulty] [int] NOT NULL ,
    [TrapDisarmDifficulty] [int] NOT NULL ,
    [KeyRequired] [bit] NOT NULL ,
    [Useable] [bit] NOT NULL ,
    [Plot] [bit] NOT NULL ,
    [MaxHealth] [int] NOT NULL ,
    [CharacterResRefID] [int] NULL ,
    [Variable2da] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ConversationResRefID] [int] NULL ,
    [PopupTextStringID] [int] NULL ,
    [Rank] [int] NOT NULL ,
    [TreasureCategory] [int] NOT NULL ,
    [Team] [int] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Plot] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [NameStringID] [int] NULL ,
    [ScriptResRefID] [int] NULL ,
    [Priority] [tinyint] NOT NULL ,
    [GUID] [uniqueidentifier] NOT NULL ,
    [JournalImage] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ParentPlotResRefID] [int] NULL ,
    [EntryType] [int] NOT NULL ,
    [AllowPausing] [bit] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_PlotStatus] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [Flag] [int] NOT NULL ,
    [Name] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Final] [bit] NOT NULL ,
    [Repeatable] [bit] NOT NULL ,
    [JournalTextStringID] [int] NULL ,
    [RewardID] [int] NOT NULL ,
    [Comment] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [DefaultValue] [bit] NOT NULL ,
    [AreaLocationTag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [OfferID] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Script] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [Text] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Script_Reference] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [ReferencedResRefID] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Stage] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [Comment] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [AreaResRefID] [int] NULL ,
    [PositionX] [real] NOT NULL ,
    [PositionY] [real] NOT NULL ,
    [PositionZ] [real] NOT NULL ,
    [Yaw] [real] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StringLanguage] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [Name] [varchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Description] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastModifiedOn] [datetime] NOT NULL ,
    [LastModifiedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [DefaultStringLanguageTagID] [int] NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StringLanguageTag] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [StringLanguageID] [int] NOT NULL ,
    [Tag] [varchar] (16) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StringLanguageVariant] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [StringLanguageID] [int] NOT NULL ,
    [StringVariantID] [int] NOT NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastModifiedOn] [datetime] NOT NULL ,
    [LastModifiedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [CurrentStringLanguageVariantVersionID] [int] NULL ,
    [ScratchStringLanguageVariantVersionID] [int] NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StringLanguageVariantVersion] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [StringLanguageVariantID] [int] NOT NULL ,
    [Status] [varchar] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [PreviousStringLanguageVariantVersionID] [int] NULL ,
    [StringImportSessionID] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StringText] (
    [StringID] [int] NOT NULL ,
    [ModuleResRefVersionID] [int] NOT NULL ,
    [StringLanguageVariantID] [int] NOT NULL ,
    [Text] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [Description] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastMajorUpdateOn] [datetime] NOT NULL ,
    [LastMajorUpdateBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastMinorUpdateOn] [datetime] NOT NULL ,
    [LastMinorUpdateBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [MinorUpdateCount] [int] NOT NULL ,
    [WordCount] [int] NULL ,
    [StringIsCopy] [bit] NOT NULL ,
    [LastModifiedOn] [datetime] NOT NULL ,
    [LastModifiedBy] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [VORequestOn] [datetime] NOT NULL ,
    [ReRecord] [bit] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StringVersion] (
    [StringID] [int] NOT NULL ,
    [ModuleResRefVersionID] [int] NOT NULL ,
    [StringTypeID] [int] NOT NULL ,
    [OwnerResRefID] [int] NULL ,
    [Define] [char] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Trigger] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ScriptResRefID] [int] NULL ,
    [Group] [int] NOT NULL ,
    [Comments] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LinkedTo] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Variable2da] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_VOScript] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [PlayerScript] [bit] NOT NULL ,
    [ResourceModuleID] [int] NOT NULL ,
    [ResourceResRefID] [int] NOT NULL ,
    [CharacterModuleID] [int] NOT NULL ,
    [CharacterResRefID] [int] NOT NULL ,
    [IsActive] [bit] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_AreaAudioVolume] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [PositionX] [real] NOT NULL ,
    [PositionY] [real] NOT NULL ,
    [PositionZ] [real] NOT NULL ,
    [OrientationX] [real] NOT NULL ,
    [OrientationY] [real] NOT NULL ,
    [OrientationZ] [real] NOT NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [AudioVolumeName] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Comments] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ReverbPreset] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [GUID] [uniqueidentifier] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_AreaAudioVolumeGeometry] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [AreaAudioVolumeInstanceID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [VertexX] [real] NOT NULL ,
    [VertexY] [real] NOT NULL ,
    [VertexZ] [real] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_AreaAudioVolumeSound] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [AudioVolumeInstanceID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [Active] [bit] NOT NULL ,
    [Comments] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [PositionX] [real] NOT NULL ,
    [PositionY] [real] NOT NULL ,
    [PositionZ] [real] NOT NULL ,
    [OrientationX] [real] NOT NULL ,
    [OrientationY] [real] NOT NULL ,
    [OrientationZ] [real] NOT NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [SoundName] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Volume] [real] NOT NULL ,
    [Pitch] [real] NOT NULL ,
    [FadeIn] [int] NOT NULL ,
    [FadeOut] [int] NOT NULL ,
    [MaxRangeMult] [real] NOT NULL ,
    [ConeInside] [real] NOT NULL ,
    [ConeOutside] [real] NOT NULL ,
    [ConeOutsideVolume] [real] NOT NULL ,
    [Priority] [int] NOT NULL ,
    [Occludable] [bit] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_AreaInstanceAssociations] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [OwnerGUID] [uniqueidentifier] NOT NULL ,
    [ChildGUID] [uniqueidentifier] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_AreaMusicVolumeGeometry] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [AreaMusicVolumeInstanceID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [VertexX] [real] NOT NULL ,
    [VertexY] [real] NOT NULL ,
    [VertexZ] [real] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_AreaObjectGeometry] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [AreaObjectInstanceID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [VertexX] [real] NOT NULL ,
    [VertexY] [real] NOT NULL ,
    [VertexZ] [real] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_AreaObjectVariable] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [AreaObjectInstanceID] [int] NOT NULL ,
    [Name] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Type] [int] NOT NULL ,
    [Data] [varchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_AreaReverbVolume] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [PositionX] [real] NOT NULL ,
    [PositionY] [real] NOT NULL ,
    [PositionZ] [real] NOT NULL ,
    [OrientationX] [real] NOT NULL ,
    [OrientationY] [real] NOT NULL ,
    [OrientationZ] [real] NOT NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ReverbVolumeName] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ReverbPreset] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Comments] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Priority] [int] NOT NULL ,
    [GUID] [uniqueidentifier] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_AreaReverbVolumeGeometry] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [AreaReverbVolumeInstanceID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [VertexX] [real] NOT NULL ,
    [VertexY] [real] NOT NULL ,
    [VertexZ] [real] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_AreaSound] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [ID] [int] NOT NULL ,
    [Active] [bit] NOT NULL ,
    [Comments] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [PositionX] [real] NOT NULL ,
    [PositionY] [real] NOT NULL ,
    [PositionZ] [real] NOT NULL ,
    [OrientationX] [real] NOT NULL ,
    [OrientationY] [real] NOT NULL ,
    [OrientationZ] [real] NOT NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [SoundName] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Volume] [real] NOT NULL ,
    [Pitch] [real] NOT NULL ,
    [FadeIn] [int] NOT NULL ,
    [FadeOut] [int] NOT NULL ,
    [MaxRangeMult] [real] NOT NULL ,
    [ConeInside] [real] NOT NULL ,
    [ConeOutside] [real] NOT NULL ,
    [ConeOutsideVolume] [real] NOT NULL ,
    [Priority] [int] NOT NULL ,
    [Occludable] [bit] NOT NULL ,
    [GUID] [uniqueidentifier] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_AreaWaypoint] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [PositionX] [real] NOT NULL ,
    [PositionY] [real] NOT NULL ,
    [PositionZ] [real] NOT NULL ,
    [OrientationX] [real] NOT NULL ,
    [OrientationY] [real] NOT NULL ,
    [OrientationZ] [real] NOT NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [WaypointName] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Group] [int] NOT NULL ,
    [MapNoteEnabled] [bit] NOT NULL ,
    [Colour] [int] NOT NULL ,
    [Comments] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [MapNoteType] [int] NOT NULL ,
    [MapNoteStringID] [int] NULL ,
    [GUID] [uniqueidentifier] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_ConversationAnimations] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [LineIndex] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Animation] [varchar] (1024) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [StartTime] [real] NOT NULL ,
    [Weight] [real] NOT NULL ,
    [Speed] [real] NOT NULL ,
    [StartOffset] [real] NOT NULL ,
    [BlendIn] [real] NOT NULL ,
    [EndOffset] [real] NOT NULL ,
    [BlendOut] [real] NOT NULL ,
    [Locked] [bit] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_CreatureAbility] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [Ability] [int] NOT NULL ,
    [Type] [tinyint] NOT NULL ,
    [Level] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_CutsceneActionFBEParameter] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [CutsceneObjectInstanceID] [int] NOT NULL ,
    [CutsceneTrackInstanceID] [int] NOT NULL ,
    [CutsceneActionInstanceID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [Name] [varchar] (1024) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Animatable] [bit] NOT NULL ,
    [Value] [real] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_CutsceneActionTransition] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [CutsceneObjectInstanceID] [int] NOT NULL ,
    [CutsceneTrackInstanceIDA] [int] NOT NULL ,
    [CutsceneActionInstanceIDA] [int] NOT NULL ,
    [CutsceneTrackInstanceIDB] [int] NOT NULL ,
    [CutsceneActionInstanceIDB] [int] NOT NULL ,
    [TransitionType] [int] NOT NULL ,
    [TimeWarp] [bit] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_ItemProperty] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [PropertyID] [int] NOT NULL ,
    [Power] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_MapPin] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [PinType] [int] NOT NULL ,
    [InitialState] [int] NOT NULL ,
    [TerrainType] [int] NOT NULL ,
    [LocationX] [int] NOT NULL ,
    [LocationY] [int] NOT NULL ,
    [Name] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [AreaTag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [WaypointOverride] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [NameStringID] [int] NULL ,
    [TooltipStringID] [int] NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_MapTrail] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [Name] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Pin1Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Pin2Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_MapTrailPoint] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [MapTrailInstanceID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [LocationX] [int] NOT NULL ,
    [LocationY] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_MerchantRestrictedItem] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [BaseType] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_PlotAssist] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [Flag] [int] NOT NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [SetPlotAdvancer] [bit] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StageFBEParameter] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [StageObjectInstanceID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [Name] [varchar] (1024) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Value] [real] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StageObjectReference] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [SourceInstanceID] [int] NOT NULL ,
    [DestinationTag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_VOSessionInstanceVersion] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [VOSessionID] [int] NOT NULL ,
    [VOSessionInstanceID] [int] NOT NULL ,
    [VOScriptInstanceID] [int] NULL ,
    [Active] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [CustomName] [varchar] (256) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [LinesRecorded] [int] NOT NULL ,
    [Notes] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [SentAudioReferencesToStudio] [varchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [SentScriptsToStudio] [varchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ReceivedAudioFromStudio] [varchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [SentAudioToEditor] [varchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ReceivedAudioFromEditor] [varchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [PicksComplete] [varchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [AudioProcessed] [varchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ReadyForGame] [varchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ScriptFolder] [varchar] (260) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [AudioFolder] [varchar] (260) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [ColorR] [real] NOT NULL ,
    [ColorG] [real] NOT NULL ,
    [ColorB] [real] NOT NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_VOSessionVersion] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [VOSessionID] [int] NOT NULL ,
    [Active] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Date] [datetime] NOT NULL ,
    [Duration] [int] NULL ,
    [Actor] [varchar] (256) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Studio] [varchar] (256) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Notes] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [ColorR] [real] NOT NULL ,
    [ColorG] [real] NOT NULL ,
    [ColorB] [real] NOT NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Variable] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [Name] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Type] [int] NOT NULL ,
    [Data] [varchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_AreaList] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [Description] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_AreaMusicVolume] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [PositionX] [real] NOT NULL ,
    [PositionY] [real] NOT NULL ,
    [PositionZ] [real] NOT NULL ,
    [OrientationX] [real] NOT NULL ,
    [OrientationY] [real] NOT NULL ,
    [OrientationZ] [real] NOT NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [MusicVolumeName] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Comments] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [EnterState] [int] NOT NULL ,
    [EnterStateDelay] [int] NOT NULL ,
    [ExitState] [int] NOT NULL ,
    [ExitStateDelay] [int] NOT NULL ,
    [ScriptDelay] [int] NOT NULL ,
    [ScriptResRefID] [int] NULL ,
    [GUID] [uniqueidentifier] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_AreaObject] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [ObjectResRefID] [int] NOT NULL ,
    [PositionX] [real] NOT NULL ,
    [PositionY] [real] NOT NULL ,
    [PositionZ] [real] NOT NULL ,
    [OrientationX] [real] NOT NULL ,
    [OrientationY] [real] NOT NULL ,
    [OrientationZ] [real] NOT NULL ,
    [Active] [bit] NOT NULL ,
    [Platform] [int] NOT NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [InitialAnimation] [int] NOT NULL ,
    [Team] [int] NOT NULL ,
    [Trackable] [bit] NOT NULL ,
    [RoomID1] [int] NOT NULL ,
    [RoomID2] [int] NOT NULL ,
    [Rank] [int] NOT NULL ,
    [TreasureCategory] [int] NOT NULL ,
    [WeaponsDrawn] [bit] NOT NULL ,
    [PickLockLevel] [int] NOT NULL ,
    [GUID] [uniqueidentifier] NOT NULL ,
    [InteractionRadius] [real] NOT NULL ,
    [TrapDetectionDifficulty] [int] NOT NULL ,
    [TrapDisarmDifficulty] [int] NOT NULL ,
    [Useable] [smallint] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_AssociatedResource] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [ResRefID] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Character] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [Name] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Description] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Phonetic] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Image] [image] NULL ,
    [Age] [int] NOT NULL ,
    [Gender] [int] NOT NULL ,
    [Occupation] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Morals] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Appearance] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Flaws] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Skills] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [SpeechPatterns] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [VORecorded] [bit] NOT NULL ,
    [RoleResRefID] [int] NULL ,
    [CharacterType] [int] NOT NULL ,
    [Race] [int] NOT NULL ,
    [Language] [int] NOT NULL ,
    [Accent] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Purpose] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [RelationshipToPlayer] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Archetype] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Demeanor] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ImageFilename] [varchar] (260) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [PersonalBackground] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [CulturalBackground] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Intelligence] [int] NOT NULL ,
    [TiesToOtherCharacters] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [CombatSoundsetNeeded] [bit] NOT NULL ,
    [Plots] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Player] [bit] NOT NULL ,
    [VOCastingColor] [int] NOT NULL ,
    [VOCastingNotes] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [SoundSetResRefID] [int] NULL ,
    [FXAName] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [SoundsetResRefIDIsSharedLink] [bit] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_ConversationCinematics] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [LineIndex] [int] NOT NULL ,
    [Place] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [TagOverride] [bit] NOT NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LookAtOverride] [bit] NOT NULL ,
    [LookAt] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [PoseOverride] [bit] NOT NULL ,
    [FunctionalShotResRefID] [int] NULL ,
    [FunctionalShotActor] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Pose] [int] NOT NULL ,
    [HeadLookAtOverride] [bit] NOT NULL ,
    [HeadLookAt] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ActivationAction] [int] NOT NULL ,
    [TransitionDelay] [real] NOT NULL ,
    [MappingRequired] [bit] NOT NULL ,
    [LockPose] [bit] NOT NULL ,
    [HelmetOverride] [bit] NOT NULL ,
    [Helmet] [int] NOT NULL ,
    [WeaponsOverride] [bit] NOT NULL ,
    [Weapons] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_ConversationTagMap] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [LineIndex] [int] NOT NULL ,
    [Type] [int] NOT NULL ,
    [KeyTag] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ValueTag] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ValueResRefID] [int] NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_ConversationTransition] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [FromIndex] [int] NOT NULL ,
    [ToIndex] [int] NOT NULL ,
    [Order] [int] NOT NULL ,
    [IsLink] [bit] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Inventory] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [ItemResRefID] [int] NOT NULL ,
    [StackSize] [int] NOT NULL ,
    [Slot] [int] NULL ,
    [Droppable] [bit] NOT NULL ,
    [Stealable] [bit] NOT NULL ,
    [Infinite] [bit] NOT NULL ,
    [SetNumber] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Map] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [Map] [int] NOT NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ParentMapResRefID] [int] NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_Role] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [Name] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Description] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StageObject] (
    [ModuleResRefVersionID] [int] NOT NULL ,
    [InstanceID] [int] NOT NULL ,
    [Type] [int] NOT NULL ,
    [PositionX] [real] NOT NULL ,
    [PositionY] [real] NOT NULL ,
    [PositionZ] [real] NOT NULL ,
    [OrientationX] [real] NOT NULL ,
    [OrientationY] [real] NOT NULL ,
    [OrientationZ] [real] NOT NULL ,
    [Tag] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [real1] [real] NOT NULL ,
    [LookingFrom] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LookingAtPrimary] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [CreatureResRefID] [int] NULL ,
    [Pose] [int] NOT NULL ,
    [DefaultCamera] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [CloseUpCamera] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [WideCamera] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LookAtType] [int] NOT NULL ,
    [ApplyDOF] [bit] NOT NULL ,
    [OverrideDOF] [bit] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_StringLanguageVariantText] (
    [StringLanguageVariantVersionID] [int] NOT NULL ,
    [StringID] [int] NOT NULL ,
    [Text] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [StringImportSessionID] [int] NOT NULL ,
    [IsBlank] [bit] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_VOScriptBatchPrint] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [SPID] [int] NOT NULL ,
    [VOScriptID] [int] NOT NULL ,
    [VOScriptInstanceID] [int] NULL ,
    [VOScriptInstanceStringID] [int] NULL ,
    [PreviousVOScriptInstanceStringID] [int] NULL ,
    [PrintedOn] [datetime] NOT NULL ,
    [ModuleResRefVersionID] [int] NOT NULL ,
    [StringLanguageID] [int] NOT NULL ,
    [StringVariantID] [int] NULL ,
    [StringID] [int] NULL ,
    [StringLanguageVariantVersionID] [int] NULL ,
    [ScriptType] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ScriptParent] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Revision] [int] NULL ,
    [AudioFileName] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [CompareDate] [datetime] NULL ,
    [IsForeign] [bit] NOT NULL ,
    [Comment] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [OutputFolder] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_VOScriptInstance] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [VOScriptID] [int] NOT NULL ,
    [Active] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [StringLanguageID] [int] NOT NULL ,
    [PrintedOn] [datetime] NOT NULL ,
    [ScriptType] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [ScriptParent] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Comment] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [OutputFolder] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_VOScriptInstanceString] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [VOScriptInstanceID] [int] NOT NULL ,
    [Active] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Status] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Revision] [int] NOT NULL ,
    [CompareDate] [datetime] NOT NULL ,
    [PreviousVOScriptInstanceStringID] [int] NULL ,
    [IsForeign] [bit] NOT NULL ,
    [StringID] [int] NOT NULL ,
    [ModuleResRefVersionID] [int] NOT NULL ,
    [StringLanguageVariantID] [int] NOT NULL ,
    [StringLanguageVariantVersionID] [int] NULL ,
    [AudioFileName] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [LastModifiedOn] [datetime] NOT NULL ,
    [LastModifiedBy] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [StringVariantID] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_VOScriptInstanceStringStatus] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [VOScriptInstanceStringID] [int] NOT NULL ,
    [Active] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Action] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Revision] [int] NOT NULL ,
    [CompareDate] [datetime] NOT NULL ,
    [CreatedOn] [datetime] NOT NULL ,
    [CreatedBy] [varchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Comment] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_VOScriptStringRevision] (
    [StringID] [int] NOT NULL ,
    [StringLanguageID] [int] NOT NULL ,
    [StringVariantID] [int] NOT NULL ,
    [Revision] [int] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_VOSession] (
    [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
    [LanguageID] [int] NOT NULL 
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_CharacterDelta] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_CharacterDelta] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_GlobalParameters] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_GlobalParameters] PRIMARY KEY  CLUSTERED 
    (
        [Name]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_KeyGenStringID] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_KeyGenStringID] PRIMARY KEY  CLUSTERED 
    (
        [LastUsedID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_ModuleType] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_ModuleType] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_ResourceTables] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_ResourceTables] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StringExportLabel] WITH NOCHECK ADD 
    CONSTRAINT [PK_StringExportLabel] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StringImportSession] WITH NOCHECK ADD 
    CONSTRAINT [PK_StringImportSession] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StringTable] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_StringTable] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StringType] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_StringType] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StringVariant] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_StringVariant] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_VOScriptInstanceManagement] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_VOScriptInstanceManagement] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_VOScriptLineCharacterInternal] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_VOScriptLineCharacterInternal] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_VOSessionInstance] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_VOSessionInstance] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_ResourceDefinition] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_ResourceDefinition] PRIMARY KEY  CLUSTERED 
    (
        [ResType]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_ResourceTableRelationship] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_ResourceTableRelationship] PRIMARY KEY  CLUSTERED 
    (
        [ParentResourceTableID],
        [ChildResourceTableID],
        [FullPath]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_String] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_String] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StringExportHistory] WITH NOCHECK ADD 
    CONSTRAINT [PK_StringExportHistory] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StringExportLabelResourceStats] WITH NOCHECK ADD 
    CONSTRAINT [PK_StringExportLabelResourceStats] PRIMARY KEY  CLUSTERED 
    (
        [StringExportLabelID],
        [ModuleResRefVersionID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StringExportLabelStringTypeStats] WITH NOCHECK ADD 
    CONSTRAINT [PK_StringExportLabelStringTypeStats] PRIMARY KEY  CLUSTERED 
    (
        [StringExportLabelID],
        [StringTypeID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_ResRef] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_ResRef] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StringExportHistoryAdjustmentLog] WITH NOCHECK ADD 
    CONSTRAINT [PK_StringExportHistoryAdjustmentLog] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Module] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Module] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StringSound] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_StringSound] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_ModuleAssociation] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_ModuleAssociation] PRIMARY KEY  CLUSTERED 
    (
        [ParentModuleID],
        [ChildModuleID],
        [FullPath]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_ModuleVariable] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_ModuleVariable] PRIMARY KEY  CLUSTERED 
    (
        [ModuleID],
        [Name]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Area] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Area] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Conversation] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Conversation] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_ConversationLine] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_ConversationLine] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [Index]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Creature] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Creature] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Cutscene] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Cutscene] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_CutsceneAction] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_CutsceneAction] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [CutsceneObjectInstanceID],
        [CutsceneTrackInstanceID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_CutsceneObject] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_CutsceneObject] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_CutsceneTrack] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_CutsceneTrack] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [CutsceneObjectInstanceID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Item] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Item] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Merchant] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Merchant] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_ModuleResRef] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_ModuleResRef] PRIMARY KEY  CLUSTERED 
    (
        [ModuleID],
        [ResRefID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_ModuleResRefVersion] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_ModuleResRefVersion] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Placeable] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Placeable] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Plot] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Plot] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_PlotStatus] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_PlotStatus] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [Flag]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Script] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Script] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Script_Reference] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Script_Reference] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [ReferencedResRefID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Stage] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Stage] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StringLanguage] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_StringLanguage] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StringLanguageTag] WITH NOCHECK ADD 
    CONSTRAINT [PK_StringLanguageTag] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StringLanguageVariant] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_StringLanguageVariant] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StringLanguageVariantVersion] WITH NOCHECK ADD 
    CONSTRAINT [PK_StringLanguageVariantVersion] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StringText] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_StringText] PRIMARY KEY  CLUSTERED 
    (
        [StringID],
        [ModuleResRefVersionID],
        [StringLanguageVariantID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StringVersion] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_StringVersion] PRIMARY KEY  CLUSTERED 
    (
        [StringID],
        [ModuleResRefVersionID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Trigger] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Trigger] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_VOScript] WITH NOCHECK ADD 
    CONSTRAINT [PK_VOScript] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_AreaAudioVolume] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_AreaAudioVolume] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_AreaAudioVolumeGeometry] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_AreaAudioVolumeGeometry] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [AreaAudioVolumeInstanceID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_AreaAudioVolumeSound] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_AreaAudioVolumeSound] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [AudioVolumeInstanceID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_AreaInstanceAssociations] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_AreaInstanceAssociations] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [OwnerGUID],
        [ChildGUID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_AreaMusicVolumeGeometry] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_AreaMusicVolumeGeometry] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [AreaMusicVolumeInstanceID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_AreaObjectGeometry] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_AreaObjectGeometry] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [AreaObjectInstanceID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_AreaObjectVariable] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_AreaObjectVariable] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [AreaObjectInstanceID],
        [Name]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_AreaReverbVolume] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_AreaReverbVolume] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_AreaReverbVolumeGeometry] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_AreaReverbVolumeGeometry] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [AreaReverbVolumeInstanceID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_AreaSound] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_AreaSound] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_AreaWaypoint] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_AreaWaypoint] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_ConversationAnimations] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_ConversationAnimations] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [LineIndex],
        [InstanceID],
        [Tag]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_CreatureAbility] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Skill] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [Ability],
        [Type]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_CutsceneActionFBEParameter] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_CutsceneActionFBEParameter] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [CutsceneObjectInstanceID],
        [CutsceneTrackInstanceID],
        [CutsceneActionInstanceID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_CutsceneActionTransition] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_CutsceneActionTransition] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [CutsceneObjectInstanceID],
        [CutsceneTrackInstanceIDA],
        [CutsceneActionInstanceIDA],
        [CutsceneTrackInstanceIDB],
        [CutsceneActionInstanceIDB]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_ItemProperty] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_ItemProperty] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [PropertyID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_MapPin] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_MapPin] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_MapTrail] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_MapTrail] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_MapTrailPoint] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_MapTrailPoint] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [MapTrailInstanceID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_MerchantRestrictedItem] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_MerchantRestrictedItem] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [BaseType]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_PlotAssist] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_PlotAssist] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [Flag],
        [Tag]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StageFBEParameter] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_StageFBEParameter] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [StageObjectInstanceID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StageObjectReference] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_StageObjectReference] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [SourceInstanceID],
        [DestinationTag]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_VOSessionInstanceVersion] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_VOSessionInstanceVersion] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_VOSessionVersion] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_VOSessionVersion] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Variable] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Variable] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [Name]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_AreaList] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_AreaList] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_AreaMusicVolume] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_AreaMusicVolume] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_AreaObject] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_AreaObject] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_AssociatedResource] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_AssociatedResource] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [ResRefID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Character] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Character] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_ConversationCinematics] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_ConversationCinematics] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [LineIndex],
        [Place]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_ConversationTagMap] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_ConversationTagMap] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [LineIndex],
        [Type],
        [KeyTag]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_ConversationTransition] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_ConversationTransit] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [FromIndex],
        [ToIndex],
        [Order]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Inventory] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Inventory] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [InstanceID],
        [ItemResRefID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Map] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Map] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_Role] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_Role] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StageObject] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_StageObject] PRIMARY KEY  CLUSTERED 
    (
        [ModuleResRefVersionID],
        [InstanceID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_StringLanguageVariantText] WITH NOCHECK ADD 
    CONSTRAINT [PK_StringLanguageVariantText] PRIMARY KEY  CLUSTERED 
    (
        [StringLanguageVariantVersionID],
        [StringID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_VOScriptBatchPrint] WITH NOCHECK ADD 
    CONSTRAINT [PK_VOScriptBatchPrint] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_VOScriptInstance] WITH NOCHECK ADD 
    CONSTRAINT [PK_VOScriptInstance] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_VOScriptInstanceString] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_VOScriptInstanceString] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_VOScriptInstanceStringStatus] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_VOScriptInstanceStringStatus] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_VOScriptStringRevision] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_VOScriptStringRevision] PRIMARY KEY  CLUSTERED 
    (
        [StringID],
        [StringLanguageID],
        [StringVariantID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_VOSession] WITH NOCHECK ADD 
    CONSTRAINT [PK_t_VOSession] PRIMARY KEY  CLUSTERED 
    (
        [ID]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[t_CharacterDelta] ADD 
    CONSTRAINT [DF_t_CharacterDelta_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_CharacterDelta_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy]
GO

ALTER TABLE [dbo].[t_ModuleType] ADD 
    CONSTRAINT [DF_t_ModuleType_Directory] DEFAULT ('') FOR [Directory],
    CONSTRAINT [DF_t_ModuleType_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_ModuleType_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy],
    CONSTRAINT [DF_t_ModuleType_LastModifiedOn] DEFAULT (getdate()) FOR [LastModifiedOn],
    CONSTRAINT [DF_t_ModuleType_LastModifiedBy] DEFAULT (suser_sname()) FOR [LastModifiedBy]
GO

ALTER TABLE [dbo].[t_ResourceTables] ADD 
    CONSTRAINT [DF_t_ResourceTables_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_ResourceTables_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy],
    CONSTRAINT [DF_t_ResourceTables_LastModifiedOn] DEFAULT (getdate()) FOR [LastModifiedOn],
    CONSTRAINT [DF_t_ResourceTables_LastModifiedBy] DEFAULT (suser_sname()) FOR [LastModifiedBy]
GO

ALTER TABLE [dbo].[t_StringExportLabel] ADD 
    CONSTRAINT [DF_t_StringExportLabel_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_StringExportLabel_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy],
    CONSTRAINT [DF_t_StringExportLabel_LastModifiedOn] DEFAULT (getdate()) FOR [LastModifiedOn],
    CONSTRAINT [DF_t_StringExportLabel_LastModifiedBy] DEFAULT (suser_sname()) FOR [LastModifiedBy]
GO

ALTER TABLE [dbo].[t_StringImportSession] ADD 
    CONSTRAINT [DF_t_StringImportSession_ImportedOn] DEFAULT (getdate()) FOR [ImportedOn],
    CONSTRAINT [DF_t_StringImportSession_ImportedBy] DEFAULT (suser_sname()) FOR [ImportedBy]
GO

ALTER TABLE [dbo].[t_StringTable] ADD 
    CONSTRAINT [DF_t_StringTable_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_StringTable_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy],
    CONSTRAINT [DF_t_StringTable_LastModifiedOn] DEFAULT (getdate()) FOR [LastModifiedOn],
    CONSTRAINT [DF_t_StringTable_LastModifiedBy] DEFAULT (suser_sname()) FOR [LastModifiedBy]
GO

ALTER TABLE [dbo].[t_StringType] ADD 
    CONSTRAINT [DF_t_StringType_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_StringType_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy],
    CONSTRAINT [DF_t_StringType_LastModifiedOn] DEFAULT (getdate()) FOR [LastModifiedOn],
    CONSTRAINT [DF_t_StringType_LastModifiedBy] DEFAULT (suser_sname()) FOR [LastModifiedBy],
    CONSTRAINT [DF_t_StringType_Exported] DEFAULT (0) FOR [Exported]
GO

ALTER TABLE [dbo].[t_StringVariant] ADD 
    CONSTRAINT [DF_t_StringVariant_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_StringVariant_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy],
    CONSTRAINT [DF_t_StringVariant_LastModifiedOn] DEFAULT (getdate()) FOR [LastModifiedOn],
    CONSTRAINT [DF_t_StringVariant_LastModifiedBy] DEFAULT (suser_sname()) FOR [LastModifiedBy]
GO

ALTER TABLE [dbo].[t_VOScriptInstanceManagement] ADD 
    CONSTRAINT [DF_t_VOScriptInstanceManagement_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_VOScriptInstanceManagement_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy]
GO

 CREATE  INDEX [IX1_t_VOScriptLineCharacterInternal] ON [dbo].[t_VOScriptLineCharacterInternal]([SPID], [StringID], [CharacterResRefID]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_ResourceDefinition] ADD 
    CONSTRAINT [DF_t_ResourceDefinition_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_ResourceDefinition_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy],
    CONSTRAINT [DF_t_ResourceDefinition_LastModifiedOn] DEFAULT (getdate()) FOR [LastModifiedOn],
    CONSTRAINT [DF_t_ResourceDefinition_LastModifiedBy] DEFAULT (suser_sname()) FOR [LastModifiedBy]
GO

ALTER TABLE [dbo].[t_ResourceTableRelationship] ADD 
    CONSTRAINT [DF_t_ResourceTableRelationship_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_ResourceTableRelationship_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy],
    CONSTRAINT [DF_t_ResourceTableRelationship_LastModifiedOn] DEFAULT (getdate()) FOR [LastModifiedOn],
    CONSTRAINT [DF_t_ResourceTableRelationship_LastModifiedBy] DEFAULT (suser_sname()) FOR [LastModifiedBy]
GO

ALTER TABLE [dbo].[t_String] ADD 
    CONSTRAINT [DF_t_String_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_String_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy],
    CONSTRAINT [DF_t_String_LastModifiedOn] DEFAULT (getdate()) FOR [LastModifiedOn],
    CONSTRAINT [DF_t_String_LastModifiedBy] DEFAULT (suser_sname()) FOR [LastModifiedBy]
GO

 CREATE  INDEX [IX_t_StringExportHistory] ON [dbo].[t_StringExportHistory]([StringID], [Status]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_t_StringExportHistory2] ON [dbo].[t_StringExportHistory]([StringID], [ModuleResRefVersionID]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_StringExportHistoryAdjustmentLog] ADD 
    CONSTRAINT [DF__t_StringE__Creat__48717679] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF__t_StringE__Creat__49659AB2] DEFAULT (suser_sname()) FOR [CreatedBy]
GO

 CREATE  INDEX [IX_t_StringExportHistoryAdjustmentLog] ON [dbo].[t_StringExportHistoryAdjustmentLog]([StringExportHistoryID]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_Module] ADD 
    CONSTRAINT [DF_t_Module_Directory] DEFAULT ('') FOR [Directory],
    CONSTRAINT [DF_t_Module_StartTag] DEFAULT ('') FOR [StartTag],
    CONSTRAINT [DF_t_Module_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_Module_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy],
    CONSTRAINT [DF_t_Module_LastModifiedOn] DEFAULT (getdate()) FOR [LastModifiedOn],
    CONSTRAINT [DF_t_Module_LastModifiedBy] DEFAULT (suser_sname()) FOR [LastModifiedBy],
    CONSTRAINT [DF_t_Module_Variable2da] DEFAULT ('var_module') FOR [Variable2da],
    CONSTRAINT [DF_t_Module_IncludeInResBuild] DEFAULT (0) FOR [IncludeInResBuild],
    CONSTRAINT [DF_t_Module_RequiresLocalization] DEFAULT (0) FOR [RequiresLocalization],
    CONSTRAINT [DF_t_Module_RequiresVO] DEFAULT (0) FOR [RequiresVO],
    CONSTRAINT [DF_t_Module_StringIDBegin] DEFAULT ((-1)) FOR [StringIDBegin],
    CONSTRAINT [DF_t_Module_StringIDEnd] DEFAULT ((-1)) FOR [StringIDEnd],
    CONSTRAINT [DF_t_Module_StringIDLastUsed] DEFAULT ((-1)) FOR [StringIDLastUsed]
GO

ALTER TABLE [dbo].[t_StringSound] ADD 
    CONSTRAINT [DF_t_StringSound_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_StringSound_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy],
    CONSTRAINT [DF_t_StringSound_LastModifiedOn] DEFAULT (getdate()) FOR [LastModifiedOn],
    CONSTRAINT [DF_t_StringSound_LastModifiedBy] DEFAULT (suser_sname()) FOR [LastModifiedBy],
    CONSTRAINT [IX_t_StringSound] UNIQUE  NONCLUSTERED 
    (
        [StringID]
    )  ON [PRIMARY] 
GO

 CREATE  INDEX [IX_t_StringSound_FK1] ON [dbo].[t_StringSound]([StringID]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_ModuleAssociation] ADD 
    CONSTRAINT [DF_t_ModuleAssociation_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_ModuleAssociation_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy],
    CONSTRAINT [DF_t_ModuleAssociation_LastModifiedOn] DEFAULT (getdate()) FOR [LastModifiedOn],
    CONSTRAINT [DF_t_ModuleAssociation_LastModifiedBy] DEFAULT (suser_sname()) FOR [LastModifiedBy]
GO

 CREATE  INDEX [IX_t_ModuleAssociation] ON [dbo].[t_ModuleAssociation]([FullPath]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_Area] ADD 
    CONSTRAINT [DF_t_Area_Comments] DEFAULT ('') FOR [Comments],
    CONSTRAINT [DF_t_Area_NoTeleport] DEFAULT (1) FOR [NoTeleport],
    CONSTRAINT [DF_t_Area_NonHostile] DEFAULT (1) FOR [NonHostile],
    CONSTRAINT [DF_t_Area_AreaMap] DEFAULT ('') FOR [AreaMap],
    CONSTRAINT [DF_t_Area_AreaMapWidth] DEFAULT (0) FOR [AreaMapWidth],
    CONSTRAINT [DF_t_Area_AreaMapHeight] DEFAULT (0) FOR [AreaMapHeight],
    CONSTRAINT [DF_t_Area_AreaLayout] DEFAULT ('') FOR [AreaLayout],
    CONSTRAINT [DF_t_Area_NoPartyInPocket] DEFAULT (1) FOR [NoPartyInPocket],
    CONSTRAINT [DF_t_Area_Variable2da] DEFAULT ('var_area') FOR [Variable2da],
    CONSTRAINT [DF_t_Area_AreaMapNorth] DEFAULT (0) FOR [AreaMapNorth],
    CONSTRAINT [DF_t_Area_ReverbPreset] DEFAULT ('') FOR [ReverbPreset],
    CONSTRAINT [DF_t_Area_MusicPreset] DEFAULT ('') FOR [MusicPreset]
GO

 CREATE  INDEX [IX_t_Area_FK1] ON [dbo].[t_Area]([NameStringID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_t_Area1] ON [dbo].[t_Area]([AreaListResRefID]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_Conversation] ADD 
    CONSTRAINT [DF_t_Conversation_EndConversationPlotFlag] DEFAULT (0) FOR [EndConversationPlotFlag],
    CONSTRAINT [DF_t_Conversation_EndConversationParameter] DEFAULT (0) FOR [EndConversationParameter],
    CONSTRAINT [DF_t_Conversation_EndConversationParameterText] DEFAULT ('') FOR [EndConversationParameterText],
    CONSTRAINT [DF_t_Conversation_EndConversationResult] DEFAULT (1) FOR [EndConversationResult],
    CONSTRAINT [DF_t_Conversation_DefaultNPCSpeaker] DEFAULT ('OWNER') FOR [DefaultNPCSpeaker],
    CONSTRAINT [DF_t_Conversation_DefaultNPCListener] DEFAULT ('PLAYER') FOR [DefaultNPCListener],
    CONSTRAINT [DF_t_Conversation_DefaultPCListener] DEFAULT ('OWNER') FOR [DefaultPCListener],
    CONSTRAINT [DF_t_Conversation_PreviewStageUseFirstMatch] DEFAULT (1) FOR [PreviewStageUseFirstMatch],
    CONSTRAINT [DF_t_Conversation_PreviewStagePositionX] DEFAULT (0) FOR [PreviewStagePositionX],
    CONSTRAINT [DF_t_Conversation_PreviewStagePositionY] DEFAULT (0) FOR [PreviewStagePositionY],
    CONSTRAINT [DF_t_Conversation_PreviewStagePositionZ] DEFAULT (0) FOR [PreviewStagePositionZ],
    CONSTRAINT [DF_t_Conversation_PreviewStageOrientationX] DEFAULT (0) FOR [PreviewStageOrientationX],
    CONSTRAINT [DF_t_Conversation_PreviewStageOrientationY] DEFAULT (0) FOR [PreviewStageOrientationY],
    CONSTRAINT [DF_t_Conversation_PreviewStageOrientationZ] DEFAULT (0) FOR [PreviewStageOrientationZ],
    CONSTRAINT [DF_t_Conversation_StageTag] DEFAULT ('') FOR [StageTag],
    CONSTRAINT [DF_t_Conversation_AllCameraLocked] DEFAULT (0) FOR [AllCameraLocked],
    CONSTRAINT [DF_t_Conversation_AllGesturesLocked] DEFAULT (0) FOR [AllGesturesLocked],
    CONSTRAINT [DF_t_Conversation_AllPosesLocked] DEFAULT (0) FOR [AllPosesLocked],
    CONSTRAINT [DF_t_Conversation_AllRoboBradLocked] DEFAULT (0) FOR [AllRoboBradLocked],
    CONSTRAINT [DF_t_Conversation_StageAtCurrentLocation] DEFAULT (0) FOR [StageAtCurrentLocation],
    CONSTRAINT [DF_t_Conversation_AmbientSoundSetType] DEFAULT (0) FOR [AmbientSoundSetType],
    CONSTRAINT [DF_t_Conversation_OwnerIsHenchman] DEFAULT (0) FOR [OwnerIsHenchman],
    CONSTRAINT [DF_t_Conversation_VOHardTimeRestriction] DEFAULT (0) FOR [VOHardTimeRestriction]
GO

/****** The index created by the following statement is for internal use only. ******/
/****** It is not a real index but exists as statistics only. ******/
if (@@microsoftversion > 0x07000000 )
EXEC ('CREATE STATISTICS [Statistic_DefaultPCListener] ON [dbo].[t_Conversation] ([DefaultPCListener]) ')
GO

ALTER TABLE [dbo].[t_ConversationLine] ADD 
    CONSTRAINT [DF_t_ConversationLine_IsNPC] DEFAULT (0) FOR [IsPC],
    CONSTRAINT [DF_t_ConversationLine_LanguageID] DEFAULT (0) FOR [LanguageID],
    CONSTRAINT [DF_t_ConversationLine_ConditionParameter] DEFAULT (0) FOR [ConditionParameter],
    CONSTRAINT [DF_t_ConversationLine_ConditionParameterText] DEFAULT ('') FOR [ConditionParameterText],
    CONSTRAINT [DF_t_ConversationLine_ActionParameter] DEFAULT (0) FOR [ActionParameter],
    CONSTRAINT [DF_t_ConversationLine_ActionParameterText] DEFAULT ('') FOR [ActionParameterText],
    CONSTRAINT [DF_t_ConversationLine_Icon] DEFAULT (0) FOR [Icon],
    CONSTRAINT [DF_t_ConversationLine_Comment] DEFAULT ('') FOR [Comment],
    CONSTRAINT [DF_t_ConversationLine_VoiceOverComment] DEFAULT ('') FOR [VoiceOverComment],
    CONSTRAINT [DF_t_ConversationLine_ActionPlotFlag] DEFAULT (0) FOR [ActionPlotFlag],
    CONSTRAINT [DF_t_ConversationLine_ActionResult] DEFAULT (1) FOR [ActionResult],
    CONSTRAINT [DF_t_ConversationLine_ConditionPlotFlag] DEFAULT (0) FOR [ConditionPlotFlag],
    CONSTRAINT [DF_t_ConversationLine_ConditionResult] DEFAULT (1) FOR [ConditionResult],
    CONSTRAINT [DF_t_ConversationLine_EditorComment] DEFAULT ('') FOR [EditorComment],
    CONSTRAINT [DF_t_ConversationLine_Speaker] DEFAULT ('') FOR [Speaker],
    CONSTRAINT [DF_t_ConversationLine_Listener] DEFAULT ('') FOR [Listener],
    CONSTRAINT [DF_t_ConversationLine_Visibility] DEFAULT (0) FOR [Visibility],
    CONSTRAINT [DF_t_ConversationLine_Ambient] DEFAULT (0) FOR [Ambient],
    CONSTRAINT [DF_t_ConversationLine_CameraTag] DEFAULT ('') FOR [CameraTag],
    CONSTRAINT [DF_t_ConversationLine_SpeakerAnimation] DEFAULT ('') FOR [SpeakerAnimation],
    CONSTRAINT [DF_t_ConversationLine_Emotion] DEFAULT (0) FOR [Emotion],
    CONSTRAINT [DF_t_ConversationLine_RoboBradSeed] DEFAULT (0) FOR [RoboBradSeed],
    CONSTRAINT [DF_t_ConversationLine_RoboBradSeedOverride] DEFAULT (0) FOR [RoboBradSeedOverride],
    CONSTRAINT [DF_t_ConversationLine_RoboBradLocked] DEFAULT (0) FOR [RoboBradLocked],
    CONSTRAINT [DF_t_ConversationLine_PreviewStageUseFirstMatch] DEFAULT (1) FOR [PreviewStageUseFirstMatch],
    CONSTRAINT [DF_t_ConversationLine_PreviewStagePositionX] DEFAULT (0) FOR [PreviewStagePositionX],
    CONSTRAINT [DF_t_ConversationLine_PreviewStagePositionY] DEFAULT (0) FOR [PreviewStagePositionY],
    CONSTRAINT [DF_t_ConversationLine_PreviewStagePositionZ] DEFAULT (0) FOR [PreviewStagePositionZ],
    CONSTRAINT [DF_t_ConversationLine_PreviewStageOrientationX] DEFAULT (0) FOR [PreviewStageOrientationX],
    CONSTRAINT [DF_t_ConversationLine_PreviewStageOrientationY] DEFAULT (0) FOR [PreviewStageOrientationY],
    CONSTRAINT [DF_t_ConversationLine_PreviewStageOrientationZ] DEFAULT (0) FOR [PreviewStageOrientationZ],
    CONSTRAINT [DF_t_ConversationLine_Skip] DEFAULT (0) FOR [Skip],
    CONSTRAINT [DF_t_ConversationLine_FastPath] DEFAULT (0) FOR [FastPath],
    CONSTRAINT [DF_t_ConversationLine_StageTag] DEFAULT ('') FOR [StageTag],
    CONSTRAINT [DF_t_ConversationLine_AnimationsLocked] DEFAULT (0) FOR [AnimationsLocked],
    CONSTRAINT [DF_t_ConversationLine_PlaySoundEvents] DEFAULT (1) FOR [PlaySoundEvents],
    CONSTRAINT [DF_t_ConversationLine_CameraLocked] DEFAULT (0) FOR [CameraLocked],
    CONSTRAINT [DF_t_ConversationLine_SecondaryCameraTag] DEFAULT ('') FOR [SecondaryCameraTag],
    CONSTRAINT [DF_t_ConversationLine_SecondaryCameraDelay] DEFAULT (0) FOR [SecondaryCameraDelay],
    CONSTRAINT [DF_t_ConversationLine_UseAnimationDuration] DEFAULT (0) FOR [UseAnimationDuration],
    CONSTRAINT [DF_t_ConversationLine_NoVOInGame] DEFAULT (0) FOR [NoVOInGame],
    CONSTRAINT [DF_t_ConversationLine_RevertAnimation] DEFAULT (0) FOR [RevertAnimation],
    CONSTRAINT [DF_t_ConversationLine_Narration] DEFAULT (0) FOR [Narration],
    CONSTRAINT [DF_t_ConversationLine_SlideShowTexture] DEFAULT ('') FOR [SlideShowTexture],
    CONSTRAINT [DF_t_ConversationLine_StageAtCurrentLocation] DEFAULT (0) FOR [StageAtCurrentLocation],
    CONSTRAINT [CK_t_ConversationLine] CHECK ([Index] >= 0)
GO

 CREATE  INDEX [IX_t_ConversationLine_FK1] ON [dbo].[t_ConversationLine]([TextStringID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_t_ConversationLine_MRRVIDSpeaker] ON [dbo].[t_ConversationLine]([ModuleResRefVersionID], [Speaker]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_ConvLine_ActionPlotResRefID] ON [dbo].[t_ConversationLine]([ActionPlotResRefID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_ConvLine_ActionScriptResRefID] ON [dbo].[t_ConversationLine]([ActionScriptResRefID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_ConvLine_ConditionPlotResRefID] ON [dbo].[t_ConversationLine]([ConditionPlotResRefID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_ConvLine_ConditionScriptResRefID] ON [dbo].[t_ConversationLine]([ConditionScriptResRefID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_ConvLine_StageResRefID] ON [dbo].[t_ConversationLine]([StageResRefID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_ConvLine_CameraFunctionalShotResRefID] ON [dbo].[t_ConversationLine]([CameraFunctionalShotResRefID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_ConvLine_CustomCutsceneResRefID] ON [dbo].[t_ConversationLine]([CustomCutsceneResRefID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_t_ConversationLine_MRRVIDTextStringID] ON [dbo].[t_ConversationLine]([ModuleResRefVersionID], [TextStringID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_ConvLine_PreviewAreaResRefID] ON [dbo].[t_ConversationLine]([PreviewAreaResRefID]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_Creature] ADD 
    CONSTRAINT [DF_t_Creature_Tag] DEFAULT ('') FOR [Tag],
    CONSTRAINT [DF_t_Creature_Race] DEFAULT ((-1)) FOR [Race],
    CONSTRAINT [DF_t_Creature_Appearance] DEFAULT (15) FOR [Appearance],
    CONSTRAINT [DF_t_Creature_Gender] DEFAULT (1) FOR [Gender],
    CONSTRAINT [DF_t_Creature_Group] DEFAULT (3) FOR [Group],
    CONSTRAINT [DF_t_Creature_Selectable] DEFAULT (1) FOR [Selectable],
    CONSTRAINT [DF_t_Creature_Head] DEFAULT (1) FOR [Head],
    CONSTRAINT [DF_t_Creature_Class] DEFAULT (1) FOR [Class],
    CONSTRAINT [DF_t_Creature_Package] DEFAULT (1) FOR [Package],
    CONSTRAINT [DF_t_Creature_Comments] DEFAULT ('') FOR [Comments],
    CONSTRAINT [DF_t_Creature_Immortal] DEFAULT (0) FOR [Immortal],
    CONSTRAINT [DF_t_Creature_Plot] DEFAULT (0) FOR [Plot],
    CONSTRAINT [DF_t_Creature_PerceptionRange] DEFAULT (9) FOR [PerceptionRange],
    CONSTRAINT [DF_t_Creature_Gold] DEFAULT (0) FOR [Gold],
    CONSTRAINT [DF_t_Creature_Autobalance] DEFAULT (1) FOR [Autobalance],
    CONSTRAINT [DF_t_Creature_Hair] DEFAULT (1) FOR [Hair],
    CONSTRAINT [DF_t_Creature_Eyes] DEFAULT (1) FOR [Eyes],
    CONSTRAINT [DF_t_Creature_Variable2da] DEFAULT ('var_creature') FOR [Variable2da],
    CONSTRAINT [DF_t_Creature_Beard] DEFAULT (0) FOR [Beard],
    CONSTRAINT [DF_t_Creature_SkinTint] DEFAULT (0) FOR [SkinTint],
    CONSTRAINT [DF_t_Creature_Tattoo] DEFAULT (0) FOR [Tattoo],
    CONSTRAINT [DF_t_Creature_EyeTint] DEFAULT (0) FOR [EyeTint],
    CONSTRAINT [DF_t_Creature_HairTint] DEFAULT (0) FOR [HairTint],
    CONSTRAINT [DF_t_Creature_HeadMorph] DEFAULT ('') FOR [HeadMorph],
    CONSTRAINT [DF_t_Creature_Combatant] DEFAULT (0) FOR [Combatant],
    CONSTRAINT [DF_t_Creature_GUIBar] DEFAULT (0) FOR [GUIBar],
    CONSTRAINT [DF_t_Creature_BodyTintMask] DEFAULT (0) FOR [BodyTintMask],
    CONSTRAINT [DF_t_Creature_TattooTint] DEFAULT (0) FOR [TattooTint],
    CONSTRAINT [DF_t_Creature_NoPermanentDeath] DEFAULT (0) FOR [NoPermanentDeath],
    CONSTRAINT [DF_t_Creature_BodyTint] DEFAULT (0) FOR [BodyTint],
    CONSTRAINT [DF_t_Creature_Team] DEFAULT ((-1)) FOR [Team],
    CONSTRAINT [DF_t_Creature_PlotGiver] DEFAULT (0) FOR [PlotGiver],
    CONSTRAINT [DF_t_Creature_TreasureCategory] DEFAULT (0) FOR [TreasureCategory],
    CONSTRAINT [DF_Creature_PackageType] DEFAULT (0) FOR [PackageType],
    CONSTRAINT [DF_Creature_PackageAI] DEFAULT (0) FOR [PackageAI],
    CONSTRAINT [DF_t_Creature_MinLevel] DEFAULT (0) FOR [MinLevel],
    CONSTRAINT [DF_t_Creature_MaxLevel] DEFAULT (0) FOR [MaxLevel],
    CONSTRAINT [DF_t_Creature_ArtFidelity] DEFAULT (2) FOR [ArtFidelity]
GO

 CREATE  INDEX [IX_t_Creature_FK1] ON [dbo].[t_Creature]([NameStringID]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_Cutscene] ADD 
    CONSTRAINT [DF_t_Cutscene_RunTime] DEFAULT (60000000) FOR [RunTime],
    CONSTRAINT [DF_t_Cutscene_PrimaryActor] DEFAULT ((-1)) FOR [PrimaryActor],
    CONSTRAINT [DF_t_Cutscene_Animatic] DEFAULT ('') FOR [Animatic],
    CONSTRAINT [DF_t_Cutscene_BeforeKeyBasedTracks] DEFAULT (0) FOR [BeforeKeyBasedTracks],
    CONSTRAINT [DF_t_Cutscene_ShowDynamics] DEFAULT (0) FOR [ShowDynamics],
    CONSTRAINT [DF_t_Cutscene_PlaySoundEvents] DEFAULT (0) FOR [PlaySoundEvents],
    CONSTRAINT [DF_t_Cutscene_UseMasterForLOD] DEFAULT (0) FOR [UseMasterForLOD],
    CONSTRAINT [DF_t_Cutscene_AreaPosOffsetX] DEFAULT (0) FOR [AreaPosOffsetX],
    CONSTRAINT [DF_t_Cutscene_AreaPosOffsetY] DEFAULT (0) FOR [AreaPosOffsetY],
    CONSTRAINT [DF_t_Cutscene_AreaPosOffsetZ] DEFAULT (0) FOR [AreaPosOffsetZ],
    CONSTRAINT [DF_t_Cutscene_AreaOriOffsetX] DEFAULT (0) FOR [AreaOriOffsetX],
    CONSTRAINT [DF_t_Cutscene_AreaOriOffsetY] DEFAULT (0) FOR [AreaOriOffsetY],
    CONSTRAINT [DF_t_Cutscene_AreaOriOffsetZ] DEFAULT (0) FOR [AreaOriOffsetZ],
    CONSTRAINT [DF_t_Cutscene_EnableLevelFBEs] DEFAULT (1) FOR [EnableLevelFBEs],
    CONSTRAINT [DF_t_Cutscene_FPS] DEFAULT (30) FOR [FPS],
    CONSTRAINT [DF_t_Cutscene_BeforeFixingGADOffsetBaking] DEFAULT (0) FOR [BeforeFixingGADOffsetBaking],
    CONSTRAINT [DF_t_Cutscene_PlayUntilVOCompletes] DEFAULT (0) FOR [PlayUntilVOCompletes],
    CONSTRAINT [DF_t_Cutscene_AreaRequired] DEFAULT (1) FOR [AreaRequired],
    CONSTRAINT [DF_t_Cutscene_ShadowRadius] DEFAULT (0) FOR [ShadowRadius],
    CONSTRAINT [DF_t_Cutscene_LightOcclusion] DEFAULT (0) FOR [LightOcclusion]
GO

ALTER TABLE [dbo].[t_CutsceneAction] ADD 
    CONSTRAINT [DF_t_CutsceneAction_int1] DEFAULT (0) FOR [int1],
    CONSTRAINT [DF_t_CutsceneAction_int2] DEFAULT (0) FOR [int2],
    CONSTRAINT [DF_t_CutsceneAction_byte1] DEFAULT (0) FOR [byte1],
    CONSTRAINT [DF_t_CutsceneAction_real1] DEFAULT (0) FOR [real1],
    CONSTRAINT [DF_t_CutsceneAction_real2] DEFAULT (0) FOR [real2],
    CONSTRAINT [DF_t_CutsceneAction_real3] DEFAULT (0) FOR [real3],
    CONSTRAINT [DF_t_CutsceneAction_real4] DEFAULT (0) FOR [real4],
    CONSTRAINT [DF_t_CutsceneAction_real5] DEFAULT (0) FOR [real5],
    CONSTRAINT [DF_t_CutsceneAction_real6] DEFAULT (0) FOR [real6],
    CONSTRAINT [DF_t_CutsceneAction_bit1] DEFAULT (0) FOR [bit1],
    CONSTRAINT [DF_t_CutsceneAction_bit2] DEFAULT (0) FOR [bit2],
    CONSTRAINT [DF_t_CutsceneAction_varchar1] DEFAULT ('') FOR [varchar1],
    CONSTRAINT [DF_t_CutsceneAction_varchar2] DEFAULT ('') FOR [varchar2],
    CONSTRAINT [DF_t_CutsceneAction_int3] DEFAULT (0) FOR [int3],
    CONSTRAINT [DF_t_CutsceneAction_int4] DEFAULT (0) FOR [int4],
    CONSTRAINT [DF_t_CutsceneAction_int5] DEFAULT (0) FOR [int5],
    CONSTRAINT [DF_t_CutsceneAction_LoopingEndTime] DEFAULT (0) FOR [LoopingEndTime],
    CONSTRAINT [DF_t_CutsceneAction_varchar3] DEFAULT ('') FOR [varchar3],
    CONSTRAINT [DF_t_CutsceneAction_bit3] DEFAULT (0) FOR [bit3],
    CONSTRAINT [DF_t_CutsceneAction_GroupID] DEFAULT (0) FOR [GroupID],
    CONSTRAINT [DF_t_CutsceneAction_Infinite] DEFAULT (0) FOR [Infinite],
    CONSTRAINT [DF_t_CutsceneAction_bit4] DEFAULT (0) FOR [bit4],
    CONSTRAINT [DF_t_CutsceneAction_bit5] DEFAULT (0) FOR [bit5]
GO

 CREATE  INDEX [IX_CutsceneAction_ResRefID1] ON [dbo].[t_CutsceneAction]([ResRefID1]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_t_CutsceneAction_MRRVIDTypeInt1] ON [dbo].[t_CutsceneAction]([ModuleResRefVersionID], [Type], [int1]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_CutsceneObject] ADD 
    CONSTRAINT [DF_t_CutsceneObject_Model] DEFAULT ('') FOR [Model],
    CONSTRAINT [DF_t_CutsceneObject_WalkmeshInitial] DEFAULT (1) FOR [WalkmeshInitial],
    CONSTRAINT [DF_t_CutsceneObject_GlobalActor] DEFAULT (0) FOR [GlobalActor],
    CONSTRAINT [DF_t_CutsceneObject_PositionX] DEFAULT (0) FOR [PositionX],
    CONSTRAINT [DF_t_CutsceneObject_PositionY] DEFAULT (0) FOR [PositionY],
    CONSTRAINT [DF_t_CutsceneObject_PositionZ] DEFAULT (0) FOR [PositionZ],
    CONSTRAINT [DF_t_CutsceneObject_OrientationX] DEFAULT (0) FOR [OrientationX],
    CONSTRAINT [DF_t_CutsceneObject_OrientationY] DEFAULT (0) FOR [OrientationY],
    CONSTRAINT [DF_t_CutsceneObject_OrientationZ] DEFAULT (0) FOR [OrientationZ],
    CONSTRAINT [DF_t_CutsceneObject_Tag] DEFAULT ('') FOR [Name],
    CONSTRAINT [DF_t_CutsceneObject_real1] DEFAULT (0) FOR [real1],
    CONSTRAINT [DF_t_CutsceneObject_real2] DEFAULT (0) FOR [real2],
    CONSTRAINT [DF_t_CutsceneObject_real3] DEFAULT (0) FOR [real3],
    CONSTRAINT [DF_t_CutsceneObject_real4] DEFAULT (0) FOR [real4],
    CONSTRAINT [DF_t_CutsceneObject_int1] DEFAULT (0) FOR [int1],
    CONSTRAINT [DF_t_CutsceneObject_int2] DEFAULT (0) FOR [int2],
    CONSTRAINT [DF_t_CutsceneObject_AttachedToActorID] DEFAULT ((-1)) FOR [AttachedToActorID],
    CONSTRAINT [DF_t_CutsceneObject_real5] DEFAULT (0) FOR [real5],
    CONSTRAINT [DF_t_CutsceneObject_UsePose] DEFAULT (0) FOR [UsePose],
    CONSTRAINT [DF_t_CutsceneObject_Pose] DEFAULT ((-1)) FOR [Pose],
    CONSTRAINT [DF_t_CutsceneObject_PoseSpeed] DEFAULT (1) FOR [PoseSpeed],
    CONSTRAINT [DF_t_CutsceneObject_OriginX] DEFAULT (0) FOR [OriginX],
    CONSTRAINT [DF_t_CutsceneObject_OriginY] DEFAULT (0) FOR [OriginY],
    CONSTRAINT [DF_t_CutsceneObject_OriginZ] DEFAULT (0) FOR [OriginZ],
    CONSTRAINT [DF_t_CutsceneObject_OriginYaw] DEFAULT (0) FOR [OriginYaw],
    CONSTRAINT [DF_t_CutsceneObject_OriginPitch] DEFAULT (0) FOR [OriginPitch],
    CONSTRAINT [DF_t_CutsceneObject_OriginRoll] DEFAULT (0) FOR [OriginRoll],
    CONSTRAINT [DF_t_CutsceneObject_MappingTag] DEFAULT ('') FOR [MappingTag],
    CONSTRAINT [DF_t_CutsceneObject_TransitionDelay] DEFAULT (0) FOR [TransitionDelay],
    CONSTRAINT [DF_t_CutsceneObject_PreviousPose] DEFAULT ((-1)) FOR [PreviousPose],
    CONSTRAINT [DF_t_CutsceneObject_MappingRequired] DEFAULT (0) FOR [MappingRequired],
    CONSTRAINT [DF_t_CutsceneObject_ExportResRef] DEFAULT (1) FOR [ExportResRef],
    CONSTRAINT [DF_t_CutsceneObject_TargetActorID] DEFAULT ((-1)) FOR [TargetActorID],
    CONSTRAINT [DF_t_CutsceneObject_LOD] DEFAULT (0) FOR [LOD],
    CONSTRAINT [DF_t_CutsceneObject_ModelScale] DEFAULT (1) FOR [ModelScale]
GO

 CREATE  INDEX [IX_t_CutsceneObject] ON [dbo].[t_CutsceneObject]([ResRefID]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_Item] ADD 
    CONSTRAINT [DF_t_Item_BaseItemType] DEFAULT (2) FOR [BaseItemType],
    CONSTRAINT [DF_t_Item_Appearance] DEFAULT (2) FOR [Appearance],
    CONSTRAINT [DF_t_Item_MaterialType] DEFAULT ((-1)) FOR [MaterialType],
    CONSTRAINT [DF_t_Item_Tag] DEFAULT ('') FOR [Tag],
    CONSTRAINT [DF_t_Item_Plot] DEFAULT (0) FOR [Plot],
    CONSTRAINT [DF_t_Item_CostOverride] DEFAULT (0) FOR [CostOverride],
    CONSTRAINT [DF_t_Item_Comments] DEFAULT ('') FOR [Comments],
    CONSTRAINT [DF_t_Item_Variable2da] DEFAULT ('var_item') FOR [Variable2da],
    CONSTRAINT [DF_t_Item_Heraldry] DEFAULT (0) FOR [Heraldry],
    CONSTRAINT [DF_t_Item_TintOverride] DEFAULT (0) FOR [TintOverride],
    CONSTRAINT [DF_t_Item_Damaged] DEFAULT (0) FOR [Damaged],
    CONSTRAINT [DF_t_Item_OnHitEffectID] DEFAULT (0) FOR [OnHitEffectID],
    CONSTRAINT [DF_t_Item_OnHitPower] DEFAULT (0) FOR [OnHitPower],
    CONSTRAINT [DF_t_Item_RecipeType] DEFAULT (0) FOR [RecipeType],
    CONSTRAINT [DF_t_Item_Unique] DEFAULT (0) FOR [Unique],
    CONSTRAINT [DF_t_Item_MaterialProgression] DEFAULT ((-1)) FOR [MaterialProgression],
    CONSTRAINT [DF_t_Item_BodyTintMask] DEFAULT (0) FOR [BodyTintMask],
    CONSTRAINT [DF_t_Item_BodyTint] DEFAULT (0) FOR [BodyTint],
    CONSTRAINT [DF_t_Item_InventorySubgroup] DEFAULT (0) FOR [InventorySubgroup]
GO

 CREATE  INDEX [IX_t_Item_1] ON [dbo].[t_Item]([NameStringID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_t_Item_2] ON [dbo].[t_Item]([DescriptionStringID]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_Merchant] ADD 
    CONSTRAINT [DF_t_Merchant_Tag] DEFAULT ('') FOR [Tag],
    CONSTRAINT [DF_t_Merchant_Comments] DEFAULT ('') FOR [Comments],
    CONSTRAINT [DF_t_Merchant_SellMarkUp] DEFAULT (0) FOR [SellMarkUp],
    CONSTRAINT [DF_t_Merchant_BuyMarkDown] DEFAULT (0) FOR [BuyMarkDown],
    CONSTRAINT [DF_t_Merchant_BuyRestricted] DEFAULT (0) FOR [BuyRestricted],
    CONSTRAINT [DF_t_Merchant_Variable2da] DEFAULT ('var_merchant') FOR [Variable2da]
GO

ALTER TABLE [dbo].[t_ModuleResRef] ADD 
    CONSTRAINT [DF_t_ModuleResRef_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_ModuleResRef_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy],
    CONSTRAINT [DF_t_ModuleResRef_LastModifiedOn] DEFAULT (getdate()) FOR [LastModifiedOn],
    CONSTRAINT [DF_t_ModuleResRef_LastModifiedBy] DEFAULT (suser_sname()) FOR [LastModifiedBy]
GO

ALTER TABLE [dbo].[t_ModuleResRefVersion] ADD 
    CONSTRAINT [DF_t_ModuleResRefVersion_FolderName] DEFAULT ('') FOR [Folder],
    CONSTRAINT [DF_t_ModuleResRefVersion_Date] DEFAULT (getdate()) FOR [Date],
    CONSTRAINT [DF_t_ModuleResRefVersion_UserName] DEFAULT (suser_sname()) FOR [UserName],
    CONSTRAINT [DF_t_ModuleResRefVersion_Status] DEFAULT ('C') FOR [Status],
    CONSTRAINT [DF_t_ModuleResRefVersion_State] DEFAULT (0) FOR [State],
    CONSTRAINT [CK_t_ModuleResRefVersion_Status] CHECK ([Status] = 'C' or ([Status] = 'H' or [Status] = 'S'))
GO

 CREATE  INDEX [IX_t_ModuleResRefVersion] ON [dbo].[t_ModuleResRefVersion]([Name], [Status], [ModuleID], [ResRefID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX2_t_ModuleResRefVersion] ON [dbo].[t_ModuleResRefVersion]([ModuleID], [ResRefID], [Status], [Date]) ON [PRIMARY]
GO

 CREATE  INDEX [IX3_t_ModuleResRefVersion] ON [dbo].[t_ModuleResRefVersion]([ModuleID], [ResRefID], [OwnerModuleID], [Status], [Date]) ON [PRIMARY]
GO

 CREATE  INDEX [IX4_t_ModuleResRefVersion] ON [dbo].[t_ModuleResRefVersion]([ModuleID], [ResRefID], [Status], [Date], [OwnerModuleID]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_Placeable] ADD 
    CONSTRAINT [DF_t_Placeable_Tag] DEFAULT ('') FOR [Tag],
    CONSTRAINT [DF_t_Placeable_Group] DEFAULT (0) FOR [Group],
    CONSTRAINT [DF_t_Placeable_Comments] DEFAULT ('') FOR [Comments],
    CONSTRAINT [DF_t_Placeable_Appearance] DEFAULT (1) FOR [Appearance],
    CONSTRAINT [DF_t_Placeable_InitialAnimation] DEFAULT (0) FOR [InitialAnimation],
    CONSTRAINT [DF_t_Placeable_Health] DEFAULT (1) FOR [Health],
    CONSTRAINT [DF_t_Placeable_Indestructible] DEFAULT (0) FOR [Indestructible],
    CONSTRAINT [DF_t_Placeable_PickLockLevel] DEFAULT (1) FOR [PickLockLevel],
    CONSTRAINT [DF_t_Placeable_KeyTag] DEFAULT ('') FOR [KeyTag],
    CONSTRAINT [DF_t_Placeable_AutoRemoveKey] DEFAULT (0) FOR [AutoRemoveKey],
    CONSTRAINT [DF_t_Placeable_TrapDetectionDifficulty] DEFAULT (0) FOR [TrapDetectionDifficulty],
    CONSTRAINT [DF_t_Placeable_TrapDisarmDifficulty] DEFAULT (0) FOR [TrapDisarmDifficulty],
    CONSTRAINT [DF_t_Placeable_KeyRequired] DEFAULT (0) FOR [KeyRequired],
    CONSTRAINT [DF_t_Placeable_Useable] DEFAULT (1) FOR [Useable],
    CONSTRAINT [DF_t_Placeable_Plot] DEFAULT (0) FOR [Plot],
    CONSTRAINT [DF_t_Placeable_MaxHealth] DEFAULT (0) FOR [MaxHealth],
    CONSTRAINT [DF_t_Placeable_Variable2da] DEFAULT ('var_placeable') FOR [Variable2da],
    CONSTRAINT [DF_t_Placeable_Rank] DEFAULT (0) FOR [Rank],
    CONSTRAINT [DF_t_Placeable_TreasureCategory] DEFAULT (0) FOR [TreasureCategory],
    CONSTRAINT [DF_t_Placeable_Team] DEFAULT ((-1)) FOR [Team]
GO

 CREATE  INDEX [IX_t_Placeable_FK1] ON [dbo].[t_Placeable]([NameStringID]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_Plot] ADD 
    CONSTRAINT [DF_t_Plot_Priority] DEFAULT (1) FOR [Priority],
    CONSTRAINT [DF_t_Plot_GUID] DEFAULT (newid()) FOR [GUID],
    CONSTRAINT [DF_t_Plot_JournalImage] DEFAULT ('') FOR [JournalImage],
    CONSTRAINT [DF_t_Plot_EntryType] DEFAULT (1) FOR [EntryType],
    CONSTRAINT [DF_t_Plot_AllowPausing] DEFAULT (0) FOR [AllowPausing]
GO

ALTER TABLE [dbo].[t_PlotStatus] ADD 
    CONSTRAINT [DF_t_PlotStatus_Name] DEFAULT ('') FOR [Name],
    CONSTRAINT [DF_t_PlotStatus_RewardID] DEFAULT (0) FOR [RewardID],
    CONSTRAINT [DF_t_PlotStatus_Comment] DEFAULT ('') FOR [Comment],
    CONSTRAINT [DF_t_PlotStatus_AreaLocationTag] DEFAULT ('') FOR [AreaLocationTag]
GO

ALTER TABLE [dbo].[t_Script] ADD 
    CONSTRAINT [DF_t_Script_Text] DEFAULT ('') FOR [Text]
GO

 CREATE  INDEX [IX_ScriptReference_ResRefID] ON [dbo].[t_Script_Reference]([ReferencedResRefID]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_Stage] ADD 
    CONSTRAINT [DF_t_Stage_Comment] DEFAULT ('') FOR [Comment],
    CONSTRAINT [DF_t_Stage_Tag] DEFAULT ('') FOR [Tag],
    CONSTRAINT [DF_t_Stage_PositionX] DEFAULT (0) FOR [PositionX],
    CONSTRAINT [DF_t_Stage_PositionY] DEFAULT (0) FOR [PositionY],
    CONSTRAINT [DF_t_Stage_PositionZ] DEFAULT (0) FOR [PositionZ],
    CONSTRAINT [DF_t_Stage_Yaw] DEFAULT (0) FOR [Yaw]
GO

ALTER TABLE [dbo].[t_StringLanguage] ADD 
    CONSTRAINT [DF_t_StringLanguage_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_StringLanguage_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy],
    CONSTRAINT [DF_t_StringLanguage_LastModifiedOn] DEFAULT (getdate()) FOR [LastModifiedOn],
    CONSTRAINT [DF_t_StringLanguage_LastModifiedBy] DEFAULT (suser_sname()) FOR [LastModifiedBy]
GO

ALTER TABLE [dbo].[t_StringLanguageVariant] ADD 
    CONSTRAINT [DF_t_StringLanguageVariant_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_StringLanguageVariant_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy],
    CONSTRAINT [DF_t_StringLanguageVariant_LastModifiedOn] DEFAULT (getdate()) FOR [LastModifiedOn],
    CONSTRAINT [DF_t_StringLanguageVariant_LastModifiedBy] DEFAULT (suser_sname()) FOR [LastModifiedBy],
    CONSTRAINT [IX_t_StringLanguageVariant] UNIQUE  NONCLUSTERED 
    (
        [StringLanguageID],
        [StringVariantID]
    )  ON [PRIMARY] 
GO

 CREATE  INDEX [IX_t_StringLanguageVariant_FK2] ON [dbo].[t_StringLanguageVariant]([StringVariantID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX1_t_StringLanguageVariantVersion] ON [dbo].[t_StringLanguageVariantVersion]([StringImportSessionID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX2_t_StringLanguageVariantVersion] ON [dbo].[t_StringLanguageVariantVersion]([StringLanguageVariantID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX3_t_StringLanguageVariantVersion] ON [dbo].[t_StringLanguageVariantVersion]([Status]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_StringText] ADD 
    CONSTRAINT [DF_t_StringText_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_StringText_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy],
    CONSTRAINT [DF_t_StringText_LastMajorUpdateOn] DEFAULT (getdate()) FOR [LastMajorUpdateOn],
    CONSTRAINT [DF_t_StringText_LastMajorUpdateBy] DEFAULT (suser_sname()) FOR [LastMajorUpdateBy],
    CONSTRAINT [DF_t_StringText_LastMinorUpdateOn] DEFAULT (getdate()) FOR [LastMinorUpdateOn],
    CONSTRAINT [DF_t_StringText_LastMinorUpdateBy] DEFAULT (suser_sname()) FOR [LastMinorUpdateBy],
    CONSTRAINT [DF_t_StringText_MinorUpdateCount] DEFAULT (0) FOR [MinorUpdateCount],
    CONSTRAINT [DF_t_StringText_WordCount] DEFAULT (0) FOR [WordCount],
    CONSTRAINT [DF_t_StringText_StringIsCopy] DEFAULT (0) FOR [StringIsCopy],
    CONSTRAINT [DF_t_StringText_LastModifiedOn] DEFAULT (getdate()) FOR [LastModifiedOn],
    CONSTRAINT [DF_t_StringText_LastModifiedBy] DEFAULT (suser_sname()) FOR [LastModifiedBy],
    CONSTRAINT [DF_t_StringText_VORequestOn] DEFAULT (getdate()) FOR [VORequestOn],
    CONSTRAINT [DF_t_StringText_ReRecord] DEFAULT (0) FOR [ReRecord]
GO

 CREATE  INDEX [IX_t_StringText_FK1] ON [dbo].[t_StringText]([StringID], [ModuleResRefVersionID], [WordCount], [VORequestOn]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_t_StringText_FK2] ON [dbo].[t_StringText]([StringLanguageVariantID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_t_StringText] ON [dbo].[t_StringText]([ModuleResRefVersionID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_t_StringText_TextAudit] ON [dbo].[t_StringText]([StringID], [ModuleResRefVersionID], [LastMinorUpdateOn], [LastMajorUpdateOn]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_t_StringVersion_StringIDMRRVIDStringTypeID] ON [dbo].[t_StringVersion]([StringID], [ModuleResRefVersionID], [StringTypeID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_t_StringVersion_MRRVIDStringIDStringTypeID] ON [dbo].[t_StringVersion]([ModuleResRefVersionID], [StringID], [StringTypeID]) WITH  FILLFACTOR = 90 ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_Trigger] ADD 
    CONSTRAINT [DF_t_Trigger_Tag] DEFAULT ('') FOR [Tag],
    CONSTRAINT [DF_t_Trigger_Group] DEFAULT (0) FOR [Group],
    CONSTRAINT [DF_t_Trigger_Comments] DEFAULT ('') FOR [Comments],
    CONSTRAINT [DF_t_Trigger_LinkedTo] DEFAULT ('') FOR [LinkedTo],
    CONSTRAINT [DF_t_Trigger_Variable2da] DEFAULT ('var_trigger') FOR [Variable2da]
GO

ALTER TABLE [dbo].[t_VOScript] ADD 
    CONSTRAINT [DF_t_VOScript_PlayerScript] DEFAULT (0) FOR [PlayerScript],
    CONSTRAINT [DF_t_VOScript_IsActive] DEFAULT (1) FOR [IsActive]
GO

 CREATE  INDEX [IX_t_VOScript_Resource] ON [dbo].[t_VOScript]([ResourceModuleID], [ResourceResRefID]) ON [PRIMARY]
GO

 CREATE  INDEX [IX_t_VOScript_Character] ON [dbo].[t_VOScript]([CharacterModuleID], [CharacterResRefID]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_AreaAudioVolume] ADD 
    CONSTRAINT [DF_t_AreaAudioVolume_PositionX] DEFAULT (0) FOR [PositionX],
    CONSTRAINT [DF_t_AreaAudioVolume_PositionY] DEFAULT (0) FOR [PositionY],
    CONSTRAINT [DF_t_AreaAudioVolume_PositionZ] DEFAULT (0) FOR [PositionZ],
    CONSTRAINT [DF_t_AreaAudioVolume_OrientationX] DEFAULT (0) FOR [OrientationX],
    CONSTRAINT [DF_t_AreaAudioVolume_OrientationY] DEFAULT (0) FOR [OrientationY],
    CONSTRAINT [DF_t_AreaAudioVolume_OrientationZ] DEFAULT (0) FOR [OrientationZ],
    CONSTRAINT [DF_t_AreaAudioVolume_Tag] DEFAULT ('') FOR [Tag],
    CONSTRAINT [DF_t_AreaAudioVolume_AudioVolumeName] DEFAULT ('') FOR [AudioVolumeName],
    CONSTRAINT [DF_t_AreaAudioVolume_Comments] DEFAULT ('') FOR [Comments],
    CONSTRAINT [DF_t_AreaAudioVolume_ReverbPreset] DEFAULT ('') FOR [ReverbPreset],
    CONSTRAINT [DF_t_AreaAudioVolume_GUID] DEFAULT ('{00000000-0000-0000-0000-000000000000}') FOR [GUID]
GO

ALTER TABLE [dbo].[t_AreaAudioVolumeGeometry] ADD 
    CONSTRAINT [DF_t_AreaAudioVolumeGeometry_VertexX] DEFAULT (0) FOR [VertexX],
    CONSTRAINT [DF_t_AreaAudioVolumeGeometry_VertexY] DEFAULT (0) FOR [VertexY],
    CONSTRAINT [DF_t_AreaAudioVolumeGeometry_VertexZ] DEFAULT (0) FOR [VertexZ]
GO

ALTER TABLE [dbo].[t_AreaAudioVolumeSound] ADD 
    CONSTRAINT [DF_t_AreaAudioVolumeSound_Active] DEFAULT (1) FOR [Active],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_Comments] DEFAULT ('') FOR [Comments],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_PositionX] DEFAULT (0) FOR [PositionX],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_PositionY] DEFAULT (0) FOR [PositionY],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_PositionZ] DEFAULT (0) FOR [PositionZ],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_OrientationX] DEFAULT (0) FOR [OrientationX],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_OrientationY] DEFAULT (0) FOR [OrientationY],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_OrientationZ] DEFAULT (0) FOR [OrientationZ],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_Tag] DEFAULT ('') FOR [Tag],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_SoundName] DEFAULT ('') FOR [SoundName],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_Volume] DEFAULT (0) FOR [Volume],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_Pitch] DEFAULT (0) FOR [Pitch],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_FadeIn] DEFAULT (0) FOR [FadeIn],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_FadeOut] DEFAULT (0) FOR [FadeOut],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_MaxRangeMult] DEFAULT (0) FOR [MaxRangeMult],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_ConeInside] DEFAULT (0) FOR [ConeInside],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_ConeOutside] DEFAULT (0) FOR [ConeOutside],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_ConeOutsideVolume] DEFAULT (0) FOR [ConeOutsideVolume],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_Priority] DEFAULT (0) FOR [Priority],
    CONSTRAINT [DF_t_AreaAudioVolumeSound_Occludable] DEFAULT (1) FOR [Occludable]
GO

ALTER TABLE [dbo].[t_AreaMusicVolumeGeometry] ADD 
    CONSTRAINT [DF_t_AreaMusicVolumeGeometry_VertexX] DEFAULT (0) FOR [VertexX],
    CONSTRAINT [DF_t_AreaMusicVolumeGeometry_VertexY] DEFAULT (0) FOR [VertexY],
    CONSTRAINT [DF_t_AreaMusicVolumeGeometry_VertexZ] DEFAULT (0) FOR [VertexZ]
GO

ALTER TABLE [dbo].[t_AreaObjectGeometry] ADD 
    CONSTRAINT [DF_t_AreaObjectGeometry_VertexX] DEFAULT (0) FOR [VertexX],
    CONSTRAINT [DF_t_AreaObjectGeometry_VertexY] DEFAULT (0) FOR [VertexY],
    CONSTRAINT [DF_t_AreaObjectGeometry_VertexZ] DEFAULT (0) FOR [VertexZ]
GO

ALTER TABLE [dbo].[t_AreaReverbVolume] ADD 
    CONSTRAINT [DF_t_AreaReverbVolume_PositionX] DEFAULT (0) FOR [PositionX],
    CONSTRAINT [DF_t_AreaReverbVolume_PositionY] DEFAULT (0) FOR [PositionY],
    CONSTRAINT [DF_t_AreaReverbVolume_PositionZ] DEFAULT (0) FOR [PositionZ],
    CONSTRAINT [DF_t_AreaReverbVolume_OrientationX] DEFAULT (0) FOR [OrientationX],
    CONSTRAINT [DF_t_AreaReverbVolume_OrientationY] DEFAULT (0) FOR [OrientationY],
    CONSTRAINT [DF_t_AreaReverbVolume_OrientationZ] DEFAULT (0) FOR [OrientationZ],
    CONSTRAINT [DF_t_AreaReverbVolume_Tag] DEFAULT ('') FOR [Tag],
    CONSTRAINT [DF_t_AreaReverbVolume_ReverbVolumeName] DEFAULT ('') FOR [ReverbVolumeName],
    CONSTRAINT [DF_t_AreaReverbVolume_ReverbPreset] DEFAULT ('') FOR [ReverbPreset],
    CONSTRAINT [DF_t_AreaReverbVolume_Comments] DEFAULT ('') FOR [Comments],
    CONSTRAINT [DF_t_AreaReverbVolume_Priority] DEFAULT (0) FOR [Priority],
    CONSTRAINT [DF_t_AreaReverbVolume_GUID] DEFAULT ('{00000000-0000-0000-0000-000000000000}') FOR [GUID]
GO

ALTER TABLE [dbo].[t_AreaReverbVolumeGeometry] ADD 
    CONSTRAINT [DF_t_AreaReverbVolumeGeometry_VertexX] DEFAULT (0) FOR [VertexX],
    CONSTRAINT [DF_t_AreaReverbVolumeGeometry_VertexY] DEFAULT (0) FOR [VertexY],
    CONSTRAINT [DF_t_AreaReverbVolumeGeometry_VertexZ] DEFAULT (0) FOR [VertexZ]
GO

ALTER TABLE [dbo].[t_AreaSound] ADD 
    CONSTRAINT [DF_t_AreaSound_Active] DEFAULT (1) FOR [Active],
    CONSTRAINT [DF_t_AreaSound_Comments] DEFAULT ('') FOR [Comments],
    CONSTRAINT [DF_t_AreaSound_PositionX] DEFAULT (0) FOR [PositionX],
    CONSTRAINT [DF_t_AreaSound_PositionY] DEFAULT (0) FOR [PositionY],
    CONSTRAINT [DF_t_AreaSound_PositionZ] DEFAULT (0) FOR [PositionZ],
    CONSTRAINT [DF_t_AreaSound_OrientationX] DEFAULT (0) FOR [OrientationX],
    CONSTRAINT [DF_t_AreaSound_OrientationY] DEFAULT (0) FOR [OrientationY],
    CONSTRAINT [DF_t_AreaSound_OrientationZ] DEFAULT (0) FOR [OrientationZ],
    CONSTRAINT [DF_t_AreaSound_Tag] DEFAULT ('') FOR [Tag],
    CONSTRAINT [DF_t_AreaSound_SoundName] DEFAULT ('') FOR [SoundName],
    CONSTRAINT [DF_t_AreaSound_Volume] DEFAULT (0) FOR [Volume],
    CONSTRAINT [DF_t_AreaSound_Pitch] DEFAULT (0) FOR [Pitch],
    CONSTRAINT [DF_t_AreaSound_FadeIn] DEFAULT (0) FOR [FadeIn],
    CONSTRAINT [DF_t_AreaSound_FadeOut] DEFAULT (0) FOR [FadeOut],
    CONSTRAINT [DF_t_AreaSound_MaxRangeMult] DEFAULT (0) FOR [MaxRangeMult],
    CONSTRAINT [DF_t_AreaSound_ConeInside] DEFAULT (0) FOR [ConeInside],
    CONSTRAINT [DF_t_AreaSound_ConeOutside] DEFAULT (0) FOR [ConeOutside],
    CONSTRAINT [DF_t_AreaSound_ConeOutsideVolume] DEFAULT (0) FOR [ConeOutsideVolume],
    CONSTRAINT [DF_t_AreaSound_Priority] DEFAULT (0) FOR [Priority],
    CONSTRAINT [DF_t_AreaSound_Occludable] DEFAULT (1) FOR [Occludable],
    CONSTRAINT [DF_t_AreaSound_GUID] DEFAULT ('{00000000-0000-0000-0000-000000000000}') FOR [GUID]
GO

ALTER TABLE [dbo].[t_AreaWaypoint] ADD 
    CONSTRAINT [DF_t_AreaWaypoint_PositionX] DEFAULT (0) FOR [PositionX],
    CONSTRAINT [DF_t_AreaWaypoint_PositionY] DEFAULT (0) FOR [PositionY],
    CONSTRAINT [DF_t_AreaWaypoint_PositionZ] DEFAULT (0) FOR [PositionZ],
    CONSTRAINT [DF_t_AreaWaypoint_OrientationX] DEFAULT (0) FOR [OrientationX],
    CONSTRAINT [DF_t_AreaWaypoint_OrientationY] DEFAULT (0) FOR [OrientationY],
    CONSTRAINT [DF_t_AreaWaypoint_OrientationZ] DEFAULT (0) FOR [OrientationZ],
    CONSTRAINT [DF_t_AreaWaypoint_Tag] DEFAULT ('') FOR [Tag],
    CONSTRAINT [DF_t_AreaWaypoint_WaypointName] DEFAULT ('') FOR [WaypointName],
    CONSTRAINT [DF_t_AreaWaypoint_Group] DEFAULT (0) FOR [Group],
    CONSTRAINT [DF_t_AreaWaypoint_MapNoteEnabled] DEFAULT (0) FOR [MapNoteEnabled],
    CONSTRAINT [DF_t_AreaWaypoint_Colour] DEFAULT (1) FOR [Colour],
    CONSTRAINT [DF_t_AreaWaypoint_Comments] DEFAULT ('') FOR [Comments],
    CONSTRAINT [DF_t_AreaWaypoint_MapNoteType] DEFAULT (0) FOR [MapNoteType],
    CONSTRAINT [DF_t_AreaWaypoint_GUID] DEFAULT ('{00000000-0000-0000-0000-000000000000}') FOR [GUID]
GO

ALTER TABLE [dbo].[t_ConversationAnimations] ADD 
    CONSTRAINT [DF_t_ConversationAnimations_Locked] DEFAULT (0) FOR [Locked]
GO

ALTER TABLE [dbo].[t_CreatureAbility] ADD 
    CONSTRAINT [DF_t_CreatureAbility_Level] DEFAULT (0) FOR [Level],
    CONSTRAINT [CK_t_CreatureAbility] CHECK ([Type] >= 0 and [Type] <= 2)
GO

ALTER TABLE [dbo].[t_CutsceneActionFBEParameter] ADD 
    CONSTRAINT [DF_t_CutsceneActionFBEParameter_Name] DEFAULT ('') FOR [Name],
    CONSTRAINT [DF_t_CutsceneActionFBEParameter_Animatable] DEFAULT (0) FOR [Animatable],
    CONSTRAINT [DF_t_CutsceneActionFBEParameter_Value] DEFAULT (0) FOR [Value]
GO

ALTER TABLE [dbo].[t_ItemProperty] ADD 
    CONSTRAINT [DF_t_ItemProperty_PropertyID] DEFAULT (0) FOR [PropertyID],
    CONSTRAINT [DF_t_ItemProperty_Power] DEFAULT (0) FOR [Power]
GO

ALTER TABLE [dbo].[t_MapPin] ADD 
    CONSTRAINT [DF_t_MapPin_PinType] DEFAULT (0) FOR [PinType],
    CONSTRAINT [DF_t_MapPin_InitialState] DEFAULT (0) FOR [InitialState],
    CONSTRAINT [DF_t_MapPin_TerrainType] DEFAULT (0) FOR [TerrainType],
    CONSTRAINT [DF_t_MapPin_LocationX] DEFAULT (0) FOR [LocationX],
    CONSTRAINT [DF_t_MapPin_LocationY] DEFAULT (0) FOR [LocationY],
    CONSTRAINT [DF_t_MapPin_Name] DEFAULT ('') FOR [Name],
    CONSTRAINT [DF_t_MapPin_AreaTag] DEFAULT ('') FOR [AreaTag],
    CONSTRAINT [DF_t_MapPin_WaypointOverride] DEFAULT ('') FOR [WaypointOverride]
GO

ALTER TABLE [dbo].[t_MapTrail] ADD 
    CONSTRAINT [DF_t_MapTrail_Name] DEFAULT ('') FOR [Name],
    CONSTRAINT [DF_t_MapTrail_Pin1Tag] DEFAULT ('') FOR [Pin1Tag],
    CONSTRAINT [DF_t_MapTrail_Pin2Tag] DEFAULT ('') FOR [Pin2Tag]
GO

ALTER TABLE [dbo].[t_MapTrailPoint] ADD 
    CONSTRAINT [DF_t_MapTrailPoint_LocationX] DEFAULT (0) FOR [LocationX],
    CONSTRAINT [DF_t_MapTrailPoint_LocationY] DEFAULT (0) FOR [LocationY]
GO

ALTER TABLE [dbo].[t_StageFBEParameter] ADD 
    CONSTRAINT [DF_t_StageFBEParameter_Name] DEFAULT ('') FOR [Name],
    CONSTRAINT [DF_t_StageFBEParameter_Value] DEFAULT (0) FOR [Value]
GO

ALTER TABLE [dbo].[t_VOSessionInstanceVersion] ADD 
    CONSTRAINT [DF_t_VOSessionInstanceVersion_CreatedOn] DEFAULT (getutcdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_VOSessionInstanceVersion_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy]
GO

ALTER TABLE [dbo].[t_VOSessionVersion] ADD 
    CONSTRAINT [DF_t_VOSessionVersion_CreatedOn] DEFAULT (getutcdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_VOSessionVersion_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy]
GO

ALTER TABLE [dbo].[t_AreaList] ADD 
    CONSTRAINT [DF_t_AreaList_Description] DEFAULT ('') FOR [Description]
GO

ALTER TABLE [dbo].[t_AreaMusicVolume] ADD 
    CONSTRAINT [DF_t_AreaMusicVolume_PositionX] DEFAULT (0) FOR [PositionX],
    CONSTRAINT [DF_t_AreaMusicVolume_PositionY] DEFAULT (0) FOR [PositionY],
    CONSTRAINT [DF_t_AreaMusicVolume_PositionZ] DEFAULT (0) FOR [PositionZ],
    CONSTRAINT [DF_t_AreaMusicVolume_OrientationX] DEFAULT (0) FOR [OrientationX],
    CONSTRAINT [DF_t_AreaMusicVolume_OrientationY] DEFAULT (0) FOR [OrientationY],
    CONSTRAINT [DF_t_AreaMusicVolume_OrientationZ] DEFAULT (0) FOR [OrientationZ],
    CONSTRAINT [DF_t_AreaMusicVolume_Tag] DEFAULT ('') FOR [Tag],
    CONSTRAINT [DF_t_AreaMusicVolume_MusicVolumeName] DEFAULT ('') FOR [MusicVolumeName],
    CONSTRAINT [DF_t_AreaMusicVolume_Comments] DEFAULT ('') FOR [Comments],
    CONSTRAINT [DF_t_AreaMusicVolume_EnterState] DEFAULT (0) FOR [EnterState],
    CONSTRAINT [DF_t_AreaMusicVolume_EnterDelay] DEFAULT (0) FOR [EnterStateDelay],
    CONSTRAINT [DF_t_AreaMusicVolume_ExitState] DEFAULT (0) FOR [ExitState],
    CONSTRAINT [DF_t_AreaMusicVolume_ExitDelay] DEFAULT (0) FOR [ExitStateDelay],
    CONSTRAINT [DF_t_AreaMusicVolume_ScriptDelay] DEFAULT (0) FOR [ScriptDelay],
    CONSTRAINT [DF_t_AreaMusicVolume_GUID] DEFAULT ('{00000000-0000-0000-0000-000000000000}') FOR [GUID]
GO

ALTER TABLE [dbo].[t_AreaObject] ADD 
    CONSTRAINT [DF_t_AreaObject_PositionX] DEFAULT (0) FOR [PositionX],
    CONSTRAINT [DF_t_AreaObject_PositionY] DEFAULT (0) FOR [PositionY],
    CONSTRAINT [DF_t_AreaObject_PositionZ] DEFAULT (0) FOR [PositionZ],
    CONSTRAINT [DF_t_AreaObject_OrientationX] DEFAULT (0) FOR [OrientationX],
    CONSTRAINT [DF_t_AreaObject_OrientationY] DEFAULT (0) FOR [OrientationY],
    CONSTRAINT [DF_t_AreaObject_OrientationZ] DEFAULT (0) FOR [OrientationZ],
    CONSTRAINT [DF_t_AreaObject_Active] DEFAULT (1) FOR [Active],
    CONSTRAINT [DF_t_AreaObject_Platform] DEFAULT (0) FOR [Platform],
    CONSTRAINT [DF_t_AreaObject_Tag] DEFAULT ('') FOR [Tag],
    CONSTRAINT [DF_t_AreaObject_InitialAnimation] DEFAULT (0) FOR [InitialAnimation],
    CONSTRAINT [DF_t_AreaObject_Team] DEFAULT ((-1)) FOR [Team],
    CONSTRAINT [DF_t_AreaObject_Trackable] DEFAULT (1) FOR [Trackable],
    CONSTRAINT [DF_t_AreaObject_RoomID1] DEFAULT ((-1)) FOR [RoomID1],
    CONSTRAINT [DF_t_AreaObject_RoomID2] DEFAULT ((-1)) FOR [RoomID2],
    CONSTRAINT [DF_t_AreaObject_Rank] DEFAULT ((-1)) FOR [Rank],
    CONSTRAINT [DF_t_AreaObject_TreasureCategory] DEFAULT ((-1)) FOR [TreasureCategory],
    CONSTRAINT [DF_t_AreaObject_WeaponsDrawn] DEFAULT (0) FOR [WeaponsDrawn],
    CONSTRAINT [DF_t_AreaObject_PickLockLevel] DEFAULT ((-1)) FOR [PickLockLevel],
    CONSTRAINT [DF_t_AreaObject_GUID] DEFAULT ('{00000000-0000-0000-0000-000000000000}') FOR [GUID],
    CONSTRAINT [DF_t_AreaObject_InteractionRadius] DEFAULT (0) FOR [InteractionRadius],
    CONSTRAINT [DF_t_AreaObject_TrapDetectionDifficulty] DEFAULT ((-1)) FOR [TrapDetectionDifficulty],
    CONSTRAINT [DF_t_AreaObject_TrapDisarmDifficulty] DEFAULT ((-1)) FOR [TrapDisarmDifficulty],
    CONSTRAINT [DF_t_AreaObject_Useable] DEFAULT ((-1)) FOR [Useable]
GO

 CREATE  INDEX [IX_t_AreaObject] ON [dbo].[t_AreaObject]([ObjectResRefID]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_Character] ADD 
    CONSTRAINT [DF_t_Character_Name] DEFAULT ('') FOR [Name],
    CONSTRAINT [DF_t_Character_Description] DEFAULT ('') FOR [Description],
    CONSTRAINT [DF_t_Character_Phonetic] DEFAULT ('') FOR [Phonetic],
    CONSTRAINT [DF_t_Character_Age] DEFAULT (0) FOR [Age],
    CONSTRAINT [DF_t_Character_Gender] DEFAULT (3) FOR [Gender],
    CONSTRAINT [DF_t_Character_Occupation] DEFAULT ('') FOR [Occupation],
    CONSTRAINT [DF_t_Character_Morals] DEFAULT ('') FOR [Morals],
    CONSTRAINT [DF_t_Character_Appearance] DEFAULT ('') FOR [Appearance],
    CONSTRAINT [DF_t_Character_Flaws] DEFAULT ('') FOR [Flaws],
    CONSTRAINT [DF_t_Character_Skills] DEFAULT ('') FOR [Skills],
    CONSTRAINT [DF_t_Character_SpeechPatterns] DEFAULT ('') FOR [SpeechPatterns],
    CONSTRAINT [DF_t_Character_VORecorded] DEFAULT (0) FOR [VORecorded],
    CONSTRAINT [DF_t_Character_CharacterType] DEFAULT (0) FOR [CharacterType],
    CONSTRAINT [DF_t_Character_Race] DEFAULT (3) FOR [Race],
    CONSTRAINT [DF_t_Character_Language] DEFAULT (0) FOR [Language],
    CONSTRAINT [DF_t_Character_Accent] DEFAULT ('') FOR [Accent],
    CONSTRAINT [DF_t_Character_Purpose] DEFAULT ('') FOR [Purpose],
    CONSTRAINT [DF_t_Character_RelationshipToPlayer] DEFAULT ('') FOR [RelationshipToPlayer],
    CONSTRAINT [DF_t_Character_Archetype] DEFAULT ('') FOR [Archetype],
    CONSTRAINT [DF_t_Character_Demeanor] DEFAULT ('') FOR [Demeanor],
    CONSTRAINT [DF_t_Character_ImageFilename] DEFAULT ('') FOR [ImageFilename],
    CONSTRAINT [DF_t_Character_PersonalBackground] DEFAULT ('') FOR [PersonalBackground],
    CONSTRAINT [DF_t_Character_CulturalBackground] DEFAULT ('') FOR [CulturalBackground],
    CONSTRAINT [DF_t_Character_Intelligence] DEFAULT (1) FOR [Intelligence],
    CONSTRAINT [DF_t_Character_TiesToOtherCharacters] DEFAULT ('') FOR [TiesToOtherCharacters],
    CONSTRAINT [DF_t_Character_CombatSoundsetNeeded] DEFAULT (0) FOR [CombatSoundsetNeeded],
    CONSTRAINT [DF_t_Character_Plots] DEFAULT ('') FOR [Plots],
    CONSTRAINT [DF_t_Character_Player] DEFAULT (0) FOR [Player],
    CONSTRAINT [DF_t_Character_VOCastingColor] DEFAULT (0x00ffffff) FOR [VOCastingColor],
    CONSTRAINT [DF_t_Character_VOCastingNotes] DEFAULT ('') FOR [VOCastingNotes],
    CONSTRAINT [DF_t_Character_SoundsetResRefIDIsSharedLink] DEFAULT (0) FOR [SoundsetResRefIDIsSharedLink]
GO

ALTER TABLE [dbo].[t_ConversationCinematics] ADD 
    CONSTRAINT [DF_t_ConversationCinematics_TagOverride] DEFAULT (0) FOR [TagOverride],
    CONSTRAINT [DF_t_ConversationCinematics_Tag] DEFAULT ('') FOR [Tag],
    CONSTRAINT [DF_t_ConversationCinematics_LookAtOverride] DEFAULT (0) FOR [LookAtOverride],
    CONSTRAINT [DF_t_ConversationCinematics_LookAt] DEFAULT ('') FOR [LookAt],
    CONSTRAINT [DF_t_ConversationCinematics_PoseOverride] DEFAULT (0) FOR [PoseOverride],
    CONSTRAINT [DF_t_ConversationCinematics_FunctionalShotActor] DEFAULT ('') FOR [FunctionalShotActor],
    CONSTRAINT [DF_t_ConversationCinematics_Pose] DEFAULT ((-1)) FOR [Pose],
    CONSTRAINT [DF_t_ConversationCinematics_HeadLookAtOverride] DEFAULT (0) FOR [HeadLookAtOverride],
    CONSTRAINT [DF_t_ConversationCinematics_HeadLookAt] DEFAULT ('') FOR [HeadLookAt],
    CONSTRAINT [DF_t_ConversationCinematics_ActivationAction] DEFAULT (0) FOR [ActivationAction],
    CONSTRAINT [DF_t_ConversationCinematics_TransitionDelay] DEFAULT (0) FOR [TransitionDelay],
    CONSTRAINT [DF_t_ConversationCinematics_MappingRequired] DEFAULT (1) FOR [MappingRequired],
    CONSTRAINT [DF_t_ConversationCinematics_LockPose] DEFAULT (0) FOR [LockPose],
    CONSTRAINT [DF_t_ConversationCinematics_HelmetOverride] DEFAULT (0) FOR [HelmetOverride],
    CONSTRAINT [DF_t_ConversationCinematics_Helmet] DEFAULT (0) FOR [Helmet],
    CONSTRAINT [DF_t_ConversationCinematics_WeaponsOverride] DEFAULT (0) FOR [WeaponsOverride],
    CONSTRAINT [DF_t_ConversationCinematics_Weapons] DEFAULT (0) FOR [Weapons]
GO

 CREATE  INDEX [IX_ConvCinematics_FunctionalShotResRefID] ON [dbo].[t_ConversationCinematics]([FunctionalShotResRefID]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_ConversationTransition] ADD 
    CONSTRAINT [DF_t_ConversationTransition_IsLink] DEFAULT (0) FOR [IsLink],
    CONSTRAINT [CK_t_ConversationTransit] CHECK ([FromIndex] >= (-1) and [ToIndex] >= 0)
GO

ALTER TABLE [dbo].[t_Inventory] ADD 
    CONSTRAINT [DF_t_Inventory_StackSize] DEFAULT (0) FOR [StackSize],
    CONSTRAINT [DF_t_Inventory_Droppable] DEFAULT (0) FOR [Droppable],
    CONSTRAINT [DF_t_Inventory_Stealable] DEFAULT (0) FOR [Stealable],
    CONSTRAINT [DF_t_Inventory_Infinite] DEFAULT (0) FOR [Infinite],
    CONSTRAINT [DF_t_Inventory_SetNumber] DEFAULT (0) FOR [SetNumber]
GO

ALTER TABLE [dbo].[t_Map] ADD 
    CONSTRAINT [DF_t_Map_Map] DEFAULT (0) FOR [Map],
    CONSTRAINT [DF_t_Map_Tag] DEFAULT ('') FOR [Tag]
GO

ALTER TABLE [dbo].[t_Role] ADD 
    CONSTRAINT [DF_t_Role_Name] DEFAULT ('') FOR [Name],
    CONSTRAINT [DF_t_Role_Description] DEFAULT ('') FOR [Description]
GO

ALTER TABLE [dbo].[t_StageObject] ADD 
    CONSTRAINT [DF_t_StageObject_LookingFrom] DEFAULT ('') FOR [LookingFrom],
    CONSTRAINT [DF_t_StageObject_LookingAtPrimary] DEFAULT ('') FOR [LookingAtPrimary],
    CONSTRAINT [DF_t_StageObject_CreatureResRefID] DEFAULT ('') FOR [CreatureResRefID],
    CONSTRAINT [DF_t_StageObject_Pose] DEFAULT ((-1)) FOR [Pose],
    CONSTRAINT [DF_t_StageObject_DefaultCamera] DEFAULT ('') FOR [DefaultCamera],
    CONSTRAINT [DF_t_StageObject_CloseUpCamera] DEFAULT ('') FOR [CloseUpCamera],
    CONSTRAINT [DF_t_StageObject_WideCamera] DEFAULT ('') FOR [WideCamera],
    CONSTRAINT [DF_t_StageObject_LookAtType] DEFAULT (1) FOR [LookAtType],
    CONSTRAINT [DF_t_StageObject_ApplyDOF] DEFAULT (1) FOR [ApplyDOF],
    CONSTRAINT [DF_t_StageObject_OverrideDOF] DEFAULT (0) FOR [OverrideDOF]
GO

 CREATE  INDEX [IX1_t_StringLanguageVariantText] ON [dbo].[t_StringLanguageVariantText]([StringID]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_VOScriptBatchPrint] ADD 
    CONSTRAINT [DF_t_VOScriptBatchPrint_SPID] DEFAULT (@@spid) FOR [SPID]
GO

ALTER TABLE [dbo].[t_VOScriptInstance] ADD 
    CONSTRAINT [DF_t_VOScriptInstance_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_VOScriptInstance_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy],
    CONSTRAINT [DF_t_VOScriptInstance_Comment] DEFAULT ('') FOR [Comment],
    CONSTRAINT [DF_t_voScriptInstance_OutputFolder] DEFAULT (N'') FOR [OutputFolder]
GO

ALTER TABLE [dbo].[t_VOScriptInstanceString] ADD 
    CONSTRAINT [DF_t_VOScriptInstanceString_IsForeign] DEFAULT (0) FOR [IsForeign],
    CONSTRAINT [DF_t_VOScriptInstanceManagement_LastModifiedOn] DEFAULT (getdate()) FOR [LastModifiedOn],
    CONSTRAINT [DF_t_VOScriptInstanceManagement_LastModifiedBy] DEFAULT (suser_sname()) FOR [LastModifiedBy],
    CONSTRAINT [DF_t_VOScriptInstanceString_StringVariantID] DEFAULT ((-1)) FOR [StringVariantID]
GO

 CREATE  INDEX [IX_t_VOScriptInstanceString] ON [dbo].[t_VOScriptInstanceString]([StringID], [Active], [Status]) ON [PRIMARY]
GO

ALTER TABLE [dbo].[t_VOScriptInstanceStringStatus] ADD 
    CONSTRAINT [DF_t_VOScriptInstanceStringStatus_CreatedOn] DEFAULT (getdate()) FOR [CreatedOn],
    CONSTRAINT [DF_t_VOScriptInstanceStringStatus_CreatedBy] DEFAULT (suser_sname()) FOR [CreatedBy]
GO

 CREATE  INDEX [IX_t_VOScriptInstanceStringStatus] ON [dbo].[t_VOScriptInstanceStringStatus]([VOScriptInstanceStringID], [Active]) ON [PRIMARY]
GO

GRANT  SELECT  ON [dbo].[t_CharacterDelta]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_CharacterDelta]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_GlobalParameters]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_GlobalParameters]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_JobProcessInformation]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_JobProcessInformation]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_KeyGenStringID]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_KeyGenStringID]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_ModuleType]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_ModuleType]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_ResourceTables]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_ResourceTables]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StringExportLabel]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StringExportLabel]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StringImportSession]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StringImportSession]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StringTable]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StringTable]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StringType]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StringType]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StringVariant]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StringVariant]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_VOScriptInstanceManagement]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_VOScriptInstanceManagement]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_VOScriptLineCharacterInternal]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_VOScriptLineCharacterInternal]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_VOSessionInstance]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_VOSessionInstance]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_ResourceDefinition]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_ResourceDefinition]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_ResourceTableRelationship]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_ResourceTableRelationship]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_String]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_String]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StringExportHistory]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StringExportHistory]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StringExportLabelResourceStats]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StringExportLabelResourceStats]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StringExportLabelStringTypeStats]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StringExportLabelStringTypeStats]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_ResRef]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_ResRef]  TO [bw_db_write]
GO

DENY  UPDATE ,  DELETE  ON [dbo].[t_StringExportHistoryAdjustmentLog]  TO [public] CASCADE 
GO

GRANT  SELECT  ON [dbo].[t_StringExportHistoryAdjustmentLog]  TO [bw_db_read]
GO

GRANT  INSERT  ON [dbo].[t_StringExportHistoryAdjustmentLog]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Module]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Module]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StringSound]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StringSound]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_ModuleAssociation]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_ModuleAssociation]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_ModuleVariable]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_ModuleVariable]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Area]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Area]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Conversation]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Conversation]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_ConversationLine]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_ConversationLine]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Creature]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Creature]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Cutscene]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Cutscene]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_CutsceneAction]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_CutsceneAction]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_CutsceneObject]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_CutsceneObject]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_CutsceneTrack]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_CutsceneTrack]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Item]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Item]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Merchant]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Merchant]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_ModuleResRef]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_ModuleResRef]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_ModuleResRefVersion]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_ModuleResRefVersion]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Placeable]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Placeable]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Plot]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Plot]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_PlotStatus]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_PlotStatus]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Script]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Script]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Script_Reference]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Script_Reference]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Stage]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Stage]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StringLanguage]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StringLanguage]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StringLanguageTag]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StringLanguageTag]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StringLanguageVariant]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StringLanguageVariant]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StringLanguageVariantVersion]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StringLanguageVariantVersion]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StringText]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StringText]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StringVersion]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StringVersion]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Trigger]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Trigger]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_VOScript]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_VOScript]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_AreaAudioVolume]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_AreaAudioVolume]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_AreaAudioVolumeGeometry]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_AreaAudioVolumeGeometry]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_AreaAudioVolumeSound]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_AreaAudioVolumeSound]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_AreaInstanceAssociations]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_AreaInstanceAssociations]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_AreaMusicVolumeGeometry]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_AreaMusicVolumeGeometry]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_AreaObjectGeometry]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_AreaObjectGeometry]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_AreaObjectVariable]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_AreaObjectVariable]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_AreaReverbVolume]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_AreaReverbVolume]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_AreaReverbVolumeGeometry]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_AreaReverbVolumeGeometry]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_AreaSound]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_AreaSound]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_AreaWaypoint]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_AreaWaypoint]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_ConversationAnimations]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_ConversationAnimations]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_CreatureAbility]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_CreatureAbility]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_CutsceneActionFBEParameter]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_CutsceneActionFBEParameter]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_CutsceneActionTransition]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_CutsceneActionTransition]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_ItemProperty]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_ItemProperty]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_MapPin]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_MapPin]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_MapTrail]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_MapTrail]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_MapTrailPoint]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_MapTrailPoint]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_MerchantRestrictedItem]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_MerchantRestrictedItem]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_PlotAssist]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_PlotAssist]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StageFBEParameter]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StageFBEParameter]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StageObjectReference]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StageObjectReference]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_VOSessionInstanceVersion]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_VOSessionInstanceVersion]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_VOSessionVersion]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_VOSessionVersion]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Variable]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Variable]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_AreaList]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_AreaList]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_AreaMusicVolume]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_AreaMusicVolume]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_AreaObject]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_AreaObject]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_AssociatedResource]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_AssociatedResource]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Character]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Character]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_ConversationCinematics]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_ConversationCinematics]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_ConversationTagMap]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_ConversationTagMap]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_ConversationTransition]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_ConversationTransition]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Inventory]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Inventory]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Map]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Map]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_Role]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_Role]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StageObject]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StageObject]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_StringLanguageVariantText]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_StringLanguageVariantText]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_VOScriptBatchPrint]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_VOScriptBatchPrint]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_VOScriptInstance]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_VOScriptInstance]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_VOScriptInstanceString]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_VOScriptInstanceString]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_VOScriptInstanceStringStatus]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_VOScriptInstanceStringStatus]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_VOScriptStringRevision]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_VOScriptStringRevision]  TO [bw_db_write]
GO

GRANT  SELECT  ON [dbo].[t_VOSession]  TO [bw_db_read]
GO

GRANT  UPDATE ,  INSERT ,  DELETE  ON [dbo].[t_VOSession]  TO [bw_db_write]
GO

ALTER TABLE [dbo].[t_ResourceDefinition] ADD 
    CONSTRAINT [FK_t_ResourceDefinition_t_ResourceTables] FOREIGN KEY 
    (
        [BaseResourceTableID]
    ) REFERENCES [dbo].[t_ResourceTables] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_ResourceTableRelationship] ADD 
    CONSTRAINT [FK_t_ResourceTableRelationship_t_ResourceTables] FOREIGN KEY 
    (
        [ParentResourceTableID]
    ) REFERENCES [dbo].[t_ResourceTables] (
        [ID]
    ),
    CONSTRAINT [FK_t_ResourceTableRelationship_t_ResourceTables1] FOREIGN KEY 
    (
        [ChildResourceTableID]
    ) REFERENCES [dbo].[t_ResourceTables] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_String] ADD 
    CONSTRAINT [FK_t_String_t_StringTable] FOREIGN KEY 
    (
        [StringTableID]
    ) REFERENCES [dbo].[t_StringTable] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_StringExportHistory] ADD 
    CONSTRAINT [FK_StringExportHistory_StringExportLabel] FOREIGN KEY 
    (
        [StringExportLabelID]
    ) REFERENCES [dbo].[t_StringExportLabel] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_StringExportLabelResourceStats] ADD 
    CONSTRAINT [FK_StringExportLabelResourceStats_StringExportLabel] FOREIGN KEY 
    (
        [StringExportLabelID]
    ) REFERENCES [dbo].[t_StringExportLabel] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_StringExportLabelStringTypeStats] ADD 
    CONSTRAINT [FK_StringExportLabelStringTypeStats_StringExportLabel] FOREIGN KEY 
    (
        [StringExportLabelID]
    ) REFERENCES [dbo].[t_StringExportLabel] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_ResRef] ADD 
    CONSTRAINT [FK_t_ResRef_t_ResourceDefinition] FOREIGN KEY 
    (
        [ResType]
    ) REFERENCES [dbo].[t_ResourceDefinition] (
        [ResType]
    )
GO

ALTER TABLE [dbo].[t_StringExportHistoryAdjustmentLog] ADD 
    CONSTRAINT [FK_StringExportHistoryAdjustmentLog_StringExportHistory] FOREIGN KEY 
    (
        [StringExportHistoryID]
    ) REFERENCES [dbo].[t_StringExportHistory] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_Module] ADD 
    CONSTRAINT [FK_t_Module_t_ModuleType] FOREIGN KEY 
    (
        [Type]
    ) REFERENCES [dbo].[t_ModuleType] (
        [ID]
    ),
    CONSTRAINT [FK_t_Module_t_ResRef] FOREIGN KEY 
    (
        [StartAreaResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Module_t_ResRef1] FOREIGN KEY 
    (
        [ScriptResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Module_t_ResRef2] FOREIGN KEY 
    (
        [ClientScriptResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_StringSound] ADD 
    CONSTRAINT [FK_t_StringSound_t_ResRef] FOREIGN KEY 
    (
        [SoundResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_StringSound_t_String] FOREIGN KEY 
    (
        [StringID]
    ) REFERENCES [dbo].[t_String] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_ModuleAssociation] ADD 
    CONSTRAINT [FK_t_ModuleAssociation_t_Module] FOREIGN KEY 
    (
        [ParentModuleID]
    ) REFERENCES [dbo].[t_Module] (
        [ID]
    ),
    CONSTRAINT [FK_t_ModuleAssociation_t_Module1] FOREIGN KEY 
    (
        [ChildModuleID]
    ) REFERENCES [dbo].[t_Module] (
        [ID]
    ) ON DELETE CASCADE 
GO

ALTER TABLE [dbo].[t_ModuleVariable] ADD 
    CONSTRAINT [FK_t_ModuleVariable_t_Module] FOREIGN KEY 
    (
        [ModuleID]
    ) REFERENCES [dbo].[t_Module] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_Area] ADD 
    CONSTRAINT [FK_t_Area_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_Area_t_ResRef] FOREIGN KEY 
    (
        [ScriptResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Area_t_ResRef1] FOREIGN KEY 
    (
        [AreaListResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Area_t_String] FOREIGN KEY 
    (
        [NameStringID]
    ) REFERENCES [dbo].[t_String] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_Conversation] ADD 
    CONSTRAINT [FK_t_Conversation_EndConversationPlotResRefID_t_ResRef] FOREIGN KEY 
    (
        [EndConversationPlotResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Conversation_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_Conversation_t_ResRef] FOREIGN KEY 
    (
        [EndConversationScriptResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Conversation_t_ResRef1] FOREIGN KEY 
    (
        [StageResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Conversation_t_ResRef3] FOREIGN KEY 
    (
        [PreviewAreaResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_ConversationLine] ADD 
    CONSTRAINT [FK_t_ConversationLine_ActionPlotResRefID_t_ResRef] FOREIGN KEY 
    (
        [ActionPlotResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_ConversationLine_ConditionPlotResRefID_t_ResRef] FOREIGN KEY 
    (
        [ConditionPlotResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_ConversationLine_t_Conversation] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Conversation] (
        [ModuleResRefVersionID]
    ),
    CONSTRAINT [FK_t_ConversationLine_t_ResRef] FOREIGN KEY 
    (
        [ConditionScriptResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_ConversationLine_t_ResRef1] FOREIGN KEY 
    (
        [ActionScriptResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_ConversationLine_t_ResRef2] FOREIGN KEY 
    (
        [StageResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_ConversationLine_t_ResRef3] FOREIGN KEY 
    (
        [PreviewAreaResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_ConversationLine_t_ResRef4] FOREIGN KEY 
    (
        [CustomCutsceneResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_ConversationLine_t_ResRef5] FOREIGN KEY 
    (
        [CameraFunctionalShotResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_ConversationLine_t_String] FOREIGN KEY 
    (
        [TextStringID]
    ) REFERENCES [dbo].[t_String] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_Creature] ADD 
    CONSTRAINT [FK_t_Creature_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_Creature_t_ResRef] FOREIGN KEY 
    (
        [ConversationResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Creature_t_ResRef1] FOREIGN KEY 
    (
        [ScriptResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Creature_t_ResRef2] FOREIGN KEY 
    (
        [CharacterResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Creature_t_String] FOREIGN KEY 
    (
        [NameStringID]
    ) REFERENCES [dbo].[t_String] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_Cutscene] ADD 
    CONSTRAINT [FK_t_Cutscene_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_Cutscene_t_ResRef] FOREIGN KEY 
    (
        [EndScriptResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Cutscene_t_ResRef1] FOREIGN KEY 
    (
        [StageResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Cutscene_t_ResRef2] FOREIGN KEY 
    (
        [AreaResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_CutsceneAction] ADD 
    CONSTRAINT [FK_t_CutsceneAction_t_CutsceneTrack] FOREIGN KEY 
    (
        [ModuleResRefVersionID],
        [CutsceneObjectInstanceID],
        [CutsceneTrackInstanceID]
    ) REFERENCES [dbo].[t_CutsceneTrack] (
        [ModuleResRefVersionID],
        [CutsceneObjectInstanceID],
        [InstanceID]
    ),
    CONSTRAINT [FK_t_CutsceneAction_t_ResRef] FOREIGN KEY 
    (
        [ResRefID1]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_CutsceneAction_t_String] FOREIGN KEY 
    (
        [StringID1]
    ) REFERENCES [dbo].[t_String] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_CutsceneObject] ADD 
    CONSTRAINT [FK_t_CutsceneObject_t_Cutscene] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Cutscene] (
        [ModuleResRefVersionID]
    ),
    CONSTRAINT [FK_t_CutsceneObject_t_ResRef] FOREIGN KEY 
    (
        [ResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_CutsceneTrack] ADD 
    CONSTRAINT [FK_t_CutsceneTrack_t_CutsceneObject] FOREIGN KEY 
    (
        [ModuleResRefVersionID],
        [CutsceneObjectInstanceID]
    ) REFERENCES [dbo].[t_CutsceneObject] (
        [ModuleResRefVersionID],
        [InstanceID]
    )
GO

ALTER TABLE [dbo].[t_Item] ADD 
    CONSTRAINT [FK_t_Item_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_Item_t_ResRef] FOREIGN KEY 
    (
        [ScriptResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Item_t_String] FOREIGN KEY 
    (
        [NameStringID]
    ) REFERENCES [dbo].[t_String] (
        [ID]
    ),
    CONSTRAINT [FK_t_Item_t_String1] FOREIGN KEY 
    (
        [DescriptionStringID]
    ) REFERENCES [dbo].[t_String] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_Merchant] ADD 
    CONSTRAINT [FK_t_Merchant_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_Merchant_t_ResRef] FOREIGN KEY 
    (
        [ScriptResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Merchant_t_String] FOREIGN KEY 
    (
        [NameStringID]
    ) REFERENCES [dbo].[t_String] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_ModuleResRef] ADD 
    CONSTRAINT [FK_t_ModuleResRef_C_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [CurrentModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_ModuleResRef_S_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ScratchModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_ModuleResRef_t_Module] FOREIGN KEY 
    (
        [ModuleID]
    ) REFERENCES [dbo].[t_Module] (
        [ID]
    ),
    CONSTRAINT [FK_t_ModuleResRef_t_ResRef] FOREIGN KEY 
    (
        [ResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_ModuleResRefVersion] ADD 
    CONSTRAINT [FK_t_ModuleResRefVersion_t_Module] FOREIGN KEY 
    (
        [OwnerModuleID]
    ) REFERENCES [dbo].[t_Module] (
        [ID]
    ),
    CONSTRAINT [FK_t_ModuleResRefVersion_t_ModuleResRef] FOREIGN KEY 
    (
        [ModuleID],
        [ResRefID]
    ) REFERENCES [dbo].[t_ModuleResRef] (
        [ModuleID],
        [ResRefID]
    )
GO

ALTER TABLE [dbo].[t_Placeable] ADD 
    CONSTRAINT [FK_t_Conversation_t_ResRef2] FOREIGN KEY 
    (
        [ConversationResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Placeable_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_Placeable_t_ResRef] FOREIGN KEY 
    (
        [ScriptResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Placeable_t_ResRef1] FOREIGN KEY 
    (
        [CharacterResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Placeable_t_String] FOREIGN KEY 
    (
        [NameStringID]
    ) REFERENCES [dbo].[t_String] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_Plot] ADD 
    CONSTRAINT [FK_t_Plot_ParentPlotResRefID_t_ResRef] FOREIGN KEY 
    (
        [ParentPlotResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Plot_ScriptResRefID_t_ResRef] FOREIGN KEY 
    (
        [ScriptResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Plot_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_Plot_t_ResRef] FOREIGN KEY 
    (
        [ParentPlotResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Plot_t_String] FOREIGN KEY 
    (
        [NameStringID]
    ) REFERENCES [dbo].[t_String] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_PlotStatus] ADD 
    CONSTRAINT [FK_t_PlotStatus_Journal_t_String] FOREIGN KEY 
    (
        [JournalTextStringID]
    ) REFERENCES [dbo].[t_String] (
        [ID]
    ),
    CONSTRAINT [FK_t_PlotStatus_t_Plot] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Plot] (
        [ModuleResRefVersionID]
    )
GO

ALTER TABLE [dbo].[t_Script] ADD 
    CONSTRAINT [FK_t_Script_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_Script_Reference] ADD 
    CONSTRAINT [FK_t_Script_Reference_t_ResRef] FOREIGN KEY 
    (
        [ReferencedResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Script_Reference_t_Script] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Script] (
        [ModuleResRefVersionID]
    ) ON DELETE CASCADE 
GO

ALTER TABLE [dbo].[t_Stage] ADD 
    CONSTRAINT [FK_t_Stage_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_Stage_t_ResRef] FOREIGN KEY 
    (
        [AreaResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_StringLanguage] ADD 
    CONSTRAINT [FK_StringLanguage_StringLanguageTag] FOREIGN KEY 
    (
        [DefaultStringLanguageTagID]
    ) REFERENCES [dbo].[t_StringLanguageTag] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_StringLanguageTag] ADD 
    CONSTRAINT [FK_StringLanguageTag_StringLanguage] FOREIGN KEY 
    (
        [StringLanguageID]
    ) REFERENCES [dbo].[t_StringLanguage] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_StringLanguageVariant] ADD 
    CONSTRAINT [FK_StringLanguageVariant_StringLanguageVariantVersion_1] FOREIGN KEY 
    (
        [CurrentStringLanguageVariantVersionID]
    ) REFERENCES [dbo].[t_StringLanguageVariantVersion] (
        [ID]
    ),
    CONSTRAINT [FK_StringLanguageVariant_StringLanguageVariantVersion_2] FOREIGN KEY 
    (
        [ScratchStringLanguageVariantVersionID]
    ) REFERENCES [dbo].[t_StringLanguageVariantVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_StringLanguageVariant_t_StringLanguage] FOREIGN KEY 
    (
        [StringLanguageID]
    ) REFERENCES [dbo].[t_StringLanguage] (
        [ID]
    ),
    CONSTRAINT [FK_t_StringLanguageVariant_t_StringVariant] FOREIGN KEY 
    (
        [StringVariantID]
    ) REFERENCES [dbo].[t_StringVariant] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_StringLanguageVariantVersion] ADD 
    CONSTRAINT [FK_StringLanguageVariantVersion_StringImportSession] FOREIGN KEY 
    (
        [StringImportSessionID]
    ) REFERENCES [dbo].[t_StringImportSession] (
        [ID]
    ),
    CONSTRAINT [FK_StringLanguageVariantVersion_StringLanguageVariant] FOREIGN KEY 
    (
        [StringLanguageVariantID]
    ) REFERENCES [dbo].[t_StringLanguageVariant] (
        [ID]
    ),
    CONSTRAINT [FK_StringLanguageVariantVersion_StringLanguageVariantVersion] FOREIGN KEY 
    (
        [PreviousStringLanguageVariantVersionID]
    ) REFERENCES [dbo].[t_StringLanguageVariantVersion] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_StringText] ADD 
    CONSTRAINT [FK_t_StringText_t_StringLanguageVariant] FOREIGN KEY 
    (
        [StringLanguageVariantID]
    ) REFERENCES [dbo].[t_StringLanguageVariant] (
        [ID]
    ),
    CONSTRAINT [FK_t_StringText_t_StringVersion] FOREIGN KEY 
    (
        [StringID],
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_StringVersion] (
        [StringID],
        [ModuleResRefVersionID]
    )
GO

ALTER TABLE [dbo].[t_StringVersion] ADD 
    CONSTRAINT [FK_t_StringVersion_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_StringVersion_t_ResRef] FOREIGN KEY 
    (
        [OwnerResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_StringVersion_t_String] FOREIGN KEY 
    (
        [StringID]
    ) REFERENCES [dbo].[t_String] (
        [ID]
    ),
    CONSTRAINT [FK_t_StringVersion_t_StringType] FOREIGN KEY 
    (
        [StringTypeID]
    ) REFERENCES [dbo].[t_StringType] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_Trigger] ADD 
    CONSTRAINT [FK_t_Trigger_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_Trigger_t_ResRef] FOREIGN KEY 
    (
        [ScriptResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_VOScript] ADD 
    CONSTRAINT [FK_t_VOScript_t_ModuleResRef_Character] FOREIGN KEY 
    (
        [CharacterModuleID],
        [CharacterResRefID]
    ) REFERENCES [dbo].[t_ModuleResRef] (
        [ModuleID],
        [ResRefID]
    ),
    CONSTRAINT [FK_t_VOScript_t_ModuleResRef_Resource] FOREIGN KEY 
    (
        [ResourceModuleID],
        [ResourceResRefID]
    ) REFERENCES [dbo].[t_ModuleResRef] (
        [ModuleID],
        [ResRefID]
    )
GO

ALTER TABLE [dbo].[t_AreaAudioVolume] ADD 
    CONSTRAINT [FK_t_AreaAudioVolume_t_Area] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Area] (
        [ModuleResRefVersionID]
    )
GO

ALTER TABLE [dbo].[t_AreaAudioVolumeGeometry] ADD 
    CONSTRAINT [FK_t_AreaAudioVolumeGeometry_t_AreaAudioVolume] FOREIGN KEY 
    (
        [ModuleResRefVersionID],
        [AreaAudioVolumeInstanceID]
    ) REFERENCES [dbo].[t_AreaAudioVolume] (
        [ModuleResRefVersionID],
        [InstanceID]
    )
GO

ALTER TABLE [dbo].[t_AreaAudioVolumeSound] ADD 
    CONSTRAINT [FK_t_AreaAudioVolumeSound_t_AreaAudioVolume] FOREIGN KEY 
    (
        [ModuleResRefVersionID],
        [AudioVolumeInstanceID]
    ) REFERENCES [dbo].[t_AreaAudioVolume] (
        [ModuleResRefVersionID],
        [InstanceID]
    )
GO

ALTER TABLE [dbo].[t_AreaInstanceAssociations] ADD 
    CONSTRAINT [FK_t_AreaInstanceAssociations_t_Area] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Area] (
        [ModuleResRefVersionID]
    )
GO

ALTER TABLE [dbo].[t_AreaMusicVolumeGeometry] ADD 
    CONSTRAINT [FK_t_AreaMusicVolumeGeometry_t_AreaMusicVolume] FOREIGN KEY 
    (
        [ModuleResRefVersionID],
        [AreaMusicVolumeInstanceID]
    ) REFERENCES [dbo].[t_AreaMusicVolume] (
        [ModuleResRefVersionID],
        [InstanceID]
    )
GO

ALTER TABLE [dbo].[t_AreaObjectGeometry] ADD 
    CONSTRAINT [FK_t_AreaObjectGeometry_t_AreaObject] FOREIGN KEY 
    (
        [ModuleResRefVersionID],
        [AreaObjectInstanceID]
    ) REFERENCES [dbo].[t_AreaObject] (
        [ModuleResRefVersionID],
        [InstanceID]
    )
GO

ALTER TABLE [dbo].[t_AreaObjectVariable] ADD 
    CONSTRAINT [FK_t_AreaObjectVariable_t_AreaObject] FOREIGN KEY 
    (
        [ModuleResRefVersionID],
        [AreaObjectInstanceID]
    ) REFERENCES [dbo].[t_AreaObject] (
        [ModuleResRefVersionID],
        [InstanceID]
    )
GO

ALTER TABLE [dbo].[t_AreaReverbVolume] ADD 
    CONSTRAINT [FK_t_AreaReverbVolume_t_Area] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Area] (
        [ModuleResRefVersionID]
    )
GO

ALTER TABLE [dbo].[t_AreaReverbVolumeGeometry] ADD 
    CONSTRAINT [FK_t_AreaReverbVolumeGeometry_t_AreaReverbVolume] FOREIGN KEY 
    (
        [ModuleResRefVersionID],
        [AreaReverbVolumeInstanceID]
    ) REFERENCES [dbo].[t_AreaReverbVolume] (
        [ModuleResRefVersionID],
        [InstanceID]
    )
GO

ALTER TABLE [dbo].[t_AreaSound] ADD 
    CONSTRAINT [FK_t_AreaSound_t_Area] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Area] (
        [ModuleResRefVersionID]
    )
GO

ALTER TABLE [dbo].[t_AreaWaypoint] ADD 
    CONSTRAINT [FK_t_AreaWaypoint_t_Area] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Area] (
        [ModuleResRefVersionID]
    )
GO

ALTER TABLE [dbo].[t_ConversationAnimations] ADD 
    CONSTRAINT [FK_t_ConversationAnimations_t_ConversationLine] FOREIGN KEY 
    (
        [ModuleResRefVersionID],
        [LineIndex]
    ) REFERENCES [dbo].[t_ConversationLine] (
        [ModuleResRefVersionID],
        [Index]
    )
GO

ALTER TABLE [dbo].[t_CreatureAbility] ADD 
    CONSTRAINT [FK_t_CreatureAbility_t_Creature] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Creature] (
        [ModuleResRefVersionID]
    )
GO

ALTER TABLE [dbo].[t_CutsceneActionFBEParameter] ADD 
    CONSTRAINT [FK_t_CutsceneActionFBEParameter_t_CutsceneAction] FOREIGN KEY 
    (
        [ModuleResRefVersionID],
        [CutsceneObjectInstanceID],
        [CutsceneTrackInstanceID],
        [CutsceneActionInstanceID]
    ) REFERENCES [dbo].[t_CutsceneAction] (
        [ModuleResRefVersionID],
        [CutsceneObjectInstanceID],
        [CutsceneTrackInstanceID],
        [InstanceID]
    )
GO

ALTER TABLE [dbo].[t_CutsceneActionTransition] ADD 
    CONSTRAINT [FK_t_CutsceneActionTransition_t_CutsceneAction] FOREIGN KEY 
    (
        [ModuleResRefVersionID],
        [CutsceneObjectInstanceID],
        [CutsceneTrackInstanceIDA],
        [CutsceneActionInstanceIDA]
    ) REFERENCES [dbo].[t_CutsceneAction] (
        [ModuleResRefVersionID],
        [CutsceneObjectInstanceID],
        [CutsceneTrackInstanceID],
        [InstanceID]
    ),
    CONSTRAINT [FK_t_CutsceneActionTransition_t_CutsceneAction1] FOREIGN KEY 
    (
        [ModuleResRefVersionID],
        [CutsceneObjectInstanceID],
        [CutsceneTrackInstanceIDB],
        [CutsceneActionInstanceIDB]
    ) REFERENCES [dbo].[t_CutsceneAction] (
        [ModuleResRefVersionID],
        [CutsceneObjectInstanceID],
        [CutsceneTrackInstanceID],
        [InstanceID]
    )
GO

ALTER TABLE [dbo].[t_ItemProperty] ADD 
    CONSTRAINT [FK_t_ItemProperty_t_Item] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Item] (
        [ModuleResRefVersionID]
    )
GO

ALTER TABLE [dbo].[t_MapPin] ADD 
    CONSTRAINT [FK_t_MapPin_t_Map] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Map] (
        [ModuleResRefVersionID]
    )
GO

ALTER TABLE [dbo].[t_MapTrail] ADD 
    CONSTRAINT [FK_t_MapTrail_t_Map] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Map] (
        [ModuleResRefVersionID]
    )
GO

ALTER TABLE [dbo].[t_MapTrailPoint] ADD 
    CONSTRAINT [FK_t_MapTrailPoint_t_MapTrail] FOREIGN KEY 
    (
        [ModuleResRefVersionID],
        [MapTrailInstanceID]
    ) REFERENCES [dbo].[t_MapTrail] (
        [ModuleResRefVersionID],
        [InstanceID]
    )
GO

ALTER TABLE [dbo].[t_MerchantRestrictedItem] ADD 
    CONSTRAINT [FK_t_MerchantRestrictedItem_t_Merchant] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Merchant] (
        [ModuleResRefVersionID]
    )
GO

ALTER TABLE [dbo].[t_PlotAssist] ADD 
    CONSTRAINT [FK_t_PlotAssist_t_PlotStatus] FOREIGN KEY 
    (
        [ModuleResRefVersionID],
        [Flag]
    ) REFERENCES [dbo].[t_PlotStatus] (
        [ModuleResRefVersionID],
        [Flag]
    )
GO

ALTER TABLE [dbo].[t_StageFBEParameter] ADD 
    CONSTRAINT [FK_t_StageFBEParameter_t_StageObject] FOREIGN KEY 
    (
        [ModuleResRefVersionID],
        [StageObjectInstanceID]
    ) REFERENCES [dbo].[t_StageObject] (
        [ModuleResRefVersionID],
        [InstanceID]
    )
GO

ALTER TABLE [dbo].[t_StageObjectReference] ADD 
    CONSTRAINT [FK_t_StageObjectReference_t_StageObject] FOREIGN KEY 
    (
        [ModuleResRefVersionID],
        [SourceInstanceID]
    ) REFERENCES [dbo].[t_StageObject] (
        [ModuleResRefVersionID],
        [InstanceID]
    )
GO

ALTER TABLE [dbo].[t_VOSessionInstanceVersion] ADD 
    CONSTRAINT [FK_t_VOSessionInstanceVersion_t_VOScriptInstance] FOREIGN KEY 
    (
        [VOScriptInstanceID]
    ) REFERENCES [dbo].[t_VOScriptInstance] (
        [ID]
    ),
    CONSTRAINT [FK_t_VOSessionInstanceVersion_t_VOSession] FOREIGN KEY 
    (
        [VOSessionID]
    ) REFERENCES [dbo].[t_VOSession] (
        [ID]
    ),
    CONSTRAINT [FK_t_VOSessionInstanceVersion_t_VOSessionInstance] FOREIGN KEY 
    (
        [VOSessionInstanceID]
    ) REFERENCES [dbo].[t_VOSessionInstance] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_VOSessionVersion] ADD 
    CONSTRAINT [FK_t_VOSessionVersion_t_VOSession] FOREIGN KEY 
    (
        [VOSessionID]
    ) REFERENCES [dbo].[t_VOSession] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_Variable] ADD 
    CONSTRAINT [FK_t_Variable_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_AreaList] ADD 
    CONSTRAINT [FK_t_AreaList_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_AreaMusicVolume] ADD 
    CONSTRAINT [FK_t_AreaMusicVolume_t_Area] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Area] (
        [ModuleResRefVersionID]
    ),
    CONSTRAINT [FK_t_AreaMusicVolume_t_ResRef] FOREIGN KEY 
    (
        [ScriptResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_AreaObject] ADD 
    CONSTRAINT [FK_t_AreaObject_t_Area] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Area] (
        [ModuleResRefVersionID]
    ),
    CONSTRAINT [FK_t_AreaObject_t_ResRef] FOREIGN KEY 
    (
        [ObjectResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_AssociatedResource] ADD 
    CONSTRAINT [FK_t_AssociatedResource_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_AssociatedResource_t_ResRef] FOREIGN KEY 
    (
        [ResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_Character] ADD 
    CONSTRAINT [FK_t_Character_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_Character_t_ResRef] FOREIGN KEY 
    (
        [SoundSetResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    ),
    CONSTRAINT [FK_t_Character_t_ResRef2] FOREIGN KEY 
    (
        [RoleResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_ConversationCinematics] ADD 
    CONSTRAINT [FK_t_ConversationCinematics_t_Conversation] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Conversation] (
        [ModuleResRefVersionID]
    ),
    CONSTRAINT [FK_t_ConversationCinematics_t_ResRef] FOREIGN KEY 
    (
        [FunctionalShotResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_ConversationTagMap] ADD 
    CONSTRAINT [FK_t_ConversationTagMap_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_ConversationTagMap_t_ResRef] FOREIGN KEY 
    (
        [ValueResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_ConversationTransition] ADD 
    CONSTRAINT [FK_t_ConversationTransit_t_Conversation] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Conversation] (
        [ModuleResRefVersionID]
    )
GO

ALTER TABLE [dbo].[t_Inventory] ADD 
    CONSTRAINT [FK_t_Inventory_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_Inventory_t_ResRef] FOREIGN KEY 
    (
        [ItemResRefID]
    ) REFERENCES [dbo].[t_ResRef] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_Map] ADD 
    CONSTRAINT [FK_t_Map_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_Role] ADD 
    CONSTRAINT [FK_t_Role_t_ModuleResRefVersion] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_ModuleResRefVersion] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_StageObject] ADD 
    CONSTRAINT [FK_t_StageObject_t_Stage] FOREIGN KEY 
    (
        [ModuleResRefVersionID]
    ) REFERENCES [dbo].[t_Stage] (
        [ModuleResRefVersionID]
    )
GO

ALTER TABLE [dbo].[t_StringLanguageVariantText] ADD 
    CONSTRAINT [FK_StringLanguageVariantText_StringImportSession] FOREIGN KEY 
    (
        [StringImportSessionID]
    ) REFERENCES [dbo].[t_StringImportSession] (
        [ID]
    ),
    CONSTRAINT [FK_StringLanguageVariantText_StringLanguageVariantVersion] FOREIGN KEY 
    (
        [StringLanguageVariantVersionID]
    ) REFERENCES [dbo].[t_StringLanguageVariantVersion] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_VOScriptBatchPrint] ADD 
    CONSTRAINT [FK_t_VOScriptBatchPrint_t_VOScript] FOREIGN KEY 
    (
        [VOScriptID]
    ) REFERENCES [dbo].[t_VOScript] (
        [ID]
    ),
    CONSTRAINT [FK_t_VOScriptBatchPrint_t_VOScriptInstance] FOREIGN KEY 
    (
        [VOScriptInstanceID]
    ) REFERENCES [dbo].[t_VOScriptInstance] (
        [ID]
    ),
    CONSTRAINT [FK_t_VOScriptBatchPrint_t_VOScriptInstanceString] FOREIGN KEY 
    (
        [VOScriptInstanceStringID]
    ) REFERENCES [dbo].[t_VOScriptInstanceString] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_VOScriptInstance] ADD 
    CONSTRAINT [FK_t_VOScriptInstance_t_StringLanguage] FOREIGN KEY 
    (
        [StringLanguageID]
    ) REFERENCES [dbo].[t_StringLanguage] (
        [ID]
    ),
    CONSTRAINT [FK_t_VOScriptInstance_t_VOScript] FOREIGN KEY 
    (
        [VOScriptID]
    ) REFERENCES [dbo].[t_VOScript] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_VOScriptInstanceString] ADD 
    CONSTRAINT [FK_t_VOScriptInstanceString_t_StringLanguageVariantVersion] FOREIGN KEY 
    (
        [StringLanguageVariantVersionID]
    ) REFERENCES [dbo].[t_StringLanguageVariantVersion] (
        [ID]
    ),
    CONSTRAINT [FK_t_VOScriptInstanceString_t_StringText] FOREIGN KEY 
    (
        [StringID],
        [ModuleResRefVersionID],
        [StringLanguageVariantID]
    ) REFERENCES [dbo].[t_StringText] (
        [StringID],
        [ModuleResRefVersionID],
        [StringLanguageVariantID]
    ),
    CONSTRAINT [FK_t_VOScriptInstanceString_t_VOScriptInstance] FOREIGN KEY 
    (
        [VOScriptInstanceID]
    ) REFERENCES [dbo].[t_VOScriptInstance] (
        [ID]
    ),
    CONSTRAINT [FK_t_VOScriptInstanceString_t_VOScriptInstanceString] FOREIGN KEY 
    (
        [PreviousVOScriptInstanceStringID]
    ) REFERENCES [dbo].[t_VOScriptInstanceString] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_VOScriptInstanceStringStatus] ADD 
    CONSTRAINT [FK_t_VOScriptInstanceStringStatus_t_VOScriptInstanceString] FOREIGN KEY 
    (
        [VOScriptInstanceStringID]
    ) REFERENCES [dbo].[t_VOScriptInstanceString] (
        [ID]
    )
GO

ALTER TABLE [dbo].[t_VOScriptStringRevision] ADD 
    CONSTRAINT [FK_t_VOScriptStringRevision_t_StringLanguageVariant] FOREIGN KEY 
    (
        [StringLanguageID],
        [StringVariantID]
    ) REFERENCES [dbo].[t_StringLanguageVariant] (
        [StringLanguageID],
        [StringVariantID]
    )
GO

ALTER TABLE [dbo].[t_VOSession] ADD 
    CONSTRAINT [FK_t_VOSession_t_StringLanguage] FOREIGN KEY 
    (
        [LanguageID]
    ) REFERENCES [dbo].[t_StringLanguage] (
        [ID]
    )
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO



CREATE VIEW dbo.v_ModuleTree
AS
select moduleid, associatedmoduleid, max(level) as level
from (
select distinct ma1.childmoduleid ModuleID, ma2.childmoduleid AssociatedModuleID, ma2.Level
from t_moduleassociation ma1
 join t_moduleassociation ma2 on ma1.fullpath like ma2.fullpath + '%'
) s1
group by moduleid, associatedmoduleid


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  SELECT  ON [dbo].[v_ModuleTree]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  VIEW: v_ConversationLineSpeakerTag
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: February 14, 2007
--  Description: Lists all lines of conversation and their speaker
--    tags.  This is used to resolve the lines that are blank and
--    require a lookup on the DefaultNPCSpeaker field.
--
--    NOTE: If player lines EVER stop having a tag of 'PLAYER', this
--      View will be incorrect for player lines and will require fixing.
------------------------------------------------------------------------
CREATE VIEW [dbo].[v_ConversationLineSpeakerTag] 
AS 

SELECT cl.[ModuleResRefVersionID], cl.[TextStringID],
CASE cl.[Speaker]
    WHEN '' THEN c.[DefaultNPCSpeaker]
    ELSE cl.[Speaker] END AS [Speaker]
FROM t_ConversationLine cl
    JOIN t_Conversation c
        ON cl.[ModuleResRefVersionID] = c.[ModuleResRefVersionID]


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  SELECT  ON [dbo].[v_ConversationLineSpeakerTag]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE VIEW dbo.v_StringVersionText
AS
select s1.ID, s1.StringTableID, sv.ModuleResRefVersionID, sv.StringTypeID,
 sv.OwnerresRefID, st.StringLanguageVariantID, st.Text, st.Description
FROM t_String s1
 join t_StringVersion sv on s1.id = sv.stringid
 join t_StringText st on sv.stringid = st.stringid
  and sv.moduleresrefversionid = st.moduleresrefversionid
  and st.stringlanguagevariantid = 1



GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  SELECT  ON [dbo].[v_StringVersionText]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  VIEW: v_StringsRequiringTranslation
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: September 20, 2006
--  Description: Shows all strings belonging to current versions 
--   of resources that need to be translated.
--      This query has to search for strings that have never been
--   exported, as well as strings that have been updated since
--   the last time they were exported.
------------------------------------------------------------------------
CREATE VIEW [dbo].[v_StringsRequiringTranslation] 
AS 
SELECT t.[StringID], 
t.[ModuleResRefVersionID],
CASE 
WHEN t.[LastMajorUpdateOn] > ISNULL(seh.[CompareDate], '1/1/2000') 
    THEN 1
ELSE 0
END [IsMajorChange],
CASE
WHEN seh.[StringID] IS NULL
    THEN 1
ELSE 0
END [IsNew]
FROM t_StringText t
    JOIN t_ModuleResRefVersion mrv 
        ON t.[ModuleResRefVersionID] = mrv.[ID]
    LEFT OUTER JOIN t_StringExportHistory seh
        ON t.[StringID] = seh.[StringID]
        AND seh.[Status] = 'A'
WHERE mrv.[Status] = 'C' -- Ensures that we only care about current version strings
AND t.[LastMinorUpdateOn] > ISNULL(seh.[CompareDate], '1/1/2000') -- Ensures that strings never exported, and strings updated since last export are included

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  SELECT  ON [dbo].[v_StringsRequiringTranslation]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


------------------------------------------------------------------------
--  VIEW: v_StringsRequiringTranslationByResourceVersion
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: September 20, 2006
--  Description: Shows all strings belonging to all versions 
--   of resources that need to be translated.
--      This query has to search for strings that have never been
--   exported, as well as strings that have been updated since
--   the last time they were exported.
--  NOTE: We want this view to show all versions because
--   there are times where this list is checked against a 
--   particular version.  When a string is exported, all 
--   prior versions are intentionally no longer shown in this view.
------------------------------------------------------------------------
CREATE VIEW [dbo].[v_StringsRequiringTranslationByResourceVersion] 
AS 
SELECT mrv.[ModuleID], mrv.[ResRefID], t.[ModuleResRefVersionID], 
t.[StringID], 
CASE 
WHEN t.[LastMajorUpdateOn] > ISNULL(seh.[CompareDate], '1/1/2000') 
    THEN 1
ELSE 0
END [IsMajorChange],
CASE
WHEN seh.[ID] IS NULL
    THEN 1
ELSE 0
END [IsNew]
FROM t_StringText t
    JOIN t_ModuleResRefVersion mrv 
        ON t.[ModuleResRefVersionID] = mrv.[ID]
    LEFT OUTER JOIN t_StringExportHistory seh
        ON t.[StringID] = seh.[StringID]
        AND seh.[Status] = 'A'
WHERE t.[LastMinorUpdateOn] > ISNULL(seh.[CompareDate], '1/1/2000') -- Ensures that strings never exported, and strings updated since last export are included

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  SELECT  ON [dbo].[v_StringsRequiringTranslationByResourceVersion]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE VIEW dbo.v_UserResourceInfo
AS
    select 
      CASE isnull(mrrv2.id,-1) when -1 
        then mrrv1.id 
        else case mrrv2.username when suser_sname()
                then mrrv2.id
                else mrrv1.id
             end
      end as ModuleResRefVersionID,
      mrr.moduleid as ModuleID, mrr.ResRefID as ResRefID,
      CASE isnull(mrrv2.id,-1) when -1 
        then mrrv1.name 
        else case mrrv2.username when suser_sname()
                then mrrv2.name
                else mrrv1.name
             end
      end as ResRefName,
      CASE isnull(mrrv2.id,-1) when -1 
        then mrrv1.folder 
        else case mrrv2.username when suser_sname()
                then mrrv2.folder
                else mrrv1.folder
             end
      end as Folder,
      mrr.createdby as CreatedBy, mrr.createdon as CreatedOn, 
      case isnull(mrrv2.id,-1) when -1 then 0 else 1 end as IsCheckedOut,
      mrrv2.username as CheckedOutBy, mrrv2.date as CheckedOutOn,
      mrrv1.username as LastCheckInBy, mrrv1.date as LastCheckInOn,
      mrrv1.comment as Comment
    from t_moduleresref mrr
    join t_moduleresrefversion mrrv1 on mrr.currentmoduleresrefversionid = mrrv1.id
    left outer join t_moduleresrefversion mrrv2 on mrr.scratchmoduleresrefversionid = mrrv2.id



GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  SELECT  ON [dbo].[v_UserResourceInfo]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  VIEW: v_VOScriptStringLanguageVariant
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: February 21, 2007
--  Description: Displays the Language ID and Variant ID that each
--    VOScriptInstanceString belong to.  This is meant to be a 
--    convenience lookup for use with several stored procedures.
--    
------------------------------------------------------------------------
CREATE VIEW [dbo].[v_VOScriptStringLanguageVariant] 
AS 

SELECT 
vosis.[ID] as [VOScriptInstanceStringID], 
vosi.[StringLanguageID], 
vosis.[StringVariantID]
FROM t_VOScriptInstanceString vosis
    JOIN t_VOScriptInstance vosi
        ON vosis.[VOScriptInstanceID] = vosi.[ID]


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  SELECT  ON [dbo].[v_VOScriptStringLanguageVariant]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO



CREATE PROCEDURE [dbo].[bsp_CreateNewResourceVersion]
@a_iCurrentVersionID int,
@a_iNewVersionID int,
@a_sTableName varchar(128)
AS
declare @sql nvarchar(4000)
set @sql = ''
declare @columns nvarchar(4000)
set @columns = ''
SELECT @columns = CASE @columns 
                WHEN '' THEN '[' + sc.name + ']'
                ELSE @columns + ', [' + sc.name + ']'
                END
from sysobjects so join syscolumns sc on so.id = sc.id
where lower(so.name) = lower(@a_sTableName)
and lower(sc.name) <> 'moduleresrefversionid'
order by colid
if (@@ERROR <> 0) GOTO ON_ERROR
set @sql = 'insert into ' + @a_sTableName + '(ModuleResRefVersionID, ' + @columns + ') ' +
' select ' + convert(varchar(10),@a_iNewVersionID) + ', ' + @columns + ' from ' + @a_sTableName +
' where moduleresrefversionid = ' + convert(varchar(10),@a_iCurrentVersionID)
exec sp_executesql @sql
if (@@ERROR <> 0) GOTO ON_ERROR
return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
return @@ERROR

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_CreateNewResourceVersion]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  STORED PROCEDURE: bsp_GetLocalizationStatisticsVerbose
------------------------------------------------------------------------
--  Owned By: Chris Mihalick
--  Created On: January 31, 2008
--  Description: Loads Localization Statistics
-- Parameters:
--   @a_bCountMajorChanges - set to true if you want to get stats 
--           for Major Text Changes (strings that are being re-translated)
--   @a_bCountMinorChanges - set to true if you want to get stats 
--           for Minor Text Changes (strings that are being re-translated)
--   @a_bGetResourceCounts:
--      o 1 - include stats by resource in the result set
--      o 0 - exclude stats by resource in the result set
--   @a_bGetStringTypeCounts:
--      o 1 - include stats by string type in the result set
--      o 0 - exclude stats by string type in the result set
--
-- Returns:
--   0 on success, non-zero on error (error-code @@ERROR is returned)
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_GetLocalizationStatisticsVerbose]
    @a_bCountMajorChanges bit,
    @a_bCountMinorChanges bit,
    @a_bGetResourceCounts bit,
    @a_bGetStringTypeCounts bit
AS

SET NOCOUNT ON 

DECLARE @iError int

-- Create a temp table to store the stored procedure results

CREATE TABLE #Stats 
(
    ModuleID INT,
    OwnerModuleID INT,
    ResRefID INT,
    ResType VARCHAR(4),
    StringTypeID INT,
    IsResource BIT,
    NewWordsReq INT,
    UpdWordsReq INT,
    Words INT,
    NewLinesReq INT,
    UpdLinesReq INT,
    Lines INT,
    NewNonBlankLinesReq INT,
    UpdNonBlankLinesReq INT,
    NonBlankLines INT
)

-- Run the stored procedure and store the results in the temp table

INSERT #Stats 
    EXEC [dbo].[bsp_GetLocalizationStatistics]
        @a_bCountMajorChanges, @a_bCountMinorChanges, @a_bGetResourceCounts, @a_bGetStringTypeCounts 

-- Return the stats

SELECT 
    S.[ModuleID],
    S.[OwnerModuleID],
    S.[ResRefID],
    S.[ResType],
    S.[StringTypeID],
    S.[IsResource],
    S.[NewWordsReq],
    S.[UpdWordsReq],
    S.[Words],
    S.[NewLinesReq],
    S.[UpdLinesReq],
    S.[Lines],
    S.[NewNonBlankLinesReq],
    S.[UpdNonBlankLinesReq],
    S.[NonBlankLines],
    m.[Name] as [Module],
    mOwner.[Name] as [OwnerModule],
    MRRV.[Folder],
    MRRV.[Name] as [Name]
FROM #Stats S
    JOIN t_ModuleResRef MRR
        ON S.[ModuleID] = MRR.[ModuleID]
        AND S.[ResRefID] = MRR.[ResRefID]
    JOIN t_ModuleResRefVersion MRRV
        ON MRR.[CurrentModuleResRefVersionID] = MRRV.[ID]
    JOIN t_Module m
        ON mrr.[ModuleID] = m.[ID]
    JOIN t_Module mOwner
        ON s.[OwnerModuleID] = mOwner.[ID]
WHERE @a_bGetResourceCounts = 1

UNION ALL

SELECT 
    S.[ModuleID],
    S.[OwnerModuleID],
    S.[ResRefID],
    S.[ResType],
    S.[StringTypeID],
    S.[IsResource],
    S.[NewWordsReq],
    S.[UpdWordsReq],
    S.[Words],
    S.[NewLinesReq],
    S.[UpdLinesReq],
    S.[Lines],
    S.[NewNonBlankLinesReq],
    S.[UpdNonBlankLinesReq],
    S.[NonBlankLines],
    m.[Name] as [Module],
    mOwner.[Name] as [OwnerModule],
    '' AS [Folder],
    ST.[Name] as [Name]
FROM #Stats S
    JOIN t_StringType ST
        ON S.[StringTypeID] = ST.[ID]
    JOIN t_Module m
        ON S.[ModuleID] = m.[ID]
    JOIN t_Module mOwner
        ON s.[OwnerModuleID] = mOwner.[ID]
WHERE @a_bGetStringTypeCounts = 1
ORDER BY [Module], [Folder], [Name]

-- Drop the temp table

DROP TABLE #Stats

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

SET NOCOUNT OFF

return 0

---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------

SET NOCOUNT OFF

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetLocalizationStatisticsVerbose]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  STORED PROCEDURE: bsp_CreateStringExportLabel
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: September 29, 2006
--  Description: Creates a new Export Label and returns the 
--  resultant ID
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_CreateStringExportLabel]
@a_sName text,
@a_sComment ntext,
@a_iExportContent int,
@a_riNewSessionID int OUTPUT
AS

DECLARE @iError int

BEGIN TRANSACTION tranCreateStringExportLabel

-- Create a new ExpoerLabel Record.  Get the new ID
INSERT INTO t_StringExportLabel
([Name], [Comment], [Status], [ExportContent])
VALUES (@a_sName, @a_sComment, 'N', @a_iExportContent)

SELECT @iError = @@ERROR, @a_riNewSessionID = SCOPE_IDENTITY()
if (@iError <> 0) GOTO ON_ERROR

COMMIT TRANSACTION tranCreateStringExportLabel

return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------

ROLLBACK TRANSACTION

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_CreateStringExportLabel]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  STORED PROCEDURE: bsp_CreateStringImportSession
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: September 21, 2006
--  Description: Creates a new ImportSession and returns the 
--  resultant ID
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_CreateStringImportSession]
@a_sComment ntext,
@a_riNewSessionID int OUTPUT
AS

DECLARE @iError int

BEGIN TRANSACTION tranCreateStringImportSession

-- Create a new Session Record.  Get the new ID
INSERT INTO t_StringImportSession
([Status], [Comment])
VALUES ('N', @a_sComment)

SELECT @iError = @@ERROR, @a_riNewSessionID = SCOPE_IDENTITY()
if (@iError <> 0) GOTO ON_ERROR

COMMIT TRANSACTION tranCreateStringImportSession

return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------

ROLLBACK TRANSACTION

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_CreateStringImportSession]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


------------------------------------------------------------------------
--  Stored Proc: bsp_CreateVOSessionInstance
------------------------------------------------------------------------
--  Owned By: Chris Mihalick
--  Created On: May 15, 2008
--  Description: Creates a VO Session Instance, returns the ID
--
--  Parameters
--    @a_iNewVOSessionInstanceID - OUT - ID of created VO Session
--
--  Returns
--    o 0 = success
--    o else = error code
--
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_CreateVOSessionInstance]
@a_iNewVOSessionInstanceID int OUTPUT
AS

SET NOCOUNT ON

DECLARE @iError int

BEGIN TRANSACTION tran_CreateVOSessionInstance

INSERT t_VOSessionInstance ([Unused]) VALUES (1)

SELECT @a_iNewVOSessionInstanceID = SCOPE_IDENTITY() , @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

COMMIT TRANSACTION tran_CreateVOSessionInstance

SET NOCOUNT OFF

RETURN 0

------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

ROLLBACK TRANSACTION

SET @a_iNewVOSessionInstanceID = -1

SET NOCOUNT OFF

RETURN @iError



GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_CreateVOSessionInstance]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


------------------------------------------------------------------------
--  Stored Proc: bsp_GetResourceLineCharacters
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: February 28, 2007
--  Description: For a resource, returns the character owner of each 
--    line, where available.  Lines that do not resolve to characters
--    will not be returned.
--  Parameters
--    a_iModuleResRefVersionID - IN 
--      - Version of ModResRef to look up the line owners for.
--        Currently only conversation types are supported
--        
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_GetResourceLineCharacters]
@a_iModuleResRefVersionID int
AS

SET NOCOUNT ON

DECLARE @iError int

BEGIN TRANSACTION tranResourceLineCharacters

------------------------------------------------------------------------
--  Map the resource lines to Characters
------------------------------------------------------------------------

-- First ensure that our table space is clear
DELETE FROM t_VOScriptLineCharacterInternal WHERE [SPID] = @@SPID
SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

-- Then do the mapping
EXEC @iError = [dbo].[bsp_DetermineVOScriptLineCharacters] NULL, @a_iModuleResRefVersionID
IF (@iError <> 0) GOTO ON_ERROR

-- return the data
SELECT [StringID], [CharacterModuleID], [CharacterResRefID]
FROM t_VOScriptLineCharacterInternal 
WHERE [SPID] = @@SPID
AND [CharacterModuleID] IS NOT NULL
AND [CharacterResRefID] IS NOT NULL

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

-- Clear our temp table space
DELETE FROM t_VOScriptLineCharacterInternal WHERE [SPID] = @@SPID
SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

COMMIT TRANSACTION tranResourceLineCharacters

SET NOCOUNT OFF

return 0
------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

ROLLBACK TRANSACTION

SET NOCOUNT OFF

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetResourceLineCharacters]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  STORED PROCEDURE: bsp_SetCurrentStringImportSession
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: September 21, 2006
--  Description: Marks the indicated session 'C'urrent
--  and sets the other 'C'urrent record as 'I'mport (ie: not Undo)
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_SetCurrentStringImportSession]
@a_iStringImportSessionID int
AS

DECLARE @iError int

BEGIN TRANSACTION tranSetCurrentStrImportSession

------------------------------------------------------------------------
--  Check that given Session Exists
------------------------------------------------------------------------
IF NOT EXISTS (SELECT 1 FROM t_StringImportSession WHERE [ID] = @a_iStringImportSessionID)
BEGIN
    SET @iError = -1
    GOTO ON_ERROR
END

------------------------------------------------------------------------
-- Set any 'C'urrent records to 'H'istory
------------------------------------------------------------------------
UPDATE t_StringImportSession
SET [Status] = 'H'
WHERE [Status] = 'C'

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
-- Set the desired record to 'C'urrent
------------------------------------------------------------------------
UPDATE t_StringImportSession
SET [Status] = 'C'
WHERE [ID] = @a_iStringImportSessionID

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

COMMIT TRANSACTION tranSetCurrentStrImportSession

return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------

ROLLBACK TRANSACTION

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_SetCurrentStringImportSession]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO




CREATE PROCEDURE [dbo].[bsp_AddStringTable]
@a_iModuleID int,
@a_sName varchar(128),
@a_iStringTableID int OUTPUT
AS
DECLARE @RC int
declare @iResRefID int
-- Start the main transaction 
BEGIN TRANSACTION tran_bsp_AddStringTable
INSERT INTO t_StringTable ([Name]) values (@a_sName)
IF (@@ERROR <> 0) GOTO ON_ERROR
SET @a_iStringTableID = SCOPE_IDENTITY()
IF (@a_iModuleID > 0)
 BEGIN
    UPDATE t_Module
    SET StringTableID = @a_iStringTableID
    WHERE id = @a_iModuleID
    IF (@@ERROR <> 0) GOTO ON_ERROR
 END
COMMIT TRANSACTION tran_bsp_AddStringTable
return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
set @RC = @@ERROR
ROLLBACK TRANSACTION 
return @RC




GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_AddStringTable]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO



CREATE PROCEDURE [dbo].[bsp_GetNextStringID]
@a_iModuleID int,
@a_iNewID INT OUTPUT
AS  
declare @l_iError int
declare @l_iInitialTransactionCount int

declare @l_iRangeBegin int
declare @l_iRangeEnd int
set @l_iError = 0

-- Start the main transaction 
set @l_iInitialTransactionCount = @@TranCount
BEGIN TRANSACTION tran_bsp_GetNextStringID

-- Find the start / end range for the current module
SELECT @l_iRangeBegin = [StringIDBegin], @l_iRangeEnd = [StringIDEnd] FROM t_Module WHERE ID = @a_iModuleID

IF (@l_iRangeBegin < 0)
 BEGIN
    -- Do it the old non-module way: This is for BioWare internal workflow.
    UPDATE t_KeyGenStringID SET @a_iNewID = LastUsedID = LastUsedID + 1
    SET @l_iError = @@ERROR
    IF (@l_iError <> 0) 
        GOTO ON_ERROR
 END
ELSE
 BEGIN
    -- Get the next valid stringID inside the module's ID range
    -- first check the next one
    SELECT @a_iNewID = StringIDLastUsed + 1 FROM t_Module
    WHERE [ID] = @a_iModuleID
    
    SET @l_iError = @@ERROR
    IF (@l_iError <> 0) 
        GOTO ON_ERROR
 
    -- If the new ID is in use, or it is outside the valid range, try to find a new one
    IF ( EXISTS (SELECT 1 FROM t_String WHERE [ID] = @a_iNewID) OR (@a_iNewID NOT BETWEEN @l_iRangeBegin AND @l_iRangeEnd) )
     BEGIN 
      
        SET @a_iNewID = NULL
        -- Find the lowest ID in our range that is unused
        SELECT TOP 1 @a_iNewID = X.[ID]+1 FROM 
        (
            SELECT [ID] FROM t_String WHERE [ID]+1 BETWEEN @l_iRangeBegin AND @l_iRangeEnd
            UNION 
            SELECT @l_iRangeBegin-1
        ) AS X
        LEFT OUTER JOIN t_String AS existID 
        ON X.[ID] + 1 = existID.[ID]
        WHERE existID.[ID] IS NULL
        ORDER BY X.[ID] ASC

        SET @l_iError = @@ERROR
        IF (@l_iError <> 0) 
            GOTO ON_ERROR
            
        -- throw error: no available StringIDs!
        IF (@a_iNewID is NULL) 
         BEGIN
            SET @l_iError = -100
            GOTO ON_ERROR 
         END
        
     END
     
    UPDATE t_Module SET StringIDLastUsed = @a_iNewID
    WHERE [ID] = @a_iModuleID
    
    SET @l_iError = @@ERROR
    IF (@l_iError <> 0) 
        GOTO ON_ERROR
                        
 END


COMMIT TRANSACTION tran_bsp_GetNextStringID
    
return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
IF @@TranCount > @l_iInitialTransactionCount
    ROLLBACK TRANSACTION 
return @l_iError


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetNextStringID]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO


------------------------------------------------------------------------------------------
-- bsp_AddModuleAssociation
-- Steven Hand
-- July 25, 2008
------------------------------------------------------------------------------------------
-- Add a direct dependency between two modules.
-- Creates all necessary module association lines to satisfy all possible full paths.
--
--  Params: @a_iChildModuleID -- the child module (inherits resources from parent)
--  Params: @a_iParentModuleID -- the parent module
--
------------------------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_AddModuleAssociation]
@a_iChildModuleID INT,
@a_iParentModuleID INT
AS
BEGIN

    INSERT INTO [dbo].[t_ModuleAssociation]
        ([ParentModuleID], [ChildModuleID], [FullPath], [Level])
        VALUES (
            @a_iParentModuleID,
            @a_iChildModuleID,
            CONVERT(varchar, @a_iParentModuleID) + '.' + CONVERT(varchar, @a_iChildModuleID) + '.',
            2
            )

    INSERT INTO [dbo].[t_ModuleAssociation]
        ([ParentModuleID], [ChildModuleID], [FullPath], [Level])
        SELECT
            t1.ChildModuleID,
            @a_iChildModuleID,
            ISNULL(t1.FullPath, CONVERT(varchar, t1.ChildModuleID) + '.') + CONVERT(varchar, @a_iChildModuleID) + '.',
            t1.Level + 1
        FROM [dbo].[t_ModuleAssociation] t1
        WHERE t1.ChildModuleID = @a_iParentModuleID
        AND t1.ChildModuleID <> t1.ParentModuleID

    INSERT INTO [dbo].[t_ModuleAssociation]
        ([ParentModuleID], [ChildModuleID], [FullPath], [Level])
        SELECT
            t1.ParentModuleID,
            t1.ChildModuleID,
            t2.FullPath + SUBSTRING(t1.FullPath,LEN(CONVERT(varchar,t2.ChildModuleID) + '.')+1,LEN(t1.FullPath)),
            t1.Level + t2.Level - 1
        FROM [dbo].[t_ModuleAssociation] t1
            JOIN [dbo].[t_ModuleAssociation] t2
            ON t2.ParentModuleID = @a_iParentModuleID
            AND t2.ChildModuleID = @a_iChildModuleID
            AND t1.[FullPath] LIKE CONVERT(varchar,@a_iChildModuleID) + '.%'

END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_AddModuleAssociation]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO



CREATE PROCEDURE [dbo].[bsp_AddNewModule] 
    @a_sName VARCHAR (64),
    @a_sUID VARCHAR(32),
    @a_iParentModuleID INT,
    @a_bIsCore BIT,
    @a_sDirectory VARCHAR (64),
    @a_iScriptResRefID int,
    @a_iClientScriptResRefID int,
    @a_sVariable2da varchar(32),
    @a_iStringTableID int,
    @a_sStartTag varchar(32),
    @a_iStartAreaResRefID int,
    @a_bIncludeInResBuild BIT,
    @a_iType INT,
    @a_iExtendedModuleID INT,
    @a_iDisplayNameStringID int,
    @a_iDescriptionStringID int,
    @a_iPriority int,
    @a_sIconImage varchar(32),
    @a_dtReleaseDate DATETIME,
    @a_sVersion varchar(32),
    @a_sGameVersion varchar(32),
    @a_iRatingStringID int,
    @a_iRatingDescriptionStringID int,
    @a_iURLStringID int,
    @a_iPublisherStringID int,
    @a_iProductID int,
    @a_iPrice int,
    @a_iPresentation int,
    @a_iContentModuleID INT,
    @a_bRequiresLocalization bit,
    @a_bRequiresVO bit,
    @a_iStringIDBegin int,
    @a_iStringIDEnd int,
    @a_iModuleID INT OUTPUT
AS
DECLARE @iError int
BEGIN TRANSACTION  tran_bsp_AddNewModule
INSERT INTO t_Module ([Name], [UID], [IsCore], [Directory], [ScriptResRefID], [ClientScriptResRefID], [Variable2da],
    [StringTableID], [StartTag], [StartAreaResRefID], [IncludeInResBuild], [Type], [ExtendedModuleID],
    [DisplayNameStringID], [DescriptionStringID], [Priority], [IconImage], [ReleaseDate], [Version],
    [GameVersion], [RatingStringID], [RatingDescriptionStringID], [URLStringID], [PublisherStringID],
    [ProductID], [Price], [Presentation], [ContentModuleID], 
    [RequiresLocalization], [RequiresVO],
    [StringIDBegin], [StringIDEnd], [StringIDLastUsed] )
VALUES(@a_sName, @a_sUID, @a_bIsCore, @a_sDirectory, @a_iScriptResRefID, @a_iClientScriptResRefID, @a_sVariable2da,
    @a_iStringTableID, @a_sStartTag, @a_iStartAreaResRefID, @a_bIncludeInResBuild, @a_iType, @a_iExtendedModuleID,
    @a_iDisplayNameStringID, @a_iDescriptionStringID, @a_iPriority, @a_sIconImage, @a_dtReleaseDate, @a_sVersion,
    @a_sGameVersion, @a_iRatingStringID, @a_iRatingDescriptionStringID, @a_iURLStringID, @a_iPublisherStringID,
    @a_iProductID, @a_iPrice, @a_iPresentation, @a_iContentModuleID, 
    @a_bRequiresLocalization, @a_bRequiresVO,
    @a_iStringIDBegin, @a_iStringIDEnd, @a_iStringIDBegin-1)
IF (@@ERROR <> 0) GOTO ON_ERROR
SET @a_iModuleID = SCOPE_IDENTITY()
if @a_iParentModuleID = -1
 INSERT INTO [dbo].[t_ModuleAssociation]([ParentModuleID],
     [ChildModuleID], [FullPath], [Level])
 VALUES (@a_iModuleID, @a_iModuleID, CONVERT(varchar, @a_iModuleID) + '.', 1)
else
 INSERT INTO [dbo].[t_ModuleAssociation]([ParentModuleID],
     [ChildModuleID], [FullPath], [Level])
 SELECT t1.ChildModuleID,
     @a_iModuleID, ISNULL(t1.FullPath, CONVERT(varchar, t1.ChildModuleID) + '.') + CONVERT(varchar, @a_iModuleID) + '.', t1.Level + 1
 FROM [dbo].[t_ModuleAssociation] t1
 WHERE t1.ChildModuleID = @a_iParentModuleID
IF (@@ERROR <> 0) GOTO ON_ERROR
IF (@a_iStringTableID IS NULL)
BEGIN
  DECLARE @sStringTableName VARCHAR(64)
  SET @sStringTableName = @a_sName + ' Talk Table'
  EXEC @iError = dbo.bsp_AddStringTable @a_iModuleID,@sStringTableName , @a_iStringTableID OUTPUT
  IF (@iError <> 0) GOTO ON_ERROR
END
COMMIT TRANSACTION  tran_bsp_AddNewModule
RETURN 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
SET @iError = @@ERROR
ROLLBACK TRANSACTION  tran_bsp_AddNewModule
RETURN @iError


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_AddNewModule]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO


------------------------------------------------------------------------------------------
-- bsp_DeleteModuleAssociations
-- Steven Hand
-- July 25, 2008
------------------------------------------------------------------------------------------
-- Delete all of a module's associations (where child module id = given module id)
-- Ensures all indirect associations are deleted as well even if they are not direct
-- associations of the module given.
--
--  Params: @a_iModuleID -- the module (all associations to parents will be deleted)
--
------------------------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_DeleteModuleAssociations]
@a_iModuleID INT
AS
BEGIN

    DELETE FROM [dbo].[t_ModuleAssociation] WHERE [FullPath] IN (
        SELECT t1.FullPath
        FROM [dbo].[t_ModuleAssociation] t1
            JOIN [dbo].[t_ModuleAssociation] t2
            ON t1.FullPath LIKE t2.FullPath + '%'
        WHERE t2.ChildModuleID = @a_iModuleID
        )

END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_DeleteModuleAssociations]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE PROCEDURE [dbo].[bsp_AddResRef]
@a_iModuleID int,
@a_iOwnerModuleID int,
@a_sName varchar(32),
@a_sFolder varchar(128),
@a_sResType varchar(4),
@a_iState int,
@a_iResRefID int OUTPUT,
@a_iVersionID int OUTPUT
AS
declare @l_iError int
declare @bInValid bit
set @l_iError = 0
-- Start the main transaction 
BEGIN TRANSACTION tran_bsp_AddResRef
exec @l_iError = dbo.bsp_ValidateResRefName null, null, @a_sResType, 0, @a_sName, @bInValid OUTPUT
if (@@ERROR <> 0) GOTO ON_ERROR
if (@bInValid = 1) GOTO ON_ERROR
INSERT INTO t_ResRef ([ResType]) 
VALUES (@a_sResType)
if (@@ERROR <> 0) GOTO ON_ERROR
SET @a_iResRefID = SCOPE_IDENTITY()
INSERT INTO t_ModuleResRef ([ModuleID], [ResRefID]) 
VALUES (@a_iModuleID, @a_iResRefID)
if (@@ERROR <> 0) GOTO ON_ERROR
INSERT INTO t_ModuleResRefVersion ([ModuleID], [ResRefID], [OwnerModuleID], [Name], [Folder], [RevisionID], [State]) 
VALUES (@a_iModuleID, @a_iResRefID, @a_iOwnerModuleID, @a_sName, @a_sFolder, 1, @a_iState)
IF (@@ERROR <> 0) GOTO ON_ERROR
SET @a_iVersionID = SCOPE_IDENTITY()
update t_ModuleResRef set currentmoduleresrefversionid = @a_iVersionID
where moduleid = @a_iModuleID and resrefid = @a_iResRefID
IF (@@ERROR <> 0) GOTO ON_ERROR
COMMIT TRANSACTION tran_bsp_AddResRef
return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
set @l_iError = @@ERROR
ROLLBACK TRANSACTION 
return @l_iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_AddResRef]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE PROCEDURE [dbo].[bsp_AddString]
@a_iModuleResRefVersionID int,
@a_iStringLanguageVariantID int,
@a_iStringTableID int,
@a_iOwnerModuleID int,
@a_iUseStringID int,
@a_iStringTypeID int,
@a_sText text,
@a_sDescription text,
@a_iOwnerResRefID int,
@a_iStringID int OUTPUT,
@a_iNewVersionID int OUTPUT
AS
declare @l_iError int
declare @l_iInitialTransactionCount int

declare @iModuleID int
declare @iResRefID int
declare @sName varchar(128)
set @l_iError = 0

-- Start the main transaction 
set @l_iInitialTransactionCount = @@TranCount
BEGIN TRANSACTION tran_bsp_AddString

-- Check to see if we have specified a stringid to use
IF (@a_iUseStringID > 0)
 BEGIN
    -- Check to make sure it isn't in use
    IF exists (select 1 from t_string where id = @a_iUseStringID)
     BEGIN
        set @l_iError = -101
        IF (@l_iError <> 0) GOTO ON_ERROR
     END

    SET @a_iStringID = @a_iUseStringID
 END
ELSE
 BEGIN
    -- Grab the new StringID if one isn't specified
    EXEC @l_iError = dbo.bsp_GetNextStringID @a_iOwnerModuleID, @a_iStringID OUTPUT
    IF (@l_iError <> 0) GOTO ON_ERROR
 END


-- Add a t_String record here
INSERT INTO t_String ([ID], [StringTableID]) 
VALUES (@a_iStringID, @a_iStringTableID)
set @l_iError = @@ERROR
IF (@l_iError <> 0) GOTO ON_ERROR

-- Finish the transaction
-- If we do not have a version passed in then we need to create a new resource
IF (@a_iModuleResRefVersionID IS NULL or @a_iModuleResRefVersionID <= 0)
 BEGIN
    SELECT DISTINCT @iModuleID = [ID] FROM t_Module WHERE StringTableID = @a_iStringTableID
    set @l_iError = @@ERROR
    IF (@l_iError <> 0) GOTO ON_ERROR

    -- if the module is empty then we default to the core module
    IF (@iModuleID IS NULL or @iModuleID <= 0)
     BEGIN
        SELECT @iModuleID = [ID] FROM t_Module WHERE IsCore = 1
     END
     
    SET @sName = 'String' + convert(varchar(10),@a_iStringID)
    
    EXEC @l_iError = dbo.[bsp_AddResRef] @iModuleID, @a_iOwnerModuleID, @sName, '', 'str', 0, @iResRefID OUTPUT , @a_iNewVersionID OUTPUT 
    if (@l_iError <> 0) GOTO ON_ERROR
 END
ELSE
 BEGIN
    SET @a_iNewVersionID = @a_iModuleResRefVersionID
 END

INSERT INTO t_StringVersion ([StringID], [ModuleResRefVersionID], [StringTypeID], [OwnerResRefID]) 
VALUES (@a_iStringID, @a_iNewVersionID, @a_iStringTypeID, @a_iOwnerResRefID)
set @l_iError = @@ERROR
IF (@l_iError <> 0) GOTO ON_ERROR

-- Insert the record into the text table
INSERT INTO t_StringText ([StringID], [ModuleResRefVersionID], [StringLanguageVariantID], [Text], [Description]) 
VALUES (@a_iStringID, @a_iNewVersionID, @a_iStringLanguageVariantID, @a_sText, @a_sDescription)
set @l_iError = @@ERROR
IF (@l_iError <> 0) GOTO ON_ERROR

IF @@TranCount > @l_iInitialTransactionCount
    COMMIT TRANSACTION tran_bsp_AddString
return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
IF @@TranCount > @l_iInitialTransactionCount
    ROLLBACK TRANSACTION 
return @l_iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_AddString]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  Stored Proc: bsp_AdjustVOScriptLineCharacterInternalForStats
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: April 22, 2008
--
--  Description: Adjusts data in t_VOScriptLineCharacterInternal
--    (keyed on @@SPID) to reflect character line count stats 
--    more accurately.
--    
--  Given how SoundSets are set up on Dragon Age, we wish to 
--    remove character association from select lines, so that
--    they are not considered as lines owned and spoken by
--    that (or any) character.
--
--  NOTE: Callers should use this bsp after t_VOScriptLineCharacterInternal
--    is populated, likely from a call to bsp_DetermineVOScriptLineCharacters.
--  
--  Parameters:
--        
--    None
--
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_AdjustVOScriptLineCharacterInternalForStats]
AS

SET NOCOUNT ON

DECLARE @iError int

BEGIN TRANSACTION tranAdjustForStats


------------------------------------------------------------------------
--  Cache the SoundSet ResRefVersionIDs that we wish to use
--   in our processing.  This is considerably faster.
------------------------------------------------------------------------

DECLARE @SoundSetVersion TABLE
(
    [ModuleResRefVersionID] int
)

------------------------------------------------------------------------
--  Look up Sound Set resource versions of interest.
------------------------------------------------------------------------

INSERT @SoundSetVersion
SELECT DISTINCT ResourceModuleResRefVersionID
FROM t_VOScriptLineCharacterInternal voslci
    JOIN t_ModuleResRefVersion mrv
        ON voslci.[ResourceModuleResRefVersionID] = mrv.[ID]
        AND LEFT(mrv.[Name], 3) = 'ss_'
WHERE voslci.[SPID] = @@SPID

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  SoundSet Culling:
--   If a soundset section has been declared void, remove all of its
--     placeholder and child (NPC) lines.
--   
--   Definition: a section is declared void if it is a top-level NPC
--     line, where the [Comment] field contains 'VOID' in it.
--
--   Note: Child NPC lines are only removed one level deep.
-- 
--   This is how the project has decided to do soundsets.
------------------------------------------------------------------------

DELETE voslci
FROM @SoundSetVersion ssVersion
    JOIN t_ConversationTransition ct
        ON ct.[ModuleResRefVersionID] = ssVersion.[ModuleResRefVersionID]
    JOIN t_ConversationLine clStart
        ON clStart.[ModuleResRefVersionID] = ct.[ModuleResRefVersionID]
        AND ct.[FromIndex] = -1
        AND ct.[ToIndex] = clStart.[Index]
        AND clStart.[Comment] LIKE '%void%'
    JOIN t_ConversationTransition ctStartToPC
        ON clStart.[ModuleResRefVersionID] = ctStartToPC.[ModuleResRefVersionID]
        AND ctStartToPC.[FromIndex] = clStart.[Index]
    JOIN t_ConversationTransition ctPCToNPC
        ON ctPCToNPC.[ModuleResRefVersionID] = ctStartToPC.[ModuleResRefVersionID]
        AND ctPCToNPC.[FromIndex] = ctStartToPC.[ToIndex]
    JOIN t_ConversationLine clNPCLevel2
        ON ctPCToNPC.[ModuleResRefVersionID] = clNPCLevel2.[ModuleResRefVersionID]
        AND ctPCToNPC.[ToIndex] = clNPCLevel2.[Index]
    JOIN t_VOScriptLineCharacterInternal voslci
        ON voslci.[SPID] = @@SPID
        AND voslci.[StringID] = clNPCLevel2.[TextStringID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  SoundSet Culling:
--   The root level NPC lines are all section headings.
--   We wish to remove all these so that they are considered to have
--     no mapped character, when we are performing line counts per
--     character.
------------------------------------------------------------------------

DELETE voslci
FROM @SoundSetVersion ssVersion
    JOIN t_ConversationTransition ct
        ON ct.[ModuleResRefVersionID] = ssVersion.[ModuleResRefVersionID]
    JOIN t_ConversationLine clStart
        ON clStart.[ModuleResRefVersionID] = ct.[ModuleResRefVersionID]
        AND ct.[FromIndex] = -1
        AND ct.[ToIndex] = clStart.[Index]
    JOIN t_VOScriptLineCharacterInternal voslci
        ON voslci.[SPID] = @@SPID
        AND voslci.[StringID] = clStart.[TextStringID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Finished
------------------------------------------------------------------------

COMMIT TRANSACTION tranAdjustForStats

SET NOCOUNT OFF

RETURN 0
------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

ROLLBACK TRANSACTION

SET NOCOUNT OFF

RETURN @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

        
------------------------------------------------------------------------------------------
-- bsp_AreaObjectInstanceChanges
-- Curtis Onuczko
-- May 9, 2008
------------------------------------------------------------------------------------------
-- Given a start date, end date, and a module ID all area objects that have been added/removed
-- between the current version as of the start date and the current version as of the end date.
--
--  Params: @a_sFolder -- t_ModuleResRefVersion.Folder value
--  Selects: Area object instance changes.
--
------------------------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_AreaObjectInstanceChanges]
@a_dateStart DATETIME,
@a_dateEnd DATETIME,
@a_iModuleID INT
AS
BEGIN

    -- Get all of the changed areas into a table
    DECLARE @t_ChangedAreas TABLE
    (
        Name VARCHAR(32),
        ResRefID INT,
        IDBeforeStart INT,
        IDBeforeEnd INT
    )
    
    INSERT INTO @t_ChangedAreas (Name, ResRefID, IDBeforeStart, IDBeforeEnd)
    SELECT 
        mrrv.Name, 
        mrrv.ResRefID, 
        (
            SELECT MAX (mrrv1.id)
            FROM t_ModuleResRefVersion mrrv1
            WHERE mrrv1.ResRefID = mrrv.ResRefID
            AND mrrv1.moduleID = mrrv.moduleID
            AND mrrv1.Status <> 'S'
            AND mrrv1.Date <= @a_dateStart
        ), 
        MAX (mrrv.ID)
    FROM t_Area t1
    JOIN t_ModuleResRefVersion mrrv
    ON t1.ModuleResRefVersionID = mrrv.ID
    WHERE mrrv.Status <> 'S'
    AND mrrv.ModuleID = @a_iModuleID
    AND mrrv.Date > @a_dateStart
    AND mrrv.Date <= @a_dateEnd
    GROUP BY mrrv.Name, mrrv.ResRefID, mrrv.moduleID

    -- Add all changed area objects before the start time to a table
    DECLARE @t_AreaObjectsBeforeStart TABLE
    (
        AreaName VARCHAR(32),
        ResRefName VARCHAR(32),
        ResRefID INT,
        CurrentResRefMRRVID INT,
        Tag VARCHAR(32),
        InstanceCount INT
    )

    INSERT INTO @t_AreaObjectsBeforeStart (AreaName, ResRefName, ResRefID, CurrentResRefMRRVID, Tag, InstanceCount)
    SELECT 
        t2.Name,
        t3.Name,
        t3.ResRefID,
        t3.ID,
        CASE WHEN t1.tag = '' THEN ISNULL(dbo.udf_GetResourceTag (t3.ID), t3.Name) ELSE t1.tag END,
        COUNT (*)
    FROM t_AreaObject t1
    JOIN @t_ChangedAreas t2
    ON t1.ModuleResRefVersionID = t2.IDBeforeStart
    JOIN t_ModuleResRefVersion t3
    ON t1.ObjectResRefID = t3.ResRefID
    AND t3.Status = 'C'
    GROUP BY t2.Name, t3.Name, t3.ResRefID, t3.ID, t1.Tag

    -- -- Add all changed area objects before the end time to a table
    DECLARE @t_AreaObjectsBeforeEnd TABLE
    (
        AreaName VARCHAR(32),
        ResRefName VARCHAR(32),
        ResRefID INT,
        CurrentResRefMRRVID INT,
        Tag VARCHAR(32),
        InstanceCount INT
    )

    INSERT INTO @t_AreaObjectsBeforeEnd (AreaName, ResRefName, ResRefID, CurrentResRefMRRVID, Tag, InstanceCount)
    SELECT 
        t2.Name,
        t3.Name,
        t3.ResRefID,
        t3.ID,
        CASE WHEN t1.tag = '' THEN ISNULL(dbo.udf_GetResourceTag (t3.ID), t3.Name) ELSE t1.tag END,
        COUNT (*)
    FROM t_AreaObject t1
    JOIN @t_ChangedAreas t2
    ON t1.ModuleResRefVersionID = t2.IDBeforeEnd
    JOIN t_ModuleResRefVersion t3
    ON t1.ObjectResRefID = t3.ResRefID
    AND t3.Status = 'C'
    GROUP BY t2.Name, t3.Name, t3.ResRefID, t3.ID, t1.Tag

    SELECT 
        ISNULL (t1.AreaName, t2.AreaName) as AreaName, 
        t3.ResType as ResType,
        ISNULL (t1.ResRefName, t2.ResRefName) as ResRefName, 
        ISNULL (t1.Tag, t2.Tag) as Tag,
        ISNULL (t2.InstanceCount, 0) - ISNULL (t1.InstanceCount, 0) as InstanceDelta
    FROM @t_AreaObjectsBeforeStart t1
    FULL JOIN @t_AreaObjectsBeforeEnd t2
    ON t1.AreaName = t2.AreaName
    AND t1.ResRefName = t2.ResRefName
    AND t1.Tag = t2.Tag
    JOIN t_ResRef t3
    ON ISNULL(t1.ResRefID, t2.ResRefID) = t3.ID
    WHERE ISNULL (t2.InstanceCount, 0) - ISNULL (t1.InstanceCount, 0) <> 0
    ORDER BY AreaName, ResType, ResRefName, Tag

END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_AreaObjectInstanceChanges]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  Stored Proc: bsp_BatchPrintVOScriptLines
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: April 11, 2007
--  Description: Performs batch processing of VO Script Lines
--    Lines that are batch processed are logged to the database as 
--    having been recorded.  All the other data such as audio filenames,
--    and status record manipulation happens here as well.
--
--  Parameters:
--    None.  All data is processed from the t_VOScriptBatchPrint table
--
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_BatchPrintVOScriptLines]
AS

SET NOCOUNT ON

DECLARE @iError int

BEGIN TRANSACTION tranVOBatchPrint

------------------------------------------------------------------------
--  Determine the String Revision Numbers
------------------------------------------------------------------------

-- Increment the Revisions of existing StringIDs
UPDATE vosr
SET vosr.[Revision] = 1 + vosr.[Revision]
FROM t_VOScriptStringRevision vosr
    JOIN t_VOScriptBatchPrint vobp
        ON vobp.[SPID] = @@SPID
        AND vobp.[StringID] = vosr.[StringID]
        AND vobp.[StringLanguageID] = vosr.[StringLanguageID]
        AND vobp.[StringVariantID] = vosr.[StringVariantID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

-- Grab these new revisions
UPDATE vobp
SET vobp.[Revision] = vosr.[Revision]
FROM t_VOScriptBatchPrint vobp
    JOIN t_VOScriptStringRevision vosr
        ON vobp.[SPID] = @@SPID
        AND vobp.[StringID] = vosr.[StringID]
        AND vobp.[StringLanguageID] = vosr.[StringLanguageID]
        AND vobp.[StringVariantID] = vosr.[StringVariantID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

-- Insert strings never before revisioned
INSERT t_VOScriptStringRevision
([StringID], [StringLanguageID], [StringVariantID], [Revision])
SELECT [StringID], [StringLanguageID], [StringVariantID], 1
FROM t_VOScriptBatchPrint vobp
WHERE vobp.[SPID] = @@SPID
AND vobp.[Revision] IS NULL
AND vobp.[StringID] IS NOT NULL

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

-- Set the revision data
UPDATE vobp
SET vobp.[Revision] = 1
FROM t_VOScriptBatchPrint vobp
WHERE vobp.[SPID] = @@SPID
AND vobp.[Revision] IS NULL

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  END Determine the String Revision Numbers
------------------------------------------------------------------------

------------------------------------------------------------------------
--  Create the Script Instances
------------------------------------------------------------------------

-- Make Instances
INSERT t_VOScriptInstance
([VOScriptID], [Active], [StringLanguageID], 
[PrintedOn], [ScriptType], [ScriptParent])
SELECT DISTINCT [VOScriptID], 'A', [StringLanguageID], 
[PrintedOn], [ScriptType], [ScriptParent]
FROM t_VOScriptBatchPrint
WHERE [SPID] = @@SPID

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

-- Get these Instance IDs
UPDATE vobp
SET [VOScriptInstanceID] = vosi.[ID]
FROM t_VOScriptBatchPrint vobp
    JOIN t_VOScriptInstance vosi
        ON vobp.[SPID] = @@SPID
        AND vobp.[VOScriptID] = vosi.[VOScriptID]
        AND vosi.[Active] = 'A'
        AND vobp.[StringLanguageID] = vosi.[StringLanguageID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

-- Update the Comments and the OutputFolders
UPDATE vosi
SET [Comment] = vobp.[Comment],
[OutputFolder] = vobp.[OutputFolder]
FROM t_VOScriptInstance vosi
    JOIN t_VOScriptBatchPrint vobp
        ON vobp.[SPID] = @@SPID
        AND vobp.[VOScriptInstanceID] = vosi.[ID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  END Create the Script Instances
------------------------------------------------------------------------


------------------------------------------------------------------------
--  Create the Script Instance Strings 
------------------------------------------------------------------------

--  Look up the current Instance Strings (these will become PreviousVOScriptInstanceStringID)
UPDATE vobp
SET [PreviousVOScriptInstanceStringID] = vosis.[ID]
FROM t_VOScriptBatchPrint vobp
    JOIN t_VOScriptInstanceString vosis
        ON vosis.[StringID] = vobp.[StringID]
        AND vosis.[Active] = 'A'
        AND vosis.[StringVariantID] = vobp.[StringVariantID]
    JOIN t_VOScriptInstance vosi
        ON vosis.[VOScriptInstanceID] = vosi.[ID]
        AND vosi.[StringLanguageID] = vobp.[StringLanguageID]
WHERE vobp.[SPID] = @@SPID

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

--  Look up the English CompareDate values
UPDATE vobp
SET vobp.[CompareDate] = st.[VORequestOn]
FROM t_VOScriptBatchPrint vobp
    JOIN t_StringText st
        ON vobp.[SPID] = @@SPID
        AND vobp.[IsForeign] = 0 -- English only
        AND vobp.[StringID] = st.[StringID]
        AND vobp.[ModuleResRefVersionID] = st.[ModuleResRefVersionID]
        AND st.[StringLanguageVariantID] = 1

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


--  Perform Foreign VO Script Processing, only
--  if there is foreign VO Script data to process.
IF (EXISTS(
    SELECT 1
    FROM t_VOScriptBatchPrint
    WHERE [SPID] = @@SPID
    AND [IsForeign] = 1))
BEGIN    
    --  Look up the Foreign CompareDate values
    -- TODO : Verify this
    UPDATE uvobp
    SET uvobp.[StringLanguageVariantVersionID] = tMaxSLVVID.[MasStringLanguageVariantVersionID]
    FROM t_VOScriptBatchPrint uvobp
        JOIN (
            SELECT vobp.[ID], MAX(slvv.[ID]) as [MasStringLanguageVariantVersionID]
            FROM t_VOScriptBatchPrint vobp
                JOIN t_StringLanguageVariant slv
                    ON vobp.[SPID] = @@SPID
                    AND vobp.[StringLanguageID] = slv.[StringLanguageID]
                    AND vobp.[StringVariantID] = slv.[StringVariantID]
                JOIN t_StringLanguageVariantVersion slvv
                    ON slv.[ID] = slvv.[StringLanguageVariantID]
                    AND (slvv.[Status] = 'C' OR slvv.[Status] = 'H')
                JOIN t_StringImportSession sis
                    ON slvv.[StringImportSessionID] = sis.[ID]
                    AND vobp.[PrintedOn] > sis.[ImportedOn]
            GROUP BY vobp.[ID]        
        ) tMaxSLVVID
            ON uvobp.[SPID] = @@SPID
            AND uvobp.[IsForeign] = 1
            AND uvobp.[ID] = tMaxSLVVID.[ID]

    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR

    --  Apply Foreign CompareDate values
    UPDATE vobp
    SET vobp.[CompareDate] = sis.[ImportedOn]
    FROM t_VOScriptBatchPrint vobp
        JOIN t_StringLanguageVariantText slvt
            ON vobp.[SPID] = @@SPID
            AND vobp.[StringLanguageVariantVersionID] = slvt.[StringLanguageVariantVersionID]
            AND vobp.[StringID] = slvt.[StringID]
        JOIN t_StringImportSession sis
            ON slvt.[StringImportSessionID] = sis.[ID]    
            
    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR

END -- END Foreign VO Script Processing


--  Make new Script Instance String Records
INSERT INTO t_VOScriptInstanceString 
([VOScriptInstanceID], [Active], [Status], [Revision], [CompareDate],
[PreviousVOScriptInstanceStringID], [IsForeign], [StringID],
[ModuleResRefVersionID], [StringLanguageVariantID],
[StringLanguageVariantVersionID], [AudioFileName],
[StringVariantID])
SELECT [VOScriptInstanceID], 'A', 'P', [Revision], [CompareDate],
[PreviousVOScriptInstanceStringID], [IsForeign], [StringID],
[ModuleResRefVersionID], 1,
[StringLanguageVariantVersionID], [AudioFileName],
[StringVariantID]
FROM t_VOScriptBatchPrint vobp
WHERE vobp.[SPID] = @@SPID
AND vobp.[StringID] IS NOT NULL

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

--  Grab the new VOScriptInstanceStringIDs
UPDATE vobp
SET [VOScriptInstanceStringID] = vosis.[ID]
FROM t_VOScriptBatchPrint vobp
    JOIN t_VOScriptInstanceString vosis
        ON vobp.[SPID] = @@SPID
        AND vobp.[VOScriptInstanceID] = vosis.[VOScriptInstanceID]
        AND vobp.[StringID] = vosis.[StringID]
        AND (
            (vobp.[StringLanguageVariantVersionID] = vosis.[StringLanguageVariantVersionID]) 
            or (vosis.[IsForeign] = 0 and vobp.[IsForeign] = 0)
            )

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

--  Create new Script Instance String Status Records
INSERT INTO t_VOScriptInstanceStringStatus
([VOScriptInstanceStringID], [Active], [Action], 
[CompareDate], [Revision], [Comment])
SELECT vosis.[ID], 'A', 'P',
vosis.[CompareDate], vosis.[Revision], vobp.[Comment]
FROM t_VOScriptInstanceString vosis
    JOIN t_VOScriptBatchPrint vobp
        ON vobp.[SPID] = @@SPID
        AND vosis.[ID] = vobp.[VOScriptInstanceStringID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  END Create the Script Instance Strings 
------------------------------------------------------------------------

------------------------------------------------------------------------
--  Remove our temp data
------------------------------------------------------------------------
DELETE FROM t_VOScriptBatchPrint
WHERE [SPID] = @@SPID

COMMIT TRANSACTION tranVOBatchPrint

SET NOCOUNT OFF

return 0
------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

ROLLBACK TRANSACTION

SET NOCOUNT OFF

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_BatchPrintVOScriptLines]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

CREATE PROCEDURE [dbo].[bsp_CheckinResource]
@a_iModuleID int,
@a_iResRefID int,
@a_iVersionID int,
@a_sComment text
AS
declare @iModuleID int
declare @iResRefID int
declare @iError int
declare @iRowCount int
set @iError = 0
-- Start the main transaction 
BEGIN TRANSACTION tran_bsp_CheckinResource

-- Get the Module and ResRef ID's if we have passed in the Version
IF (@a_iVersionID IS NULL or @a_iVersionID <= 0)
 BEGIN
    SET @iModuleID = @a_iModuleID
    SET @iResRefID = @a_iResRefID
 END
ELSE
 BEGIN
    SELECT @iModuleID = ModuleID
    ,      @iResRefID = ResRefID
    FROM   t_ModuleResRefVersion
    WHERE  ID = @a_iVersionID
 END

-- Archive the current version
update t_ModuleResRefVersion 
set status = 'H'
from t_ModuleResRef mrr 
where t_ModuleResRefVersion.id = mrr.CurrentModuleResRefVersionID
and mrr.ModuleId = @iModuleID
and mrr.ResRefID = @iResRefID

SELECT @iRowCount = @@ROWCOUNT, @iError = @@ERROR
IF (@iError <> 0 or @iRowCount = 0) GOTO ON_ERROR

-- Update the scratch version that will become the current version
update t_ModuleResRefVersion 
set status = 'C', comment = case DATALENGTH(@a_sComment) WHEN 0 THEN NULL ELSE @a_sComment END, date = getdate()
from t_ModuleResRef mrr 
where t_ModuleResRefVersion.id = mrr.ScratchModuleResRefVersionID
and mrr.ModuleId = @iModuleID
and mrr.ResRefID = @iResRefID

SELECT @iRowCount = @@ROWCOUNT, @iError = @@ERROR
IF (@iError <> 0 or @iRowCount = 0) GOTO ON_ERROR

-- Update the current and scratch references
update t_ModuleResRef
set CurrentModuleResRefVersionID = ScratchModuleResRefVersionID
, ScratchModuleResRefVersionID = null
where ModuleId = @iModuleID
and ResRefID = @iResRefID
and ScratchModuleResRefVersionID IS NOT NULL

SELECT @iRowCount = @@ROWCOUNT, @iError = @@ERROR
IF (@iError <> 0 or @iRowCount = 0) GOTO ON_ERROR

COMMIT TRANSACTION tran_bsp_CheckinResource
return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
if (@iError = 0)
  set @iError = @@ERROR
ROLLBACK TRANSACTION 
return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_CheckinResource]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE PROCEDURE [dbo].[bsp_CheckoutResource]
@a_iModuleID int,
@a_iResRefID int,
@a_iCurrentVersionID int,
@a_iNewVersionID int OUTPUT
AS
declare @iModuleID int
declare @iResRefID int
declare @iCurrentVersionID int
declare @iRevisionID int
declare @iError int
declare @sTableName varchar(128)
DECLARE @iCounter int
declare @iTotalCount int
declare @iRowCount int
Declare @tResourceTables table (TID int IDENTITY, TableName varchar(128))
set @iError = 0
-- Start the main transaction 
BEGIN TRANSACTION tran_bsp_CheckoutResource
IF (@a_iCurrentVersionID IS NULL or @a_iCurrentVersionID <= 0)
 BEGIN
    select @iCurrentVersionID = CurrentModuleResRefVersionID
    ,      @iModuleID = @a_iModuleID
    ,      @iResRefID = @a_iResRefID
    from t_ModuleResRef mrr
    where ModuleId = @a_iModuleID
      and ResRefID = @a_iResRefID
      and ScratchModuleResRefVersionID IS NULL
 END
ELSE
 BEGIN
    SELECT @iCurrentVersionID = @a_iCurrentVersionID
    ,      @iModuleID = ModuleID
    ,      @iResRefID = ResRefID
    FROM   t_ModuleResRefVersion
    WHERE  ID = @a_iCurrentVersionID
 END
IF (@iCurrentVersionID IS NULL or @iCurrentVersionID <= 0)
 BEGIN
    SET @iError = -1
    GOTO ON_ERROR
 END

SELECT @iRevisionID = mrrv.RevisionID + 1
FROM t_ModuleResRefVersion mrrv
JOIN t_ModuleResRef mrr on mrrv.ID = mrr.CurrentModuleResRefVersionID
      AND mrr.ModuleID = @iModuleID
      AND mrr.ResRefID = @iResRefID
      AND mrr.ScratchModuleResRefVersionID IS NULL
select @iRowCount = @@ROWCOUNT, @iError = @@ERROR
IF (@iError <> 0 or @iRowCount = 0) GOTO ON_ERROR

insert into t_ModuleResRefVersion (ModuleID, OwnerModuleID, ResRefID, Name, Folder, Status, RevisionID, State)
select mrrv.ModuleID, mrrv.OwnerModuleID, mrrv.ResRefID, mrrv.Name, mrrv.Folder, 'S', @iRevisionID, mrrv.State
from t_ModuleResRefVersion mrrv
where mrrv.id = @iCurrentVersionID
select @iRowCount = @@ROWCOUNT, @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR
SET @a_iNewVersionID = SCOPE_IDENTITY()
INSERT INTO @tResourceTables(TableName)
select lower(rt.name)
from t_ResourceDefinition rd 
  join t_ResRef rr on rd.ResType = rr.ResType
    and rr.id = @iResRefID
  join t_ResourceTableRelationship rtr1 on rtr1.FullPath like convert(varchar(10),rd.BaseResourceTableID) + '.%'
  join t_ResourceTables rt on rt.id = rtr1.ChildResourceTableID
order by level
select @iTotalCount = @@ROWCOUNT, @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR
SET @iCounter = 1
WHILE @iCounter <= @iTotalCount 
 BEGIN
    SELECT @sTableName = TableName 
    FROM @tResourceTables 
    WHERE TID = @iCounter
    exec @iError = dbo.bsp_CreateNewResourceVersion @iCurrentVersionID, @a_iNewVersionID, @sTableName
    if (@iError <> 0) GOTO ON_ERROR
    SET @iCounter = @iCounter + 1
 END
-- We now do the string tables
exec @iError = dbo.bsp_CreateNewStringVersion @iCurrentVersionID, @a_iNewVersionID
if (@iError <> 0) GOTO ON_ERROR
update t_ModuleResRef set scratchmoduleresrefversionid = @a_iNewVersionID
where moduleid = @iModuleID and resrefid = @iResRefID
and scratchmoduleresrefversionid is null
SELECT @iRowCount = @@ROWCOUNT, @iError = @@ERROR
IF (@iError <> 0 or @iRowCount = 0) GOTO ON_ERROR
COMMIT TRANSACTION tran_bsp_CheckoutResource
return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
if (@iError = 0)
  set @iError = -1
ROLLBACK TRANSACTION 
return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_CheckoutResource]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO



------------------------------------------------------------------------
--  Alter bsp_CreateNewStringVersion to incorporate the VORequestOn flag
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_CreateNewStringVersion]
@a_iCurrentVersionID int,
@a_iNewVersionID int
AS

INSERT INTO t_StringVersion (StringID, ModuleResRefVersionID, StringTypeID, OwnerResRefID, Define)
SELECT StringID, @a_iNewVersionID, StringTypeID, OwnerResRefID, Define
FROM   t_StringVersion sv1
WHERE  sv1.ModuleResRefVersionID = @a_iCurrentVersionID

if (@@ERROR <> 0) GOTO ON_ERROR

INSERT INTO t_StringText (StringID, ModuleResRefVersionID, StringLanguageVariantID, 
[Text], [Description],
[LastMinorUpdateOn], [LastMinorUpdateBy], [LastMajorUpdateOn], [LastMajorUpdateBy],
[StringIsCopy], [MinorUpdateCount], [VORequestOn])
SELECT StringID, @a_iNewVersionID, StringLanguageVariantID, [Text], [Description],
[LastMinorUpdateOn], [LastMinorUpdateBy], [LastMajorUpdateOn], [LastMajorUpdateBy],
1, [MinorUpdateCount], [VORequestOn]
FROM   t_StringText st1
WHERE  st1.ModuleResRefVersionID = @a_iCurrentVersionID

if (@@ERROR <> 0) GOTO ON_ERROR

return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
return @@ERROR

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_CreateNewStringVersion]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO


------------------------------------------------------------------------
--  bsp_CreateScratchStringLanguageVariantVersion
------------------------------------------------------------------------
--  Owned By: Kris Tan
--  Created On: 09-21-2006
--  Description: This method creates a new Scratch entry and updates
--               t_StringLanguageVariant
------------------------------------------------------------------------

CREATE PROCEDURE [dbo].[bsp_CreateScratchStringLanguageVariantVersion]
    @a_iStringLanguageVariantID INT,
    @a_iStringImportSessionID INT,
    @a_inewStringLanguageVariantVersionID INT OUTPUT
AS

BEGIN TRANSACTION tranCreateScratchLangVarVer

DECLARE @iError INT

-- First check to see if a scratch already exists for this language variant version
IF EXISTS
(
    SELECT 1
    FROM [dbo].[t_StringLanguageVariant]
    WHERE [ID] = @a_iStringLanguageVariantID
        AND [ScratchStringLanguageVariantVersionID] IS NULL
)
BEGIN
    -- Create the new StringLanguageVariantVersion
    INSERT INTO [dbo].[t_StringLanguageVariantVersion]
    (
        [StringLanguageVariantID],
        [Status],
        [PreviousStringLanguageVariantVersionID],
        [StringImportSessionID]
    )
    SELECT
        [ID],
        'S',
        [CurrentStringLanguageVariantVersionID],
        @a_iStringImportSessionID
    FROM [dbo].[t_StringLanguageVariant]
    WHERE [ID] = @a_iStringLanguageVariantID
    
    -- Retrieve the newly created ID
    SELECT @iError = @@ERROR, @a_inewStringLanguageVariantVersionID = SCOPE_IDENTITY()
    if (@iError <> 0) GOTO ON_ERROR

    
    -- Update the scratch id in t_StringLanguageVariant to the new ID we just created
    UPDATE [dbo].[t_StringLanguageVariant]
    SET
        [ScratchStringLanguageVariantVersionID] = @a_inewStringLanguageVariantVersionID
    WHERE
        [ID] = @a_iStringLanguageVariantID

    SELECT @iError = @@ERROR
    if (@iError <> 0) GOTO ON_ERROR
END
ELSE
BEGIN
    SET @iError = -1
    GOTO ON_ERROR
END

COMMIT TRANSACTION tranCreateScratchLangVarVer

return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------

ROLLBACK TRANSACTION

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_CreateScratchStringLanguageVariantVersion]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO


------------------------------------------------------------------------
--  Stored Proc: bsp_CreateVOSession
------------------------------------------------------------------------
--  Owned By: Chris Mihalick
--  Created On: May 15, 2008
--  Description: Creates a VO Session, returns the ID
--
--  Parameters
--    @a_iLanguageID - Language
--    @a_iNewVOSessionID - OUT - ID of created VO Session
--
--  Returns
--    o 0 = success
--    o else = error code
--
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_CreateVOSession]
@a_iLanguageID int,
@a_iNewVOSessionID int OUTPUT
AS

SET NOCOUNT ON

DECLARE @iError int

BEGIN TRANSACTION tran_CreateVOSession

INSERT t_VOSession ([LanguageID]) VALUES (@a_iLanguageID)

SELECT @a_iNewVOSessionID = SCOPE_IDENTITY() , @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

COMMIT TRANSACTION tran_CreateVOSession

SET NOCOUNT OFF

RETURN 0

------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

ROLLBACK TRANSACTION

SET @a_iNewVOSessionID = -1

SET NOCOUNT OFF

RETURN @iError



GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_CreateVOSession]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE PROCEDURE [dbo].[bsp_DeleteResource]
 @a_iID int,
 @a_bDelete bit,
 @a_bReWrite bit,
 @a_bUndoCheckOut bit
AS
declare @iError int
declare @iRowCount int
declare @iID int
declare @sTableName varchar(128)
DECLARE @iCounter int
declare @iTotalCount int
Declare @tResourceTables table (TID int IDENTITY, TableName varchar(128))
declare @sql nvarchar(4000)

set @iError = 0
set @sql = ''
set @iID = @a_iID

-- Start the main transaction 
BEGIN TRANSACTION tran_bsp_DeleteResource

if (@a_bDelete = 1)
 BEGIN
    update t_ModuleResRefVersion
    set status = 'H'
    where id = @iID
    and state <> -1

    SELECT @iError = @@ERROR, @iRowCount = @@ROWCOUNT

    IF @iRowCount = 0 AND @iError = 0 SET @iError = -1
    IF (@iError <> 0) GOTO ON_ERROR
    
    update t_ModuleResRef
    set CurrentModuleResRefVersionID = NULL
    from t_ModuleResRefVersion mrrv
    where mrrv.id = @iID
    and t_ModuleResRef.ModuleID = mrrv.ModuleID
    and t_ModuleResRef.ResRefID = mrrv.ResRefID
    set @iError = @@ERROR
    if (@iError <> 0) GOTO ON_ERROR
 END
ELSE
 BEGIN
   IF (@a_bReWrite = 1)
     BEGIN
        -- We do not delete the main table
        
        INSERT INTO @tResourceTables(TableName)
        select lower(rt.name)
        from t_ResourceDefinition rd 
          join t_ResRef rr on rd.ResType = rr.ResType
          join t_ModuleResRefVersion mrrv on rr.id = mrrv.resrefid
            and mrrv.id = @iID
          join t_ResourceTableRelationship rtr1 on rtr1.FullPath like convert(varchar(10),rd.BaseResourceTableID) + '.%'
            and rtr1.FullPath <> convert(varchar(10),rd.BaseResourceTableID) + '.'
          join t_ResourceTables rt on rt.id = rtr1.ChildResourceTableID
        order by level desc
     END
   ELSE
     BEGIN
        -- We are performing an undo checkout at this point
        
        -- We have to delete the string tables
        
        INSERT INTO @tResourceTables(TableName)
        VALUES ('t_stringtext')
        INSERT INTO @tResourceTables(TableName)
        VALUES ('t_stringversion')
        
        -- We delete all the tables
        
        INSERT INTO @tResourceTables(TableName)
        select lower(rt.name)
        from t_ResourceDefinition rd 
          join t_ResRef rr on rd.ResType = rr.ResType
          join t_ModuleResRefVersion mrrv on rr.id = mrrv.resrefid
            and mrrv.id = @iID
          join t_ResourceTableRelationship rtr1 on rtr1.FullPath like convert(varchar(10),rd.BaseResourceTableID) + '.%'
          join t_ResourceTables rt on rt.id = rtr1.ChildResourceTableID
        order by level desc
     END
    set @iError = @@ERROR
    if (@iError <> 0) GOTO ON_ERROR
    select @iTotalCount = count(*) from @tResourceTables
    SET @iCounter = 1
    WHILE @iCounter <= @iTotalCount 
     BEGIN
        SELECT @sTableName = TableName 
        FROM @tResourceTables 
        WHERE TID = @iCounter
        set @sql = 'delete from ' + @sTableName + 
        ' where moduleresrefversionid = ' + convert(varchar(10),@iID)
        exec sp_executesql @sql
        set @iError = @@ERROR
        if (@iError <> 0) GOTO ON_ERROR
        SET @iCounter = @iCounter + 1
     END
    
    IF (@a_bUndoCheckOut = 1)
      BEGIN
        -- Now we clean up the version records
        UPDATE t_ModuleResRef
        SET ScratchModuleResRefVersionID = NULL
        FROM t_ModuleResRefVersion mrrv
        WHERE mrrv.ModuleID = t_ModuleResRef.ModuleID
        AND   mrrv.ResRefID = t_ModuleResRef.ResRefID
        AND   mrrv.id = @iID
        set @iError = @@ERROR
        if (@iError <> 0) GOTO ON_ERROR
        
        DELETE FROM t_ModuleResRefVersion
        WHERE ID = @iID
        set @iError = @@ERROR
        if (@iError <> 0) GOTO ON_ERROR
        
        -- Now we can cleanup any strings that were created in scratch
        DELETE FROM t_String
        WHERE not exists
        (SELECT 'x' FROM t_StringVersion sv
         JOIN t_ModuleResRefVersion mrrv on sv.ModuleResRefVersionID = mrrv.ID
         where sv.stringid = t_String.id)
        set @iError = @@ERROR
        if (@iError <> 0) GOTO ON_ERROR
         
      END    
 END
COMMIT TRANSACTION tran_bsp_DeleteResource
return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
if (@iError = 0)
  set @iError = -1
ROLLBACK TRANSACTION 
return @iError


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_DeleteResource]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO



CREATE PROCEDURE [dbo].[bsp_DeleteString]
 @a_iID int,
 @a_iModuleResRefVersionID int,
 @a_iStringLanguageVariantID int
AS
declare @iError int

set @iError = 0

-- Start the main transaction 
BEGIN TRANSACTION tran_bsp_DeleteString

DELETE FROM t_StringText
WHERE StringID = @a_iID
AND   ModuleResRefVersionID = @a_iModuleResRefVersionID
AND   StringLanguageVariantID = @a_iStringLanguageVariantID

set @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

DELETE FROM t_StringVersion
WHERE StringID = @a_iID
AND   ModuleResRefVersionID = @a_iModuleResRefVersionID

set @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

DELETE FROM t_String 
WHERE id = @a_iID
AND   not exists 
    (SELECT 1
     FROM t_moduleresrefversion mrrv1 
          JOIN t_ModuleResRefVersion mrrv on mrrv.moduleid = mrrv1.moduleid
               and mrrv.resrefid = mrrv1.resrefid 
          JOIN t_StringVersion sv on sv.ModuleResRefVersionID = mrrv.ID 
               and sv.stringid = t_String.id 
     WHERE mrrv1.id = @a_iModuleResRefVersionID)

set @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR
         
COMMIT TRANSACTION tran_bsp_DeleteString
return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
if (@iError = 0)
  set @iError = -1
ROLLBACK TRANSACTION 
return @iError


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_DeleteString]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO


------------------------------------------------------------------------
--  Stored Proc: bsp_DetermineVOScriptLineCharacters
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: February 22, 2007
--
--  Description: Determines the Character that is mapped to every line
--    that appears in a Conversation.  Lines that could not be mapped 
--    to a character are not returned.
--
--  NOTE: data is placed in t_VOScriptLineCharacterInternal, keyed on 
--    @@SPID.  The caller is responsible for cleaning up this data.
--  
--  NOTE: When a VOScriptID is not specified, the result set includes
--    resources that do not have a t_VOScript entry.  When a VOScriptID
--    is specified, the result set only includes the resource that 
--    corresponds to that VOScript.
-- 
--  Parameters:
--        
--    a_iVOScriptID - Set as follows:
--      o NULL when looking up characters for lines on all VO Scripts
--      o VOScriptID of a specific VOScript
--    a_iModuleResRefVersionID - Set as follows:
--      o NULL will use the live/current version of needed resources
--      o MRRVersionID will use that specific version of a resource.
--        Only set a versionID when using a specific VOScriptID.
--
------------------------------------------------------------------------
CREATE  PROCEDURE [dbo].[bsp_DetermineVOScriptLineCharacters]
@a_iVOScriptID int,
@a_iModuleResRefVersionID int
AS

SET NOCOUNT ON

DECLARE @iError int

BEGIN TRANSACTION tranDetermineVOScriptChars

CREATE TABLE #tblDLGTagCharacter
(
    [ModuleID] int, 
    [ResRefID] int, 
    [ModuleResRefVersionID] int,
    [Tag] varchar(32), 
    [CharacterModuleID] int, 
    [CharacterResRefID] int
)

------------------------------------------------------------------------
--  Ensure the process-key space we will be using is empty.
------------------------------------------------------------------------
DELETE FROM t_VOScriptLineCharacterInternal WHERE [SPID] = @@SPID

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  Look up the Tags - Character
------------------------------------------------------------------------

INSERT INTO #tblDLGTagCharacter
    ([ModuleID], [ResRefID], 
     [ModuleResRefVersionID], 
     [Tag], 
     [CharacterModuleID], [CharacterResRefID])
EXEC @iError = [dbo].[bsp_GetConversationTagToCharacterList] @a_iModuleResRefVersionID, 1, 0
IF (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  Thin out tag-character information belonging to resources for 
--  scripts that we are not interested in.  If @a_iVOScriptID is NULL, 
--  leave all this data alone.
------------------------------------------------------------------------

IF (@a_iVOScriptID IS NOT NULL)
BEGIN

    DELETE t
    FROM #tblDLGTagCharacter t
    WHERE NOT EXISTS
    (
        SELECT 1
        FROM t_VOScript vos
        WHERE vos.[ResourceModuleID] = t.[ModuleID]
        AND vos.[ResourceResRefID] = t.[ResRefID]
        AND @a_iVOScriptID = vos.[ID]
    )

    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR

END

------------------------------------------------------------------------
--  Prepare a list of conversation lines and their resolved Speaker
--  tags.  
--  Add the information into our table.  This is the lines and 
--  associated character for every line of vo script resource.
------------------------------------------------------------------------
--  NOTE: April 23, 2008, Chris Christou
--    With the Exception of SoundSets, we will strip all Character 
--    mappings from blank lines.  There are issues with scripting 
--    conditional lines being mapped to multiple (or none) characters, 
--    but since these lines are blank, no character is necessary.
--
--    Soundsets will be excluded from this -- many of the soundset lines
--      are blank to denote that they are placeholder lines.  We want
--      these to be mapped to the soundset owner so that the line counts
--      will be properly reflected.
------------------------------------------------------------------------

INSERT INTO t_VOScriptLineCharacterInternal
( [SPID], [ResourceModuleID], [ResourceResRefID],
[ResourceModuleResRefVersionID], [StringID],
[CharacterModuleID], [CharacterResRefID] )
SELECT
@@SPID, t.[ModuleID], t.[ResRefID], 
t.[ModuleResRefVersionID], cl.[TextStringID],
t.[CharacterModuleID], t.[CharacterResRefID]
FROM #tblDLGTagCharacter t
    JOIN t_Conversation c WITH ( NOLOCK ) 
        ON t.[ModuleResRefVersionID] = c.[ModuleResRefVersionID]
    JOIN t_ConversationLine cl WITH ( NOLOCK ) 
        ON c.[ModuleResRefVersionID] = cl.[ModuleResRefVersionID]
        AND t.[Tag] = CASE WHEN cl.[Speaker] = '' THEN c.[DefaultNPCSpeaker] ELSE cl.[Speaker] END
    JOIN t_StringText st WITH ( NOLOCK ) 
        ON st.[ModuleResRefVersionID] = cl.[ModuleResRefVersionID]
        AND st.[StringID] = cl.[TextStringID]
    JOIN t_ModuleResRefVersion mrv WITH ( NOLOCK ) 
        ON st.[ModuleResRefVersionID] = mrv.[ID]
WHERE 
    ( st.[WordCount] > 0 OR 
      (LEFT(mrv.[Name], 3) = 'ss_' AND cl.[IsPC] = 0) )

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Dump our temp objects
------------------------------------------------------------------------
DROP TABLE #tblDLGTagCharacter

COMMIT TRANSACTION tranDetermineVOScriptChars

SET NOCOUNT OFF

return 0
------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

ROLLBACK TRANSACTION

SET NOCOUNT OFF

return @iError


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_DetermineVOScriptLineCharacters]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  Stored Proc: bsp_DoNotReRecordVOScriptString
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: February 21, 2007
--  Description: Marks an InstanceString so that it does not indicate
--    that it requires recording.  Call this on active strings only.
--    If the string is modified after this datetime, it will once 
--    again require recording.
-- 
--  Parameters
--    a_iVOScriptInstanceStringID - InstanceStringID to mark as 
--      presently not requiring recording.
--    a_sComment - User comment to associate with the ReRecord action
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_DoNotReRecordVOScriptString]
@a_iVOScriptInstanceStringID int,
@a_sComment nText
AS

SET NOCOUNT ON

DECLARE @iError int

BEGIN TRANSACTION tranDoNotReRecord

------------------------------------------------------------------------
--  Update the CompareDate on the record of interest
--  Set it to the current DateTime so that the string 
--  will not indicate it needs recording unless somebody
--  changes it after this point.
------------------------------------------------------------------------

UPDATE vosis
SET [CompareDate] = GetDate()
FROM t_VOScriptInstanceString vosis
WHERE [ID] = @a_iVOScriptInstanceStringID

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  Add new InstanceStringStatus record
------------------------------------------------------------------------

INSERT INTO t_VOScriptInstanceStringStatus
([VOScriptInstanceStringID], [Active], [Action], 
[CompareDate], [Revision], [Comment])
SELECT vosis.[ID], 'A', 'D', 
vosis.[CompareDate], vosis.[Revision], @a_sComment
FROM t_VOScriptInstanceString vosis
WHERE [ID] = @a_iVOScriptInstanceStringID

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

COMMIT TRANSACTION tranDoNotReRecord

SET NOCOUNT OFF

return 0
------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

ROLLBACK TRANSACTION

SET NOCOUNT OFF

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_DoNotReRecordVOScriptString]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  Stored Proc: bsp_GetAllStringsRequiringRecording
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: June 15, 2007
--  Description: Returns all strings requiring VO Recording 
--    per Character/Resource.
--
--  Used by Web Report.
--    
--  Parameters
--    a_iStringLanguageID - IN 
--      The Language that the script data should be retrieved for.
--    a_bIncludeBlankLines - IN 
--      - set to 1 (true) to include blank lines in the count
--      - set to 0 (false) to exclude blank lines in the count
--        
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_GetAllStringsRequiringRecording]
@a_iStringLanguageID int, 
@a_bIncludeBlankLines bit
AS

SET NOCOUNT ON

DECLARE @iError int

------------------------------------------------------------------------
--  Map the resource lines to Characters
------------------------------------------------------------------------

-- Then do the mapping
EXEC @iError = [dbo].[bsp_DetermineVOScriptLineCharacters] NULL, NULL
IF (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  Look up the Requires Recording datetimestamp for each of these
--  character strings.  For english this is VORequestOn, and for 
--  foreign, this is ImportedOn.  Store this data locally for now.
------------------------------------------------------------------------
DECLARE @tblStringVORequest TABLE ( 
    [StringID] int, 
    [StringVariantID] int, 
    [VORequestOn] datetime NOT NULL,
    [VORecordedOn] datetime NULL,
    [Text] nText)

IF (@a_iStringLanguageID = dbo.udf_GetProjectStringLanguageID())
BEGIN
    -- Load English strings + VORequestOn dates
    INSERT INTO @tblStringVORequest
        ([StringID], 
        [StringVariantID], [VORequestOn],
        [Text])
    SELECT st.[StringID], 
        1, st.[VORequestOn],
        st.[Text]
    FROM t_StringText st
        JOIN t_VOScriptLineCharacterInternal voslci
            ON [SPID] = @@SPID
            AND st.[StringID] = voslci.[StringID]
            AND st.[ModuleResRefVersionID] = voslci.[ResourceModuleResRefVersionID]
            AND st.[StringLanguageVariantID] = 1
            AND (@a_bIncludeBlankLines = 1 OR st.[WordCount] > 0)

    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR

    UPDATE voRequest
    SET voRequest.[VORecordedOn] = vosis.[CompareDate]
    FROM @tblStringVORequest voRequest
        JOIN t_VOScriptInstanceString vosis
            ON voRequest.[StringID] = vosis.[StringID]
            AND vosis.[Active] = 'A'
            AND vosis.[Status] = 'P'
            AND vosis.[IsForeign] = 0

    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR
            
END
ELSE
BEGIN 
    -- Load Foreign strings (all variants) + ImportedOn dates
    INSERT INTO @tblStringVORequest
        ([StringID], 
        [StringVariantID], [VORequestOn],
        [Text])
    SELECT slvt.[StringID], 
        slv.[StringVariantID], sis.[ImportedOn],
        slvt.[Text]
    FROM t_StringLanguageVariantText slvt
        JOIN t_StringImportSession sis
            ON slvt.[StringImportSessionID] = sis.[ID]
            AND (@a_bIncludeBlankLines = 1 OR slvt.[IsBlank] = 0)
        JOIN t_StringLanguageVariant slv
            ON slvt.[StringLanguageVariantVersionID] = slv.[CurrentStringLanguageVariantVersionID]
            AND slv.[StringLanguageID] = @a_iStringLanguageID
        JOIN t_VOScriptLineCharacterInternal voslci
            ON [SPID] = @@SPID
            AND slvt.[StringID] = voslci.[StringID]
            
    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR

    UPDATE voRequest
    SET voRequest.[VORecordedOn] = vosis.[CompareDate]
    FROM @tblStringVORequest voRequest
        JOIN t_VOScriptInstanceString vosis
            ON voRequest.[StringID] = vosis.[StringID]
            AND vosis.[Active] = 'A'
            AND vosis.[Status] = 'P'
        JOIN t_StringLanguageVariantVersion slvv
            ON vosis.[StringLanguageVariantVersionID] = slvv.[ID]
        JOIN t_StringLanguageVariant slv
            ON slvv.[StringLanguageVariantID] = slv.[ID]
            AND slv.[StringLanguageID] = @a_iStringLanguageID
            AND slv.[StringVariantID] = voRequest.[StringVariantID]

    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR
END

------------------------------------------------------------------------
--  Make the Requires Recording Comparison
------------------------------------------------------------------------

SELECT 
voChar.[Name] as [CharacterName], 
mrvRes.[Name] as [ResourceResRef], 
voslci.[ResourceModuleResRefVersionID],
voRequest.[StringID],
sv.[Name] as [Variant],
voRequest.[Text]
FROM @tblStringVORequest voRequest
    JOIN t_VOScriptLineCharacterInternal voslci
        ON voslci.[SPID] = @@SPID
        AND voRequest.[StringID] = voslci.[StringID]
    JOIN t_ModuleResRef mrChar
        ON voslci.[CharacterModuleID] = mrChar.[ModuleID]
        AND voslci.[CharacterResRefID] = mrChar.[ResRefID]
    JOIN t_Character voChar
        ON mrChar.[CurrentModuleResRefVersionID] = voChar.[ModuleResRefVersionID]
    JOIN t_ModuleResRefVersion mrvRes
        ON voslci.[ResourceModuleResRefVersionID] = mrvRes.[ID]
    JOIN t_StringVariant sv
        ON voRequest.[StringVariantID] = sv.[ID]
WHERE
(
    voRequest.[VORecordedOn] IS NULL OR 
    voRequest.[VORequestOn] > voRequest.[VORecordedOn]
)

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

-- Remove the temp data 
DELETE FROM t_VOScriptLineCharacterInternal WHERE [SPID] = @@SPID

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

SET NOCOUNT OFF

return 0
------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

SET NOCOUNT OFF

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetAllStringsRequiringRecording]  TO [bw_db_read]
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetAllStringsRequiringRecording]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE PROCEDURE [dbo].[bsp_GetAreaList]
@a_iModuleID INT,
@a_bUseModuleTree BIT
AS

DECLARE @iReturn INT

SELECT 
    c.ModuleResRefVersionID, 
    mrrv1.Name as Name,
    c.Comments, 
    c.AreaListResRefID, 
    CASE isnull(mrrv2.ID, -1) WHEN -1 
        THEN 0 
        ELSE 1
    END as CheckedOut 
FROM dbo.udf_GetModuleHierarchy(@a_iModuleID, @a_bUseModuleTree) mt
    JOIN t_ModuleResRef mrr ON mt.ModuleID = mrr.ModuleID
    JOIN t_ModuleResRefVersion mrrv1 ON mrr.CurrentModuleResRefVersionID = mrrv1.ID
    LEFT JOIN t_ModuleResRefVersion mrrv2 ON mrr.ScratchModuleResRefVersionID = mrrv2.ID
    JOIN t_Area c ON mrrv1.ID = c.ModuleResRefVersionID

SELECT @iReturn = @@ERROR
IF (@iReturn != 0) GOTO ON_ERROR

---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
RETURN @iReturn



GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetAreaList]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE PROCEDURE [dbo].[bsp_GetAreaListList]
@a_iModuleID INT,
@a_bUseModuleTree BIT
AS

DECLARE @iReturn INT

SELECT 
      mrr.ResRefID, 
      mrrv1.Name, 
      r.Description
FROM  dbo.udf_GetModuleHierarchy(@a_iModuleID, @a_bUseModuleTree) mt
      JOIN t_ModuleResRef mrr ON mt.ModuleID = mrr.ModuleID
      JOIN t_ModuleResRefVersion mrrv1 ON mrr.CurrentModuleResRefVersionID = mrrv1.ID
      JOIN t_AreaList r ON mrrv1.ID = r.ModuleResRefVersionID  

SELECT @iReturn = @@ERROR
IF (@iReturn != 0) GOTO ON_ERROR

---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
RETURN @iReturn



GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetAreaListList]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  Stored Proc: bsp_GetCharacterLineCountsPerResource
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: June 19, 2007
--  Description: Returns a count of each Character's 
--    Lines per VO Script.
--
--  This procedure was developed for use with a VO Related Web Report.
--
--  Parameters
--    a_bIncludeBlankLines - set as follows:
--      o 1: includes blank lines
--      o 0: excludes them
--
--  Result Set: 
--    CharacterName - Name field from the Character Table
--    CharacterResRef - Character ResRef name
--    Resource - ResRef of Resource (typically a dlg resource)
--    ResourceFolder - Folder of Resource
--    Line Count - Total line count for this character
--
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_GetCharacterLineCountsPerResource]
@a_bIncludeBlankLines bit
AS

SET NOCOUNT ON
DECLARE @iError int

------------------------------------------------------------------------
--  Load the Resources/Strings/Characters for our data of interest
------------------------------------------------------------------------
EXEC @iError = [dbo].[bsp_DetermineVOScriptLineCharacters] NULL, NULL
IF (@iError <> 0) GOTO ON_ERROR

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  Return results
------------------------------------------------------------------------
SELECT 
    c.[Name] as [CharacterName],
    mrvChar.[Name] as [CharacterResRef],
    mrvRes.[Name] as [Resource],
    mrvRes.[Folder] as [ResourceFolder],
    COUNT(*) as [LineCount]
FROM t_VOScriptLineCharacterInternal voslci
    JOIN t_ModuleResRef mrChar
        ON voslci.CharacterModuleID = mrChar.ModuleID
        AND voslci.CharacterResRefID = mrChar.ResRefID
    JOIN t_ModuleResRefVersion mrvChar
        ON mrChar.[CurrentModuleResRefVersionID] = mrvChar.[ID]
    JOIN t_ModuleResRefVersion mrvRes
        ON voslci.[ResourceModuleResRefVersionID] = mrvRes.[ID]
    JOIN t_Character c
        ON c.[ModuleResRefVersionID] = mrvChar.[ID]
    JOIN t_StringText st
        ON voslci.[StringID] = st.[StringID]
        AND voslci.[ResourceModuleResRefVersionID] = st.[ModuleResRefVersionID]
        AND ( (@a_bIncludeBlankLines = 1) OR (st.[WordCount] > 0) )
WHERE voslci.SPID = @@SPID
GROUP BY 
    mrvChar.[Name], 
    c.[Name],
    mrvRes.[Name],
    mrvRes.[Folder]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Remove our temp data
------------------------------------------------------------------------
DELETE FROM t_VOScriptLineCharacterInternal
WHERE [SPID] = @@SPID

SET NOCOUNT OFF

RETURN 0

------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

SET NOCOUNT OFF

RETURN @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetCharacterLineCountsPerResource]  TO [bw_db_read]
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetCharacterLineCountsPerResource]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE PROCEDURE [dbo].[bsp_GetCharacterList]
@a_iModuleID INT,
@a_bUseModuleTree BIT
AS

DECLARE @iReturn INT

SELECT 
      c.ModuleResRefVersionID, 
      CASE c.Name WHEN ''
        THEN mrrv1.Name
        ELSE c.Name
      END as Name,
      c.Description, 
      c.RoleResRefID, 
      CASE isnull(mrrv2.ID, -1) WHEN -1 
        THEN 0 
        ELSE 1
      END as CheckedOut 
FROM dbo.udf_GetModuleHierarchy(@a_iModuleID, @a_bUseModuleTree) mt
       JOIN t_ModuleResRef mrr ON mt.ModuleID = mrr.ModuleID
       JOIN t_ModuleResRefVersion mrrv1 ON mrr.CurrentModuleResRefVersionID = mrrv1.ID
       LEFT JOIN t_ModuleResRefVersion mrrv2 ON mrr.ScratchModuleResRefVersionID = mrrv2.ID
       JOIN t_Character c ON mrrv1.ID = c.ModuleResRefVersionID

SELECT @iReturn = @@ERROR
IF (@iReturn != 0) GOTO ON_ERROR

---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
RETURN @iReturn



GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetCharacterList]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  Stored Proc: bsp_GetCharacterWordAndLineCounts
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: June 14, 2007
--  Description: Returns a count of each Character's 
--    Words and Lines across the VO Scripts.
--
--  This procedure was developed for use with a VO Related Web Report.
--
--  Parameters
--    - None
--
--  Result Set: 
--    For each Character, a Word and Line count of every conversation
--      it is known to have VO Participation in.
--
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_GetCharacterWordAndLineCounts]
AS

SET NOCOUNT ON
DECLARE @iError int

------------------------------------------------------------------------
--  Load the Resources/Strings/Characters for our data of interest
------------------------------------------------------------------------
EXEC @iError = [dbo].[bsp_DetermineVOScriptLineCharacters] NULL, NULL
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Prep the data for stats aggregation
------------------------------------------------------------------------
EXEC @iError = [dbo].[bsp_AdjustVOScriptLineCharacterInternalForStats]
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Return results
------------------------------------------------------------------------
SELECT 
    mChar.[ID] as [CharacterModuleID], mChar.[Name] as [CharacterModule],
    [dbo].[udf_GetTopLevelFolder](mrvChar.[Folder]) as [CharacterTopFolder],
    mrvChar.[Folder] as [CharacterFolder], mrvChar.[Name] as [CharacterResRef],
    c.[Name] as [CharacterName],
    CASE c.[CharacterType] 
        WHEN 0 THEN 'Major' 
        WHEN 1 THEN 'Medium' 
        WHEN 2 THEN 'Minor' 
        ELSE 'UNKNOWN' 
    END AS [CharacterType],
    mRes.[ID] as [ResourceModuleID], mRes.[Name] as [ResourceModule],
    [dbo].[udf_GetTopLevelFolder](mrvRes.[Folder]) as [ResourceTopFolder],
    mrvRes.[Folder] as [ResourceFolder], mrvRes.[Name] as [ResourceResRef],
    SUM(st.[WordCount]) as [WordCount],
    COUNT(*) as [LineCount]
FROM t_VOScriptLineCharacterInternal voslci
    JOIN t_ModuleResRefVersion mrvChar
        ON voslci.CharacterModuleID = mrvChar.ModuleID
        AND voslci.CharacterResRefID = mrvChar.ResRefID
        AND mrvChar.[Status] = 'C'
    JOIN t_Character c
        ON c.[ModuleResRefVersionID] = mrvChar.[ID]
    JOIN t_ModuleResRefVersion mrvRes 
        on mrvRes.[ID] = voslci.[ResourceModuleResRefVersionID]
    JOIN t_StringText st
        ON voslci.[StringID] = st.[StringID]
        AND voslci.[ResourceModuleResRefVersionID] = st.[ModuleResRefVersionID]
    JOIN t_Module mRes
        on mRes.[ID] = mrvRes.[ModuleID]
    JOIN t_Module mChar
        on mChar.[ID] = mrvChar.[ModuleID]
WHERE voslci.SPID = @@SPID
GROUP BY 
    mChar.[ID], mChar.[Name], mrvChar.[Folder], mrvChar.[Name], 
    c.[Name], c.[CharacterType], 
    mRes.[ID], mRes.[Name], mrvRes.[Folder], mrvRes.[Name]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Remove our temp data
------------------------------------------------------------------------
DELETE FROM t_VOScriptLineCharacterInternal
WHERE [SPID] = @@SPID

SET NOCOUNT OFF

RETURN 0

------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

SET NOCOUNT OFF

RETURN @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetCharacterWordAndLineCounts]  TO [bw_db_read]
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetCharacterWordAndLineCounts]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  STORED PROCEDURE: bsp_GetConversationTagToCharacterList
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: December 13, 2006
--  Returns:
--      0 = success
--      non-zero = error code
--
--  Parameters:
--      @a_iDLGModuleResRefVersionID: set as follows:
--        o NULL to list data from all current conversations
--        o else use a ModResRefVersionID for a specific conversation.
--      @a_bLoadSpeakerTags: set as follows:
--        o 1 (true) loads Speaker Tags
--        o 0 (false) does not load Speaker Tags
--      @a_bLoadListenerTags: set as follows:
--        o 1 (true) loads Listener Tags
--        o 0 (false) does not load Listener Tags
--
--  Description: Gets all Speaker or Listener Tags for Conversation(s)
--    and looks up the corresponding Character for those tags.
--
--  NOTE: if a Tag maps to more than one Character, its an error, but 
--      all of the Characters are listed from this stored procedure. 
--
--  NOTE: Lines that do not map to a character are not returned at all
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_GetConversationTagToCharacterList]
   @a_iDLGModuleResRefVersionID int,
   @a_bLoadSpeakerTags bit,
   @a_bLoadListenerTags bit
AS 

SET NOCOUNT ON 

DECLARE @iError INT

declare @tblLiveTags TABLE
(   [ModuleResRefVersionID] int NOT NULL,
    [Listener] varchar(32) NOT NULL,
    [Speaker] varchar(32) NOT NULL
)


------------------------------------------------------------------------
-- Collect all LISTENER and SPEAKER TAGS from current conversations
------------------------------------------------------------------------

INSERT @tblLiveTags
([ModuleResRefVersionID], [Listener], [Speaker])

SELECT DISTINCT
    cl.[ModuleResRefVersionID], 
    CASE cl.[Listener]
        WHEN '' THEN 
            CASE cl.[IsPC] 
                WHEN 0 THEN c.[DefaultNPCListener]
                ELSE c.[DefaultPCListener] 
            END
        ELSE cl.[Listener] 
    END AS [Listener],
    CASE cl.[Speaker]
        WHEN '' THEN c.[DefaultNPCSpeaker]
        ELSE cl.[Speaker] 
    END AS [Speaker]
FROM t_ConversationLine cl WITH ( NOLOCK )
    join t_Conversation c WITH ( NOLOCK ) -- c is needed for the DEFAULT Speaker/Listener resolution 
        on cl.[ModuleResRefVersionID] = c.[ModuleResRefVersionID]
    join t_ModuleResRefVersion mrv
        -- mrv is used for Status
        on mrv.[ID] = c.[ModuleResRefVersionID]
        and 
        (
            (@a_iDLGModuleResRefVersionID IS NULL AND mrv.[Status] = 'C')
            OR
            (@a_iDLGModuleResRefVersionID IS NOT NULL AND mrv.[ID] = @a_iDLGModuleResRefVersionID)
        )    

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
-- Make a distinct list of tags, removing PLAYER and PREVSPEAKER tags
------------------------------------------------------------------------
DECLARE @tTags TABLE
(   [DlgModuleResRefVersionID] int NOT NULL,
    [Tag] varchar(32) NOT NULL
)

INSERT @tTags
SELECT * FROM 
    (SELECT ModuleResRefVersionID, Listener as [Tag] from @tblLiveTags where @a_bLoadListenerTags = 1
    UNION 
    SELECT ModuleResRefVersionID, Speaker as [Tag] from @tblLiveTags where @a_bLoadSpeakerTags = 1
    ) x
WHERE x.[Tag] != 'PLAYER'
AND x.[Tag] != 'PREVSPEAKER'
AND x.[Tag] != ''

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
-- Make a collection of what Characters belong to what 
-- Creatures and Placeables.  We make this here for the following 
-- reasons:
-- * This is used more than once in following queries
-- * The older version of this BSP did not use the Module Tree, and
--   it is now necessary to use the module tree (example: CRE in 
--   Single Player references CHR in Core Module).
-- NOTES:
--  - This only shows the CRE/PLA that have character associations
--    (this is what we are presently interested in)
--  - This will break if the project allows the same ResRefID to 
--    exist in several Modules.  Currently this does not happen with 
--    Characters.
------------------------------------------------------------------------
DECLARE @tObjectToCharacter TABLE 
(   
    [ObjectModuleResRefVersionID] int NOT NULL,
    [ConversationResRefID] int NULL,
    [Tag] varchar(32) NOT NULL,
    [CharacterModuleID] int NOT NULL,
    [CharacterResRefID] int NOT NULL
)


INSERT @tObjectToCharacter
SELECT
    currentObject.[ModuleResRefVersionID], 
    currentObject.[ConversationResRefID], 
    currentObject.[Tag],
    mt.[AssociatedModuleID] as [CharacterModuleID], 
    currentObject.[CharacterResRefID]
FROM 
    (
        SELECT [ModuleResRefVersionID], mrv.[ModuleID], [ConversationResRefID], [CharacterResRefID], c.[Tag]
        FROM t_Creature c WITH ( NOLOCK )
            JOIN t_ModuleResRefVersion mrv
                ON mrv.[ID] = c.[ModuleResRefVersionID]
                AND mrv.[Status] = 'C'

        UNION ALL

        SELECT [ModuleResRefVersionID], mrv.[ModuleID], [ConversationResRefID], [CharacterResRefID], p.[Tag]
        FROM t_Placeable p WITH ( NOLOCK )
            JOIN t_ModuleResRefVersion mrv
                ON mrv.[ID] = p.[ModuleResRefVersionID]
                AND mrv.[Status] = 'C'
    ) currentObject
    JOIN v_ModuleTree mt
        ON currentObject.[ModuleID] = mt.[ModuleID]
    JOIN t_ModuleResRefVersion mrvChar
        ON mrvChar.[ModuleID] = mt.AssociatedModuleID
        AND mrvChar.[ResRefID] = currentObject.[CharacterResRefID]
        AND mrvChar.Status = 'C'
OPTION ( FORCE ORDER ) 
-- April 20, 2009: Chris Christou
-- This OPTION FORCE ORDER is important for that query's performance.  The difference goes from 23 seconds to 2.5 seconds.
-- In the worse execution, the MRVs being looked up for Characters are being calculated first, which returns too much volume to filter against.

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
-- Start joining Conversation Tags to Characters
------------------------------------------------------------------------
DECLARE @tTagCharacter TABLE 
(   [ModuleResRefVersionID] int NOT NULL,
    [Tag] varchar(32) NOT NULL,
    [CharacterModuleID] int NOT NULL,
    [CharacterResRefID] int NOT NULL
)


------------------------------------------------------------------------
-- Join Non-OWNER Tags to Creatures and Placeables 
--  to derive the Character resource
--
-- NOTE: This does not take into consideration a scenario 
--  where conversations are in one module and the CRE/PLA tags
--  are in another module which may not be in the module tree 
--  of the conversation.
------------------------------------------------------------------------
INSERT @tTagCharacter
    ([ModuleResRefVersionID],
     [Tag], 
     [CharacterModuleID], 
     [CharacterResRefID]) 
SELECT
    tags.[DlgModuleResRefVersionID],
    tags.[Tag], 
    otc.[CharacterModuleID],
    otc.[CharacterResRefID] 
FROM @tTags tags
    JOIN @tObjectToCharacter otc
        ON tags.[Tag] = otc.[Tag] -- NOTE: CASE INSENSITIVE CURRENTLY!
        AND tags.[Tag] != 'OWNER'

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
-- JOIN OWNER TAGS to Creatures and Placeables based on 
--  CONVERSATION field, to get the Character resource
------------------------------------------------------------------------
INSERT @tTagCharacter
    ([ModuleResRefVersionID],
     [Tag], 
     [CharacterModuleID], 
     [CharacterResRefID]) 

SELECT 
    tags.[DlgModuleResRefVersionID], 
    tags.Tag, 
    otc.CharacterModuleID, 
    otc.CharacterResRefID
FROM @tObjectToCharacter otc
    JOIN t_ModuleResRefVersion mrvObject
        ON mrvObject.[ID] = otc.[ObjectModuleResRefVersionID]
    JOIN v_ModuleTree mt
        ON mt.[ModuleID] = mrvObject.[ModuleID]
    JOIN t_ModuleResRefVersion mrvDlg
        ON mrvDlg.[ModuleID] = mt.[AssociatedModuleID]
        AND mrvDlg.[ResRefID] = otc.[ConversationResRefID]
    JOIN @tTags tags
        ON tags.[DlgModuleResRefVersionID] = mrvDlg.[ID]
        AND tags.[Tag] = 'OWNER'

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
-- SOUND SETS:
-- Look up Conversation tags to Characters for Sound Sets.
-- NOTE: This wouldn't be in here normally, but since sound sets 
--  are using the conversation system, this is as good a place as
--  any, and integrates into the system well.
--
-- Only use Characters that are not referencing a soundset that is
--  owned by another Character (when SharedLink is set to 0)
------------------------------------------------------------------------

INSERT @tTagCharacter
    ([ModuleResRefVersionID],
     [Tag], 
     [CharacterModuleID], 
     [CharacterResRefID]) 
SELECT DISTINCT
    mrvConv.[ID] as [ConversationMRRVID],
    CASE cLine.[Speaker]
        WHEN '' THEN conv.[DefaultNPCSpeaker]
        ELSE cLine.[Speaker] 
    END AS [Speaker],
    mrvChar.[ModuleID] as [CharacterModuleID],
    mrvChar.[ResRefID] as [CharacterResRefID]
FROM t_Character ch
    JOIN t_ModuleResRefVersion mrvChar
        ON ch.[ModuleResRefVersionID] = mrvChar.[ID]
        AND mrvChar.[Status] = 'C' -- Only current Characters
    JOIN v_ModuleTree vmt
        ON mrvChar.[ModuleID] = vmt.[ModuleID]
    JOIN t_ModuleResRefVersion mrvConv
        ON mrvConv.[ModuleID] = vmt.[AssociatedModuleID]
        AND mrvConv.[ResRefID] = ch.[SoundSetResRefID]
        AND (
                ( (@a_iDLGModuleResRefVersionID IS NULL) AND 
                  (mrvConv.[Status] = 'C')
                )
            OR
                (
                    mrvConv.[ID] = @a_iDLGModuleResRefVersionID
                )
            )
    JOIN t_Conversation conv
        ON mrvConv.[ID] = conv.[ModuleResRefVersionID]
    JOIN t_ConversationLine cLine
        ON mrvConv.[ID] = cLine.[ModuleResRefVersionID]
WHERE ch.[SoundsetResRefIDIsSharedLink] = 0        
option (force order)

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
-- Return Result Set
------------------------------------------------------------------------
SELECT DISTINCT 
    mrvResource.[ModuleID], mrvResource.[ResRefID], 
    dtc.[ModuleResRefVersionID],
    dtc.[Tag], 
    dtc.[CharacterModuleID], dtc.[CharacterResRefID]
FROM @tTagCharacter dtc
    JOIN t_ModuleResRefVersion mrvResource
        ON dtc.[ModuleResRefVersionID] = mrvResource.[ID]

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

SET NOCOUNT OFF

return 0

---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------

SET NOCOUNT OFF

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetConversationTagToCharacterList]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


------------------------------------------------------------------------
--  Stored Proc: bsp_GetForeignText
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: March 21, 2007
--  Description: Load Foreign Text (with its accompanying information)
--    All Variants of a language are loaded.
-- 
--  Parameters
--    a_iStringTableID - StringTableID to load data for
--      o NULL loads from all tables
--      o StringTableID loads text from a particular table
--    a_iOwnerModuleID - OwnerModuleID to load data for, used with StringTableID
--      o NULL loads all strings from the table
--      o OwnerModuleID loads text for a particular owner module from a string table
--    a_iStringLanguageID - StringLanguageID of Text to Load.  Set as follows:
--      o NULL to load all languages
--      o StringLanguageID to load one language only
--    a_iStringTypeID - StringTypeID of text to load.  Set as follows:
--      o NULL to load for all StringTypes
--      o StringTypeID to load text from one Stringtype
--    a_iModuleResRefVersionID - ModuleResRefVersionID of resource to load data for
--      o NULL loads from current version of all resources
--      o ModuleResRefVersionID loads text from a particular
--        version of one resource.
--    a_dtImportedBefore: 
--      o NULL or 0 - strings returned are the current (live) snapshot
--      o Any date - strings returned are the most recent 
--                   versions Imported before this time
--
------------------------------------------------------------------------
CREATE  PROCEDURE [dbo].[bsp_GetForeignText]
@a_iStringTableID int,
@a_iOwnerModuleID int,
@a_iStringLanguageID int,
@a_iStringTypeID int,
@a_iModuleResRefVersionID int,
@a_dtImportedBefore datetime
AS

SET NOCOUNT ON

DECLARE @iError int


------------------------------------------------------------------------
-- We documented that @a_dtImportedBefore could be 0 but this isn't 
-- supported unless we set it to NULL
------------------------------------------------------------------------
IF (@a_dtImportedBefore = 0)
BEGIN
    SET @a_dtImportedBefore = NULL
END


------------------------------------------------------------------------
--  Determine the StringLanguageVariantVersions that contain
--    the text we wish to return.  
--  (Also serves as the Language Filter)
------------------------------------------------------------------------
DECLARE @tVariantVersionsToUse TABLE
(
    [StringLanguageVariantID] int, 
    [StringLanguageVariantVersionID] int
)

INSERT INTO @tVariantVersionsToUse
SELECT 
    slv.[ID] as [StringLanguageVariantID], 
    MAX(slvv.[ID]) AS [StringLanguageVariantVersionID]
FROM t_StringLanguageVariant slv with ( nolock )
    JOIN t_StringLanguageVariantVersion slvv with ( nolock )
        ON slv.[ID] = slvv.[StringLanguageVariantID]
        AND (slvv.[Status] = 'C' OR slvv.[Status] = 'H')
    JOIN t_StringImportSession sis with ( nolock )
        ON slvv.[StringImportSessionID] = sis.[ID]
        AND (@a_dtImportedBefore IS NULL OR sis.[ImportedOn] < @a_dtImportedBefore)
WHERE (@a_iStringLanguageID IS NULL OR @a_iStringLanguageID = slv.[StringLanguageID])
GROUP BY slv.[ID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Create the ModuleResRefVersionID Filter
--  Determine which ModuleResRefVersionIDs we will use
------------------------------------------------------------------------
DECLARE @tResourceVersionIDsToUse TABLE
(
    [ModuleResRefVersionID] int 
)


IF (@a_iModuleResRefVersionID IS NULL)
BEGIN
    INSERT @tResourceVersionIDsToUse
    SELECT [ID] 
    FROM t_ModuleResRefVersion
    WHERE [Status] = 'C'
END 
ELSE
BEGIN
    INSERT @tResourceVersionIDsToUse
    VALUES (@a_iModuleResRefVersionID)
END

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Create the StringID Filter
--  Determine which StringIDs we will use based on the 
--    StringType and String Table parameters.
--
--  NOTE: We break this stuff up very explicitly in order to 
--    avoid hitting tables that are not indexed very well for this 
--    type of data.
------------------------------------------------------------------------

--  Use a temp table -- we could have in the hundreds of thousands of values in there
CREATE TABLE #tStringIDFilter
(
    [StringID] int
)

IF (@a_iStringTypeID IS NULL) AND (@a_iStringTableID IS NULL)
BEGIN
    --  There is no filter by StringType or StringTable
    --  Use StringText to look up StringIDs by Module
    INSERT #tStringIDFilter
    SELECT st.[StringID]
    FROM t_StringText st with ( nolock )
        JOIN @tResourceVersionIDsToUse mrv
            ON st.[ModuleResRefVersionID] = mrv.[ModuleResRefVersionID]
END
ELSE IF (@a_iStringTableID IS NULL)
BEGIN
    --  Filter by StringType only
    INSERT #tStringIDFilter
    SELECT sv.[StringID]
    FROM t_StringVersion sv with ( nolock )
        JOIN @tResourceVersionIDsToUse mrv
            ON sv.[ModuleResRefVersionID] = mrv.[ModuleResRefVersionID]
            AND sv.StringTypeID = @a_iStringTypeID
END
ELSE
BEGIN
    --  Filter by StringType (optional) and StringTable (always present here)
    INSERT #tStringIDFilter
    SELECT sv.[StringID]
    FROM t_StringVersion sv with ( nolock )
        JOIN @tResourceVersionIDsToUse mrv
            ON sv.[ModuleResRefVersionID] = mrv.[ModuleResRefVersionID]
            AND sv.StringTypeID = ISNULL(@a_iStringTypeID, sv.StringTypeID)
        JOIN t_String s with ( nolock )
            ON sv.[StringID] = s.[ID]
            AND s.[StringTableID] = @a_iStringTableID
        JOIN t_ModuleResRefVersion mrrv with ( nolock )
            ON mrv.[ModuleResRefVersionID] = mrrv.[ID]
            AND (@a_iOwnerModuleID IS NULL OR mrrv.[OwnerModuleID] = @a_iOwnerModuleID)
END

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Look up the particular Versioned Text, and return the data
------------------------------------------------------------------------
SELECT 
    slvvt.[StringID], 
    slv.[StringLanguageID], slv.[StringVariantID], 
    slv.[ID] as [StringLanguageVariantID], 
    slvvt.[Text] 
FROM #tStringIDFilter s
    JOIN t_StringLanguageVariantText slvvt with ( nolock )
        ON s.[StringID] = slvvt.[StringID] 
    JOIN @tVariantVersionsToUse slvvToUse
        ON slvvt.[StringLanguageVariantVersionID] = slvvToUse.[StringLanguageVariantVersionID]
    JOIN t_StringLanguageVariant slv with ( nolock )
        ON slvvToUse.[StringLanguageVariantID] = slv.[ID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

DROP TABLE #tStringIDFilter

SET NOCOUNT OFF

return 0

------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

SET NOCOUNT OFF

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetForeignText]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  STORED PROCEDURE: bsp_GetInvalidConversationTagCharacters
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: April 23, 2007
--  Returns:
--      0 = success
--      non-zero = error code
--
--  Parameters:
--      none
--
--  Description: Gets all Speaker and Listener Tags for Conversation(s)
--    and reports the following validation errors:
--      - Tags mapping to more than one Character
--      - Tags that do not map to any Characters
--
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_GetInvalidConversationTagCharacters]
AS 

SET NOCOUNT ON 

DECLARE @iError INT


-- @tblDlgSpkrListener = The Resolved Speaker and Listener of Conversation Lines, by resource
DECLARE @tblDlgSpkrListener TABLE
(
    [ModuleID] int, [ResRefID] int,
    [Speaker] varchar(32), 
    [Listener] varchar(32)
)


-- @ictcDlgTags = Flat listing of all used Spkr/Listener tags in conversations, by resource
DECLARE @ictcDlgTags TABLE
(   [ModuleID] int NOT NULL,
    [ResRefID] int NOT NULL,
    [Tag] varchar(32) NOT NULL
)


-- #ictcDlgTagCharacter = calculated conversation tags and the characters they map to
CREATE TABLE #ictcDlgTagCharacter
(   [ModuleID] int NOT NULL,
    [ResRefID] int NOT NULL,
    [ModuleResRefVersionID] int NOT NULL,
    [Tag] varchar(32) NOT NULL,
    [CharacterModuleID] int NOT NULL,
    [CharacterResRefID] int NOT NULL
)


-- #ictcResults = Result set to return
CREATE TABLE #ictcResults (
    [ModuleID] int,
    [ResRefID] int,
    [Tag] varchar(32),
    [Error] varchar(256)
)

------------------------------------------------------------------------
-- First we get the directory of tags that are mapped to characters
------------------------------------------------------------------------
insert #ictcDlgTagCharacter
exec @iError = [dbo].[bsp_GetConversationTagToCharacterList] null, 1, 1

if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
-- List all the current speaker and listener tags on all
--  live conversation strings.
------------------------------------------------------------------------

INSERT @tblDlgSpkrListener
select DISTINCT
mrv.[ModuleID], mrv.[ResRefID], 
CASE cl.[Speaker]
    WHEN '' THEN c.[DefaultNPCSpeaker]
    ELSE cl.[Speaker] 
END AS [Speaker],
CASE 
    WHEN cl.[Listener] != '' THEN cl.[Listener]
    WHEN cl.[IsPC] = 1 THEN c.[DefaultPCListener]
    ELSE c.[DefaultNPCListener]
END AS [Listener]
from t_ConversationLine cl
    join t_Conversation c -- c is needed for the DEFAULT Listener resolution 
        on cl.[ModuleResRefVersionID] = c.[ModuleResRefVersionID]
    join t_ModuleResRefVersion mrv
        -- mrv is used to return ModuleID/ResRefID info
        on mrv.[ID] = c.[ModuleResRefVersionID]
        and mrv.[Status] = 'C'
    join t_StringText st
        -- thin out blank lines (continue/conditional/... lines)
        -- the Speaker and Listener are irrelevant on these lines
        on st.[StringID] = cl.[TextStringID]
        and st.[ModuleResRefVersionID] = cl.[ModuleResRefVersionID]
        and st.[WordCount] > 0

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Collect our Tags together, excluding
--    PLAYER and PREVSPEAKER tags
------------------------------------------------------------------------
INSERT @ictcDlgTags 
    ([ModuleID], [ResRefID], [Tag])
SELECT [ModuleID], [ResRefID], [Tag] 
FROM 
    (SELECT [ModuleID], [ResRefID], [Speaker] as [Tag] FROM @tblDlgSpkrListener
    UNION
    SELECT [ModuleID], [ResRefID], [Listener] as [Tag] FROM @tblDlgSpkrListener) x
WHERE x.[Tag] != 'PLAYER'
AND x.[Tag] != 'PREVSPEAKER'

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
-- Build up the results to return
------------------------------------------------------------------------

------------------------------------------------------------------------
-- Validation: Find lines where tags map to Characters with blank names
------------------------------------------------------------------------
INSERT #ictcResults
SELECT distinct chars.[ModuleID], chars.[ResRefID], 
    chars.[Tag], 
    'Tag maps to Character with blank name'
FROM #ictcDlgTagCharacter chars
    JOIN t_ModuleResRef mr
        ON chars.[ModuleID] = mr.[ModuleID]
        AND chars.[ResRefID] = mr.[ResRefID]
    JOIN t_Character c
        ON mr.[CurrentModuleResRefVersionID] = c.[ModuleResRefVersionID]
        AND c.[Name] like ''

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
-- Validation: Find lines where tags do not map to any characters
------------------------------------------------------------------------
INSERT #ictcResults
SELECT distinct lines.[ModuleID], lines.[ResRefID], 
    lines.[Tag], 
    'Tag does not map to any character'
FROM @ictcDlgTags lines
    LEFT OUTER JOIN #ictcDlgTagCharacter chars
        ON lines.[ModuleID] = chars.[ModuleID]
        AND lines.[ResRefID] = chars.[ResRefID]
        AND lines.[Tag] = chars.[Tag]
WHERE chars.[ModuleID] IS NULL

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
-- Validation: Find lines that map to more than one character
------------------------------------------------------------------------
DECLARE @tblMultipleCharacterTags TABLE
(
    [ModuleID] int, [ResRefID] int, [Tag] varchar(32)
)

INSERT @tblMultipleCharacterTags
SELECT dtc.[ModuleID], dtc.[ResRefID], dtc.[Tag]
FROM #ictcDlgTagCharacter dtc
    JOIN @ictcDlgTags dt
        ON dtc.[ModuleID] = dt.[ModuleID]
        AND dtc.[ResRefID] = dt.[ResRefID]
        AND dtc.[Tag] = dt.[Tag]
GROUP BY dtc.[ModuleID], dtc.[ResRefID], dtc.[Tag]
having count(*) > 1

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

INSERT #ictcResults
SELECT tc.[ModuleID], tc.[ResRefID], tc.[Tag], 
'Multiple Characters: ' + mrv.[Folder] + '\' + mrv.[Name]
FROM #ictcDlgTagCharacter tc
    JOIN @tblMultipleCharacterTags mct
        ON tc.[ModuleID] = mct.[ModuleID]
        AND tc.[ResRefID] = mct.[ResRefID]
        AND tc.[Tag] = mct.[Tag]
    JOIN t_ModuleResRefVersion mrv
        ON mrv.[ModuleID] = tc.[CharacterModuleID]
        AND mrv.[ResRefID] = tc.[CharacterResRefID]
        AND mrv.[Status] = 'C'

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
-- Validation: Find lines where a Listener tag of PREVSPEAKER 
-- refers to the root node (who is the previous speaker in this 
-- case???)
------------------------------------------------------------------------
INSERT #ictcResults
SELECT DISTINCT 
    mrv.[ModuleID], mrv.[ResRefID], 
    'PREVSPEAKER' as [Tag], 'One or more PREVSPEAKER Listener tags reference the root node' as [Error]
FROM t_ModuleResRefVersion mrv
    JOIN t_ConversationTransition ct
        on ct.[ModuleResRefVersionID] = mrv.[ID]
        and mrv.[Status] = 'C'
        and ct.[FromIndex] = -1
    JOIN t_ConversationLine cl
        ON cl.[ModuleResRefVersionID] = mrv.[ID]
        AND cl.[Index] = ct.[ToIndex]
    JOIN t_Conversation c
        ON c.[ModuleResRefVersionID] = mrv.[ID]
WHERE 
    CASE
        WHEN cl.[Listener] != '' THEN cl.[Listener]
        ELSE c.[DefaultNPCListener]
    END = 'PREVSPEAKER'

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
-- Return Results
------------------------------------------------------------------------
SELECT 
    m.[Name] as [Module],
    mrv.[Name] as [Conversation],
    iResults.[ModuleID], iResults.[ResRefID], 
    [Tag], [Error]
FROM #ictcResults iResults
    JOIN t_Module m
        ON iResults.[ModuleID] = m.[ID]
    JOIN t_ModuleResRefVersion mrv
        ON iResults.[ModuleID] = mrv.[ModuleID]
        AND iResults.[ResRefID] = mrv.[ResRefID]
        AND mrv.[Status] = 'C'

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

drop table #ictcDlgTagCharacter
drop table #ictcResults

SET NOCOUNT OFF

return 0

---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------

SET NOCOUNT OFF

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetInvalidConversationTagCharacters]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO



------------------------------------------------------------------------
--  STORED PROCEDURE: bsp_GetLocalizationStatistics
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: November 27, 2006
--  Description: Loads Localization Statistics
--  Resource/StringType Word & Line Counts
--  Text Requiring Translation Word & Line Counts
--  Text Requiring Re-Translation Word & Line Counts
-- Parameters:
--   @a_bCountMajorChanges - set to true if you want to get stats 
--           for Major Text Changes (strings that are being re-translated)
--   @a_bCountMinorChanges - set to true if you want to get stats 
--           for Minor Text Changes (strings that are being re-translated)
--   @a_bGetResourceCounts:
--      o 1 - include stats by resource in the result set
--      o 0 - exclude stats by resource in the result set
--   @a_bGetStringTypeCounts:
--      o 1 - include stats by string type in the result set
--      o 0 - exclude stats by string type in the result set
--
-- Returns:
--   0 on success, non-zero on error (error-code @@ERROR is returned)
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_GetLocalizationStatistics]
    @a_bCountMajorChanges bit,
    @a_bCountMinorChanges bit,
    @a_bGetResourceCounts bit,
    @a_bGetStringTypeCounts bit
AS


SET NOCOUNT ON 

DECLARE @iError int

------------------------------------------------------------------------
--  Make a listing of all text, and their translation status.
--  The translation status works as follows:
--    o 0 = string does not need translation
--    o 1 = string needs translation, never before translated
--    o 2 = string needs translation, has been translated before
------------------------------------------------------------------------
declare @results TABLE
(
    [ModuleID] int,
    [OwnerModuleID] int,
    [ResRefID] int,
    [StringID] int,
    [WordCount] int,
    [StringTypeID] int,
    [TransStatus] int,
    [MRVID] int,
    [LastMajorUpdateOn] datetime,
    [LastMinorUpdateOn] datetime
);

insert into @results
(
    [ModuleID], 
    [OwnerModuleID], 
    [ResRefID], 
    [StringID],
    [WordCount],
    [StringTypeID],
    [TransStatus],
    [MRVID],
    [LastMajorUpdateOn],
    [LastMinorUpdateOn]
)
select 
    mrv.[ModuleID], 
    mrv.[OwnerModuleID], 
    mrv.[ResRefID], 
    st.[StringID],
    st.[WordCount],
    sv.[StringTypeID],
    1, -- defaults to 1==new if next update doesn't change the line.
    mrv.[ID],
    st.[LastMajorUpdateOn],
    st.[LastMinorUpdateOn]
FROM t_ModuleResRefVersion mrv
    JOIN t_StringText st
        ON st.[ModuleResRefVersionID] = mrv.[ID]
    JOIN t_StringVersion sv
        ON sv.[ModuleResRefVersionID] = mrv.[ID]
        AND st.[StringID] = sv.[StringID]
where mrv.[Status] = 'C'

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

update @results
set [TransStatus] = 
    CASE
        WHEN 
            (@a_bCountMajorChanges = 1) 
            AND (r.[LastMajorUpdateOn] > seh.[CompareDate]) 
            THEN 2 -- 2 = updated translation
        WHEN
            (@a_bCountMinorChanges = 1) 
            AND (r.[LastMinorUpdateOn] > seh.[CompareDate])
            THEN 2 -- 2 = updated translation
        ELSE 0 -- 0 = no translation
    END 
from @results r
JOIN t_StringExportHistory seh
    ON seh.[Status] = 'A' -- Only use strings exported before (Active Entries)
    AND seh.[StringID] = r.[StringID]

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  Tally up the Localization statistics.
--  Two result sets are combined: 
--    Loc Stats by Resource, and Loc Stats by String Type
--    The result sets are returned based on the parameters.
--  The statistics are grouped by Module, to allow the caller 
--    to filter out data from unneeded Modules.
------------------------------------------------------------------------
SELECT 
    sts.[ModuleID],
    sts.[OwnerModuleID],
    sts.[ResRefID], 
    r.[ResType],
    NULL as [StringTypeID], 
    1 as [IsResource],
    SUM(CASE [TransStatus] WHEN 1 THEN [WordCount] ELSE 0 END) as [NewWordsReq],
    SUM(CASE [TransStatus] WHEN 2 THEN [WordCount] ELSE 0 END) as [UpdWordsReq],
    SUM(WordCount) as [Words],
    COUNT(CASE [TransStatus] WHEN 1 THEN 1 ELSE NULL END) as [NewLinesReq],
    COUNT(CASE [TransStatus] WHEN 2 THEN 1 ELSE NULL END) as [UpdLinesReq],
    COUNT(*) as [Lines],
    COUNT(CASE WHEN [TransStatus] = 1 AND [WordCount] > 0 THEN 1 ELSE NULL END) as [NewNonBlankLinesReq],
    COUNT(CASE WHEN [TransStatus] = 2 AND [WordCount] > 0 THEN 1 ELSE NULL END) as [UpdNonBlankLinesReq],
    COUNT(CASE WHEN [WordCount] > 0 THEN 1 ELSE NULL END) as [NonBlankLines]
FROM @results sts
    JOIN t_ResRef r
        ON sts.[ResRefID] = r.[ID]
        AND (r.[ResType] = 'dlg' OR r.[ResType] = 'plo')
WHERE @a_bGetResourceCounts = 1
GROUP BY [ModuleID], sts.[OwnerModuleID], [ResRefID], r.[ResType]

UNION ALL 

SELECT 
    sts.[ModuleID],
    sts.[OwnerModuleID],
    NULL AS [ResRefID], 
    NULL AS [ResType], 
    sts.[StringTypeID], 
    0 AS [IsResource], 
    SUM(CASE [TransStatus] WHEN 1 THEN [WordCount] ELSE 0 END) as [NewWordsReq],
    SUM(CASE [TransStatus] WHEN 2 THEN [WordCount] ELSE 0 END) as [UpdWordsReq],
    SUM(WordCount) as [Words],
    COUNT(CASE [TransStatus] WHEN 1 THEN 1 ELSE NULL END) as [NewLinesReq],
    COUNT(CASE [TransStatus] WHEN 2 THEN 1 ELSE NULL END) as [UpdLinesReq],
    COUNT(*) as [Lines],
    COUNT(CASE WHEN [TransStatus] = 1 AND [WordCount] > 0 THEN 1 ELSE NULL END) as [NewNonBlankLinesReq],
    COUNT(CASE WHEN [TransStatus] = 2 AND [WordCount] > 0 THEN 1 ELSE NULL END) as [UpdNonBlankLinesReq],
    COUNT(CASE WHEN [WordCount] > 0 THEN 1 ELSE NULL END) as [NonBlankLines]
FROM @results sts
WHERE @a_bGetStringTypeCounts = 1
GROUP BY [ModuleID], sts.[OwnerModuleID], sts.[StringTypeID]

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR


SET NOCOUNT OFF

return 0

---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------

SET NOCOUNT OFF

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetLocalizationStatistics]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  Stored Proc: bsp_GetMostRecentLocalizationDatesForVOScript
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: August 29, 2007
--  Description: For all the strings that currently belong to a 
--    VO Script, the most recent export and import date of these 
--    strings is shown for a given language per VO Script.
--
--  These used to be two separate queries, but since we have to 
--    look up the VOScriptLineCharacters, we might as well do them 
--    both at the same time to save time.
--
--  Export data is language independent, Import data is not.
--
--  Parameters
--    a_iVOScriptID - VOScript ID to look up data on, set as follows:
--      o NULL: Gets data for All VO Scripts
--      o VOScriptID: Gets data for one VO Script
--    a_iStringLanguageID - Language to look up Import data on
--
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_GetMostRecentLocalizationDatesForVOScript]
@a_iVOScriptID int,
@a_iStringLanguageID int
AS

SET NOCOUNT ON

DECLARE @iError int


------------------------------------------------------------------------
--  Load the Resources/Strings/Characters for our data of interest
------------------------------------------------------------------------
EXEC @iError = [dbo].[bsp_DetermineVOScriptLineCharacters] @a_iVOScriptID, NULL
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Return results
------------------------------------------------------------------------
SELECT 
    vs.[ID] as [VOScriptID], 
    voExport.[RecentlyExportedOn], 
    voImport.[RecentlyImportedOn]
FROM t_VOScript vs
    LEFT OUTER JOIN 
    (
        -- Calculate the most recent import date for a string belonging to 
        -- each script
        SELECT vos.[ID] as [VOScriptID], MAX(sis.[ImportedOn]) as [RecentlyImportedOn]
        FROM t_VOScript vos
            JOIN t_VOScriptLineCharacterInternal voslci
                ON voslci.[SPID] = @@SPID
                AND vos.[ResourceModuleID] = voslci.[ResourceModuleID]
                AND vos.[ResourceResRefID] = voslci.[ResourceResRefID]
                AND vos.[CharacterModuleID] = voslci.[CharacterModuleID]
                AND vos.[CharacterResRefID] = voslci.[CharacterResRefID]
            JOIN t_StringLanguageVariantText slvt 
                ON voslci.[StringID] = slvt.[StringID] 
            JOIN t_StringImportSession sis 
                ON slvt.[StringImportSessionID] = sis.[ID] 
            JOIN t_StringLanguageVariant slv 
                ON slvt.[StringLanguageVariantVersionID] = slv.[CurrentStringLanguageVariantVersionID] 
                AND slv.[StringLanguageID] = @a_iStringLanguageID
        WHERE ISNULL(@a_iVOScriptID, vos.[ID]) = vos.[ID]
        GROUP BY vos.[ID]
    ) voImport
        ON vs.[ID] = voImport.[VOScriptID]
    LEFT OUTER JOIN 
    (
        -- Calculate the most recent export date for a string belonging to 
        -- each script
        SELECT vos.[ID] as [VOScriptID], MAX(sel.[CreatedOn]) as [RecentlyExportedOn]
        FROM t_VOScript vos
            JOIN t_VOScriptLineCharacterInternal voslci
                ON voslci.[SPID] = @@SPID
                AND vos.[ResourceModuleID] = voslci.[ResourceModuleID]
                AND vos.[ResourceResRefID] = voslci.[ResourceResRefID]
                AND vos.[CharacterModuleID] = voslci.[CharacterModuleID]
                AND vos.[CharacterResRefID] = voslci.[CharacterResRefID]
            JOIN t_StringExportHistory seh 
                ON voslci.[StringID] = seh.[StringID] 
                AND seh.[Status] = 'A' 
            JOIN t_StringExportLabel sel 
                ON seh.[StringExportLabelID] = sel.[ID] 
        WHERE ISNULL(@a_iVOScriptID, vos.[ID]) = vos.[ID]
        GROUP BY vos.[ID]
    ) voExport
        ON vs.[ID] = voExport.[VOScriptID]

------------------------------------------------------------------------
--  Remove our temp data
------------------------------------------------------------------------
DELETE FROM t_VOScriptLineCharacterInternal
WHERE [SPID] = @@SPID

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

SET NOCOUNT OFF

RETURN 0

------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

SET NOCOUNT OFF

RETURN @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetMostRecentLocalizationDatesForVOScript]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE PROCEDURE [dbo].[bsp_GetResourceHistoryListByID]
@a_iResRefID int
AS
declare @iResRefID int
set @iResRefID = @a_iResRefID

select mrrv.resrefid, null, mrrv.moduleid, mrrv.ownermoduleid, mrrv.id, mrrv.RevisionID,  rr1.restype,
  mrrv.name, mrrv.folder, cast( dbo.udf_GetResourceName(mrrv.id) as varchar(64) ) ,
  mrrv.username, mrrv.date,
  null, null, null, null, null,
  mrrv.state,
  mrrv.comment, 
  case mrrv.status
    when 'H' then 1
    else 0
    end
from t_moduleresrefversion mrrv
join t_ResRef rr1 on mrrv.resrefid = rr1.id
where mrrv.ResRefid = @iResRefID
and (mrrv.status in ('H', 'C')
     or (mrrv.status = 'S' and mrrv.username = suser_sname())
    )
order by mrrv.RevisionID

IF (@@ERROR <> 0) GOTO ON_ERROR
return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
return @@ERROR

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetResourceHistoryListByID]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE PROCEDURE [dbo].[bsp_GetResourceInfoByID]
@a_iModuleID int,
@a_iResRefID int,
@a_iVersionID int,
@a_bUseModuleTree bit,
@a_bReturnVersionInfo bit,
@a_dtCheckedInBefore datetime,
@a_bIncludeDeletedResources bit

AS

SET NOCOUNT ON 

DECLARE @iError INT

declare @iModuleID int
declare @iResRefID int
declare @iVersionID int
set @iModuleID = @a_iModuleID
set @iResRefID = @a_iResRefID
set @iVersionID = @a_iVersionID

------------------------------------------------------------------------
-- If the user is not passing in a time, they want the current data.
-- Set it to a point far in the future.
------------------------------------------------------------------------
IF (ISNULL(@a_dtCheckedInBefore, 0) != 0)
    AND (@iVersionID = 0)
BEGIN
    SET @iVersionID = -1 -- This ensures that if the date is too old, there is no version returned

    SELECT @iVersionID = omrrv.[ID]
    FROM t_ModuleResRefVersion omrrv
    WHERE omrrv.[ModuleID] = @iModuleID
    AND omrrv.[ResRefID] = @iResRefID
    AND ([Status] = 'C' OR [Status] = 'H')
    AND omrrv.[Date] = 
    (
        SELECT MAX([Date])
        FROM t_ModuleResRefVersion
        WHERE [Date] < @a_dtCheckedInBefore
        AND [ModuleID] = omrrv.[ModuleID]
        AND [ResRefID] = omrrv.[ResRefID]
        AND ([Status] = 'C' OR [Status] = 'H') -- scratch records do not count here
    )
END

------------------------------------------------------------------------
-- If we are looking for the deleted resources, 
-- find the head version id of the resource in question
------------------------------------------------------------------------

IF ((@a_bIncludeDeletedResources = 1)
    AND (ISNULL (@a_dtCheckedInBefore, 0) = 0)
    AND (@a_iVersionID = 0))
BEGIN

    -- Get the module resref version id

    SELECT @iVersionID = MAX (omrrv.[ID])
    FROM dbo.udf_GetModuleHierarchy(@iModuleID, @a_bUseModuleTree) mt
        JOIN t_ModuleResRefVersion omrrv ON mt.ModuleID = omrrv.[ModuleID]
            AND omrrv.[ResRefID] = @iResRefID
            AND ([Status] = 'C' OR [Status] = 'H')
END


if (@iVersionID != 0)
    select rr1.id, 1, mrr.moduleid, 

      CASE isnull(mrrv2.id,-1) 
        WHEN -1 THEN mrrv1.ownermoduleid 
        ELSE 
          case mrrv2.username when suser_sname()
            then mrrv2.ownermoduleid
            else mrrv1.ownermoduleid
          end
      end,

      CASE @a_bReturnVersionInfo 
        WHEN 1 THEN 
          CASE isnull(mrrv2.id,-1) 
            WHEN -1 THEN mrrv1.[ID] 
            ELSE 
              CASE mrrv2.username 
                WHEN suser_sname() then mrrv2.[ID]
                ELSE mrrv1.[ID]
              END
          END
        ELSE NULL
      END, -- Version (by @a_bReturnVersionInfo)
      CASE @a_bReturnVersionInfo 
        WHEN 1 THEN 
          CASE isnull(mrrv2.id,-1) 
            WHEN -1 THEN mrrv1.[RevisionID] 
            ELSE 
              CASE mrrv2.username 
                WHEN suser_sname() then mrrv2.[RevisionID]
                ELSE mrrv1.[RevisionID]
              END
          END
        ELSE NULL
      END, -- RevisionID (by @a_bReturnVersionInfo)

      rr1.restype,

      CASE isnull(mrrv2.id,-1) 
        WHEN -1 THEN mrrv1.name 
        ELSE 
          case mrrv2.username when suser_sname()
            then mrrv2.name
            else mrrv1.name
          end
      end,

      CASE isnull(mrrv2.id,-1) 
        WHEN -1 THEN mrrv1.folder 
        ELSE 
          case mrrv2.username 
            when suser_sname() then mrrv2.folder
            else mrrv1.folder
          end
      end,

      cast( CASE isnull(mrrv2.id,-1) when -1 
                THEN dbo.udf_GetResourceName(mrrv1.id) 
                else case mrrv2.username when suser_sname()
                        then dbo.udf_GetResourceName(mrrv2.id)
                        else dbo.udf_GetResourceName(mrrv1.id)
                     end
             END as varchar(64) ) ,

      mrr.createdby, mrr.createdon, 
      case isnull(mrrv2.id,-1) when -1 then 0 else 1 end,
      mrrv2.username, mrrv2.date, mrrv1.username, mrrv1.date,
      mrrv1.state,
      mrrv1.comment,
      case isnull(mrr.[CurrentModuleResRefVersionID], -1)
        when -1 then 1
        else 0
        end
    from t_moduleresrefversion mrrv1
    join t_moduleresref mrr on mrrv1.moduleid = mrr.moduleid and mrrv1.resrefid = mrr.resrefid
    join t_resref rr1 on mrr.resrefid = rr1.id
    left outer join t_moduleresrefversion mrrv2 on mrr.scratchmoduleresrefversionid = mrrv2.id
    where mrrv1.id = @iVersionID
    order by rr1.id
else
    select rr1.id, 1, mrr.moduleid, 

      CASE isnull(mrrv2.id,-1) 
        WHEN -1 THEN mrrv1.ownermoduleid 
        ELSE 
          case mrrv2.username when suser_sname()
            then mrrv2.ownermoduleid
            else mrrv1.ownermoduleid
          end
      end,

      CASE @a_bReturnVersionInfo 
        WHEN 0 THEN NULL
        ELSE
          CASE isnull(mrrv2.id,-1) 
            when -1 then mrrv1.[ID] 
            else 
              case mrrv2.username
                WHEN suser_sname() then mrrv2.[ID]
                else mrrv1.[ID]
              end
          end
      END,

      CASE @a_bReturnVersionInfo 
        WHEN 0 THEN NULL
        ELSE
          CASE isnull(mrrv2.id,-1) 
            when -1 then mrrv1.[RevisionID] 
            else 
              case mrrv2.username
                WHEN suser_sname() then mrrv2.[RevisionID]
                else mrrv1.[RevisionID]
              end
          end
      END,

      rr1.restype,
      CASE isnull(mrrv2.id,-1) 
        when -1 then mrrv1.name 
        else 
          case mrrv2.username
            WHEN suser_sname() then mrrv2.name
            else mrrv1.name
          end
      end,
      CASE isnull(mrrv2.id,-1) when -1 
        then mrrv1.folder 
        else 
          case mrrv2.username
            WHEN suser_sname() then mrrv2.folder
            else mrrv1.folder
          end
      end,
      cast( CASE isnull(mrrv2.id,-1) when -1 
                THEN dbo.udf_GetResourceName(mrrv1.id) 
                else case mrrv2.username when suser_sname()
                        then dbo.udf_GetResourceName(mrrv2.id)
                        else dbo.udf_GetResourceName(mrrv1.id)
                     end
             END as varchar(64) ) ,
      mrr.createdby, mrr.createdon, 
      case isnull(mrrv2.id,-1) when -1 then 0 else 1 end,
      mrrv2.username, mrrv2.date, mrrv1.username, mrrv1.date,
      mrrv1.state,
      mrrv1.comment,
      case isnull(mrr.[CurrentModuleResRefVersionID], -1)
        when -1 then 1
        else 0
        end
    from dbo.udf_GetModuleHierarchy(@iModuleID, @a_bUseModuleTree) mt
    join t_moduleresref mrr on mt.ModuleID = mrr.moduleid
    join t_resref rr1 on mrr.resrefid = rr1.id
    join t_moduleresrefversion mrrv1 on mrr.currentmoduleresrefversionid = mrrv1.id
    left outer join t_moduleresrefversion mrrv2 on mrr.scratchmoduleresrefversionid = mrrv2.id
    where mrr.resrefid = @iResRefID
    order by rr1.id
    
SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

SET NOCOUNT OFF

return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
SET NOCOUNT OFF
return @iError


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetResourceInfoByID]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE PROCEDURE [dbo].[bsp_GetResourceInfoByName]
@a_iModuleID int,
@a_sResRefName varchar(128),
@a_sResType varchar(4),
@a_bUseModuleTree bit
AS
declare @iModuleID int
declare @sResRefName varchar(128)
declare @sResType varchar(4)
set @iModuleID = @a_iModuleID
set @sResRefName = @a_sResRefName
set @sResType = @a_sResType

DECLARE @iError INT

select rr1.id, 1, mrr.moduleid,

  CASE isnull(mrrv2.id,-1) when -1 
    then mrrv1.ownermoduleid 
    else case mrrv2.username when suser_sname()
            then mrrv2.ownermoduleid
            else mrrv1.ownermoduleid
         end
  end,

  null, null, rr1.restype,
  CASE isnull(mrrv2.id,-1) when -1 
    then mrrv1.name 
    else case mrrv2.username when suser_sname()
            then mrrv2.name
            else mrrv1.name
         end
  end,
  CASE isnull(mrrv2.id,-1) when -1 
    then mrrv1.folder 
    else case mrrv2.username when suser_sname()
            then mrrv2.folder
            else mrrv1.folder
         end
  end,
  cast( CASE isnull(mrrv2.id,-1) when -1 
            THEN dbo.udf_GetResourceName(mrrv1.id) 
            else case mrrv2.username when suser_sname()
                    then dbo.udf_GetResourceName(mrrv2.id)
                    else dbo.udf_GetResourceName(mrrv1.id)
                 end
         END as varchar(64) ) ,
  mrr.createdby, mrr.createdon, 
  case isnull(mrrv2.id,-1) when -1 then 0 else 1 end,
  mrrv2.username, mrrv2.date, mrrv1.username, mrrv1.date,
  mrrv1.State,
  mrrv1.comment,
  case isnull(mrr.[CurrentModuleResRefVersionID], -1)
    when -1 then 1
    else 0
    end
from dbo.udf_GetModuleHierarchy(@iModuleID, @a_bUseModuleTree) mt
join t_moduleresref mrr on mt.ModuleID = mrr.ModuleID
join t_resref rr1 on mrr.resrefid = rr1.id
    and rr1.restype = @sResType
join t_moduleresrefversion mrrv on mrr.moduleid = mrrv.moduleid
    and mrr.resrefid = mrrv.resrefid
    and mrrv.name = @sResRefName
    and mrrv.status in ('C', 'S')
join t_moduleresrefversion mrrv1 on mrr.currentmoduleresrefversionid = mrrv1.id
left outer join t_moduleresrefversion mrrv2 on mrr.scratchmoduleresrefversionid = mrrv2.id
order by rr1.id

SELECT @iError = @@ERROR
IF (@iError != 0) GOTO ON_ERROR

return 0

---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
return @@ERROR


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetResourceInfoByName]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  STORED PROCEDURE: bsp_GetResourceListByModuleAndType
------------------------------------------------------------------------
--  Owned By: Scott Meadows
--  Created On: 2005?
--  Description: This prodecure returns a list of ModuleResRefs
--      and various auditing information based on type.  User Options
--      include loading deleted/current/scratch resources and by ResType.
--  NOTES:
--    * Procedure is built for use with CDBResRef common loading
--      functionality.
--    * When searching Scratch records, only current user's scratch 
--      records are returned.
--
--  Returns:
--      0 = success
--      non-zero = error code
--  Parameters:
--      @a_iModuleID: Module to look up resources in
--      @a_sResType: ResType of Resources to return, blank for all types
--      @a_bUseCurrent: 
--          1 = result set includes resources with a current version (ie: not deleted)
--          0 = result set will not include anything with a current version
--      @a_bUseScratch:
--          1 = result set includes records current user has checked out as scratch
--          0 = result set will not have any scratch records, only Current and History (where applicable)
--      @a_bUseDeleted: 
--          1 = result set includes deleted resources (have no current version)
--          0 = result set will not include deleted resources
--      * This will also force the return of the Version Info as well
--      @a_bUseModuleTree: 
--          1 = use module tree
--          0 = does not use module tree (only load resources from indicated module)
--      @a_bReturnVersionInfo:
--          1 = returns Version and Revision information
--          0 = Version/Revision information is set to zero (unless trumped by use deleted)
--      @a_dtCheckedInBefore: 
--          NULL or 0 = resources returned are the current (live) snapshot
--          Any date = resources returned are the most recent 
--                     versions checked in before this time
--                     When a date is set:
--                       - a_bUseCurrent returns resource/versions that were
--                         current at this point in time (even if they are 
--                         presently deleted.  Anything deleted prior to this
--                         time is not shown.
--                       - a_bUseScratch is ignored and should not be used
--                       - a_bUseDeleted will include in the result set
--                         all resources that have been deleted anytime
--                         prior to the indicated datetime.
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_GetResourceListByModuleAndType]
@a_iModuleID int,
@a_sResType varchar(4),
@a_bUseCurrent bit,
@a_bUseScratch bit,
@a_bUseDeleted bit,
@a_bUseModuleTree bit,
@a_bReturnVersionInfo bit,
@a_dtCheckedInBefore datetime
AS

SET NOCOUNT ON 
 
DECLARE @iError INT
DECLARE @iModuleID int
DECLARE @sResType varchar(4)
DECLARE @dtCheckedInBefore datetime
DECLARE @bReturnVersionInfo bit
DECLARE @bUseHistoryRecords bit
 
------------------------------------------------------------------------
-- If the user is not passing in a time, they want the current data.
-- Set it to a point far in the future.
--
-- Also, force @a_dtCheckedInBefore to NULL, just so that we don't
--  have to compare against NULL and 0 for the rest of this BSP.
------------------------------------------------------------------------
IF ISNULL(@a_dtCheckedInBefore, 0) = 0
BEGIN
    SET @a_dtCheckedInBefore = NULL
    SET @dtCheckedInBefore = '9999-12-31'
END
ELSE
BEGIN
    SET @dtCheckedInBefore = @a_dtCheckedInBefore
END

SELECT @iError = @@ERROR
IF (@iError != 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  Determine if we can return data based on 'H'istory records
--  as opposed to just 'C'urrent records.
------------------------------------------------------------------------
IF ( (@a_bUseDeleted = 1) OR (@a_dtCheckedInBefore IS NOT NULL) )
BEGIN
    SET @bUseHistoryRecords = 1
END
ELSE
BEGIN
    SET @bUseHistoryRecords = 0
END

 
------------------------------------------------------------------------
-- If the user is using deleted records then we have to return the
-- version info as well
------------------------------------------------------------------------
IF (@a_bUseDeleted = 1)
    SET @bReturnVersionInfo = 1
ELSE
    SET @bReturnVersionInfo = @a_bReturnVersionInfo
 
SELECT @iError = @@ERROR
IF (@iError != 0) GOTO ON_ERROR

set @iModuleID = @a_iModuleID
set @sResType = @a_sResType

IF (@a_dtCheckedInBefore IS NULL)
 BEGIN
    SELECT rr1.ID , 1 , mrr.ModuleID ,
        CASE @a_bUseScratch when 1
         THEN
              CASE isnull(mrrv2.id,-1) WHEN -1 
                THEN mrrv1.ownermoduleid 
                ELSE case mrrv2.username when suser_sname()
                        then mrrv2.ownermoduleid
                        else mrrv1.ownermoduleid
                     end
              end
         else mrrv1.ownermoduleid
        end,
        CASE @bReturnVersionInfo WHEN 1
            THEN mrrv1.[ID]
            ELSE 0
        END, -- Version (if requested)
        CASE @bReturnVersionInfo WHEN 1
            THEN mrrv1.[RevisionID]
            ELSE 0
        END, -- RevisionID (if requested)
        rr1.[ResType],
        CASE @a_bUseScratch when 1
         THEN
              CASE isnull(mrrv2.id,-1) WHEN -1 
                THEN mrrv1.name 
                ELSE case mrrv2.username when suser_sname()
                        then mrrv2.name
                        else mrrv1.name
                     end
              end
         else mrrv1.name
        end,
        CASE @a_bUseScratch when 1
         THEN
              CASE isnull(mrrv2.id,-1) when -1 
                THEN mrrv1.folder 
                else case mrrv2.username when suser_sname()
                        then mrrv2.folder
                        else mrrv1.folder
                     end
              end
         else mrrv1.folder
        end,
        cast(CASE @a_bUseScratch when 1
         THEN
              CASE isnull(mrrv2.id,-1) when -1 
                THEN dbo.udf_GetResourceName(mrrv1.id) 
                else case mrrv2.username when suser_sname()
                        then dbo.udf_GetResourceName(mrrv2.id)
                        else dbo.udf_GetResourceName(mrrv1.id)
                     end
              end
         else dbo.udf_GetResourceName(mrrv1.id)
        END as varchar(64) ) ,
        CASE @a_bUseDeleted when 1
         THEN mrr.lastmodifiedby
         ELSE mrr.createdby
        END,
        CASE @a_bUseDeleted when 1
         THEN mrr.lastmodifiedon
         ELSE  mrr.createdon
        END,
        CASE isnull(mrrv2.id,-1) when -1 then 0 else 1 end,
        mrrv2.[Username], mrrv2.[Date], 
        mrrv1.[Username], mrrv1.[Date],
        mrrv1.[State],
        mrrv1.[Comment],
        CASE isnull (mrr.[CurrentModuleResRefVersionID], -1)
         WHEN -1 THEN 1
         ELSE 0
        END
    FROM t_resref rr1 
        join t_ModuleResRef mrr 
            on rr1.restype = case @sResType when '' then rr1.restype else @sResType end
            and mrr.resrefid = rr1.id 
        LEFT OUTER JOIN t_moduleresrefversion mrrv2 
             on mrr.scratchmoduleresrefversionid = mrrv2.id -- This is only here to report if/who has resource checked out
        join t_moduleresrefversion mrrv1 -- this one should be current when applicable
            on mrrv1.[ModuleID] = mrr.[ModuleID] 
            AND mrrv1.[ResRefID] = mrr.[ResRefID]
            and (mrrv1.[Status] = 'C' OR 
                ( (@bUseHistoryRecords = 1) AND mrrv1.[Status] = 'H') ) -- scratch records do not count here
        join dbo.udf_GetModuleHierarchy(@iModuleID, @a_bUseModuleTree) mt
            on mt.[ModuleID] = mrrv1.[OwnerModuleID]
    WHERE 
    (
     ( (@a_dtCheckedInBefore IS NULL) AND 
        ( 
            (@a_bUseCurrent = 1 and mrr.CurrentModuleResRefVersionID IS NOT NULL)
            OR
            (@a_bUseDeleted = 1 and mrr.CurrentModuleResRefVersionID IS NULL) 
        ) 
     )
    OR
     (
        (@a_dtCheckedInBefore IS NOT NULL) 
        AND
        (
            ( (@a_bUseCurrent = 1) AND (@a_bUseDeleted = 0) AND ( (mrr.[CurrentModuleResRefVersionID] IS NOT NULL) OR (mrr.[LastModifiedOn] >= @a_dtCheckedInBefore) ) )
            OR
            ( (@a_bUseCurrent = 0) AND (@a_bUseDeleted = 1) AND (mrr.[CurrentModuleResRefVersionID] IS NULL) )
            OR
            ( (@a_bUseCurrent = 1) AND (@a_bUseDeleted = 1)  )
        )
     )
    )
    option (force order)
 END
ELSE
 BEGIN
    SELECT rr1.ID , 1 , mrr.ModuleID ,
        CASE @a_bUseScratch when 1
         THEN
              CASE isnull(mrrv2.id,-1) WHEN -1 
                THEN mrrv1.ownermoduleid 
                ELSE case mrrv2.username when suser_sname()
                        then mrrv2.ownermoduleid
                        else mrrv1.ownermoduleid
                     end
              end
         else mrrv1.ownermoduleid
        end,
        CASE @bReturnVersionInfo WHEN 1
            THEN mrrv1.[ID]
            ELSE 0
        END, -- Version (if requested)
        CASE @bReturnVersionInfo WHEN 1
            THEN mrrv1.[RevisionID]
            ELSE 0
        END, -- RevisionID (if requested)
        rr1.[ResType],
        CASE @a_bUseScratch when 1
         THEN
              CASE isnull(mrrv2.id,-1) WHEN -1 
                THEN mrrv1.name 
                ELSE case mrrv2.username when suser_sname()
                        then mrrv2.name
                        else mrrv1.name
                     end
              end
         else mrrv1.name
        end,
        CASE @a_bUseScratch when 1
         THEN
              CASE isnull(mrrv2.id,-1) when -1 
                THEN mrrv1.folder 
                else case mrrv2.username when suser_sname()
                        then mrrv2.folder
                        else mrrv1.folder
                     end
              end
         else mrrv1.folder
        end,
        cast(CASE @a_bUseScratch when 1
         THEN
              CASE isnull(mrrv2.id,-1) when -1 
                THEN dbo.udf_GetResourceName(mrrv1.id) 
                else case mrrv2.username when suser_sname()
                        then dbo.udf_GetResourceName(mrrv2.id)
                        else dbo.udf_GetResourceName(mrrv1.id)
                     end
              end
         else dbo.udf_GetResourceName(mrrv1.id)
        END as varchar(64) ) ,
        CASE @a_bUseDeleted when 1
         THEN mrr.lastmodifiedby
         ELSE mrr.createdby
        END,
        CASE @a_bUseDeleted when 1
         THEN mrr.lastmodifiedon
         ELSE  mrr.createdon
        END,
        CASE isnull(mrrv2.id,-1) when -1 then 0 else 1 end,
        mrrv2.[Username], mrrv2.[Date], 
        mrrv1.[Username], mrrv1.[Date],
        mrrv1.[State],
        mrrv1.[Comment],
        CASE isnull (mrr.[CurrentModuleResRefVersionID], -1)
         WHEN -1 THEN 1
         ELSE 0
        END
    FROM t_resref rr1 
        join t_ModuleResRef mrr 
            ON mrr.resrefid = rr1.id 
            AND rr1.restype = case @sResType when '' then rr1.restype else @sResType end
        LEFT OUTER JOIN t_moduleresrefversion mrrv2 
            on mrr.scratchmoduleresrefversionid = mrrv2.id -- This is only here to report if/who has resource checked out
        join  t_moduleresrefversion mrrv1 -- this one should be current when applicable
            on mrrv1.[ModuleID] = mrr.[ModuleID] 
            AND mrrv1.[ResRefID] = mrr.[ResRefID]
        join dbo.udf_GetModuleHierarchy(@iModuleID, @a_bUseModuleTree) mt
            ON mt.[ModuleID] = mrrv1.[OwnerModuleID]
        JOIN 
         (SELECT [ModuleID], [ResRefID], MAX([Date]) AS [Date]
          FROM t_ModuleResRefVersion
          WHERE [Date] < @dtCheckedInBefore
          AND ([Status] = 'C' OR 
                 ( (@bUseHistoryRecords = 1) AND [Status] = 'H') ) -- scratch records do not count here
          GROUP BY moduleid, resrefid) mrrvDate
            ON mrrv1.[ModuleID] = mrrvDate.[ModuleID]
            AND mrrv1.[ResRefID] = mrrvDate.[ResRefID]
            AND mrrv1.[Date] = mrrvDate.[Date]
    WHERE 
    (
     ( (@a_dtCheckedInBefore IS NULL) AND 
        ( 
            (@a_bUseCurrent = 1 and mrr.CurrentModuleResRefVersionID IS NOT NULL)
            OR
            (@a_bUseDeleted = 1 and mrr.CurrentModuleResRefVersionID IS NULL) 
        ) 
     )
    OR
     (
        (@a_dtCheckedInBefore IS NOT NULL) 
        AND
        (
            ( (@a_bUseCurrent = 1) AND (@a_bUseDeleted = 0) AND ( (mrr.[CurrentModuleResRefVersionID] IS NOT NULL) OR (mrr.[LastModifiedOn] >= @a_dtCheckedInBefore) ) )
            OR
            ( (@a_bUseCurrent = 0) AND (@a_bUseDeleted = 1) AND (mrr.[CurrentModuleResRefVersionID] IS NULL) )
            OR
            ( (@a_bUseCurrent = 1) AND (@a_bUseDeleted = 1)  )
        )
     )
    )
    option (force order)
 END
 
SELECT @iError = @@ERROR
IF (@iError != 0) GOTO ON_ERROR

return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
 
SET NOCOUNT OFF
 
return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetResourceListByModuleAndType]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE PROCEDURE [dbo].[bsp_GetResourceReferenceList]
@a_iModuleID int,
@a_iResRefID int,
@a_iVersionID int,
@a_bUseModuleTree bit,
@a_bUseCurrent bit,
@a_bUseScratch bit,
@a_bGetDeleted bit,
@a_bGetReferences bit
AS

SET NOCOUNT ON

declare @iModuleID int
declare @iResRefID int
declare @iVersionID int

set @iModuleID = @a_iModuleID
set @iResRefID = @a_iResRefID
set @iVersionID = @a_iVersionID

DECLARE @tStatusTable TABLE (Status varchar(1))

DECLARE @tResRefTable TABLE (ResRefID INT)

DECLARE @tResourceTable TABLE (ResRefID INT, Level INT, ModuleID INT, OwnerModuleID INT,
  VersionID INT, RevisionID INT, ResType VARCHAR(4),
  ResRefName VARCHAR(32), Folder VARCHAR(128), ObjectName VARCHAR(64),
  CreatedBy VARCHAR(32), CreatedOn DATETIME,
  IsCheckedOut BIT, CheckedOutBy VARCHAR(32), CheckedOutOn DATETIME,
  LastCheckInBy VARCHAR(32), LastCheckInOn DATETIME, State INT,
  Comment TEXT, IsDeleted BIT)

------------------------------------------------------------------------
-- Get the Module list to use
------------------------------------------------------------------------

if @a_bUseCurrent = 1
 BEGIN
    INSERT INTO @tStatusTable(Status) VALUES ('C')
 END

if @a_bUseScratch = 1
 BEGIN
    INSERT INTO @tStatusTable(Status) VALUES ('S')
 END

if @a_bGetReferences = 1
 BEGIN
    -- These are the resources that I am referencing
    INSERT INTO @tResRefTable
    SELECT distinct vrr.ResRefID 
    FROM   (
        SELECT DISTINCT rr1.SrcResRefID as ResRefID
        , mrrv.[ResRefID] as ReferencedByResRefID
        , mrrv.[ID] as ReferencedByVersionID
        , mrrv.[Status] as ReferencedByStatus
        , rr1.notes as Note
        -- Area
        FROM (        SELECT t1.[ScriptResRefID] as SrcResRefID, t1.[ModuleResRefVersionID], 'Area Script' as notes FROM t_Area t1
            UNION ALL SELECT t1.[AreaListResRefID],              t1.[ModuleResRefVersionID], 'Area List' FROM t_Area t1
            UNION ALL SELECT t1.[ObjectResRefID],                t1.[ModuleResRefVersionID], 'Area Object' FROM t_AreaObject t1
            UNION ALL SELECT t1.[ScriptResRefID],                t1.[ModuleResRefVersionID], 'Area Music Volume Script' FROM t_AreaMusicVolume t1
            -- Area Map
            UNION ALL SELECT t1.[ParentMapResRefID],             t1.[ModuleResRefVersionID], 'Area Map Parent' FROM t_Map t1
            -- Associated Resource
            UNION ALL SELECT t1.[ResRefID],                      t1.[ModuleResRefVersionID], 'Associated Resource' FROM t_AssociatedResource t1
            -- Character
            UNION ALL SELECT t1.[RoleResRefID],                  t1.[ModuleResRefVersionID], 'Character Role' FROM t_Character t1
            UNION ALL SELECT t1.[SoundsetResRefID],              t1.[ModuleResRefVersionID], 'Sound Set' FROM t_Character t1
            -- Conversation
            UNION ALL SELECT t1.[EndConversationPlotResRefID],   t1.[ModuleResRefVersionID], 'End Conversation Plot' FROM t_Conversation t1
            UNION ALL SELECT t1.[EndConversationScriptResRefID], t1.[ModuleResRefVersionID], 'End Conversation Script' FROM t_Conversation t1
            UNION ALL SELECT t1.[StageResRefID],                 t1.[ModuleResRefVersionID], 'Conversation Root Stage' FROM t_Conversation t1
            UNION ALL SELECT t1.[PreviewAreaResRefID],           t1.[ModuleResRefVersionID], 'Conversation Root Preview Area' FROM t_Conversation t1
            UNION ALL SELECT t1.[ActionPlotResRefID],            t1.[ModuleResRefVersionID], 'Conversation Line Action Plot' FROM t_ConversationLine t1
            UNION ALL SELECT t1.[ActionScriptResRefID],          t1.[ModuleResRefVersionID], 'Conversation Line Action Script' FROM t_ConversationLine t1
            UNION ALL SELECT t1.[ConditionPlotResRefID],         t1.[ModuleResRefVersionID], 'Conversation Line Condition Plot' FROM t_ConversationLine t1
            UNION ALL SELECT t1.[ConditionScriptResRefID],       t1.[ModuleResRefVersionID], 'Conversation Line Condition Script' FROM t_ConversationLine t1
            UNION ALL SELECT t1.[StageResRefID],                 t1.[ModuleResRefVersionID], 'Conversation Line Stage' FROM t_ConversationLine t1
            UNION ALL SELECT t1.[CameraFunctionalShotResRefID],  t1.[ModuleResRefVersionID], 'Conversation Line Camera Functional Shot' FROM t_ConversationLine t1
            UNION ALL SELECT t1.[CustomCutsceneResRefID],        t1.[ModuleResRefVersionID], 'Conversation Line Custom Cutscene' FROM t_ConversationLine t1
            UNION ALL SELECT t1.[FunctionalShotResRefID],        t1.[ModuleResRefVersionID], 'Conversation Cinematics Functional Shot' FROM t_ConversationCinematics t1
            UNION ALL SELECT t1.[PreviewAreaResRefID],           t1.[ModuleResRefVersionID], 'Conversation Line Preview Area' FROM t_ConversationLine t1
            UNION ALL SELECT t1.[ValueResRefID],                 t1.[ModuleResRefVersionID], 'Conversation Tag Map' FROM t_ConversationTagMap t1
            -- Creature
            UNION ALL SELECT t1.[ConversationResRefID],          t1.[ModuleResRefVersionID], 'Creature Conversation' FROM t_Creature t1
            UNION ALL SELECT t1.[ScriptResRefID],                t1.[ModuleResRefVersionID], 'Creature Script' FROM t_Creature t1
            UNION ALL SELECT t1.[CharacterResRefID],             t1.[ModuleResRefVersionID], 'Creature Character' FROM t_Creature t1
            -- Cutscene
            UNION ALL SELECT t1.[EndScriptResRefID],             t1.[ModuleResRefVersionID], 'Cutscene End Script' FROM t_Cutscene t1
            UNION ALL SELECT t1.[StageResRefID],                 t1.[ModuleResRefVersionID], 'Cutscene Stage' FROM t_Cutscene t1
            UNION ALL SELECT t1.[ResRefID],                      t1.[ModuleResRefVersionID], 'Cutscene Object' FROM t_CutsceneObject t1
            UNION ALL SELECT t1.[AreaResRefID],                  t1.[ModuleResRefVersionID], 'Cutscene Area' FROM t_Cutscene t1
            UNION ALL SELECT t1.[ResRefID1],                     t1.[ModuleResRefVersionID], 'Cutscene Speak Line Conversation' FROM t_CutsceneAction t1
            -- Inventory
            UNION ALL SELECT t1.[ItemResRefID],                  t1.[ModuleResRefVersionID], 'Inventory Item' FROM t_Inventory t1
            -- Item
            UNION ALL SELECT t1.[ScriptResRefID],                t1.[ModuleResRefVersionID], 'Item Script' FROM t_Item t1
            -- Merchant
            UNION ALL SELECT t1.[ScriptResRefID],                t1.[ModuleResRefVersionID], 'Merchant Script' FROM t_Merchant t1
            -- Placeable
            UNION ALL SELECT t1.[ScriptResRefID],                t1.[ModuleResRefVersionID], 'Placeable Script' FROM t_Placeable t1
            UNION ALL SELECT t1.[ConversationResRefID],          t1.[ModuleResRefVersionID], 'Placeable Conversation' FROM t_Placeable t1
            UNION ALL SELECT t1.[CharacterResRefID],             t1.[ModuleResRefVersionID], 'Placeable Character' FROM t_Placeable t1
            -- Plot
            UNION ALL SELECT t1.[ScriptResRefID],                t1.[ModuleResRefVersionID], 'Plot Script' FROM t_Plot t1
            UNION ALL SELECT t1.[ParentPlotResRefID],            t1.[ModuleResRefVersionID], 'Parent plot' FROM t_Plot t1
            -- Trigger
            UNION ALL SELECT t1.[ScriptResRefID],                t1.[ModuleResRefVersionID], 'Trigger Script' FROM t_Trigger t1
            -- Script
            UNION ALL SELECT t1.[ReferencedResRefID],            t1.[ModuleResRefVersionID], 'Script Reference' FROM t_Script_Reference t1
            -- Stage
            UNION ALL SELECT t1.[AreaResRefID],                  t1.[ModuleResRefVersionID], 'Stage Area' FROM t_Stage t1
            UNION ALL SELECT t1.[CreatureResRefID],              t1.[ModuleResRefVersionID], 'Stage Creature' FROM t_StageObject t1
        ) rr1
        JOIN t_ModuleResRefVersion mrrv on rr1.ModuleResRefVersionID = mrrv.[ID]
    ) vrr
      join @tStatusTable t1 on t1.Status = vrr.ReferencedByStatus
    WHERE  vrr.ReferencedByResRefID = @iResRefID
    AND    vrr.ResRefID is not null
 END
else
 BEGIN
    -- These are the resources that reference me
    INSERT INTO @tResRefTable
    SELECT distinct vrr.ReferencedByResRefID
    FROM   (
        -- Area
        SELECT t1.[ScriptResRefID] as ResRefID
        ,      mrrv.[ResRefID] as ReferencedByResRefID
        ,      mrrv.[ID] as ReferencedByVersionID
        ,      mrrv.[Status] as ReferencedByStatus
        ,      'Area Script' as Note
        FROM   t_Area t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[AreaListResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Area List'
        FROM   t_Area t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[ObjectResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Area Object'
        FROM   t_AreaObject t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[ScriptResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Area Music Volume Script'
        FROM   t_AreaMusicVolume t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]          
        UNION ALL
        -- Area Map
        SELECT t1.[ParentMapResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Area Map Parent'
        FROM   t_Map t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]          
        UNION ALL
        -- Associated Resource
        SELECT t1.[ResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Associated Resource'
        FROM   t_AssociatedResource t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        -- Character
        SELECT t1.[RoleResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Character Role'
        FROM   t_Character t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[SoundsetResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Sound Set'
        FROM   t_Character t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        -- Conversation
        SELECT t1.[EndConversationPlotResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'End Conversation Plot'
        FROM   t_Conversation t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[EndConversationScriptResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'End Conversation Script'
        FROM   t_Conversation t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[StageResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Conversation Root Stage'
        FROM   t_Conversation t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[PreviewAreaResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Conversation Root Preview Area'
        FROM   t_Conversation t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[ActionPlotResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Conversation Line Action Plot'
        FROM   t_ConversationLine t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[ActionScriptResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Conversation Line Action Script'
        FROM   t_ConversationLine t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[ConditionPlotResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Conversation Line Condition Plot'
        FROM   t_ConversationLine t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[ConditionScriptResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Conversation Line Condition Script'
        FROM   t_ConversationLine t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[StageResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Conversation Line Stage'
        FROM   t_ConversationLine t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[CameraFunctionalShotResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Conversation Line Camera Functional Shot'
        FROM   t_ConversationLine t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[CustomCutsceneResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Conversation Line Custom Cutscene'
        FROM   t_ConversationLine t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[FunctionalShotResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Conversation Cinematics Functional Shot'
        FROM   t_ConversationCinematics t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[PreviewAreaResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Conversation Line Preview Area'
        FROM   t_ConversationLine t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[ValueResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Conversation Tag Map'
        FROM   t_ConversationTagMap t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        -- Creature
        SELECT t1.[ConversationResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Creature Conversation'
        FROM   t_Creature t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[ScriptResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Creature Script'
        FROM   t_Creature t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[CharacterResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Creature Character'
        FROM   t_Creature t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        -- Cutscene
        SELECT t1.[EndScriptResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Cutscene End Script'
        FROM   t_Cutscene t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[StageResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Cutscene Stage'
        FROM   t_Cutscene t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[ResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Cutscene Object'
        FROM   t_CutsceneObject t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[AreaResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Cutscene Area'
        FROM   t_Cutscene t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[ResRefID1]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Cutscene Speak Line Conversation'
        FROM   t_CutsceneAction t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        -- Inventory
        SELECT t1.[ItemResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Inventory Item'
        FROM   t_Inventory t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        -- Item
        SELECT t1.[ScriptResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Item Script'
        FROM   t_Item t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        -- Merchant
        SELECT t1.[ScriptResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Merchant Script'
        FROM   t_Merchant t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        -- Placeable
        SELECT t1.[ScriptResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Placeable Script'
        FROM   t_Placeable t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[ConversationResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Placeable Conversation'
        FROM   t_Placeable t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[CharacterResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Placeable Character'
        FROM   t_Placeable t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        -- Plot
        SELECT t1.[ScriptResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Plot Script'
        FROM   t_Plot t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[ParentPlotResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Parent plot'
        FROM   t_Plot t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        -- Trigger
        SELECT t1.[ScriptResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Trigger Script'
        FROM   t_Trigger t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        -- Script
        SELECT t1.[ReferencedResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Script Reference'
        FROM   t_Script_Reference t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        -- Stage
        SELECT t1.[AreaResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Stage Area'
        FROM   t_Stage t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
        UNION ALL
        SELECT t1.[CreatureResRefID]
        ,      mrrv.[ResRefID]
        ,      mrrv.[ID]
        ,      mrrv.[Status]
        ,      'Stage Creature'
        FROM   t_StageObject t1
          join t_ModuleResRefVersion mrrv on t1.[ModuleResRefVersionID] = mrrv.[ID]
    ) vrr
      join @tStatusTable t1 on t1.Status = vrr.ReferencedByStatus
    WHERE  vrr.ResRefID = @iResRefID
    AND    vrr.ResRefID is not null
    option (concat union)
 END
 
------------------------------------------------------------------------
--  It is very important to select at least one column from the v_ResourceReference
--  view and/or subquery that it is in.
--  The optimizer does not perform well if that view is not referenced in the final select
------------------------------------------------------------------------

IF @a_bUseCurrent = 1 OR @a_bUseScratch = 1
 BEGIN
    INSERT INTO @tResourceTable
    SELECT vrr1.resrefid, 1, mrr.moduleid,
      CASE isnull(mrrv2.id,-1) when -1 
        then mrrv1.ownermoduleid 
        else case mrrv2.username when suser_sname()
                then mrrv2.ownermoduleid
                else mrrv1.ownermoduleid
             end
      end,
      0, 0, rr1.restype,
      CASE isnull(mrrv2.id,-1) when -1 
        then mrrv1.name 
        else case mrrv2.username when suser_sname()
                then mrrv2.name
                else mrrv1.name
             end
      end,
      CASE isnull(mrrv2.id,-1) when -1 
        then mrrv1.folder 
        else case mrrv2.username when suser_sname()
                then mrrv2.folder
                else mrrv1.folder
             end
      end,
      cast( CASE isnull(mrrv2.id,-1) when -1 
                THEN dbo.udf_GetResourceName(mrrv1.id) 
                else case mrrv2.username when suser_sname()
                        then dbo.udf_GetResourceName(mrrv2.id)
                        else dbo.udf_GetResourceName(mrrv1.id)
                     end
             END as varchar(64) ) ,
      mrr.createdby, mrr.createdon, 
      case isnull(mrrv2.id,-1) when -1 then 0 else 1 end,
      mrrv2.username, mrrv2.date, mrrv1.username, mrrv1.date, mrrv1.state,
      mrrv1.comment,
      case isnull(mrr.CurrentModuleResRefVersionID, -1)
          when -1 then 1
          else 0
      end
    FROM dbo.udf_GetModuleHierarchy(@iModuleID, @a_bUseModuleTree) mt
      JOIN t_moduleresref mrr ON mt.ModuleID = mrr.moduleid
      JOIN t_resref rr1 on mrr.resrefid = rr1.id
      JOIN t_moduleresrefversion mrrv1 on mrr.currentmoduleresrefversionid = mrrv1.id
      LEFT OUTER JOIN t_moduleresrefversion mrrv2 on mrr.scratchmoduleresrefversionid = mrrv2.id
      JOIN @tResRefTable vrr1 ON mrr.resrefid = vrr1.resrefid
 END

IF @a_bGetDeleted = 1
 BEGIN
    INSERT INTO @tResourceTable
    select drr.resrefid, null, mrr.moduleid, mrrv.ownermoduleid, mrrv.id, mrrv.RevisionID,
      rr1.restype, mrrv.name, mrrv.folder, cast( dbo.udf_GetResourceName(mrrv.id) as varchar(64) ) ,
      mrr.lastmodifiedby, mrr.lastmodifiedon,
      0, null, null, null, null, mrrv.state,
      mrrv.comment,
      case isnull(mrr.CurrentModuleResRefVersionID, -1)
          when -1 then 1
          else 0
      end
    from dbo.udf_GetModuleHierarchy(@iModuleID, @a_bUseModuleTree) mt
      JOIN t_moduleresref mrr ON mt.ModuleID = mrr.moduleid
    join t_ResRef rr1 on mrr.resrefid = rr1.id
    join t_ModuleResRefVersion mrrv on mrrv.moduleid = mrr.moduleid 
      and mrrv.resrefid = mrr.resrefid
      join (select distinct vrr.ResRefID
            from (
                SELECT DISTINCT rr1.SrcResRefID as ResRefID
                , mrrv.[ResRefID] as ReferencedByResRefID
                , mrrv.[ID] as ReferencedByVersionID
                , mrrv.[Status] as ReferencedByStatus
                , rr1.notes as Note
                -- Area
                FROM (        SELECT t1.[ScriptResRefID] as SrcResRefID, t1.[ModuleResRefVersionID], 'Area Script' as notes FROM t_Area t1
                    UNION ALL SELECT t1.[AreaListResRefID],              t1.[ModuleResRefVersionID], 'Area List' FROM t_Area t1
                    UNION ALL SELECT t1.[ObjectResRefID],                t1.[ModuleResRefVersionID], 'Area Object' FROM t_AreaObject t1
                    UNION ALL SELECT t1.[ScriptResRefID],                t1.[ModuleResRefVersionID], 'Area Music Volume Script' FROM t_AreaMusicVolume t1
                    -- Area Map
                    UNION ALL SELECT t1.[ParentMapResRefID],             t1.[ModuleResRefVersionID], 'Area Map Parent' FROM t_Map t1
                    -- Associated Resource
                    UNION ALL SELECT t1.[ResRefID],                      t1.[ModuleResRefVersionID], 'Associated Resource' FROM t_AssociatedResource t1
                    -- Character
                    UNION ALL SELECT t1.[RoleResRefID],                  t1.[ModuleResRefVersionID], 'Character Role' FROM t_Character t1
                    UNION ALL SELECT t1.[SoundsetResRefID],              t1.[ModuleResRefVersionID], 'Sound Set' FROM t_Character t1
                    -- Conversation
                    UNION ALL SELECT t1.[EndConversationPlotResRefID],   t1.[ModuleResRefVersionID], 'End Conversation Plot' FROM t_Conversation t1
                    UNION ALL SELECT t1.[EndConversationScriptResRefID], t1.[ModuleResRefVersionID], 'End Conversation Script' FROM t_Conversation t1
                    UNION ALL SELECT t1.[StageResRefID],                 t1.[ModuleResRefVersionID], 'Conversation Root Stage' FROM t_Conversation t1
                    UNION ALL SELECT t1.[PreviewAreaResRefID],           t1.[ModuleResRefVersionID], 'Conversation Root Preview Area' FROM t_Conversation t1
                    UNION ALL SELECT t1.[ActionPlotResRefID],            t1.[ModuleResRefVersionID], 'Conversation Line Action Plot' FROM t_ConversationLine t1
                    UNION ALL SELECT t1.[ActionScriptResRefID],          t1.[ModuleResRefVersionID], 'Conversation Line Action Script' FROM t_ConversationLine t1
                    UNION ALL SELECT t1.[ConditionPlotResRefID],         t1.[ModuleResRefVersionID], 'Conversation Line Condition Plot' FROM t_ConversationLine t1
                    UNION ALL SELECT t1.[ConditionScriptResRefID],       t1.[ModuleResRefVersionID], 'Conversation Line Condition Script' FROM t_ConversationLine t1
                    UNION ALL SELECT t1.[StageResRefID],                 t1.[ModuleResRefVersionID], 'Conversation Line Stage' FROM t_ConversationLine t1
                    UNION ALL SELECT t1.[CameraFunctionalShotResRefID],  t1.[ModuleResRefVersionID], 'Conversation Line Camera Functional Shot' FROM t_ConversationLine t1
                    UNION ALL SELECT t1.[CustomCutsceneResRefID],        t1.[ModuleResRefVersionID], 'Conversation Line Custom Cutscene' FROM t_ConversationLine t1
                    UNION ALL SELECT t1.[FunctionalShotResRefID],        t1.[ModuleResRefVersionID], 'Conversation Cinematics Functional Shot' FROM t_ConversationCinematics t1
                    UNION ALL SELECT t1.[PreviewAreaResRefID],           t1.[ModuleResRefVersionID], 'Conversation Line Preview Area' FROM t_ConversationLine t1
                    UNION ALL SELECT t1.[ValueResRefID],                 t1.[ModuleResRefVersionID], 'Conversation Tag Map' FROM t_ConversationTagMap t1
                    -- Creature
                    UNION ALL SELECT t1.[ConversationResRefID],          t1.[ModuleResRefVersionID], 'Creature Conversation' FROM t_Creature t1
                    UNION ALL SELECT t1.[ScriptResRefID],                t1.[ModuleResRefVersionID], 'Creature Script' FROM t_Creature t1
                    UNION ALL SELECT t1.[CharacterResRefID],             t1.[ModuleResRefVersionID], 'Creature Character' FROM t_Creature t1
                    -- Cutscene
                    UNION ALL SELECT t1.[EndScriptResRefID],             t1.[ModuleResRefVersionID], 'Cutscene End Script' FROM t_Cutscene t1
                    UNION ALL SELECT t1.[StageResRefID],                 t1.[ModuleResRefVersionID], 'Cutscene Stage' FROM t_Cutscene t1
                    UNION ALL SELECT t1.[ResRefID],                      t1.[ModuleResRefVersionID], 'Cutscene Object' FROM t_CutsceneObject t1
                    UNION ALL SELECT t1.[AreaResRefID],                  t1.[ModuleResRefVersionID], 'Cutscene Area' FROM t_Cutscene t1
                    UNION ALL SELECT t1.[ResRefID1],                     t1.[ModuleResRefVersionID], 'Cutscene Speak Line Conversation' FROM t_CutsceneAction t1
                    -- Inventory
                    UNION ALL SELECT t1.[ItemResRefID],                  t1.[ModuleResRefVersionID], 'Inventory Item' FROM t_Inventory t1
                    -- Item
                    UNION ALL SELECT t1.[ScriptResRefID],                t1.[ModuleResRefVersionID], 'Item Script' FROM t_Item t1
                    -- Merchant
                    UNION ALL SELECT t1.[ScriptResRefID],                t1.[ModuleResRefVersionID], 'Merchant Script' FROM t_Merchant t1
                    -- Placeable
                    UNION ALL SELECT t1.[ScriptResRefID],                t1.[ModuleResRefVersionID], 'Placeable Script' FROM t_Placeable t1
                    UNION ALL SELECT t1.[ConversationResRefID],          t1.[ModuleResRefVersionID], 'Placeable Conversation' FROM t_Placeable t1
                    UNION ALL SELECT t1.[CharacterResRefID],             t1.[ModuleResRefVersionID], 'Placeable Character' FROM t_Placeable t1
                    -- Plot
                    UNION ALL SELECT t1.[ScriptResRefID],                t1.[ModuleResRefVersionID], 'Plot Script' FROM t_Plot t1
                    UNION ALL SELECT t1.[ParentPlotResRefID],            t1.[ModuleResRefVersionID], 'Parent plot' FROM t_Plot t1
                    -- Trigger
                    UNION ALL SELECT t1.[ScriptResRefID],                t1.[ModuleResRefVersionID], 'Trigger Script' FROM t_Trigger t1
                    -- Script
                    UNION ALL SELECT t1.[ReferencedResRefID],            t1.[ModuleResRefVersionID], 'Script Reference' FROM t_Script_Reference t1
                    -- Stage
                    UNION ALL SELECT t1.[AreaResRefID],                  t1.[ModuleResRefVersionID], 'Stage Area' FROM t_Stage t1
                    UNION ALL SELECT t1.[CreatureResRefID],              t1.[ModuleResRefVersionID], 'Stage Creature' FROM t_StageObject t1
                ) rr1
                JOIN t_ModuleResRefVersion mrrv on rr1.ModuleResRefVersionID = mrrv.[ID]
            ) vrr
              left outer join t_ModuleResRef mrr on vrr.resrefid = mrr.resrefid
            where vrr.ReferencedByVersionID = @iVersionID
            and   vrr.resrefid is not null
            and   mrr.currentmoduleresrefversionid is null
           ) drr on mrr.ResRefID = drr.ResRefID
    where mrrv.id =
     (select top 1 mrrv2.id from t_ModuleResRefVersion mrrv2
                       where mrrv2.moduleid = mrr.moduleid
                        and mrrv2.resrefid = mrr.resrefid
                        and mrrv2.status = 'H'
        order by mrrv2.date desc) 
 END

SET NOCOUNT OFF

SELECT ResRefID , Level , ModuleID , OwnerModuleID , 
  VersionID , RevisionID , ResType ,
  ResRefName , Folder , ObjectName ,
  CreatedBy , CreatedOn ,
  IsCheckedOut , CheckedOutBy , CheckedOutOn ,
  LastCheckInBy , LastCheckInOn , State,
  Comment, IsDeleted
FROM @tResourceTable
 
IF (@@ERROR <> 0) GOTO ON_ERROR

return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
return @@ERROR

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetResourceReferenceList]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE PROCEDURE [dbo].[bsp_GetRoleList]
@a_iModuleID INT,
@a_bUseModuleTree BIT
AS

DECLARE @iReturn INT

SELECT  mrr.ResRefID, 
      CASE r.Name WHEN ''
        THEN mrrv1.Name
        ELSE r.Name
      END as Name, 
      r.Description
FROM  dbo.udf_GetModuleHierarchy(@a_iModuleID, @a_bUseModuleTree) mt
      JOIN t_ModuleResRef mrr ON mt.ModuleID = mrr.ModuleID
      JOIN t_ModuleResRefVersion mrrv1 ON mrr.CurrentModuleResRefVersionID = mrrv1.ID
      JOIN t_Role r ON mrrv1.ID = r.ModuleResRefVersionID  


SELECT @iReturn = @@ERROR
IF (@iReturn != 0) GOTO ON_ERROR


---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
RETURN @iReturn



GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetRoleList]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  Stored Proc: bsp_GetVOScriptMaintenanceData
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: February 22, 2007
--  Description: All of the data required for the Maintenance features
--    is loaded from this stored procedure.
--
--  Parameters:
--    @a_iVOScriptID - ID of VO Script to load data for.  Cannot be NULL
--    @a_iStringLanguageID - StringLanguageID to load data from.
-- 
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_GetVOScriptMaintenanceData]
@a_iVOScriptID int,
@a_iStringLanguageID int
AS

SET NOCOUNT ON

DECLARE @iError int

CREATE TABLE #Results
(
    [VOScriptID] int, 
    [VOScriptInstanceID] int, 
    [VOScriptInstanceStringID] int, 
    [StringLanguageID] int, 
    [StringID] int, 
    [StringVariantID] int, 
    [RecordedText] nText,
    [CurrentText] nText,
    [ScriptPrintedOn] datetime,
    [ScriptPrintedBy] varchar(64)
)


SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  Get the lines related to our VO Script
------------------------------------------------------------------------
EXEC @iError = dbo.bsp_DetermineVOScriptLineCharacters @a_iVOScriptID, NULL
IF (@iError <> 0) GOTO ON_ERROR

DECLARE @tblStringIDToLoad TABLE ( [StringID] int )

------------------------------------------------------------------------
--  Determine the Strings that belong to this Script, or 
--  belong to the character that is in this script.
--  (the difference is that some strings were most recently
--   printed with this script, but have been moved to another character,
--   or vice versa).
------------------------------------------------------------------------
INSERT @tblStringIDToLoad ( [StringID] )
(
    SELECT voslci.[StringID]
    FROM t_VOScript vos
        JOIN t_VOScriptLineCharacterInternal voslci
            ON voslci.[SPID] = @@SPID
            AND vos.[ID] = @a_iVOScriptID
            AND voslci.[ResourceModuleID] = vos.[ResourceModuleID]
            AND voslci.[ResourceResRefID] = vos.[ResourceResRefID]
            AND voslci.[CharacterModuleID] = vos.[CharacterModuleID]
            AND voslci.[CharacterResRefID] = vos.[CharacterResRefID]

    UNION

    SELECT vosis.[StringID]
    FROM t_VOScriptInstanceString vosis
        JOIN t_VOScriptInstance vosi
            ON vosis.[VOScriptInstanceID] = vosi.[ID]
            AND vosi.[VOScriptID] = @a_iVOScriptID
            AND vosi.[StringLanguageID] = @a_iStringLanguageID
    WHERE vosis.[Active] = 'A'
)

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Now load all needed data from the strings that we calculated.
------------------------------------------------------------------------
INSERT #Results
SELECT vos.[ID], vosi.[ID], vosis.[ID],
    vosi.[StringLanguageID], vosis.[StringID], vosis.[StringVariantID],
    NULL, NULL, vosi.[PrintedOn], vosi.[CreatedBy]
FROM t_VOScript vos
    JOIN t_VOScriptInstance vosi
        ON vos.[ID] = vosi.[VOScriptID]
    JOIN t_VOScriptInstanceString vosis
        ON vosi.[ID] = vosis.[VOScriptInstanceID]
        AND vosi.[StringLanguageID] = @a_iStringLanguageID
        AND vosis.[Active] = 'A'
    JOIN @tblStringIDToLoad sid
        ON vosis.[StringID] = sid.[StringID]
        
SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

-- Update English Recorded Text
UPDATE res
SET [RecordedText] = st.[Text]
FROM #Results res
    JOIN t_VOScriptInstanceString vosis
        ON res.[VOScriptInstanceStringID] = vosis.[ID]
        AND vosis.[IsForeign] = 0
    JOIN t_StringText st
        ON st.[StringID] = vosis.[StringID]
        AND st.[ModuleResRefVersionID] = vosis.[ModuleResRefVersionID]
        AND st.[StringLanguageVariantID] = vosis.[StringLanguageVariantID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

-- Update Foreign Recorded Text
UPDATE res
SET [RecordedText] = slvt.[Text]
FROM #Results res
    JOIN t_VOScriptInstanceString vosis
        ON res.[VOScriptInstanceStringID] = vosis.[ID]
        AND vosis.[IsForeign] = 1
    JOIN t_StringLanguageVariantText slvt
        ON slvt.[StringLanguageVariantVersionID] = vosis.[StringLanguageVariantVersionID]
        AND slvt.[StringID] = vosis.[StringID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

-- Update English Current Text
UPDATE res
SET [CurrentText] = st.[Text]
FROM #Results res
    JOIN t_VOScript vos
        ON res.[VOScriptID] = vos.[ID]
    JOIN t_VOScriptInstanceString vosis
        ON res.[VOScriptInstanceStringID] = vosis.[ID]
        AND vosis.[IsForeign] = 0
    JOIN t_ModuleResRef mr
        ON mr.[ModuleID] = vos.[ResourceModuleID]
        AND mr.[ResRefID] = vos.[ResourceResRefID]
    JOIN t_StringText st
        ON st.[StringID] = res.[StringID]
        AND st.[ModuleResRefVersionID] = mr.[CurrentModuleResRefVersionID]
        AND st.[StringLanguageVariantID] = vosis.[StringLanguageVariantID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

-- Update Foreign Current Text
UPDATE res
SET [CurrentText] = slvt.[Text]
FROM #Results res
    JOIN t_VOScriptInstanceString vosis
        ON res.[VOScriptInstanceStringID] = vosis.[ID]
        AND vosis.[IsForeign] = 1
    JOIN t_StringLanguageVariantVersion slvvRecorded
        ON slvvRecorded.[ID] = vosis.[StringLanguageVariantVersionID]
    JOIN t_StringLanguageVariant slv
        ON slv.[ID] = slvvRecorded.[StringLanguageVariantID]
    JOIN t_StringLanguageVariantText slvt
        ON slvt.[StringLanguageVariantVersionID] = slv.[CurrentStringLanguageVariantVersionID]
        AND slvt.[StringID] = res.[StringID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

SELECT *
FROM #Results

SET NOCOUNT OFF

return 0
------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

SET NOCOUNT OFF

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetVOScriptMaintenanceData]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO


------------------------------------------------------------------------
--  Stored Proc: bsp_GetVOScriptStats
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: February 22, 2007
--  Description: Get the VO Script Statistics needed for the 
--    VO Script Generator.
--
--  Parameters
--    a_iVOScriptID - VOScript ID to look up stats on, set as follows:
--      o NULL: Gets stats for All VO Scripts
--      o VOScriptID: Gets stats for one VO Script
--    a_iStringLanguageID - LanguageID to look up stats for
--    a_bIncludeBlankLines - set as follows:
--      o 1: includes blank lines
--      o 0: excludes them
--    a_bVerbose - Indicates that more fields are required in the output
--
--  Result Set: 
--    VOScriptID - VOScript that Stats Record is for
--    LineCountEnglish - How many lines the English resource has that
--        can be VO Recorded (not to be confused with total lines 
--        in a resource)
--    LineCount - How many lines the (a_iStringLanguageID) resource
--        has that can be VO Recorded.
--    CharacterLineCountEnglish - How many lines the English resource 
--        has that are owned by this VO Script's character.
--    CharacterLineCount - How many lines the (a_iStringLanguageID) 
--        resource  has that are owned by this VO Script's character.
--    RecordCount - How many lines require recording for the first time
--      by this VO Script (in the specified language).  Note that this 
--      value does not include lines requiring re-recording.
--    ReRecordCount - How many lines require recording for the 
--      second or more time by this VO Script (in the specified 
--      language).
--
------------------------------------------------------------------------
CREATE  PROCEDURE [dbo].[bsp_GetVOScriptStats]
@a_iVOScriptID int,
@a_iStringLanguageID int,
@a_bIncludeBlankLines bit,
@a_bVerbose bit = 0
AS

SET NOCOUNT ON

------------------------------------------------------------------------
--  !!! NOTE !!!
--    The LineCounts calculated here used to be chained to the 
--    version of the resource returned from 
--    bsp_DetermineVOScriptLineCharacters.  This has been changed.
--    The live version is always used now, as it performs much 
--    better.  There is a risk that a resouce has 
--    been updated during this BSP, and the Character Line Count
--    has newer data than the Resource Line Count.
--    We are willing to accept this for the performance gain.
------------------------------------------------------------------------
DECLARE @iError int


------------------------------------------------------------------------
--  Define result structure
------------------------------------------------------------------------
CREATE TABLE #tblResults
(
    [VOScriptID] int NOT NULL,
    [LineCountEnglish] int NOT NULL,
    [LineCount] int NOT NULL,
    [CharacterWordCountEnglish] int NOT NULL,
    [CharacterLineCountEnglish] int NOT NULL,
    [CharacterLineCount] int NOT NULL,
    [RecordCount] int NOT NULL,
    [ReRecordCount] int NOT NULL
)

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Make a place to hold our strings
------------------------------------------------------------------------
DECLARE @tStatsInternal TABLE (
    [StringID] [int] NOT NULL ,
    [ModuleID] [int] NOT NULL ,
    [ResRefID] [int] NOT NULL ,
    [StringLanguageID] [int] NOT NULL ,
    [StringVariantID] [int] NOT NULL ,
    [VORequestedOn] [datetime] NOT NULL ,
    [ReqRecord] [bit] NOT NULL ,
    [IsReRecord] [bit] NOT NULL,
    [WordCount] [int] NOT NULL , 
    [IsBlank] [bit] NOT NULL ,
    [UsedInVO] [bit] NOT NULL
)


------------------------------------------------------------------------
--  Load the English Language ID
------------------------------------------------------------------------
DECLARE @iDevStringLanguageID int
SET @iDevStringLanguageID = dbo.udf_GetProjectStringLanguageID()

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  Determine if we are working with a foreign language
------------------------------------------------------------------------
DECLARE @bForeignStringLanguage bit

IF (@a_iStringLanguageID = @iDevStringLanguageID)
BEGIN
    SET @bForeignStringLanguage = 0
END
ELSE
BEGIN
    SET @bForeignStringLanguage = 1
END


------------------------------------------------------------------------
--  Load the Resources/Strings/Characters for our data of interest
------------------------------------------------------------------------
EXEC @iError = [dbo].[bsp_DetermineVOScriptLineCharacters] @a_iVOScriptID, NULL
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Remove lines that should not be recorded from the consideration set.
------------------------------------------------------------------------

EXEC @iError = [dbo].[bsp_AdjustVOScriptLineCharacterInternalForStats]
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Initialize the Result set with the VO Scripts to be returned
------------------------------------------------------------------------
INSERT #tblResults
    ([VOScriptID], [LineCountEnglish], [LineCount], 
    [CharacterWordCountEnglish], 
    [CharacterLineCountEnglish], [CharacterLineCount], 
    [RecordCount], [ReRecordCount])
SELECT [ID], 0, 0, 
    0, 
    0, 0, 
    0, 0
FROM t_VOScript vos
WHERE vos.[IsActive] = 1
AND (@a_iVOScriptID IS NULL OR vos.[ID] = @a_iVOScriptID)

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Determine all strings that are elligible for recording.
--  We store other data with the StringID, such as the VORequestOn time.
--  For foreign languages, this is the ImportedOn datetime.
--  These values will be used to see what strings require re/recording.
------------------------------------------------------------------------

--  Get Conversation NPC and PC lines
INSERT @tStatsInternal
    ([StringID], [ModuleID], [ResRefID], 
    [StringLanguageID], [StringVariantID], 
    [WordCount], 
    [VORequestedOn],
    [ReqRecord], [IsReRecord], [IsBlank],
    [UsedInVO])
SELECT st.[StringID], mrv.[ModuleID], mrv.[ResRefID], 
    @iDevStringLanguageID, 1, 
    st.[WordCount], 
    st.[VORequestOn], 
    0, 0,
    CASE
        WHEN st.[WordCount] = 0 THEN 1
        ELSE 0
    END AS [IsBlank],
    CASE
        WHEN st.[WordCount] > 0 THEN 1
        WHEN (LEFT(mrv.[Name], 3) = 'ss_' AND cl.[IsPC] = 0) THEN 1
        ELSE 0
    END AS [UsedInVO]
FROM t_ConversationLine cl
    JOIN 
    (
        SELECT DISTINCT mr.[CurrentModuleResRefVersionID]
        FROM t_VOScript vos
        JOIN #tblResults tResults
            ON vos.[ID] = tResults.[VOScriptID]
        JOIN t_ModuleResRef mr
            ON vos.[ResourceModuleID] = mr.[ModuleID]
            AND vos.[ResourceResRefID] = mr.[ResRefID]
            AND mr.[CurrentModuleResRefVersionID] IS NOT NULL
    ) x
        ON cl.[ModuleResRefVersionID] = x.[CurrentModuleResRefVersionID] 
    JOIN t_ModuleResRefVersion mrv
        ON cl.[ModuleResRefVersionID] = mrv.[ID]
    JOIN t_StringText st
        ON cl.[TextStringID] = st.[StringID]
        AND cl.[ModuleResRefVersionID] = st.[ModuleResRefVersionID]
        AND (
        -- NOTE!  Return blank english text when looking for foreign data.
        -- The foreign data may not be blank, but will be filtered correctly
        -- on its own.
            @bForeignStringLanguage = 1 OR 
            @a_bIncludeBlankLines = 1 OR 
            (LEFT(mrv.[Name], 3) = 'ss_' AND cl.[IsPC] = 0) OR
            st.[WordCount] > 0)

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


--  Note: when there are sound sets and other strings, you will 
--  load them into @tStatsInternal at this point
-- (these were nonexistent at time of development)


------------------------------------------------------------------------
--  When loading stats for a foreign language, load the available 
--  strings into @tStatsInternal
------------------------------------------------------------------------
IF (@bForeignStringLanguage = 1)
BEGIN

    DECLARE @tLangInfo TABLE
    (
        StringLanguageID int,
        StringVariantID int,
        StringLanguageVariantVersionID int 
    )

    INSERT @tLangInfo
    SELECT StringLanguageID, StringVariantID, CurrentStringLanguageVariantVersionID
    FROM t_StringLanguageVariant
    WHERE [StringLanguageID] = @a_iStringLanguageID

    INSERT @tStatsInternal
        ([StringID], [ModuleID], [ResRefID], 
        [StringLanguageID], [StringVariantID], [VORequestedOn],
        [ReqRecord], [IsReRecord], 
        [WordCount], 
        [IsBlank],
        [UsedInVO])
    SELECT slvt.[StringID], vossi.[ModuleID], vossi.[ResRefID], 
        slv.[StringLanguageID], slv.[StringVariantID], sis.[ImportedOn],
        0, 0, 
        -1, 
        slvt.[IsBlank],
        1
--    FROM t_StringLanguageVariant slv
    FROM @tLangInfo slv
        JOIN t_StringLanguageVariantText slvt WITH ( NOLOCK ) 
            ON slv.[StringLanguageVariantVersionID] = slvt.[StringLanguageVariantVersionID]
--             ON slv.[StringLanguageID] = @a_iStringLanguageID
--             AND slv.[CurrentStringLanguageVariantVersionID] = slvt.[StringLanguageVariantVersionID]
        JOIN t_StringImportSession sis WITH ( NOLOCK ) 
            ON slvt.[StringImportSessionID] = sis.[ID]
        JOIN @tStatsInternal vossi
            ON slvt.[StringID] = vossi.[StringID]
    WHERE        
        @a_bIncludeBlankLines = 1 
        OR slvt.[IsBlank] = 0
        OR (vossi.[IsBlank] = 1 AND vossi.[UsedInVO] = 1 AND slv.[StringVariantID] = 1) -- these would be soundset placeholder lines.  Only take the male versions.

    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR

    ------------------------------------------------------------------------
    -- The English strings in @tStatsInternal contian blanks when 
    --  adding in the foreign strings.  We now remove those blank strings
    --  if applicable, before calculating the stats.
    ------------------------------------------------------------------------
    
    DELETE ts
    FROM @tStatsInternal ts
    WHERE @a_bIncludeBlankLines = 0
    AND [IsBlank] = 1 
    AND [UsedInVO] = 0

    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR

END


------------------------------------------------------------------------
--  For all of our strings, determine which ones require recording,
--  and which ones are Re-Records (have been Recorded before).
------------------------------------------------------------------------
IF (@bForeignStringLanguage = 0)
BEGIN
    --  Calculate English String ReqRecords and ReRecords
    UPDATE vossi
    SET
        [ReqRecord] = 1,
        [IsReRecord] = CASE WHEN voRecorded.[StringID] IS NULL THEN 0 ELSE 1 END
    FROM @tStatsInternal vossi
        JOIN t_VOScriptLineCharacterInternal voslci
            ON vossi.[StringID] = voslci.[StringID]
            AND voslci.[SPID] = @@SPID    
        JOIN t_VOScript vos
            ON voslci.ResourceModuleID = vos.ResourceModuleID
            AND voslci.ResourceResRefID = vos.ResourceResRefID
            AND voslci.CharacterModuleID = vos.CharacterModuleID
            AND voslci.CharacterResRefID = vos.CharacterResRefID
        LEFT OUTER JOIN
        (
            SELECT vosi.[VOScriptID] AS [RecordedVOScriptID], vosis.[StringID], vosis.[CompareDate]
            FROM t_VOScriptInstanceString vosis
                JOIN t_VOScriptInstance vosi
                    ON vosis.[VOScriptInstanceID] = vosi.[ID]
                    AND vosis.[Active] = 'A'
                    AND vosis.[Status] = 'P'
                    AND vosis.[IsForeign] = 0
        ) voRecorded
            ON vos.[ID] = voRecorded.[RecordedVOScriptID]
            AND vossi.[StringID] = voRecorded.[StringID]
    WHERE vossi.[StringLanguageID] = @iDevStringLanguageID
    AND (voRecorded.[StringID] IS NULL OR vossi.[VORequestedOn] > voRecorded.[CompareDate])

    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR

END
ELSE
BEGIN
    --  Calculate Foreign String ReqRecords and ReRecords
    UPDATE vossi
    SET
        [ReqRecord] = 1,
        [IsReRecord] = CASE WHEN voRecorded.[StringID] IS NULL THEN 0 ELSE 1 END
    FROM @tStatsInternal vossi
        JOIN t_VOScriptLineCharacterInternal voslci
            ON vossi.[StringID] = voslci.[StringID]
            AND voslci.[SPID] = @@SPID    
        JOIN t_VOScript vos
            ON voslci.ResourceModuleID = vos.ResourceModuleID
            AND voslci.ResourceResRefID = vos.ResourceResRefID
            AND voslci.CharacterModuleID = vos.CharacterModuleID
            AND voslci.CharacterResRefID = vos.CharacterResRefID
        LEFT JOIN 
        (
            SELECT 
                vosi.[VOScriptID] AS [RecordedVOScriptID], vosis.[StringID], 
                vosis.[CompareDate], 
                slv.[StringLanguageID], slv.[StringVariantID]
            FROM t_VOScriptInstanceString vosis
                JOIN t_VOScriptInstance vosi
                    ON vosis.[VOScriptInstanceID] = vosi.[ID]    
                JOIN t_StringLanguageVariantVersion slvv
                    ON slvv.[ID] = vosis.[StringLanguageVariantVersionID]
                JOIN t_StringLanguageVariant slv
                    ON slvv.[StringLanguageVariantID] = slv.[ID]
                    AND slv.[StringLanguageID] = @a_iStringLanguageID
            WHERE vosis.[Active] = 'A'
            AND vosis.[Status] = 'P'
            AND vosis.[IsForeign] = 1
        ) voRecorded
            ON vossi.[StringID] = voRecorded.[StringID]
            AND vossi.[StringLanguageID] = voRecorded.[StringLanguageID]
            AND vossi.[StringVariantID] = voRecorded.[StringVariantID]
            AND vos.[ID] = voRecorded.[RecordedVOScriptID]
    WHERE vossi.[StringLanguageID] = @a_iStringLanguageID
    AND (voRecorded.[StringID] IS NULL OR vossi.[VORequestedOn] > voRecorded.[CompareDate])

    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR
END


------------------------------------------------------------------------
--  Calculate English Line Count of each VO Script's Resource
------------------------------------------------------------------------
UPDATE tr
SET
    [LineCountEnglish] = vEngLineCount.[LineCount],
    [LineCount] = 
        CASE @bForeignStringLanguage 
            WHEN 0 THEN vEngLineCount.[LineCount]
            ELSE 0
        END
FROM #tblResults tr
    JOIN (
        SELECT 
            vos.[ID] AS [VOScriptID], 
            COUNT(*) as [LineCount]
        FROM t_VOScript vos
            JOIN @tStatsInternal vossi
                ON vos.[IsActive] = 1
                AND vos.[ResourceModuleID] = vossi.[ModuleID]
                AND vos.[ResourceResRefID] = vossi.[ResRefID]
                AND vossi.[StringLanguageID] = @iDevStringLanguageID
        GROUP BY vos.[ID]
    ) vEngLineCount
        ON tr.[VOScriptID] = vEngLineCount.[VOScriptID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Calculate the following per VO Script:
--    o Number of Character's Lines (in English)
--    o VO Script Lines Requiring Recording (in English)
--      (excludes lines that are being re-recorded)
--    o VO Script Lines Requiring Re-Recording (in English)
------------------------------------------------------------------------
UPDATE tr
SET
    [CharacterWordCountEnglish] = vLineCount.[WordCount],
    [CharacterLineCountEnglish] = vLineCount.[LineCount],
    [CharacterLineCount] = 
        CASE @bForeignStringLanguage 
            WHEN 0 THEN vLineCount.[LineCount]
            ELSE 0
        END,
    [RecordCount] = 
        CASE @bForeignStringLanguage
            WHEN 0 THEN vLineCount.[RecordLineCount] 
            ELSE 0 
        END,
    [ReRecordCount] = 
        CASE @bForeignStringLanguage
            WHEN 0 THEN vLineCount.[ReRecordLineCount] 
            ELSE 0 
        END
FROM #tblResults tr
    JOIN (
        SELECT 
            vos.[ID] AS [VOScriptID], 
            SUM(vossi.[WordCount]) as [WordCount], 
            COUNT(*) AS [LineCount],
            COUNT(
                CASE 
                    WHEN (vossi.[ReqRecord] = 1 AND vossi.[IsReRecord] = 0) THEN 1 
                    ELSE NULL 
                END) AS [RecordLineCount],
            COUNT(
                CASE vossi.[IsReRecord] WHEN 0 THEN NULL
                    ELSE 1 
                END) AS [ReRecordLineCount]
        FROM t_VOScript vos
            JOIN @tStatsInternal vossi
                ON vos.[IsActive] = 1
                AND vos.[ResourceModuleID] = vossi.[ModuleID]
                AND vos.[ResourceResRefID] = vossi.[ResRefID]
                AND vossi.[StringLanguageID] = @iDevStringLanguageID -- English
            JOIN t_VOScriptLineCharacterInternal voslci
                ON voslci.[SPID] = @@SPID
                AND voslci.[StringID] = vossi.[StringID]
                AND voslci.[CharacterModuleID] = vos.[CharacterModuleID]
                AND voslci.[CharacterResRefID] = vos.[CharacterResRefID]
        GROUP BY vos.[ID]
    ) vLineCount
        ON tr.[VOScriptID] = vLineCount.[VOScriptID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Calculate Foreign Line Counts where applicable
--    o Character's Lines 
--    o Lines Requiring Recording 
--      (excludes lines that are being re-recorded)
--    o Lines Requiring Re-Recording 
------------------------------------------------------------------------
IF (@bForeignStringLanguage = 1)
BEGIN

    -- FOREIGN Resource LineCount per VO Script
    UPDATE tr
    SET
        [LineCount] = vForeignResLineCount.[LineCount]
    FROM #tblResults tr
        JOIN (
            SELECT 
                vos.[ID] AS [VOScriptID], 
                COUNT(*) as [LineCount]
            FROM t_VOScript vos
                JOIN @tStatsInternal vossi
                    ON vos.[IsActive] = 1
                    AND vos.[ResourceModuleID] = vossi.[ModuleID]
                    AND vos.[ResourceResRefID] = vossi.[ResRefID]
                    AND vossi.[StringLanguageID] = @a_iStringLanguageID
            GROUP BY vos.[ID]
        ) vForeignResLineCount
            ON tr.[VOScriptID] = vForeignResLineCount.[VOScriptID]

    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR
    
    
    -- FOREIGN Character Lines per VO Script
    -- FOREIGN Re/Recording Line Counts
    UPDATE tr
    SET
        [CharacterLineCount] = vForeignCharLineCount.[LineCount],
        [RecordCount] = vForeignCharLineCount.[RecordLineCount],
        [ReRecordCount] = vForeignCharLineCount.[ReRecordLineCount] 
    FROM #tblResults tr
        JOIN (
            SELECT 
                vos.[ID] AS [VOScriptID], 
                COUNT(*) AS [LineCount],

                COUNT(
                    CASE 
                        WHEN (vossi.[ReqRecord] = 1 AND vossi.[IsReRecord] = 0) THEN 1 
                        ELSE NULL 
                    END) AS [RecordLineCount],
                COUNT(
                    CASE vossi.[IsReRecord] WHEN 0 THEN NULL
                        ELSE 1 
                    END) AS [ReRecordLineCount]


            FROM t_VOScript vos
                JOIN @tStatsInternal vossi
                    ON vos.[IsActive] = 1
                    AND vos.[ResourceModuleID] = vossi.[ModuleID]
                    AND vos.[ResourceResRefID] = vossi.[ResRefID]
                    AND vossi.[StringLanguageID] = @a_iStringLanguageID
                JOIN t_VOScriptLineCharacterInternal voslci
                    ON voslci.[SPID] = @@SPID
                    AND voslci.[StringID] = vossi.[StringID]
                    AND voslci.[CharacterModuleID] = vos.[CharacterModuleID]
                    AND voslci.[CharacterResRefID] = vos.[CharacterResRefID]
            GROUP BY vos.[ID]
        ) vForeignCharLineCount
            ON tr.[VOScriptID] = vForeignCharLineCount.[VOScriptID]

    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR
END


------------------------------------------------------------------------
--  Return results
------------------------------------------------------------------------
IF @a_bVerbose = 0
BEGIN
    SELECT 
        [VOScriptID], 
        [LineCountEnglish], [LineCount], 
        [CharacterWordCountEnglish], 
        [CharacterLineCountEnglish], [CharacterLineCount], 
        [RecordCount], [ReRecordCount]
    FROM #tblResults 
END
ELSE
BEGIN
    SELECT 
        R.[VOScriptID],
        MRRVR.[Name] AS [ResourceName],
        MRRVR.[Folder] AS [ResourceFolder],
        MRRVC.[Name] AS [CharacterResourceName],
        CH.[Name] AS [CharacterName],
        R.[LineCountEnglish], 
        R.[LineCount], 
        R.[CharacterWordCountEnglish], 
        R.[CharacterLineCountEnglish], 
        R.[CharacterLineCount], 
        R.[RecordCount], 
        R.[ReRecordCount]
    FROM #tblResults R
    JOIN t_VOScript VOS
        ON R.[VOScriptID] = VOS.[ID]
    JOIN t_ModuleResRef MRRR
        ON VOS.[ResourceModuleID] = MRRR.[ModuleID]
        AND VOS.[ResourceResRefID] = MRRR.[ResRefID]
    JOIN t_ModuleResRefVersion MRRVR
        ON MRRR.[CurrentModuleResRefVersionID] = MRRVR.[ID]
    JOIN t_ModuleResRef MRRC
        ON VOS.[CharacterModuleID] = MRRC.[ModuleID]
        AND VOS.[CharacterResRefID] = MRRC.[ResRefID]
    JOIN t_Character CH
        ON MRRC.[CurrentModuleResRefVersionID] = CH.[ModuleResRefVersionID]
    JOIN t_ModuleResRefVersion MRRVC
        ON MRRC.[CurrentModuleResRefVersionID] = MRRVC.[ID]
END

------------------------------------------------------------------------
--  Dump our temp objects
------------------------------------------------------------------------
DROP TABLE #tblResults

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Remove our temp data
------------------------------------------------------------------------
DELETE FROM t_VOScriptLineCharacterInternal
WHERE [SPID] = @@SPID

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

SET NOCOUNT OFF

RETURN 0

------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

SET NOCOUNT OFF

RETURN @iError


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetVOScriptStats]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  Stored Proc: bsp_GetVOScriptStringsRequiringForeignRecording
------------------------------------------------------------------------
--  Owned By: Christopher Christou
--  Created On: November 03, 2008
--  Description: Returns the foreign strings that require recording
--    for a VO Script, and a set of Foreign Languages.
--    
--  Parameters
--    a_iVOScriptID - IN - VOScriptID to look up data for
--       - Current Version of Conversation Resource will be used
--       - Cannot be NULL
--    a_sStringLanguageIDs - IN 
--      Comma delimeted set of StringLanguageIDs that the script data should be retrieved for.
--    a_bIncludeBlankLines - IN 
--      - set to 1 (true) to include blank lines in the count
--      - set to 0 (false) to exclude blank lines in the count
--        
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_GetVOScriptStringsRequiringForeignRecording]
@a_iVOScriptID int,
@a_sStringLanguageIDs varchar(255),
@a_bIncludeBlankLines bit
AS

SET NOCOUNT ON

DECLARE @iError int

DECLARE @tStringLanguageIDs TABLE (
    [ID] int not null
)

------------------------------------------------------------------------
--  Place desired StringLanguageIDs into @tStringLanguageIDs
------------------------------------------------------------------------

-- Wrap @a_sStringLanguageIDs in commas to make parsing easier    
SET @a_sStringLanguageIDs = ',' + @a_sStringLanguageIDs + ','
 
-- Set starting search position
DECLARE @iCommaPos INT
SET @iCommaPos = 1

-- Look through @a_sStringLanguageIDs and make integers of all values between commas 
WHILE @iCommaPos < LEN(@a_sStringLanguageIDs) --Don't include the last comma
BEGIN
    INSERT INTO @tStringLanguageIDs 
    VALUES (SUBSTRING(
        @a_sStringLanguageIDs, 
        @iCommaPos + 1,
        CHARINDEX(',', @a_sStringLanguageIDs, @iCommaPos + 1) - @iCommaPos - 1))

    -- Find the next comma
    SELECT @iCommaPos = CHARINDEX(',', @a_sStringLanguageIDs, @iCommaPos + 1)
END

------------------------------------------------------------------------
--  Map the resource lines to Characters
------------------------------------------------------------------------

-- Then do the mapping
EXEC @iError = [dbo].[bsp_DetermineVOScriptLineCharacters] @a_iVOScriptID, NULL
IF (@iError <> 0) GOTO ON_ERROR

-- Then trim data so that all we have are lines for this VOScript's
-- resource and character.
DELETE voslci
FROM t_VOScriptLineCharacterInternal voslci
WHERE [SPID] = @@SPID
AND NOT EXISTS
    ( SELECT 1
    FROM t_VOScript vos
    WHERE vos.[ID] = @a_iVOScriptID
    AND vos.[ResourceModuleID] = voslci.[ResourceModuleID]
    AND vos.[ResourceResRefID] = voslci.[ResourceResRefID]
    AND vos.[CharacterModuleID] = voslci.[CharacterModuleID]
    AND vos.[CharacterResRefID] = voslci.[CharacterResRefID] )

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Remove lines that should not be recorded from the consideration set.
------------------------------------------------------------------------

EXEC @iError = [dbo].[bsp_AdjustVOScriptLineCharacterInternalForStats]
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Look up the Requires Recording datetimestamp for each of these
--  character strings.  For english this is VORequestOn, and for 
--  foreign, this is ImportedOn.  Store this data locally for now.
------------------------------------------------------------------------
DECLARE @tblStringVORequest TABLE ( 
    [StringID] int, 
    [StringLanguageID] int, 
    [StringVariantID] int, 
    [VORequestOn] datetime NOT NULL,
    [VORecordedOn] datetime NULL)


-- Load Foreign strings (all variants) + ImportedOn dates
INSERT INTO @tblStringVORequest
    ([StringID], [StringLanguageID], 
    [StringVariantID], [VORequestOn])
SELECT slvt.[StringID], slv.[StringLanguageID], slv.[StringVariantID], sis.[ImportedOn]
FROM @tStringLanguageIDs slToUse
    JOIN t_StringLanguageVariant slv
        ON slToUse.[ID] = slv.[StringLanguageID]
    JOIN t_StringLanguageVariantText slvt
        ON slvt.[StringLanguageVariantVersionID] = slv.[CurrentStringLanguageVariantVersionID]
        AND (@a_bIncludeBlankLines = 1 OR slvt.[IsBlank] = 0)
    JOIN t_VOScriptLineCharacterInternal voslci
        ON [SPID] = @@SPID
        AND slvt.[StringID] = voslci.[StringID]
    JOIN t_StringImportSession sis
        ON slvt.[StringImportSessionID] = sis.[ID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

UPDATE voRequest
SET voRequest.[VORecordedOn] = vosis.[CompareDate]
FROM @tblStringVORequest voRequest
    JOIN t_VOScriptInstanceString vosis
        ON voRequest.[StringID] = vosis.[StringID]
        AND vosis.[Active] = 'A'
        AND vosis.[Status] = 'P'
    JOIN t_VOScriptInstance vosi
        ON vosis.[VOScriptInstanceID] = vosi.[ID]
        AND vosi.[VOScriptID] = @a_iVOScriptID
    JOIN t_StringLanguageVariantVersion slvv
        ON vosis.[StringLanguageVariantVersionID] = slvv.[ID]
    JOIN t_StringLanguageVariant slv
        ON slvv.[StringLanguageVariantID] = slv.[ID]
        AND slv.[StringLanguageID] = voRequest.[StringLanguageID]
        AND slv.[StringVariantID] = voRequest.[StringVariantID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Make the Requires Recording Comparison
------------------------------------------------------------------------

SELECT 
@a_iVOScriptID as [VOScriptID],
voslci.[ResourceModuleResRefVersionID] as [ModuleResRefVersionID],
voRequest.[StringID],
voRequest.[StringLanguageID],
voRequest.[StringVariantID]
FROM @tblStringVORequest voRequest
    JOIN t_VOScriptLineCharacterInternal voslci
        ON voslci.[SPID] = @@SPID
        AND voRequest.[StringID] = voslci.[StringID]
WHERE
(
    voRequest.[VORecordedOn] IS NULL OR 
    voRequest.[VORequestOn] > voRequest.[VORecordedOn]
)

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

-- Remove the temp data 
DELETE FROM t_VOScriptLineCharacterInternal WHERE [SPID] = @@SPID

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

SET NOCOUNT OFF

return 0
------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

SET NOCOUNT OFF

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetVOScriptStringsRequiringForeignRecording]  TO [bw_db_read]
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetVOScriptStringsRequiringForeignRecording]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  Stored Proc: bsp_GetVOScriptStringsRequiringRecording
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: February 14, 2007
--  Description: Returns the strings that require recording
--    for a script.
--    
--  Parameters
--    a_iVOScriptID - IN - VOScriptID to look up data for
--    a_iResourceModuleResRefVersionID - IN - Version of resource 
--      to look up data on.  (if Language is not English, this does not
--      matter).  Can be set to NULL if the version is not important,
--      and the caller wishes to use the current live version.
--    a_iStringLanguageID - IN 
--      The Language that the script data should be retrieved for.
--    a_bIncludeBlankLines - IN 
--      - set to 1 (true) to include blank lines in the count
--      - set to 0 (false) to exclude blank lines in the count
--        
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_GetVOScriptStringsRequiringRecording]
@a_iVOScriptID int,
@a_iResourceModuleResRefVersionID int,
@a_iStringLanguageID int, 
@a_bIncludeBlankLines bit
AS

SET NOCOUNT ON

DECLARE @iError int

------------------------------------------------------------------------
--  If a resource version is not given, look up the current version
------------------------------------------------------------------------

IF (@a_iResourceModuleResRefVersionID IS NULL)
BEGIN
    SELECT @a_iResourceModuleResRefVersionID = mr.[CurrentModuleResRefVersionID]
    FROM t_VOScript s
        JOIN t_ModuleResRef mr
            ON s.[ResourceModuleID] = mr.[ModuleID]
            AND s.[ResourceResRefID] = mr.[ResRefID]
    WHERE s.[ID] = @a_iVOScriptID
            
    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR
END

------------------------------------------------------------------------
--  Map the resource lines to Characters
------------------------------------------------------------------------

-- Then do the mapping
EXEC @iError = [dbo].[bsp_DetermineVOScriptLineCharacters] @a_iVOScriptID, @a_iResourceModuleResRefVersionID
IF (@iError <> 0) GOTO ON_ERROR

-- Then trim data so that all we have are lines for this VOScript's
-- resource and character.
DELETE voslci
FROM t_VOScriptLineCharacterInternal voslci
WHERE [SPID] = @@SPID
AND NOT EXISTS
    ( SELECT 1
    FROM t_VOScript vos
    WHERE vos.[ID] = @a_iVOScriptID
    AND vos.[ResourceModuleID] = voslci.[ResourceModuleID]
    AND vos.[ResourceResRefID] = voslci.[ResourceResRefID]
    AND vos.[CharacterModuleID] = voslci.[CharacterModuleID]
    AND vos.[CharacterResRefID] = voslci.[CharacterResRefID] )

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Remove lines that should not be recorded from the consideration set.
------------------------------------------------------------------------

EXEC @iError = [dbo].[bsp_AdjustVOScriptLineCharacterInternalForStats]
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Look up the Requires Recording datetimestamp for each of these
--  character strings.  For english this is VORequestOn, and for 
--  foreign, this is ImportedOn.  Store this data locally for now.
------------------------------------------------------------------------
DECLARE @tblStringVORequest TABLE ( 
    [StringID] int, 
    [StringLanguageID] int, 
    [StringVariantID] int, 
    [VORequestOn] datetime NOT NULL,
    [VORecordedOn] datetime NULL)

IF (@a_iStringLanguageID = dbo.udf_GetProjectStringLanguageID())
BEGIN
    -- Load English strings + VORequestOn dates
    INSERT INTO @tblStringVORequest
        ([StringID], [StringLanguageID], 
        [StringVariantID], [VORequestOn])
    SELECT st.[StringID], 1, 1, st.[VORequestOn]
    FROM t_StringText st
        JOIN t_VOScriptLineCharacterInternal voslci
            ON [SPID] = @@SPID
            AND st.[StringID] = voslci.[StringID]
            AND st.[ModuleResRefVersionID] = voslci.[ResourceModuleResRefVersionID]
            AND st.[StringLanguageVariantID] = 1
            AND (@a_bIncludeBlankLines = 1 OR st.[WordCount] > 0)

    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR

    UPDATE voRequest
    SET voRequest.[VORecordedOn] = vosis.[CompareDate]
    FROM @tblStringVORequest voRequest
        JOIN t_VOScriptInstanceString vosis
            ON voRequest.[StringID] = vosis.[StringID]
            AND vosis.[Active] = 'A'
            AND vosis.[Status] = 'P'
            AND vosis.[IsForeign] = 0
        JOIN t_VOScriptInstance vosi
            ON vosis.[VOScriptInstanceID] = vosi.[ID]
            AND vosi.[VOScriptID] = @a_iVOScriptID

    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR
            
END
ELSE
BEGIN 
    -- Load Foreign strings (all variants) + ImportedOn dates
    INSERT INTO @tblStringVORequest
        ([StringID], [StringLanguageID], 
        [StringVariantID], [VORequestOn])
    SELECT slvt.[StringID], slv.[StringLanguageID], slv.[StringVariantID], sis.[ImportedOn]
    FROM t_StringLanguageVariantText slvt
        JOIN t_StringImportSession sis
            ON slvt.[StringImportSessionID] = sis.[ID]
            AND (@a_bIncludeBlankLines = 1 OR slvt.[IsBlank] = 0)
        JOIN t_StringLanguageVariant slv
            ON slvt.[StringLanguageVariantVersionID] = slv.[CurrentStringLanguageVariantVersionID]
            AND slv.[StringLanguageID] = @a_iStringLanguageID
        JOIN t_VOScriptLineCharacterInternal voslci
            ON [SPID] = @@SPID
            AND slvt.[StringID] = voslci.[StringID]
            
    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR

    UPDATE voRequest
    SET voRequest.[VORecordedOn] = vosis.[CompareDate]
    FROM @tblStringVORequest voRequest
        JOIN t_VOScriptInstanceString vosis
            ON voRequest.[StringID] = vosis.[StringID]
            AND vosis.[Active] = 'A'
            AND vosis.[Status] = 'P'
        JOIN t_VOScriptInstance vosi
            ON vosis.[VOScriptInstanceID] = vosi.[ID]
            AND vosi.[VOScriptID] = @a_iVOScriptID
        JOIN t_StringLanguageVariantVersion slvv
            ON vosis.[StringLanguageVariantVersionID] = slvv.[ID]
        JOIN t_StringLanguageVariant slv
            ON slvv.[StringLanguageVariantID] = slv.[ID]
            AND slv.[StringLanguageID] = voRequest.[StringLanguageID]
            AND slv.[StringVariantID] = voRequest.[StringVariantID]

    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR
END

------------------------------------------------------------------------
--  Make the Requires Recording Comparison
------------------------------------------------------------------------

SELECT 
@a_iVOScriptID as [VOScriptID],
voslci.[ResourceModuleResRefVersionID] as [ModuleResRefVersionID],
voRequest.[StringID],
voRequest.[StringLanguageID],
voRequest.[StringVariantID]
FROM @tblStringVORequest voRequest
    JOIN t_VOScriptLineCharacterInternal voslci
        ON voslci.[SPID] = @@SPID
        AND voRequest.[StringID] = voslci.[StringID]
WHERE
(
    voRequest.[VORecordedOn] IS NULL OR 
    voRequest.[VORequestOn] > voRequest.[VORecordedOn]
)

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

-- Remove the temp data 
DELETE FROM t_VOScriptLineCharacterInternal WHERE [SPID] = @@SPID

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

SET NOCOUNT OFF

return 0
------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

SET NOCOUNT OFF

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_GetVOScriptStringsRequiringRecording]  TO [bw_db_write]
GO



SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


------------------------------------------------------------------------
--  STORED PROCEDURE: bsp_InsertStringLanguageVariantText
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: September 21, 2006
--  Description: Insert a new Foreign Language String.
--  Used during Import Sessions.
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_InsertStringLanguageVariantText]
@a_iStringLanguageVariantVersionID int, 
@a_iStringID int,
@a_wsText ntext,
@a_iStringImportSessionID int
AS

DECLARE @iError int

BEGIN TRANSACTION tranInsertStringLangVarText


DECLARE @iPrevStringLanguageVariantVersionID int

SET @iPrevStringLanguageVariantVersionID = NULL

SELECT @iPrevStringLanguageVariantVersionID = slvv.PreviousStringLanguageVariantVersionID
FROM t_StringLanguageVariantVersion slvv
WHERE slvv.[ID] = @a_iStringLanguageVariantVersionID

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

IF (@iPrevStringLanguageVariantVersionID IS NOT NULL)
BEGIN

    -- Check the Previous Text.  If it matches @a_wsText, then do not add it.
    IF EXISTS
    (
        SELECT 1
        FROM t_StringLanguageVariantText slvt
        WHERE slvt.[StringLanguageVariantVersionID] = @iPrevStringLanguageVariantVersionID
        AND slvt.[StringID] = @a_iStringID
        AND [dbo].[udf_nTextEquals] ( @a_wsText, slvt.[Text] ) = 1
    )
    BEGIN
        GOTO ON_AFTER_INSERT
    END

END

-- Insert the string.  Let the keys do any validation necessary
INSERT INTO t_StringLanguageVariantText 
    ([StringLanguageVariantVersionID], [StringID], 
    [Text], [StringImportSessionID], 
    [IsBlank])
VALUES (
    @a_iStringLanguageVariantVersionID, @a_iStringID, 
    @a_wsText, @a_iStringImportSessionID, 
    CASE 
        WHEN @a_wsText LIKE '' THEN 1
        ELSE 0 END
    )

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

---------------------------------------------------------------------
ON_AFTER_INSERT:
---------------------------------------------------------------------

COMMIT TRANSACTION tranInsertStringLangVarText

return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------

ROLLBACK TRANSACTION

return @iError


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_InsertStringLanguageVariantText]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO


CREATE PROCEDURE [dbo].[bsp_LockResource]
    @a_iModuleID INT,
    @a_iRefRefID INT,
    @a_bLock BIT
AS

DECLARE @iError int
, @iLock int
, @iRowCount int

BEGIN TRANSACTION  tran_bsp_LockResource

IF @a_bLock = 1
 BEGIN
  SET @iLock = -1
 END
ELSE
 BEGIN
  SET @iLock = 0
 END

-- Update the properties on the module res ref
UPDATE t_ModuleResRefVersion
SET [State] = @iLock
FROM t_ModuleResRef mrr
WHERE [ID] = mrr.ScratchModuleResRefVersionID
AND [State] != @iLock
AND mrr.moduleid = @a_iModuleID and mrr.resrefid = @a_iRefRefID

SELECT @iError = @@ERROR, @iRowCount = @@ROWCOUNT

IF @iRowCount = 0 AND @iError = 0 SET @iError = -1
IF @iError <> 0 GOTO ON_ERROR

COMMIT TRANSACTION  tran_bsp_LockResource
RETURN 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
ROLLBACK TRANSACTION  tran_bsp_LockResource
RETURN @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_LockResource]  TO [bw_db_lock]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


------------------------------------------------------------------------
--  STORED PROCEDURE: bsp_ProcessPendingStringExportHistoryStatus
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: November 16, 2006
--  Description: 
--  
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_ProcessPendingStringExportHistoryStatus]
AS
BEGIN
    DECLARE @iError int

    BEGIN TRANSACTION tranProcessPendingExportStatus

    ------------------------------------------------------------------------
    --  Take all Pending New (N) records, and set them as the 
    --   Active records for that StringID.  Any other record currently
    --   marked Active must become flagged as Inactive.
    ------------------------------------------------------------------------

    -- mark peviously current records as inactive
    UPDATE eh
    SET eh.[Status] = 'I'
    FROM t_StringExportHistory eh
        JOIN t_StringExportHistory ehNew
            ON eh.[StringID] = ehNew.[StringID]
            AND ehNew.[Status] = 'N'
            AND eh.[Status] = 'A'

    SELECT @iError = @@ERROR
    if (@iError <> 0) GOTO ON_ERROR

    -- mark new records as Active and record the effective comparedate
    UPDATE eh
    SET eh.[Status] = 'A', 
        eh.[CompareDate] = st.[LastMinorUpdateOn]
    FROM t_StringExportHistory eh
    JOIN t_StringText st
        ON st.[StringID] = eh.[StringID] 
        AND st.[ModuleResRefVersionID] = eh.[ModuleResRefVersionID]
    WHERE eh.[Status] = 'N'

    SELECT @iError = @@ERROR
    if (@iError <> 0) GOTO ON_ERROR

    ------------------------------------------------------------------------
    --  Take all Pending Delete (X) records, and ensure that there is
    --   an Active record for that StringID.  If not, try to find and set 
    --   one from Inactive (where applicable).
    ------------------------------------------------------------------------

    UPDATE eh
    SET eh.[Status] = 'A'
    FROM t_StringExportHistory eh
        JOIN
        (
            SELECT ehMaxInternal.[StringID], MAX(ehMaxInternal.[StringExportLabelID]) as [MaxLabelID]
            FROM t_StringExportHistory ehMaxInternal
            WHERE ehMaxInternal.[Status] = 'I'
            GROUP BY ehMaxInternal.[StringID]
        ) ehMax
            ON eh.[StringID] = ehMax.[StringID]
            AND eh.[StringExportLabelID] = ehMax.[MaxLabelID]
        WHERE eh.[StringID] IN
        (
            SELECT ehX.[StringID] 
            FROM t_StringExportHistory ehX
            WHERE ehX.[Status] = 'X'
            AND ehX.[StringID] NOT IN
            (
                SELECT ehA.[StringID]
                FROM t_StringExportHistory ehA
                WHERE ehA.[StringID] = ehX.[StringID]
                AND ehA.[Status] = 'A'
            )
        )

    SELECT @iError = @@ERROR
    if (@iError <> 0) GOTO ON_ERROR


    UPDATE eh
    SET eh.[Status] = 'D'
    FROM t_StringExportHistory eh
    WHERE eh.[Status] = 'X'

    SELECT @iError = @@ERROR
    if (@iError <> 0) GOTO ON_ERROR

    COMMIT TRANSACTION tranProcessPendingExportStatus

    return 0
    ---------------------------------------------------------------------
    ON_ERROR:
    ---------------------------------------------------------------------

    ROLLBACK TRANSACTION

    return @iError
END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_ProcessPendingStringExportHistoryStatus]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO


------------------------------------------------------------------------
--  STORED PROCEDURE: bsp_ProcessStringImportData
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: September 21, 2006
--  Description: After the Import System adds import materials 
--  into the database, this procedure does all the data
--  processing so that everything is ready to be accepted.
--  PRECONDITIONS: 
--   - StringLanguageVariantVersions have been set up for all 
--     LanguageVariants receiving imported data.  The imported
--     data is also residing in these new versions.
------------------------------------------------------------------------
CREATE  PROCEDURE [dbo].[bsp_ProcessStringImportData]
@a_iStringImportSessionID int,
@a_bExcludeNonExportedStrings bit
AS

DECLARE @iError int

BEGIN TRANSACTION tranProcessStringImportData

IF (@a_bExcludeNonExportedStrings = 1) 
BEGIN
    ------------------------------------------------------------------------
    --  Determine if there are any import strings that have never been
    --    exported.  Delete them.  We only work on scratch versions.
    ------------------------------------------------------------------------
    DELETE lvt
    FROM t_StringLanguageVariantText lvt
        JOIN t_StringLanguageVariant lv
            ON lv.[ScratchStringLanguageVariantVersionID] = lvt.[StringLanguageVariantVersionID]
        LEFT OUTER JOIN t_StringExportHistory eh
            ON eh.[StringID] = lvt.[StringID]
            AND (eh.[Status] = 'A' OR eh.[Status] = 'I')
    WHERE lvt.[StringImportSessionID] = @a_iStringImportSessionID
    AND eh.[StringID] IS NULL
    
    SELECT @iError = @@ERROR
    if (@iError <> 0) GOTO ON_ERROR
END

------------------------------------------------------------------------
--  Delete any import string data where there is no change in 
--    translation from the last one
------------------------------------------------------------------------
DELETE lvt
FROM t_StringLanguageVariantText lvt
    JOIN t_StringLanguageVariant lv
        ON lvt.[StringLanguageVariantVersionID] = lv.[ScratchStringLanguageVariantVersionID] -- we want to work with scratch data only
    JOIN t_StringLanguageVariantVersion lvv
        ON lvt.[StringLanguageVariantVersionID] = lvv.[ID] -- use this to look at the previous import data
    JOIN t_StringLanguageVariantText lvtPrevious
        ON lvv.[PreviousStringLanguageVariantVersionID] = lvtPrevious.[StringLanguageVariantVersionID]
        AND lvt.[StringID] = lvtPrevious.[StringID]
        AND [dbo].[udf_nTextEquals](lvt.[Text], lvtPrevious.[Text]) = 1
WHERE lvt.[StringImportSessionID] = @a_iStringImportSessionID -- we want to work with this session's work

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  After cutting data from StringLanguageVariantVersions, there
--    might be some empty ones sitting around.  Remove these.
------------------------------------------------------------------------
-- First, unset the Scratch Version Pointers
UPDATE lv 
SET lv.[ScratchStringLanguageVariantVersionID] = NULL
FROM t_StringLanguageVariant lv
    JOIN t_StringLanguageVariantVersion lvv
        ON lv.[ScratchStringLanguageVariantVersionID] = lvv.[ID]
        AND lvv.[StringImportSessionID] = @a_iStringImportSessionID
    LEFT OUTER JOIN t_StringLanguageVariantText lvt
        ON lvv.[ID] = lvt.[StringLanguageVariantVersionID]
WHERE lvt.[StringLanguageVariantVersionID] IS NULL

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

-- Next, remove the scratch Versions
DELETE lvv
FROM t_StringLanguageVariantVersion lvv
    LEFT OUTER JOIN t_StringLanguageVariantText lvt
        ON lvv.[ID] = lvt.[StringLanguageVariantVersionID]
WHERE lvv.[StringImportSessionID] = @a_iStringImportSessionID
AND lvv.[Status] = 'S'
AND lvt.[StringLanguageVariantVersionID] IS NULL

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  The Scratch LanguageVariantVersions that we have added data to
--    probably will not have all strings in them, we need to add
--    these from past versions.
------------------------------------------------------------------------
INSERT INTO t_StringLanguageVariantText 
    ([StringLanguageVariantVersionID], [StringID],
    [Text], [StringImportSessionID], [IsBlank])
SELECT lvv.[ID], lvtPrevious.[StringID], 
lvtPrevious.[Text], lvtPrevious.[StringImportSessionID], lvtPrevious.[IsBlank]
FROM t_StringLanguageVariant lv
    JOIN t_StringLanguageVariantVersion lvv
        ON lv.[ScratchStringLanguageVariantVersionID] = lvv.[ID] -- we only want scratch versions
        AND lvv.[StringImportSessionID] = @a_iStringImportSessionID -- and scratch versions dealing with our import session
    JOIN t_StringLanguageVariantText lvtPrevious
        ON lvv.[PreviousStringLanguageVariantVersionID] = lvtPrevious.[StringLanguageVariantVersionID]
    LEFT OUTER JOIN t_StringLanguageVariantText lvt
        ON lvt.[StringLanguageVariantVersionID] = lvv.[ID]
        AND lvt.[StringID] = lvtPrevious.[StringID]
WHERE lvt.[StringID] IS NULL

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  The Scratch LanguageVariantVersions that belong to our 
--    ImportSession are ready to become the current versions.
--    Adjust away!
-- Steps:
--  1. Set the 'C'urrent status of affected Versions to 'H' istory
--  2. Set the 'S'cratch versions to 'C'urrent
--  3. Set the CurrentVersions to point to the ScratchVersions
--  4. Clear the ScratchVersions
------------------------------------------------------------------------
-- to make this easier, lets make a temp list of the affected StringLanguageVariantIDs

DECLARE @tblChangedLanguageVariant TABLE
(
    [ID] int NOT NULL
)

INSERT INTO @tblChangedLanguageVariant ([ID])
SELECT lv.[ID]
FROM t_StringLanguageVariant lv
    JOIN t_StringLanguageVariantVersion lvv
        ON lv.[ScratchStringLanguageVariantVersionID] = lvv.[ID]
        AND lvv.[StringImportSessionID] = @a_iStringImportSessionID

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

--  1. Set the 'C'urrent status of affected Versions to 'H' istory
UPDATE lvv
SET [Status] = 'H'
FROM t_StringLanguageVariantVersion lvv
    JOIN @tblChangedLanguageVariant clv
        ON lvv.[StringLanguageVariantID] = clv.[ID]
        AND lvv.[Status] = 'C'

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

--  2. Set the 'S'cratch versions to 'C'urrent
UPDATE lvv
SET [Status] = 'C'
FROM t_StringLanguageVariantVersion lvv
    JOIN @tblChangedLanguageVariant clv
        ON lvv.[StringLanguageVariantID] = clv.[ID]
        AND lvv.[Status] = 'S'

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

--  3. Set the CurrentVersions to point to the ScratchVersions
--  & 4. Clear the ScratchVersions
UPDATE lv
SET 
    [CurrentStringLanguageVariantVersionID] = [ScratchStringLanguageVariantVersionID],
    [ScratchStringLanguageVariantVersionID] = NULL -- do this one second
FROM t_StringLanguageVariant lv
    JOIN @tblChangedLanguageVariant clv
        ON lv.[ID] = clv.[ID]

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

COMMIT TRANSACTION tranProcessStringImportData

return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------

ROLLBACK TRANSACTION

return @iError


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_ProcessStringImportData]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  Stored Proc: bsp_RerecordVOScript
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: February 21, 2007
--  Description: Marks a string as requiring re-recording.
--    
--  NOTE: String must have been recorded previously (and is not 
--    unprinted).  Otherwise nothing happens.
--
--  Parameters
--  @a_iVOScriptID - Script to Re-Record.  When re-recording a single
--    string, it is still necessary to set the VOScript
--  @a_iStringLanguageID - Language that the VO Script is being 
--    re-recorded in.  If InstanceStringID is specified, this value
--    must match.
--  @a_iVOScriptInstanceStringID - Set as follows:
--    o NULL when re-recording a whole VO Script is wanted.
--    o InstanceStringID when re-recording a single string is wanted.
--    NOTE: String must be presently 'A'ctive.
--  @a_sComment - User comment to associate with the ReRecord action
--
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_RerecordVOScript]
@a_iVOScriptID int,
@a_iStringLanguageID int,
@a_iVOScriptInstanceStringID int,
@a_sComment nText
AS

SET NOCOUNT ON

DECLARE @iError int

BEGIN TRANSACTION tranRerecordVOScript

------------------------------------------------------------------------
--  Look up the affected VOScriptInstanceString records, and what 
--    their corresponding VORequestOn/ImportOn values are
------------------------------------------------------------------------

DECLARE @tblVOStringRequest TABLE
( [VOScriptInstanceStringID] int NOT NULL,
  [VORequestOn] datetime NOT NULL )
  
INSERT INTO @tblVOStringRequest
([VOScriptInstanceStringID], [VORequestOn])
SELECT 
vosis.[ID] as [VOScriptInstanceStringID],
CASE vosis.[IsForeign]
WHEN 0 THEN st.[VORequestOn]
WHEN 1 THEN sis.[ImportedOn]
END AS [VORequestOn]
FROM t_VOScriptInstance vosi
    JOIN t_VOScriptInstanceString vosis
        -- Filter the VO Script of interest,
        -- and the active lines from these VO Scripts.
        -- Also filter the string, where applicable.
        -- Also filter the Language of interest
        ON vosi.[ID] = vosis.[VOScriptInstanceID]
        AND vosi.[VOScriptID] = @a_iVOScriptID
        AND vosi.[StringLanguageID] = @a_iStringLanguageID
        AND vosis.[Active] = 'A'
        AND (@a_iVOScriptInstanceStringID IS NULL OR vosis.[ID] = @a_iVOScriptInstanceStringID)
    LEFT OUTER JOIN t_StringText st
        ON vosis.[IsForeign] = 0
        AND vosis.[StringID] = st.[StringID]
        AND vosis.[ModuleResRefVersionID] = st.[ModuleResRefVersionID]
        AND vosis.[StringLanguageVariantID] = st.[StringLanguageVariantID]
    LEFT OUTER JOIN t_StringLanguageVariantText slvt
        ON vosis.[IsForeign] = 1
        AND vosis.[StringID] = slvt.[StringID]
        AND vosis.[StringLanguageVariantVersionID] = slvt.[StringLanguageVariantVersionID]
    LEFT OUTER JOIN t_StringImportSession sis
        ON slvt.[StringImportSessionID] = sis.[ID]  

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  Update the CompareDate on the records of interest
------------------------------------------------------------------------

UPDATE vosis
SET [CompareDate] = DATEADD(ms, -5, tvoReq.[VORequestOn])
FROM @tblVOStringRequest tvoReq
    JOIN t_VOScriptInstanceString vosis
        ON tvoReq.[VOScriptInstanceStringID] = vosis.[ID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  Add new InstanceStringStatus records
------------------------------------------------------------------------

INSERT INTO t_VOScriptInstanceStringStatus
([VOScriptInstanceStringID], [Active], [Action], 
[CompareDate], [Revision], [Comment])
SELECT vosis.[ID], 'A', 'R', 
vosis.[CompareDate], vosis.[Revision], @a_sComment
FROM @tblVOStringRequest tvoReq
    JOIN t_VOScriptInstanceString vosis
        ON tvoReq.[VOScriptInstanceStringID] = vosis.[ID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

COMMIT TRANSACTION tranRerecordVOScript

SET NOCOUNT OFF

return 0
------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

ROLLBACK TRANSACTION

SET NOCOUNT OFF

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_RerecordVOScript]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE PROCEDURE [dbo].[bsp_RestoreResourceVersion]
@a_iVersionID int
AS
declare @iNewVersionID int
declare @iError int

set @iError = 0

-- Start the main transaction 
BEGIN TRANSACTION tran_bsp_RestoreResourceVersion

-- If the current version is null then we are restoring a deleted resource
-- We need to set the current version first to put it active again

UPDATE t_ModuleResRefVersion
SET Status = 'C'
FROM t_ModuleResRef mrr
WHERE t_ModuleResRefVersion.ID = @a_iVersionID
AND mrr.moduleid = t_ModuleResRefVersion.moduleid
and mrr.resrefid = t_ModuleResRefVersion.resrefid
and mrr.CurrentModuleResRefVersionID IS NULL
if (@@ERROR <> 0) GOTO ON_ERROR

UPDATE t_ModuleResRef
SET CurrentModuleResRefVersionID = @a_iVersionID
FROM t_ModuleResRefVersion mrrv
WHERE mrrv.id = @a_iVersionID
and mrrv.moduleid = t_ModuleResRef.moduleid
and mrrv.resrefid = t_ModuleResRef.resrefid
and t_ModuleResRef.CurrentModuleResRefVersionID IS NULL
if (@@ERROR <> 0) GOTO ON_ERROR

exec @iError = dbo.bsp_CheckOutResource NULL, NULL, @a_iVersionID, @iNewVersionID OUTPUT
if (@iError <> 0) GOTO ON_ERROR

COMMIT TRANSACTION tran_bsp_RestoreResourceVersion
return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
if (@iError = 0)
  set @iError = @@ERROR
ROLLBACK TRANSACTION 
return @iError



GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_RestoreResourceVersion]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO


------------------------------------------------------------------------
--  Stored Proc: bsp_SetStringReTranslationState
------------------------------------------------------------------------
--  Owned By: Andy W. Desplenter
--  Created On: 2009 July 20 
--  Description: Adjusts the CompareDate for a specific String ID's 
--  export history to mark it as either requiring a new export or not.
--
--  Parameters
--    a_iStringID - String ID to adjust
--    a_cAction - Set as follows:
--      S - Set for retranslate, 
--      N - set for DO NOT retranslate, 
--      U - Unset, restore original CompareDate from t_StringText
--    a_sComment - User comment to associate with the ReTranslate action
--
-- NOTE: RAISERRORs are commented out because they obscure the return
-- code in the current implementation of the eclipse framework.
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_SetStringReTranslationState]
    @a_iStringID INT,
    @a_cAction   CHAR,
    @a_sComment  NTEXT
AS
BEGIN
    SET NOCOUNT ON
    
    DECLARE @iError INT
    DECLARE @iRowCt INT
    DECLARE @iSEHID INT
    DECLARE @iMRRVID INT
    DECLARE @dtOldCompareDate DATETIME
    DECLARE @dtNewCompareDate DATETIME
    
    BEGIN TRANSACTION tran_SetReTranslate
    
    -- verify action is one of the supported values
    IF ( @a_cAction NOT IN ( 'N', 'S', 'U' ))
    BEGIN 
        SET @iError = -50002 
        -- RAISERROR ('ERROR: bsp_SetStringReTranslationState: Action must be one of N, U or S', 16, -1)
        GOTO ON_ERROR 
    END
    
    -- verify comment is not null
    IF (@a_sComment IS NULL) 
    BEGIN 
        SET @iError = -50003 
        -- RAISERROR ('ERROR: bsp_SetStringReTranslationState: COMMENT cannot be NULL', 16, -1)
        GOTO ON_ERROR 
    END

    ------------------------------------------------------------------------
    --  Find current StringExportHistory and its CompareDate
    ------------------------------------------------------------------------
    SELECT 
        @iSEHID = seh.[ID],
        @dtOldCompareDate = seh.[CompareDate],
        @iMRRVID = seh.[ModuleResRefVersionID]
    FROM  [dbo].[t_StringExportHistory] seh
    WHERE seh.[StringID] = @a_iStringID
    AND   seh.[Status] = 'A'

    SELECT @iError = @@ERROR, @iRowCt = @@ROWCOUNT
    IF (@iError <> 0) GOTO ON_ERROR
    IF (@iRowCt = 0) 
    BEGIN 
        SET @iError = -50000 
        -- RAISERROR ('ERROR: bsp_SetStringReTranslationState: No export history found to modify', 16, -1)
        GOTO ON_ERROR 
    END
    
    ------------------------------------------------------------------------
    --  Determine new Compare date based upon select action
    ------------------------------------------------------------------------
    IF ( @a_cAction = 'N' ) -- DO NOT retranslate
    BEGIN
        -- Set for DO NOT ReTranslate equates to fudging the CompareDate to 
        -- look like the translation is newer than anything in t_StringText
        SELECT @dtNewCompareDate = GetDate()
    END
    ELSE
    BEGIN
        IF ( @a_cAction = 'S' )
        BEGIN
            -- Set for ReTranslation equates to fudging the CompareDate to look like there 
            -- is a newer change in t_StringText that needs translation
            -- Uses [LastMajorUpdateOn] to force export whether or not minor updates 
            -- are included in the next export.
            SELECT @dtNewCompareDate = DateAdd( ss, -5, [LastMajorUpdateOn] )
            FROM t_StringText stExported
            WHERE stExported.[ModuleResRefVersionID] = @iMRRVID
            AND stExported.[StringID] = @a_iStringID
            AND stExported.[StringLanguageVariantID] = 1

            SELECT @iError = @@ERROR, @iRowCt = @@ROWCOUNT
            IF (@iError <> 0) GOTO ON_ERROR
            -- sanity check that a result was returned when getting UpdateOn from t_StringText
            IF (@iRowCt <> 1) 
            BEGIN 
                SET @iError = -50004 
                -- RAISERROR ('ERROR: bsp_SetStringReTranslationState: Failed to get original UpdateOn date', 16, -1)
                GOTO ON_ERROR 
            END
        END
        ELSE
        BEGIN
            IF ( @a_cAction = 'U' )
            BEGIN
                -- Unset Retranslate equates to just re-using the original compare date
                -- get original CompareDate from the relevant MRRV and String in t_StringText
                SELECT @dtNewCompareDate = [LastMinorUpdateOn]
                FROM t_StringText stExported
                WHERE stExported.[ModuleResRefVersionID] = @iMRRVID
                AND stExported.[StringID] = @a_iStringID
                AND stExported.[StringLanguageVariantID] = 1

                SELECT @iError = @@ERROR, @iRowCt = @@ROWCOUNT
                IF (@iError <> 0) GOTO ON_ERROR
                -- sanity check that a result was returned when getting UpdateOn from t_StringText
                IF (@iRowCt <> 1) 
                BEGIN 
                    SET @iError = -50004 
                    -- RAISERROR ('ERROR: bsp_SetStringReTranslationState: Failed to get original UpdateOn date', 16, -1)
                    GOTO ON_ERROR 
                END
            END
            ELSE -- redundant, but here for completeness with regard to future expansion
            BEGIN 
                SET @iError = -50002 
                -- RAISERROR ('ERROR: bsp_SetStringReTranslationState: Action must be one of N, U or S', 16, -1)
                GOTO ON_ERROR 
            END
        END
    END

    ------------------------------------------------------------------------
    --  Add new Log entry for export history change
    ------------------------------------------------------------------------
    INSERT INTO [t_StringExportHistoryAdjustmentLog]
    ( [StringExportHistoryID], [Action], [OldCompareDate], [NewCompareDate], [Comment] )
    VALUES
    ( @iSEHID, @a_cAction, @dtOldCompareDate, @dtNewCompareDate, @a_sComment )
    
    SELECT @iError = @@ERROR, @iRowCt = @@ROWCOUNT
    IF (@iError <> 0) GOTO ON_ERROR
    
    ------------------------------------------------------------------------
    --  Apply export history change
    ------------------------------------------------------------------------
    UPDATE [t_StringExportHistory]
    SET [CompareDate] = @dtNewCompareDate
    WHERE [ID] = @iSEHID
    AND [CompareDate] = @dtOldCompareDate
    AND [Status] = 'A'
    
    SELECT @iError = @@ERROR, @iRowCt = @@ROWCOUNT
    IF (@iError <> 0) GOTO ON_ERROR
    IF (@iRowCt <> 1) 
    BEGIN 
        SET @iError = -50001 
        -- RAISERROR ('ERROR: bsp_SetStringReTranslationState: Failed to adjust history record', 16, -1)
        GOTO ON_ERROR 
    END

    COMMIT TRANSACTION tran_SetReTranslate
    SET NOCOUNT OFF
    RETURN 0
    
    ------------------------------------------------------------------------
    ON_ERROR:
    ------------------------------------------------------------------------
    ROLLBACK TRANSACTION
    SET NOCOUNT OFF
    RETURN @iError
END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_SetStringReTranslationState]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO



------------------------------------------------------------------------
--  STORED PROCEDURE: bsp_UndoStringImportSession
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: September 22, 2006
--  Description: Undoes an Import Session
--  If the ImportSession is not Current, Error is returned.
--  Non-Current Sessions cannot be undone because it messes up the 
--  logic when you undo current sessions.
--  If the ImportSession is Current, a new version of all affected
--  LanguageVariants will be created, using their previous text 
--  versions.
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_UndoStringImportSession]
@a_iStringImportSessionID int
AS

DECLARE @iError int

BEGIN TRANSACTION tranUndoStringImportSession

------------------------------------------------------------------------
--  Check if this ImportSession is Current.  If it's not, return error
------------------------------------------------------------------------
IF NOT EXISTS (
SELECT 1
FROM t_StringImportSession
WHERE [ID] = @a_iStringImportSessionID
AND [Status] = 'C'
)
BEGIN 
    SET @iError = -1
    GOTO ON_ERROR
END

------------------------------------------------------------------------
-- Make a list of the LanguageVariants that are affected by this 
-- Import Session.
------------------------------------------------------------------------
DECLARE @tblChangedLanguageVariant TABLE
(
    [ID] int NOT NULL,
    [PreviousStringLanguageVariantVersionID] int NULL
)

INSERT INTO @tblChangedLanguageVariant ([ID], [PreviousStringLanguageVariantVersionID])
SELECT lv.[ID], lvv.[PreviousStringLanguageVariantVersionID]
FROM t_StringLanguageVariant lv
    JOIN t_StringLanguageVariantVersion lvv
        ON lv.[CurrentStringLanguageVariantVersionID] = lvv.[ID]
        AND lvv.[StringImportSessionID] = @a_iStringImportSessionID

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
-- Determine if any of these LanguageVariants currently have a scratch
-- Version.  If so we cannot proceed and must error out.
------------------------------------------------------------------------
IF EXISTS (
SELECT 1 
FROM t_StringLanguageVariant lv
    JOIN @tblChangedLanguageVariant clv
        ON lv.[ID] = clv.[ID]
WHERE lv.[ScratchStringLanguageVariantVersionID] IS NOT NULL
)
BEGIN
    SET @iError = -1
    GOTO ON_ERROR
END

------------------------------------------------------------------------
-- In case any LangaugeVariants have no previous version, we 
-- remove their Current Version
-- Part 1: unset 'C' Status
------------------------------------------------------------------------
UPDATE lvv
SET lvv.[Status] = 'H'
FROM t_StringLanguageVariantVersion lvv 
    JOIN @tblChangedLanguageVariant clv
        ON lvv.[StringLanguageVariantID] = clv.[ID]
WHERE lvv.[Status] = 'C'
AND lvv.[PreviousStringLanguageVariantVersionID] IS NULL

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
-- In case any LangaugeVariants have no previous version, we 
-- remove their Current Version
-- Part 2: clear CurrentStringLanguageVariantVersionIDs
------------------------------------------------------------------------
UPDATE lv
SET lv.[CurrentStringLanguageVariantVersionID] = NULL
FROM t_StringLanguageVariant lv
    JOIN @tblChangedLanguageVariant clv
        ON lv.[ID] = clv.[ID]
WHERE clv.[PreviousStringLanguageVariantVersionID] IS NULL

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
-- Trim out any LanguageVariants whose versions we just cleared 
-- from @tblChangedLanguageVariant 
------------------------------------------------------------------------
DELETE clv
FROM @tblChangedLanguageVariant clv
WHERE clv.[PreviousStringLanguageVariantVersionID] IS NULL

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
-- Make new Scratch Language Variant Versions for the remaining
-- LanguageVariants.
------------------------------------------------------------------------
INSERT INTO t_StringLanguageVariantVersion
([StringLanguageVariantID], [Status], 
[PreviousStringLanguageVariantVersionID], [StringImportSessionID])
SELECT lvvPrevious.[StringLanguageVariantID], 'S',
lvvPrevious.[PreviousStringLanguageVariantVersionID], lvvPrevious.[StringImportSessionID]
FROM @tblChangedLanguageVariant clv
    JOIN t_StringLanguageVariantVersion lvvPrevious
        ON clv.[ID] = lvvPrevious.[StringLanguageVariantID]
        AND clv.[PreviousStringLanguageVariantVersionID] = lvvPrevious.[ID]
    
SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
-- Set these new records as the Scratch Language Variant Versions
------------------------------------------------------------------------
UPDATE lv
SET lv.[ScratchStringLanguageVariantVersionID] = lvv.[ID]
FROM t_StringLanguageVariant lv
    JOIN @tblChangedLanguageVariant clv
        ON lv.[ID] = clv.[ID]
    JOIN t_StringLanguageVariantVersion lvv
        ON lv.[ID] = lvv.[StringLanguageVariantID]
        AND lvv.[Status] = 'S'

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
-- These Scratch Versions now need text added to them from the
-- Previous LanguageVariant Versions
------------------------------------------------------------------------
INSERT INTO t_StringLanguageVariantText
([StringLanguageVariantVersionID], [StringID],
[Text], [StringImportSessionID], [IsBlank])
SELECT lv.[ScratchStringLanguageVariantVersionID], lvtPrevious.[StringID],
lvtPrevious.[Text], lvtPrevious.[StringImportSessionID], lvtPrevious.[IsBlank]
FROM t_StringLanguageVariant lv
    JOIN @tblChangedLanguageVariant clv
        ON lv.[ID] = clv.[ID]
    JOIN t_StringLanguageVariantText lvtPrevious
        ON clv.[PreviousStringLanguageVariantVersionID] = lvtPrevious.[StringLanguageVariantVersionID]

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
-- All of the Scratch Records can now be promoted to Current
-- Part 1: Set related Current records as History
-- Part 2: Set Scratch Records to Current
-- Part 3: Point Current Versions at new Current Versions
--         and Erase Scratch Version Pointer
------------------------------------------------------------------------

------------------------------------------------------------------------
-- Part 1: Set related Current records as History
------------------------------------------------------------------------
UPDATE lvv
SET [Status] = 'H'
FROM t_StringLanguageVariantVersion lvv
    JOIN @tblChangedLanguageVariant clv
        ON lvv.[StringLanguageVariantID] = clv.[ID]
        AND lvv.[Status] = 'C'

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
-- Part 2: Set Scratch Records to Current
------------------------------------------------------------------------
UPDATE lvv
SET [Status] = 'C'
FROM t_StringLanguageVariantVersion lvv
    JOIN @tblChangedLanguageVariant clv
        ON lvv.[StringLanguageVariantID] = clv.[ID]
        AND lvv.[Status] = 'S'

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
-- Part 3: Point Current Versions at new Current Versions
--         and Erase Scratch Version Pointer
------------------------------------------------------------------------
UPDATE lv
SET
    [CurrentStringLanguageVariantVersionID] = [ScratchStringLanguageVariantVersionID],
    [ScratchStringLanguageVariantVersionID] = NULL -- do this one second
FROM t_StringLanguageVariant lv
    JOIN @tblChangedLanguageVariant clv
        ON lv.[ID] = clv.[ID]

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
-- Set the given ImportSession Status to Undo
------------------------------------------------------------------------
UPDATE t_StringImportSession
SET [Status] = 'U'
WHERE [ID] = @a_iStringImportSessionID

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
-- Set a new Session to Current
------------------------------------------------------------------------
UPDATE s
SET [Status] = 'C'
FROM t_StringImportSession s
    JOIN (
        SELECT MAX(sis.[ID]) as [MaxSessionID]
        FROM t_StringImportSession sis
        WHERE sis.[ID] < @a_iStringImportSessionID
        AND sis.[Status] = 'H'
    ) maxs
        ON s.[ID] = maxs.[MaxSessionID]

SELECT @iError = @@ERROR
if (@iError <> 0) GOTO ON_ERROR

COMMIT TRANSACTION tranUndoStringImportSession

return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------

ROLLBACK TRANSACTION

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_UndoStringImportSession]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  Stored Proc: bsp_UnprintVOScriptInstance
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: February 21, 2007
--  Description: Marks a VO Script Instance or an Instance String as 
--    unprinted.
--
--  NOTE: Only Strings that are Active will be set to unprinted.
--    
--  Parameters
--    a_iVOScriptInstanceID - Script Instance to Unprint.  If 
--      unprinting a string, this must still be set.
--    a_iVOScriptInstanceStringID - Set as follows:
--      o NULL when unprinting a whole script instance.
--      o InstanceStringID when unprinting a single string.
--    a_sComment - User comment to associate with the ReRecord action
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_UnprintVOScriptInstance]
@a_iVOScriptInstanceID int,
@a_iVOScriptInstanceStringID int,
@a_sComment nText
AS

SET NOCOUNT ON

DECLARE @iError int

BEGIN TRANSACTION tranUnprintVOScript

------------------------------------------------------------------------
--  Look up the affected VOScriptInstanceString records.
------------------------------------------------------------------------

DECLARE @tblVOStringToUnprint TABLE
( [VOScriptInstanceStringID] int NOT NULL )
  
INSERT INTO @tblVOStringToUnprint
([VOScriptInstanceStringID])
SELECT 
vosis.[ID] as [VOScriptInstanceStringID]
FROM t_VOScriptInstanceString vosis
WHERE [VOScriptInstanceID] = @a_iVOScriptInstanceID
AND [Active] = 'A'
AND (@a_iVOScriptInstanceStringID IS NULL OR [ID] = @a_iVOScriptInstanceStringID)

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  Inactivate these records, and set status to unprinted
------------------------------------------------------------------------

UPDATE vosis
SET [Active] = 'I',
[Status] = 'U'
FROM @tblVOStringToUnprint tvoUnprint
    JOIN t_VOScriptInstanceString vosis
        ON tvoUnprint.[VOScriptInstanceStringID] = vosis.[ID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  Add new InstanceStringStatus records
------------------------------------------------------------------------

INSERT INTO t_VOScriptInstanceStringStatus
([VOScriptInstanceStringID], [Active], [Action], 
[CompareDate], [Revision], [Comment])
SELECT vosis.[ID], 'A', 'U', 
vosis.[CompareDate], vosis.[Revision], @a_sComment
FROM @tblVOStringToUnprint tvoUnprint
    JOIN t_VOScriptInstanceString vosis
        ON tvoUnprint.[VOScriptInstanceStringID] = vosis.[ID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  Set the previous script instance strings as active
------------------------------------------------------------------------

UPDATE vosisPrev
SET [Active] = 'A'
FROM @tblVOStringToUnprint tvoUnprint
    JOIN t_VOScriptInstanceString vosis
        ON tvoUnprint.[VOScriptInstanceStringID] = vosis.[ID]
    JOIN t_VOScriptInstanceString vosisPrev
        ON vosis.[PreviousVOScriptInstanceStringID] = vosisPrev.[ID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  Add new InstanceStringStatus records for the previous script
------------------------------------------------------------------------

INSERT INTO t_VOScriptInstanceStringStatus
([VOScriptInstanceStringID], [Active], [Action], 
[CompareDate], [Revision], [Comment])
SELECT vosisPrev.[ID], 'A', 'P', 
vosisPrev.[CompareDate], vosisPrev.[Revision], @a_sComment
FROM @tblVOStringToUnprint tvoUnprint
    JOIN t_VOScriptInstanceString vosis
        ON tvoUnprint.[VOScriptInstanceStringID] = vosis.[ID]
    JOIN t_VOScriptInstanceString vosisPrev
        ON vosis.[PreviousVOScriptInstanceStringID] = vosisPrev.[ID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR

------------------------------------------------------------------------
--  Mark the ScriptInstance as Unprinted, if there are no more active 
--  strings underneath it.
------------------------------------------------------------------------

IF NOT EXISTS
    (SELECT 1
    FROM t_VOScriptInstanceString vosis
    WHERE vosis.[VOScriptInstanceID] = @a_iVOScriptInstanceID
    AND [Status] = 'P')
BEGIN
    -- First mark another ScriptInstance as active if necessary
    UPDATE vosiUpdate
    SET [Active] = 'A'
    FROM t_VOScriptInstance vosiUpdate
    WHERE vosiUpdate.[ID] = 
    (
        SELECT MAX(vosi.[ID])
        FROM t_VOScriptInstance vosiCurrent
            JOIN t_VOScriptInstance vosi
                ON vosiCurrent.[VOScriptID] = vosi.[VOScriptID]
                AND vosiCurrent.[StringLanguageID] = vosi.[StringLanguageID]
                AND vosi.[Active] != 'U'
                AND vosi.[ID] < vosiCurrent.[ID]
        WHERE vosiCurrent.[ID] = @a_iVOScriptInstanceID
        AND vosiCurrent.[Active] = 'A'
    )
    
    -- Second mark this ScriptInstance as Unprinted
    UPDATE vosi
    SET [Active] = 'U'
    FROM t_VOScriptInstance vosi
    WHERE [ID] = @a_iVOScriptInstanceID
    
    SELECT @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR
END


COMMIT TRANSACTION tranUnprintVOScript

SET NOCOUNT OFF

return 0
------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

ROLLBACK TRANSACTION

SET NOCOUNT OFF

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_UnprintVOScriptInstance]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

CREATE PROCEDURE [dbo].[bsp_UpdateResourceProperties]
    @a_sName VARCHAR(32),
    @a_sFolder VARCHAR(128),
    @a_iOldModuleID INT,
    @a_iNewModuleID INT,
    @a_iNewOwnerModuleID INT,
    @a_iResRefID INT,
    @a_iState INT
AS

DECLARE @iError int
, @iRowCount int

BEGIN TRANSACTION  tran_bsp_UpdateResourceProp

-- Test if the module is being changed
IF (@a_iOldModuleID <> @a_iNewModuleID)
BEGIN
    -- Create a new module res ref
    INSERT INTO t_ModuleResRef
        (ModuleID, ResRefID, CurrentModuleResRefVersionID, ScratchModuleResRefVersionID, CreatedOn, CreatedBy)
    SELECT @a_iNewModuleID, ResRefID, CurrentModuleResRefVersionID, ScratchModuleResRefVersionID, CreatedOn, CreatedBy
    FROM t_ModuleResRef
    WHERE ModuleID = @a_iOldModuleID and ResRefID = @a_iResRefID

    SET @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR

    -- Move all of the historical versions over to this module res ref
    UPDATE t_ModuleResRefVersion
    SET ModuleID = @a_iNewModuleID
    WHERE ModuleID = @a_iOldModuleID and ResRefID = @a_iResRefID

    SET @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR

    -- Move all of the strings to the new string table
    UPDATE st
    SET st.StringTableID = mo.StringTableID
    FROM t_String st
        JOIN t_stringversion sv on st.id = sv.stringid
        join t_moduleresrefversion mrrv on sv.moduleresrefversionid = mrrv.id
        join t_module mo on mo.id = mrrv.moduleid
    WHERE mrrv.ModuleID = @a_iNewModuleID and mrrv.ResRefID = @a_iResRefID

    SET @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR

    -- Update the VOScript table to refer to the new resource
    -- The Resource (Conversation/SoundSet) and Character data will both need to be updated
    UPDATE vos
    SET [ResourceModuleID] = @a_iNewModuleID
    FROM t_VOScript vos
    WHERE vos.[ResourceResRefID] = @a_iResRefID
    AND vos.[ResourceModuleID] = @a_iOldModuleID
    
    SET @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR
    
    UPDATE vos
    SET [CharacterModuleID] = @a_iNewModuleID
    FROM t_VOScript vos
    WHERE vos.[CharacterResRefID] = @a_iResRefID
    AND vos.[CharacterModuleID] = @a_iOldModuleID
    
    SET @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR

    -- Delete the original module res ref
    DELETE t_ModuleResRef
    WHERE ModuleID = @a_iOldModuleID and ResRefID = @a_iResRefID

    SET @iError = @@ERROR
    IF (@iError <> 0) GOTO ON_ERROR
END

-- Update the properties on the module res ref
UPDATE t_ModuleResRefVersion
SET [Name] = @a_sName, [Folder] = @a_sFolder, [State] = @a_iState, [OwnerModuleID] = @a_iNewOwnerModuleID
FROM t_ModuleResRef mrr
WHERE [ID] = mrr.ScratchModuleResRefVersionID
AND [State] <> -1
AND mrr.moduleid = @a_iNewModuleID and mrr.resrefid = @a_iResRefID

SELECT @iError = @@ERROR, @iRowCount = @@ROWCOUNT

IF @iRowCount = 0 AND @iError = 0 SET @iError = -1
IF (@iError <> 0) GOTO ON_ERROR

COMMIT TRANSACTION  tran_bsp_UpdateResourceProp
RETURN 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
ROLLBACK TRANSACTION  tran_bsp_UpdateResourceProp
RETURN @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_UpdateResourceProperties]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  Stored Proc: bsp_UpdateVOScriptListing
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: February 14, 2007
--  Description: Update the Player field on existing scripts, and 
--    add new VO Scripts.
--        
------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[bsp_UpdateVOScriptListing]
AS

SET NOCOUNT ON

DECLARE @iError int

BEGIN TRANSACTION tranUpdateVOScriptListing


------------------------------------------------------------------------
--  Determine all current Conversation/Character interactions.
--  These are the currently "Live" VO Scripts.
------------------------------------------------------------------------

CREATE TABLE #tblVOScript
(
    [ModuleID] int, [ResRefID] int, [ModuleResRefVersionID] int,
    [Tag] varchar(64), 
    [CharacterModuleID] int, [CharacterResRefID] int
)

INSERT INTO #tblVOScript
EXEC @iError = [dbo].[bsp_GetConversationTagToCharacterList] NULL, 1, 0
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Update our current VO Script Listings:
--    - Make inactive if VO Scripts are not in the newly calculated 
--      'live' VO Scripts.
--    - Make active if the VO Scripts are in this list.
--
--  Note: This also marks VO Scripts for Deleted Resources inactive.
------------------------------------------------------------------------

UPDATE vos
SET vos.[IsActive] = 
    CASE 
        WHEN liveScripts.[ModuleID] IS NULL THEN 0
        ELSE 1 
    END
FROM t_VOScript vos
    LEFT OUTER JOIN 
        (SELECT DISTINCT 
            [ModuleID], [ResRefID], 
            [CharacterModuleID], [CharacterResRefID]
        FROM #tblVOScript) liveScripts
            on vos.[ResourceModuleID] = liveScripts.[ModuleID]
            and vos.[ResourceResRefID] = liveScripts.[ResRefID]
            and vos.[CharacterModuleID] = liveScripts.[CharacterModuleID]
            and vos.[CharacterResRefID] = liveScripts.[CharacterResRefID]

SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Add new VO Scripts to the listing that appear in the "Live" list
--    for the first time.
------------------------------------------------------------------------

INSERT INTO t_VOScript
    ([ResourceModuleID], [ResourceResRefID], 
    [CharacterModuleID], [CharacterResRefID], 
    [PlayerScript], [IsActive])
SELECT 
    liveScripts.[ModuleID], liveScripts.[ResRefID],
    liveScripts.[CharacterModuleID], liveScripts.[CharacterResRefID],
    0, 1
FROM 
    (SELECT DISTINCT 
        [ModuleID], [ResRefID], 
        [CharacterModuleID], [CharacterResRefID]
    FROM #tblVOScript) liveScripts
        LEFT OUTER JOIN t_VOScript vos
            ON vos.[ResourceModuleID] = liveScripts.[ModuleID]
            AND vos.[ResourceResRefID] = liveScripts.[ResRefID]
            AND vos.[CharacterModuleID] = liveScripts.[CharacterModuleID]
            AND vos.[CharacterResRefID] = liveScripts.[CharacterResRefID]
WHERE vos.[ID] IS NULL
    
SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Update the PlayerScript field on VO Script Records
------------------------------------------------------------------------

UPDATE vos
SET vos.[PlayerScript] = c.[Player]
FROM t_VOScript vos
    JOIN t_ModuleResRef mr
        ON vos.[CharacterModuleID] = mr.[ModuleID]
        AND vos.[CharacterResRefID] = mr.[ResRefID]
    JOIN t_Character c
        ON mr.[CurrentModuleResRefVersionID] = c.[ModuleResRefVersionID]
        AND vos.[PlayerScript] != c.[Player]
        
SELECT @iError = @@ERROR
IF (@iError <> 0) GOTO ON_ERROR


------------------------------------------------------------------------
--  Done.
------------------------------------------------------------------------

DROP TABLE #tblVOScript

COMMIT TRANSACTION tranUpdateVOScriptListing

SET NOCOUNT OFF

return 0
------------------------------------------------------------------------
ON_ERROR:
------------------------------------------------------------------------

ROLLBACK TRANSACTION

SET NOCOUNT OFF

return @iError

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_UpdateVOScriptListing]  TO [bw_db_write]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO



CREATE PROCEDURE [dbo].[bsp_ValidateResRefName]
@a_iModuleID int,
@a_iResRefID int,
@a_sResType varchar(4),
@a_bUseModuleTree bit,
@a_sName varchar(32),
@a_bInValid bit OUTPUT
AS
if @a_iResRefID is null set @a_iResRefID = 0

if (@a_sResType is null or @a_sResType = '')
  BEGIN
    select @a_bInValid = case count(name) when 0 then 0 else 1 end
    from t_moduleResRefVersion mrrv
     JOIN t_ResRef rr on mrrv.resrefid = rr.id
     JOIN t_ResRef rr2 on rr.ResType = rr2.ResType
       AND rr2.id = @a_iResRefID
    where mrrv.name = @a_sName
    and mrrv.Status in ('C', 'S')
    and mrrv.ResRefID <> @a_iResRefID
    IF (@@ERROR <> 0) GOTO ON_ERROR
  END
ELSE
  BEGIN
    select @a_bInValid = case count(name) when 0 then 0 else 1 end
    from t_moduleResRefVersion mrrv
     JOIN t_ResRef rr on mrrv.resrefid = rr.id
       and rr.ResType = @a_sResType
    where mrrv.name = @a_sName
    and mrrv.Status in ('C', 'S')
    and mrrv.ResRefID <> @a_iResRefID
    IF (@@ERROR <> 0) GOTO ON_ERROR
  END
  
return 0
---------------------------------------------------------------------
ON_ERROR:
---------------------------------------------------------------------
return @@ERROR

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

GRANT  EXECUTE  ON [dbo].[bsp_ValidateResRefName]  TO [bw_db_read]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


CREATE TRIGGER [trg_ModuleType_Update] ON dbo.t_ModuleType
FOR UPDATE
AS
UPDATE t_ModuleType
SET [LastModifiedOn] = GetDate(),
[LastModifiedBy] = suser_sname()
WHERE ID IN
    (SELECT [ID] FROM INSERTED)


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO




CREATE TRIGGER [trg_ResourceTables_Update] ON dbo.t_ResourceTables
FOR UPDATE
AS
UPDATE t_ResourceTables
SET [LastModifiedOn] = GetDate(),
[LastModifiedBy] = suser_sname()
WHERE ID IN
    (SELECT [ID] FROM INSERTED)




GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO


------------------------------------------------------------------------
--  t_StringExportLabel UPDATE Trigger
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: September 20, 2006
--  Description: Updates the "LastModified.." auditing information.
--        
------------------------------------------------------------------------
CREATE TRIGGER [trg_StringExportLabel_Update] ON dbo.t_StringExportLabel
FOR UPDATE
AS
UPDATE t_StringExportLabel
SET [LastModifiedOn] = GetDate(),
[LastModifiedBy] = suser_sname()
FROM inserted
WHERE t_StringExportLabel.[ID] = inserted.[ID]

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO




CREATE TRIGGER [trg_StringTable_Update] ON dbo.t_StringTable
FOR UPDATE
AS
UPDATE t_StringTable
SET [LastModifiedOn] = GetDate(),
[LastModifiedBy] = suser_sname()
WHERE ID IN
    (SELECT [ID] FROM INSERTED)




GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO




CREATE TRIGGER [trg_StringType_Update] ON dbo.t_StringType
FOR UPDATE
AS
UPDATE t_StringType
SET [LastModifiedOn] = GetDate(),
[LastModifiedBy] = suser_sname()
WHERE ID IN
    (SELECT [ID] FROM INSERTED)




GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO




CREATE TRIGGER [trg_StringVariant_Update] ON dbo.t_StringVariant
FOR UPDATE
AS
UPDATE t_StringVariant
SET [LastModifiedOn] = GetDate(),
[LastModifiedBy] = suser_sname()
WHERE ID IN
    (SELECT [ID] FROM INSERTED)




GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  t_VOScriptInstanceManagement INSERT Trigger
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: February 13, 2007
--  Description: Changes the Active flag to Inactive when a new Active
--    record is inserted.
------------------------------------------------------------------------
CREATE TRIGGER [trg_VOScriptInstanceManagementInsert] ON dbo.t_VOScriptInstanceManagement
FOR INSERT
AS

UPDATE vis
SET [Active] = 'I'
FROM t_VOScriptInstanceManagement vis
    JOIN inserted i
        ON vis.[VOScriptInstanceID] = i.[VOScriptInstanceID]
        AND vis.[Active] = 'A'
        AND i.[Active] = 'A'
        AND vis.[ID] != i.[ID]

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO




CREATE TRIGGER [trg_ResourceDefinition_Update] ON dbo.t_ResourceDefinition
FOR UPDATE
AS
UPDATE t_ResourceDefinition
SET [LastModifiedOn] = GetDate(),
[LastModifiedBy] = suser_sname()
WHERE ResType IN
    (SELECT [ResType] FROM INSERTED)




GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO




CREATE TRIGGER [trg_ResourceTableRelationship_Update] ON dbo.t_ResourceTableRelationship
FOR UPDATE
AS
UPDATE t_ResourceTableRelationship
SET [LastModifiedOn] = GetDate(),
    [LastModifiedBy] = suser_sname()
FROM inserted
WHERE t_ResourceTableRelationship.ParentResourceTableID = inserted.ParentResourceTableID
AND   t_ResourceTableRelationship.ChildResourceTableID = inserted.ChildResourceTableID




GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO




CREATE TRIGGER [trg_String_Update] ON dbo.t_String
FOR UPDATE
AS
UPDATE t_String
SET [LastModifiedOn] = GetDate(),
[LastModifiedBy] = suser_sname()
WHERE ID IN
    (SELECT [ID] FROM INSERTED)




GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO




CREATE TRIGGER [trg_Module_Delete] ON dbo.t_Module
FOR DELETE
AS
DELETE FROM t_ModuleAssociation
WHERE ChildModuleID in
   (SELECT [ID] FROM DELETED)




GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO




CREATE TRIGGER [trg_Module_Update] ON dbo.t_Module
FOR UPDATE
AS
UPDATE t_Module
SET [LastModifiedOn] = GetDate(),
[LastModifiedBy] = suser_sname()
WHERE ID IN
    (SELECT [ID] FROM INSERTED)




GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO




CREATE TRIGGER [trg_StringSound_Update] ON dbo.t_StringSound
FOR UPDATE
AS
UPDATE t_StringSound
SET [LastModifiedOn] = GetDate(),
[LastModifiedBy] = suser_sname()
WHERE ID IN
    (SELECT [ID] FROM INSERTED)




GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO




CREATE TRIGGER [trg_ModuleAssociation_Update] ON dbo.t_ModuleAssociation
FOR UPDATE
AS
UPDATE t_ModuleAssociation
SET [LastModifiedOn] = GetDate(),
    [LastModifiedBy] = suser_sname()
FROM inserted
WHERE t_ModuleAssociation.ParentModuleID = inserted.ParentModuleID
AND   t_ModuleAssociation.ChildModuleID = inserted.ChildModuleID




GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO




CREATE TRIGGER [trg_ModuleResRef_Update] ON dbo.t_ModuleResRef
FOR UPDATE
AS
UPDATE t_ModuleResRef
SET [LastModifiedOn] = GetDate(),
    [LastModifiedBy] = suser_sname()
FROM inserted
WHERE t_ModuleResRef.ModuleID = inserted.ModuleID
AND   t_ModuleResRef.ResRefID = inserted.ResRefID




GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


-- creating the new trigger to populate the references table on any change to t_script

CREATE TRIGGER [dbo].[trg_Script_Update] ON dbo.t_Script
AFTER UPDATE, INSERT
AS
BEGIN

    -- clean up any old values
    DELETE FROM t_Script_Reference
    WHERE [ModuleResRefVersionID] IN 
    ( SELECT [ModuleResRefVersionID] FROM deleted )

    -- insert any new calues
    DECLARE CUR_TODO CURSOR READ_ONLY FOR 
    SELECT [ModuleResRefVersionID] FROM inserted
    
    DECLARE @MRRVID int
    OPEN CUR_TODO
    
    FETCH NEXT FROM CUR_TODO INTO @MRRVID
    WHILE (@@fetch_status <> -1)
    BEGIN
        IF (@@fetch_status <> -2)
        BEGIN

            INSERT INTO t_Script_Reference 
            ( [ModuleResRefVersionID], [ReferencedResRefID] )
            SELECT DISTINCT @MRRVID, [ResRefID]
            FROM   dbo.udf_ParseIncludesFromScript(@MRRVID)
            WHERE  [ResRefID] IS NOT NULL
    
        END
        FETCH NEXT FROM CUR_TODO INTO @MRRVID
    END
    
    CLOSE CUR_TODO
    DEALLOCATE CUR_TODO
    
END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO




CREATE TRIGGER [trg_StringLanguage_Update] ON dbo.t_StringLanguage
FOR UPDATE
AS
UPDATE t_StringLanguage
SET [LastModifiedOn] = GetDate(),
[LastModifiedBy] = suser_sname()
WHERE ID IN
    (SELECT [ID] FROM INSERTED)




GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO




CREATE TRIGGER [trg_StringLanguageVariant_Update] ON dbo.t_StringLanguageVariant
FOR UPDATE
AS
UPDATE t_StringLanguageVariant
SET [LastModifiedOn] = GetDate(),
[LastModifiedBy] = suser_sname()
WHERE ID IN
    (SELECT [ID] FROM INSERTED)




GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO



------------------------------------------------------------------------
--  Alter trg_StringText_Update to incorporate the ReRecord flag
------------------------------------------------------------------------
CREATE TRIGGER [trg_StringText_Update] ON dbo.t_StringText
FOR UPDATE
AS

------------------------------------------------------------------------
-- Always update the record auditing information, and 
-- Always update the Word Count
-- Note: record auditing is not the same as string auditing
------------------------------------------------------------------------
UPDATE t_StringText
    SET [LastModifiedOn] = GetDate(),
        [LastModifiedBy] = suser_sname(),
        [WordCount] = dbo.udf_WordCount( t_StringText.[Text] )    
FROM inserted
WHERE t_StringText.StringID = inserted.StringID
AND t_StringText.ModuleResRefVersionID = inserted.ModuleResRefVersionID
AND t_StringText.StringLanguageVariantID = inserted.StringLanguageVariantID

------------------------------------------------------------------------
-- Update the String Auditing for Minor Edits, only when strings
-- are not being copied.
------------------------------------------------------------------------
UPDATE st
    SET st.[LastMinorUpdateOn] = st.[LastModifiedOn],
        st.[LastMinorUpdateBy] = st.[LastModifiedBy]
FROM t_StringText st 
    JOIN inserted
        ON st.[StringID] = inserted.[StringID]
        AND st.[ModuleResRefVersionID] = inserted.[ModuleResRefVersionID]
        AND st.[StringLanguageVariantID] = inserted.[StringLanguageVariantID]
        AND inserted.[StringIsCopy] = 0

------------------------------------------------------------------------
-- Update the String Auditing for Major Edits where applicable, 
-- only when strings are not being copied.
------------------------------------------------------------------------
UPDATE st
    SET st.[LastMajorUpdateOn] = st.[LastModifiedOn],
        st.[LastMajorUpdateBy] = st.[LastModifiedBy]
FROM t_StringText st 
    JOIN inserted
        ON st.[StringID] = inserted.[StringID]
        AND st.[ModuleResRefVersionID] = inserted.[ModuleResRefVersionID]
        AND st.[StringLanguageVariantID] = inserted.[StringLanguageVariantID]
        AND inserted.[StringIsCopy] = 0
        AND st.[MinorUpdateCount] = 0

------------------------------------------------------------------------
-- Update the VORequestOn stamp where applicable, 
-- only when strings are not being copied.
------------------------------------------------------------------------
UPDATE st
    SET st.[VORequestOn] = st.[LastModifiedOn],
        st.[ReRecord] = 0
FROM t_StringText st 
    JOIN inserted
        ON st.[StringID] = inserted.[StringID]
        AND st.[ModuleResRefVersionID] = inserted.[ModuleResRefVersionID]
        AND st.[StringLanguageVariantID] = inserted.[StringLanguageVariantID]
        AND inserted.[StringIsCopy] = 0
        AND st.[ReRecord] = 1

------------------------------------------------------------------------
-- Flip off the "String Is a Copy" flag where applicable
------------------------------------------------------------------------
UPDATE st
    SET st.[StringIsCopy] = 0
FROM t_StringText st 
    JOIN inserted
        ON st.[StringID] = inserted.[StringID]
        AND st.[ModuleResRefVersionID] = inserted.[ModuleResRefVersionID]
        AND st.[StringLanguageVariantID] = inserted.[StringLanguageVariantID]
        AND st.[StringIsCopy] = 1


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO




CREATE TRIGGER [trg_StringText_Insert] ON dbo.t_StringText
FOR INSERT
AS
UPDATE t_StringText
    SET [WordCount] = dbo.udf_WordCount( t_StringText.[Text] )    
FROM inserted
WHERE t_StringText.StringID = inserted.StringID
AND t_StringText.ModuleResRefVersionID = inserted.ModuleResRefVersionID
AND t_StringText.StringLanguageVariantID = inserted.StringLanguageVariantID




GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


------------------------------------------------------------------------
--  t_VOSessionInstanceVersion INSERT Trigger
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: February 13, 2007
--  Description: Changes the Active flag to Inactive when a new Active
--    record is inserted.
------------------------------------------------------------------------
CREATE TRIGGER [trg_VOSessionInstanceVersionInsert] ON dbo.t_VOSessionInstanceVersion
FOR INSERT
AS

UPDATE vis
SET [Active] = 'I'
FROM t_VOSessionInstanceVersion vis
    JOIN inserted i
        ON vis.[VOSessionInstanceID] = i.[VOSessionInstanceID]
        AND vis.[Active] = 'A'
        AND i.[Active] = 'A'
        AND vis.[ID] != i.[ID]



GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


------------------------------------------------------------------------
--  t_VOSessionVersion INSERT Trigger
------------------------------------------------------------------------
--  Owned By: Chris Mihalick
--  Created On: May 15, 2008
--  Description: Changes the Active flag to Inactive when a new Active
--    record is inserted.
------------------------------------------------------------------------
CREATE TRIGGER [trg_VOSessionVersionInsert] ON dbo.t_VOSessionVersion
FOR INSERT
AS

UPDATE vis
SET [Active] = 'I'
FROM t_VOSessionVersion vis
    JOIN inserted i
        ON vis.[VOSessionID] = i.[VOSessionID]
        AND vis.[Active] = 'A'
        AND i.[Active] = 'A'
        AND vis.[ID] != i.[ID]



GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  t_VOScriptInstance INSERT Trigger
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: February 13, 2007
--  Description: Changes the Active flag to Inactive when a new Active
--    record is inserted.
------------------------------------------------------------------------
CREATE TRIGGER [trg_VOScriptInstanceInsert] ON dbo.t_VOScriptInstance
FOR INSERT
AS

UPDATE vis
SET [Active] = 'I'
FROM t_VOScriptInstance vis
    JOIN inserted i
        ON vis.[VOScriptID] = i.[VOScriptID]
        AND vis.[StringLanguageID] = i.[StringLanguageID]
        AND vis.[Active] = 'A'
        AND i.[Active] = 'A'
        AND vis.[ID] != i.[ID]

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  t_VOScriptInstanceString INSERT Trigger
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: February 13, 2007
--  Description: Changes the Active flag to Inactive when a new Active
--    record is inserted.
------------------------------------------------------------------------
CREATE TRIGGER [trg_VOScriptInstanceStringInsert] ON dbo.t_VOScriptInstanceString
FOR INSERT
AS

UPDATE vosis
SET [Active] = 'I'
FROM t_VOScriptInstanceString vosis
    JOIN inserted i
        ON vosis.[StringID] = i.[StringID]
        AND vosis.[Active] = 'A'
        AND i.[Active] = 'A'
        AND vosis.[ID] = i.[PreviousVOScriptInstanceStringID]

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  t_VOScriptInstanceString UPDATE Trigger
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: February 13, 2007
--  Description: Updates the "Last Modified" audit information
--        
------------------------------------------------------------------------
CREATE TRIGGER [dbo].[trg_VOScriptInstanceStringUpdate] ON [dbo].[t_VOScriptInstanceString]
FOR UPDATE
AS

UPDATE vosis
SET [LastModifiedOn] = GetDate(),
[LastModifiedBy] = suser_sname()
FROM t_VOScriptInstanceString vosis
    JOIN inserted i
        ON vosis.[ID] = i.[ID]

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

------------------------------------------------------------------------
--  t_VOScriptInstanceStringStatus INSERT Trigger
------------------------------------------------------------------------
--  Owned By: Chris Christou
--  Created On: February 13, 2007
--  Description: Changes the old Active Flag to Inactive when 
--    another record has become Active
--        
------------------------------------------------------------------------
CREATE TRIGGER [trg_VOScriptInstanceStringStatus_Insert] ON dbo.t_VOScriptInstanceStringStatus
FOR INSERT
AS

UPDATE iss
SET [Active] = 'I'
FROM t_VOScriptInstanceStringStatus iss
    JOIN inserted i
        ON iss.[VOScriptInstanceStringID] = i.[VOScriptInstanceStringID]
        AND iss.[Active] = 'A'
        AND i.[Active] = 'A'
        AND iss.[ID] != i.[ID]

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO