Jump to content

AnnieRuru

Script Developers
  • Content Count

    1677
  • Joined

  • Last visited

  • Days Won

    245

Reputation Activity

  1. Upvote
    AnnieRuru got a reaction from IndieRO in King of Emperium Hill   
    I think its better to have a release topic for this instead of me update the script across separate topics
     
    Download: Hercules 1.3
    Script
    Plugin for Hercules
    Download: rAthena 1.2
    Script.
    Patch for rAthena
     
    what this event do ? ( huh ? so popular script and I still need to explain ? )
    1. make a guild
    2. join this event
    3. whack the emperium
    4. defends it until times up
    hahaha ....
     
     
    How to configure the time:
    L_start: <-- the label to start the event
    change OnClock2000: into OnSat2000: to start this event on Saturday 8pm
    L_end: <-- the label to end the event
    change OnClock2030: into OnSat2030: to end this event on Saturday 8:30pm,
    effectively makes this event runs 30 minutes
     
     
    Frequently Asked Questions:
    Question : why the Guild member can hit their own Emperium ?
    Answer : because you didn't patch and recompile
    Question: there is an exploit in this event, guild master can use Emergency Recall to abuse the prize
    Answer : I already fixed it in this topic, now the prize reward will be given after the winner warp outside the map
     
     
    original topic from eathena forum
    http://www.eathena.ws/board/index.php?showtopic=174222
    yeah ... I have been fixing this script since 7 years ago
     
     
  2. Upvote
    AnnieRuru got a reaction from Yoh Asakura in Help to update this npc   
    LOL you mixed up both
     
    sql query, this one added the index
    alter table `char` add empbreak smallint(6) unsigned not null default 0 after unban_time, add index (empbreak);..
    npc/guild/agit_main.txt
    query_sql "UPDATE `char` SET empbreak = empbreak+1 WHERE char_id = " + getcharid(0);which is already correct.
    .
    ////============================//// Emp Breaking Ladder////============================prontera,155,183,4 script Emperium Ranking 722,{ .@nb = query_sql( "select name, empbreak from `char` where empbreak > 0 order by empbreak desc limit 10", .@name$, .@empbreak ); mes "^FF0000[ Emperium Ranking ]^000000"; for ( .@i = 0; .@i < .@nb; .@i++ ) mes "^0000FF"+ ( .@i +1 ) +".^000000 " + .@name$[.@i] +" - ^FF0000"+ .@empbreak[.@i] +"^000000 Break(s)"; mes " "; query_sql "select empbreak from `char` where char_id = "+ getcharid(0), .@empbreak; mes "^0000FF["+ strcharinfo(0) +"'s]^000000 Emperium Break's is ^FF0000" + .@empbreak + "^000000 Break(s)"; close;OnInit:// waitingroom "Emperium's Ranking",0; // Look on the configuration! end;}use this script
  3. Upvote
    AnnieRuru got a reaction from Skyline in Redeemer NPC / Coupon NPC / Promotional NPC   
    perfectly built script, I can only see 1 bug and 2 improvements
     
    1.
    bindatcmd "claim",strnpcinfo(3)+"::OnClaim"; bindatcmd "code",strnpcinfo(3)+"::OnEditCode";when you write an atcommand that player can usealways set charcommand level to 99 or 100
     
    its simple to reproduce
    when pvp/gvg, type '#claim <player name that you hated>' and will send a chat box on the player,
    cause him to have a moment of pause because need to type something
    yet again ... this kind of knowledge can only acquire when you have work on a live server =/
     
    2.
    so change into like this
    bindatcmd "claim",strnpcinfo(3)+"::OnClaim", 0, 100; bindatcmd "code",strnpcinfo(3)+"::OnEditCode", 99, 100;so you don't have to ( getgmlevel() < 99 ) end; 
    3.
    query_sql "SELECT `nameid`, `amount` FROM `reward_codes` WHERE `code` = '" + escape_sql(.@pc$) + "'", .@item, .@amt; if ( !.@item ) dispbottom "Either invalid code or the code is already claimed by other people";can be simplify as if ( !query_sql( "SELECT `nameid`, `amount` FROM `reward_codes` WHERE `code` = '" + escape_sql(.@pc$) + "'", .@item, .@amt ) ) dispbottom "Either invalid code or the code is already claimed by other people";
  4. Upvote
    AnnieRuru got a reaction from Nova in Chat space limitation!/Scammer avoid *Will pay for help*   
    I hope this is final one that will work
     
    patch
    src/map/clif.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)diff --git a/src/map/clif.c b/src/map/clif.cindex d9acf07..5b3418e 100644--- a/src/map/clif.c+++ b/src/map/clif.c@@ -9110,6 +9110,22 @@ bool clif_process_message(struct map_session_data *sd, int format, char **name_, *namelen_ = namelen; *message_ = message; *messagelen_ = messagelen;++ {+ int i, l = strlen(message);+ for ( i = 0; i <= l; i++ )+ if ( message[i] == 'xA0' )+ message[i] = 'x20'; // replace Alt+0160 into [space]+ if ( stristr( message, " " ) ) {+ clif->colormes( sd->fd, COLOR_RED, "You are only allow to type maximum of 3 spaces in a dialog." );+ return false;+ }+ if ( stristr( message, "x20x3Ax20" ) || stristr( message, "x20x3Bx20" ) ) { // type " : " OR " ; " will be blocked+ clif->colormes( sd->fd, COLOR_RED, "You can't impersonate other players !" );+ return false;+ }+ }+ return true; } plugin#include <stdio.h>#include <stdlib.h>#include <string.h>#include "../map/pc.h"#include "../map/clif.h"#include "../common/HPMi.h"#include "../common/socket.h"#include "../common/HPMDataCheck.h" // should always be the last file included! (if you don't make it last, it'll intentionally break compile time)HPExport struct hplugin_info pinfo = { "GM_impersonate", // 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)};bool clif_process_message_spaces( int retVal, struct map_session_data *sd, int format, char **name_, size_t *namelen_, char **message_, size_t *messagelen_) { if ( retVal == true ) { char* message = (char*)RFIFOP( sd->fd ,4) + strnlen(sd->status.name, NAME_LENGTH-1) + 3; int i, l = strlen(message); for ( i = 0; i <= l; i++ ) if ( message[i] == 'xA0' ) message[i] = 'x20'; // replace Alt+0160 into [space] if ( stristr( message, " " ) ) { clif->colormes( sd->fd, COLOR_RED, "You are only allow to type maximum of 3 spaces in a dialog." ); return false; } if ( stristr( message, "x20x3Ax20" ) || stristr( message, "x20x3Bx20" ) ) { // type " : " OR " ; " will be blocked clif->colormes( sd->fd, COLOR_RED, "You can't impersonate other players !" ); return false; } } return true;}HPExport void plugin_init (void) { clif = GET_SYMBOL("clif"); session = GET_SYMBOL("session"); strlib = GET_SYMBOL("strlib"); addHookPost("clif->process_message", clif_process_message_spaces);}..
    as it turns out, I just have to replace Alt+0160 into [space], then just block players from typing " : " is already enough
    no need some kind of blocklist after all
  5. Upvote
    AnnieRuru got a reaction from Nova in Chat space limitation!/Scammer avoid *Will pay for help*   
    I'm more interested to know how to type those charactersAlt + ????
     
    those are actually meant for names
    use together with
    normalize_name( message, "255xA0032tx0Ax0D " );they are automatically trim into 1 single space 
    oh well
    patch
    src/map/clif.c | 7 +++++++ 1 file changed, 7 insertions(+)diff --git a/src/map/clif.c b/src/map/clif.cindex d9acf07..0118856 100644--- a/src/map/clif.c+++ b/src/map/clif.c@@ -9110,6 +9110,13 @@ bool clif_process_message(struct map_session_data *sd, int format, char **name_, *namelen_ = namelen; *message_ = message; *messagelen_ = messagelen;++ normalize_name( message, "255xA0032tx0Ax0D " );+ if ( stristr( message, "x20x3Ax20" ) || stristr( message, "x20x3Bx20" ) ) { // type " : " OR " ; " will be blocked+ clif->colormes( sd->fd, COLOR_RED, "You can't impersonate other players !" );+ return false;+ }+ return true; } plugin#include <stdio.h>#include <stdlib.h>#include <string.h>#include "../map/pc.h"#include "../map/clif.h"#include "../common/HPMi.h"#include "../common/socket.h"#include "../common/HPMDataCheck.h" // should always be the last file included! (if you don't make it last, it'll intentionally break compile time)HPExport struct hplugin_info pinfo = { "GM_impersonate", // 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)};bool clif_process_message_spaces( int retVal, struct map_session_data *sd, int format, char **name_, size_t *namelen_, char **message_, size_t *messagelen_) { if ( retVal == true ) { char* message = (char*)RFIFOP( sd->fd ,4) + strnlen(sd->status.name, NAME_LENGTH-1) + 3; normalize_name( message, "255xA0032tx0Ax0D " ); if ( stristr( message, "x20x3Ax20" ) || stristr( message, "x20x3Bx20" ) ) { // type " : " OR " ; " will be blocked clif->colormes( sd->fd, COLOR_RED, "You can't impersonate other players !" ); return false; } } return true;}HPExport void plugin_init (void) { clif = GET_SYMBOL("clif"); session = GET_SYMBOL("session"); strlib = GET_SYMBOL("strlib"); addHookPost("clif->process_message", clif_process_message_spaces);}
  6. Upvote
    AnnieRuru got a reaction from luis.seifert in [Outdated] battleground system without waitingroom   
    This plugin has outdated
    Haru has already fixed queue iterator script command
    this plugin is no longer needed
     
    sample battleground script using queue iterator
    http://upaste.me/ab3022385d0127b7f
     

     
    outdated topics from eathena or rathena
    this one is more update
     
    Download: 1.5
    plugin
     
    -----------------------------------------
     
    *createbgid , , , , ;
    create a specific battleground ID, for the rest .... refer to doc
    .red = createbgid( "guild_vs3", 13,50, strnpcinfo(0)+"::Onredout", strnpcinfo(0)+"::Onreddead" );.blue = createbgid( "guild_vs3", 86,50, strnpcinfo(0)+"::Onblueout", strnpcinfo(0)+"::Onbluedead" );.-----------------------------------------
     
    *setbgid {, };
    *setbgid {, };
    player attached to the script will join the battleground team,
    but if a player name ( or account ID ) is specify, will let that player join the battleground team
     
    for debugging purposes
    this command can return positive number ( > 0 ) if the function is successful
    if it return negative :-
    -1: the battleground team haven't create yet ... has to be create with createbgid
    -2: the team already full, it reached MAX_BG_MEMBERS = 30 which can increase at srcmapbattleground.h
    -3: player not found ... happens when the input is not online or not found
    -5: the player already join the battleground ID that you specify
     
    if the player has joined battleground ID 3, and you use setbgid 5;
    this will force the player to leave battleground ID 3 and join battleground ID 5 without any notification
    ( player who same group will receive a message mention that "player xxx leaving battlefield" )
    only when the player joined bg ID 9, and use setbgid 9; then only the command return -5
    but the script will still continue running without posting any error, so don't worry
     
    setbgid 0; is equal to *bg_leave;
    and setbgid 0, "annie"; or setbgid 0, 2000000;
    will make the player "annie" ( or account id 2000000 ) leave the battleground team without using *attachrid + *bg_leave
    warpwaitingpc "guild_vs3", 0,0;for ( .@i = 0; .@i < $@warpwaitingpcnum; .@i++ )setbgid ( .@i % 2 )? .red : .blue, $@warpwaitingpc[.@i];.-----------------------------------------
     
    *getbgusers ;
    similar to getpartymember , 2; // <-- return account ID
    this will create an array "$@arenamembers" holding all the player's account ID from the battleground team
    and $@arenamembersnum is equal to bg_get_data(, 0), just like $@partymembercount
    getbgusers .red;for ( .@i = 0; .@i < $@arenamembersnum; .@i++ )getitem 501, 1, $@arenamembers[.@i];.-----------------------------------------
     
    sample script
    http://upaste.me/7de710709dbb6fa17
     
    example script for reference material
    default battleground system using waitingroom, works in clean rathena/hercules
    http://upaste.me/497010755d3295805
    this script using this custom script commands
    http://upaste.me/b2781075699b0f8d9
    you can tell it really does make the script shorter
     
     
     
  7. Upvote
    AnnieRuru got a reaction from Only4fun in [Custom battlegrounds] is it possible?   
    this should belongs to source modifications, move
     
    http://herc.ws/board/tracker/issue-7894-battlegrounds-emblem-and-guardian/
    if developer fix this bug, then I might be able to find the code for this modification ...
     
    the trick should be ... make 2 fake guild and put emblems on it
    so when battleground starts, clif send that fake guild emblem
  8. Upvote
    AnnieRuru got a reaction from Only4fun in [Custom battlegrounds] is it possible?   
    until developer fix this bug =/
    http://herc.ws/board/tracker/issue-7894-battlegrounds-emblem-and-guardian/
  9. Upvote
    AnnieRuru got a reaction from ShankS in Maintenance mode   
    @Darkpurple
    nope, this modification took me 2 full days to write, very time consuming stuffs
    go ahead and buy from roserver or cydh ... I don't care
     
    seriously, you should consider switch to hercules because I noticed you always follow my posts
     
    @THPO
    fixed in 1.0a
  10. Upvote
    AnnieRuru got a reaction from Legend in Vendor Control (rewrite)   
    I think I'm going to start a "New Script Festival" LOL
     
    I have so many scripts in my hard-disk ...
    so I just have to post them 1 at a time ... everyday ! -> keep my fan base happy
  11. Upvote
    AnnieRuru got a reaction from Tokeiburu in Suddenly missed AnnieRuru   
    just wondering ... how many people actually miss me ? XD
  12. Upvote
    AnnieRuru got a reaction from karazu in @market clone   
    I just noticed somebody in rathena actually start converting my patch into rathena ... namely Napster
    well kinda a competition then, as rathena does have more user base than hercules
     
    version 1.3 released
    plugin or patch
    -- change back all status-damage into status-kill for readability
    -- fix a bug that when a server enabled show_mob_info, the clone shouldn't has listed the hp nor level (credit: Napster)
    -- fix a bug that player shouldn't create a market clone while chatting or vending
    -- and for the patch, move all configuration into battle folder, makes more sense in this way (credit: Napster)
    -- add zeny requirement
  13. Upvote
    AnnieRuru got a reaction from Like it~* in King of Emperium Hill   
    I think its better to have a release topic for this instead of me update the script across separate topics
     
    Download: Hercules 1.3
    Script
    Plugin for Hercules
    Download: rAthena 1.2
    Script.
    Patch for rAthena
     
    what this event do ? ( huh ? so popular script and I still need to explain ? )
    1. make a guild
    2. join this event
    3. whack the emperium
    4. defends it until times up
    hahaha ....
     
     
    How to configure the time:
    L_start: <-- the label to start the event
    change OnClock2000: into OnSat2000: to start this event on Saturday 8pm
    L_end: <-- the label to end the event
    change OnClock2030: into OnSat2030: to end this event on Saturday 8:30pm,
    effectively makes this event runs 30 minutes
     
     
    Frequently Asked Questions:
    Question : why the Guild member can hit their own Emperium ?
    Answer : because you didn't patch and recompile
    Question: there is an exploit in this event, guild master can use Emergency Recall to abuse the prize
    Answer : I already fixed it in this topic, now the prize reward will be given after the winner warp outside the map
     
     
    original topic from eathena forum
    http://www.eathena.ws/board/index.php?showtopic=174222
    yeah ... I have been fixing this script since 7 years ago
     
     
  14. Upvote
    AnnieRuru got a reaction from Yugosh in change to item reward hunting mission   
    #Mission_Points
    search for it and delete every single line
    and also remove the npc shop below
  15. Upvote
    AnnieRuru got a reaction from BrothersKeeper in [Custom battlegrounds] is it possible?   
    until developer fix this bug =/
    http://herc.ws/board/tracker/issue-7894-battlegrounds-emblem-and-guardian/
  16. Upvote
    AnnieRuru got a reaction from Helena in How to do this? Don't allow @load to this town for non-castle owners   
    that was the least complex method in writing an instance script o.o 
    anyway
    prontera,158,180,0 script Guild Town 123,{ if ( !getcharid(2) ) { mes "need a guild"; close; } if ( agitcheck() || agitcheck2() ) { mes "woe in progress"; close; } if ( getcastledata( "prtg_cas01", 1 ) != getcharid(2) && getcastledata( "payg_cas01", 1 ) != getcharid(2) && getcastledata( "aldeg_cas04", 1 ) != getcharid(2) && getcastledata( "gefg_cas04", 1 ) != getcharid(2) ) { mes "you need to hold a castle to gain access to guild town map"; close; } warp "guild_vs2",49,49; end;OnAgitStart: mapwarp "guild_vs2", "prontera",150,180; end;}guild_vs2 mapflag nowarptoguild_vs2 mapflag nomemoguild_vs2 mapflag nosave SavePoint
  17. Like
    AnnieRuru got a reaction from evilpuncker in get zeny amount from new bank system   
    try this plugin
    http://upaste.me/7ba18d
     
    tested with
    prontera,155,186,7 script kldjhfksdjhf 100,{ dispbottom Zeny +" "+ bank_vault();}honestly ... developer should added a constant for this variable ...
  18. Upvote
    AnnieRuru got a reaction from kyeme in @market clone   
    people aren't saying it is a bug, so leave it then xD
  19. Upvote
    AnnieRuru got a reaction from Helena in How to do this? Don't allow @load to this town for non-castle owners   
    GmOcean gonna drool over this
    prontera,158,180,0 script Guild Town 123,{ if ( has_instance2( "guild_vs2" ) >= 0 ) { warp has_instance( "guild_vs2" ), 0,0; end; } if ( !getcharid(2) ) { mes "need a guild"; close; } if ( agitcheck() || agitcheck2() ) { mes "woe in progress"; close; } if ( getcastledata( "prtg_cas01", 1 ) != getcharid(2) && getcastledata( "payg_cas01", 1 ) != getcharid(2) && getcastledata( "aldeg_cas04", 1 ) != getcharid(2) && getcastledata( "gefg_cas04", 1 ) != getcharid(2) ) { mes "you need to hold a castle to gain access to guild town map"; close; } if ( ( .@ins = instance_create( "Guild Town", getcharid(2), IOT_GUILD ) ) < 0 ) { mes "error : "+ .@ins; close; } if ( instance_attachmap( "guild_vs2", .@ins, 1, getcharid(2)+"gtown" ) == "" ) { mes "error : 5"; instance_destroy .@ins; close; } instance_set_timeout 0, 0, .@ins; instance_init .@ins; instance_attach .@ins; .guild_town_id[.count] = .@ins; .count++; warp has_instance( "guild_vs2" ), 0,0; end;OnAgitStart: for ( .@i = 0; .@i < .count; .@i++ ) instance_destroy .guild_town_id[.@i]; deletearray .guild_town_id; .count = 0; end;}guild_vs2 mapflag nowarptoguild_vs2 mapflag nomemoguild_vs2 mapflag nosave SavePointchange guild_vs2 into guild_town
  20. Upvote
    AnnieRuru got a reaction from GmOcean in how to make patch file   
    I usually ignore this kind of post ... meh .................
     
    http://herc.ws/board/topic/152-obtaining-hercules/
     
    I wonder how are you exactly download the hercules ?
    if using tortoisegit, just right click -> Git Diff
    then select all file to patch, then save the name of the file
     
    you won't go anywhere without a tortoisegit, including making a pull request
  21. Upvote
    AnnieRuru got a reaction from luis.seifert in [Help] Battleground script   
    if you modify like jabote did, that will affect any other battleground script, which possibly caused them bug
     
    I won't touch the source if I were you
     
    the practical way to do this, is make them wait inside a room
    http://rathena.org/board/topic/97602-annierurus-bg-emp-edit-request/?p=267413
    I've seen 2 battleground script using this method
  22. Upvote
    AnnieRuru got a reaction from Only4fun in [Help] Battleground script   
    if you modify like jabote did, that will affect any other battleground script, which possibly caused them bug
     
    I won't touch the source if I were you
     
    the practical way to do this, is make them wait inside a room
    http://rathena.org/board/topic/97602-annierurus-bg-emp-edit-request/?p=267413
    I've seen 2 battleground script using this method
  23. Upvote
    AnnieRuru got a reaction from nomade in @market clone   
    Download: 1.9
    plugin
     
    Create a market clone, to leave a message for other players
    while the player can go hunting/questing/events
    @market "<Title>" "<Message>" <Color> create a market clone with a chat room titled -> "<Title>"
    when players tries to join the chat room, it refuse the joining, but instead leave a message -> "<Message>"
    with 1.4 update,
    player can now choose their own favorite color for their AFK message
    the <Color> field is optional
    I was struggling to use array for the color list ...
    but in the end, I guess the simplicity is the best
    so you guys can guess how to add in your own list easily
     
    @marketkill kill the market clone without logging off
     
    when a GM do @killmonster @killmonster2, or *killmonster *kilmonsterall script command will not remove the clone
    but @reloadscript, however, will remove it
     
    feels like I just copy paste from the description
    whatever ...
     
    Credit : remember to rep Dastgir's topic because I mostly copy his codes
     
     
  24. Upvote
    AnnieRuru got a reaction from GmOcean in NPC Buy/Sell   
    noif you using clif_selllist function
    then the packet header is 0xc7
    this will open the sell item window
     
    WFIFOW(fd,4+c*10)=i+2;
    this one tells the client to list out the item from your inventory of position i
    dunno what's +2 means though
     
    try play around with it
  25. Upvote
    AnnieRuru got a reaction from GmOcean in NPC Buy/Sell   
    if you look at BUILDIN(getitem)pc->additem(sd, &it, get_count, LOG_TYPE_SCRIPT)everything is manipulate in &itwhere it comes from
    struct item it;and struct item comes from mmo.hstruct item { int id; short nameid; short amount; unsigned int equip; // Location(s) where item is equipped (using enum equip_pos for bitmasking). char identify; char refine; char attribute; short card[MAX_SLOTS]; unsigned int expire_time; char favorite; unsigned char bound; uint64 unique_id;};so you always manipulate the data withit.identify = 1;
    it.card[0] = 4001;
    and so on
     
    http://www.tutorialspoint.com/cprogramming/c_structures.htm
    .
    .
    http://herc.ws/board/topic/7040-item-item-deny/?p=42843need 3 commands
    Sql->Query
    Sql->NextRow
    Sql->GetData
×
×
  • Create New...

Important Information

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