Jump to content

AnnieRuru

Script Developers
  • Content Count

    1677
  • Joined

  • Last visited

  • Days Won

    245

Reputation Activity

  1. Upvote
    AnnieRuru got a reaction from bachir in I need help About kagerou&oboro   
    woe maps should be under "GvG2"
    { name: "GvG2" inherit: ( "GvG" ) /* will import all gvg has */ disabled_skills: { TK_HIGHJUMP: "PLAYER" SA_ABRACADABRA: "PLAYER" }},
  2. Upvote
    AnnieRuru got a reaction from Legend in *setmobdata & *getmobdata   
    need to summon a hp 10,000,000 poring ?
    or you want to make emperium move ?
    yes, this plugin allows you to customize your monsters attribute
     
    Download : 1.2
    patch <-- rathena fellows, you are welcome to plagiarize this command, since your setunitdata can't change stats LOL
     
    I experienced in the past that, sometimes when my internet connection reset, my post will looks like rubbish
    this time I will make multiple posts to reduce the risk of my explanation so they wont get edited
     
     
     
  3. Upvote
    AnnieRuru got a reaction from Aly in *setmobdata & *getmobdata   
    need to summon a hp 10,000,000 poring ?
    or you want to make emperium move ?
    yes, this plugin allows you to customize your monsters attribute
     
    Download : 1.2
    patch <-- rathena fellows, you are welcome to plagiarize this command, since your setunitdata can't change stats LOL
     
    I experienced in the past that, sometimes when my internet connection reset, my post will looks like rubbish
    this time I will make multiple posts to reduce the risk of my explanation so they wont get edited
     
     
     
  4. Upvote
    AnnieRuru reacted to Garr in R> Block Class Script   
    As large as of a strain it is on server, I'd advice to use loadmapevent better here, just to avoid recall thing. If you don't care for recall Annie's suggestion is way better.
     
    - script deter_kagero_oboro -1,{end;OnInit: setarray .@WoEmaps[0],"prtg_cas01","aldeg_cas01"; .comp = ";" + implode(.@WoEmaps,";") + ";";end;OnPCLoadMapEvent: if( !compare(.comp,";" + strcharinfo(PC_MAP) + ";") ) end; if( Class == Job_Kagerou || Class == Job_Oboro ) { dispbottom "You can't join woe on Kagerou/Oboro."; warp "SavePoint",0,0; close; } end;}
  5. Upvote
    AnnieRuru got a reaction from minx123 in [REQ] top leader custom mvp hunter.   
    seriously ... HOW OLD IS YOUR EMULATOR !?
     
    http://upaste.me/1b11218565c0a4a4b
     
    I think your host is irresponsible
    your server is not using latest hercules
  6. Upvote
    AnnieRuru got a reaction from evilpuncker in npc newbie can choose 2 option   
    honestly ... why don't you just follow those smartphone games stuffs ...
    they give freebies based on account, and those are unable to trade
     
    either you use *getitembound, or *rentitem
  7. Upvote
    AnnieRuru got a reaction from evilpuncker in On Death Screams   
    - script DeathS FAKE_NPC,{OnPCDieEvent: .@sex$ = (Sex)? "man" : "girl"; .@number = (Sex)? rand(1,5) : rand(1,4); soundeffect "voice_"+ .@sex$ +( .@number == 1 ? "" : .@number )+".wav", 0;// soundeffectall "voice_"+ .@sex$ +( .@number == 1 ? "" : .@number )+".wav", 0; end;} why need a function ?
  8. Upvote
    AnnieRuru got a reaction from Aly in [Queue] 2 new commands   
    confirming this bug
    http://upaste.me/adea21853ecefe7a9
     
    when player A joins, queue list as
    1. 2000000when player B joins, queue list as1. 20000002. 2000001and now remove player A, queue list as1. -12. 2000001this is definitely not rightthe queuesize is display correctly as only 1 person, but the queueiterator still having 2 entry
     
    ima thinking of know how to fix this bug
     
    EDIT:
    found 4 bugs in the process XD
    Fix *queueremove should return true if player is not in the queue
    Fix *queueiterator return same amount of *queuesize upon *queueremove
    Fix *queuedel doesn't remove player's side queue
    Fix @QMapChangeTo$ not usable when HQO_OnMapChange triggered
  9. Upvote
    AnnieRuru reacted to Mystery in [Forum Addition] Paid Downloads Section   
    Indeed with what @@Dastgir mentioned. If we opened up IP. Paid Downloads, Hercules is the middleman within the payments. If you look at rAthena, if anything happens with the transactions etc., rAthena is the middleman and may be accountable for things. They need to issue payouts etc. which here in Hercules... we really don't need to be focusing on that nor want to be involved with any disputes that may arise.
     
    This way, if you open a Paid Service thread, it is YOU and the CONSUMERS who are accountable and Hercules has nothing to do with it. This way, we are not involved and don't take any heat for things that come up (rephrase much? ).
  10. Upvote
    AnnieRuru got a reaction from Tsuuu in Run Or Die event ( aka. Poring Bomb )   
    ok another script that should deserve in the script release section
    ... after having countless fix in script request ...
     
    Download: 2.3a
    script
    Make sure your hercules server is compile after 2015-11-15
     
    ok what this event do ...
    Run ! or you gonna DIE !
    this event will keep spawning Bomb Poring and BOOM and KABOOM every player they came across
    until the last player who are still alive on the map will be declare winner
     
    this should be a simple script ...
    hope you guys know how to edit by your own ...
     
     
     
     
    original topic in eathena
    it was just a simple script request ... however it went popular for some reason
     
     
     
     
  11. Upvote
    AnnieRuru got a reaction from MikZ in QUEST SHOP NPC   
    Hello ? KISS ... ok ?
    Keep It Short & Simple ...
     
    http://upaste.me/6890217783a73aa17
     
     
     
     
  12. Upvote
    AnnieRuru got a reaction from mrlongshen in All monster drops specific item with blacklist mobs   
    simple script
    - script kdjsfhksdjfh FAKE_NPC,{OnInit: setarray .itemid, Poring_Coin, TCG_Card; setarray .rate, 10000, 10000; .blacklist$ = "1062,1088,1183,1186,1200,1212,1220,1221,1234,1235," + "1244,1245,1250,1268,1290,1293,1294,1296,1298,1299," + "1300,1301,1303,1304,1305,1306,1308,1309,1311,1313," + "1515,1588,1618,1676,1677,1678,1679,1796,1797,1974," + "1975,1976,1977,1978,1979"; .size = getarraysize(.itemid); freeloop true; for ( .@id = 1001; .@id <= 5000; .@id++ ) // 5000 is MAX_MOB_DB from srcmapmob.h if ( strmobinfo( 3, .@id ) && !compare( ","+ .blacklist$ +",", ","+ .@id +"," ) ) for ( .@i = 0; .@i < .size; .@i++ ) addmonsterdrop( .@id, .itemid[.@i], .rate[.@i] ); end;}..
    .
    @@Winterfox
    there is no need to use query_sql for this operation
    just a *compare command will do
     
     
    EDITING for dynamic item ID and random rate
    done
  13. Upvote
    AnnieRuru reacted to PcPocket in [Queue] 2 new commands   
    Yeah.. the system I'm working is a BG system too.

    I use queueremove on everybody on the queue when it is full enough to start the match.
    And queueopt to call a function that will remove the player from the queue ( on the 3 options, move from map, die or logout ).

    After I player 2 modules, the queue gets to -1. I will do some tests to figure out whats the reason. If I don't find out, I will patch in the source to never get it below 0 haha.
     
    By the way, queue check command:

     
    bool script_hqueue_check(int idx, int var) { if( idx < 0 || idx >= script->hqs || script->hq[idx].size == -1 ) { ShowWarning("script_hqueue_add: unknown queue id %dn",idx); return false; } else { int i; for (i = 0; i < script->hq[idx].size; i++) { if (script->hq[idx].item[i] == var) { return true; } } return false; }}BUILDIN(queuecheck) { int idx = script_getnum(st, 2); int var = script_getnum(st, 3); script_pushint(st,script->queue_check(idx,var)?1:0); return true;} They may want to invert the 'true' and 'false' returns, as all queue commands return 0 upon success ( why? I don't know )
    And of course, the rest.
     
    BUILDIN_DEF(queuecheck,"ii"), script->queue_check = script_hqueue_check; script.h
     
    bool (*queue_check) (int idx, int var); @Edit

    I found out the piece of code causing it.
    function Players2BG { .@queue01 = queueiterator(getarg(0)); for (.@elem = qiget(.@queue01); qicheck(.@queue01); .@elem = qiget(.@queue01)) { announce "Adding player"+.@elem+" from queue"+getarg(0)+" to BG Team "+getarg(1),8; player2bg(getarg(1),.@elem,$@BG_Status); queueremove(getarg(0),.@elem); // Removes from the queue } return;}  Then, the second time I go to the battleground ( the first one works fine ):
    (
    ( the announce is in portuguese in the picture )
    getarg(0) = Queue ID
    getarg(1) = BG Team ID

    I'm almost sure that I'm missing a qiclear in the end of the function, will test it now, must solve it.
    But.. I still think that the number of elements in the queue shouldn't be able to be lower than 0.

    @edit2
    Yeah.. qiclear didn't solve the problem.
    I tested something new, I put 'queueremove($bgTeamQueue01,-1);' in the top of npc script, so everytime I click on it, it attempts to remove a non-existant value from the queue.

    Result: After I played one match, every queueremove, lowered the queuecount by 1. So if I click 10 times, npc show that queue has -10 members..
    This just works after I play once ( so Players2BG gets called ).

    Trying to figure out why.

    @edit3
    Yeah, there is a bug in queueremove command, trying to fix, post here soon.

    @edit4
    Aparently, queueremove isn't actually removing a value from the queue, but changing it value to -1?
  14. Upvote
    AnnieRuru reacted to Anisotropic Defixation in Increase monster attack & skill damage rate on map   
    Monster's MATK is based mostly on their ATK2.
     
     
    #define MOB_MATK1(mobdata)( ((mobdata)->lv + (mobdata)->status.int_) + (mobdata)->status.rhw.atk2 * 7 / 10 )#define MOB_MATK2(mobdata)( ((mobdata)->lv + (mobdata)->status.int_) + (mobdata)->status.rhw.atk2 * 13 / 10 )
  15. Upvote
    AnnieRuru got a reaction from minx123 in custom warper help me fix   
    you didn't indent your script properly
    invek,134,159,6 script Custom Mall 830,{shop: warp "sky_quest" ,45,52;OnInit: waitingroom "Custom Mall",0; end;}when the player click on the npc, the script execute the warp command, and also execute the waitingroom commandthat's why the server spam error about waitingroom already created
     
    to solve this problem, simple add an end; command before the OnInit label
    like this
    invek,134,159,6 script Custom Mall 830,{shop: warp "sky_quest" ,45,52; end; // <-- ADD THISOnInit: waitingroom "Custom Mall",0; end;}..
    though, I don't understand why you add shop: label in the 1st place
  16. Upvote
    AnnieRuru got a reaction from Lord Ganja in How do I get of an error like this? npc_event: event not found   
    @@Lord Ganja
    that method was old, you probably got this script from eathena forum
    EDIT: found it -> https://www.eathena.ws/board/index.php?s=&showtopic=177722&view=findpost&p=1001559
    at that time, *monster and *clone command doesn't return the GID
     
    now that these command returns the GID of the monster, don't have to do that anymore
     
    - script clonecheck FAKE_NPC,{OnInit: setitemscript Bow, "{ getmapxy .@map$, .@x, .@y, 0; @bow_clone = clone( .@map$,.@x,.@y,"clonecheck::OnDead", getcharid(0), getcharid(0), 0x8D, 1, 40 ); }", 1; setitemscript Bow, "{ unitkill @bow_clone; @bow_clone = 0; }", 2;OnDead: end;}.btw move to script support
     
    EDIT : forgot to set @bow_clone back to 0 ... again ... need to fix this bad habit
  17. Upvote
    AnnieRuru got a reaction from classy5 in Possible?   
    simple script
    - script kjsbhfkjsf FAKE_NPC,{OnInit: setitemscript Knife, "{ atcommand "@fakename GODLIKE"; announce strcharinfo(0) +" is GODLIKE !!!", bc_map; }", 1; setitemscript Knife, "{ atcommand "@fakename"; }", 2; end;}
  18. Upvote
    AnnieRuru got a reaction from Huitzilopotchli in Add *pcblockattack *pcblockskill *pcblockchat *pcimmune script commands   
    current format
    http://upaste.me/c7ed2182125d6a31b

    already tested with
    - script sdfhdskfj FAKE_NPC,{OnInit: bindatcmd "@pcblock", strnpcinfo(0)+"::Onaaa"; setarray .name$, "BLOCK_MOVE", "BLOCK_ATTACK", "BLOCK_SKILL", "BLOCK_USEITEM", "BLOCK_CHAT", "BLOCK_IMMUNE", "BLOCK_SITSTAND"; setarray .flag$, " [^ff0000OFF^000000]", "[^0000ffON^000000]"; end;Onaaa: for ( .@i = 0; .@i < 7; .@i++ ) .@menu$ = .@menu$ + .name$[.@i] + .flag$[ !!( checkpcblock() & (1 << .@i) ) ] +":"; .@s = select( .@menu$ ) -1; pcblock 1 << .@s, !( checkpcblock() & (1 << .@s) ); close;} .

    BLOCK_COMMAND !!
    omg how can I miss this one, need this one asap

    the rest are redundant

    BLOCK_ATCOMMAND
    - repeated ???

    BLOCK_DROP
    - already has nodrop mapflag

    BLOCK_GSTORAGE
    - I seriously think this should belongs to nostorage mapflag
    ima thinking of making one

    BLOCK_NOIDEAWHATELSETOPOSTHERE
    hmm ... this long name makes me google 'what is the longest identifier in c++'
    answer is 2048 -> https://msdn.microsoft.com/en-us/library/565w213d.aspx
    .
    .
    I actually thought about this
    but the blockedmove and monster_ignore is quite everywhere in the source ... don't feel like touching them
    ima thinking of changing checkpcblock into getpcblock
     


    after 2nd thought, I change them 1st then see how Haru react to it
  19. Upvote
    AnnieRuru got a reaction from Alexandria in Add *pcblockattack *pcblockskill *pcblockchat *pcimmune script commands   
    yesterday @@Aeromesi asked in IRC about is there a script commands to prevent the player to attack
    makes me remember I did something similar before
    https://rathena.org/board/topic/91115-event-watcher/?p=238849
     
    yes, we really need to have these script commands
     
    *pcblockmove has already existed for ages, which meant for block players from moving
    but we are missing out commands to block players from attacking and chat
     
    .
    .
     
    I made this patch
    http://upaste.me/870121811d11a19ff
    it looks clean
     
    I think this should go inside hercules as default
     
     
    EDIT: tested with
    prontera,154,185,5 script can attack 1_F_MARIA,{ pcblockattack getcharid(3), 0;}prontera,157,185,5 script no attack 1_F_MARIA,{ pcblockattack getcharid(3), 1;}prontera,154,181,5 script can chat 1_F_MARIA,{ pcblockchat getcharid(3), 0;}prontera,157,181,5 script no chat 1_F_MARIA,{ pcblockchat getcharid(3), 1;}prontera,154,177,5 script vulnerable 1_F_MARIA,{ pcimmune getcharid(3), 0;}prontera,157,177,5 script immune 1_F_MARIA,{ pcimmune getcharid(3), 1;}prontera,154,173,5 script can skill 1_F_MARIA,{ pcblockskill getcharid(3), 0;}prontera,157,173,5 script no skill 1_F_MARIA,{ pcblockskill getcharid(3), 1;}.EDIT2:
    *pcimmune is equivalent to @monsterignore
    I just don't like using *atcommand in scripts
  20. Upvote
    AnnieRuru reacted to Emistry in Add *pcblockattack *pcblockskill *pcblockchat *pcimmune script commands   
    if you want ...
    BLOCK_SKILL BLOCK_COMMAND BLOCK_DROP BLOCK_ATCOMMAND BLOCK_GSTORAGE BLOCK_NOIDEAWHATELSETOPOSTHERE

    i just random post..O_O
     
    about this part
    + unsigned int blockedattack :1;+ unsigned int blockedskill :1;+ unsigned int blockedchat :1; how about just make use only one variable and store all the enum value since it's bitmask ??
    with this, we can easily create another script command that get all the blocked state.
     
    Example :
    if ( getpcblock() & BLOCK_MOVE ) { mes "your movement is still blocked.";}
  21. Upvote
    AnnieRuru reacted to Gerz in Add *pcblockattack *pcblockskill *pcblockchat *pcimmune script commands   
    @@AnnieRuru how about this?
     
    /** * pcblock <account_id>, <value>, <type> * <value>: 1 = on, 0 = off * <type> can be: * 0 = block move * 1 = block attack * 2 = block skill * 3 = block chat * 4 = immune attack **/BUILDIN(pcblock) { int id, flag, type; TBL_PC *sd = NULL; id = script_getnum(st,2); flag = script_getnum(st,3); type = script_getnum(st,4); if( id ) sd = map->id2sd(id); else sd = script->rid2sd(st); switch( type ) { case 0: sd->state.blockedmove = flag > 0; break; case 1: sd->state.blockedattack = flag > 0; break; case 2: sd->state.blockedskill = flag > 0; break; case 3: sd->state.blockedchat = flag > 0; break; case 4: sd->state.monster_ignore = flag > 0; break; } return true;} BUILDIN_DEF(pcblock,"iii"),
  22. Upvote
    AnnieRuru got a reaction from evilpuncker in Add *pcblockattack *pcblockskill *pcblockchat *pcimmune script commands   
    yesterday @@Aeromesi asked in IRC about is there a script commands to prevent the player to attack
    makes me remember I did something similar before
    https://rathena.org/board/topic/91115-event-watcher/?p=238849
     
    yes, we really need to have these script commands
     
    *pcblockmove has already existed for ages, which meant for block players from moving
    but we are missing out commands to block players from attacking and chat
     
    .
    .
     
    I made this patch
    http://upaste.me/870121811d11a19ff
    it looks clean
     
    I think this should go inside hercules as default
     
     
    EDIT: tested with
    prontera,154,185,5 script can attack 1_F_MARIA,{ pcblockattack getcharid(3), 0;}prontera,157,185,5 script no attack 1_F_MARIA,{ pcblockattack getcharid(3), 1;}prontera,154,181,5 script can chat 1_F_MARIA,{ pcblockchat getcharid(3), 0;}prontera,157,181,5 script no chat 1_F_MARIA,{ pcblockchat getcharid(3), 1;}prontera,154,177,5 script vulnerable 1_F_MARIA,{ pcimmune getcharid(3), 0;}prontera,157,177,5 script immune 1_F_MARIA,{ pcimmune getcharid(3), 1;}prontera,154,173,5 script can skill 1_F_MARIA,{ pcblockskill getcharid(3), 0;}prontera,157,173,5 script no skill 1_F_MARIA,{ pcblockskill getcharid(3), 1;}.EDIT2:
    *pcimmune is equivalent to @monsterignore
    I just don't like using *atcommand in scripts
  23. Upvote
    AnnieRuru reacted to fxfreitas in how to make this inventory (Alt+E) shorter ?   
    rsrsrs, add one line up of this and put Fav# because the last tab is favourite itens tab *-* like this:
    fav#Drop Lock: On/Off#
  24. Upvote
    AnnieRuru got a reaction from Easycore in Undisguise when player die   
    hmm ...
    #include "common/hercules.h"#include <stdio.h>#include <string.h>#include <stdlib.h>#include "map/pc.h"#include "common/HPMDataCheck.h"HPExport struct hplugin_info pinfo = { "deadnodisguise", // 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)};int pc_disguise_pre( struct map_session_data *sd, int class_ ) { // disable player from disguise if ( pc_isdead(sd) ) hookStop(); return 0;}int pc_dead_pre( struct map_session_data *sd, struct block_list *src ) { // undisguise when player die if ( sd->disguise != -1 ) pc->disguise(sd, -1); return 0;}HPExport void plugin_init (void) { addHookPre( "pc->disguise", pc_disguise_pre ); addHookPre( "pc->dead", pc_dead_pre );}sry that I no longer writing source, only plugins 
    EDIT: sry there are 2 checks
  25. Upvote
    AnnieRuru reacted to Litro in how to make this inventory (Alt+E) shorter ?   
    it seem you got uncompatible msgstringtable maam, you can get it from translation github either from here or this
     
    and if the inventory still have long window alternatively you can edit the msgstringtable for inventory....
    Line: 1466 = Usable ItemsLine: 1472 = Etc. ItemsLine: 2051 = EquipmentLine: 2052 = Personal/Favourite Tab
×
×
  • Create New...

Important Information

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