Jump to content

Habilis

Members
  • Content Count

    225
  • Joined

  • Last visited

  • Days Won

    20

Posts posted by Habilis


  1. 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.

    P888Zdq.jpg

    - 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.

    l33tzjF.jpg
    - 2) If there is no answer after 15 seconds NPC will give a hint.

    ahaNusT.jpg
    - 3) IF there is still no answer after a hint, the question is skipped.

    ZB5wgGq.jpg
    - 4) If the right answer is given, the player is announced and the reward is given

    2k8BuqW.jpg

     

    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 :blush:

     

    //===== Hercules Script ====================================================================
    // Automatic Trivia Event
    //===== Originally initiated By: ===========================================================
    // Capuche http://rathena.org/board/user/5984-capuche/
    //===== Changed By: ========================================================================
    // Habilis
    //===== Current Version: ===================================================================
    // 1.5
    //===== Compatible With: ===================================================================
    // Hercules
    //===== Description: =======================================================================
    //- 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, player is announced and reward is given
    //==========================================================================================
    //=====From eAthena to rAthena to Hercules==================================================
    //==========Without this original author, this script will never exist======================
    //========Original author Credits===========================================================
    //=====================================================DONT=================================
    // ToastOfDoom ================================================REMOVE=======================
    // RxChris	   =========================================================THIS================
    // Hellflaem   ================================================================CREDIT=======
    //==========================================================================================
    //==========================================================================================
    
    
    -	script	Trivia_Auto_Event	FAKE_NPC ,{
    	
    	OnMinute18:
    	//OnEventStart:
    		// Make the NPC appear so that players can begin to gather around
    		// and perhaps read the rules
    		enablenpc "Trivia#main";
    		.@nbAnnounce = 3; // How many times announce event with minute intervals
    		while( .@nbAnnounce > 0 ) {
    			announce "The Trivia Event will begin south of Prontera in " + .@nbAnnounce + " minute(s).",bc_all | bc_blue;
    			.@nbAnnounce--;
    			sleep 60000;
    		}
    	    announce "The Trivia Event has begun!",bc_all | bc_blue;
    		donpcevent "Trivia#main::OnEventBegin";
    		end;
    		
    	OnStop:	
    	OnEventTimeOut:
    		disablenpc "Trivia#main";
    		end;
    	
    	OnInit:
    		disablenpc "Trivia#main";
    		end;
    }
    
    
    prt_fild08,137,365,6	script	Trivia#main	4_F_JOB_ASSASSIN,{
    
    OnTalk:
    	mes "[^0055FF ::: Trivia ::: ^000000]";
    	mes " ";
    	mes "Very simple event!";
    	mes " ";
    	mes "I will be asking random questions.";
    	mes " ";
    	mes "All you have to do is shout the answer in the main chat!";
    	mes " ";
    	mes "Do not worry about the capital letters, I can recognize the right answer, when I see one ;)";
    	mes "Worry about the spelling though.";
    	
    	close2;
    	end;
    
    function DefineQuestion; function GetQuestion; function GetAnswer; function GetHint;
    
    OnEventBegin:
    L_loop:
    	do {
    		.@i = rand(.numQuestions); // Randomly picks a fact.
    	} while(.already_asked[.@i]);
    	
    	.already_asked[.@i] = true;
    	
    	if( !.count ) {
    		npctalk "Please answer all my questions:";
    		sleep 2000;
    		npctalk "If your answer is correct, you will obtain prizes!";
    	}
    	.count++;
    	sleep 4000;
    	npctalk "[" + .count + "/" + .max_questions + "] " + GetQuestion(.@i);
    	defpattern 1, "([^:]+):.*\\s" + GetAnswer( .@i ) + "(.*)", "Right";
    	.Ans$ = GetAnswer( .@i );
    	.Hint$ = GetHint( .@i );;
    	activatepset 1;
    	initnpctimer;
    	end;
    	
    OnTimer15000:
    	npctalk "[Hint] : " + .Hint$;
    	end;
    OnTimer30000:
    	npctalk "Sorry, You took too long to answer.";
    	callsub L_continue;
    	end;
    	
    Right:
    	npctalk "Correct, " + strcharinfo(0) + "! The answer is  " + .Ans$ + ".";
    	
    	// Winner gets reward in Zeny
    	//Zeny += 1000000; // Alotta bax ;)
    	
    	// Winner gets reward in Item
    	//getitem 607, rand( 1,10 ); // Randomly picks from 1 to 10   607 --Ygg berry~ .
    	
    	// Winner gets reward in Points
    	.@pointsWon = rand(.minPoints,.maxPoints);
    	#LROEVENTPOINTS = #LROEVENTPOINTS + .@pointsWon;
    	dispbottom .ServerName$  + " : You won " + .@pointsWon + " event points.";
    	
    L_continue:
    	deletepset 1;
    	stopnpctimer;
    	if( .count < .max_questions ) {
    		callsub L_loop; // loop 10 questions
    	}
    	.count = 0; // end of event
    	.Q_session = 0;
    	npctalk "That's all for now. Thanks for participating in this event ^^";
    	deletearray .already_asked, getarraysize(.already_asked);
    	emotion e_thx;
    	sleep 2000;
    	disablenpc "Trivia#main";
    	end;
    
    function DefineQuestion {
    	.@a = .numQuestions % 128;
    	.@b = .numQuestions / 128;
    
    	setd(".question_" + .@a + "$[" + .@b + "]", getarg(0));
    	setd(".answer_" + .@a + "$[" + .@b + "]", getarg(1));
    	setd(".hint_" + .@a + "$[" + .@b + "]", getarg(2));
    	
    	.numQuestions = .numQuestions + 1;
    	return;
    }
    function GetQuestion {
    	return getd(".question_" + (getarg(0) % 128) + "$[" + (getarg(0) / 128) + "]");
    }
    function GetAnswer {
    	return getd(".answer_" + (getarg(0) % 128) + "$[" + (getarg(0) / 128) + "]");
    }
    function GetHint {
    	return getd(".hint_" + (getarg(0) % 128) + "$[" + (getarg(0) / 128) + "]");
    }
    
    OnInit:
    	.ServerName$ = "[Your boring server]";
    	.minPoints = 10;
    	.maxPoints = 25;
    	.max_questions = 10;	// 10 questions if more than 10 questions are defined
    	DefineQuestion("When you create a character in this game, how many primary stats are there?","6", "STR, AGI, VIT, INT, DEX, LUK");
    	DefineQuestion("Wizard skill Water Ball can only be cast over deluge or ____?", "water", "It is liquid.");
    	DefineQuestion("Which item is required to create a guild?", "emperium", "An Emperial item");
    	DefineQuestion("which skill is beneficial to the living and damaging to the undead?", "heal", "It restores health.");
    	DefineQuestion("In which town Thieves guild is located?", "morocc", "A town in the sorgat desert.");
    	DefineQuestion("In which town Merchants guild is located?", "alberta", "It's a portuary town.");
    	DefineQuestion("In which town Archers guild is located?", "payon", "");
    	DefineQuestion("What property do Izlude dungeon monsters possess?", "water", "It is liquid.");
    	DefineQuestion("What status can be inflicted with the Hammer Fall skill?", "stun", "Did I see the stars around your head?");
    	DefineQuestion("How much Zeny one Jellopy is worth?", "3", "Just get it from a Poring.");
    	DefineQuestion("Which town has the most Dancers?", "comodo", "An island in the warm waters.");
    	DefineQuestion("How many different poring-like monsters you can meet near prontera, including mini bosses?", "9", "poring, drops, poporing, marin, santa poring, mastering, angeling, arcangeling, ghostring");
    	DefineQuestion("What property counters best the water property?", "wind", "It's Blowing");
    	DefineQuestion("What property counters best the undead property?", "holy", "Perhaps an acolyte or a priest can tell you?");
    	DefineQuestion("What kind of food both Vanilmirth and Christmas Goblin like?", "scel", "Yellow jeloppy");
    	DefineQuestion("How many cities are in Rune-Midgrad kingdom?", "11", "Prontera, Izlude, Jawaii, Geffen, Payon, Morocc, Alberta, Comodo, Umbala, Al De Baran, Lutie");
    	DefineQuestion("What city is the capital of Rune-Midgrad kingdom?", "prontera", "The most central town of all.");
    	DefineQuestion("Which food is able to fully restore health and mana? _________ _____", "yggdrasil berry", "A berry growing on the most majestic tree!");
    	DefineQuestion("Which one of those is the fastest weapon type? Sword, Dagger, Staff, Mace", "dagger", "Something that has to do with the length of the blade.");
    	DefineQuestion("Which one of those id the cheapest? Jellopy  Large Jellopy   Royal Jelly   Honey", "jellopy", "Dropped by Porings.");
    	DefineQuestion("Which monster drops a pet taming item to tame Deviruchi?", "joker", "Why so serious?");
    	
    	if( .numQuestions < .max_questions ) .max_questions = .numQuestions;
    	end;
    }

    Enjoy!

     


  2. 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:

    Quote

    When you begin to create a character in this game how many kinds of stats are there?
    6

    Wizard skill Water Ball can only be cast over deluge or ____
    water

    Which item is required to create a guild?
    emperium

    which skill is beneficial to the living and damaging to the undead?
    heal

    Which town Theives guild is located
    morocc

    Which town Merchants guild is located
    alberta

    What property do Izlude dungeon monsters possess?
    water


    What status can be inflicted with the Hammer Fall skill?
    stun

    How much Zeny is one Jellopy worth?
    3

    Which town has the most Dancers?
    comodo

     

     

    Need some more from you folks :blush:


  3. 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)

    eg1mwLJ.jpg

     

     

  4. 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  B38cFIv.jpg  on your  and your server's crew behalf!

     

    Hopefully, this closes the question of legality...

     


  5. 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);
    }

     


  6. 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

     


  7. 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

    Скрытый текст

    tKvzphn.jpg

    I'm using free SSL certificate from Let's Encrypt

    so the information about sender looks like this

    Скрытый текст

    jzONhPs.png

     

    tiny little LOCK!!!!

    This is how looks a message sent from email server with not configured encryption:

    Скрытый текст

    PpDHqoC.jpg

     

    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...

    I4OKxZH.jpg

    There is a way to test the quality of the SSL setup

     website : https://www.ssllabs.com/ssltest/

    Скрытый текст

    GSU09Bl.jpg

     

    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/

    Скрытый текст

    SDcMTln.png

     

    Lost 0.3 points thwere because some E-mail carriers think that Habilis is using FREE dynamic DNS ... :B):

    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:B):

    May teh Force be with YOU!!!


  8. 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 :B):)

    But, it is way more profitable than being destructive to someone's database :blush:

    Without making my account a GM, without spawning them through @comamnd, without logs or traces :B):

     

    Anyways, feel like playing???


  9. 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  :B):

    Let's play


  10. x3UxJyY.jpg

    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. 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...

    Скрытый текст

    hjtnnJI.jpg

    8ZE990E.jpg

    B5JJnp4.jpg

     

    8gf7JQz.jpg

     

    p6dXCsY.jpg

     

    kN0BWX6.jpg

     

    DSaPiW2.jpg

     


  12. 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


  13. 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:

    Скрытый текст

    IbRXW5t.jpg

     

    y4uCOOa.jpg

     

    mQHEF18.jpg

     

    j5p4wnx.jpg

     

    4gXB89v.jpg

     

    2H7i5Og.jpg

     

    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!

     


  14. Day 14 done some more stuff...

    Implemented a sprite pack from Adel that makes porings more colorful (colorful porings are really important!)

    before:

    Spoiler

    fjakwwe.jpg

    After:

    Spoiler

    dGs3vzu.jpg

     

    Lika 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:

    Spoiler

    LijE0np.jpg

    After:

    Spoiler

    TZuu1Km.jpg

     

    Before:

    Spoiler

    jdIZNHM.jpg

     

    After:

    Spoiler

    F8ma0YO.jpg

     

     

    Finally 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

    Spoiler

    jGdrpkV.jpg

     

     

    OJ3yXIX.jpg

    and 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)

    Spoiler

    JoalbOU.jpg

     

    ioWyH8J.jpg

    Habilis was ready to implement some custom costumes but this piece of gui needed a touch of personalisation

    hpM9m8E.png

    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.

    Spoiler

    39YUNpY.jpg

     

    fjq1aXy.jpg

     

    This is how costumes look for now

    Spoiler

    C1mREpJ.jpg

     

    Unfortunately, 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....default_ph34r.png

    This means alot of NotePad++ regular expression search and replace

    And a lot of Excel formulas to generate Item_db2.conf

    Spoiler

    stRn6ey.jpg

    LcsOG8w.jpg

     

    nxPmHkN.jpg

     

    And 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)

    eg1mwLJ.jpg

     

    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

    Spoiler

    Jg9GaEE.jpg

    IA9kNck.jpg

     

    NHlroNs.jpg

     

    SgsoJlo.jpg

     

    Oz71WIV.jpg

     

     

    And finally, Habilis's favorite ones!!!!!

     

    Spoiler

    zVId7oy.jpg

     

    It8fHZh.jpg

     

     

    also 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

    mGvcaed.jpg

     

     

     

×
×
  • Create New...

Important Information

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