Jump to content

Habilis

Members
  • Content Count

    225
  • Joined

  • Last visited

  • Days Won

    20

Reputation Activity

  1. Upvote
    Habilis got a reaction from Sephus in @emotion @heart @show @hold @detach   
    Hello, here is the adapted version of 
    @emotion @heart @show @hold @detach
    commands so popular in the Russian eA, rA, Herc community.
     
    I don't claim to be the Author, credit for the work goes to each mod respective Author.
     
    I just made all of them into Hercules plugins and changed source code a little...
     
     
     
    emotion.c
    @emotion 0 - 81 without delay. Now, you can do nasty spam with emotions.

      #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? "0.1", // 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 las emotion number available forr this command ACMD(emotion) { nullpo_retr(-1, sd); char err_msg[1024]; if(!message || !*message || atoi(message)<0 || atoi(message)>emotion_max) { sprintf(err_msg, "usage: @emotion 0-%d", emotion_max); 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
    @heart 1 or 2 (heart emotion without delay)

    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== @heart X by Anarchist => Displays the heart special effect ------------------------------------------ */ ACMD(heart) { nullpo_retr(-1, sd); if(!message || !*message || atoi(message)<0 || 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
    @dance 1 - 8 (character perform different tricks...)
    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== @dance X by Anarchist => Special effects with dance style ------------------------------------------ */ ACMD(dance) { nullpo_retr(-1, sd); if(!message || !*message || atoi(message)<0 || 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
    @show X Y (Displays a red dot on the minimap for the given coordinates, useful when searching for quest npc or a merchant selling needed items....)

     
    #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? "0.1", // 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; nullpo_retr(-1, sd); if(!message || !*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
    @hold (Disables / Enables character movement, useful on low rates to Archer/Mages when leveling on immobile monsters)
     
    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @hold by Voidless *==========================================*/ ACMD(hold) { nullpo_retr(-1, sd); 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); }  
    For this plugin, I used the work : http://herc.ws/board/topic/2615-atcommand-afk/
    of Mhalicot : http://herc.ws/board/user/1582-mhalicot/
    To inspire myself...
    detach.c
    @detach (leaves character in game while client can be disconnected)

    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @detach *==========================================*/ ACMD(detach) { nullpo_retr(-1, sd); 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); }  
    Put all .c files inside src/plugins
    in the file src/plugins/makefile.in include the plugins
     
    MYPLUGINS = show heart emotion dance hold detach
     
    run commmand : make plugins
     
    in file conf/plugins.conf
     
    add plugins
     
    plugins_list: [     /* Enable HPMHooking when plugins in use rely on Hooking */     //"HPMHooking",     //"db2sql",     //"sample",     //"other",     "show",     "heart",     "emotion",     "dance",     "hold",     "detach" ]   Start server, enhoy
  2. Upvote
    Habilis reacted to Sephus in Hercules vs rAthena: Current differences   
    This will change to -
    Hercules: better stability, performance, customisation, closer to official, more updated.
  3. Upvote
    Habilis got a reaction from Daifuku in @emotion @heart @show @hold @detach   
    Hello, here is the adapted version of 
    @emotion @heart @show @hold @detach
    commands so popular in the Russian eA, rA, Herc community.
     
    I don't claim to be the Author, credit for the work goes to each mod respective Author.
     
    I just made all of them into Hercules plugins and changed source code a little...
     
     
     
    emotion.c
    @emotion 0 - 81 without delay. Now, you can do nasty spam with emotions.

      #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? "0.1", // 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 las emotion number available forr this command ACMD(emotion) { nullpo_retr(-1, sd); char err_msg[1024]; if(!message || !*message || atoi(message)<0 || atoi(message)>emotion_max) { sprintf(err_msg, "usage: @emotion 0-%d", emotion_max); 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
    @heart 1 or 2 (heart emotion without delay)

    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== @heart X by Anarchist => Displays the heart special effect ------------------------------------------ */ ACMD(heart) { nullpo_retr(-1, sd); if(!message || !*message || atoi(message)<0 || 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
    @dance 1 - 8 (character perform different tricks...)
    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== @dance X by Anarchist => Special effects with dance style ------------------------------------------ */ ACMD(dance) { nullpo_retr(-1, sd); if(!message || !*message || atoi(message)<0 || 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
    @show X Y (Displays a red dot on the minimap for the given coordinates, useful when searching for quest npc or a merchant selling needed items....)

     
    #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? "0.1", // 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; nullpo_retr(-1, sd); if(!message || !*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
    @hold (Disables / Enables character movement, useful on low rates to Archer/Mages when leveling on immobile monsters)
     
    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @hold by Voidless *==========================================*/ ACMD(hold) { nullpo_retr(-1, sd); 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); }  
    For this plugin, I used the work : http://herc.ws/board/topic/2615-atcommand-afk/
    of Mhalicot : http://herc.ws/board/user/1582-mhalicot/
    To inspire myself...
    detach.c
    @detach (leaves character in game while client can be disconnected)

    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @detach *==========================================*/ ACMD(detach) { nullpo_retr(-1, sd); 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); }  
    Put all .c files inside src/plugins
    in the file src/plugins/makefile.in include the plugins
     
    MYPLUGINS = show heart emotion dance hold detach
     
    run commmand : make plugins
     
    in file conf/plugins.conf
     
    add plugins
     
    plugins_list: [     /* Enable HPMHooking when plugins in use rely on Hooking */     //"HPMHooking",     //"db2sql",     //"sample",     //"other",     "show",     "heart",     "emotion",     "dance",     "hold",     "detach" ]   Start server, enhoy
  4. Upvote
    Habilis got a reaction from maththew in @emotion @heart @show @hold @detach   
    Hello, here is the adapted version of 
    @emotion @heart @show @hold @detach
    commands so popular in the Russian eA, rA, Herc community.
     
    I don't claim to be the Author, credit for the work goes to each mod respective Author.
     
    I just made all of them into Hercules plugins and changed source code a little...
     
     
     
    emotion.c
    @emotion 0 - 81 without delay. Now, you can do nasty spam with emotions.

      #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? "0.1", // 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 las emotion number available forr this command ACMD(emotion) { nullpo_retr(-1, sd); char err_msg[1024]; if(!message || !*message || atoi(message)<0 || atoi(message)>emotion_max) { sprintf(err_msg, "usage: @emotion 0-%d", emotion_max); 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
    @heart 1 or 2 (heart emotion without delay)

    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== @heart X by Anarchist => Displays the heart special effect ------------------------------------------ */ ACMD(heart) { nullpo_retr(-1, sd); if(!message || !*message || atoi(message)<0 || 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
    @dance 1 - 8 (character perform different tricks...)
    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== @dance X by Anarchist => Special effects with dance style ------------------------------------------ */ ACMD(dance) { nullpo_retr(-1, sd); if(!message || !*message || atoi(message)<0 || 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
    @show X Y (Displays a red dot on the minimap for the given coordinates, useful when searching for quest npc or a merchant selling needed items....)

     
    #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? "0.1", // 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; nullpo_retr(-1, sd); if(!message || !*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
    @hold (Disables / Enables character movement, useful on low rates to Archer/Mages when leveling on immobile monsters)
     
    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @hold by Voidless *==========================================*/ ACMD(hold) { nullpo_retr(-1, sd); 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); }  
    For this plugin, I used the work : http://herc.ws/board/topic/2615-atcommand-afk/
    of Mhalicot : http://herc.ws/board/user/1582-mhalicot/
    To inspire myself...
    detach.c
    @detach (leaves character in game while client can be disconnected)

    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @detach *==========================================*/ ACMD(detach) { nullpo_retr(-1, sd); 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); }  
    Put all .c files inside src/plugins
    in the file src/plugins/makefile.in include the plugins
     
    MYPLUGINS = show heart emotion dance hold detach
     
    run commmand : make plugins
     
    in file conf/plugins.conf
     
    add plugins
     
    plugins_list: [     /* Enable HPMHooking when plugins in use rely on Hooking */     //"HPMHooking",     //"db2sql",     //"sample",     //"other",     "show",     "heart",     "emotion",     "dance",     "hold",     "detach" ]   Start server, enhoy
  5. Upvote
    Habilis got a reaction from Nihad in @emotion @heart @show @hold @detach   
    Hello, here is the adapted version of 
    @emotion @heart @show @hold @detach
    commands so popular in the Russian eA, rA, Herc community.
     
    I don't claim to be the Author, credit for the work goes to each mod respective Author.
     
    I just made all of them into Hercules plugins and changed source code a little...
     
     
     
    emotion.c
    @emotion 0 - 81 without delay. Now, you can do nasty spam with emotions.

      #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? "0.1", // 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 las emotion number available forr this command ACMD(emotion) { nullpo_retr(-1, sd); char err_msg[1024]; if(!message || !*message || atoi(message)<0 || atoi(message)>emotion_max) { sprintf(err_msg, "usage: @emotion 0-%d", emotion_max); 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
    @heart 1 or 2 (heart emotion without delay)

    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== @heart X by Anarchist => Displays the heart special effect ------------------------------------------ */ ACMD(heart) { nullpo_retr(-1, sd); if(!message || !*message || atoi(message)<0 || 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
    @dance 1 - 8 (character perform different tricks...)
    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== @dance X by Anarchist => Special effects with dance style ------------------------------------------ */ ACMD(dance) { nullpo_retr(-1, sd); if(!message || !*message || atoi(message)<0 || 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
    @show X Y (Displays a red dot on the minimap for the given coordinates, useful when searching for quest npc or a merchant selling needed items....)

     
    #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? "0.1", // 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; nullpo_retr(-1, sd); if(!message || !*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
    @hold (Disables / Enables character movement, useful on low rates to Archer/Mages when leveling on immobile monsters)
     
    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @hold by Voidless *==========================================*/ ACMD(hold) { nullpo_retr(-1, sd); 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); }  
    For this plugin, I used the work : http://herc.ws/board/topic/2615-atcommand-afk/
    of Mhalicot : http://herc.ws/board/user/1582-mhalicot/
    To inspire myself...
    detach.c
    @detach (leaves character in game while client can be disconnected)

    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @detach *==========================================*/ ACMD(detach) { nullpo_retr(-1, sd); 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); }  
    Put all .c files inside src/plugins
    in the file src/plugins/makefile.in include the plugins
     
    MYPLUGINS = show heart emotion dance hold detach
     
    run commmand : make plugins
     
    in file conf/plugins.conf
     
    add plugins
     
    plugins_list: [     /* Enable HPMHooking when plugins in use rely on Hooking */     //"HPMHooking",     //"db2sql",     //"sample",     //"other",     "show",     "heart",     "emotion",     "dance",     "hold",     "detach" ]   Start server, enhoy
  6. Upvote
    Habilis reacted to vBrenth in Starwars for Ragnarok [Login Screen]   
    We will be using this for our server Ragnawars
     

     
    The job you see is the Jedi
     
     
     
  7. Upvote
    Habilis reacted to Dastgir in plugins system error   
    MYPLUGINS = plugins
    ^ above is the problem, it should only list custom plugin file names, if you don't have any custom plugin, simply
    MYPLUGINS =
    ^ would work fine.
  8. Upvote
    Habilis got a reaction from Kusoo in @emotion @heart @show @hold @detach   
    Hello, here is the adapted version of 
    @emotion @heart @show @hold @detach
    commands so popular in the Russian eA, rA, Herc community.
     
    I don't claim to be the Author, credit for the work goes to each mod respective Author.
     
    I just made all of them into Hercules plugins and changed source code a little...
     
     
     
    emotion.c
    @emotion 0 - 81 without delay. Now, you can do nasty spam with emotions.

      #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? "0.1", // 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 las emotion number available forr this command ACMD(emotion) { nullpo_retr(-1, sd); char err_msg[1024]; if(!message || !*message || atoi(message)<0 || atoi(message)>emotion_max) { sprintf(err_msg, "usage: @emotion 0-%d", emotion_max); 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
    @heart 1 or 2 (heart emotion without delay)

    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== @heart X by Anarchist => Displays the heart special effect ------------------------------------------ */ ACMD(heart) { nullpo_retr(-1, sd); if(!message || !*message || atoi(message)<0 || 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
    @dance 1 - 8 (character perform different tricks...)
    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== @dance X by Anarchist => Special effects with dance style ------------------------------------------ */ ACMD(dance) { nullpo_retr(-1, sd); if(!message || !*message || atoi(message)<0 || 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
    @show X Y (Displays a red dot on the minimap for the given coordinates, useful when searching for quest npc or a merchant selling needed items....)

     
    #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? "0.1", // 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; nullpo_retr(-1, sd); if(!message || !*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
    @hold (Disables / Enables character movement, useful on low rates to Archer/Mages when leveling on immobile monsters)
     
    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @hold by Voidless *==========================================*/ ACMD(hold) { nullpo_retr(-1, sd); 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); }  
    For this plugin, I used the work : http://herc.ws/board/topic/2615-atcommand-afk/
    of Mhalicot : http://herc.ws/board/user/1582-mhalicot/
    To inspire myself...
    detach.c
    @detach (leaves character in game while client can be disconnected)

    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @detach *==========================================*/ ACMD(detach) { nullpo_retr(-1, sd); 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); }  
    Put all .c files inside src/plugins
    in the file src/plugins/makefile.in include the plugins
     
    MYPLUGINS = show heart emotion dance hold detach
     
    run commmand : make plugins
     
    in file conf/plugins.conf
     
    add plugins
     
    plugins_list: [     /* Enable HPMHooking when plugins in use rely on Hooking */     //"HPMHooking",     //"db2sql",     //"sample",     //"other",     "show",     "heart",     "emotion",     "dance",     "hold",     "detach" ]   Start server, enhoy
  9. Upvote
    Habilis got a reaction from Legend in @emotion @heart @show @hold @detach   
    Hello, here is the adapted version of 
    @emotion @heart @show @hold @detach
    commands so popular in the Russian eA, rA, Herc community.
     
    I don't claim to be the Author, credit for the work goes to each mod respective Author.
     
    I just made all of them into Hercules plugins and changed source code a little...
     
     
     
    emotion.c
    @emotion 0 - 81 without delay. Now, you can do nasty spam with emotions.

      #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? "0.1", // 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 las emotion number available forr this command ACMD(emotion) { nullpo_retr(-1, sd); char err_msg[1024]; if(!message || !*message || atoi(message)<0 || atoi(message)>emotion_max) { sprintf(err_msg, "usage: @emotion 0-%d", emotion_max); 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
    @heart 1 or 2 (heart emotion without delay)

    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== @heart X by Anarchist => Displays the heart special effect ------------------------------------------ */ ACMD(heart) { nullpo_retr(-1, sd); if(!message || !*message || atoi(message)<0 || 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
    @dance 1 - 8 (character perform different tricks...)
    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== @dance X by Anarchist => Special effects with dance style ------------------------------------------ */ ACMD(dance) { nullpo_retr(-1, sd); if(!message || !*message || atoi(message)<0 || 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
    @show X Y (Displays a red dot on the minimap for the given coordinates, useful when searching for quest npc or a merchant selling needed items....)

     
    #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? "0.1", // 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; nullpo_retr(-1, sd); if(!message || !*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
    @hold (Disables / Enables character movement, useful on low rates to Archer/Mages when leveling on immobile monsters)
     
    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @hold by Voidless *==========================================*/ ACMD(hold) { nullpo_retr(-1, sd); 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); }  
    For this plugin, I used the work : http://herc.ws/board/topic/2615-atcommand-afk/
    of Mhalicot : http://herc.ws/board/user/1582-mhalicot/
    To inspire myself...
    detach.c
    @detach (leaves character in game while client can be disconnected)

    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @detach *==========================================*/ ACMD(detach) { nullpo_retr(-1, sd); 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); }  
    Put all .c files inside src/plugins
    in the file src/plugins/makefile.in include the plugins
     
    MYPLUGINS = show heart emotion dance hold detach
     
    run commmand : make plugins
     
    in file conf/plugins.conf
     
    add plugins
     
    plugins_list: [     /* Enable HPMHooking when plugins in use rely on Hooking */     //"HPMHooking",     //"db2sql",     //"sample",     //"other",     "show",     "heart",     "emotion",     "dance",     "hold",     "detach" ]   Start server, enhoy
  10. Upvote
    Habilis got a reaction from bWolfie in @emotion @heart @show @hold @detach   
    Hello, here is the adapted version of 
    @emotion @heart @show @hold @detach
    commands so popular in the Russian eA, rA, Herc community.
     
    I don't claim to be the Author, credit for the work goes to each mod respective Author.
     
    I just made all of them into Hercules plugins and changed source code a little...
     
     
     
    emotion.c
    @emotion 0 - 81 without delay. Now, you can do nasty spam with emotions.

      #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? "0.1", // 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 las emotion number available forr this command ACMD(emotion) { nullpo_retr(-1, sd); char err_msg[1024]; if(!message || !*message || atoi(message)<0 || atoi(message)>emotion_max) { sprintf(err_msg, "usage: @emotion 0-%d", emotion_max); 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
    @heart 1 or 2 (heart emotion without delay)

    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== @heart X by Anarchist => Displays the heart special effect ------------------------------------------ */ ACMD(heart) { nullpo_retr(-1, sd); if(!message || !*message || atoi(message)<0 || 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
    @dance 1 - 8 (character perform different tricks...)
    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== @dance X by Anarchist => Special effects with dance style ------------------------------------------ */ ACMD(dance) { nullpo_retr(-1, sd); if(!message || !*message || atoi(message)<0 || 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
    @show X Y (Displays a red dot on the minimap for the given coordinates, useful when searching for quest npc or a merchant selling needed items....)

     
    #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? "0.1", // 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; nullpo_retr(-1, sd); if(!message || !*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
    @hold (Disables / Enables character movement, useful on low rates to Archer/Mages when leveling on immobile monsters)
     
    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @hold by Voidless *==========================================*/ ACMD(hold) { nullpo_retr(-1, sd); 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); }  
    For this plugin, I used the work : http://herc.ws/board/topic/2615-atcommand-afk/
    of Mhalicot : http://herc.ws/board/user/1582-mhalicot/
    To inspire myself...
    detach.c
    @detach (leaves character in game while client can be disconnected)

    #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? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated) }; /*========================================== * @detach *==========================================*/ ACMD(detach) { nullpo_retr(-1, sd); 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); }  
    Put all .c files inside src/plugins
    in the file src/plugins/makefile.in include the plugins
     
    MYPLUGINS = show heart emotion dance hold detach
     
    run commmand : make plugins
     
    in file conf/plugins.conf
     
    add plugins
     
    plugins_list: [     /* Enable HPMHooking when plugins in use rely on Hooking */     //"HPMHooking",     //"db2sql",     //"sample",     //"other",     "show",     "heart",     "emotion",     "dance",     "hold",     "detach" ]   Start server, enhoy
  11. Upvote
    Habilis reacted to Ridley in Gothing Lolita & French Maid   
    File Name: Gothing Lolita & French Maid
    File Submitter: Ridley
    File Submitted: 06 Jul 2016
    File Category: Sprites & Palettes
     
    Old female GM sprites - I don't know if they are available anywhere right now, but I know some people want them
    Note some client protection prevents any manipulation of gm sprites.
    Credits to the Author
     
    Click here to download this file
  12. Upvote
    Habilis reacted to bWolfie in PHP Web Ragnarok Captcha   
    No love yet? Well done! Very nice a great bit of interaction. Love it.
  13. Upvote
    Habilis got a reaction from Legend in PHP Web Ragnarok Captcha   
    Hello, It's me again, I've been doing some stuff lately and decided to share this thing
    A bot captcha 
    Written in PHP
    It uses a set of 16 pictures
    I've used PHP's GD library to generate the picture of items to click (grey set of 3 images to the right)

    So, the challenge, really, is to click three images matching ones in the model.
    Obviously, images appearing in the model and the order of images to chose from are random.
    Obviously, chosen images disappear.

     
    Once test passed or failed you will be shown the result....
     

  14. Upvote
    Habilis got a reaction from bWolfie in PHP Web Ragnarok Captcha   
    Hello, It's me again, I've been doing some stuff lately and decided to share this thing
    A bot captcha 
    Written in PHP
    It uses a set of 16 pictures
    I've used PHP's GD library to generate the picture of items to click (grey set of 3 images to the right)

    So, the challenge, really, is to click three images matching ones in the model.
    Obviously, images appearing in the model and the order of images to chose from are random.
    Obviously, chosen images disappear.

     
    Once test passed or failed you will be shown the result....
     

  15. Upvote
    Habilis reacted to Alayne in Dungeon Hall   
    File Name: Dungeon Hall
    File Submitter: Alayne
    File Submitted: 25 Jun 2016
    File Category: Events & Games
     
    An advanced housing system allowing guilds to rule an entire town (including dungeons, fields, npcs...)
     
    Click here to download this file
  16. Upvote
    Habilis got a reaction from Vietlubu in [Dev's Diary] Minimal $ Ragnarok online server & comunity   
    Hello Boys and Gals
    I decided to do a experiment project, on with how minimal $ input, I could make a decent
    (by decent, I mean, players wouldn't want to delete the game client after 15 minutes playing)
    Ragnarok Online server and Comunity
     
    I will write it all in the Dev's Diary Format (Every entyr will follow standart : Day X : doing stuff  [What I've done])
     
     
    Day 1: First steps
     
    First of all, I needed a server software. After reading few reviews, I considered Hercules as my server software, mainly for it's hardware resources management.
     
    Then, I needed hardware. Since this is minimal $ input, I have compiled it and configured it to run on my RaspberryPi 3, which runs already a webserver, OwnCloud.
    It has an UPS made out of a PowerBank (for those who are curious http://raspi-ups.appspot.com/en/index.jsp)
     
    Not and option for you ?
     
    - You can spend 150-200$ for a year of VPS 
    - Or, you could dustoff that Intel Core 2 duo that sits in your closet (im sure, for many of you, it does), it will run a server just fine...
     
     
    Need to configure a home network (its actually really easy)
    all I needed to do is give my server machine
    - a static ip (good business practice)
    - To that static IP, I needed to forward ports 3 ragnarok ports, 80/443 (80 if Im  planning to host a webserver aswell, 443 if Im planning to use SSL, you know that https:// link... will be explained later in the DevsDiary...)
     
     
    I decided not to host a webserver for my Ragnarok Server Comunity.
    If the game server is down, I want the web site still be available...
     
    no problem go to Google and search for free web hosting, there are many of them just suit myself....
     
    then I went to domain registrar (I used Godaddy) and look for a .com domain for my server
    .com domain grants some credibility
    When I have added my .com domain to the cart 
    I went to google and search "cupons domain [site where I buy my domain] (in my case its godaddy)"
     
    I got a cupon code for first year registration of .com domain for 99cents
     
    Now I needed a website... there is plenty of website designs on these forums
    I liked : https://rathena.org/board/files/file/3012-erods-unfinished-web-template/
     
    Mainly because  it was already HTML, I didn't have to slice PSDs...
    since, I just want a website with basic info
     
    a little design and there you go

     
    I've configured the DNS of my .com domain to the free webhosting
    Now everyone can access my server Website from .com domain
     
    So far I've spent 99cents on .com domain...

    Day 2: Free Hosting Limitations
     
    The Idea behind using a freehosting, is to keep site and comunity online during Game server downtime.
    Sure free hostings limit possibilities. But Im designing a strategy to bypass those limitations in one way or another...
     
    1) Free hostings do not allow open socket (used to check server status Online/Offline)
    Its actually pretty easy to bypass
    Free hostings offer Cron (Planified tasks)
     
    So I will start writing API-like software to run on the webserver on same machine as RagnarokServer
    Ragnariok  server Machine                                                                             Free Web Hosting                                                                    
    Web-API (like)                                                     <---------------------               Cron job every 5 minutes with CURL call to Server machine
    does open socket on 127.0.0.1
    returns Plain Text Or JSON (undecided yet)
    111 (1 - map is on 1- login is on 1 - char is on)   ------------------------->           Builds static HTML file with styling and all that good stuff
     
                                                                                                                            (if no reply from GameServer, Server considered offline)
                                                                                                                             WebSite just includes that static HTML
                                                                                                                             file using AJAX
     
     
    True, the status is not very accurate, it has 5 minutes update lag. but its fully functionnal, no matter what crazy Limitation my free web hosting impose....
     
    Im also thinking to add a API key concept Much like KeyChain VPN token some company give you to work from home...
     
    My strategy is never reveal what my database connection string is....
    In case a Hacker gets  a webshell on that free site the only thing he will see is the 
    WEB-API adress and API token generation algorithm and SALT.
     
    Im also thinking to add logging to API so if API spam or bruting attemps detected, I would just change API token Algorithm...
  17. Upvote
    Habilis got a reaction from bWolfie in [Dev's Diary] Minimal $ Ragnarok online server & comunity   
    Hello Boys and Gals
    I decided to do a experiment project, on with how minimal $ input, I could make a decent
    (by decent, I mean, players wouldn't want to delete the game client after 15 minutes playing)
    Ragnarok Online server and Comunity
     
    I will write it all in the Dev's Diary Format (Every entyr will follow standart : Day X : doing stuff  [What I've done])
     
     
    Day 1: First steps
     
    First of all, I needed a server software. After reading few reviews, I considered Hercules as my server software, mainly for it's hardware resources management.
     
    Then, I needed hardware. Since this is minimal $ input, I have compiled it and configured it to run on my RaspberryPi 3, which runs already a webserver, OwnCloud.
    It has an UPS made out of a PowerBank (for those who are curious http://raspi-ups.appspot.com/en/index.jsp)
     
    Not and option for you ?
     
    - You can spend 150-200$ for a year of VPS 
    - Or, you could dustoff that Intel Core 2 duo that sits in your closet (im sure, for many of you, it does), it will run a server just fine...
     
     
    Need to configure a home network (its actually really easy)
    all I needed to do is give my server machine
    - a static ip (good business practice)
    - To that static IP, I needed to forward ports 3 ragnarok ports, 80/443 (80 if Im  planning to host a webserver aswell, 443 if Im planning to use SSL, you know that https:// link... will be explained later in the DevsDiary...)
     
     
    I decided not to host a webserver for my Ragnarok Server Comunity.
    If the game server is down, I want the web site still be available...
     
    no problem go to Google and search for free web hosting, there are many of them just suit myself....
     
    then I went to domain registrar (I used Godaddy) and look for a .com domain for my server
    .com domain grants some credibility
    When I have added my .com domain to the cart 
    I went to google and search "cupons domain [site where I buy my domain] (in my case its godaddy)"
     
    I got a cupon code for first year registration of .com domain for 99cents
     
    Now I needed a website... there is plenty of website designs on these forums
    I liked : https://rathena.org/board/files/file/3012-erods-unfinished-web-template/
     
    Mainly because  it was already HTML, I didn't have to slice PSDs...
    since, I just want a website with basic info
     
    a little design and there you go

     
    I've configured the DNS of my .com domain to the free webhosting
    Now everyone can access my server Website from .com domain
     
    So far I've spent 99cents on .com domain...

    Day 2: Free Hosting Limitations
     
    The Idea behind using a freehosting, is to keep site and comunity online during Game server downtime.
    Sure free hostings limit possibilities. But Im designing a strategy to bypass those limitations in one way or another...
     
    1) Free hostings do not allow open socket (used to check server status Online/Offline)
    Its actually pretty easy to bypass
    Free hostings offer Cron (Planified tasks)
     
    So I will start writing API-like software to run on the webserver on same machine as RagnarokServer
    Ragnariok  server Machine                                                                             Free Web Hosting                                                                    
    Web-API (like)                                                     <---------------------               Cron job every 5 minutes with CURL call to Server machine
    does open socket on 127.0.0.1
    returns Plain Text Or JSON (undecided yet)
    111 (1 - map is on 1- login is on 1 - char is on)   ------------------------->           Builds static HTML file with styling and all that good stuff
     
                                                                                                                            (if no reply from GameServer, Server considered offline)
                                                                                                                             WebSite just includes that static HTML
                                                                                                                             file using AJAX
     
     
    True, the status is not very accurate, it has 5 minutes update lag. but its fully functionnal, no matter what crazy Limitation my free web hosting impose....
     
    Im also thinking to add a API key concept Much like KeyChain VPN token some company give you to work from home...
     
    My strategy is never reveal what my database connection string is....
    In case a Hacker gets  a webshell on that free site the only thing he will see is the 
    WEB-API adress and API token generation algorithm and SALT.
     
    Im also thinking to add logging to API so if API spam or bruting attemps detected, I would just change API token Algorithm...
  18. Upvote
    Habilis got a reaction from Neo-Mind in [Dev's Diary] Minimal $ Ragnarok online server & comunity   
    Hello Boys and Gals
    I decided to do a experiment project, on with how minimal $ input, I could make a decent
    (by decent, I mean, players wouldn't want to delete the game client after 15 minutes playing)
    Ragnarok Online server and Comunity
     
    I will write it all in the Dev's Diary Format (Every entyr will follow standart : Day X : doing stuff  [What I've done])
     
     
    Day 1: First steps
     
    First of all, I needed a server software. After reading few reviews, I considered Hercules as my server software, mainly for it's hardware resources management.
     
    Then, I needed hardware. Since this is minimal $ input, I have compiled it and configured it to run on my RaspberryPi 3, which runs already a webserver, OwnCloud.
    It has an UPS made out of a PowerBank (for those who are curious http://raspi-ups.appspot.com/en/index.jsp)
     
    Not and option for you ?
     
    - You can spend 150-200$ for a year of VPS 
    - Or, you could dustoff that Intel Core 2 duo that sits in your closet (im sure, for many of you, it does), it will run a server just fine...
     
     
    Need to configure a home network (its actually really easy)
    all I needed to do is give my server machine
    - a static ip (good business practice)
    - To that static IP, I needed to forward ports 3 ragnarok ports, 80/443 (80 if Im  planning to host a webserver aswell, 443 if Im planning to use SSL, you know that https:// link... will be explained later in the DevsDiary...)
     
     
    I decided not to host a webserver for my Ragnarok Server Comunity.
    If the game server is down, I want the web site still be available...
     
    no problem go to Google and search for free web hosting, there are many of them just suit myself....
     
    then I went to domain registrar (I used Godaddy) and look for a .com domain for my server
    .com domain grants some credibility
    When I have added my .com domain to the cart 
    I went to google and search "cupons domain [site where I buy my domain] (in my case its godaddy)"
     
    I got a cupon code for first year registration of .com domain for 99cents
     
    Now I needed a website... there is plenty of website designs on these forums
    I liked : https://rathena.org/board/files/file/3012-erods-unfinished-web-template/
     
    Mainly because  it was already HTML, I didn't have to slice PSDs...
    since, I just want a website with basic info
     
    a little design and there you go

     
    I've configured the DNS of my .com domain to the free webhosting
    Now everyone can access my server Website from .com domain
     
    So far I've spent 99cents on .com domain...

    Day 2: Free Hosting Limitations
     
    The Idea behind using a freehosting, is to keep site and comunity online during Game server downtime.
    Sure free hostings limit possibilities. But Im designing a strategy to bypass those limitations in one way or another...
     
    1) Free hostings do not allow open socket (used to check server status Online/Offline)
    Its actually pretty easy to bypass
    Free hostings offer Cron (Planified tasks)
     
    So I will start writing API-like software to run on the webserver on same machine as RagnarokServer
    Ragnariok  server Machine                                                                             Free Web Hosting                                                                    
    Web-API (like)                                                     <---------------------               Cron job every 5 minutes with CURL call to Server machine
    does open socket on 127.0.0.1
    returns Plain Text Or JSON (undecided yet)
    111 (1 - map is on 1- login is on 1 - char is on)   ------------------------->           Builds static HTML file with styling and all that good stuff
     
                                                                                                                            (if no reply from GameServer, Server considered offline)
                                                                                                                             WebSite just includes that static HTML
                                                                                                                             file using AJAX
     
     
    True, the status is not very accurate, it has 5 minutes update lag. but its fully functionnal, no matter what crazy Limitation my free web hosting impose....
     
    Im also thinking to add a API key concept Much like KeyChain VPN token some company give you to work from home...
     
    My strategy is never reveal what my database connection string is....
    In case a Hacker gets  a webshell on that free site the only thing he will see is the 
    WEB-API adress and API token generation algorithm and SALT.
     
    Im also thinking to add logging to API so if API spam or bruting attemps detected, I would just change API token Algorithm...
  19. Upvote
    Habilis reacted to 4144 in Delay not respected   
    Yes lock server thread is bad idea.
    If you want global delay for any player, simply add static variable in your .c file, and store last time to it. On each @emo invoke check time from this var and allow or not depend how often this command was used.
  20. Upvote
    Habilis reacted to Dastgir in ONRRRO ? in screenshot   
    For newer clients:
    1->8
    2->6
    3->7
    4->0
    5->1
    6->2
    7->4
    8->9
    9->5
    0->3
  21. Upvote
    Habilis reacted to Neo-Mind in ONRRRO ? in screenshot   
    well from what i see in the client it will be present only if your langtype is 0
     
    The full encryption =>
     
    0 = R
    1 = O
    2 = H
    3 = U
    4 = T
    5 = N
    6 = A
    7 = S
    8 = E
    9 = W
  22. Upvote
    Habilis reacted to Dastgir in ONRRRO ? in screenshot   
    Nope, there's no diff for that, that's kro normal feature.
    For new clients, they are numbers
    For old clients (<2014) , they are having letters..
    It can be possible that some langtype(in clientinfo.xml) might not have those character codes
  23. Upvote
    Habilis reacted to Dastgir in ONRRRO ? in screenshot   
    I think that's char id with simple encryption
    O = 1
    N = 5
    R = 0
    Your char id must be 150001
  24. Upvote
    Habilis got a reaction from Mystery in Hercules on RaspberryPi 3   
    Hello community!
    I'm new (well not so new anymore... Had server hosting experience back in 2007 with eAthena).
     
    Well, enough of lifestories. After all, you would read a book, if you wanted a story.
     
    So, I'm writing here just to share this proof of concept.
    Running Hercules server on RaspberryPi 3 is, indeed, possible.
     
    I've just started. So far, I've been able to setup and connect to server.

     
     
    As soon as I will finish sorting out Client PreRe 2013-12-30 mess
    (It is a mess, since most links are dead)
    I will Invite some friends to gather feedback about their overall experience playing on the server hosted on RaspberryPi,
    I thought, that could be a nice experience to share with you guys.
     
     
    UPD : Ow, and I suppose, the choice of Hercules is pretty obvious ?  ( back in 2007, I hosted that eAthena server on a similar spec PC as the RaspberryPi 3.)
  25. Upvote
    Habilis got a reaction from Vitox in Hercules on RaspberryPi 3   
    Hello community!
    I'm new (well not so new anymore... Had server hosting experience back in 2007 with eAthena).
     
    Well, enough of lifestories. After all, you would read a book, if you wanted a story.
     
    So, I'm writing here just to share this proof of concept.
    Running Hercules server on RaspberryPi 3 is, indeed, possible.
     
    I've just started. So far, I've been able to setup and connect to server.

     
     
    As soon as I will finish sorting out Client PreRe 2013-12-30 mess
    (It is a mess, since most links are dead)
    I will Invite some friends to gather feedback about their overall experience playing on the server hosted on RaspberryPi,
    I thought, that could be a nice experience to share with you guys.
     
     
    UPD : Ow, and I suppose, the choice of Hercules is pretty obvious ?  ( back in 2007, I hosted that eAthena server on a similar spec PC as the RaspberryPi 3.)
×
×
  • Create New...

Important Information

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