The actual filename may be different since the first 2 characters designate the country of players.
More precisely: the file contains plain text encoded with a given codepage and the default system codepage of the players shall be the same or the game client will display garbage.
The cn_string.DB uses CP 936; other packages posted on ePvP include tw_string.DB, kr_string.DB, a de_string.DB containing English, and so on. NotePad++ is usually able to find out the right codepage when you open a ??_string.DB with it.
The beginning of (one) cn_string.DB is:
1 把异端者彻底赶出去!!(至尊红颜)
2 Li laka Amon-Ra!!(至尊红颜)
3 我让你骨肉分离!!(至尊红颜)
which translates to:
1 Drive the heretics out!! (Supreme Red)
2 Li laka Amon-Ra!! (Supreme Red)
3 I let you separate your flesh!! (Supreme Red)
Better English translations attached.
The structure of the ??_string.DB files is:
repeat until EOF
index (1 or 2 digits, ASCII (or any) encoded)
CRLF
sentence (encoded with a given codepage)
CRLF
end
The name of the used file is stored in plain by the end of ps_game.exe.
Alternatively, the Lua engine (not for clients ep.3) offers 2 methods to have a mob speaking.
The first uses immediate msg and thus rely on msgs defined server-side.
The second uses msg read from the sysmsg-uni.txt which is client-side.
LuaSay(message, distance)
Say a message, defined as an immediate string
message a string
distance only players within this distance from the mob will heard the message
LuaSayByIndex(index, distance)
Say a message, defined by its index within sysmsg-uni.txt
index the index of the string to say
distance only players within this distance from the mob will heard the message