Oh well it seems that all those commands are hidden in the sever exe.
You could spend your entire life putting in the eglish words in the space provided in the server exe, then relaying those changes to the thousands of different item files.
Actually, the language DLL I injected into the client (and I believe PT+ is improving that idea now too) did it in one hit.
In the language file you note the offsets of each Korean string, then the translated string, and it then reads only configuration files written in English.
ie. all existing server configs become invalid and you have to re-write them all... but you can use batch search and replace with grep-like-tool ... Notepad++ and MadEdit both have "Search and replace in files" options equivalent to sed [GNU Stream EDitor] but neither as powerful as grep regular expression matching. But you also don't need it. A Perl script (probably php too) would do a beautiful job... So, there are lots of options. ^_^
You could follow the Fantasy route too and add a section with English translations and update pointers to the Korean string tables to point at the translated version. It's actually read like an array of variable length elements. So after one string, look for another, if it exists continue looping to look for a match, so (IMS) you only need to update one pointer for each time that each table is used. (some tables are re-used in other lexers)
What does that mean? Well, sometimes you see the same group of verbs (commands / key words) show up in NPCs and in Monsters (for example) or in Armour and Weapon style items... that's the same verb list being used in lexical analysis routines for more than one type of file. You'll also find more than one verb list being checked against all the lines of a certain type, and limited verb lists being used to check lines following certain verbs. So when a line is found which does not match any verb on the limited list, that signals the end of that block and we go back to a full search.
The same applies where nouns (like a verb list, but values rather than instructions) are used mid-line, when we get the Korean "Nil" for (what I'm told is termed) "Air Drop" or when it's used to indicate an integer less than 0 and greater than -1. (it's not just zero, it's actually nothing at all XD this happens in PT when attributes may have a value of 0 or 250 or 5000 or -200 but may also be "unlisted", which is not 0 or any other value
)
There seems to be "something like" a macro in the source which creates a basic line lexer, so the code for each of these reads is
very similar in it's operation, but with differences in the word lists it compares against, how many of them there is, what the search string terminator(s) is / are. (Space or Tab? Carriage Return, Line Feed pair? Space only? Space or Tab, or Comma etc.)
Each time a match is found on the input with a word on the word list, it is enumerated, and the result is passed to a switch, case type code block for processing of the enumerated command. That processing often involves more lexical analysis with more word lists.
Oh... and, of course, between each word going into the enumeration routine, there is lexical filtering to trim white space and punctuation, which also seems to be macroed. (it could be a common function the the assembly optimizer has decided to "break out" into full code, but since it doesn't look "optimal" to my eye, I suspect it was macro generated code)