Habilis

Members
  • Content count

    184
  • Joined

  • Last visited

  • Days Won

    10

Habilis last won the day on July 9 2017

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

1531 profile views
  1. Oh boy..... DISCLAIMER: Habilis is not a Lawyer of any form and shape. Therefore, this may not be taken as a legal advice under any circumstances. Be sure to check with your local regulations and copyright law. Habilis is just a school kid. You, as the server administrator, host Ragnarok Server Emulator. Which is the open source software developed by a group of enthusiast and released free of charge. Thus, you as the server administrator may not under any circumstances be held responsible for pirated/counterfeit (Client) software* players and other 3d party use to connect to your server. *So long it is not you who distribute the Client software. (A simple link to a filestock hosting the client, as long as the client is not hosted on your server) Therefore if you receive any Emails from the lawsuits, feel free to send them the most distinct expression of on your and your server's crew behalf! Hopefully, this closes the question of legality...
  2. Hmm That's a very nice Guide you choose there Feel free to pop in to Herc official Discord https://discordapp.com/invite/ZUzbRSp There is ME and many more good folks will be able to help you. EDIT : BTW, no need to install Discord, you can just use web version.
  3. Looks like halloween prontera or something.... While changing Prontera map, did you update mapcache?
  4. 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); }
  5. 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
  6. 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!!!
  7. 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???
  8. 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
  9. 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
  10. 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!?
  11. 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...
  12. 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...)
  13. If you manage to find it... Because I will not announce it, and it's not called HabilisRO
  14. 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...