exec Posted January 11, 2016 Report Share Posted January 11, 2016 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 "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.txthttp://youtu.be/FKaW8S9S9VIEntrance (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@@@ 1 Link to comment Share on other sites More sharing options...
exec Posted January 11, 2016 Author Report Share Posted January 11, 2016 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. Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now