Jump to content

exec

Administrators
  • Posts

    1176
  • Joined

  • Last visited

  • Days Won

    335

Posts posted by exec

  1. 2 hours ago, Cryptic said:

    Welcome! You may want to play mabi a bit (since a lot has changed) to get a good understanding of it. Plus if you want to log anything, logging it as a total noob would be difficult :P

    Depends, there's still newbie stuff that has to be logged^^

  2. Now that Soul Stones are working, I was wondering if anyone has a Nao with non-standard dress, to log how that works. We have a comment mentioning Nao's outfits in our creature helper, but that byte doesn't seem to do anything, and the person who wrote that comment is hard to come by today.

    If you have a non-standard outfit, could you log a) how you login, and b) how you get resurrected by Nao? Optionally it would be great to get a log of how you give her another dress.

  3. Writing everything down would work, but you have to make sure to get the line breaks and paragraphs right in that case. Alternatively you could use Morrighan+MabiPale to log the packets, and get the exact text sent to the client.

  4. I know, collecting dialog is boring, but if you feel like doing some PTJs, think about logging the dialog, which is the most time consuming part of adding the PTJs. If it wasn't for that, some of them could be added in a matter of minutes.

    Specifically, we need these dialogues:

    • Dialog for when you're already doing a different PTJ.
    • Dialog for coming back early without being done.
    • Dialog for coming back early after being done.
    • Report later dialog.
    • Report now dialog.
    • Dialog for reporting without having done anything.
    • Dialog for reporting with having only done a little. (You get different dialogues and rewards, based on the amount you've done.)
    • Dialog for reporting with having done almost everything.
    • Dialog for reporting with having done everything.
    • Dialog for PTJ keyword while no PTJs are given out.
    • Dialog for declining the PTJ offer.
    • If deliver PTJs go to various NPCs, the dialog for each of them.

    As you can see, every single PTJ takes several in-game days to get everything, but there's no way around it, to implement them, we need the dialog =|

    I'm working on logging Dilys right now, and Endelyon is already done.

  5. While adding the fomor scroll hunting quests, I've noticed a few unused fomor scrolls, which give us options for custom content, either by implementing the quests they were intended for, and their monsters, or by replacing them for custom ones. Namely, the unused ones are:

    • 71014: Gray Dire Wolf Fomor Scroll
    • 71020: Giant Spider Fomor Scroll
    • 71024: White Fox Fomor Scroll
    • 71027: Black Bear Fomor Scroll
    • 71033: Giant Rat Fomor Scroll
    • 71036: Golem Fomor Scroll
    • 71046: Black City Rat Fomor Scroll
    • 71048: Boar Fomor Scroll
    • 71053: Giant Worm Fomor Scroll
    • 71054: Gargoyle Fomor Scroll
    • 71071: Dungeon Rat Fomor Scroll

    Some are monsters I didn't know yet, and 2 are bosses, which I find really intriguing. I also wonder why they didn't add Giant Worm and Gargoyles. Especially Gargoyles are monsters you encounter very frequently in early generations after all.

    • Like 1
  6. It's been some time since I tried to work out this DungeonInfo packet, but the general idea is that every single tile for every floor marked as "custom" in the dungeon db is sent to the client, for a total of 225 for a 15x15 floor, instead of only sending where the rooms are supposed to be, which leaves the layout generation to the client. This is because the Nekojima Dungeon actually uses a grid layout iirc, something that the dungeon generator can't generate, so they added a way to send the dungeon floor layouts from the server.

    As such, the packet structure differs slightly from our current DungeonInfo packet. Instead of this:

    packet.PutInt(dungeon.Generator.Floors.Count);
    foreach (var floor in dungeon.Generator.Floors)
    {
    	var rooms = floor.GetRooms();
    
    	packet.PutInt(rooms.Count);
    	foreach (var room in rooms)
    	{
    		packet.PutByte((byte)room.X);
    		packet.PutByte((byte)room.Y);
    	}
    }

    You get this:

    packet.PutInt(dungeon.Generator.Floors.Count);
    foreach (var floor in dungeon.Generator.Floors)
    {
    	var rooms = floor.GetRooms();
    
    	packet.PutInt(/* floorWidth (e.g. 15) */);
    	packet.PutInt(/* floorHeight (e.g. 15) */);
    	foreach (var room in rooms)
    	{
    		// Short  : 0
    		// Int    : 388910688
    		// Short  : 0
    		// Short  : 0
    		// Byte   : 0
    		// Short  : 0
    		// Byte   : 0
    		// Short  : 0
    		// Byte   : 0
    		// Short  : 0
    		// Byte   : 0
    		// Short  : 0
    	}
    }

    I did some research on what these values mean back then, and I did figure a few things out, but unfortunately it seems I don't have that data anymore =/ It was limited anyway though, because of how tedious it was. The client crashes very easily, if you make even the slightest mistake. It might make sense to take another look though, now that we know a whole lot more about dungeons.

  7. This was originally posted by Arufonsu on the old forum, between December 2012 and March 2013. While we don't need normal dungeon logs anymore, he made some logs of Nekojima, a special dungeon, that works differently from all others, as the floor layout is generated by the server and sent to the client, tile by tile.

    Quote

    NekoJima Dungeon and Commons

    *About Cat's Eyes and Arbeits Research - Need to do more research.

    Spoiler

    Cat's Eyes: Item needed as dungeon pass
    you need to complete certain quests in order to be able to get into the dungeon, that's so far what some friends i recently made in JP told me, still need to do more research on this, at least they were kind and took me into a dungeon run and logged the needed packets.

    Spoiler

    jJs28.png "Cat's Eye"_"キャッツアイ"- stackable up to 100
    Obtainable from;
    *Part Time Jobs (Source; wiki jp) (all of them are from intermediate level)

    Spoiler

    Thathis

    Spoiler

    宝石を採集する仕事。[???]
    を頼まれた。ネコ島鉱物採取地で探してみよう。

    • ペリドットを9個採集する
    • ラピスラズリを5個採集する
    • ファイアオパールを10個採集する
    • 制限時間:残り11時間(20時)
    • 報告可能時間:残り6時間(14時)~
    • 報酬
    • 基本
    • 経験値2800 賞金2800G
    • 完全遂行
    • キャッツアイ 1個
    • 一般報酬
    • ★★★★★経験値2800 賞金2800G
    • ★★★★★経験値1200 賞金4000G
    • ★★★★★経験値5200 賞金1000G

    Bastet

    Spoiler
    • マタタビの実を集める仕事。[マタタビの実40個]
    • を頼まれた。マタタビ畑に行ってみよう。
    • [マタタビの実]40個を納品する
    • 制限時間:残り11時間(21時)
    • 報告可能時間:残り7時間(14時)~
    • 報酬
    • 基本
    • 経験値2800 賞金2800G
    • 完全遂行
    • キャッツアイ 1個
    • 一般報酬
    • ★★★★★経験値2800 賞金2800G
    • ★★★★★経験値1200 賞金4000G
    • ★★★★★経験値5200 賞金1000G

    Dagon

    Spoiler

    魚を納品する仕事。[マタタビ鯛10匹]を頼まれた。
    ネコ島の釣り場へ行ってみよう。

    • マタタビ鯛を10匹納品する
    • 制限時間:残り6時間(12時)
    • 報告可能時間:残り3時間(9時)~
    • 報酬
    • 基本
    • 経験値2800 賞金2800G
    • 完全遂行
    • キャッツアイ 1個
    • 一般報酬
    • ★★★★★経験値2800 賞金2800G
    • ★★★★★経験値1200 賞金4000G
    • ★★★★★経験値5200 賞金1000G

     

    **Mining(haven't found any yet?)
    **Fishing(about to try..)
    -Cat's bells are to obtainable though Golden Rat Man boss, rats and rat mans in the south island.
    -Note; the dungeon works like this: you give cat's eyes to the door.

    http://www.youtube.com/watch?v=6EX5jFGuR0w

     

    Nekojima's Dungeon

    Spoiler

    Interesting Tips and curiosities:
    1)"the number of big cat warriors indicates the room you are at"
    Let's say you are in a certain room, and from the whole horde of cat warrios, there's 3 "big" cat warriors, that means you are in the room #3.
    2) Basically, the dungeon is a kind of maze, where (according to the ones i went with) a lot of people get lost. there's no downstairs, but a Neko statue (prop) at the end of every floor, which will lead you to the next floor atm you touch (hit action) it.
    3) The minimap is forcedly blocked though the string "<option no_minimap="true"/>"in the OP 9470
    4) How to: Put Quotation Marks in a String for C#

    NekojimaDG-Packets.txt

    http://youtu.be/FKaW8S9S9VI

    Entrance (Tested and working! [too many arrays...])
    NekojimaEntrance.cs (like the video shows, the test been made on Math altar)
    *might research later about a way to do it on item-give to the proper door and the cutscene (OPs 186A6, 186A0 and 186A7)

    1F

    Spoiler
    
    
    
    //NEKO TEST-DG 1F@@@ (under HandleTouchProp)
    if (creature.Region == 10008)
    {
    WorldManager.Instance.CreatureLeaveRegion(creature);
    creature.SetLocation(10009, 3648, 32169);//Warp to 1st Floor
    client.Send(PacketCreator.EnterRegionPermission(creature));
    var F1 = new MabiPacket(0x5334, Id.Broadcast);// EntitiesSpawn for 1st Floor (props)
    F1.PutShorts(6, 160);
    F1.PutInt(137);
    F1.PutBin(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x0A, 0x00, 0x04, 0x00, 0xA1, 0x27, 0x19, 0x00, 0x06, 0x00, 0x01, 0x03, 0x00, 0x00, 0xA3, 0x60, 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x01, 0x00, 0x07, 0x00, 0x44, 0x60, 0xA3, 0x00, 0x00, 0x19, 0x27, 0x00, 0x00, 0x00, 0x00, 0x96, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFD, 0x46, 0xD0, 0x0F, 0x49, 0x40, 0x00, 0x00, 0x80, 0x3F, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x07, 0x63, 0x6C, 0x6F, 0x73, 0x65, 0x64, 0x00, 0x04, 0x00, 0x00, 0x39, 0xC0, 0x74, 0x1D, 0x76, 0x8B, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00 });
    F1.PutShort(160);
    F1.PutInt(137);
    F1.PutBin(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x0A, 0x00, 0x04, 0x00, 0xA1, 0x27, 0x19, 0x00, 0x13, 0x00, 0x01, 0x03, 0x00, 0x00, 0xA3, 0x60, 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x01, 0x00, 0x07, 0x00, 0x44, 0x60, 0xA3, 0x00, 0x00, 0x19, 0x27, 0x00, 0x00, 0x00, 0x00, 0x61, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x46, 0xDC, 0xCB, 0x96, 0x40, 0x00, 0x00, 0x80, 0x3F, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x07, 0x63, 0x6C, 0x6F, 0x73, 0x65, 0x64, 0x00, 0x04, 0x00, 0x00, 0x39, 0xC0, 0x74, 0x1D, 0x76, 0x8B, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00 });
    F1.PutShort(160);
    F1.PutInt(134);
    F1.PutBin(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x0A, 0x00, 0x04, 0x00, 0xA1, 0x27, 0x19, 0x00, 0x14, 0x00, 0x01, 0x03, 0x00, 0x00, 0xA3, 0x6D, 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x01, 0x00, 0x07, 0x00, 0x44, 0x6D, 0xA3, 0x00, 0x00, 0x19, 0x27, 0x00, 0x00, 0x00, 0x00, 0x61, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFD, 0x46, 0xDB, 0x0F, 0xC9, 0x3F, 0x00, 0x00, 0x80, 0x3F, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x04, 0x6F, 0x66, 0x66, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00 });
    F1.PutShort(160);
    F1.PutInt(137);
    F1.PutBin(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x0A, 0x00, 0x04, 0x00, 0xA1, 0x27, 0x19, 0x00, 0x14, 0x00, 0x02, 0x03, 0x00, 0x00, 0xA3, 0x60, 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x01, 0x00, 0x07, 0x00, 0x44, 0x60, 0xA3, 0x00, 0x00, 0x19, 0x27, 0x00, 0x00, 0x00, 0x00, 0x61, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFD, 0x46, 0xD0, 0x0F, 0x49, 0x40, 0x00, 0x00, 0x80, 0x3F, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x07, 0x63, 0x6C, 0x6F, 0x73, 0x65, 0x64, 0x00, 0x04, 0x00, 0x00, 0x39, 0xC0, 0x74, 0x1D, 0x76, 0x8B, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00 });
    F1.PutShort(160);
    F1.PutInt(137);
    F1.PutBin(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x0A, 0x00, 0x04, 0x00, 0xA1, 0x27, 0x19, 0x00, 0x14, 0x00, 0x03, 0x03, 0x00, 0x00, 0xA3, 0x60, 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x01, 0x00, 0x07, 0x00, 0x44, 0x60, 0xA3, 0x00, 0x00, 0x19, 0x27, 0x00, 0x00, 0x00, 0x00, 0x61, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFD, 0x46, 0xDC, 0xCB, 0x96, 0x40, 0x00, 0x00, 0x80, 0x3F, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x80, 0x80, 0xFF, 0x00, 0x10, 0x00, 0x00, 0x06, 0x00, 0x07, 0x63, 0x6C, 0x6F, 0x73, 0x65, 0x64, 0x00, 0x04, 0x00, 0x00, 0x39, 0xC0, 0x74, 0x1D, 0x76, 0x8B, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00 });
    client.Send(F1);
    client.Send(new MabiPacket(0x526D, creature.Id).PutByte(1).PutString("You are in Nekojima Dungeon.  Current players in the dungeon:   ...").PutInt(20000));//Notice
    client.Send(new MabiPacket(0xA925, Id.Broadcast).PutInts(10009, 0));
    }
    //END NEKO TEST-DG 1F@@@

     

     

     

     

    • Like 1
  8. 23 minutes ago, SSanji said:

    I apprecited you. It works well, but it needs additional argument; 'nosteam'. Thank you!

    It has that argument. If you want to log a local server, just start Zemyna like normal, without "kr", but with "nosteam".

  9. Your theory about them going into aggro faster if you're in hearing range seems weird to me. What I was actually thinking about was whether they might aggro faster if they see you. Aside from the logical standpoint, there are AIs that have much better hearing than eyesight, like bats. For those the visuals would be completely pointless if both were equivalent, or if hearing would have a higher "priority".

    But some difference between them would certainly make sense, and it might explain some weird aggro behaviors, where sometimes they don't aggro immediately, but seem to wait around for a while. Maybe they aggro faster if they can both see and hear you?

  10. Recording everything would be fine, but if you want to take the time, certain things would be nice to have separately, so you don't have to search through hundreds or thousands of packets to find something.

    For example, a log of you running through almost all of of Uladh to get Eiry's first enter messages would be nice, but finding that dialog amidst all the other packets would take some effort. It would be more comfortable to look through, by starting logging when you enter a new region, and stopping right after she's done, saving the log as something like "eiry first enter dialog dunbarton".

    Logs of normal dungeons are generally not necessary, but we could use logs of special dungeons, like RP, quest dungeons, etc. Again, ideal would be segregated files, for entering the dungeon, cutscenes, boss fights, etc, but this is naturally harder to do in dungeons.

    In short, we're thankful for any research data, and segregated logs are optimal, but not necessary. And it's always better to have a full log than to miss something^^ Videos shouldn't be necessary, especially if you split the logs up a little.

  11. 8 hours ago, SSanji said:

    Thank you for your reply!

    I've uploaded versions of Zemyna and PaleTree that should be compatible with k20696, the current version.

    https://github.com/exectails/Zemyna/releases/tag/v1.0.0_k20696
    https://github.com/exectails/PaleTree/releases/tag/v1.0.3_k20696

    Unfortunately I can't confirm whether they are working, because I don't have access to kTOS. Feel free to tell me after you've tested it. Both will also need regular updates, whenever certain things change in the game's exe, usually after each TOS update.

    Due to kTOS using a web login, we had to do things a little differently for the Korean version of Zemyna. You need an additional argument, "kr", which activates certain KR only options. Example:

    Zemyna.exe host:54.88.25.242 port:2000 kr

    After you started Zemyna like that, the client won't start automatically, but it will still modify the client files, so when you finally start the client via the web login, the connection will still go through Zemyna, allowing you to log packets using PaleTree.

  12. The IPs you're seeing are local, because the temporary "proxy" server Zemyna starts is running locally, nothing wrong about that.

    However, this version of Zemyna is only compatible with the international version, specifically i10911, as it says in the thread's title. To log packets on KR, you need a version specifically made for it. I'll try to release one later today.

  13. Just took a quick look at the log and your handler, and some packets are out of order. For example, you're sending SkillUse after the combat handling, in the logs it's sent before. There's also quite a few effect and other packets between SkillUse and the combat action, that you don't seem to have, what's up with that?

    And it's so weird that SkillComplete is sent from Use... but that's what the logs says I guess =<

  14. 21 hours ago, snowie said:

    it was pre-G9 at least

    Maybe G4/5, with the addition of new races, skills, dual-wielding, etc, they thought they should make the fights more fair again, by giving monsters the ability to go deadly. And it would still be early, close to G2, which Rashataan mentioned.

    I found a post on GameFAQs from 2010, by someone asking how to deal with deadly mobs. That post was 2 days before the G9 update on NA. A note on Karu dungeon about deadly monsters was added to the Wiki in September 2009, which apparently was before the G8 update.

    I think it's safe to say that deadly mobs were added between G4 and G7. Since I couldn't find an earlier mentioning of it yet... maybe it was actually G7, that seems to be the time where people started talking about it.

  15. 5 hours ago, Petch said:

    Actually.... No they're not. If anyone has the Korean version of the game, during their 10th anniversary which was only last year, they had a special 3D login screen for the event.

    What I meant was that we probably won't seem them again, except maybe on special occasions, now that they actually went to the trouble of creating an XML, specifically to manage the login screen.

  16. Oh~ nice, so this is finally configurable. Check "db/layout2/login/loginscene.xml". It specifies which images should be used during certain times, in certain regions.

    StartTime="201512221200"
    EndTime="201601201159"
    Background="login_image_samhain2.dds"

     

  17. Update 1.5.7

    • NA218 support. Server packets aren't encrypted anymore, just like in KR.

    Going forward Morrighan will not be compatible with NA <218 anymore, due to the change in the encryption. If you want to use Morrighan with an older version, use 1.5.6, both are available on GitHub (see download link in the first post). The change on NA doesn't make a difference for Aura in terms of logging, as we never encrypt server packets.

×
×
  • Create New...