RUOSI
Четверг, 10.10.2024, 07:44



Приветствую Вас Гость | RSS
[ Главная ] [ Регистрация ] [ Вход ]
Меню сайта

Разделы новостей
Общие новости [29]
Новости серверов OSI и EA [7]

Главная » 2012 » Май » 29 » Tale about two stupids (UPDATED 12 July 2012)
Tale about two stupids (UPDATED 12 July 2012)
09:58
Well, i didn't want discuss that code and his author but when i got the link to runuo.com forums i changed my mind. Epila (who wrote some comments to my previous post here) started a topic at runuo.com forums (http://www.runuo.com/community/threads/the-new-uop-file-format.514994/#post-3885301) looking for help with new 2d UOP files format. After reading that topic i had a problem - i couldn't stop laughing!  The title of this story tells us about the two stupids. OK,  meet the first dumb - mr. HellRazor ;) His answers in that topic are great! It's filled with very 'good' logic. First post (#4) quote: 'Perhaps they have 2 files in the .UOP, one being the index and one being the MUL?' Only not very smart man can imagine that smart guys (EA Mythic are smart guys, aren't they?) will pack current files without any change without compression to another file adding extra metadata to it. Second post (#6) quote: 'Check out Jeff's OpenUO SDK source to see how he did it: http://openuo.codeplex.com/' At this moment i started laughing. Do you really want to see how he did it? Ok, i'll show you 'HOW HE DID IT' ;)

Opening the OpenUO subversion, we need file FileIndex.cs because it contains Jeff's changes to 'support' uops - http://openuo.codeplex.com/SourceControl/changeset/view/75337#1642112
Looking for method ReadUOPEntries() and let's look at the code inside it. It contains the following code:

int x = 0;

foreach (var uopEntry in uopEntries)
{   
       if (2855 == x)
       {
       }
       x++;

       // creating new index entry from the collection entry and adding it to the entries list
}

Well, when i first time saw this - i was stucked. I think you too - he added counter variable and used it for empty if check? WTF? He compared counter with 2855. Why 2855, not 3000 or 99999? I can explain. First time when Jeff looked at uop format he thought that it's now just a collection of ordered data chunks and he can simply concatenate chunks and assign it their order index (from 0 to chunks count -1). Man said - man did. But soon he realized that he needs index - valid index for chunks. Because each chunk in UO has an ID. Really each dataset (art, gump, sound, etc) has and index table (from 0 to table limit, for art it's 0x13fdc, for gumps it's 0x10000 etc) and that table has skips. Yep - first chunk can have index 0 and second can have index 34! He looked at artlegacymul.uop and found that it keeps 2 parts. First part is land tiles (2855) and second is static tiles. He thought - well it's a solution! He just added check for 2855 and separate tiles. But he soon realized that it's not a solution because he still cannot get index data ;) After that he stopped development of that method ;) That's why we see in code above that strange check. Just note that this code tries to handle ANY uop (not only art, so 2855 check is absurd for gumps/sounds/maps) That's why OpenUO still doesn't have UOP solution and UO Fiddler too from March 13 to May 29 ;) 
That was a short (;)) story about dumb and dumber in uo freeshards communities ;) Thanks for attention ;)

P.S. Hint for RunUO Team - you can find another dirty hack for reading land tiles from map muls (you found one working with offset) but it will be more complex ;) But it's not the way like OSI uses (and me too) ;)
P.P.S. Just forgot to send greetings to my old dear friend Phantom, how are you? ;)

P.P.P.S. UPDATE: I should apologise for last update about Vorspire. Problem was in someone (Ryan, did you?) who wiped HellRazor's post about Jeff's fail. The next post in that thread by Vorspire was really an answer to HellRazor's one, but not as a replacement for it. Just wanted to clear that situation, but it doesn't change the facts about HellRazor posts and Jeff's code -> so the thread's name is still valid ;)
Категория: Общие новости | Просмотров: 6546 | Добавил: ruosi | Рейтинг: 0.0/0
Всего комментариев: 2
2 ruosi  
0
I'm glad that all runuo community finally found that little trick with hashes wink Better late than never smile They will merge both clients (as i predicted 2 years ago) and it will be 3d format for data (not splitted muls). About 7.0.26: EA Mythic devs are so kind! They afraid that runuo guys will have a heart attack if they put login data in hex mode wink So they put it as plain text -> for shards using standard ports (7775, 7776) it's no problem: just add '<YOUR SERVER IP> login.ultimaonline.com' to your hosts files and it will work wink If you really want to change port just open client.exe, found 'login.ultimaonline.com' and change port to yours wink

1 Andreew  
0
UOPs are no hard to decode, classic client's uop have a EC mythic package logic, but looks more like splitted legacy mul wink I wonder, why they still using uncompressed data. But last changes make me belive, that in future we will have only one client, one uop file structure, with options, which allow to switch between legacy and ec.

to author Ruosi -> am I right, that new client 7.0.26.x no longer support login.cfg? Hardcoded in client.exe like in EC?

Anyway, mr ruosi - my russian companion of disassembling to small parts whole UO I wish You all best!

Greetings from Polish freeshard 'UOClone'

smile

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Календарь новостей
«  Май 2012  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031

Поиск


Copyright RUOSI © 2024      Сайт управляется системой uCoz