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); }
public void init(NetworkConnection player) { objManager = new NPCConversationManager(player); }