-
Content Count
225 -
Joined
-
Last visited
-
Days Won
20
Posts posted by Habilis
-
-
are you sure this client supports different sex per character?
older clients support only 1 sex per account...
Always worth checking, might be something as stupid as this.
-
-
-
-
Hello friends,
I'm looking for inspiration to create my new Automatic Event called Trivia Time.
I want it to ask Ragnarok related questions and players to answer them.
I have already made a few:
QuoteWhen you begin to create a character in this game how many kinds of stats are there?
6Wizard skill Water Ball can only be cast over deluge or ____
waterWhich item is required to create a guild?
emperiumwhich skill is beneficial to the living and damaging to the undead?
healWhich town Theives guild is located
moroccWhich town Merchants guild is located
albertaWhat property do Izlude dungeon monsters possess?
water
What status can be inflicted with the Hammer Fall skill?
stunHow much Zeny is one Jellopy worth?
3Which town has the most Dancers?
comodoNeed some more from you folks
-
On 5/26/2018 at 9:36 AM, meko said:There's really no silver bullet to really be sure of the identity of someone, but one of the approaches that kinda works is
Oh yes, there is one way of doing it.
doing it the Habilis way. True, it's a bit painful and awkward way,(couldn't be different with Habilis) but this is better than trying to figure out MACs (My MAC changes at every system startup) and IPs.
On 8/6/2017 at 1:00 PM, Habilis said:Also this is a ppreview how I want to prevent creation of 500 characters and farm of daily rewards
event versions of items will be given...(they have same properties and a list of limitations)
-
Very Nice script I just might use it!
-
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...
-
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.
-
Looks like halloween prontera or something....
While changing Prontera map, did you update mapcache?
-
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); }
-
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 nameid=@nameid 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 nameid=@nameid 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 nameid=@nameid 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 nameid=@nameid 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
-
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!!!
-
20 minutes ago, Myriad said:You: I want to delete my entire server while it is running.
Habilis: DROP DATABASE habilisro_rag;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???
-
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
-
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
Spoiler -
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!?
-
Using publically available register page (In Downloads section)
SpoilerMade this register / reset password section
(took just CSS styles from public register page (Public one is not BootStrap))
This one os a BootStrap form...
Spoiler -
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...)
-
If you manage to find it...
Because I will not announce it, and it's not called HabilisRO
-
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...
Скрытый текст -
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
-
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!
-
Day 14 done some more stuff...
Implemented a sprite pack from Adel that makes porings more colorful (colorful porings are really important!)
before:
SpoilerAfter:
SpoilerLika back in 2007 every server had a custom sprite for Asura strike Habilis decided to stick to that old tradition and make some asura sprites
before:
SpoilerAfter:
SpoilerBefore:
SpoilerAfter:
SpoilerFinally I sorted out the old maps and cached them properly
List of maps like before : Prontera, Izlude, Morocc, Alberta
On morroc I've also removed all NPCs related to satan in morroc in one way or another
Spoilerand restored all warps and monsters on the Morocc fields (right of the morroc)
Also, returned Ant-hell entrance to the old place (Both of them)
SpoilerHabilis was ready to implement some custom costumes but this piece of gui needed a touch of personalisation
The challenge here is to remove 2headed chic (an object that is behind other objects I want to keep, lines and points)
Multiple years of experience in removeing copyrights from graphical content have helped Habilis to do just that.
SpoilerThis is how costumes look for now
SpoilerUnfortunately, since no one wanted to provide a bundle (all in one (sprite, item, collection, lub, item_db.conf)) to Habilis
Habilis had to reverse engineer stuff....
This means alot of NotePad++ regular expression search and replace
And a lot of Excel formulas to generate Item_db2.conf
SpoilerAnd as a result .... 500 custom headgears.
Also this is a ppreview how I want to prevent creation of 500 characters and farm of daily rewards
event versions of items will be given...(they have same properties and a list of limitations)
Auras, using some custom Auras and Dastgir's plugin I finally managed to make some nice auras
on level 99, aura is not given to a player, on level 99 it have to be obtained by a quest.
some examples of available auras
SpoilerAnd finally, Habilis's favorite ones!!!!!
Spoileralso took guild emblem pack (will provide it as separate download on the downloads page)
If Guild masters don't have time or don't know how to make a guild emblem, they can take one of 2k+ provided.
Spoiler
[AutoEvent] Trivia
in Event & Game Releases
Posted · Edited by Mystery
Spoiler.
Hello, as promised here is a Trivia auto event.
This script is originally way back from eA, it was adjusted on rA. (All credits in the header)
And now, I decided to Enhance it.
- An enhanced version of facts auto event. The Event is announced. The NPC asks 10 random
- questions from a question bank. Players have to write the answer to the main chat.
- Players don't need to worry about CAPITAL letters.
- 1) Question is asked by the NPC.
- 2) If there is no answer after 15 seconds NPC will give a hint.
- 3) IF there is still no answer after a hint, the question is skipped.
- 4) If the right answer is given, the player is announced and the reward is given
Side notes:
1) Control
If you have some kind of AutoEbent Controller, I've included the event control methods
OnEventStart:
OnStop:
OnEventTimeOut:
If you don't have a controller and just want to test this event, just setup the timers, when this event will run ex:
OnMinute33:
2) Rewards
I have special Event points, that I'm giving to the winners.
If you like to give Items or Zeny, I Included the examples in the code
3) Questions definition
To define more questions you need to follow this pattern
4) Cheating
I'm aware that this event can be cheated/Automated by players.
Therefore only a modest reward is given
Enjoy!