public static void SetInteger(NWN2ScriptVarTable variables, string name, int value)
 {
     try
     {
         variables.GetVariable(name).ValueInt = value;
         variables.GetVariable(name).VariableType = NWN2ScriptVariableType.Int;
     }
     catch
     {
         NWN2ScriptVariable var = new NWN2ScriptVariable(name, value);
         var.VariableType = NWN2ScriptVariableType.Int;
         variables.Add(var);
     }
 }
 public static void SetFloat(NWN2ScriptVarTable variables, string name, float value)
 {
     try
     {
         variables.GetVariable(name).ValueFloat = value;
         variables.GetVariable(name).VariableType = NWN2ScriptVariableType.Float;
     }
     catch
     {
         NWN2ScriptVariable var = new NWN2ScriptVariable(name, value);
         var.VariableType = NWN2ScriptVariableType.Float;
         variables.Add(var);
     }
 }
예제 #3
0
        /// <summary>
        /// Creates a conversation that contains a conflict (i.e. the actor will turn hostile)
        /// </summary>
        /// <param name="questName">The name of the quset</param>
        /// <param name="gender">The gender which will be used in the quest</param>
        /// <param name="lang">The spoken (real world) language</param>
        /// <returns>The conversation</returns>
        private NWN2GameConversation conflictFixer(string questName, BWLanguages.Gender gender, BWLanguages.BWLanguage lang)
        {
            // I set the villian to drop the needed loot
            addInv();

            NWN2GameConversation cConversation = null;

            /* If the villian does not talk to the player, but just attacks,
            then we don't need to any of the following */

            if (!villianTalk)
                {
                ushort hostile = 0;
                foreach (NWN2Faction fact in module.FactionData.Factions)
                    {
                    if (fact.Name == "Hostile")
                        {
                        hostile = (ushort)fact.ID;
                        debug("Value for hostile: " + hostile.ToString());
                        break;
                        }
                    }
                if (actor.boolInstance)
                    {
                    NWN2CreatureInstance insActor = (NWN2CreatureInstance)actor.instance;
                    insActor.FactionID = hostile;
                    }
                else
                    {
                    NWN2CreatureBlueprint bluActor = (NWN2CreatureBlueprint)actor.blueprint;
                    bluActor.FactionID = hostile;
                    }
                }
            else
                {
                NWN2GameScript killActor = getAdvanceJournal();

                questName = questNamePrep(questName);
                NWN2ScriptVarTable varTable;
                NWN2CreatureBlueprint creatureBlue = null;
                NWN2CreatureInstance creatureInst = null;

                if (actor.boolInstance)
                    {
                    creatureInst = (NWN2CreatureInstance)actor.instance;
                    varTable = creatureInst.Variables;
                    }
                else
                    {
                    creatureBlue = (NWN2CreatureBlueprint)actor.blueprint;
                    varTable = creatureBlue.Variables;
                    }
                if (varTable == null)
                    {
                    varTable = new NWN2ScriptVarTable();
                    }

                // I remove any old duplicates
                LinkedList<string> toRemove = new LinkedList<string>();
                toRemove.AddLast("DeathScript");
                varTable = getAdvanceJournalVar(varTable, questName, questId, xp, toRemove);
                var deathScript = new NWN2ScriptVariable("DeathScript", "ga_advance_journal");
                varTable.Add(deathScript);

                if (creatureInst != null)
                    {
                    creatureInst.Variables = varTable;
                    }
                else if (creatureBlue != null)
                    {
                    creatureBlue.Variables = varTable;
                    }

                cConversation = conversationFixer(questName, gender, lang);
                }
            return cConversation;
        }
