Jump to content

Habilis

Members
  • Content Count

    225
  • Joined

  • Last visited

  • Days Won

    20

Everything posted by Habilis

  1. I've recently got a brilliant idea. Why not make my own version of a paid script, sold on rAthena and release it to Hercules for free!? (Not because I'm banned on rAthena ) I need a peer review before releasing the whole package. @Myriad Did a nice Peer review of my terribel kode... If anyone else would like to contribute, feel free. Otherwise, it is soon to be released UPD : I reDrew the cutins, they don't look like stolen from rAthena 1) configuration there are 2 arrays setarray .prize_id[1],-1,31024,31026,31008,31020,31017,31010,31016,0,31009; setarray .prize_qty[1],2,1,1,1,3,3,1,3,0,3; in prize_id if id is > 0, the prize is an item if id = 0 , the prize is NOTHING! if id = -1, the prizer is free spin (number of free spins set in qty array) in array .prize_qty you setup the quantity won //===== Hercules Script ====================================== //= Wheel of Fortune //===== By =================================================== //= Habilis //= Edited by Myriad //===== Description ========================================== //= Wheel of fortune something. //============================================================ - script Wheel_of_Fortune FAKE_NPC ,{ OnInit: disablenpc("Wheel of Fortune#Main"); disablenpc("Hussein#WOF"); .EventName$ = "[Wheel Of Fortune]"; end; OnMinute39: OnStart: query_sql("DELETE FROM `acc_reg_num_db` WHERE `key`='#freewheelfortunespin';"); announce(sprintf("%s : The event will begin in 1 minute, near the center of Prontera.", .EventName$), bc_blue | bc_all); initnpctimer(); end; OnTimer60000: // 1 min enablenpc("Wheel of Fortune#Main"); enablenpc("Hussein#WOF"); announce(sprintf("%s : Come to Prontera and test your luck, everyone got some free spins!", .EventName$), bc_blue | bc_all); end; OnTimer1800000: // 30 mins announce(sprintf("%s : One more minute, do your last spin!", .EventName$), bc_blue | bc_all); end; OnTimer1860000: // 31 mins OnStop: disablenpc("Wheel of Fortune#Main"); disablenpc("Hussein#WOF"); end; } prontera,159,178,3 script Hussein#WOF 1_M_MERCHANT,{ doevent("Wheel of Fortune#Main::OnTalk"); end; } prontera,155,176,3 script Wheel of Fortune#Main 2_SLOT_MACHINE,{ OnTalk: if (#freewheelfortunespin == 0) #freewheelfortunespin = .Free_Spins; if (getd(.Event_Points_Variable$) < .Points_Cost && #freewheelfortunespin < 0) { mesf("[^0055FF ::: %s ::: ^000000]", .EventName$); mes("You are out of points"); mes("and have no more free"); mes("spins! Come back next"); mes("time for more."); close(); } .@mes$ = (#freewheelfortunespin > 0) ? sprintf(", but you, my friend, have %d free spin%s!", #freewheelfortunespin, (#freewheelfortunespin == 1) ? "" : "s") : "."; cutin("aca_salim02", 2); addtimer(1, sprintf("%s::OnEnd", strnpcinfo(NPC_NAME))); mesf("[^0055FF ::: %s ::: ^000000]", .EventName$); mes("Do you want to spin the wheel?"); mesf("It costs ^FF0000%d Event points^000000 to play%s", .Points_Cost, .@mes$); next(); callsub(S_Loop); S_Loop: .@val = getd(.Event_Points_Variable$); if (.@val < .Points_Cost && #freewheelfortunespin < 0) callsub(S_End); switch (select( (#freewheelfortunespin > 0) ? sprintf("Yes! Use free spin! (%d left)", #freewheelfortunespin) : "", (.@val > 0) ? sprintf("Yes! Use Event Points. (%d remaining)", .@val) : "", "No (Leave)" )) { case 1: callsub(S_Pay, 0); case 2: callsub(S_Pay, 1); default: callsub(S_End); } S_Pay: switch (getarg(0)) { // pay with free spin case 0: if (#freewheelfortunespin > 0) { if ((#freewheelfortunespin -= 1) < 1) #freewheelfortunespin = -1; callsub(S_Gamble); } else callsub(S_End); // Pay with points case 1: default: if ((.@val = getd(.Event_Points_Variable$)) >= .Points_Cost) { setd(.Event_Points_Variable$, (.@val -= .Points_Cost)); dispbottom(sprintf("%s : You now have %d event points.", .ServerName$, .@val)); callsub(S_Gamble); } else { cutin("aca_salim02", 2); mesf("[^0055FF ::: %s ::: ^000000]", .EventName$); mes("Awww, you don't have enough to gamble..."); mes(" "); mes("Have you ever heard?"); mes("'Money isn't all that matters' Got it?"); mes("Byeeeeeeeeeeeeee ;)"); callsub(S_End); } } S_Gamble: // Actual Gambling .@sector = rand(.Sector[0], .Sector[1]); .@displayCutin = (.@sector * 2) - 1; .@Speed = .Spin_Speed; for (.@i = 0; .@i < .nbTurns; .@i++) { .@b = .Cutin[0]; while (.@b <= .Cutin[1]) { cutin(sprintf("%s%d", .cutin$, .@b), 4); sleep2(.@Speed); .@b++; .@Speed++; } } .@b = .Cutin[0]; while (.@b < .@displayCutin) { cutin(sprintf("%s%d", .cutin$, .@b), 4); sleep2(.@Speed); .@b++; } cutin(sprintf("%s%d", .cutin$, .@b), 4); if (.prize_id[.@sector] == -1) { // Free spin if (.Sound_Effects) soundeffect("wheel_jackpot.wav", 0); announce(sprintf("[%s] : Wow, %d more Free spins!!!", .EventName$, .prize_qty[.@sector]), bc_blue | bc_self); #freewheelfortunespin = #freewheelfortunespin == -1 ? .prize_qty[.@sector] : #freewheelfortunespin + .prize_qty[.@sector]; } else if (.prize_id[.@sector] == 0) { // nothing if (.Sound_Effects) soundeffect("wheel_lost.wav", 0); announce(sprintf("[%s] : Awwww, No luck in gamble, more luck in love...", .EventName$), bc_blue | bc_self); } else { // item if (.Sound_Effects) soundeffect("wheel_won.wav", 0); announce(sprintf("[%s] : Enjoy your prize!!!", .EventName$), bc_blue | bc_self); getitem(.prize_id[.@sector], .prize_qty[.@sector]); } sleep2(1000); callsub(S_Loop); end; S_End: close2(); OnEnd: cutin("", 255); end; OnInit: .ServerName$ = "[Your boring server]"; .EventName$ = "Wheel Of Fortune"; .cutin$ = "WheelOfFortune_"; .Event_Points_Variable$ = "#LROEVENTPOINTS"; // The name of your event points variable setarray(.Sector, 1, 10); // Sector range setarray(.Cutin, 0, 19); // Cutin range .Spin_Speed = 50; // What is the base spin speed? (ms) .nbTurns = 2; .Points_Cost = 100; // How many 'points' does it cost for a spin? .Free_Spins = 1; // How many free spins does a player get? .Sound_Effects = true; // Enable sound effects? (true/false) setarray(.prize_id[1], -1, 31024, 31026, 31008, 31020, 31017, 31010, 31016, 0, 31009); setarray(.prize_qty[1], 2, 1, 1, 1, 3, 3, 1, 3, 0, 3); end; }
  2. Edited the first post with the updated version of script.
  3. Thanks Annie, 1 is not me, it is from way back ... eA days 2 will be redone, I will follow Dastgir`s advice and use an array instead of bit manipulation (will make the script easier to understand for beginners) I Already coded it, need to test it
  4. 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 // Winner gets reward in Zeny //Zeny += 1000000; // Alotta bax ;) 3) Questions definition To define more questions you need to follow this pattern DefineQuestion("<question>", "<answer>", "<hint>"); 4) Cheating I'm aware that this event can be cheated/Automated by players. Therefore only a modest reward is given
  5. 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.
  6. Very nice, but I think it would be annoying to do that for every single mob? Could be a nice feature for Boss mobs though.
  7. @AnnieRuru Thanks, Very neat advice will try that!
  8. 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: Need some more from you folks
  9. 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.
  10. 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...
  11. 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.
  12. Looks like halloween prontera or something.... While changing Prontera map, did you update mapcache?
  13. 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); }
  14. 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
  15. 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!!!
  16. 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???
  17. 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
  18. 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
  19. 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!?
  20. 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...
  21. 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...)
  22. If you manage to find it... Because I will not announce it, and it's not called HabilisRO
  23. 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...
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.