public bool Proccess_Line(string line, bool advance_line) { ScriptLine new_line = new ScriptLine(); new_line.FullLine = line; string cmd = Get_String(ref line).ToUpperInvariant(); new_line.Command = GetCommandType(cmd); new_line.UnParsedParams = line; return Proccess_Line(new_line, advance_line); }
public void ReadFile(ScriptFile filein) { File = filein.Name; //gotta find the varbeing and varend and read in the middle bool cstarted = false; bool vstarted = false; bool cended = false; string p1, p2, p3; for (int i = 0; i < filein._ScriptLines.Count; i++) { ScriptLine cmd = (ScriptLine)filein._ScriptLines[i]; string line = cmd.UnParsedParams; switch (cmd.Command) { case ScriptCommands.INCLUDE: if (!cstarted) { Globals.scriptthread.Script_INCLUDE(line); } break; case ScriptCommands.PUBLIC: if (cstarted && vstarted) { //defining a variable p1 = ScriptEngine.Get_String(ref line); p2 = ScriptEngine.Get_String(ref line).ToUpperInvariant(); p3 = ScriptEngine.Get_String(ref line); ScriptVariable nv = ScriptEngine.Create_Variable(p1, p2, p3, Var_State.PUBLIC); _Variables.Add(nv); } else if (cstarted) { //a function p1 = ScriptEngine.Get_String(ref line); Add_Function(p1, i, filein, Var_State.PUBLIC); } break; case ScriptCommands.PRIVATE: if (cstarted && vstarted) { //defining a variable p1 = ScriptEngine.Get_String(ref line); p2 = ScriptEngine.Get_String(ref line).ToUpperInvariant(); p3 = ScriptEngine.Get_String(ref line); ScriptVariable nv = ScriptEngine.Create_Variable(p1, p2, p3, Var_State.PRIVATE); _Variables.Add(nv); } else if (cstarted) { //a function p1 = ScriptEngine.Get_String(ref line); Add_Function(p1, i, filein, Var_State.PRIVATE); } break; case ScriptCommands.PROTECTED: if (cstarted && vstarted) { //defining a variable p1 = ScriptEngine.Get_String(ref line); p2 = ScriptEngine.Get_String(ref line).ToUpperInvariant(); p3 = ScriptEngine.Get_String(ref line); ScriptVariable nv = ScriptEngine.Create_Variable(p1, p2, p3, Var_State.PROTECTED); _Variables.Add(nv); } else if (cstarted) { //a function p1 = ScriptEngine.Get_String(ref line); Add_Function(p1, i, filein, Var_State.PROTECTED); } break; case ScriptCommands.STATIC: if (cstarted && vstarted) { //defining a variable p1 = ScriptEngine.Get_String(ref line); p2 = ScriptEngine.Get_String(ref line).ToUpperInvariant(); p3 = ScriptEngine.Get_String(ref line); ScriptVariable nv = ScriptEngine.Create_Variable(p1, p2, p3, Var_State.STATIC); _Variables.Add(nv); } else if (cstarted) { //a function p1 = ScriptEngine.Get_String(ref line); Add_Function(p1, i, filein, Var_State.STATIC); } break; case ScriptCommands.CLASS: cstarted = true; Name = ScriptEngine.Get_String(ref line).ToUpperInvariant(); p1 = ScriptEngine.Get_String(ref line).ToUpperInvariant(); if (p1 != "NULL" && p1.Length != 0) { //gotta find this class... and copy over it's stuff if (ScriptEngine.Classes.ContainsKey(p1)) { Script_Class sc = (Script_Class)ScriptEngine.Classes[p1]; foreach (ScriptVariable nv in sc._Variables) { _Variables.Add(nv.Clone()); } ParentName = sc.Name; ParentFile = sc.File; } else { ScriptEngine.Script_Error("CLASS [" + p1 + "] NOT LOADED PRIOR TO USAGE"); } } break; case ScriptCommands.END_CLASS: cended = true; cstarted = false; break; case ScriptCommands.VAR_START: vstarted = true; break; case ScriptCommands.VAR_END: vstarted = false; break; } if (cended) { break; } } }
public void ReadScript(System.IO.StreamReader filein) { _ScriptLines.Clear(); string line; while ((line = filein.ReadLine()) != null) { line = line.Trim(); ScriptLine sl = new ScriptLine(); sl.FullLine = line; string cmd = ScriptEngine.Get_String(ref line, false).ToUpperInvariant(); sl.Command = ScriptEngine.GetCommandType(cmd); switch (sl.Command) { case ScriptCommands.ENCRYPTED: //need to scrap everything that has been loaded so far... _ScriptLines.Clear(); int key = Util.GetInt32(line); string encoded_script = filein.ReadLine(); filein = Script_Crypt.Decrypt(encoded_script, key); break; case ScriptCommands.IF: case ScriptCommands.WHILE: case ScriptCommands.LOOP: case ScriptCommands.UNKNOWN: if (Globals.ScriptCompatibilityv386) { sl.UnParsedParams = line.Replace("(", " ( ").Replace(")", " ) "); } else { sl.UnParsedParams = line; } _ScriptLines.Add(sl); break; default: sl.UnParsedParams = line; _ScriptLines.Add(sl); break; } } //need to parse out comments in the file here... bool comment_block = false; for (int i = 0; i < _ScriptLines.Count; i++) { string cmd = ((ScriptLine)_ScriptLines[i]).FullLine.ToUpperInvariant(); //start a comment block if (cmd.StartsWith("/*")) { comment_block = true; } if (comment_block) { ((ScriptLine)_ScriptLines[i]).Command = ScriptCommands.NULL; ((ScriptLine)_ScriptLines[i]).FullLine = ""; } //end of comment block // we end after we clear because we want to clear this line still (inclusive) if (cmd.EndsWith("*/")) { comment_block = false; } //normal line comment if (cmd.StartsWith("//")) { ((ScriptLine)_ScriptLines[i]).Command = ScriptCommands.NULL; ((ScriptLine)_ScriptLines[i]).FullLine = ""; } } }
public bool Proccess_Line(ScriptLine command, bool advance_line) { ScriptCommands my_command = command.Command; string line = command.UnParsedParams; bool do_advance = false; #if !DEBUG try { #endif switch(my_command) { case ScriptCommands.SET: Dead_Command("SET","="); do_advance = true; break; case ScriptCommands.MATH: Dead_Command("MATH","="); do_advance = true; break; case ScriptCommands.SORT: Script_SORT(line); do_advance = true; break; case ScriptCommands.DELETE_GLOBAL: Script_DELETE_GLOBAL(line); do_advance = true; break; case ScriptCommands.DELETE: Script_DELETE(line); do_advance = true; break; case ScriptCommands.TEST_WEBSITE: Script_TEST_WEBSITE(line); do_advance = true; break; case ScriptCommands.TEST_ODBC: Script_TEST_ODBC(line); do_advance = true; break; case ScriptCommands.TEST_DNS: Script_TEST_DNS(line); do_advance = true; break; case ScriptCommands.TEST_PING: Script_TEST_PING(line); do_advance = true; break; case ScriptCommands.SEND_EMAIL: Script_SEND_EMAIL(line); do_advance = true; break; case ScriptCommands.MESSAGE_BOX: Script_MESSAGE_BOX(line); do_advance = true; break; case ScriptCommands.NMESSAGE_BOX: Script_NMESSAGE_BOX(line); do_advance = true; break; case ScriptCommands.NMESSAGE_BOX2: Script_NMESSAGE_BOX2(line); do_advance = true; break; case ScriptCommands.INCLUDE: Script_INCLUDE(line); do_advance = true; break; case ScriptCommands.DEFAULT: do_advance = true;//we can just skip over this line, nothing really needed break; case ScriptCommands.CASE: do_advance = true;//we can just skip over this line, nothing really needed break; case ScriptCommands.SWITCH: Script_SWITCH(line); break; case ScriptCommands.ENDSWITCH: do_advance = true;//we can just skip over this line, nothing really needed break; case ScriptCommands.LOCK: return Script_LOCK(line); case ScriptCommands.UNLOCK: Script_UNLOCK(line); do_advance = true; break; case ScriptCommands.SET_EVENT: Script_SET_EVENT(line); do_advance = true; break; case ScriptCommands.THREAD: Script_THREAD(line); do_advance = true; break; case ScriptCommands.BREAK: Script_BREAK(line); break; case ScriptCommands.GET_TIME: Script_GET_TIME(line); do_advance = true; break; case ScriptCommands.CALLSUB: Script_CALLSUB(line); break; case ScriptCommands.RETURNSUB: Script_RETURNSUB(); break; case ScriptCommands.SUB: Script_SUB(line); do_advance = true; break; case ScriptCommands.CALL_EXTERN: Script_CALL_EXTERN(line); break; case ScriptCommands.CALL: Script_CALL(line); break; case ScriptCommands.RETURN: Script_RETURN(line); break; case ScriptCommands.FUNCTION: Script_FUNCTION(line); do_advance = true; break; case ScriptCommands.DISTANCE: Script_DISTANCE(line); do_advance = true; break; case ScriptCommands.WHILE: Script_WHILE(line); break; case ScriptCommands.WEND: Script_WEND(); break; case ScriptCommands.DO: do_advance = true; break; case ScriptCommands.LOOP: Script_LOOP(line); break; case ScriptCommands.FOREACH: Script_FOREACH(line); break; case ScriptCommands.NEXTEACH: Script_NEXTEACH(); break; case ScriptCommands.FOR: Script_FOR(line); break; case ScriptCommands.NEXT: Script_NEXT(); break; case ScriptCommands.IF: Script_IF(line); break; case ScriptCommands.ELSE: //need to jump to the next endif Script_ELSE(); break; case ScriptCommands.ENDIF: do_advance = true;//we can just skip over this line, nothing really needed break; case ScriptCommands.DEFINE_GLOBAL: Script_DEFINE_GLOBAL(line); break; case ScriptCommands.DEFINE: Script_DEFINE(line); break; case ScriptCommands.SLEEP: Script_SLEEP(line); do_advance = true; break; case ScriptCommands.PAUSE: Globals.gamedata.CurrentScriptState = ScriptState.Paused;//ok, stopped do_advance = true; break; case ScriptCommands.END_OF_FILE: Globals.gamedata.CurrentScriptState = ScriptState.EOF; break; case ScriptCommands.END_SCRIPT: Globals.gamedata.CurrentScriptState = ScriptState.Finished; do_advance = true; Globals.l2net_home.SetStartScript(); break; case ScriptCommands.JUMP_TO_LINE: Script_JUMP_TO_LINE(line); break; case ScriptCommands.LABEL: Script_LABEL(line); do_advance = true; break; case ScriptCommands.JUMP_TO_LABEL: Script_JUMP_TO_LABEL(line); break; case ScriptCommands.PRINT_TEXT: Script_PRINT_TEXT(line, false); do_advance = true; break; case ScriptCommands.PRINT_DEBUG: Script_PRINT_TEXT(line, true); do_advance = true; break; case ScriptCommands.GET_RAND: Script_GET_RAND(line); do_advance = true; break; case ScriptCommands.HEX_TO_DEC: Script_HEX_TO_DEC(line); do_advance = true; break; case ScriptCommands.PLAYALARM: Script_PLAYALARM(); do_advance = true; break; case ScriptCommands.PLAYWAV: Script_PLAYWAV(line); do_advance = true; break; case ScriptCommands.PLAYSOUND: Script_PLAYSOUND(line); do_advance = true; break; case ScriptCommands.DELETE_SHORTCUT: Script_DELETE_SHORTCUT(line); do_advance = true; break; case ScriptCommands.REGISTER_SHORTCUT: Script_REGISTER_SHORTCUT(line); do_advance = true; break; case ScriptCommands.USE_SHORTCUT: Script_USE_SHORTCUT(line); do_advance = true; break; case ScriptCommands.TARGET_SELF: Script_TARGET_SELF(); do_advance = true; break; case ScriptCommands.CANCEL_TARGET: Script_CANCEL_TARGET(); do_advance = true; break; case ScriptCommands.UDP_SEND: Script_UDP_SEND(line); do_advance = true; break; case ScriptCommands.UDP_SENDBB: Script_UDP_SENDBB(line); do_advance = true; break; case ScriptCommands.UDP_IP_SEND: Script_UDP_IP_SEND(line); do_advance = true; break; case ScriptCommands.UDP_IP_SENDBB: Script_UDP_IP_SENDBB(line); do_advance = true; break; case ScriptCommands.SLEEP_HUMAN_READING: Script_SLEEP_HUMAN_READING(line); do_advance = true; break; case ScriptCommands.SLEEP_HUMAN_WRITING: Script_SLEEP_HUMAN_WRITING(line); do_advance = true; break; case ScriptCommands.GET_ELIZA: Script_GET_ELIZA(line); do_advance = true; break; case ScriptCommands.GET_NPCS: Script_GET_NPCS(line); do_advance = true; break; case ScriptCommands.GET_INVENTORY: Script_GET_INVENTORY(line); do_advance = true; break; case ScriptCommands.GET_ITEMS: Script_GET_ITEMS(line); do_advance = true; break; case ScriptCommands.GET_PARTY: Script_GET_PARTY(line); do_advance = true; break; case ScriptCommands.GET_PLAYERS: Script_GET_PLAYERS(line); do_advance = true; break; case ScriptCommands.FORCE_LOG: Script_FORCE_LOG(); do_advance = true; break; case ScriptCommands.IGNORE_ITEM: Script_IGNORE_ITEM(line); do_advance = true; break; case ScriptCommands.CRYSTALIZE_ITEM: Script_CRYSTALIZE_ITEM(line); do_advance = true; break; case ScriptCommands.DELETE_ITEM: Script_DELETE_ITEM(line); do_advance = true; break; case ScriptCommands.DROP_ITEM: Script_DROP_ITEM(line); do_advance = true; break; case ScriptCommands.BOTSET: Script_BOTSET(line); do_advance = true; break; case ScriptCommands.INJECTBB: Script_INJECTBB(line); do_advance = true; break; case ScriptCommands.INJECT: Script_INJECT(line); do_advance = true; break; case ScriptCommands.INJECTBB_CLIENT: Script_INJECTBB_CLIENT(line); do_advance = true; break; case ScriptCommands.INJECT_CLIENT: Script_INJECT_CLIENT(line); do_advance = true; break; case ScriptCommands.COMMAND: Script_COMMAND(line); do_advance = true; break; case ScriptCommands.CLICK_NEAREST_ITEM: Script_CLICK_NEAREST_ITEM(); do_advance = true; break; case ScriptCommands.CLEAR_WALLS: Globals.gamedata.Walls.Clear(); do_advance = true; break; case ScriptCommands.ADD_WALL: Script_ADD_WALL(line); do_advance = true; break; case ScriptCommands.CLEAR_BORDER: Globals.gamedata.Paths.ClearBorder(); do_advance = true; break; case ScriptCommands.ADD_BORDER_PT: Script_ADD_PATH_PT(line); do_advance = true; break; case ScriptCommands.NPC_DIALOG: Script_NPC_DIALOG(line); do_advance = true; break; case ScriptCommands.CHECK_TARGETING: Script_CHECK_TARGETING(line); do_advance = true; break; case ScriptCommands.SET_TARGETING: Script_SET_TARGETING(line); do_advance = true; break; case ScriptCommands.TARGET_NEAREST: Script_TARGET_NEAREST(); do_advance = true; break; case ScriptCommands.TARGET_NEAREST_NAME: Script_TARGET_NEAREST_NAME(line); do_advance = true; break; case ScriptCommands.TARGET_NEAREST_ID: Script_TARGET_NEAREST_ID(line); do_advance = true; break; case ScriptCommands.TARGET: Script_TARGET(line); do_advance = true; break; case ScriptCommands.TALK_TARGET: Script_TALK_TARGET(); do_advance = true; break; case ScriptCommands.ATTACK_TARGET: Script_ATTACK_TARGET(); do_advance = true; break; case ScriptCommands.USE_ACTION: Script_USE_ACTION(line); do_advance = true; break; case ScriptCommands.CANCEL_BUFF: Script_CANCEL_BUFF(line); do_advance = true; break; case ScriptCommands.USE_SKILL: Script_USE_SKILL(line); do_advance = true; break; case ScriptCommands.USE_SKILL_SMART: Script_USE_SKILL_SMART(line); do_advance = true; break; case ScriptCommands.USE_ITEM: Script_USE_ITEM(line,false); do_advance = true; break; case ScriptCommands.USE_ITEM_EXPLICIT: Script_USE_ITEM(line,true); do_advance = true; break; case ScriptCommands.ITEM_COUNT: Script_ITEM_COUNT(line); do_advance = true; break; case ScriptCommands.MOVE_TO: Script_MOVE_TO(line); do_advance = true; break; case ScriptCommands.MOVR_WAIT: Script_MOVE_WAIT(line); break; case ScriptCommands.MOVE_SMART: Script_MOVE_SMART(line); break; case ScriptCommands.MOVE_INTERRUPT: Script_MOVE_INTERRUPT(); break; case ScriptCommands.SAY_TEXT: Script_SAY_TEXT(line); do_advance = true; break; case ScriptCommands.SAY_TO_CLIENT: Script_SAY_TO_CLIENT(line); do_advance = true; break; case ScriptCommands.INVEN_GET_UID: Script_INVEN_GET_UID(line); do_advance = true; break; case ScriptCommands.INVEN_GET_ITEMID: Script_INVEN_GET_ITEMID(line); do_advance = true; break; case ScriptCommands.CHAR_GET_NAME: Script_CHAR_GET_NAME(line); do_advance = true; break; case ScriptCommands.CHAR_GET_ID: Script_CHAR_GET_ID(line); do_advance = true; break; case ScriptCommands.SKILL_GET_REUSE: Script_SKILL_GET_REUSE(line); do_advance = true; break; case ScriptCommands.SKILL_GET_NAME: Script_SKILL_GET_NAME(line); do_advance = true; break; case ScriptCommands.SKILL_GET_DESC1: Script_SKILL_GET_DESC1(line); do_advance = true; break; case ScriptCommands.SKILL_GET_DESC2: Script_SKILL_GET_DESC2(line); do_advance = true; break; case ScriptCommands.SKILL_GET_DESC3: Script_SKILL_GET_DESC3(line); do_advance = true; break; case ScriptCommands.SKILL_GET_ID: Script_SKILL_GET_ID(line); do_advance = true; break; case ScriptCommands.NPC_GET_NAME: Script_NPC_GET_NAME(line); do_advance = true; break; case ScriptCommands.NPC_GET_ID: Script_NPC_GET_ID(line); do_advance = true; break; case ScriptCommands.ITEM_GET_NAME: Script_ITEM_GET_NAME(line); do_advance = true; break; case ScriptCommands.ITEM_GET_DESC: Script_ITEM_GET_DESC(line); do_advance = true; break; case ScriptCommands.ITEM_GET_ID: Script_ITEM_GET_ID(line); do_advance = true; break; case ScriptCommands.CLAN_GET_NAME: Script_CLAN_GET_NAME(line); do_advance = true; break; case ScriptCommands.CLAN_GET_ID: Script_CLAN_GET_ID(line); do_advance = true; break; case ScriptCommands.TAP_TO: Script_TAP_TO(line); do_advance = true; break; case ScriptCommands.RESTART: Script_RESTART(); do_advance = true; break; case ScriptCommands.BLOCK: Script_BLOCK(line); do_advance = true; break; case ScriptCommands.BLOCKEX: Script_BLOCKEX(line); do_advance = true; break; case ScriptCommands.UNBLOCK: Script_UNBLOCK(line); do_advance = true; break; case ScriptCommands.UNBLOCKEX: Script_UNBLOCKEX(line); do_advance = true; break; case ScriptCommands.CLEAR_BLOCK: Script_CLEAR_BLOCK(); do_advance = true; break; case ScriptCommands.CLEAR_BLOCKEX: Script_CLEAR_BLOCKEX(); do_advance = true; break; case ScriptCommands.BLOCK_CLIENT: Script_BLOCK_CLIENT(line); do_advance = true; break; case ScriptCommands.BLOCKEX_CLIENT: Script_BLOCKEX_CLIENT(line); do_advance = true; break; case ScriptCommands.UNBLOCK_CLIENT: Script_UNBLOCK_CLIENT(line); do_advance = true; break; case ScriptCommands.UNBLOCKEX_CLIENT: Script_UNBLOCKEX_CLIENT(line); do_advance = true; break; case ScriptCommands.CLEAR_BLOCK_CLIENT: Script_CLEAR_BLOCK_CLIENT(); do_advance = true; break; case ScriptCommands.CLEAR_BLOCKEX_CLIENT: Script_CLEAR_BLOCKEX_CLIENT(); do_advance = true; break; case ScriptCommands.BLOCK_SELF: Script_BLOCK_SELF(line); do_advance = true; break; case ScriptCommands.BLOCK_SELF_ALL: Script_BLOCK_SELF_ALL(); do_advance = true; break; case ScriptCommands.BLOCKEX_SELF: Script_BLOCKEX_SELF(line); do_advance = true; break; case ScriptCommands.BLOCKEX_SELF_ALL: Script_BLOCKEX_SELF_ALL(); do_advance = true; break; case ScriptCommands.UNBLOCK_SELF: Script_UNBLOCK_SELF(line); do_advance = true; break; case ScriptCommands.UNBLOCKEX_SELF: Script_UNBLOCKEX_SELF(line); do_advance = true; break; case ScriptCommands.CLEAR_BLOCK_SELF: Script_CLEAR_BLOCK_SELF(); do_advance = true; break; case ScriptCommands.CLEAR_BLOCKEX_SELF: Script_CLEAR_BLOCKEX_SELF(); do_advance = true; break; case ScriptCommands.GET_ZONE: Script_GET_ZONE(line); do_advance = true; break; case ScriptCommands.GENERATE_POLY: Script_GENERATE_POLY(line); do_advance = true; break; case ScriptCommands.GET_EFFECTS: Script_GET_EFFECTS(line); do_advance = true; break; case ScriptCommands.GET_SKILLS: Script_GET_SKILLS(line); do_advance = true; break; case ScriptCommands.UNKNOWN://unknown command... skip //maybe this is a variable thingy... do_advance = true; if (command.FullLine.Length > 0) { Script_CALL(command.FullLine); do_advance = false; } break; case ScriptCommands.NULL: do_advance = true; break; default: //a command for which no handler exists... PUBLIC or VAR_START or something... do_advance = true; break; }//end of switch #if !DEBUG } catch { //we had a bad script thingy ScriptEngine.Script_Error(command.FullLine); do_advance = true; } #endif if (advance_line && do_advance) { Line_Pos++; } return true; }
private ScriptLine Get_Line(int cnt, string file) { try { return ((ScriptLine)((ScriptFile)Files[file])._ScriptLines[cnt]); } catch { ScriptEngine.Script_Error("failed to get line " + cnt.ToString()); ScriptLine sl = new ScriptLine(); sl.Command = ScriptCommands.END_OF_FILE; return sl; } }