Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 08/17/12 in all areas

  1. As I was doing r16651 I've noticed the quest system has these in (struct) map_session_data int quest_index[MAX_QUEST_DB];// 8.000 byte struct quest quest_log[MAX_QUEST_DB];// 72.000 byte (MAX_QUEST_DB is defined in mmo.h by default as 2k) struct s_quest_db { int id; // 4 unsigned int time; // 4 int mob[MAX_QUEST_OBJECTIVES]; // 4 * 3 int count[MAX_QUEST_OBJECTIVES];// 4 * 3 int num_objectives;// 4 }; // 4 + 4 + (4*3) + (4*3) + 4 = 36 (reference) which is hum...72.000 byte...about to 70kb per player. imo this is...absurd O_O (i didn't really measure compared to the whole map_session_data but by taking a glance at it i'd bet it is the source of at least 25% of each map_session_data instance). and its most wasted data since like no players will have the 2k quests' data. I propose the system be reviewed. for example, as the first thing that comes to my mind, use pointers so that if a player has 20 quests it spends 20*36=720 bytes instead of wasting 72.000 bytes. post your thoughts opinions call me a performance megalomaniac, whatever you like. but post.
    2 points
  2. File Name: Advanced common drop system File Submitter: dreamunreal File Submitted: 12-26 2011 File Updated: 12-26 2011 File Category: Source Modifications Why make it: Ind's Special item drop system can't do it. so. I base on Ind's work to finish this to solve xazax's probrom. How to use it: 1: create item_droprate.txt in db folder as item database. not a npc. 2: find conf/battle/drop.conf add new line common_drop.adv_flag: 1 as a switch, if you use type 2 (switch off) format in item_droprate.txt must like this: any number,itemid,rate e.g: 0,985,10000 1000,985,10000 // it will set item 985 drop rate to 100% if your use type 1(switch on) format in item_droprate.txt must like this: mobid,itemid,rate e.g: 1219,4120,10000 // it will set knight of abyss's knight of abyss card's drop rate to 100% 1150,985,1 // it will set moonlight_flower's elunium's drop rate to 0.01% if you add new line or modify a line in item_droprate.txt it will run when you reload mobdb,after save. Other: this patch. base on eAthena r15049 trunk. that is all,. enjoy it. Download: download 1: Click here to download this file(*.patch) mirror1: save as (*.patch)
    1 point
  3. Shin's Diff Patcher Info: Supports all Windows 32 bit versions (Windows XP SP2 and higher) and probably all 64 bit versions. Features: Plug-in based Uses list view instead of two seperate list boxes for easier selection Shortcuts to simplify your work Resizable window Inline diff descriptions (as long as the plug-in supports it) Auto-save and load of diffs Includes PlainDiffPlugin which provides support for *.diff files Allows items to be sorted either by type, group or diff name Prevents diff collision when selecting diffs that reference the same group CRC file check Data missmatch check Downloads: ShinsDiffPatcher SVN (Version 1.1.3b; 198kb) WeeDiffPlain Plugin Src SVN (Version 1.0; 11kb) Quick Usage 1. Select patch engine. 2. Select client exe. 3. Select diff file (if plug-in needs it). 4. Select output exe. 5. Click on "Patch It!" 6. Done. All patches that you have selected are automatically saved and will be restored the next time you select a diff file. You can also use the following shortcuts: - Ctrl + A = Select all diffs (only one item from each group if any) - Ctrl + D = Deselect all selected diffs - Ctrl + C = Copy all selected diffs into Clipboard Notes: You may think "What? Another patcher? Man..". Yes, another one. I'm not quite satisfied with the currently available diff patchers because they either lack of features or just don't provide the freedom I would like to have. I think I have chosen this name for the patcher because it's kinda convention to use his own name in the title bar (even though the initial name is WeeDiffPatcher). This is just an alpha release since there are some optimizations I would like to complete before I release a final version. I've included the source code for the DiffPlainPlugin to show you how you can implement your own plug-ins in order to get them working with my patcher. I would still like someone else to implement a proper plain diff plug-in because I haven't focused to optimize it to it's best (even though I have removed all possible memory leaks) since I developed this patcher for another plug-in based solution. If you have any suggestions or features that your plug-in needs in the future, don't hesitate to ask.
    1 point
  4. With this modification you will have a new chat, like @main for another purposes. In this example I use @trading as an example. 1 -> Open src/map/atcommand.c and find: if(sd->state.mainchat) clif_displaymessage(fd, msg_txt(384)); // Main chat currently enabled. Usage: @main <on|off>, @main <message>. else clif_displaymessage(fd, msg_txt(385)); // Main chat currently disabled. Usage: @main <on|off>, @main <message>. } return 0; } Add below it: /*=================================== * Trading chat chat [darkmeistersp] * Usage: @trading <on|off|message> *-----------------------------------*/ ACMD_FUNC(trading) { if( message[0] ) { if(strcmpi(message, "on") == 0) { if(!sd->state.tradingchat) { sd->state.tradingchat = 1; clif_displaymessage(fd, msg_txt(950)); // trading chat has been activated. } else { clif_displaymessage(fd, msg_txt(951)); // trading chat already activated. } } else if(strcmpi(message, "off") == 0) { if(sd->state.tradingchat) { sd->state.tradingchat = 0; clif_displaymessage(fd, msg_txt(952)); // trading chat has been disabled. } else { clif_displaymessage(fd, msg_txt(953)); // trading chat already disabled. } } else { if(!sd->state.tradingchat) { sd->state.tradingchat = 1; clif_displaymessage(fd, msg_txt(950)); // trading chat has been activated. } if (sd->sc.data[sC_NOCHAT] && sd->sc.data[sC_NOCHAT]->val1&MANNER_NOCHAT) { clif_displaymessage(fd, msg_txt(957)); return -1; } sprintf(atcmd_output, msg_txt(956), sd->status.name, message); // I use 0xFE000000 color for signalizing that this message is // trading chat message. 0xFE000000 is invalid color, same using // 0xFF000000 for simple (not colored) GM messages. [LuzZza] intif_broadcast2(atcmd_output, strlen(atcmd_output) + 1, 0xFE000000, 0, 0, 0, 0); } } else { if(sd->state.tradingchat) clif_displaymessage(fd, msg_txt(954)); // trading chat currently enabled. Usage: @trading <on|off>, @trading <message>. else clif_displaymessage(fd, msg_txt(955)); // trading chat currently disabled. Usage: @trading <on|off>, @trading <message>. } return 0; } Then you need to find this: { "font", 1,1, atcommand_font }, And add below it: { "trading", 1,1, atcommand_trading }, //[darkmeistersp] Save this file. 2-> Open src/map/clif.c and find: case CHAT_MAINCHAT: //[LuzZza] iter = mapit_getallusers(); while( (tsd = (TBL_PC*)mapit_next(iter)) != NULL ) { if( tsd->state.mainchat && tsd->chatID == 0 && packet_db[tsd->packet_ver][RBUFW(buf,0)].len ) { // packet must exist for the client version WFIFOHEAD(tsd->fd, len); memcpy(WFIFOP(tsd->fd,0), buf, len); WFIFOSET(tsd->fd,len); } } mapit_free(iter); break; Add below it: case CHAT_TRADINGCHAT: //[darkmeistersp] iter = mapit_getallusers(); while( (tsd = (TBL_PC*)mapit_next(iter)) != NULL ) { if( tsd->state.tradingchat && tsd->chatID == 0 && packet_db[tsd->packet_ver][RBUFW(buf,0)].len ) { // packet must exist for the client version WFIFOHEAD(tsd->fd, len); memcpy(WFIFOP(tsd->fd,0), buf, len); WFIFOSET(tsd->fd,len); } } mapit_free(iter); break; Now find this in the same file: WBUFW(buf,0)=0x8d; WBUFW(buf,2)=len+8; WBUFL(buf,4)=0; safestrncpy((char *) WBUFP(buf,8),message,len); clif_send(buf,WBUFW(buf,2),NULL,CHAT_MAINCHAT); } And add below it: /*========================================== * Send trading chat message [darkmeistersp] *------------------------------------------*/ void clif_TradingChatMessage(const char* message) { char buf[200]; int len; if(!message) return; len = strlen(message)+1; if (len+8 > sizeof(buf)) { ShowDebug("clif_TradingChatMessage: Received message too long (len %d): %sn", len, message); len = sizeof(buf)-8; } WBUFW(buf,0)=0x8d; WBUFW(buf,2)=len+8; WBUFL(buf,4)=0; strncpy((char *) WBUFP(buf,8),message,len); clif_send((unsigned char *) buf,WBUFW(buf,2),NULL,CHAT_TRADINGCHAT); } Now find the next code: // Chat logging type 'M' / Main Chat if( log_config.chat&1 || (log_config.chat&32 && !((agit_flag || agit2_flag) && log_config.chat&64)) ) log_chat("M", 0, sd->status.char_id, sd->status.account_id, mapindex_id2name(sd->mapindex), sd->bl.x, sd->bl.y, NULL, message); return; } And add below it: // Trading chat [darkmeistersp] if(strcmpi(target, trading_chat_nick) == 0) { if(!sd->state.tradingchat) clif_displaymessage(fd, msg_txt(958)); // You should enable trading chat with "@trading on" command. else { char output[256]; snprintf(output, ARRAYLENGTH(output), msg_txt(956), sd->status.name, message); intif_broadcast2(output, strlen(output) + 1, 0xFE000000, 0, 0, 0, 0); } } Save this file. 3-> Open src/map/clif.h and find this: CHAT_MAINCHAT, // everyone on main chat Add below it: CHAT_TRADINGCHAT, //[darkmeistersp] In the same file find this line: void clif_MainChatMessage(const char* message); //luzza And add below it: void clif_TradingChatMessage(const char* message); //[darkmeistersp] Save this file. 4-> Open src/map/map.c and find this: char main_chat_nick[16] = "Main"; Add below this: char trading_chat_nick[16] = "Trading"; //[darkmeistersp] In the same file find: if(strcmpi(w1, "main_chat_nick")==0) safestrncpy(main_chat_nick, w2, sizeof(main_chat_nick)); And add below it: if(strcmpi(w1, "trading_chat_nick")==0) //[darkmeistersp] safestrncpy(trading_chat_nick, w2, sizeof(trading_chat_nick)); Save this file. 5 -> Now open src/map/map.h and find: extern char main_chat_nick[16]; Add below it: extern char trading_chat_nick[16]; //[darkmeistersp] Save this file 6 -> Open src/map/pc.h and find: unsigned int mainchat :1; //[LuzZza] And add below it: unsigned int tradingchat :1; //[darkmeistersp] Save this file. 7 -> Open src/char/char.c and find: // check for reserved names if( strcmpi(name, main_chat_nick) == 0 || strcmpi(name, wisp_server_name) == 0 ) return -1; // nick reserved for internal server messages Replace it with: // check for reserved names if( strcmpi(name, main_chat_nick) == 0 || strcmpi(name, wisp_server_name) == 0 || strcmpi(name, trading_chat_nick) == 0) //[darkmeistersp] return -1; // nick reserved for internal server messages Save this file. 8-> Open src/char/inter.c and find: char main_chat_nick[16] = "Main"; Add below it: char trading_chat_nick[16] = "Trading"; //[darkmeistersp] Now find this in the same file: } else if(strcmpi(w1, "main_chat_nick")==0){ // Main chat nick [LuzZza] safestrncpy(main_chat_nick, w2, sizeof(main_chat_nick)); And add below it: } else if(strcmpi(w1, "trading_chat_nick")==0){ // trading chat nick [darkmeistersp] safestrncpy(trading_chat_nick, w2, sizeof(trading_chat_nick)); Save this file. 9-> Open src/char/inter.h and find: ​extern char main_chat_nick[16]; Add below it: extern char trading_chat_nick[16]; //[darkmeistersp] Save this file. 10-> Repeat the steps 7, 8 and 9 with the files char.c, inter.c and inter.h that are located in src/char_sql/ 11-> Open conf/msg_athena.conf and add at the end of the file: 950: Trading chat has been activated. 951: Trading chat already activated. 952: Trading chat has been disabled. 953: Trading chat already disabled. 954: Trading chat is currently enabled. Usage: @trading <on|off>, @trading <message>. 955: Trading chat is currently disabled. Usage: @trading <on|off>, @trading <message>. 956: %s :Trading: %s 957: You cannot use Trading chat while muted. 958: You should enable trading chat with "@trading on" command. Save this file. 12 -> Open conf/inter_athena.conf and find this: // Nick for sending mainchat // messages like whisper main_chat_nick: Main Add below it: // Nick trading chat [darkmeisterp] sell_chat_nick: trading Save this file. 13 -> Open conf/atcommand_athena.conf and add at the end of the file: //Trading chat trading: 1,1 That´s all. Now you must compile your server and your new chat is ready! Here you have the diff for this mod. Enjoy it! newchat.patch
    1 point
  5. I want to suggest this atcommand to allow the unload of all the NPCs from one specific file, in the same way there is @loadnpc <path_to_file> should be @delnpc <path_to_file>. This will be so helpful to reload an specific file without unload the NPCs one by one. What do you think about this?
    1 point
  6. So far I'm reading into the SDK and related code to get how it works. Enable ASCII characters will come, too.
    1 point
  7. So thats the reason. Here you go: http://upaste.me/154f93715104abf
    1 point
  8. http://rathena.org/wiki/Edit_Max_Level @post 2 lol posted at the same time haha. XDD
    1 point
  9. File Name: Glalie File Submitter: Jupeto File Submitted: 17 Aug 2012 File Category: Monster Sprites Content Author: Jupeto This sprite is from my past collection here http://www.eathena.w...owtopic=157606/ No. 362 - The evolved form of No. 361 Snorunt. Glalie has a body made of rock, w/c it hardens with an armorof ice. This Pokemon has the ability to freeze moisture in the atmosphere into any shapeit desires. Formore information please click here Preview : This pack contains; - Artwor'X Custom Enhancement.jpg - Artwor'X Custom Enhancement.URL - Readme.txt - glalie.act - glalie.spr - glalie.bmp Just contact me for any problems you see in this monster. Click here to download this file
    1 point
  10. I love indian curries and chinese food!
    1 point
  11. Esta es una guía que hice para el servidor del cual provengo y al que pertenezco. Todavía tengo que investigar muchas cosas sobre el funcionamiento de todo el cliente, pero creo que cubre lo básico. Espero sirva de ayuda para toda la comunidad de servidores privados y me ayuden a corregir las partes que estén equivocadas o que necesiten mayor detalle. Esto es todo lo que se hasta el momento en el tema de los clientes. Aún tengo algunas dudas y me faltan por parchar algunos huecos. Espero haya sido de ayuda. Ragno
    1 point
  12. data/texture/À¯ÀúÀÎÅÍÆäÀ̽º
    1 point
  13. try this. OnTimer60000: set @minute, @minute + 1; //Check for 1 Minute if(@minute == 60){ set @minute,0; set #consecutive_hour, #consecutive_hour + 1; // Every 2 Hours if( #consecutive_hour % 2 == 0 ){ getitem 7227,1; dispbottom "Gain 1 TCG for every 2 Hours online."; } if( #consecutive_hour % 24 == 0 ){ announce "You have online for 24 hours.",bc_self; set #CASHPOINTS,#CASHPOINTS + 100; dispbottom "Gain 100 Cash Points. Total : "+#CASHPOINTS; } } stopnpctimer; initnpctimer
    1 point
  14. I would like to suggest the addition of an auto update system for sql db updates, like: We start with db_version 0 Something got modified in db so instead of devs adding a new .sql upgrade file (that noobs don't know a sh*t about, look at support and bugtracker for "favorite") they would add it to source and it would execute on server start and would change db_version to 1 etc etc etc etc etc for those who knows a bit about coding, take a look at this as example, it is from opentibia emulator feel free to flame this thread, I don't care It was just something that passed into my head after seeing all that topic/bugreports every time that a .sql upgrade goes out, it would be really nice IMO to have it implemented! but lets elaborate and give your point also (you guys are negative but whatever xD)
    1 point
  15. Monthly Digest #4 Hello and welcome, this is rAthena's fourth development digest. Below is a small report for July 12th - August 14th period (past 33 days). Development Team @Cookie joined as Core Developer joined as Script / DB Developer @Joseph joined as Script / DB Developer @Kisuka joined as Script / DB Developer @Salepate joined as Core Developer Development Highlights Further npc/custom/ updates Improved Homun-S support New group permissions show_bossmobs, disable_pvm and disable_pvp Ability to bind atcommands to NPC events Initial Oboro/Kagerou Skill Support Favorite Item Tab Further Oboro/Kagerou Support NPC Folder Redesigned Item elvMax support Euphy's slaughtering spree of script file sizes (aka optimizations all over the place). Many skill behavior fixes by malufett and team. Misc. Stats During the period there were 218 commits. Of these 218 commits 97 were bug-fixes.
    1 point
  16. Sometime this week should be another update when I finish merges and that update should include some code to make item scripts work.
    1 point
  17. HERE YOU GO. http://upaste.me/2bb2924d4db2341 Ladder updates every 60 seconds (I guess? depends on your server-side setting).
    1 point
  18. Download and place inside your data folder (patch it into your grf), this will resolve the "NO MSG" & the korean storage. http://svn6.assembla...stringtable.txt As far as i remember the korean storage buttons are texture files. Here found them, download this copy of my working files. -> http://www.mediafire...mhdr7yq65vb3vxd Just patch the data folder into your grf and it should be resolved too. BY THE WAY: Your client is diffed wrong bro, you need to select the "Use plain text descriptions", look at your items, they are screwed up.???? (or is it just the language which looks strange to me? :s)
    1 point
  19. File Name: Pyuriel File Submitter: Flaid File Submitted: 23 Mar 2012 File Updated: 01 Apr 2012 File Category: Mobs Well, I just wanted to share this hawt guy with you all, just recolored him and think I did pretty well there, here you all go. Enjoy. Click here to download this file
    1 point
  20. I already have a skill to do this on my server and have had for a very long time now. The same with blacksmith creating elemental armor. However, if you find a new way to do it please share, lol. No source mod required for any of this. Besides I have maxed my produce_db out anyway. i have around 500 custom potions, armor, etc... Can't seem to get the produce_db to get any bigger even if I increase it in the skill.c. Here are just a few of the potions I have that can be refined. item_db2: 28328,Red_Potion_1,Red Potion,0,50,,70,,,,,0xFFFFFFFF,7,2,,,,,,{ specialeffect2 204; itemheal rand(50,72),0; getitem 1093,1; },{},{} 28329,Red_Potion_2,Red Potion,0,50,,70,,,,,0xFFFFFFFF,7,2,,,,,,{ specialeffect2 204; itemheal rand(55,79),0; getitem 1093,1; },{},{} 28330,Red_Potion_3,Red Potion,0,50,,70,,,,,0xFFFFFFFF,7,2,,,,,,{ specialeffect2 204; itemheal rand(61,87),0; getitem 1093,1; },{},{} 28331,Red_Potion_4,Red Potion,0,50,,70,,,,,0xFFFFFFFF,7,2,,,,,,{ specialeffect2 204; itemheal rand(67,96),0; getitem 1093,1; },{},{} 28332,Red_Potion_5,Red Potion,0,50,,70,,,,,0xFFFFFFFF,7,2,,,,,,{ specialeffect2 204; itemheal rand(73,105),0; getitem 1093,1; },{},{} 28333,Red_Potion_6,Red Potion,0,50,,70,,,,,0xFFFFFFFF,7,2,,,,,,{ specialeffect2 204; itemheal rand(81,116),0; getitem 1093,1; },{},{} 28334,Red_Potion_7,Red Potion,0,50,,70,,,,,0xFFFFFFFF,7,2,,,,,,{ specialeffect2 204; itemheal rand(89,128),0; getitem 1093,1; },{},{} 28335,Red_Potion_8,Red Potion,0,50,,70,,,,,0xFFFFFFFF,7,2,,,,,,{ specialeffect2 204; itemheal rand(97,140),0; getitem 1093,1; },{},{} 28336,Red_Potion_9,Red Potion,0,50,,70,,,,,0xFFFFFFFF,7,2,,,,,,{ specialeffect2 204; itemheal rand(107,154),0; getitem 1093,1; },{},{} 28337,Red_Potion_10,Red Potion,0,50,,70,,,,,0xFFFFFFFF,7,2,,,,,,{ specialeffect2 204; itemheal rand(118,170),0; getitem 1093,1; },{},{} produce_db //-- Refined Potons <-- AM_PHARMACY & Potion Creation Guide & Previous Potion, 1 Refining Concentrate 501,22,228,1,7144,0,507,1,,1 28328,22,228,1,7144,0,501,1,28378,1 28329,22,228,1,7144,0,28328,1,28378,1 28330,22,228,1,7144,0,28329,1,28378,1 28331,22,228,1,7144,0,28330,1,28378,1 28332,22,228,1,7144,0,28331,1,28378,1 28333,22,228,1,7144,0,28332,1,28378,1 28334,22,228,1,7144,0,28333,1,28378,1 28335,22,228,1,7144,0,28334,1,28378,1 28336,22,228,1,7144,0,28335,1,28378,1 28337,22,228,1,7144,0,28336,1,28378,1
    1 point
  21. Don't know what went wrong, it suddenly works... It's just reading the item_droprate.txt when Dropflag is set to 0... But i'm experiencing a bug... Dropflag 0 is not working... 1000,985,1 that should make elunium .01% drop right? but still 100% for every mob...
    1 point
×
×
  • Create New...