예제 #4
0
        private void condAdvance(Actor trigger, NWN2ScriptVarTable varTable, string questName, int questId, int xp, string script, string message)
        {
            LinkedList<String> toRemove = new LinkedList<string>();
            toRemove.AddLast("negate");
            toRemove.AddLast("condition");
            toRemove.AddLast("script");
            toRemove.AddLast("message");
            varTable = getAdvanceJournalVar(varTable, questName, questId, xp, toRemove);
            string value = "";
            if (preReq == EnumTypes.prereq.SimplePrereq || preReq == EnumTypes.prereq.CastSpecificPrereq)
                {
                int questValue = preReqNode.questId;
                if (questValue == 0) questValue = 1;
                value = questValue.ToString();
                }

            NWN2GameScript sayString = module.Scripts["gtr_conditional_run_script"];
            if (sayString == null)
                {
                sayString = new NWN2GameScript("gtr_conditional_run_script", module.Repository.DirectoryName, module.Repository);
                sayString.Data = Properties.Resources.gtr_conditional_run_script;
                sayString.OEISerialize();
                module.Scripts.Add(sayString);
                }

            if (preReq == EnumTypes.prereq.SimplePrereq)
                {
                value = "<" + value;
                NWN2ScriptVariable negate = new NWN2ScriptVariable("negate", 1);
                varTable.Add(negate);
                }

            NWN2ScriptVariable compare1 = new NWN2ScriptVariable("condition", value);
            NWN2ScriptVariable scriptVar = new NWN2ScriptVariable("script", script);
            if (message != "")
                {
                NWN2ScriptVariable messageVar = new NWN2ScriptVariable("message", message);
                varTable.Add(messageVar);
                }

            varTable.Add(compare1);
            varTable.Add(scriptVar);

            trigger.Var = varTable;
            if (trigger.boolInstance)
                {
                ((NWN2TriggerInstance)trigger.instance).OnEnter = sayString.Resource;
                }
            else
                {
                ((NWN2TriggerBlueprint)trigger.blueprint).OnEnter = sayString.Resource;
                }
        }
예제 #5
0
 private static NWN2ScriptVarTable getAdvanceJournalVar(NWN2ScriptVarTable varTable, string questName, int questId, int xp, LinkedList<string> toRemove)
 {
     toRemove.AddLast("XP");
     toRemove.AddLast("JournalUpdate");
     toRemove.AddLast("nextState");
     removeDuplicates(varTable, toRemove);
     var XP = new NWN2ScriptVariable("XP", xp);
     var journalCategory = new NWN2ScriptVariable("JournalUpdate", "Q_" + questName);
     int state = (questId == 0) ? 1 : questId;
     var journalEntry = new NWN2ScriptVariable("nextState", state);
     varTable.Add(XP);
     varTable.Add(journalCategory);
     varTable.Add(journalEntry);
     return varTable;
 }
예제 #6
0
        /// <summary>
        /// The utility method which takes care of settig the trigger correctly
        /// </summary>
        /// <param name="actor">The actor who might be used in the script</param>
        /// <param name="trigger">The trigger we are going to work on</param>
        /// <param name="cConversation">The conversation which will be referenced by the trigger</param>
        /// <param name="triggerHappens">The type of trigger</param>
        private void makeEscort(string actorName, Actor trigger, string convName, string questName, int questId)
        {
            var varTable = trigger.Var;
            if (varTable == null)
                {
                varTable = new NWN2ScriptVarTable();
                }
            LinkedList<String> toRemove = new LinkedList<string>();
            toRemove.AddLast("Conversation");
            toRemove.AddLast("Node");
            toRemove.AddLast("Run");
            toRemove.AddLast("TalkNow");
            toRemove.AddLast("CutsceneBars");
            toRemove.AddLast("OnceOnly");
            toRemove.AddLast("MultiUse");
            toRemove.AddLast("CombatCutsceneSetup");
            toRemove.AddLast("NPC_Tag");

            var Conversation = new NWN2ScriptVariable("Conversation", convName);
            var Node = new NWN2ScriptVariable("Node", 1);
            var Run = new NWN2ScriptVariable("Run", 1);
            var TalkNow = new NWN2ScriptVariable("TalkNow", 1);
            var CutsceneBars = new NWN2ScriptVariable("CutsceneBars", 0);
            var OnceOnly = new NWN2ScriptVariable("OnceOnly", 0);
            var MutilUse = new NWN2ScriptVariable("MultiUse", 1);
            var CombatCutsceneSetup = new NWN2ScriptVariable("CombatCutsceneSetup", 0);
            var NPCTag = new NWN2ScriptVariable("NPC_Tag", actorName);

            // I add the variables to the tables
            varTable = removeDuplicates(varTable, toRemove);

            varTable.Add(Conversation);
            varTable.Add(Node);
            varTable.Add(Run);
            varTable.Add(TalkNow);
            varTable.Add(CutsceneBars);
            varTable.Add(OnceOnly);
            varTable.Add(MutilUse);
            varTable.Add(CombatCutsceneSetup);
            varTable.Add(NPCTag);

            condAdvance(trigger, varTable, questName, questId, 0, "gtr_speak_node", "");
        }
 public static void SetString(NWN2ScriptVarTable variables, string name, string value)
 {
     try
     {
         variables.GetVariable(name).ValueString = value;
         variables.GetVariable(name).VariableType = NWN2ScriptVariableType.String;
     }
     catch
     {
         NWN2ScriptVariable var = new NWN2ScriptVariable(name, value);
         var.VariableType = NWN2ScriptVariableType.String;
         variables.Add(var);
     }
 }