Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 11/15/14 in all areas

  1. https://github.com/ThemonChan/2014-Ragexe-Client // 2014-02-05bRagexe - Themon // 2014-03-05bRagexe - Themon
    1 point
  2. Hello all, As of yesterday's commit (https://github.com/rathena/rathena/commit/525e8178c27327f000e15ba557c6ed37a371c0b2) the default timer interval was reduced from 50ms to 20ms. This might increase CPU usage of your map-server. If you have trouble running your server with these settings, you can simply change it back. To change it back just find /src/common/timer.c and change #define TIMER_MIN_INTERVAL 20to #define TIMER_MIN_INTERVAL 50 In the following I will explain in-depth why we decided to change it despite the additional cost and what it'll effect. First of all, the official interval is 20ms, for everything. This was known for quite a while already, even back in eAthena. Back then it was decided that performance is more important, so higher intervals were set and for certain cases workarounds were written. Workarounds, however, are usually not a perfect emulation. Eventually there will always be a special case that is then again different from official servers and then you write another workaround for that. In the end, your code is full of workarounds (or simply not emulating accurately). The intervals were added the way they are around 10 years ago. Of course back then not only was the hardware a lot worse, but there were also a lot more servers with a high population. These days the hardware is a lot better and you already consider a server with 100 players as one with a high population. The official timer interval of 20ms, should no longer be a hindrance for most machines and servers anymore. Even if some server really has trouble with the interval, the owner can simply set the timer interval to what he needs (or buy better hardware alternatively), but we decided that the default setup for rAthena should be as close to official as possible. So what are the benefits? The greatest benefit of using the official interval for our timers is that it strongly improves the synchronisation between client and server. I realized this when I investigated why skills could be "chained" on official servers but failed to chain most of the time on my local rAthena test server. I originally thought the official server had implemented some kind of "skill queue" system that remembers all commands from the client and then executed them whenever there was time, this proved to be wrong. In fact, the client is the part that handles the skill queueing itself. It will remember skill requests the user requested and only send them to the server when it thinks a new skill can be used. But this also means that server and client need to be in perfect sync or otherwise the client will send a new skill request while the server still thinks that no skill can be used yet. This is especially noticable at the end of a cast time. When the client doesn't receive the skill use packet fast enough, it will think that the skill failed and then send the next skill requests from its queue. To illustrate this, here is an example: Basically what happens with 50ms interval is this (assuming 160 aspd = 400ms aMotion): - 0ms: the player casts a skill with 2000ms cast time - 0ms: we tell the client "cast time 2000ms" - 0ms: we create a timer to execute skill_castend at 2000ms - 1000ms: the player issues another command to cast the same skill again, the client will remember it - 2000ms: nothing happens (timer interval not reached yet) - 2030ms: we receive a skill request from the client to cast the skill again, but since the current skilltimer is still active, we just drop it - 2050ms: the skill gets executed - 2450ms: now the server is ready to receive a new skill request (aMotion ended) Because of this the skill request given during cast time gets completely lost. With a timer interval of 20ms the following will happen: - 0ms: the player casts a skill with 2000ms cast time - 0ms: we tell the client "cast time 2000ms" - 0ms: we create a timer to execute skill_castend at 2000ms - 1000ms: the player issues another command to cast the same skill again, the client will remember it - 2000ms: nothing happens (timer interval not reached yet) - 2020ms: the skill gets executed - 2020ms: client realizes the skill is executed and applies aMotion delay to the remembered skill - 2420ms: now the server is ready to receive a new skill request - 2450ms: we receive a skill request from the client to cast the skill again, server will accept it and execute the skill In this case the skill request is not lost and you can easily chain skills together. Note, that only some skills can be chained like this, particularly those with no after cast delay like e.g. Holy Light. Of course this is just one example where client-server synchronisation matters. Timers are used almost everywhere, so there is a wide array of benefits from using the official interval. Everything simply feels more "fluent". Another benefit is that with a timer interval of 50ms, skills with cast time would go off 30ms later than officially. It might only be a small delay, but especially for skills with low cast time or special situations where you get attacked a lot while trying to cast, an interval of 20ms is a noticable improvement. It also closes the gap between instant cast and cast time a little. The interval is also relevant for "timer damage" as in, damage you receive in regular intervals. The timer interval used can for example have an effect on whether you manage to walk to the next cell between hits or not. While we updated the timer interval, we did not update the skill unit timer interval you can find in skill.c: #define SKILLUNITTIMER_INTERVAL 100Even though the official interval is again 20ms, reducing this interval will have quite a big cost increase as it means that every single placed skill unit needs to be checked in this interval and there are only two skill units that even still use an interval this small: Firewall and Crimson Fire Formation. With the default settings these skills will simply deal 5 hits every 100ms rather than 1 hit every 20ms. It is different from official servers and it is noticable and certainly not perfect in all situations. If you just have a small server or think your machine can take it, then feel free to change the interval to 20ms: #define SKILLUNITTIMER_INTERVAL 20I tested this locally and it works perfectly fine (but of course me playing alone and placing a few fire walls and blaze shields is nothing compared to a big server with hundreds of units placed all the time).
    1 point
  3. As many mmo, they seems to be in lack of inspiration ...
    1 point
  4. maraming salamat po
    1 point
  5. rathena - Revision 17706: /trunk //2013-08-07Ragexe packet_ver: 45
    1 point
  6. same parin once @go ako @go lumalabas di nag wawarp copy mo saken impusible kase di gagana yan... et /* Player groups configuration file --------------------------------- This file defines "player groups" and their privileges. Each group has its id and name, lists of available commands and other permissions, and a list of other groups it inherits from. Group settings -------------- <id> Unique group number. The only required field. <name> Any string. If empty, defaults to "Group <id>". It is used in several @who commands. <level> Equivalent of GM level, which was used in revisions before r15572. You can set it to any number, but usually it's between 0 (default) and 99. Members of groups with lower level can not perform some actions/commands (like @kick) on members of groups with higher level. It is what script command getgmlevel() returns. Group level can also be used to override trade restrictions (db/item_trade.txt). <commands> A group of settings <command name> : <bool> or <commandname> : [ <bool>, <bool> ] First boolean value is for atcommand, second one for charcommand. If set to true, group can use command. If only atcommand value is provided, false is assumed for charcommand. If a command name is not included, false is assumed for both atcommand and charcommand. For a full list of available commands, see: doc/atcommands.txt. Command names must not be aliases. <log_commands> Boolean value. If true then all commands used by the group will be logged to atcommandlog. If setting is omitted in a group definition, false is assumed. Requires 'log_commands' to be enabled in 'conf/log_athena.conf'. <permissions> A group of settings <permission> : <bool> If a permission is not included, false is assumed. For a full list of available permissions, see: doc/permissions.txt <inherit> A list of group names that given group will inherit commands and permissions from. Group names are case-sensitive. Inheritance results ------------------- Both multiple inheritance (Group 2 -> Group 1 and Group 3 -> Group 1) and recursive inheritance (Group 3 -> Group 2 -> Group 1) are allowed. Inheritance rules should not create cycles (eg Group 1 inherits from Group 2, and Group inherits from Group 1 at the same time). Configuration with cycles is considered faulty and can't be processed fully by server. Command or permission is inherited ONLY if it's not already defined for the group. If group inherits from multiple groups, and the same command or permission is defined for more than one of these groups, it's undefined which one will be inherited. Syntax ------ This config file uses libconfig syntax: http://www.hyperrealm.com/libconfig/libconfig_manual.html#Configuration-Files Upgrading from revisions before r15572 ------------------------------------- http://rathena.org/board/index.php?showtopic=58877 */ groups: ( { id: 0 /* group 0 is the default group for every new account */ name: "Player" level: 0 inherit: ( /*empty list*/ ) commands: { /* no commands by default */ warp: true go: true alootid: true storage: true allskill: true autoloot: true autotrade: true duel: true reject: true accept: true feelreset: true breakguild: true guild: true guildstorage: true } permissions: { /* without this basic permissions regular players could not trade or party */ can_trade: true can_party: true } }, { id: 1 name: "Super Player" inherit: ( "Player" ) /* can do everything Players can and more */ level: 0 commands: { /* informational commands */ commands: true charcommands: true help: true rates: true uptime: true showdelay: true exp: true mobinfo: true iteminfo: true whodrops: true time: true jailtime: true hominfo: true homstats: true showexp: true showzeny: true whereis: true /* feature commands */ refresh: true noask: true noks: true autoloot: true alootid: true autoloottype: true autotrade: true request: true go: true breakguild: true channel: true langtype: true } permissions: { } }, { id: 2 name: "Support" inherit: ( "Super Player" ) level: 1 commands: { version: true where: true jumpto: true who: true who2: true who3: true whomap: true whomap2: true whomap3: true users: true broadcast: true localbroadcast: true } log_commands: true permissions: { receive_requests: true view_equipment: true } }, { id: 3 name: "Script Manager" inherit: ( "Support" ) level: 1 commands: { tonpc: true hidenpc: true shownpc: true loadnpc: true unloadnpc: true npcmove: true addwarp: true } log_commands: true permissions: { any_warp: true } }, { id: 4 name: "Event Manager" inherit: ( "Support" ) level: 1 commands: { monster: true monstersmall: true monsterbig: true killmonster2: true cleanarea: true cleanmap: true item: [true, true] zeny: [true, true] disguise: [true, true] undisguise: [true, true] size: [true, true] raise: true raisemap: true day: true night: true skillon: true skilloff: true pvpon: true pvpoff: true gvgon: true gvgoff: true allowks: true me: true marry: true divorce: true refreshall: true } log_commands: true permissions: { can_trade: false any_warp: true } }, { id: 5 name: "VIP" inherit: ( "Player" ) /* can do everything Players can */ level: 0 commands: { rates: true who: true } permissions: { /* no permissions by default */ } }, { id: 10 name: "Law Enforcement" inherit: ( "Support" ) level: 2 commands: { hide: true follow: true kick: true disguise: true fakename: true option: true speed: true warp: true kill: true recall: true ban: true block: true jail: true jailfor: true mute: true storagelist: true cartlist: true itemlist: true stats: true } log_commands: true permissions: { join_chat: true kick_chat: true hide_session: true who_display_aid: true hack_info: true any_warp: true view_hpmeter: true } }, { id: 99 name: "Admin" level: 99 inherit: ( "Support", "Law Enforcement" ) commands: { /* not necessary due to all_commands: true */ } log_commands: true permissions: { can_trade: true can_party: true all_skill: false all_equipment: false skill_unconditional: false use_check: true use_changemaptype: true all_commands: true channel_admin: true can_trade_bounded: true item_unconditional: false /* all_permission: true */ } } )
    1 point
  7. Since im on a phone it's hard to tell if you have tabs in your headers? And is there an error in your map server relating to the healer?
    1 point
  8. prontera,153,193,4 script .#Buffer -1,4,4,{ end; OnTouch: set .@deny, 1; // 10 seconds cooldown if ( @healer_deny + .@deny >= gettimetick(2) ) end; set @healer_deny, gettimetick(2); set .@time, 300000; // the buff last 5 minutes sc_end sc_stone; sc_end sc_freeze; sc_end sc_sleep; sc_end sc_curse; sc_end sc_silence; sc_end sc_confusion; sc_end sc_blind; sc_end sc_bleeding; sc_end sc_decreaseagi; sc_end sc_poison; sc_end sc_hallucination; sc_end sc_stripweapon; sc_end sc_striparmor; sc_end sc_striphelm; sc_end sc_stripshield; sc_end sc_changeundead; sc_end sc_orcish; sc_end sc_berserk; sc_end sc_ske; sc_end sc_swoo; sc_end sc_ska; specialeffect2 100; specialeffect2 885; sc_start SC_INCREASEAGI,1200000,10; sc_start SC_BLESSING,1200000,10; set .@ori, countitem(558); if ( .@ori >= 5 ) { getitem 573, .@ori / 5; delitem 558, .@ori / 5 * 5; message strcharinfo(0), "Refined "+ ( .@ori / 5 * 5 ) +" Oridecon Stones, got "+ ( .@ori / 5 ) +" Oridecons."; } set .@elu, countitem(561); if ( .@elu >= 5 ) { getitem 560, .@elu / 5; delitem 561, .@elu / 5 * 5; message strcharinfo(0), "Refined "+ ( .@elu / 5 * 5 ) +" Elunium Stones, got "+ ( .@elu / 5 ) +" Eluniums."; } while ( getbrokenid(1) && zeny >= 5000 ) { set .@rcount, .@rcount +1 ; set zeny, zeny - 5000; repair 1; } if ( .@rcount ) message strcharinfo(0), "Repaired "+ .@rcount +" Items."; getinventorylist; for( set .@i,0; .@i < @inventorylist_count; set .@i, .@i + 1 ) { if ( @inventorylist_identify[.@i] == 1 ) continue; else if ( getskilllv(40) == 1 && sp >= 10 ) heal 0,0; // lol... this is supposed to reduce their SP by 10, whatever else if ( countitem(611) ) delitem 611,1; else if ( getskilllv(224) && zeny >= ( 100 - ( 5 + 4 * getskilllv(224) ) )* 2/5 ) set zeny, zeny - ( 100 - ( 5 + 4 * getskilllv(224) ) )* 2/5; else if ( getskilllv(37) && zeny >= ( 100 - ( 5 + 2 * getskilllv(37) ) )* 2/5 ) set zeny, zeny - ( 100 - ( 5 + 2 * getskilllv(37) ) )* 2/5; else if ( zeny >= 40 ) set zeny, zeny - 40; else break; delitem2 @inventorylist_id[.@i],1,0,0,0,0,0,0,0; getitem @inventorylist_id[.@i],1; set .@icount, .@icount +1 ; } if ( .@icount ) message strcharinfo(0), "Identified "+ .@icount +" Items."; if ( isequippedcnt(4128) >= 1 ) // if your server needs 2 GTB to immune, set to 2 instead of 1 dispbottom "[Healer] Please unequip your Golden Thief Bug card to get full buff."; percentheal 100,100; skilleffect 28, maxhp; skilleffect 9, maxsp; end; }
    1 point
  9. what do you mean by "closing the connection"? you mean disconnecting every single client? if so, then the server will do its usual behavior, to go standby and listens for incoming connection (and will then reply the appropriate thing). Unless if it has gone standby for too long, it will keep pinging the SQL server every 1 second, saying "To keep connection alive", which this phase is known to be the server is not working well anymore (restart it) well, this just happen while I was still using rA SVN. I don't know what about now.. one more thing, don't call me master. just don't.
    1 point
  10. Did harmony sent you the package? Diff it again using the client and diff files harmony sent you. Find Hex: 00 00 66 43 00 00 C8 43 Replace: 00 00 00 43 00 00 86 44
    1 point
  11. File Name: Item Sprite And itemInfo.lua Generator File Submitter: WillyFu File Submitted: 12 Jul 2014 File Category: Spriting & Paletting Tools Content Author: WillyFu Hello!! This is my first Project + Post And yeah it's "Free" Need 2 Day To Make It, Because i don't know exactly the language and i just learn it little bit only(15%) XD Item Sprite Generator Preview itemInfo.lua Generator Preview Thanks For Visiting This Page Download #Sorry For My Bad Language# Click here to download this file
    1 point
×
×
  • Create New...