Habilis

Members
  • Content count

    182
  • Joined

  • Last visited

  • Days Won

    10

Habilis last won the day on July 9

Habilis had the most liked content!

4 Followers

About Habilis

  • Rank
    Advanced Member
  • Birthday 07/02/90

Contact Methods

  • IRC Nickname
    Habilis

Profile Information

  • Gender
    Male
  • Location:
    Montreal, Canada
  • Interests
    Doing stuff...
  • Emulator:
    Hercules

Recent Profile Visitors

1208 profile views
  1. Looks like halloween prontera or something.... While changing Prontera map, did you update mapcache?
  2. Best of luck, sounds promising!
  3. Updated to make them compile under new Hercules version @emotion added disabled emotions feature (with @emotion 34 players can use mute emote or fake a dice game by dropping a particular dice side....) emotion.c #include "common/hercules.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include "common/HPMi.h" #include "map/clif.h" #include "map/atcommand.h" #include "map/script.h" #include "map/pc.h" #include "common/nullpo.h" #include "common/HPMDataCheck.h" HPExport struct hplugin_info pinfo = { "@emotion", // Plugin name SERVER_TYPE_MAP,// Which server types this plugin works with? "1.2", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @emotion X by Anarchist * => Displays the emotions without delay *------------------------------------------*/ int emotion_max = 81; // Set last available emotion number available for this command. // Clients < 2013 support way less emotions. ACMD(emotion) { char err_msg[1024]; // Disabled emotions 34 = mute; [58 to 63] = dice particular sides int rEmoArray[] = {34, 58, 59, 60, 61, 62, 63}; int rEmoArraySize = sizeof(rEmoArray) / sizeof(rEmoArray[0]); if(!*message || atoi(message) < 0 || atoi(message) > emotion_max) { sprintf(err_msg, "Usage: @emotion 0-%d", emotion_max); clif->message(fd, err_msg); return -1; } for (int i = 0; i < rEmoArraySize; i++) { if (rEmoArray[i] == atoi(message)) { sprintf(err_msg, "This emotion is disabled."); clif->message(fd, err_msg); return -1; } } clif->emotion(&sd->bl,atoi(message)); return 1; } /* Server Startup */ HPExport void plugin_init (void) { addAtcommand("emotion",emotion); } heart.c #include "common/hercules.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include "common/HPMi.h" #include "map/clif.h" #include "map/atcommand.h" #include "map/script.h" #include "map/pc.h" #include "common/nullpo.h" #include "common/HPMDataCheck.h" HPExport struct hplugin_info pinfo = { "@heart", // Plugin name SERVER_TYPE_MAP,// Which server types this plugin works with? "1.2", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== @heart X by Anarchist => Displays the heart special effect ------------------------------------------ */ ACMD(heart) { if(!*message || atoi(message) < 1 || atoi(message) > 2) { clif->message(fd, "usage: @heart 1 or 2"); return -1; } if(atoi(message) == 1) { clif->specialeffect(&sd->bl,364,0); } else if(atoi(message) == 2) { clif->specialeffect(&sd->bl,509,0); } return 1; } /* Server Startup */ HPExport void plugin_init (void) { addAtcommand("heart",heart); } dance.c #include "common/hercules.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include "common/HPMi.h" #include "map/clif.h" #include "map/atcommand.h" #include "map/script.h" #include "map/pc.h" #include "common/nullpo.h" #include "common/HPMDataCheck.h" HPExport struct hplugin_info pinfo = { "@dance", // Plugin name SERVER_TYPE_MAP,// Which server types this plugin works with? "1.2", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== @dance X by Anarchist => Special effects with dance style ------------------------------------------ */ ACMD(dance) { if(!*message || atoi(message) < 1 || atoi(message) > 9) { clif->message(fd, "Usage: @dance 1-9"); return -1; } switch(atoi(message)) { case 1 : clif->specialeffect(&sd->bl,413,0); break; case 2 : clif->specialeffect(&sd->bl,414,0); break; case 3 : clif->specialeffect(&sd->bl,415,0); break; case 4 : clif->specialeffect(&sd->bl, 426,0); break; case 5 : clif->specialeffect(&sd->bl,458,0); break; case 6 : clif->specialeffect(&sd->bl,466,0); break; case 7 : clif->specialeffect(&sd->bl,501,0); break; case 8 : clif->specialeffect(&sd->bl,540,0); break; case 9 : clif->specialeffect(&sd->bl,550,0); break; } return 1; } /* Server Startup */ HPExport void plugin_init (void) { addAtcommand("dance",dance); } show.c #include "common/hercules.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include "common/HPMi.h" #include "map/clif.h" #include "map/atcommand.h" #include "map/script.h" #include "map/pc.h" #include "common/nullpo.h" #include "common/HPMDataCheck.h" HPExport struct hplugin_info pinfo = { "@show", // Plugin name SERVER_TYPE_MAP,// Which server types this plugin works with? "1.2", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @show by KarLaeda * => Displays the point on minimap *------------------------------------------*/ ACMD(show) { int x = 0, y = 0; if(!*message || (sscanf(message, "%d %d", &x, &y) != 2)) { clif->message(fd, "usage: @show <x> <y>"); return -1; } clif->viewpoint(sd, 1, 1, x, y, 2, 0xFF0000); return 1; } /* Server Startup */ HPExport void plugin_init (void) { addAtcommand("show",show); } hold.c #include "common/hercules.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include "common/HPMi.h" #include "map/clif.h" #include "map/atcommand.h" #include "map/script.h" #include "map/pc.h" #include "common/nullpo.h" #include "common/HPMDataCheck.h" HPExport struct hplugin_info pinfo = { "@hold", // Plugin name SERVER_TYPE_MAP,// Which server types this plugin works with? "1.2", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @hold by Voidless *==========================================*/ ACMD(hold) { if (!sd->state.blockedmove) { sd->state.blockedmove = 1; clif->message(fd, "Character movement turned off"); } else { sd->state.blockedmove = 0; clif->message(fd, "Character movement turned on"); } return 1; } /* Server Startup */ HPExport void plugin_init (void) { addAtcommand("hold",hold); } detach.c #include "common/hercules.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include "common/HPMi.h" #include "common/timer.h" #include "common/nullpo.h" #include "map/channel.h" #include "map/script.h" #include "map/pc.h" #include "map/clif.h" #include "map/chat.h" #include "map/battle.h" #include "map/status.h" #include "common/HPMDataCheck.h" HPExport struct hplugin_info pinfo = { "@detach", // Plugin name SERVER_TYPE_MAP,// Which server types this plugin works with? "1.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @detach *==========================================*/ ACMD(detach) { if( pc_isdead(sd) ) { clif->message(fd, "Cannot use @detach if you are dead."); return true; } if( map->list[sd->bl.m].flag.autotrade == battle->bc->autotrade_mapflag ) { if(map->list[sd->bl.m].flag.pvp || map->list[sd->bl.m].flag.gvg){ clif->message(fd, "You may not use @detach when you are on maps PVP or GVG."); return true; } sd->state.monster_ignore = 0; sd->state.autotrade = 1; chat->create_pc_chat(sd, "DETACH", "", 1, true); sd->sc.opt1 = OPT1_STONE; pc->setoption(sd, sd->sc.option); pc_setsit(sd); skill->sit(sd,1); clif->sitting(&sd->bl); channel->quit(sd); clif->authfail_fd(sd->fd, 15); return true; } else { clif->message(fd, "@detach is not allowed on this map."); return true; } } /* Server Startup */ HPExport void plugin_init (void) { addAtcommand("detach",detach); }
  4. On teh Russian Forum, I've been requested a query to find a particular item and to find someone who has the most of that item DELIMITER // set @nameid = 601; SELECT c.account_id ,c.name ,inv.inventory_amnt ,crt.cart_amnt ,mail.mail_amnt ,stor.storage_amnt ,(ifnull(inv.inventory_amnt, 0) + ifnull(crt.cart_amnt, 0) + ifnull(mail.mail_amnt, 0) + ifnull(stor.storage_amnt, 0)) AS tot_amnt FROM `char` c LEFT JOIN (SELECT char_id, SUM(amount) AS inventory_amnt FROM inventory WHERE [email protected] GROUP BY char_id) inv ON inv.char_id=c.char_id LEFT JOIN (SELECT char_id, SUM(amount) AS cart_amnt FROM cart_inventory WHERE [email protected] GROUP BY char_id) crt ON crt.char_id=c.char_id LEFT JOIN (SELECT dest_id AS char_id, SUM(amount) AS mail_amnt FROM mail WHERE [email protected] GROUP BY dest_id) mail ON mail.char_id=c.char_id LEFT JOIN (SELECT account_id, SUM(amount) AS storage_amnt FROM storage WHERE [email protected] GROUP BY account_id) stor ON stor.account_id=c.account_id ORDER BY tot_amnt DESC; // DELIMITER ; Here is an example of what is being selected +------------+------------+----------------+-----------+-----------+--------------+----------+ | account_id | name | inventory_amnt | cart_amnt | mail_amnt | storage_amnt | tot_amnt | +------------+------------+----------------+-----------+-----------+--------------+----------+ | 2000002 | Wiwrtas | 19 | NULL | NULL | NULL | 19 | | 2000002 | Strelok | 9 | NULL | NULL | NULL | 9 | | 2000000 | test | NULL | NULL | NULL | NULL | 0 | | 2000002 | aaaaa | NULL | NULL | NULL | NULL | 0 | | 2000003 | ladyAdA | NULL | NULL | NULL | NULL | 0 | | 2000000 | toto | NULL | NULL | NULL | NULL | 0 | | 2000000 | Habilis | NULL | NULL | NULL | NULL | 0 | | 2000001 | tata | NULL | NULL | NULL | NULL | 0 | | 2000002 | asdasfasfd | NULL | NULL | NULL | NULL | 0 | | 2000004 | tatatatata | NULL | NULL | NULL | NULL | 0 | +------------+------------+----------------+-----------+-----------+--------------+----------+ 10 rows in set (0.01 sec) Item 601 (flywing) in Inventory, Cart, Mail, Kafra storage(Attention Kafra storage is per account, there fore all Characters under same account will have SAME value there) and a total, I'm using it to sort and find the leader (Who has the most of that item).. I didn't include Guild storage sincie it should be a separate query Attention doesn't work 100% with cards, cards may be in slots (not taken into account here). Maybe will create separate query for cards.... UPD : I just though you may wan't to extract only users that have this ite? Then use: WHERE tot_amnt > 0
  5. Well Habilis really don't know what to post here anymore LIke EVERYTHING was done.... If you have anymore ideas you are welcome to post them here The only thing I can add is, well Security Tests and Inspections reports and grades and results 1 . Test SSL certificate (and sortof security) of your E-mail server website : http://www.emailsecuritygrader.com I'm using free SSL certificate from Let's Encrypt so the information about sender looks like this tiny little LOCK!!!! This is how looks a message sent from email server with not configured encryption: 2. Testing the SSL certificate on your website Yet, Again I'm using a free SSL certificate from Let's Encrypt (SSL certificate is lika HTTPS://) encryption thingy looks like this when you open site in the browser... There is a way to test the quality of the SSL setup website : https://www.ssllabs.com/ssltest/ 3. Finally, you can test passing through capability of your E-mails. Wether your E-mails will go to Inbox or to SPAM depends on quality of your E-mail server setup. In other words, badly configured email server emails are at risk of goin directly to SPAM without ever seeing the daylight of an Inbox There fore some Webresources put this Humiliating phrase on their website "If you didn't get an E-mail form us, check your SPAM." © There is a way to test that too. Website : https://www.mail-tester.com/ Lost 0.3 points thwere because some E-mail carriers think that Habilis is using FREE dynamic DNS ... Well, anyways with 9.7/10 mark, Habilis is pretty sure that his E-mails will always hit Inbox. Therefore, no need for Habilis to post the Humiliating: "If you didn't get an E-mail form us, check your SPAM." © On his website. That's all there is to it Guys and Gals!!! Configure your servers correctly! Always test whatever you've configured!! And don't forget about CyberSecurity! May teh Force be with YOU!!!
  6. Nah, If I ever Hack into someones game server database. I would spawn cards and sell them for real money $$$ (Not like Habilis already did such an awfull atrocity ) But, it is way more profitable than being destructive to someone's database Without making my account a GM, without spawning them through @comamnd, without logs or traces Anyways, feel like playing???
  7. Hiya all. Let's play a SQL game. You from your Experience tell me what Data from SQL you would need to have. I will provide the SQL code of the query to extract that information. (A lot of fun game) For example : You : "I want to spy on my Event GMs and Higher GMs to control the abuse of @commands" Habilis : SELECT ac.`atcommand_date` ,ac.`account_id` ,ac.`char_id` ,ac.`char_name` ,l.`group_id` ,ac.`map` ,ac.`command` FROM `atcommandlog` ac LEFT JOIN `login` l ON l.`account_id` = ac.`account_id` WHERE l.`group_id` >= 30 AND ac.`command` NOT LIKE "@emotion%" AND ac.`command` NOT LIKE "@reload%" AND ac.`command` NOT LIKE "@refresh%" AND ac.`command` NOT LIKE "@go %" AND ac.`command` NOT LIKE "@jump%" AND ac.`command` NOT LIKE "@warp%" ORDER BY ac.`atcommand_id` DESC LIMIT 200; Selects : DateTime (when copmmand was executed) Account & Char Ids (If not needed remove them) Char name GM level (if not needed remove it) map on which command was executed command Features : Extracts 200 last @commands executed Extracts only for GM of 30 level and above (No normal players) Ignores commans (@Emotion, @reload, @refresh, @go, @jump, @warp) If you like You may make this query focus only on particular comamnds to track particularly abusable commands WHERE `command` LIKE "@item%" Don't be afraid to ask lika anything Habilis's level of knowlege in SQL is simply GURU Queries of any complexity and any difficulty Let's play
  8. Quickie-Quickie made an HTML email template based on tables <tr><td> (Because we are in 2002 ) So that I can troll and spam palyers with all kindof verrifications and notifications
  9. Up To date 2017 Version https://habilisbest.com/raspberry-pi-and-ragnarok-online-private-server + Good Business Practices in terms of Herc server installation and administration. + Herc server Troubleshooting Guide covering most of the problems of the beginners and Other frequently asked questions. + [BONUS] Automatic Herc server Database Backup GUIDE to the cloud For those who are crazy about their DB and want to configure full backup of their DataBase every 6 (12, 24, 48) hours. All FREE from Habilis. *Even if it says Raspberry Pi .... It's Debian, OK!?
  10. Using publically available register page (In Downloads section) Made this register / reset password section (took just CSS styles from public register page (Public one is not BootStrap)) This one os a BootStrap form...
  11. Yes it will be open for public. Just will not be anounced and will appear under a different name than HabilisRO (it's a fictional name as mentionned somewhere above...)
  12. If you manage to find it... Because I will not announce it, and it's not called HabilisRO
  13. Day 15 done some bootstrap stuff... So Habilis was busy working on the website. Doing it with bootstrap is harsh Bootstrap is not well suited for gaming web resources with massive graphical content, it is more suited for minimalist Hipster webapps or such. So, those who do gaming websites with bootstrap, Habilis shake your hands you friggin awedome guys & gals! Alrighty, enough with the chatter, So, here is what Habilis managed so far.. I'm not a designer or frontend, like AT ALL...
  14. 0 - Use WeeMapCache Editor (To edit mapcaches) It allows quickly edit/add/delete maps into cache file (Don't forget to do a backup of your mapcache) 1. Add ".gat", ".gnd", ".rsw" files to data folder. 2. Edit "mapnametable.txt" and "resnametable.txt" files in data folder. 3. Edit "map_index.txt" in db folder. 4. Create(update) mapcache "map_cache.dat" file in pre-re OR re /db folder. 5. Edit conf/maps.conf 6. Add flags/warps/monsters to the map as a script in npc folder
  15. Day 14 one more thing. There is a huge skinpack of 72 skins publically available to download This is a nice addition to the server's client for the players wanting to showoff or to add a touch of personality to their game client The problem is, there are few having Glyphs in client buttons and options window Habilis Easily overcame those by using his highly sharpened (lately) search and replace skills.... It weights around 170mb uncompressed and 60mb compressed. So, it will be an optional download. Here are some examples: So that Makes 2 extra packages to add to my client downloads page. 1 - Set of 2k+ guild emblems (for those who don't have the time or skill to make one ) 2 - Set of 72+ skins for those who wnt to add a touch of personality... There is always something to do with public materials like: - Fixing Glyphs in skins - Removing Evasticas and Waffen SS emblems from guild emblems pack (Raccial hate will be forbidden on that server) But they are pretty usable!