Funny how you talk about yourself in 3rd person
This is a discussion on Beware about KO4YOU within the Private Servers forums, part of the Knight Online (ko4life.com) category; Funny how you talk about yourself in 3rd person...
Page: 2
Funny how you talk about yourself in 3rd person
Hah. I'm suuuuuure that's the case and things don't generally just appear to work at a glance. ^^
There's a liiiittle more to the source development than making things respond to stuff. Things actually have to do stuff, and do it well enough to not break.
A lot of people seem to think the source base as I left it publicly was pretty much done for its version, and that's far from true. A lot of it was temp waiting to be cleaned up and implemented properly, for instance.
Looking at the 'development' to the project since, people seem to think this is fine and working correctly and just add onto it with hackery. It's terrifying.
There's only a few people in this community capable of pulling off any actual development, and none of them are affiliated with Grobar. So... \o/
I'm suuuuuuuuuure they're "almost finished". If by "almost finished" you mean in "okay I can run it and people can login and start sending me all the monies", anyway. D:
I know this is out of the blue and probably not the best place to ask, but what languages do KO files use? I played this game and scrolled this sub for years without ever having any interest for its code.
3rd year CS student in college and still haven't looked into any complicated game file yet, so I'm just super curious.
C++ for the login/game server + client (although you'll probably work with the client's binaries), Microsoft SQL server for the database server.
X86 assembly otherwise for reverse engineering official server/client.
EVT (their own custom format) for quest scripts on older versions, Lua for newer versions (though the implementation is just them using Lua in the same fashion they had quests written in EVT, which is horrible).
I could have guessed that
EVT (their own custom format) for quest scripts on older versions, Lua for newer versions (though the implementation is just them using Lua in the same fashion they had quests written in EVT, which is horrible).
never heard of both . maybe im just not curious enough. Lua seems pretty straight forward though.
Why would they use a different language for quest scripts? Portability purposes?
thanks for answering man
EVT was horrible; very difficult to maintain. It was probably a contributing factor, but they also reimplemented how quests in general to work in a more NPC-centric fashion (before a quest script encompassed all NPCs in the whole zone), and tried to automate a lot of the generic stuff, so with having to redo it all anyway, it makes sense to use an actual scripting language this time around.
Having said that, it didn't stop them from implementing the scripts themselves poorly, mimicking the logic of their old EVT system. Which sucked. Horribly.
Example of EVT:
(only a small snippet of Moradon's)Code:EVENT 1001 ; E RUN_EVENT 1003 ; 파멸의 갑옷 END EVENT 1003 ;유저의 레벨을 체크한다. A CHECK_LV 35 120 ;유저레벨이 35이상인 경우 E RUN_EVENT 1005 END EVENT 1004 ;유저의 레벨을 체크한다. A CHECK_LV 0 34 ;유저레벨이 35미만일 경우 E SAY -1 -1 1002 -1 -1 -1 -1 -1 -1 -1 -1 -1 E RETURN END EVENT 1005 ;유저레벨이 35이상인 경우 E RUN_EVENT 1006 ; 이벤트 1007이 일어난 경우 E RUN_EVENT 1007 ; 이벤트 1007이 일어나지 않은 경우 END EVENT 1006 ; A EXIST_COM_EVENT 1007 ;이벤트 1007이 일어난 경우 E RUN_EVENT 1010; END EVENT 1007 ;◎이벤트 1007이 일어나지 않은 경우(처음 실행시) A NOEXIST_COM_EVENT 1007; E SELECT_MSG 14301 1001 1 1008 2 1009 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;들어준다/들어주지않는다 E SAVE_COM_EVENT 1007 ;이벤트 번호를 저장한다. END EVENT 1008 ;들어준다 E SAY 1010 1010 1003 1004 1005 1006 1007 -1 -1 -1 -1 -1 ;들어준다 상위 확인 END EVENT 1009 ;들어주지 않는다 E SAY -1 -1 1008 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;상위 확인 E RETURN END EVENT 1010 ; ◎상위, 확인시 이리로 - 메뉴박스(2번이상시) E SELECT_MSG 14301 1001 101 1008 102 1011 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;대화/퀘스트 아이템 END EVENT 1011 ;◎퀘스트 아이템 메뉴 E SELECT_MSG 14301 1015 201 1012 202 1025 203 1038 204 1051 205 1064 206 1077 105 1010 -1 -1 -1 -1 -1 -1 ;NPC 아이디/대사/201 투구 202 상의 203 하의 204 건틀렛 205 부츠 206 벨트 105 메뉴로 END EVENT 1012 ; ♧투구재료1016 E SELECT_MSG 14301 1016 103 1013 104 1011 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;103 재료주기 104 아이템 메뉴로 END EVENT 1013 ;♧투구 받기전 검사 E RUN_EVENT 1014 ;이미 실행 E RUN_EVENT 1015 ;비실행 조건 만족 E RUN_EVENT 1016 ;비실행 조건 비만족 END EVENT 1014 ;이미 실행 A EXIST_COM_EVENT 1015 ;이미 아이템을 받았는지 확인 E SAY -1 1011 1022 -1 -1 -1 -1 -1 -1 -1 -1 -1 ;이미 있잖은가?! END
Everything's tied to event #'s. NPCs are tied to types, and those types are tied to base event #'s, which are then called in the script.
From there the logic flow is just a nightmare. Conditionals are handled by calling different events and checking (checks [lines prefixed with A] are always handled before executed logic [E], no matter the order they're actually specified in the script), so for something like:
You'd do something like:Code:if not hasItem(123456789) then say(-1, 1011, 1022, -1, ...) return end say(-1, 1011, 1023, -1, ...)
Or thereabouts. It was clunky as hell, especially for convoluted logic. Yuck.Code:EVENT 1 E RUN_EVENT 2 E RUN_EVENT 3 END EVENT 2 A CHECK_NOEXIST_ITEM 123456789 1 E SAY -1, 1011, 1022, -1, ... E RETURN END EVENT 3 E SAY -1, 1011, 1023, -1, ... END
Really not that great on the eyes, either. Trying to piece together that mess with larger examples ... so much fun.
It doesn't seem too bad, just very procedural, but the structure looks conventional.
I clearly understand how it can become hard to keep track of, though, with such resembling lines and insignificant variable names.
Did you learn to code it yourself with KO files or were you taught how to use it? and what's with the mandarin in there?
also, we'd always hear about how messy KO code is. I just completed a programming design & pattern class this semester .
how are the game files designed in terms of patterns? does it follow the SOLID principles? is it done professionally?
thanks for answering again. I know this is not an AMA. like I said, genuinely curious.
Last edited by hellzbellz19; 06-06-2017 at 10:34 AM.
It's just really bloated and unwieldy, really. There's no good reason for having to write so much code to do a simple task, e.g. perform a simple check.
Myself, predominantly. Also, that's Korean not Mandarin -- mgame + NoahSystem (I think they're all part of the same thing now, I don't know for sure) are Korean companies. It's an except from their official script.
Oh god, no. The original code is a mess. Why do you think they've had so many issues?
You get recurring issues with things with copied code; death handling/reward logic, for instance, is copied to every single applicable place. Which leads to their inconsistencies and stupid bugs, e.g. with the arena/coin thing that used to happen -- problem was essentially just their code not being synced because it was copied and pasted everywhere. Even the entire skill system is copied, 3 times, to a certain degree. Player vs player / player vs NPC / NPC vs player. Granted, the non PvP implementations were very much neutered, but still, there was absolutely no reason to do this. Why they did it though, was because 1. they didn't share logic between players/NPCs at all (i.e. in the public project I ended up shifting it all into a base Unit class, and had them both derive from it so we could interact with them the same), and 2. AI was in a separate server (which is understandable given server limitations at the time, but the logic could very well still have been reused regardless).
Even now, they implement things which never cease to amaze me. e.g. Manufacturing:
Essentially at its core very similar to existing exchange systems, aside from the UI -- could easily have just reused that, as with other things. But nope, they implemented a new system for it which passes the server a STRING containing the item IDs, rather than just the item IDs itself. So the server then has to parse the string, which isn't even in an easy-to-parse format: it's literally just 12345678901231234567890123 etc. Which is fine so far, since it pads them -- BUT then they have new item IDs with 10 digits now. So... um. Good luck with that. :|
I don't even know what they were thinking, but that goes for most things...
No problem, but you should probably be PM'ing me 'cause it's kind've off-topic... but at least it's better than the topic's existing content. XD
There is a lot of ideas that people can implement by just getting to know how EVT really works. Majority of the 'devs' are implementing just the standard that twostars left them with the guide but there is a lot more that could be done there.
If one is going to create an unique 1299 server, EVT is something that he should focus a lot.
It is fun and easy to work with EVT's. Sadly, i don't see any server doing anything more with the EVT other than what Twostars left :/
A thing on the on the original content of the topic.
Osmanx said that he can patch security things related to SOACS, but grobar can't?!?
Zone MYKO is struggeling 14 days due to failure of SOACS, as we see osmanx can't fix it, so he is giving zonemyko some bad suggestions such as changing the host.
Now it's very funny, that Grobar can - Somehow fix the SOACS exploit, but osmanx can't But hey, osmanx is the guru, just that he lies to ZoneMYKO what real problem is
And grobar is the one that can't secure server, yet creator of SOACS can't even fix zonemyko security hole lmao.
Sadly still doesn't change the fact that Osman is the owner of the files and he has the rights to them. If you don't like the files, then don't use them. Most people are using Soacs because they're the best files around. Either way, since nobody has anything to add to the actual topic at hand, I'm locking this topic. The warning has been sent.
Bookmarks