示例#1
0
 internal void CheckDialog(Npc p_npc)
 {
     m_text = null;
     m_randomList.Clear();
     for (Int32 i = 0; i < m_texts.Length; i++)
     {
         m_texts[i].CheckCondition(p_npc);
         if (m_texts[i].State == EDialogState.NORMAL)
         {
             if (!m_randomText)
             {
                 m_text = m_texts[i];
                 break;
             }
             m_randomList.Add(m_texts[i]);
         }
     }
     if (m_randomText && m_randomList.Count > 0)
     {
         m_text = m_randomList[Random.Range(0, m_randomList.Count - 1)];
     }
     if (m_text == null)
     {
         throw new InvalidOperationException("condition check failed, no dialog texts found! dialog " + m_id);
     }
     for (Int32 j = 0; j < m_entries.Length; j++)
     {
         m_entries[j].CheckEntry(p_npc);
     }
 }
示例#2
0
 public Dialog(NpcConversationStaticData.Dialog p_dialogData)
 {
     if (p_dialogData.m_texts == null || p_dialogData.m_texts.Length == 0)
     {
         throw new InvalidDataException("No DialogTexts defined in dialog " + p_dialogData.m_id);
     }
     m_randomList             = new List <DialogText>();
     m_id                     = p_dialogData.m_id;
     m_randomText             = p_dialogData.m_randomText;
     m_feature                = p_dialogData.m_feature;
     m_fakeNpcID              = p_dialogData.m_fakeNpcID;
     m_hideBackButton         = p_dialogData.m_hideBackButton;
     m_hideNpcsAndCloseButton = p_dialogData.m_hideNpcsAndCloseButton;
     m_hideNpcAndPortrait     = p_dialogData.m_hideNpcAndPortrait;
     m_backToDialogId         = p_dialogData.m_backToDialodId;
     if (p_dialogData.m_entries != null && p_dialogData.m_entries.Length > 0)
     {
         m_entries = new DialogEntry[p_dialogData.m_entries.Length];
         for (Int32 i = 0; i < p_dialogData.m_entries.Length; i++)
         {
             SaveNeededTokens(p_dialogData.m_entries[i]);
             m_entries[i] = new DialogEntry(p_dialogData.m_entries[i]);
         }
     }
     else
     {
         m_entries = new DialogEntry[0];
     }
     m_texts = new DialogText[p_dialogData.m_texts.Length];
     for (Int32 j = 0; j < p_dialogData.m_texts.Length; j++)
     {
         SaveNeededTokens(p_dialogData.m_texts[j]);
         m_texts[j] = new DialogText(p_dialogData.m_texts[j]);
     }
 }
示例#3
0
 public DialogEntry(NpcConversationStaticData.DialogEntry p_entyData)
 {
     m_staticData = p_entyData;
     if (p_entyData.m_texts == null)
     {
         throw new InvalidDataException("The EntryData must contains at least 1 DialogText");
     }
     m_texts = new DialogText[p_entyData.m_texts.Length];
     for (Int32 i = 0; i < p_entyData.m_texts.Length; i++)
     {
         m_texts[i] = new DialogText(p_entyData.m_texts[i]);
     }
     if (m_staticData.m_functions == null || m_staticData.m_functions.Length == 0)
     {
         throw new InvalidDataException("The Entry has no DialogFunction!!! : " + m_staticData.m_texts[0].m_locaKey);
     }
 }
示例#4
0
 internal void CheckEntry(Npc p_npc)
 {
     DialogCondition[] conditions = m_staticData.m_conditions;
     m_state = EDialogState.NORMAL;
     if (conditions != null)
     {
         for (Int32 i = 0; i < conditions.Length; i++)
         {
             EDialogState edialogState = conditions[i].CheckCondition(p_npc);
             if (edialogState > m_state)
             {
                 m_state = edialogState;
                 if (m_state == EDialogState.HIDDEN)
                 {
                     break;
                 }
             }
         }
     }
     m_text = null;
     if (m_state != EDialogState.HIDDEN)
     {
         for (Int32 j = 0; j < m_texts.Length; j++)
         {
             m_texts[j].CheckCondition(p_npc);
             if (m_texts[j].State != EDialogState.HIDDEN)
             {
                 m_text = m_texts[j];
                 break;
             }
         }
         if (m_text == null)
         {
             throw new InvalidDataException("All DialogText Conditions failed!!!!");
         }
     }
 }