Jump to content

YulRun

Members
  • Posts

    68
  • Credits

  • Joined

  • Last visited

  • Days Won

    2
  • Feedback

    0%

Everything posted by YulRun

  1. I used to have a different program for it, now I don't remember what it was. Currently using L2UTX Viewer, but for some .utx files I seem to get errors, for most I dont. Error is: Anyone know how to resolve this, or suggest a different application. Cheers
  2. Anyone know if anything like this exists currently for any version of the Classic Client? Cheers.
  3. Thanks, I got that, what I'm trying to do is make dungeon maps for the Radar Map. To do that I need Co'ordinates to do so. I think I may have figure out a solution to do so. So by default the minimap script takes the player x,y and subtracts the map x,y that we set and divides it by 20 to determine how to place the UV, changing it to 32 makes my numbers line up and work, but messes up all the town maps, so gonna have to keep thinking So rather than bashing my head on the wall anymore, I went with the easiest solution to figure out how to determine the local x/y coordinates, and how to cartograph my own maps. Since I have access to the RadarMap script and know by default they use a division of 20, I first must make 2 references to get the numbers required. One is the center of a room ingame, and 2 is the x,y of that location on the map picture. Then it's just solve for X, Y essentially. 172672 - X = (485 * 20) X = 162,972 -17600 - Y = (423 * 20) Y = -26,060 So by determining a start position on the map and having it line up on the mini map, you can then go to the corners of rooms using your new Local Map X/Y to Cartograph the rooms out by doing /loc to get the x,y, then run the math in the right direction to get your x,y on the image to start drawing your squares. Hope this helps anyone else trying to figure out this shit lol.
  4. Good day all, currently trying to find the best way to determine where the zone map would start. Using a Classic Minimap you can use local maps by zone ID and localMap x/y. Using Necropolis of Disciples as an example (The one the classic map comes with) It is Zone ID 140 and it's color is 249, below is the ZoneName image (128x128px) Based on shape alone I can determine that the 249 must be the red shape. I know a Map tile is 32,768 units and origin 0,0 starts at 20_18. Using the math to calculate the top left corner of this graphic at 19,57 I did the math: 9/128 = 0.1484375 * 32,768 = 4,864 57/128 = 0.4453125 * 32,768 = 14,592 Calculated the size for 25_17 (25 - 20) * 32,768 = 163,840 (17 - 18) * 32,768 = -32,768 163,840 - 4,864 = 158,976 -32,768 + 14,592 = -18,176 On that file it says the X and Y are 163,000 x -26,100 so I know somewhere I'm doing the math wrong lol curious if anyone can provide some insight into it, so I can start making the maps for the other catacombs. Cheers
  5. All good after editing a few lower maps I figured out the labelled all Emitters the same for the same objects, so that helps. For the Kamael Training Pad the emitter to remove is Emitter181 same id for every zone. for the weird swirly thing outside of town gates it's Light232 and Emitter's 1,2,8,9
  6. Thanks, Managed to remove some from around Orc Village, but doesn't seem to want to let me load up 24_18 for aden to figure out what the emitter number is, tells me I have an index out of bounds for statues_t for some reason..
  7. Trying to find out how to get reference to the animated static meshes to remove them. I've used L2SMR to identify deco objects and remove them from the map, but if they also had an animation attached, they still linger in game. Example in picture is the Kamael Guild Platforms
  8. Good day, Looking how to get an ItemId object from an int value of the item Id, if anyone knows how? I looked at the UIDATA_ITEM, and doesn't appear to have a native function there, wondering if anyone knows of a function existing. More Info that may help understand why I'm asking: I'm trying to use native static function string GetItemTextureName(ItemID Id); But requires type ItemId, and not int. So trying to find a way to to convert int value to the corresponding ItemId. Cheers YulRun Figured it out, Answer is: Built in function: GetItemID(Int id) returns ItemID
  9. @Rolo's Answers answer all questions and it can be locked. - Unwanted Pet or Player actions can be removed within actionname-e.dat - Adding Macro Icons can be edited within MacroListWnd.u or added directly to that texture file in chronological order. Cheers
  10. If you plan to start Interlude with L2J, aCis is your best Starting point hands down. No pack, anywhere is 100% BUG Free and Low-Rate Ready. If you want to develop a low rate you need to put in the work. But aCis has one of the Best GeoEngines/Pathing, and coming with a OFF Parsed SpawnManager puts you in a pretty good starting place.
  11. A suggestion is to condense and highlight the styling of Pinned Topics. Some Forums have a lot of pinned topics to sift through as you scroll to see the latest topics. Having them condensed and highlighted would make navigating forums/subforums more pleasant. Example:
  12. My suggestion is to Sub-Category Client Development into 3 Categories: -Discussion Forum, with the sub categories of Requests -Shares with sub categories of Game Versions, C1-C5, C6 Interlude, CT+ H5, GoD, Classic -and then a separate Guide's Forum
  13. Like the Action WIndow (Has a list of usable Actions) If I wanted to remove Couple Actions or Add a custom action etc.
  14. You'd potentially have more help if you actually provided information on what client you're seeking. Lineage 2 has many game versions. Also 4Game didn't enter the L2 Game until GOD so anything earlier than that wouldn't be a EU Client. Cheers
  15. Good day all, I'm looking to find out what files Client Side control the following if anyone can point me in the right direction: - Pet Skill Action List (H5 has more skills for Servitors than IL so need to remove some) - Player Action List - Player Macro Icon List (Want to add more icons to be used for Macros) Any help appreciated! Cheers
  16. @deMEV He is correct, however the only situation when I've experienced it, is the first time loading the game after adding it. You'll get black screen on char select, if you log out without closing client the main screen will also be black. But after closing and re-opening the client works as intended. Not sure if that will give you any insight to where the issue is, seems to potentially be resolution related?
  17. Maps from IL to H5 have changed, and they removed all the old areas that Arenas used to exist. I've already Replaced so far 19_17 and 17_10. 19_17 only corresponded to Arena 1, and 17_10 fixed arena's 15-18 for me. But rather than keeping randomly changing maps and the corresponding textures, if anyone already knows what maps were the original IL Arena's For Oly would appreciate any help UPDATE: I'm updating my main post with all the info, figured it out, can lock after
  18. Good day, I'm currently modifying a H5 Client for IL Content, currently I'm working on updating the Oly Arena's, I was curious if anyone had a list of what Maps were used for Oly Arenas? I know no matter what one you go to it puts you in 19_17 on the map but with a H5 client other than Arena 1 when you teleport all of them just put you in water. UPDATE: Figured it out, and how to do it Maps for Arenas in IL were: 19_17, 16_10, 16_11, 17_10, 17_11 How to move them from IL to H5. In Maps copy from IL to H5: 19_17, 16_10, 16_11, 17_10, 17_11 In Textures copy from IL to H5: T_19_17, T_16_10, T_16_11, T_17_10, T_17_11 In StaticMeshes copy from IL to H5: broken_coloseum_s.usx Hope this helps someone else
  19. Thanks for the share, exactly what we were looking for, for Unchained 2.0
  20. The file you want to change is armorgrp that you used to make the custom item. Each column is a separate variable, one would be for preferred, same as one is for Mdef. The client may force certain stats to be shown even if the value is zero. So you may end up having both pdef and a mdef Value listed after the change. You will of course still have to update the states server side as well. As for the texture question, it’s hard baked into the inventory window in l2font-e I believe for interlude
  21. Preface This guide starts with the basis that you already know of WOTExplorer and have experience with decompiling/compiling interface scripts from interface.u. If you have not done this before please visit here: This is a good collection of all the Compilers, and comes with clean interface scripts based on your Client Version. To edit different scripts mentioned in this Guide from the above download, you will navigate to: Main Compiler Folder > Interface > Classes These are all the scripts housed within Interface.u Upon completion of editing, and wanting to build a new Interface.u to put into your Clients main System folder, you will then navigate to: Main Compiler Folder > System > Make_Interface.bat This will also alert you of any errors in your code to correct, as if the code won't compile correctly it won't build your new Interface.u ------------------------------------ On with the Guide The method we'll use within this guide to communicate between the Game Server, and the Lineage II Client is the Piggy Back method. We'll be Piggybacking on an existing event that already exists within the game that the client listens for. The Event we'll be piggybacking on is the EV_TutorialViewerWndShow. What does this mean? Well the client and pretty much all server files already have handlers implemented to allow communication for the main Tutorial Quest in the game, that will pop-up the tutorial window in-game. You may wonder how this helps us accomplish our goal, and it's very simple. The way this function works by default is the server packages a html String and sends it with the event OPCode to the client. The client registers the event and when it triggers will parse that String data and show it as a Tutorial Window. What we intend to do, is instead of just sending a static html string, we will add a Header Element, and some new OPCode's of our own, that when the event triggers on the client we can modify the TutorialViewerWnd.uc script to check for these headers. If they exist, do our own custom logic, and if they don't continue on with the basic logic already implemented to handle the Tutorial Window. ------------------------------------ First, Let's handle the Server Side Code Typically a Server will send the tutorial message kind of like this: player.sendPacket(new TutorialShowHtml(HtmCache.getInstance().getHtmForce("data/html/script/feature/Tutorial/" + html))); As you can see it sends a new Client based packet with the tutorial html string, but as stated it's just a String, so we can send any type of string we want. Example: player.sendPacket(new TutorialShowHtml("UC" + "|" + "value")); Now by default the client won't know how to handle this and will most definitely throw an error, but what this represents is UC as a header, | as an iterator, and value as a variable we want to pass. ------------------------------------ Now lets handle processing it on the Client within TutorialViewerWnd.uc: Within the function OnEvent and within the switch case EV_TutorialViewerWndShow we're going to add a new check and rearrange the logic a bit. We're going to use the UnrealScript function called Split, what this does is allows us to use an iterator to break up a string into an array of separate strings, using the iterator as a way of separating them, in our case the "|". Example: local String sampleString = "Yul|Is|A Really|Cool|Dude"; local array<String> dataArray; Split(sampleString, "|", dataArray; Output would be: dataArray[0] == "Yul" dataArray[1] == "Is" dataArray[2] == "A Really" etc.. So with that knowledge, we can now use a header followed by a value to send data to the client to be used. This can be anything from Strings/Integers etc for information like Premium Time, Rates, Maybe player stats if you want a better stat window etc. So how do we catch and handle it in the OnEvent Script? Simple. Example: function OnEvent( int Event_ID, string param ) { local string HtmlString; local array<string> dataArray; switch( Event_ID ) { case EV_TutorialViewerWndShow : ParseString(param, "HtmlString", HtmlString); Split(HtmlString, "|", dataArray); // Check for Custom Logic if(dataArray[0] == "UC") { CustomVariableLogic(dataArray); } else { StandardEventLogic(HtmlString); } break; case EV_TutorialViewerWndHide : HideWindow("TutorialViewerWnd"); break; } } We move all the basic logic that previously existed into its own function called StandardEventLogic(), re-passing in the HtmlString for it do do its thing, otherwise, we'll pass the dataArray. With the array, we know index of 0 is our header in this case "UC" for Unchained, when then can have endless variables all using a Post ("|") as an iterator to separate them. Within our customVariableLogic, we can further use switches for our own custom OpCodes, in my example I use index 1 (The second value in the string) to be the OPCode for our custom logic to switch upon, allowing different functions to handle different things. Example: /* * CUSTOM * This script is ran if custom variable based commands come through the TutorialEvent */ function CustomVariableLogic (array<string> dataArray) { local int OPCode; local string data1, data2; // Initialize Values OPCode = int(dataArray[1]); data1 = dataArray[2]; data2 = dataArray[3]; // Switch on Action switch( OPCode ) { // Pass Premium Information to the Character Status Window case 1: UpdatePremiumStatusInfo(data1, data2); break; } } Ok now we know how to pass data from the Server to the Client, sweet. But now how can we pass information back to the Server, from the client? Well it's actually even easier. What we do within the client script is call RequestBypassToServer() what this does is allows you to send custom logic back to the server, which can then be processed by the server. Some examples of things that already use RequestBypassToServer are you admin commands, etc. Most server files even call the the handler RequestBypassToServer, so you can search for that within your server files. Example of how it catches it is: if (_command.startsWith("admin_")) { // Logic Here } If our case we'd want to add a new one if (_command.startsWith("admin_")) { // Logic here } else if (_command.equals("UC_charPanel")) { // Logic to handle, or can even use antoher Tutorial packet back to the server } On the client, we could have a button that we want to open the charPanel using this serverside code to handle it. function OnClickButton( string strID ) { switch( strID ) { case "AccountButton": RequestBypassToServer("UC_charPanel"); break; } } Hope this guide helps out anyone new to client development, there is a lot to take in, and not a whole lot of guides out there for things. So hope this one can be a good starting point for any newbies out there. Cheers, YulRun
  22. Within the interlude Client I don't believe there is a way to show it, as within the packet data it doesn't pass the augment data during a trade. This last writeH may be augment? But no guarantee, and if not, then no way to pass this information for the client to see.
×
×
  • Create New...