trickyloki3
Members-
Content Count
17 -
Joined
-
Last visited
-
Days Won
1
Content Type
Profiles
Forums
Downloads
Staff Applications
Calendar
Everything posted by trickyloki3
-
Hercules support was dropped during the last overhaul to save time. And the distinction between pre-renewal and renewal is blurred. (once again, sigh) My current goal is to make the project ready for production use for one emulator before supporting another. But too much going on at my job and home. And I am the only developer on this project, so pace is rather slow. On the bright side, the source code quality has improved a great deal. hint hint FYI, predicate generation, variable listing, and expression evaluation is more accurate now. (Check out the readme on the github page for examples.)
-
I definitely will, but very busy IRL. And I still owe Tokeiburu a VS project. >.> And might need to documented the library.
-
It is very easy with Python. 1. Create an email account 2. Select a SMTP server (Microsoft or Google) 3. Create MySQL user account with select privileges on last login column in login table. 4. Connect to MySQL server using limited privilege MySQL user account with SqlAlchemy (http://www.sqlalchemy.org) 5. Query database and calculate the datetime difference to get timedelta, which gives number of days, hours, and seconds. (https://docs.python.org/2/library/datetime.html) 6. Send email via SMTP server for all user's last login > 20 days. (https://docs.python.org/2/library/smtplib.html) 7. Create separate user account on system. (https://pypi.python.org/pypi/python-crontab) 8. Schedule script on crontab to run on some interval using new user account. Can be done in less than 100 lines. (Unless you want to use the ORM to map all the tables.) Deploy on some cloud instance 1. Buy a cloud instance for $5 per month or less. 2. Setup SSL certificates for MySQL server master and slave. (Self-signed root CA is ok) 3. Setup Iptables to allow cloud instance to connect on MySQL port. 4. Setup MySQL slave replication. 5. Write automation script that use slave replication server. (Which also double as backup)
-
Todo * Create Visual Studio project for compilation on Windows. * Create Autotools for compilation on Unix and Linux. * Write guides on how to use the stupid program.
-
Sounds great. Are you guys OK with me using the flavour text from iteminfo.lua? I plan on building a separate resource table with just the item id and flavour text so I can combine it with the final script translations and item attributes. Currently learning LUA, but let me know!
-
@evilpuncker Thanks for the suggestion, I still have one last thing to implement for the script translation before I generate client tables. @zackdreaver I'm currently using the following table: https://github.com/trickyloki3/eAdb.Compiler3/blob/master/res/item_bonus.txt But I can definitely create a separate table for that format.
-
Hey client translation guys, script translation guy here. I'm currently planning on generating client tables in the old txt and new lua format. I want to strip out the flavor text from iteminfo.lua to complement the script translation. Is this cool with you guys?
-
Yeah, I'll make that a special case during script_generate. If there exist a (sc_end) block, then attempt to merge all (sc_end). Implemented [1:28AM Eastern Time] (https://github.com/trickyloki3/eAdb.Compiler3/commit/98dfdf7972d83823faf32a470fe9a240fc61972b) Example: 591#Recover HP by 325 ~ 405. Recover SP by 40 ~ 60.Cures poison, silence, blind, confusion, curse, and hallucination status effects.# This is probably the only block minimization, but I don't know. hercules_dastgir.txt
-
I've fixed a majority of the problems and so far so good. I'll focus on making this project easy to compile, build, and use on Windows, Mac, and Linux. Please let me know if you have any suggestions, corrections, or whatever about the project! The attached files are sample item script translation for eAthena, rAthena, and Hercules. (The databases are ~1 month old since I last pulled.) Note: the text files use UNIX-style line endings; view in Notepad++, Sublime, or anything that supports UNIX-style line endings. *Uploaded new files to reflect fixes. [1:07AM Eastern Time] eathena.txt hercules.txt rathena.txt
-
I figure that a simple heuristic like (getrefine() > 14) ? 14 : getrefine() 0~14 based on Refine Rate Would simplify the solution pretty elegantly in both implementation and complexity. And set expressions are 'inherited' when the identifier is matched. EXAMPLE Item ID: 13110 Reference: http://ratemyserver.net/index.php?iname=13110&page=item_db&quick=1&isearch=Search Translation 13110#Increase +55% physical damage on demi-human enemy.Increase +55% physical damage on player enemy.Ignore +20% physical defense of demi-human enemy.Ignore +20% physical defense of player enemy.Weapon is indestructible.Condition [Refine Rate 6 ~ 15] -> Increase +4% ~ +100% (((6 ~ 14 based on Refine Level) - 4)^2) physical damage on demi-human enemy. -> Increase +4% ~ +100% (((6 ~ 14 based on Refine Level) - 4)^2) physical damage on player enemy. -> Ignore +5% physical defense of demi-human enemy. -> Ignore +5% physical defense of player enemy.Condition [Refine Rate 9 ~ 15] -> Add +100% chance of auto-casting Flip the Coin[Lv.1] when using Rapid Shower. -> Increase +18% ~ +30% (Refine Level * 2) Rapid Shower damage.# Block Dump --- 13110 ---Block Address: 0xbb3b70Block ID: 0Block Link: -1Block Type: bonus2Block Argument Count: 3Block Argument 0: bAddRaceBlock Argument 1: RC_DemiHumanBlock Argument 2: 55Block Translation Count: 4Block Translation 0: demi-humanBlock Translation 1: 55Block Translation 2: Increase +55%Block Translation 3: Increase +55% physical damage on demi-human enemy.Block Formula Count: 0Block Dependence: N/A --- 13110 ---Block Address: 0xbe5cc8Block ID: 1Block Link: -1Block Type: bonus2Block Argument Count: 3Block Argument 0: bAddRaceBlock Argument 1: RC_PlayerBlock Argument 2: 55Block Translation Count: 4Block Translation 0: playerBlock Translation 1: 55Block Translation 2: Increase +55%Block Translation 3: Increase +55% physical damage on player enemy.Block Formula Count: 0Block Dependence: N/A --- 13110 ---Block Address: 0xc17e20Block ID: 2Block Link: -1Block Type: bonus2Block Argument Count: 3Block Argument 0: bIgnoreDefRaceRateBlock Argument 1: RC_DemiHumanBlock Argument 2: 20Block Translation Count: 4Block Translation 0: demi-humanBlock Translation 1: 20Block Translation 2: +20%Block Translation 3: Ignore +20% physical defense of demi-human enemy.Block Formula Count: 0Block Dependence: N/A --- 13110 ---Block Address: 0xc49f78Block ID: 3Block Link: -1Block Type: bonus2Block Argument Count: 3Block Argument 0: bIgnoreDefRaceRateBlock Argument 1: RC_PlayerBlock Argument 2: 20Block Translation Count: 4Block Translation 0: playerBlock Translation 1: 20Block Translation 2: +20%Block Translation 3: Ignore +20% physical defense of player enemy.Block Formula Count: 0Block Dependence: N/A --- 13110 ---Block Address: 0xc7c0d0Block ID: 4Block Link: -1Block Type: bonusBlock Argument Count: 2Block Argument 0: bUnbreakableWeaponBlock Argument 1: 0Block Translation Count: 2Block Translation 0: (null)Block Translation 1: Weapon is indestructible.Block Formula Count: 0Block Dependence: N/A --- 13110 ---Block Address: 0xcae228Block ID: 5Block Link: -1Block Type: ifBlock Argument Count: 2Block Argument 0: ( getrefine ( ) > 5 )Block Argument 1: { bonus2 bAddRace , RC_DemiHuman , pow ( ( ( getrefine ( ) > 14 ) ? 14 : getrefine ( ) ) - 4 , 2 ) ; bonus2 bAddRace , RC_Player , pow ( ( ( getrefine ( ) > 14 ) ? 14 : getrefine ( ) ) - 4 , 2 ) ; bonus2 bIgnoreDefRaceRate , RC_DemiHuman , 5 ; bonus2 bIgnoreDefRaceRate , RC_Player , 5 ; }Block Translation Count: 1Block Translation 0: 6 ~ 15Block Formula Count: 0Block Dependence: N/ABlock Logic Tree:logic tree on stack(nil)<-0x1408e70:COND:getrefine;dmprange; cond (6 ~ 15) --- 13110 ---Block Address: 0xce0380Block ID: 6Block Link: 5Block Type: bonus2Block Argument Count: 3Block Argument 0: bAddRaceBlock Argument 1: RC_DemiHumanBlock Argument 2: pow ( ( ( getrefine ( ) > 14 ) ? 14 : getrefine ( ) ) - 4 , 2 )Block Translation Count: 4Block Translation 0: demi-humanBlock Translation 1: 4 ~ 100Block Translation 2: Increase +4% ~ +100% (((6 ~ 14 based on Refine Level) - 4)^2)Block Translation 3: Increase +4% ~ +100% (((6 ~ 14 based on Refine Level) - 4)^2) physical damage on demi-human enemy.Block Formula Count: 1Block Formula 0: ((6 ~ 14 based on Refine Level) - 4)^2Block Dependence: N/ABlock Logic Tree:logic tree on stack(nil)<-0x1402590:COND:getrefine;dmprange; cond (6 ~ 15) --- 13110 ---Block Address: 0xd124d8Block ID: 7Block Link: 5Block Type: bonus2Block Argument Count: 3Block Argument 0: bAddRaceBlock Argument 1: RC_PlayerBlock Argument 2: pow ( ( ( getrefine ( ) > 14 ) ? 14 : getrefine ( ) ) - 4 , 2 )Block Translation Count: 4Block Translation 0: playerBlock Translation 1: 4 ~ 100Block Translation 2: Increase +4% ~ +100% (((6 ~ 14 based on Refine Level) - 4)^2)Block Translation 3: Increase +4% ~ +100% (((6 ~ 14 based on Refine Level) - 4)^2) physical damage on player enemy.Block Formula Count: 1Block Formula 0: ((6 ~ 14 based on Refine Level) - 4)^2Block Dependence: N/ABlock Logic Tree:logic tree on stack(nil)<-0x14049e0:COND:getrefine;dmprange; cond (6 ~ 15) --- 13110 ---Block Address: 0xd44630Block ID: 8Block Link: 5Block Type: bonus2Block Argument Count: 3Block Argument 0: bIgnoreDefRaceRateBlock Argument 1: RC_DemiHumanBlock Argument 2: 5Block Translation Count: 4Block Translation 0: demi-humanBlock Translation 1: 5Block Translation 2: +5%Block Translation 3: Ignore +5% physical defense of demi-human enemy.Block Formula Count: 0Block Dependence: N/ABlock Logic Tree:logic tree on stack(nil)<-0x13ee570:COND:getrefine;dmprange; cond (6 ~ 15) --- 13110 ---Block Address: 0xd76788Block ID: 9Block Link: 5Block Type: bonus2Block Argument Count: 3Block Argument 0: bIgnoreDefRaceRateBlock Argument 1: RC_PlayerBlock Argument 2: 5Block Translation Count: 4Block Translation 0: playerBlock Translation 1: 5Block Translation 2: +5%Block Translation 3: Ignore +5% physical defense of player enemy.Block Formula Count: 0Block Dependence: N/ABlock Logic Tree:logic tree on stack(nil)<-0x13f09c0:COND:getrefine;dmprange; cond (6 ~ 15) --- 13110 ---Block Address: 0xda88e0Block ID: 10Block Link: -1Block Type: ifBlock Argument Count: 2Block Argument 0: ( getrefine ( ) > 8 )Block Argument 1: { bonus4 bAutoSpellOnSkill , GS_RAPIDSHOWER , GS_GLITTERING , 1 , 1000 ; bonus2 bSkillAtk , GS_RAPIDSHOWER , getrefine ( ) * 2 ; }Block Translation Count: 1Block Translation 0: 9 ~ 15Block Formula Count: 0Block Dependence: N/ABlock Logic Tree:logic tree on stack(nil)<-0x14152e0:COND:getrefine;dmprange; cond (9 ~ 15) --- 13110 ---Block Address: 0xddaa38Block ID: 11Block Link: 10Block Type: bonus4Block Argument Count: 5Block Argument 0: bAutoSpellOnSkillBlock Argument 1: GS_RAPIDSHOWERBlock Argument 2: GS_GLITTERINGBlock Argument 3: 1Block Argument 4: 1000Block Translation Count: 6Block Translation 0: Rapid ShowerBlock Translation 1: Flip the CoinBlock Translation 2: 1Block Translation 3: 100Block Translation 4: +100Block Translation 5: Add +100% chance of auto-casting Flip the Coin[Lv.1] when using Rapid Shower.Block Formula Count: 0Block Dependence: N/ABlock Logic Tree:logic tree on stack(nil)<-0x13f2e10:COND:getrefine;dmprange; cond (9 ~ 15) --- 13110 ---Block Address: 0xe0cb90Block ID: 12Block Link: 10Block Type: bonus2Block Argument Count: 3Block Argument 0: bSkillAtkBlock Argument 1: GS_RAPIDSHOWERBlock Argument 2: getrefine ( ) * 2Block Translation Count: 4Block Translation 0: Rapid ShowerBlock Translation 1: 18 ~ 30Block Translation 2: Increase +18% ~ +30% (Refine Level * 2)Block Translation 3: Increase +18% ~ +30% (Refine Level * 2) Rapid Shower damage.Block Formula Count: 1Block Formula 0: Refine Level * 2Block Dependence: N/ABlock Logic Tree:logic tree on stack(nil)<-0x13f5260:COND:getrefine;dmprange; cond (9 ~ 15) Fixed some of the previous bugs and proof read the item_bonus.txt three times. Edit: I actually think this is cleaner: -> Increase +4% ~ +100% (based on Refine Level) physical damage on demi-human enemy.
-
Hey guys, I'm working hard to solve a crucial feature with expressing the formula for expressions that includes variables and functions. In addition, I'll be fixing certain semantics and improving the usage of the program, i.e. simple enough that anyone who can setup a local server can use. I'll also be reporting possible item database errors that I found; whoever decided to change the status constant defines failed to do the same in the item database. The challenge is to format expressions that are script as follows: getrefine() > 14) ? 14 : getrefine() or 50 + 6000 * (readparam(bStr) > 90) The current solution is this: if (Refine Rate is greater than 14) then 14 else 0~14 and 50 + 6000 * (STR is greater than 90) Right now, at the time of writing this post, I want something like this: (This makes more sense when the solution is substituted into the translations ) 0~14 based on Refine Rate and 50 + 6000 * (0~1) base on STR An exact and verbose solution requires branching each conditional operator ? to produce a tree of possible values to be substituted, i.e. 2 ^ (# of ? operators).
-
Update. New project repository: https://github.com/trickyloki3/eAdb.Compiler3 The project is almost finished. Currently supports eAthena, rAthena, and Hercules databases. Still need to fixed some bugs with porting. Goal: Server Item Database -> Item Script -> [eAdb.Compiler] -> Item Script Description-> Client Tables Dumps all databases into a sqlite3 database (~3MB) ./conv [eathena, rathena, hercules, all] Dumps Hercules databases into sqlite3 database (~1MB) [separate compilation 'make hitem' requires compiling and linking Hercules' Libconfig (See 3rdparty/libconfig in Hercules' git repository)] ./hitem Uses athena.db database to generate English translation for item database ./item [eathena, rathena, hercules]
-
Currently working on make this project accessible to everyone. Since Hercules uses a modified grammar for libconfig to support <" "> multiline scripts, I can't maintain my current license if I package the modified libconfig library or code with my project. My new plan of action is to write database converters for eAthena, rAthena, and Hercules and dump everything into a sqlite3 database file that comes bundle with the project. This means that if you want the project to work with your custom databases, then you need to run the database converters for your emulator. This is more difficult with Hercules because you need to build and link the modified libconfig library under 3rdparty/libconfig. (As the standard libconfig-devel does not support <" ">) More soon.
-
Yeah, I still need to proof-read the mapping between the constants and its user-friendly string and figure out a way to make the actual (calculated) expression look nice. The two solutions I can think of is 1) listing all the variables (readparam(bStr, bAgi, ...), getrefine, etc) 2) write the formula (store internally). (The reason why I calculate it down to minimum and maximum is because some expressions don't translate simply or cleanly.)
-
Hey everyone, the project has reached a point where it can compile a subset of the scripting language. I've attach with the this post a sample of a translation of an rAthena item_db.txt to idnum2itemdesctable.txt. (Support for Hercules coming soon or if some program exist to convert Hercules' databases to rAthena databases.) Warning: (for-loop is not implemented so comment out that one item; official database may contain about ~5 errors) and (pow() handling produces awkward results) and some integer-post processing may be off by one digit. For example, Item ID: 13110 Item Name: Glorious Pistol Item Script: bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0;if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,pow(((getrefine()>14)?14:getrefine())-4,2); bonus2 bAddRace,RC_Player,pow(((getrefine()>14)?14:getrefine())-4,2); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) { bonus4 bAutoSpellOnSkill,"GS_RAPIDSHOWER","GS_GLITTERING",1,1000; bonus2 bSkillAtk,"GS_RAPIDSHOWER",getrefine()*2;} Item Translation: Add +55% physical damage against demi-human monsters.Add +55% physical damage against mvp monsters.Pierce +20% physical defense for demi-human monsters.Pierce +20% physical defense for mvp monsters.Weapon is indestructible.Condition [Refine Rate 6 ~ 15] -> Add -121% ~ +121% physical damage against demi-human monsters. -> Add -121% ~ +121% physical damage against mvp monsters. -> Pierce +5% physical defense for demi-human monsters. -> Pierce +5% physical defense for mvp monsters.Condition [Refine Rate 9 ~ 15] -> Add 100% chance of auto-casting Rapid Shower[Lv.1] when using Flip the Coin. -> Increase +18% ~ +30% Rapid Shower damage. idnum2itemdesctable.txt
-
Thanks Dastgir, I'm still trying to finish this project and getting exposure for it. Hopefully, I'll get feedback later in the future.
-
ItemDB Script Translation Project Project License: MIT Project Site: https://github.com/trickyloki3/eAdb.Compiler3 Language: C Project Alt Link: http://forum.ratemyserver.net/ro-graphic-coding-media/itemdb-translation-project/ Project Alt Link: http://rathena.org/board/topic/99684-itemdb-script-translation-project/ dbro: an item database that uses eadb.compiler http://devilishro.net/ (currently in development) Hi everyone, I've developed a complete program that can translate item scripts (consisting of a subset of the scripting language) into English translations. The program is developed to streamline item development and couple the item database with item client tables. Please let me know how to improve the project. Thank you! Project Update * Support pet script and pet loyal script. * Support item combo bonus. * Support bonus minimization. * Simplified packages and boxes. * Support project integration; exit-free and memory-leak free. * Support for-loop (limited) w/ iterable set blocks. * Simplify complex expressions. * Support pre-renewal and renewal eAthena, rAthena, and Hercules databases. * Support flavour text and item attribute in final translation. * Support eAthena, rAthena, Hercules idnum2itemdesctable.txt format generation. * Support Hercules' bindonequip, buyingstore, delay, stack, and trade settings. * Support eAthena, rAthena, Hercules itemInfo.lua format generation. Testing * Generated itemInfo.lua tested on client 20130807a. Todo * Create Visual Studio project for compilation on Windows. * Create Autotools for compilation on Unix and Linux. * Write guides on how to use the stupid program. You can get the latest item description translation over on my project page on GitHub. I've added both the idnum2itemdesctable.txt and itemInfo.lua formats for eAthena, rAthena, and Hercules, including pre-renewal and renewal. https://github.com/trickyloki3/eAdb.Compiler3