Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 04/04/13 in all areas

  1. Channel System r17228 adds a system of chat channels with far greater versatility than the former @main chat. @main is now an alias for the @channel command. All settings are located in trunk/conf/channels.conf. Features New atcommands, @join and @channel, to manipulate chat channels. Speak in a #channel by either: Sending a whisper to #channel. Binding your global chat to the channel (@channel bindto <#channel_name>). Set default channels, available when the server starts: /* Default channels (available to all players) */ default_channels: { /* channel_name : channel_messages_color */ main: "Yellow" support: "Blue" trade: "Red" chat: "Default" /* Add as many channels as you'd like. */ } Automatically join local map channels (#map) and guild ally channels (#ally): /* "map_local_channel" is an instanced channel unique to each map. */ map_local_channel: true map_local_channel_name: "map" map_local_channel_color: "Yellow" map_local_channel_autojoin: true /* Disable autojoin in specific maps through mapflag 'nomapchannelautojoin'. */ /* "ally_channel" is a channel shared by all your guild allies. */ ally_channel_enabled: true ally_channel_name: "ally" ally_channel_color: "Green" ally_channel_autojoin: true Use the 'nomapchannelautojoin' mapflag to disable auto-joining the #map channel on a map:<map_name> mapflag nomapchannelautojoin Allow users to create private channels if 'allow_user_channel_creation' is true: /* Allow users to create their own (private) channels through @channels command? */ /* (must also allow players to use @channels in groups.conf) */ allow_user_channel_creation: true Create a list of colors to use in channels: /* Colors available */ colors: { Default: "0xffffff" /* Custom channels will use the first in the list unless a font is selected through @channel. */ Red: "0xff0000" Blue: "0x83cfe9" Orange: "0xe57c00" Cyan: "0x00b89d" Yellow: "0xffff90" Green: "0x28bf00" Normal: "0x00ff00" /* Add as many channels as you'd like. */ } Credits go to @Ind for the coding, and @Lighta for helping out. Feel free to post all suggestions or reports!
    5 points
  2. I'm glad you guys liked it enough to merge, however this is a unfair statement, the feature's design was the joint effort from our whole team, not only me.
    3 points
  3. Later episodes never existed in pre-renewal. It is possible to do a direct Renewal -> Pre-Renewal conversion for some stats, but not for all. So you'd need to manually adjust those numbers. When wondering how to do that, you could for example do a statistical evaluation on the differences and then apply it or you could do it so that the stats are adjusted depending on how the different mechanics works (due to assumptio and hard def being strongly nerfed in renewal, you need to increase the attack power a lot in the conversion, and you could increase it so that the final damage with perfect armor and buffs stays the same). Another alternative is to understand how the original game designer of RO was thinking by looking at all his work and then just put the stats with a copy of his mindset. Depending on the method you will get completely different results however, so I'm not sure yet which path to follow. I tried to contact the server admins of the high population private servers and work with them together on it, but they kinda ignored my e-mails, so I assume they probably want to keep their results for their own servers only. My currently proposed solution would be (warning: the renewal stats are still wrong in rAthena for anything after bifrost): >For monsters with level 96-160 in renewal< Level - reduce by 30 (130 -> 100) HP - same DEF/MDEF - recalculated according to official formula (I wrote a converter for this) VIT - half of renewal VIT (60 -> 30) ATK - 5x of renewal ATK (700 -> 3500) BaseEXP - 3x (+ 5% bonus*), should not apply to MVPs JobEXP - 2.67x (+ 5% bonus*), should not apply to MVPs >For monsters with level 20-95< Level - same HP - 3x of renewal HP (5000 -> 15000), should not apply to MVPs DEF/MDEF - recalculated according to official formula (I wrote a converter for this) VIT - half of renewal VIT (30 -> 15) ATK - 3x of renewal ATK (500 -> 1500), should not apply to MVPs BaseExp - 3x (+ 5% bonus*), should not apply to MVPs JobExp - 1.74x (+ 5% bonus*), should not apply to MVPs Explanations: Level: Well in pre-renewal the max level for monster is basically 120. So for high level monsters it makes sense that they should have a lower level or else they will have too high HIT/FLEE as well as status resistances. Why I wouldn't reduce the level for lower level regions in renewal has a simple reason - players will spend most of their time above level 80 so adding a real low level region isn't really very interesting. HP: For high level monsters the HP is pretty similar in pre-renewal and renewal at the same level. For lower level monster the HP was reduced in renewal. 3x is just an estimated value, probably could get a more accurate one. If we look at the Brasilis differences, we can notice that x3 gets quite close, though. I wouldn't mess with MVP HP at all, though. Most MVPs are quite similar in their stats if you compare renewal and pre-renewal. DEF/MDEF: There is a fixed formula for this so not much to discuss here. Y'know that (4000+DEF/4000+10*DEF) thingy. VIT: It was around double in renewal since attacks that deals more damage on higher VIT have been nerfed strongly. So if you revert pre-renewal you have to half it again. ATK: In higher level regions, players can reduce damage in pre-renewal a lot stronger than in renewal, so the ATK should be multiplied with 5 to get the same final result on the damage. BaseEXP: It's a bit tricky because you need to apply the "more exp if you kill higher level monsters" system directly to the exp in pre-renewal. Basically if you have a level 101 monster and a level 103 monster, you would want the level 103 monster to give 10% additional bonus exp. The multiplier isn't actually 3x, it's just there to give you some estimate. It is better to make this vary on the monster level the map is based on. For example you have a map with a 101 and 103 level mob and a map with a 121 and 123 level mob. I'd say multiplier for the first map is 2.5x and for the second is 3x. But the level 103 mob should be 10% more than 2.5x which is 2.75x and the level 123 should be 10% more than 3x which is 3.3x. Also if you change the HP, the exp should scale accordingly. JobEXP: Same as base exp except that there is an official fixed multiplier for job exp based on the level which is fairly simple: For level 1-19 and level 96-160 the multiplier is 0.89. For level 20-95 the multiplier is 0.58. (If you check renewal job exp of monsters you will see a big jump in job exp from level 19 to 20 and level 95 to 96.) If you don't want to mess so much with lower level monster stats, there is also an "easy type" version you could use, since especially around level 50, renewal and pre-renewal monsters are almost identical: >Easy type conversion for monsters between level 50 and 95< Level - reduce by 30 (80 -> 50) HP - same DEF/MDEF - recalculated according to official formula (I wrote a converter for this) VIT - half of renewal VIT (30 -> 15) ATK - same BaseExp - 1x (+ 5% bonus*), should not apply to MVPs JobExp - 0.58x (+ 5% bonus*), should not apply to MVPs This way you can just leave HP and ATK alone and only apply minor conversions. Exp will also almost stay the same except for the 5% bonus and the job exp multiplier.
    2 points
  4. Well, I'm not updating the current SVN version I have for my own personal reasons, but I'm working on the additions separately to translate the new ones. However, the translation will have all lines in the same file. Working! Edit: I've translated it but I'll wait for Tragedy for revising the new messages. Link to the folder: https://drive.google.com/folderview?id=0B2UkVqklEED8Tkh5RmVqejhKc3c&usp=sharing Edit 2: Slightly revised by me, but it's preferable to be revised by another person for obvious reasons.
    2 points
  5. (UPDATED 2022-05-16) Unlike popular believe, Brasilis actually existed in pre-renewal, but only on bRO and jRO. Since it never existed on kRO, it is undefined in what rAthena consider "official stats". As of today I pushed the pre-renewal Brasilis monsters stats (jRO version) to rAthena master. Originally we left the guessed values as they were, but as we now have the YAML format that allows overwriting only selected stats of a monster rather than having to copy over the whole line, it's better to have as many official values as possible already in the base file. Now the only thing you need to do to get the bRO version of pre-renewal is to overwrite the ATK values. I've attached mob_db_bra_atk.yml which includes these changes. If you have no custom changes to your monsters, then you can just name it "mob_db.yml" and overwrite the file in \db\import\. Otherwise just copy the monster lines into the "Body" section of your file. I originally released the monster stats already in 2013, but the jRO values were guessed based on Doddler's comment that they seem to be about "3x" as high. In the meantime jRO actually released their customized values so we know the real ATK stats now. I also fixed the ATK in my original release from 2013, but keep in mind that the mob_db.txt format changed. This monster lines in the file will only work until rAthena from March 2016. After that you will need to fix the "mode" of the monsters (see here: https://github.com/rathena/rathena/commit/55e4df14c2141f291a985c391408a045ec1b25c4) or just use latest rAthena which uses YAML format. My old file also includes the spawns, they should still be working, but I did not test it (alternatively you can just use the renewal spawn files for bra_fild and bra_dun). bRO and jRO have slightly different versions, here are the differences: - the bRO version is the original version, but features really low monster attack, jRO considered this as too easy / exploitable and decided to strongly increase the ATK of the monsters (around 3x as much) - bRO's field map mainly has Headless Mule's and Curupira spawning, first floor is mainly Piranha and second floor is mainly Iara - jRO removed Headless Mule from the field map completely and added more Toucan and Jaguar spawns instead - jRO added Thara Frog and Headless Mule to the first dungeon floor - jRO removed all weaker monsters except Hydra on the second dungeon floor and added Headless Mule instead Issues that are not 100% official because a leak is missing: - monster modes in pre-renewal are unknown (both bRO and jRO), jRO reported that Iara was actually aggressive, however since we have no leaks on the monster modes, I simply used the renewal ones - the spawn types of jRO are 100% official, but the amounts are estimated Everything else should be 100% accurate. bra_all.txt mob_db_bra_atk.yml
    1 point
  6. RO Open Setup About Clone of the default game setup application, shipped with every RagnarokOnline installation. It works on every 32-bit Microsoft* Windows* platform. Source is available for customizations. Known Issues None. Translations English - 100% (primary) French - 100% (Valioukha) German - 100% (Xalion) Brazilian Portuguese - 100% (EvilPuncker) Czech - 100% Japanese - 100% (Mintmoon) Russian - 100% (Jarek) Simplified Chinese - 100% (tinpont) Spanish - 100% (jaBote) Thai - 100% (iSuzutsuki) Traditional Chinese - 100% (Angelmelody) translate OpenSetup into your language Q & A Why does the client not use the Lua settings? Use latest OpenSetup version. If that's already the case, use newer client. Why does OpenSetup not let me to save without Administrator? A few settings are still written to a location in the registry, that needs Administrator rights. I have have issues with OpenSetup, is there something I should add to my report? When you experience the issue, press Shift+Esc inside the OpenSetup window until it closes and provide the generated log file (exename.log) along with your report. Download & Website http://ai4rei.net/p/opensetup (discord available for real-time support) License This work is licensed under a Creative Commons Attribution-Noncommercial 3.0 Unported License.
    1 point
  7. File Name: [Mapflag] Mobitemadder File Submitter: Zephyr File Submitted: 28 Dec 2012 File Category: Source Modifications Content Author: Zephyr This mapflag sets more drops for monsters at the map that it's been attached. Sintax: mapname<TAB>mapflag<TAB>mobitemadder<TAB>mob_id,item_id,drop_per{,item_id,drop_per(...)} You can set up to ~50 more items for mobs. "drop_per" is the chance of drop, from 1 (0,01%) to 10000 (100%). There's an example at the screenshot, I setted a Yggdrasil Berry with 100% of chance for the Poring at prt_fild08 map. You can set a lot of mobs, but you have to set more mapflags for your maps. Click here to download this file
    1 point
  8. Xantara's FluxCP Everyone knows of FluxCP. However, with the creation of rAthena, there became a need to support renewal changes and other features such as the new group system. This is where my Control Panel comes in. Xantara's FluxCP is a free and open source control panel to work with rAthena. Forked from FluxCP by Paradox924X and Byteflux at r1121. I will continually merge updates from the original FluxCP. Demo: http://web.artistic-coder.com/fluxcp-rA Note: this site is used to test new functionality and custom addons so it may not always be functioning properly Features The original/base FluxCP already comes with a lot of features. Here I will only highlight those that came after the fork. For a full list, click here. Updated Ragnarok Data Full Birthdate Functionality Working GM Group System Mob Skills SQLized Zeny Log Page Specific Item Drop Rates Toggle for Pre-Renewal or Renewal SQL Data Alchemist Ranking Blacksmith Ranking Paginated Item Shop Character/job images (static) WIP Account management system (link one or more in-game accounts to one CP account) Queued Accepted Suggestions (have suggestions? post them here!) Search in logs page Pin code functionality Character sprites with palettes (would replace static images) Requirements Apache webserver with PHP 5.2 or greater PDO extension with MySQL support (http://www.php.net/pdo) PHP GD2 for security images (Optional) Enabled Zip extension for exporting guild emblems (Optional) Apache/mod_rewrite for using the "Clean URLs" feature Download There are three ways to get a copy of this Control Panel. For detailed installation instructions, click here (TBD). 1. GIT Clone git clone https://github.com/missxantara/fluxcp-ra.git * For Windows, you can take a look at using TortoiseGit with its friendly user interface. 2. SVN Checkout svn checkout https://github.com/missxantara/fluxcp-ra/trunk/ * For Windows, you can take a look at using TortoiseSVN with its friendly user interface. 3. ZIP Download https://github.com/missxantara/fluxcp-ra/archive/master.zip Extra Downloads Extract to the root folder of your FluxCP system Job Image Files: http://missxantara.github.io/fluxcp-ra/downloads/FluxCP_Jobs_Images_2012-04-28.zip Updated details: April 28, 2013 Credits: Xantara Monster Image Files: http://missxantara.github.io/fluxcp-ra/downloads/FluxCP_Monsters_Eclage_14.2.zip Updated details: Mob ID #2380 of Eclage (Episode 14.2) Credits: Brynner Item Icon Files: http://missxantara.github.io/fluxcp-ra/downloads/FluxCP_Item_Icons_2012-04-08.zip Updated details: April 8, 2013 Credits: Latheesan's Extractor Item Image Files: http://missxantara.github.io/fluxcp-ra/downloads/FluxCP_Item_Images_2012-04-08.zip Updated details: April 8, 2013 Credits: Latheesan's Extractor Quick Links Wiki: https://github.com/missxantara/fluxcp-ra/wiki Bug/Suggestion Reports: https://github.com/missxantara/fluxcp-rA/issues GitPage: http://missxantara.github.io/fluxcp-ra Misc. Feel free to post any suggestions here. If suitable, they may be polled by general users before being decided to be implemented or not. If you have a feature already coded that you would like to share, please do send a GIT pull request or send me an SVN diff of the work - I'd love to take a look at it! Please note that working on this open-source project will furthermore serve as a learning opportunity for me. If you find that I've implemented something that could be improved, I urge you to let me know - your knowledge on this subject would be greatly appreciated! Like my work? Rep up the topic first post
    1 point
  9. Hello, Since I'm almost done making my GRF Encryptor/Decryptor + Client Configuration , I made a new Project which can prevents hack tools to help rathena members whom cannot afford buying such as Harmony. And im willing too to implement Auto-Ban when using hack tools. So , now i have started adding some source code but , i am still analyzing and studying each of the code written in every source code file. Now , What im gonna asking to all if you can also share what you have learn in every source code file especially to the Community Contributors about the functions to reduce my time studying/analyzing the code. . I would appreciate and glad to those who will share their learning's about this. Just PM me and Feel free to share your knowledge about the source code functions . Thanks
    1 point
  10. Here the current mapzone merge from Hercules : http://pastebin.com/cUJL5PqC I didn't test it all and will probably take a long time to do all, so this are the current issues : - @gvgon/off @pvpon/off won't change the zone - @mapflag can't set zone atm like he use to with restricted But if we do that those refresh it is there really a difference between mapflag and zone ? I mean that look pretty much the same except one is on one file and could benefit heritage and could easier presentation. (yes could figure out restricted&2 = pvp not that obvious) but beside inherit it's pretty much the same. So idk, imo I think all mapflag should disapear to become zone and only deal with them but not have both simultaniously since it's bring useless complexion, please tell me what you think I'll talk to it on hercules too I think. Well I suppose we could say a zone regroup multiple map while mapflag is more for one but idk, like mapflag Town and zone Town as well kinda disturb me. add an acmd to test it: http://upaste.me/479f5591f180fd1a
    1 point
  11. Idea : http://goo.gl/83liA Preview : This script can supply a way to retrieve your account passwords. Download : SQL : ( Must install it !! ) CREATE TABLE IF NOT EXISTS `validate` ( `email` varchar(255) NOT NULL default '', `md5` varchar(255) NOT NULL default '', `account_id` int(11) unsigned NOT NULL default '0', `status` tinyint(1) NOT NULL default '0', PRIMARY KEY (`account_id`) ) ENGINE=MyISAM; Script : Validate System.txt Source : ( Must install it !! ) http://rathena.org/b...ail-to-someone/
    1 point
  12. Search again, I found plenty of getitem
    1 point
  13. But why penalize your character for getting levels? Seems like this was a countermeasure vs bot influx, mainly. Lower level players don't stay that way for long, unless you intentionally go waste exp on 99%, and what happens when there isn't any steady growth of newcomers? You're stuck with your 150 -160 char and an army of low-level char slots for different areas just because you badly need your Unripe apple\skelbone\whatever, and you have to either delete them or constantly create new ones if they somehow get over the level range. Bad enough you should spend your time grinding for them with usual drop rates, but try to get those 1200 coral reefs from penos with half the drop rate - unless your grandchildren inherit your ro passion, you won't be getting that heartpin headgear any time soon:))
    1 point
  14. Yes, I was actually working on that project for a while, but the problem I mentioned above still remains: There are three different ways on how to do the conversion which all have good reasons why they are close-to-official and it's hard to decide for one. Just take Scaraba Hole, on the one hand all pre-renewal monsters above level 99 have HUGE attack at least 8000 and for renewal scaraba hole monster actually do a lot of damage, but giving them 10000+ damage makes it indeed a lot harder than in renewal. Not to mention that there is later a nightmare mode, how high do you want to put the damage there? 40000+? Kinda pointless, since players can't even level above level 99 (unless the private server raises the max level). So in the end it might makes more sense to give them ~4000 attack, that reflects the difficulty better and then you still have room to make nightmare mode harder. Or maybe use an average between both versions? Not very easy to decide. And even trivial things like halving VIT is not so clear. It seems important so that AD is not overpowered, but the Biochemists on your server will totally complain about it, if you mess with that stat. So admins might still opt to leave it in just to not risk making their players angry. All these things will vary strongly on server decisions and what the players want and also custom server modifications (if they have max level 255 they might want those monster be a lot stronger). It's also possible to write a full converter via statistical evaluation. It just needs to check the differences between renewal and pre-renewal for monsters actually existing in pre-renewal and then learn by calculating average differences how much the stats are different on average for that race, size, element level and level range and then just apply those average differences on the new monster. But there are quite some monsters that got significantly changed that will make such a converter very unclean, for example the level and power and desert wolf is really high renewal, much higher than in pre-renewal, but that doesn't mean that brute fire monsters should be generally a lot weaker and lower level in pre-renewal. But maybe I'll do a release with my preferred version eventually.
    1 point
  15. enter in /src/config/renewal.h, then comment (put a // at the start of the lines) in every definition.
    1 point
  16. Use delequip EQI_HEAD_MID; (head mid for example) What do you think?
    1 point
  17. Due to the heavy work load the devs are required to do, custom mods just don't don't even ping on the radar of things that need to get done. I understand that there is a section already in the forums to request to have skills added, but honestly it seems to get no real attention. The are a lot of source mods out there that are very useful and dont affect the 1:1 goal such as 'Manage Skill Damage' and etc. Why not have a special donation section toward the devs to have those kind of mods tested and officially installed. This is just a rough idea, but it would modivate some devs to adding stuff that the users are making also while expanding the features to keep rA on top of the RO universe! My idea basically consists of a user's mod being submitted in the proper forum section a lead dev will then determine if it would affect the 1:1 goal. Users don't donate for specific mods, instead that donate towoard the time the devs spending working on adding those mods. As for the mods that get installed that is up to the lead devs also, but for this to work custom mods have to actually be installed. As with any change there will be some bugs will eventually surface with a new mod, but that can be worked like any other bug. Peopleperson49
    1 point
  18. Some news today. Map loading I really improve my map loading : update the zlib unpacker, optimize the mesh compilation. It's now about 2-3 times faster than before. It takes ~3 seconds to load a map like Izlude or Prontera, instant loading for little map. Lighthalzen seems to be the slowest to load : ~5 seconds. I'm quite happy of the result. Sound objects I added sound objects to the map, I'm not certain of the volume to use for this objects (Audio API allow a min volume of 0.0 and max volume of 1.0; there are some sound object with a volume of 2.0 so not sure yet what the max volume is here). You can see the sound visualization of aldebaran (all porings are a sound object): Lub files Since Renewal, a big part of servers use lub files to store data info, so it should be normal for robrowser to load this files at runtime to build its DB. So I wrote a Lub decompiler (PHP, and converted the code to JS), it don't support all opcode but is enough to extract tables (I don't care of extracting functions). Here the PHP code in action: http://www.robrowser.com/prototype/lub/ For now I'm only able to extract lub version 0x51 but it seems some client use the 0x50 version (why ? ), so I will have to extend the code later. Sprite Rendering I re-wrote the whole Entity Manager code, as the old one it support all actions/animations. I added some setter to update automatically the sprites/act/palettes when modifying/setting a new visual look, ex: you change the sex, it will automaticaly reload all sprites/actions (head, hat, weapon, ...). Palettes are applying on the pixel shader to avoid having to re-build each sprite image (faster and easier). I also face the same problem as Shinryo in his topic and used the same way to fix it, but it's definitively not the way to go : collision with roof, weird result when sprite is on the water. The better way is to project the top vertices to the up vector of the bottom part and modifying UVs to match the new form in the screen, but it's more complicate and I lack knowledge on 3D maths. Weather I just add sky and clouds to some maps (yuno, gonryun, thana_boss, 5@tower, ...) using a config file in the DB, it's funny how the client manage it. The result looks good: Other news IE11 will support webgl Web API Device Storage will allow to use local GRF without needed to select it each time at runtime (I hope this standard will be accept...). Firefox added ASM.js in the latest nighty build. It allow to run some js (at this time just arithmetic code) script at 2 times slower than native speed (comparable as Java and C#), by doing some low typage on variables.
    1 point
  19. Updated translation for Bahasa Indonesia in same link at my SVN r14
    1 point
  20. Then try this one //===== eAthena Script ===================================================================== //= Fact Event //===== By: ================================================================================ //= Hellflaem //===== Current Version: =================================================================== //= 1.0 //===== Compatible With: =================================================================== //= Eathena SVN and 3ceam //===== Description: ======================================================================= //= It's a Facts Event based on about 52 Facts from the Facts Announcer Script by xienne15. //= The Event is started by players, They just have to click the npc. //= Players are asked to fill in the missing word(s) of the facts. //= If they get it right they get an item. Player just have to say the answer outloud. //========Credits=========================================================================== //=ToastOfDoom //=RxChris //========================================================================================== mora,137,171,3 script Facts Event 917,{ end; function DefineQuestion; function GetQuestion; function GetAnswer; OnMinute20: OnMinute40: OnMinute00: announce "The fact Event will begin in 3 minutes.",bc_all | bc_blue; announce "The Event is being held in Event Room. Please use custom warper to go there.",bc_all | bc_blue; sleep 60000; announce "The fact Event will begin in 2 minutes.",bc_all | bc_blue; announce "The Event is being held in Event Room. Please use custom warper to go there.",bc_all | bc_blue; sleep 60000; announce "The Fact Event will begin 1 minute.",bc_all | bc_blue; announce "The Event is being held in Event Room. Please use custom warper to go there.",bc_all | bc_blue; sleep 60000; announce "The fact Event has begun!",bc_all | bc_blue; announce "The Event is being held in Event Room. Please use custom warper to go there.",bc_all | bc_blue; L_loop: freeloop(1); do { set .@i, rand( .numQuestions ); // Randomly picks a fact. .@c++; } while( callsub( L_check, .@i ) && .@c < 100 ); freeloop(0); callsub( L_check, .@i, 0 ); if( !.count ) { npctalk "Sila isi dalam tempat kosong:"; sleep 2000; npctalk "Jika anda rasa ia betul. Saya akan memberikan anda beberapa syiling poring!"; } .count++; sleep 4000; npctalk "Fact: " + GetQuestion(.@i); defpattern 1, "([^:]+):.*\\s"+ GetAnswer( .@i ) +"(.*)", "Right"; activatepset 1; initnpctimer; end; OnTimer30000: npctalk "Maaf, anda mengambil masa yang amat panjang."; goto L_continue; Right: npctalk "Itu adalah betul, sila ambil ini."; getitem .rewarditem, rand( 1,500 ); // Randomly picks from 1 to 5. L_continue: deletepset 1; stopnpctimer; if( .count < .max_questions ) goto L_loop; .count = 0; // end of event while( getd( ".Q_session"+ .@j ) ) { setd ".Q_session"+ .@j, 0; .@j++; } npctalk "end of event"; end; L_check: .@i = getarg(0); while( .@j * 30 < .@i ) .@j++; .@j--; .@tmp = .@i - .@j * 30; if( getarg( 1,1 ) ) return getd( ".Q_session"+ .@j ) & 1 << .@tmp; else { setd ".Q_session"+ .@j, getd( ".Q_session"+ .@j ) | 1 << .@tmp; return; } function DefineQuestion { set .@a, .numQuestions % 128; set .@b, .numQuestions / 128; setd(".question_" + .@a + "$[" + .@b + "]", getarg(0)); setd(".answer_" + .@a + "$[" + .@b + "]", getarg(1)); set .numQuestions, .numQuestions + 1; return; } function GetQuestion { return getd(".question_" + (getarg(0) % 128) + "$[" + (getarg(0) / 128) + "]"); } function GetAnswer { return getd(".answer_" + (getarg(0) % 128) + "$[" + (getarg(0) / 128) + "]"); } OnInit: set .rewarditem, 7539; //Poring Coins .max_questions = 10; // 10 questions if more than 10 questions are defined DefineQuestion("What is your mum name ? _____ ","poring"); DefineQuestion("What is your father name ? _____ ","poporing"); if( .numQuestions < .max_questions ) .max_questions = .numQuestions; end; } ~unlimit fact
    1 point
  21. That means at 00, 20, 40 minutes the event start. - There is a broadcast every minute (3, 2, 1 min) then the questions are asked - the npc ask max 10 questions but just 3 if you set just 3 questions etc.. - the npc doesn't ask the same question in the same event - you can set 32 questions max in the setting (tell me if you want exceed this limit)
    1 point
  22. //===== eAthena Script ===================================================================== //= Fact Event //===== By: ================================================================================ //= Hellflaem //===== Current Version: =================================================================== //= 1.0 //===== Compatible With: =================================================================== //= Eathena SVN and 3ceam //===== Description: ======================================================================= //= It's a Facts Event based on about 52 Facts from the Facts Announcer Script by xienne15. //= The Event is started by players, They just have to click the npc. //= Players are asked to fill in the missing word(s) of the facts. //= If they get it right they get an item. Player just have to say the answer outloud. //========Credits=========================================================================== //=ToastOfDoom //=RxChris //========================================================================================== mora,137,171,3 script Facts Event 917,{ end; function DefineQuestion; function GetQuestion; function GetAnswer; OnMinute20: OnMinute40: OnMinute00: announce "The fact Event will begin in 3 minutes.",bc_all | bc_blue; announce "The Event is being held in Event Room. Please use custom warper to go there.",bc_all | bc_blue; sleep 60000; announce "The fact Event will begin in 2 minutes.",bc_all | bc_blue; announce "The Event is being held in Event Room. Please use custom warper to go there.",bc_all | bc_blue; sleep 60000; announce "The Fact Event will begin 1 minute.",bc_all | bc_blue; announce "The Event is being held in Event Room. Please use custom warper to go there.",bc_all | bc_blue; sleep 60000; announce "The fact Event has begun!",bc_all | bc_blue; announce "The Event is being held in Event Room. Please use custom warper to go there.",bc_all | bc_blue; L_loop: do set .@i, rand( .numQuestions ); // Randomly picks a fact. while( .Q_session & 1 << .@i && .Q_session && .count < .numQuestions ); set .Q_session, .Q_session | 1 << .@i;// max 32 questions if( !.count ) { npctalk "Sila isi dalam tempat kosong:"; sleep 2000; npctalk "Jika anda rasa ia betul. Saya akan memberikan anda beberapa syiling poring!"; } .count++; sleep 4000; npctalk "Fact: " + GetQuestion(.@i); defpattern 1, "([^:]+):.*\\s"+ GetAnswer( .@i ) +"(.*)", "Right"; activatepset 1; initnpctimer; end; OnTimer30000: npctalk "Maaf, anda mengambil masa yang amat panjang."; goto L_continue; Right: npctalk "Itu adalah betul, sila ambil ini."; getitem .rewarditem, rand( 1,500 ); // Randomly picks from 1 to 5. L_continue: deletepset 1; stopnpctimer; if( .count < .max_questions ) goto L_loop; // loop 10 questions .count = 0; // end of event .Q_session = 0; npctalk "end of event"; end; function DefineQuestion { set .@a, .numQuestions % 128; set .@b, .numQuestions / 128; setd(".question_" + .@a + "$[" + .@b + "]", getarg(0)); setd(".answer_" + .@a + "$[" + .@b + "]", getarg(1)); set .numQuestions, .numQuestions + 1; return; } function GetQuestion { return getd(".question_" + (getarg(0) % 128) + "$[" + (getarg(0) / 128) + "]"); } function GetAnswer { return getd(".answer_" + (getarg(0) % 128) + "$[" + (getarg(0) / 128) + "]"); } OnInit: set .EventON, 0; set .rewarditem, 7539; //Poring Coins .max_questions = 10; // 10 questions if more than 10 questions are defined DefineQuestion("What is your mum name ? _____ ","poring"); DefineQuestion("What is your father name ? _____ ","poporing"); if( .numQuestions < .max_questions ) .max_questions = .numQuestions; end; } ~ I add after OnMinute OnMinute00: announce "The fact Event will begin in 3 minutes.",bc_all | bc_blue; announce "The Event is being held in Event Room. Please use custom warper to go there.",bc_all | bc_blue; sleep 60000; announce "The fact Event will begin in 2 minutes.",bc_all | bc_blue; announce "The Event is being held in Event Room. Please use custom warper to go there.",bc_all | bc_blue; sleep 60000; announce "The Fact Event will begin 1 minute.",bc_all | bc_blue; announce "The Event is being held in Event Room. Please use custom warper to go there.",bc_all | bc_blue; sleep 60000; announce "The fact Event has begun!",bc_all | bc_blue; announce "The Event is being held in Event Room. Please use custom warper to go there.",bc_all | bc_blue;
    1 point
  23. set .@i, countitem(7179); if (.@i) { delitem 7179,.@i; set #CASHPOINTS, #CASHPOINTS+.@i; }
    1 point
  24. i still need to have more stuff finished but its going to be beta-opened soon
    1 point
  25. There won't be, as it is on a different switch case statement.
    1 point
  26. There is already a SC_COMA (line 7828), there won't be a conflict ?
    1 point
  27. OnBreakEmp: // put doevent under OnAgitBreak ... query_sql "insert into woe_point values ( "+ getcharid(2) +", 1 ) on duplicate key update points = points +1"; end; Leave this alone in the script In guild/agit_main.txt add after OnAgitBreak: doevent "Woe Points::OnBreakEmp";
    1 point
  28. or, on your custom item, inside { Script }, give callfunc that call your function to give random item to player. itemid,,,,,,,,,,,,,,,,,,,{ callfunc CustomRand; } function%tab%script%tab%CustomRand%tab%{ switch(rand(2)){ case 0: getitem 501; break; case 1: getitem 502; break; } }
    1 point
  29. you have to follow this steps save a copy off status.c and unit.c to cover your ass, just in case you mess up your source! or either if you want perma endure back! go first to src/map/status.c EDIT THE TEXT it have to look like this: /** * It has been confirmed on official servers that MvP mobs have no dmotion even without endure **/ if( sc->data[sC_ENDURE] ) return 0; Then go to src/map/unit.c Edit the line delete all the text inside the green, It should end like this: struct unit_data *ud = unit_bl2ud(bl); if (delay <= 0 || !ud) return 0; if (type) { if (DIFF_TICK(ud->canmove_tick, tick+delay) > 0) return 0; recompile, and enjoy your no perma endure.
    1 point
  30. Alright! I came back again lol, it was a long time before i post another map here in this map thread! i cant say anything else aha. just rate em up! Video of the Map Screenshots in-game Hope you like it!
    1 point
  31. I don't know your 'Heroism badge' Item ID, so you have to edit the code a little and it's done guild_vs3,68,65,4 script Enchant Armor 73,{ if (Zeny > 10) { mes "[Apprentice Craftsman]"; mes "Atravez de los años estudie como encantar las weas."; next; mes "[Apprentice Craftsman]"; mes "Enchanting is an awesome skill that infuses a mysterious status power into the armor's hidden socket."; next; mes "[Apprentice Craftsman]"; mes "However, you have to keep in mind that if there are two armors of the same kind in your possession, the Enchantment will be applied in the order they are placed in your inventory."; next; mes "[Apprentice Craftsman]"; mes "In that case, the Enchantment may be applied to an item which you didn't mean to Enchant. So just bring ^5555ffONE Armor^000000 you want enchanted to be safe.."; next; mes "[Apprentice Craftsman]"; mes "I'm not responsible for what would happen if you have more than one of the same kind in your inventory."; next; switch(select("Non Slotted Armor.:Slotted Armor.:High Grade Armor.:Maybe next time.")) { case 1: switch(select("Mantle:Coat:Chain Mail:Full Plate:Silk Robe:Saint's Robe:Holy Robe:Wooden Mail:Tights:Silver Robe:Mage Coat:Thief Clothes:Legion Plate Armor:Lucius's Fierce Armor of Volcano:Saphien's Armor of Ocean:Aebeccee's Raging Typhoon Armor:Claytos Cracking Earth Armor:Ninja Suit:Chameleon Armor:Glorious Suit:Glorious Popularized Suit:Glorious Mass-Production Suit")) { case 1: callsub S_EnchantArmor,2307,6; case 2: callsub S_EnchantArmor,2309,6; case 3: callsub S_EnchantArmor,2314,6; case 4: callsub S_EnchantArmor,2316,6; case 5: callsub S_EnchantArmor,2321,6; case 6: callsub S_EnchantArmor,2325,6; case 7: callsub S_EnchantArmor,2327,6; case 8: callsub S_EnchantArmor,2328,6; case 9: callsub S_EnchantArmor,2330,6; case 10: callsub S_EnchantArmor,2332,6; case 11: callsub S_EnchantArmor,2334,6; case 12: callsub S_EnchantArmor,2335,6; case 13: callsub S_EnchantArmor,2341,6; case 14: callsub S_EnchantArmor,2344,6; case 15: callsub S_EnchantArmor,2346,6; case 16: callsub S_EnchantArmor,2348,6; case 17: callsub S_EnchantArmor,2350,6; case 18: callsub S_EnchantArmor,2337,6; case 19: callsub S_EnchantArmor,2386,6; case 20: callsub S_EnchantArmor,2394,6; case 21: callsub S_EnchantArmor,2395,6; case 22: callsub S_EnchantArmor,2396,6; } case 2: switch(select("Mink Coat:Lord's Clothes:Glittering Jacket:Formal Suit:Mantle(1):Coat(1):Chain Mail(1):Full Plate(1):Silk Robe(1):Scapulare(1):Saint's Robe(1):Tights(1):Silver Robe(1):Thief Clothes(1):Legion Plate Armor(1):Lucius's Fierce Armor of Volcano(1):Saphien's Armor of Ocean(1):Aebeccee's Raging Typhoon Armor(1):Claytos Cracking Earth Armor(1)")) { case 1: callsub S_EnchantArmor,2311,6; case 2: callsub S_EnchantArmor,2318,6; case 3: callsub S_EnchantArmor,2319,6; case 4: callsub S_EnchantArmor,2320,6; case 5: callsub S_EnchantArmor,2308,6; case 6: callsub S_EnchantArmor,2310,6; case 7: callsub S_EnchantArmor,2315,6; case 8: callsub S_EnchantArmor,2317,6; case 9: callsub S_EnchantArmor,2322,6; case 10: callsub S_EnchantArmor,2324,6; case 11: callsub S_EnchantArmor,2326,6; case 12: callsub S_EnchantArmor,2331,6; case 13: callsub S_EnchantArmor,2333,6; case 14: callsub S_EnchantArmor,2336,6; case 15: callsub S_EnchantArmor,2342,6; case 16: callsub S_EnchantArmor,2345,6; case 17: callsub S_EnchantArmor,2347,6; case 18: callsub S_EnchantArmor,2349,6; case 19: callsub S_EnchantArmor,2351,6; } case 3: switch(select("Meteo Plate Armor:Orlean's Gown:Life Link:Diablos Robe:Diablos Armor:Assaulter Plate:Elite Engineer Armor:Assassin Robe:Warlock's Battle Robe:Medic's Robe:Elite Archer Suit:Elite Shooter Sit:Sprint Mail:Kandura:Armor of Naga:Improved Tights")) { case 1: callsub S_EnchantArmor,2364,6; case 2: callsub S_EnchantArmor,2365,6; case 3: callsub S_EnchantArmor,2391,6; case 4: callsub S_EnchantArmor,2374,6; case 5: callsub S_EnchantArmor,2375,6; case 6: callsub S_EnchantArmor,2376,6; case 7: callsub S_EnchantArmor,2377,6; case 8: callsub S_EnchantArmor,2378,6; case 9: callsub S_EnchantArmor,2379,6; case 10: callsub S_EnchantArmor,2380,6; case 11: callsub S_EnchantArmor,2381,6; case 12: callsub S_EnchantArmor,2382,6; case 13: callsub S_EnchantArmor,2387,6; case 14: callsub S_EnchantArmor,2388,6; case 15: callsub S_EnchantArmor,2389,6; case 16: callsub S_EnchantArmor,2390,6; } case 4: mes "[Apprentice Craftsman]"; mes "Please come back when you have any interest in enchanting your armor."; close; } } else { mes "[Apprentice Craftsman]"; mes "I am in charge of Enchanting Armors. Simply put, I've been studying ways to power-up armor."; next; mes "[Apprentice Craftsman]"; mes "If by any chance, you would want to enchant your armor, bring me 400,000 zeny and the armor you want to enchant and you are all set to go."; close; } S_EnchantArmor: set .@itemid,getarg(0);//este numero toma el item set .@failrate,getarg(1);//este numero max en el random del enchant +3 a poner if ((countitem(.@itemid) > 0) && (countitem(.@itemid) < 2)) { mes "[Apprentice Craftsman]"; mes "Socket enchant wil cost you 250 Bravery, 250 Valor and 100 Heroism Badges. And there will be a random option enchanted. Of course, there is a chance of breaking your armor."; next; mes "[Apprentice Craftsman]"; mes "First and most importantly."; mes "^ff5555Existing Refine Level of the Armor"; mes "and Cards will be GONE.^000000"; mes "Do you still want to try an Enchant?"; next; switch(select("Hmm... Let me think it over.:Go ahead.")) { case 1: mes "[Apprentice Craftsman]"; mes "Well, I can't blame you. Safety first, Ey?"; mes "Now you have a nice day."; close; case 2: mes "[Apprentice Craftsman]"; mes "Quite of an adventurer huh? Well, shall we?"; close2; specialeffect2 EF_MAPPILLAR; if (countitem(7828) < 250) { mes "[Apprentice Craftsman]"; mes "Sorry, but you don't have enough Bravery badges."; close; } if (countitem(7829) < 250) { mes "[Apprentice Craftsman]"; mes "Sorry, but you don't have enough Valor badges."; close; } if (countitem(<yourheroismbadgeid>) < 100) { mes "[Apprentice Craftsman]"; mes "Sorry, but you don't have enough Heroism badges."; close; } progressbar "ffff00",0; set .@enc_ran,rand(1,.@failrate); delitem .@itemid,1; delitem 7828,250; delitem 7829,250; delitem <yourheroismbadgeid>,100; if (.@enc_ran == 1) {//ID's enchants +3 Str,Agi,Vit,Int,Dex y Luk respectivamente set .@addpart,4702; } else if (.@enc_ran == 2) { set .@addpart,4712; } else if (.@enc_ran == 3) { set .@addpart,4722; } else if (.@enc_ran == 4) { set .@addpart,4732; } else if (.@enc_ran == 5) { set .@addpart,4742; } else if (.@enc_ran == 6) { set .@addpart,4752; } // else if ((.@enc_ran > 6) && (.@enc_ran < 9)) {// estos siguientes 7 son los +2 // set .@addpart,4701; // } // else if ((.@enc_ran > 8) && (.@enc_ran < 11)) { // set .@addpart,4711; // } // else if ((.@enc_ran > 10) && (.@enc_ran < 13)) { // set .@addpart,4721; // } // else if ((.@enc_ran > 12) && (.@enc_ran < 15)) { // set .@addpart,4731; // } // else if ((.@enc_ran > 14) && (.@enc_ran < 17)) { // set .@addpart,4741; // } // else if ((.@enc_ran > 16) && (.@enc_ran < 19)) { // set .@addpart,4751; // } // else if ((.@enc_ran > 18) && (.@enc_ran < 22)) {// y estos ultimos 7 son los +1 // set .@addpart,4700; // } // else if ((.@enc_ran > 21) && (.@enc_ran < 25)) { // set .@addpart,4710; // } // else if ((.@enc_ran > 24) && (.@enc_ran < 28)) { // set .@addpart,4720; // } // else if ((.@enc_ran > 27) && (.@enc_ran < 31)) { // set .@addpart,4730; // } // else if ((.@enc_ran > 30) && (.@enc_ran < 34)) { // set .@addpart,4740; // } // else if ((.@enc_ran > 33) && (.@enc_ran < 37)) { // set .@addpart,4750; // } // else {// esto de aqui abajo se desactiva si no quieres que se rompan. // specialeffect2 EF_PHARMACY_FAIL; // mes "[Apprentice Craftsman]"; // mes "Well that's too bad."; // mes "The requested equipment has failed to enchant."; // close; } getitem2 .@itemid, 1, 1, 0, 0, 0, 0, 0, .@addpart; } } else { mes "[Apprentice Craftsman]"; mes "Hmm? There's nothing to be enchanted!"; mes "Please come back with just ONE equipment to be enchanted."; close; }
    1 point
  32. This is a fantastic and very reasonable way for rAthena to encompass a larger community. It certainly gets my vote. If no developer disagrees, we can begin work on this immediately. Lilith: Are you able to code the implementation of this, and contribute a Russian translation? To everyone else: If you have the time, please post or let me know if you're willing to write a translation for your native language. We will need, at minimum, one file for each language in our International Forums. That's also an interesting idea; it's not as immediately useful, but worth considering. Let's return to it after msg_conf is finished or under way.
    1 point
  33. This project's roles: Coding: @Lilith & @Lighta Translations: Chinese: /@goddameit German: @Snow/@Lemongrass Russian: @Lilith Bahasa Malaysia: @Feistz Bahasa Indonesia: @Cydh/@nanakiwurtz French: @Capuche Spanish: @jaBote/@Tragedy Portuguese: @mkbu95 A huge thanks to everyone for your willingness to get involved!
    1 point
  34. It will be released this year even if it's not totally finished, it will be a good thing to open the source Same here, I try to do my best to work on this project but sometimes it's hard to manage it and all others things (like my girlfriend lol). It can be a good thing to have a GRF history/diff/tracking tool to see what Gravity add/remove/change in its files, keep it up ! (I know some others guys had the same idea ) Nice js1k entry, I asked myself "why 'ninja' ?" the first time I saw it, nice done @project, No news, have problems with one of my computer, so I will try all I did in "bind mode" (rewrote the whole Entity manager) when I will switch to my girlfriend's home this week end
    1 point
×
×
  • Create New...