Jump to content


  • Posts

  • Joined

  • Last visited

  • Days Won


Everything posted by iwillnot

  1. Objective Load scripts not from your standard `rathena/npc` directory but instead, from a remote server via http/https. Design goals Parameters for NPC script loading would be: (a) remote http/https URL (b) support for request header for authorization purposes (e.g. API key) e.g. https://some-ro-developer.com/servers/some-ro-server-1/scripts/my-private-script?version=0 Authorization: Bearer <API token or key> The API token or key can be stored in a git ignored ENV file, so that unauthorized users don't have access to the source code Failure to download the script will result to no operation- warnings but not fatal server crashes The downloaded file must be a single `.txt` file The file is then hashed by the server, and cross-checked to ensure data consistency e.g. https://some-ro-developer.com/servers/some-ro-server-1/scripts/my-private-script?version=1.0.0&type=hash returns "70460b4b4aece5915caf5c68d12f560a9fe3e4" which should match the file's hash The file's existing supported versions can be checked (returns JSON array) e.g. https://some-ro-developer.com/servers/some-ro-server-1/scripts/my-private-script?type=versions returns ["1.0.0", "1.0.1", "1.1.0"] Caching - Can download the files into a git-ignored directory on the actual server for caching purposes If the requested file and version already exists in cache AND the file's hash matches the hash of the server, no need to download the file again NOTE: Not entirely sure yet if I want the download to be perform the caching, because it goes against the whole idea of "not having the source code on your server" aspect. Benefits By adding this source capability, we: enable RO developers who produce intellectual property (NPC scripts in this specific case) to have some control over their IP. NOTE: It is still possible for RO developer scammers to sell shady scripts/sell scripts that aren't theirs, grant their customers temporary access, and then remove access from their customers. enables RO developers to sell licenses to their IP, and revoke license (disable API token) after some validity period (e.g. 3 months). Opens up the opportunity for a monthly or yearly pricing of their NPC script licenses. enable RO developers to share their rAthena server folder to co-developers without risk of accidentally granting them access to other IP that they aren't supposed to share. e.g. RO Admin builds server. RO Admin buys 10 NPC scripts, with license to use in one RO. server. RO Admin hires RO Support dev. RO Support dev granted access to rAthena server files because they have work to do. RO Support dev now has access to npc scripts they didn't purchase, and is a vulnerability. Related source code Specifically, the following files need to be changed/extended: int npc_addsrcfile(const char* name, bool loadscript) - in src/map/npc.cpp Probably adding a new function called int npc_addremotesrcfile(const char* resource_url, char* resource_hash, char* resource_version, bool loadscript) - in src/map/npc.cpp Usage Potentially using it on an npc script would look like this: remotenpc: <URL> <VERSION> <HASH> remotenpc: https://some-ro-developer.com/servers/some-ro-server-1/scripts/my-private-script 1.0.0 70460b4b4aece5915caf5c68d12f560a9fe3e4 Thoughts I wanted to get the thoughts/vibe of the community before pushing through with this idea. I know that we're an open-source community that wants to encourage full-sharing of source code. But I think that the strict constraints that follows from that is something to consider. It limits the number of developers you can onboard onto your team, or needing to think about whether "you trust everyone". I think doing this (a) encourages developers to produce great NPC scripts, (b) enables developers to make good money on it, (c) positions rAthena or whoever to start up some kind of dependency management/NPC scripts platform (similar to npm, or composer) where server owners can shop for NPC scripts. Securely designed remote script access enable developers to focus on writing NPC scripts opportunity for NPC script customization layer developers can now easily scale up their marketing on some dependency management/NPC scripts platform well-paid developer happy developer more scripts happy community I will definitely be exploring this on my own, but I wanted to know what the community thinks about it. PS: Potentially a source of revenue as well for rAthena to sustain itself. I am open to the idea of assisting in the architecture design for that platform.
  2. This is really amazing work. Great job guys!
  3. I think this is an encoding issue. Make sure your text editor's encoding is set to EUC-KR before editing and saving. This is something you can configure on your text editor (notepad++, Visual Studio Code). I use VS Code (see the attachment). Change whatever encoding (e.g. UTF-8) into the appropriate LUA encoding (EUC-KR).
  4. Thanks for this. For those of you who are not familiar with how to apply patches, I did the following on my Windows machine: $ git apply "PATH/TO/FILE.patch" script_commands.txt | 14 ++++++++++++++ map/map.hpp | 1 + map/mob.cpp | 1 + map/npc.cpp | 4 ++++ map/npc.hpp | 1 + map/pc.cpp | 28 ++++++++++++++++++++++++++++ map/pc.hpp | 2 ++ map/script.cpp | 5 +++++ map/script.hpp | 1 + map/script_constants.hpp | 1 + 10 files changed, 58 insertions(+) Details: GNU patch 2.7.6. Further reading: How does a patch work?
  5. Thanks for the suggestion. You're right, I'm sure that'll work! Yeah, I'm trying to figure out the least amount of work to do first, before going into source editing. Solved: Only one skill is displayed on the user interface "STRIP HELM" but in fact, all the strip skills were triggered because of the high skill chance. This means that this is not a bug, and is in fact, working correctly. This means that when multiple skills occur at the same time, only the last skill will be displayed on the screen. This makes sense, as you cannot display 4 skill texts above the character's name at the same time.
  6. I have a headgear that uses the following onEquip scripts: [email protected] = getrefine(); [email protected] = [email protected] / 4; [email protected] = ( ([email protected] - 5) * 100); bonus bAgi,3 + [email protected]; bonus bDex,2 + [email protected]; bonus bLuk,1 + [email protected]; if(BaseJob==Job_Rogue) { bonus4 bAutoSpell,"RG_BACKSTAP",1,max(1000,1000 + [email protected]),1; bonus4 bAutoSpellWhenHit,"RG_RAID",1,max(3000,3000 + [email protected]),1; } bonus4 bAutoSpell,"SU_ARCLOUSEDASH",1,max(500,500 + [email protected]),1; bonus4 bAutoSpell,"RG_STRIPWEAPON",1,max(2500, 2500 + [email protected]),1; bonus4 bAutoSpell,"RG_STRIPSHIELD",1,max(2500, 2500 + [email protected]),1; bonus4 bAutoSpell,"RG_STRIPARMOR",1,max(2500, 2500 + [email protected]),1; bonus4 bAutoSpell,"RG_STRIPHELM",1,max(2500, 2500 + [email protected]),1; My problem is, it only triggers strip helm on attack. When I removed the last script (RG_STRIPHELM) only strip armor is triggered. Is there a rule that multiple occurrences of bonus bAutoSpell does not stack? Edit: Did a few more tests, turns out I can cast multiple skills if the bAutoSpell benefit comes from different items. (e.g. headgear top grants strip helm, headgear bottom grants pressure). Am I missing anything? How do I enable one item to grant multiple skills triggered?
  7. I was searching for NPCs that warp to Prontera. Suddenly, I found this piece of code. (npc/cities/yuno.txt) Breaking the immersion in RO lol. Stop being manipulated by virtual reality! Found it funny. Heh I love our community.
  8. Try to be more clear with your question, so that we know at which point you need help with. That way, we can help you better. Which ones are you confident you understand/were able to accomplish? Configuring and using PuTTY to connect to your server machine Installing GDB on your server machine (or checking if it is installed) Running char-server and login-server only. Running map-server through GDB. Reading and analyzing the crash log. Fixing the bug identified by the crash log. Re-compiling your server.
  9. You're having problems because (1) You're using a select function with only one menu option "Game of Thrones", and (2), you do not have balanced braces. Syntax error, expected ) switch(select("Game of Thrones"){ Has 2 open braces ( and only one close brace ) switch(select("Game of Thrones", "Option 2")){ Checking for multiple conditions You can check for multiple conditions using the conditional operators AND or OR. if (countitem(501) > 0 && countitem(601) > 0) { mes "You have red potion AND fly wing at the same time!"; } if (countitem(501) > 0 || countitem(601) > 0) { mes "You have red potion or a fly wing... or BOTH!"; } See doc/script_commands for a full guide on NPC and item scripting.
  10. @trickyloki3 Yes, I do mean comparing for the different flavor text. The last message you wrote was asking for help with regard to Flavor text, and that's what I was concerned with. The problem: scaling up generation of item descriptions for flavor text Your program is about automation which excites me, but I am not sure how to scale up/automate the Flavor text part. That is big chunk of work you'll need to do to make sure each item's complete description (including flavor text) is reliable. It's either we do checking manually (which Asheraf, Zackdreaver, and community contributors already do) or we go with the fundamental idea of your work: automating the item descriptions. I like the path you're taking: automate it. We already have very few volunteers in the community. Better to make good use of their time and automate what we can. We already have existing reliable and high quality datasets for item descriptions (Asheraf, Zackdreaver). We frame the task of item descriptions generation as a dataset generation problem, and the goal is to achieve similar quality as that of the gold standard: Human-processed manually checked item descriptions. To compare the similarity between two things, we need a measure. Coming up with some statistical measure can help you be more confident that your generated item descriptions are indeed semantically equivalent to the item. What good would a statistical measure do? How can it be useful? Having a statistical measure, like edit distance, can allow us to see statistics between the datasets. This is illustrated in an example below: Asheraf Translation vs. trickyloki AutoGen DB to Item Description 15,000 items automatically generated from item_db.conf and item_db2.conf 13,000 items compared between the two data translations. Average edit distance: 4 characters (means that your automatically generated descriptions only vary with asheraf's translation by 4 characters on the average). Zackdreaver Translation vs. trickyloki AutoGen DB to Item Description 15,000 items automatically generated from item_db.conf and item_db2.conf 12,000 items compared between the two data translations. Average edit distance: 12 characters (means that your automatically generated descriptions only vary with zackdreaver's translation by 12 characters on the average. This is curious, and since this is all automated, you can easily query which items had high edit distances and study why they varied, so you can better tailor your description algorithm). In the end, you're not aiming to be perfectly close to Asheraf or Zackdreaver, but to generate not only high quality item script descriptions but also still have reliable flavor text that we all love to read while playing RO. These are only ideas and suggestions; it is your project sir, and I wish you all the best. Thank you for your generous contribution to the community!
  11. You're talking about hyperlinks in the programming language HTML. <a href="https://www.google.com">Click me to go to Google</a> Good luck! Note: Also, this thread should be under Third Party Programs Support, not Client Support.
  12. I recommend using my fork of User Feefty's Flux CP Addons VoteForPoints. He last updated his code in 2015. I've fixed some bugs and tested that it works as of this date (Dec 2018). https://github.com/darrensapalo/FluxCP_Addons-VoteForPoints
  13. Portuguese Esse addon foi enviado em 2012 e atualizado em 2012. Eu recomendo usar o User Feefty Vote no Point Flux CP Addon que ele atualizou pela última vez em 2015. No entanto, sua cópia do código ainda apresenta alguns problemas relatados por vários usuários (1, 2). Eu recomendo usar o fork do código dele, que testei e funciona a partir desta data (dezembro de 2018). https://github.com/darrensapalo/FluxCP_Addons-VoteForPoints Perdoe-me, eu uso o Google Translate. English That addon was uploaded on 2012, and updated in 2012. I recommend using User Feefty's Vote for Point Flux CP Addon which he last updated in 2015 . However, his copy of the code still has some problems reported by various users ( 1 , 2 ). I recommend using my fork of his code , which I have tested and works as of this date (December 2018).
  14. Agreed. I applied that exact fix on a fork of the code, should anyone need a copy of an updated Flux CP Vote for points addon that is tried and tested as of 2018. Either do the fix manually, or install your plugin from scratch and use the updated one I linked above. Note Not sure if this is worth noting, but my RO server runs on Hercules. The $cp_tbl which is the mapreg is still designed the same way whether rAthena or Hercules though, so that should not be a problem.
  15. File location Yes. You may create your own signboards by editing the clientside LUA/LUB file. There is no server-side configuration for it. The file is located at: client\data\luafiles514\lua files\signboardlist.lub Example entry An example of one signboard is the following: { "izlude", 197, 205, 10, IT_SIGNBOARD, "유저인터페이스\\item\\ship_ticket.bmp", "Ship to Alberta and Byalan", "#0x00FFFFFF" }, The first three are explanatory: It's the map and coordinates. 10 corresponds to the height (i think in pixels, or some arbitrary unit) above the NPC's head. Setting it to 0 means that it is immediately above the NPCs head. IT_SIGNBOARD is the type. Examples are shown below. The following is the filepath to the image resource. The last one, I believe is for the color of the text (I have not tweaked this value so I am not sure). End result And it results into the following: IT_SIGNBOARD IT_BMP Notes As of posting (December 19, 2018), Asheraf's Translation (commit 8377a6b7340773d0c5ea18987b1c82be0ec1dd05) does not have a translated signboardlist.lub. Use Zackdreaver's translation (commit 8377a6b7340773d0c5ea18987b1c82be0ec1dd05) instead. Note that the links above are to the master copy of the Git repositories. The commit IDs shown above are the current commit IDs on their master branches.
  16. Yes. I was experiencing this often when I modify the iteminfo.lub file - it kept corrupting my items (and their resource filenames) which, after I have saved the file, makes it difficult to reverse. It was kind of annoying to always 'remember' to re-open with a different encoding, and I was considering sticking with Notepad++ whenever I do my LUA/LUB edits. (But I love plenty handiness of the VS Code /sob) Thank you again!
  17. You are a lifeboat in a sea of problems. Thank you for your effort (images and explanation) in documenting how to solve this issue @Anacondaqq!
  18. @trickyloki3 Great looking work mate. When you say you are looking for flavor text in English, would the following links be useful to you? https://github.com/Asheraf/Translation https://github.com/zackdreaver/ROenglishRE Also, do you have ideas of how to "test" whether the results are good or not? The challenge of automating something at a large scale (e.g. roughly 15000 items) is the concern that the descriptions might not be of good quality, i.e. The hand-performed modifications done in the above-linked github repositories are able to maintain the high-quality descriptions at the cost of man-power, resources, time. What I think can aid in your project is coming up with some test scripts/measurement. Measurement I'm considering of helping out (idk, write test scripts or something?) I was thinking of: Determining NLP-related textual similarity measures that measure how different the expected description is versus the automated description e.g. Edit distance Not sure of other textual similarity measures that are (a) simple enough to compute fast (b) is a sufficient measure for semantic relatedness/similarity This will definitely take time to research Collecting a few samples from RMS Building a few test scripts to see how this way of evaluation may work out for your system Personally, I think that edit distance might be enough as a measure for it, and doing textual similarity on descriptions is over kill. In any case, you would know best what you need help with, and what you think is the priority/roadmap of your project. I want to know what you think. You have any ideas about it?
  19. For those of you looking for the resources for the client, the editors necessary to perform hexing, and the patches to use, I detailed my usage in this thread:
  20. How do I know when I have configured my patch website correctly? When you open the link below http://testro.com/updates/plist.txt It should show you the contents of your plist.txt file as it looks in the web server. If it does not show up, then the patcher will not load correctly. What I saw when I tried opening that link When I open that link above, a gray screen shows up. It redirects into: http://www6.testro.com/?s_token=1545062469.0334085611&kw=Supplements&term=health%20supplements&term=testosterone%20booster&term=herbal%20supplements&term=vitamins%20supplements&term=natural%20cleanser&term=erectile%20dysfunction%20treatment&showDomain=1&backfill=0&tdfs=1 Curiously containing keywords like "herbal supplements, testosterone, and erectile dysfunction". You're having web server configuration problems. Depending on what your web server is, configuration varies.
  21. If you don't want it to disable the start button, then this should be true.
  22. Hello there, I need some help. I'm trying to update signboards on my RO server so that newbie game experience and usability is improved. So I'm going over the data/À¯ÀúÀÎÅÍÆäÀ̽º/item folder, looking for nice BMPs to use. I use GRF Editor to open the GRF and view lots of BMP files quickly, and copy the filename of the BMP i want to use. I found one that I wanted to use, which was the following: Æ÷¸µ¸ðÀÚ.bmp // Text that I get when I extract the BMP and copy the filename Æ÷¸Μ¸ÐÀÚ.bmp // Text I get when I copy the filename from within the GRF Editor tool So I copied the filename and replaced it in the target signboard that I want to update in signboardlist.lub. Since it uses suffragium.bmp as plain text, I'm imagining that if I just simply copy-paste the filename of the BMP that I want to use, it will work. Error However, this does not work (for both ASCII versions) as shown in the error below. Curiously, that's not the ASCII code that I wrote down but it got transformed when the client was trying to read the file. Why is that? Question Is this an encoding problem? The signboardlist.lub is opened using my Text editor (Visual Studio Code) with the EUC-KR encoding. Changing the title of the signboards (e.g. from korean letters to "Ship to Alberta") and saving the document reflects correctly in the game, which means I have not corrupted my file. Edit: I apologize in advance, I posted this in the 3rd party support because I first thought that (a) this is an encoding error (b) Unbolloxer did the transformations from korean to ascii (c) I want to know how to do that on my own so that I can build a tool that does that work. I realize now that it should be in the client support forum instead. Please, mod, move it when you have the time. Thanks.
  23. @Sofia I don't think that GetSkillAttackRange is the name of the file. It sounds more like the name of a function inside some LUA/LUB file. I am not really sure where it is found, but what I can share is how to find out what you're looking for. How do I look for a keyword in multiples files under my data folder? Given the zackdreaver data folder, you can use Notepad++ function called Find in all files. Press CTRL + F to open Find function. Go to Find in Files tab. Enter what you are looking for under Find what Change the directory to your target directory. In your case, it would be something like "C:\YourRO\data". Make sure that your data folder contains the zackdreaver data files. If that's not where you want to look and instead you want to check the data files in your GRF folder, then use a GRF tool to extract files from your GRF (that corresponds to the data folder) and then do the search again. In my example below, it will search for the keyword "AC_VULTURE" in my whole RO folder, including data folder, BGM folder, System folder etc. References Notepad++ Text editing software (Recommended) - https://notepad-plus-plus.org/ GRF Editing Tool - http://herc.ws/board/files/file/138-grf-editor/ Alternative updated data folder - https://github.com/Asheraf/Translation
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and Privacy Policy.