예제 #1
0
    void QueueNewDialogMessage(int index)
    {
        Dialog        dialog = (Dialog)target;
        DialogMessage src    = null;
        DialogMessage dst    = new DialogMessage();

        if (index == 0 && dialog.messages.Count > 0)
        {
            src = dialog.messages[0];
        }
        else if (index > 0 && index <= dialog.messages.Count)
        {
            src = dialog.messages[index - 1];
        }

        if (src != null)
        {
            dst.CopyFrom(src);
        }

        dialog.messages.Insert(index, dst);
        EditorUtility.SetDirty(target);
    }
예제 #2
0
    public virtual QuestInstance newInstance()
    {
        if (!metaQuestDummy)
        {
            metaQuestDummy = new GameObject("metaQuestDummy");
            DontDestroyOnLoad(metaQuestDummy);
        }

        //strip the dummy gameobject from the components
        MonoBehaviour[] components = metaQuestDummy.GetComponents <MonoBehaviour>();
        foreach (MonoBehaviour bhvr in components)
        {
            Destroy(bhvr);
        }

        //create a new quest instance
        QuestInstance qi = new QuestInstance();

        //copy the data
        qi.quest                = metaQuestDummy.AddComponent <Quest>();
        qi.quest.audioQuest     = _music;
        qi.quest.title          = _title;
        qi.quest.town           = _town;
        qi.quest.background     = _background;
        qi.quest.baseCoinsAward = _award;
        qi.quest.startDialog    = metaQuestDummy.AddComponent <Dialog>();

        //create the dialog
        Dialog dialog = qi.quest.startDialog;

        foreach (DialogMessage dm in messages)
        {
            DialogMessage msg = new DialogMessage();

            msg.CopyFrom(dm);

            dialog.messages.Add(msg);
        }

        //add the accept side quest window and the quest title cinematic event
        metaQuestDummy.AddComponent <ShowAcceptSideQuestWindow>();
        metaQuestDummy.AddComponent <ShowQuestTitle>();

        //create new quest objectives evaluator
        qi.objectives = new List <QuestObjectiveEvaluator>();

        MetaKillQuest[] mkq = GetComponents <MetaKillQuest>();

        List <KillQuest> mandatoryKillQuests = new List <KillQuest>();
        List <KillQuest> optionalKillQuests  = new List <KillQuest>();

        if (mkq != null)
        {
            foreach (MetaKillQuest mk in mkq)
            {
                if (mk._mandatory)
                {
                    mandatoryKillQuests.Add(mk as KillQuest);
                }
                else
                {
                    optionalKillQuests.Add(mk as KillQuest);
                }
            }

            foreach (KillQuest kq in mandatoryKillQuests)
            {
                qi.objectives.Add(kq.getEvaluator());
            }

            if (_maxKillQuests >= 0)
            {
                if (mandatoryKillQuests.Count < _maxKillQuests)
                {
                    //random sort
                    optionalKillQuests.Sort(delegate(KillQuest kq1, KillQuest kq2)
                    {
                        return((Random.Range(0, 2) == 0)?-1:1);                     //shuffle
                    });

                    int numKillQuestsToAdd = _maxKillQuests - mandatoryKillQuests.Count;

                    for (int i = 0; i < numKillQuestsToAdd; i++)
                    {
                        qi.objectives.Add(optionalKillQuests[i].getEvaluator());
                    }
                }
            }
            else
            {
                foreach (KillQuest kq in optionalKillQuests)
                {
                    qi.objectives.Add(kq.getEvaluator());
                }
            }
        }

        LootQuest[] lqs = GetComponents <LootQuest>();
        if (lqs != null)
        {
            foreach (LootQuest lq in lqs)
            {
                qi.objectives.Add(lq.getEvaluator());
            }
        }

        RescueQuest[] rqs = GetComponents <RescueQuest>();
        if (rqs != null && rqs.Length > 0)
        {
            int index = Random.Range(0, rqs.Length);
            Debug.Log(index);
            qi.objectives.Add(rqs[index].getEvaluator());
        }

        return(qi);
    }