Esempio n. 1
0
    public Func <NPCConversationManager, int, bool> compileNPC(int npcID, NetworkConnection player)
    {
        objManager = new NPCConversationManager(player);
        string codeString2 = @"
            using System;
            using NPCManager;
            class NpcScript{ 
                public static bool active(NPCConversationManager manager,int state) { 
                    if(state == 0){
                        manager.sendNext(""|t|0.9|t|OMG|t|orgSpeed|t| Hello fellow stranger. I need some help, can you please collect five |I|1000|I| and ten |I|1002|I|"");
                        return false;
                    }
                    return true;
                }
            }
            ";
        //kompilerar stringen och gör den til lett Assembly objekt.
        Assembly assembly = compNpc(codeString2, false);
        //skapar ett objekt av klassen i codeString2 stringen.
        object runTimeType = assembly.CreateInstance("NpcScript");
        //hämtar metoden OnRun ur classen.
        MethodInfo method = runTimeType.GetType().GetMethod("active");

        //Skapar en Action vilket betyder att metoden ovan inte returnar något, om den skulle returna något skulle man skriva Func istället.
        //CreateDelegate skapar en Delegate vilket blir castat till en Action. Action tar emot så många parametrar som fanns i metoden. vilet är ett objekt och en int.
        Func <NPCConversationManager, int, bool> func = (Func <NPCConversationManager, int, bool>)Delegate.CreateDelegate(typeof(Func <NPCConversationManager, int, bool>), method);

        //här kör den OnRun metoden.
        func.Invoke(objManager, 0);
        return(func);
    }
Esempio n. 2
0
 public void init(NetworkConnection player)
 {
     objManager = new NPCConversationManager(player);
 }