На ява сборке все написано на яве. В общем там 2 модуля (третьим можно назвать геодату) - скомпилированные java (вернее архивы jar) и датапак. Основной исполняемый явой файлик в такой сборке - l2jserver.jar, в нём содержится множество файлов-классов, которые отвечают за работу всем остальным. Короче, назовем его ядром.
В датапаке уже содержатся диалоги, таблицы и скрипты скилов, квестов, шмоток, описание инстов, короче всего того контента в игре, с которым непосредственно должно работать ядро. Таблицы скилов, шмоток, например, находились в sql файлах. Диалоги в игре, например, выглядят как обычные html страницы, с ограниченным синтаксисом. Квест - это набор диалогов соответствующих npc и скрипт на питоне. Скрипты довольно простые, типа
def onEvent (self,event,st) :
htmltext = event
if event == "30120-1.htm" :
st.set("cond","1")
st.setState(State.STARTED)
st.playSound("ItemSound.quest_accept")
elif event == "30094-1.htm" :
st.giveItems(MAP,1)
st.set("cond","2")
elif event == "31706-1.htm" :
st.takeItems(MAP,1)
st.set("cond","3")
elif event == "30094-4.htm" :
if st.getQuestItemsCount(MEDICINAL_HERB) > 19 :
st.takeItems(MEDICINAL_HERB,20)
st.set("cond","5")
else:
htmltext="You don't have enough materials"
st.set("cond","3")
elif event == "30094-7.htm" :
if st.getQuestItemsCount(SPIRIT_ORES) >= 500:
st.takeItems(SPIRIT_ORES,500)
st.set("cond","6")
Также могут быть скрипты и на яве.
Я занимался с датапаком, Закумар с ядром. Всех нюансов работы уже не помню, в основном сводилось к тому, что нужно было добавить отсутствующий контент или неработающий скил. Хорошей помощью был форум сборки, где делились своими наработками, геодатой и т.д.