Jump to content

evilpuncker

Community Contributors
  • Content Count

    2178
  • Joined

  • Last visited

  • Days Won

    66

Reputation Activity

  1. Upvote
    evilpuncker reacted to Rytech in New Improved 3RD JOB Sprites.   
    Does this answer your question???
     
    Male and Female Guillotine Cross standing while wearing the alternate outfit.

     
    Male and Female Guillotine Cross in battle pose.

     
    2 female Guillotine Cross's sitting. One with the alternate outfit and the other with the original.

     
  2. Upvote
    evilpuncker reacted to hemagx in Odin Server side manner   
    The new version is alive
     
    ~ Changelog
    [*] Unknow date - First Working Version v0.1 [*]2015/12/12 v0.2 - Update to work with latest Hercules, optimized a bit for faster plugin, officially release lite version.

  3. Upvote
    evilpuncker reacted to AnnieRuru in @sameip command for rathena   
    script version ... should be faster than GMOcean's version because I only list online players, but his query will list all login table
    search all online players and only list if they have 2 same ip or above
    .
    - script kjdshfksfj FAKE_NPC,{OnInit: bindatcmd "sameip", strnpcinfo(0)+"::Onaaa"; end;Onaaa: freeloop true; .@nb = query_sql( "select `char`.name, char_id, last_ip from login left join `char` on login.account_id = `char`.account_id where online = 1", .@name$, .@cid, .@ip$ ); for ( .@i = 0; .@i < .@nb; ++.@i ) { for ( .@j = 0; .@j < .@ip_list; ++.@j ) if ( .@b_ip$[.@j] == .@ip$[.@i] ) break; if ( .@j == .@ip_list ) { .@b_ip$[.@j] = .@ip$[.@i]; ++.@ip_list; } setd ".@b_ip"+ .@j +"_name$["+ .@b_ip_size[.@j] +"]", .@name$[.@i]; setd ".@b_ip"+ .@j +"_cid$["+ .@b_ip_size[.@j] +"]", .@cid[.@i] +""; ++.@b_ip_size[.@j]; } dispbottom "===== SAME IP Searching ====="; for ( .@i = 0; .@i < .@ip_list; ++.@i ) { if ( .@b_ip_size[.@i] > 1 ) { dispbottom " == The IP ["+ .@b_ip$[.@i] +"] has "+ .@b_ip_size[.@i] +" players."; for ( .@j = 0; .@j < .@b_ip_size[.@i]; ++.@j ) { getmapxy .@map$, .@x, .@y, 0, getd( ".@b_ip"+ .@i +"_name$["+ .@j +"]"); dispbottom " = "+( .@j +1 )+". ("+ getd( ".@b_ip"+ .@i +"_cid$["+ .@j +"]" ) +") "+ getd( ".@b_ip"+ .@i +"_name$["+ .@j +"]") +" -> "+ .@map$ +" "+ .@x +" "+ .@y; } ++.@result; } } dispbottom ">>> "+ .@result +" results found."; end;}.now tackle the source version
    in theory, source code should be faster than script
  4. Upvote
    evilpuncker reacted to AnnieRuru in Card Collector   
    this script gets in the way when I editing the wiki, so I have to dispose here
    ops, I mean, release here
     
    Download:
    script
     
    simple script, the npc announce the name of the card it wants
    if the player having this card, can give to this npc for a reward
     
    found this idea from rathena script request
  5. Upvote
    evilpuncker reacted to AnnieRuru in @partybuff / @spb   
    yup, currently look like this now
    #include "common/hercules.h" #include <stdio.h> #include <string.h> #include <stdlib.h> #include "map/pc.h" #include "map/clif.h" #include "map/party.h" #include "common/nullpo.h" #include "common/socket.h" #include "common/memmgr.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 = {     "test123",    // Plugin name     SERVER_TYPE_MAP,// Which server types this plugin works with?     "0.0",            // Plugin version     HPM_VERSION,    // HPM Version (don't change, macro is automatically updated) }; struct player_data {     int buff; }; int status_change_start_post( int retVal, struct block_list *src, struct block_list *bl, enum sc_type *type, int *rate, int *val1, int *val2, int *val3, int *val4, int *tick, int *flag) {     if ( bl->type == BL_PC && retVal > 0 ) {         TBL_PC *sd = BL_CAST(BL_PC, bl);         struct party_data *p;         if ( p = party->search(sd->status.party_id )) {             struct player_data *ssd = getFromMSD( sd, 0 );             int before_buff = ssd->buff;             if ( *type == SC_BLESSING )                 ssd->buff |= 0x1;             if ( *type == SC_INC_AGI )                 ssd->buff |= 0x2;             if ( *type == SC_PROTECTWEAPON || *type == SC_PROTECTSHIELD || *type == SC_PROTECTARMOR || *type == SC_PROTECTHELM )                 if ( sd->sc.data[SC_PROTECTWEAPON] && sd->sc.data[SC_PROTECTSHIELD] && sd->sc.data[SC_PROTECTARMOR] && sd->sc.data[SC_PROTECTHELM] )                     ssd->buff |= 0x4;             if ( *type == SC_SOULLINK )                 ssd->buff |= 0x8;             if ( *type == SC_DEVOTION )                 ssd->buff |= 0x10;             if ( before_buff != ssd->buff ) // only send the packet if update the status is newly apply, no need to resend if just renew the status                 clif->party_info( p, NULL );         }     }     return retVal; } int status_change_end_post( int retVal, struct block_list *bl, enum sc_type *type, int *tid, const char *file, int *line ) {     if ( bl->type == BL_PC && retVal > 0 ) {         TBL_PC *sd = BL_CAST(BL_PC, bl);         struct party_data *p;         if ( sd->state.active == 1 ) { // fix map-server crash when player logout         if (( p = party->search(sd->status.party_id ))) {             struct player_data *ssd = getFromMSD( sd, 0 );                 int before_buff = ssd->buff;                 if ( *type == SC_BLESSING )                     ssd->buff &= ~0x1;                 if ( *type == SC_INC_AGI )                     ssd->buff &= ~0x2;                 if ( *type == SC_PROTECTWEAPON || *type == SC_PROTECTSHIELD || *type == SC_PROTECTARMOR || *type == SC_PROTECTHELM )                     if ( sd->sc.data[SC_PROTECTWEAPON] && sd->sc.data[SC_PROTECTSHIELD] && sd->sc.data[SC_PROTECTARMOR] && sd->sc.data[SC_PROTECTHELM] )                         ssd->buff &= ~0x4;                 if ( *type == SC_SOULLINK )                     ssd->buff &= ~0x8;                 if ( *type == SC_DEVOTION )                     ssd->buff &= ~0x10;                 if ( before_buff != ssd->buff ) // only send the packet if update the status is newly apply, no need to resend if just renew the status                     clif->party_info( p, NULL );             }         }     }     return retVal; } void clif_party_info_overload( struct party_data* p, struct map_session_data *sd ) {     unsigned char buf[2+2+NAME_LENGTH+(4+NAME_LENGTH+MAP_NAME_LENGTH_EXT+1+1)*MAX_PARTY];     struct map_session_data* party_sd = NULL;     int i, c;     nullpo_retv(p);     WBUFW(buf,0) = 0xfb;     memcpy( WBUFP(buf,4), p->party.name, NAME_LENGTH );     for ( i = 0, c = 0; i < MAX_PARTY; i++ ) {         struct party_member* m = &p->party.member[i];         if(!m->account_id) continue;         if(party_sd == NULL) party_sd = p->data[i].sd;         WBUFL(buf,28+c*46) = m->account_id;         if ( m->online && p->data[i].sd != NULL ) {             struct player_data *ssd = getFromMSD( p->data[i].sd, 0 );             char temp[NAME_LENGTH];             safesnprintf( temp, NAME_LENGTH, "[%s%s%s%s%s]%s",                                                             ( ssd->buff & 0x1 )? "B" : "_",                                                             ( ssd->buff & 0x2 )? "A" : "_",                                                             ( ssd->buff & 0x4 )? "F" : "_",                                                             ( ssd->buff & 0x8 )? "S" : "_",                                                             ( ssd->buff & 0x10 )? "+" : "_",                                                             m->name );             memcpy(WBUFP(buf,28+c*46+4), temp, NAME_LENGTH);         } else             memcpy(WBUFP(buf,28+c*46+4), m->name, NAME_LENGTH);         mapindex->getmapname_ext(mapindex_id2name(m->map), (char*)WBUFP(buf,28+c*46+28));         WBUFB(buf,28+c*46+44) = (m->leader) ? 0 : 1;         WBUFB(buf,28+c*46+45) = (m->online) ? 0 : 1;         c++;     }     WBUFW(buf,2) = 28+c*46;     if (sd)         clif->send(buf, WBUFW(buf,2), &sd->bl, SELF);     else if (party_sd)         clif->send(buf, WBUFW(buf,2), &party_sd->bl, PARTY);     return; } bool pc_authok_pre( struct map_session_data *sd, int *login_id2, time_t *expiration_time, int *group_id, struct mmo_charstatus *st, bool *changing_mapservers ) {     struct player_data *ssd;     CREATE( ssd, struct player_data, true );     ssd->buff = 0;     addToMSD( sd, ssd, 0, true );     return 0; } int map_quit_post( int retVal, struct map_session_data *sd ) {     struct player_data *ssd = getFromMSD( sd, 0 );     removeFromMSD( sd, 0 );     return retVal; } HPExport void plugin_init (void) {    addHookPre( "pc->authok", pc_authok_pre );     addHookPost( "map->quit", map_quit_post );     clif->party_info = &clif_party_info_overload;     addHookPost( "status->change_start", status_change_start_post );     addHookPost( "status->change_end_", status_change_end_post ); } there is a bug, when the player JUST login for the 1st time in that party ( party just loaded )
    your name will appear twice in the party window

    but will disappear when apply a buff ... or another party member login

    and, when apply a buff, it really does show the [b____] for the party member name


    I guess, have to do something like @showbuff atcommand, to make this bug disappear
    it also has the advantage to show it or not to show it
    ... and this is harder to do than I thought
    try continue tomorrow, I have to sleep now =.=
  6. Upvote
    evilpuncker reacted to AnnieRuru in RIP rAthena?   
    this kind of topic always show up time to time ...
    http://herc.ws/board/topic/6817-
    http://herc.ws/board/topic/7933-
     
    btw they are up back
  7. Upvote
    evilpuncker reacted to Angelmelody in Item restrictions   
    An easier method , change your account  group from 99 to 100
  8. Upvote
    evilpuncker reacted to AnnieRuru in @partybuff / @spb   
    even if this is possible, there is a client restriction which disallow to display player name longer than 23 characters ...
    and the color has to be client reverse engineer ...
     
    means, no, this also has to do client side modification
     
    but if not display in the Alt+Z, but with a message command
    then this can even done with scripting alone, with getstatus script command
     
     
    -  script  jsfkjsdf  FAKE_NPC,{OnInit:  bindatcmd "psc", strnpcinfo(0)+"::Onaaa";  end;Onaaa:  .@pid = getcharid(1);  if ( !.@pid ) {    dispbottom "you don't have a party to use this command";    end;  }  getpartymember .@pid, 1;  getpartymember .@pid, 2;  .@origin = getcharid(3);  for ( .@i = 0; .@i < $@partymembercount; ++.@i ) {    if ( isloggedin( $@partymemberaid[.@i] , $@partymembercid[.@i] ) ) {      attachrid $@partymemberaid[.@i];      .@buff$ = "";      if ( getstatus(SC_BLESSING) ) .@buff$ += "B";      if ( getstatus(SC_INC_AGI) ) .@buff$ += "A";      if ( getstatus(SC_PROTECTWEAPON) && getstatus(SC_PROTECTSHIELD) && getstatus(SC_PROTECTARMOR) && getstatus(SC_PROTECTHELM) ) .@buff$ += "F";      if ( getstatus(SC_SOULLINK) ) .@buff$ += "S";      if ( getstatus(SC_DEVOTION) ) .@buff$ += "+";      .@display$[.@c++] = "["+ .@buff$ +"] "+ strcharinfo(0);    }  }  attachrid .@origin;  for ( .@i = 0; .@i < .@c; ++.@i )    dispbottom .@display$[.@i];  end;}
  9. Upvote
    evilpuncker got a reaction from AnnieRuru in IN NEED of HELP translation (Soul Blaker's Script)   
    soon I'll post it for u
     
    edit:
    sorry for the delay, and sorry for not translating everything, my mouse is just broke so I can't barely select any text with precision :/
     
    http://upaste.me/39e6221505fe02b59
  10. Upvote
    evilpuncker got a reaction from JulioCF in Opção Comparar Item (Alt + E) causando Crash   
    o bRO não possue os arquivos do sistema de comparação, vc precisa pegar eles no kRO e colocar na sua grf custom
  11. Upvote
    evilpuncker reacted to AnnieRuru in OnPCStatCalcEvent   
    rathena already has this by default -> https://github.com/rathena/rathena/commit/27a0f3f
    someone else has tried to pull request in hercules, -> https://github.com/HerculesWS/Hercules/pull/351
    but it was denied, so have to leave this as plugin
    UPDATE: rathena has taken out -> https://github.com/rathena/rathena/commit/b65443d8f564175196d57ef9bc1d000a5661fbdc
     
    Download : 2.1
    plugin
     
    Tested with:
    conf\import\OnPCStatCalcEvent.conf
    both `@reloadscript` and `@reloadonpcstatcalcevent` command can reload conf\import\OnPCStatCalcEvent.conf file 
     
    `@reloadscript` = reload everything -> cause destruction on live server
    `@reloadonpcstatcalcevent` = only reload conf\import\OnPCStatCalcEvent.conf file , combine with `@reloadnpc` command -> not so destructive
    script: ( { // give GM permanent bonus ? OnPCStatCalcEvent: <" bonus bVit, 1234; end; "> }, { // for xxx event OnPCStatCalcEvent: <" skill TF_HIDING, 1; end; "> }, { // npc/custom/xxxevent.txt OnPCStatCalcEvent: <" if (@a) { bonus bStr, 1000; skill WZ_ICEWALL, 1; } end; "> }, ) script
    prontera,158,185,5 script djk2sfhsd 1_F_MARIA,{ @a ^= 1; mes "hmm..."; recalculatestat(); next; mes "what ?"; @a ^= 1; recalculatestat(); next; mes "maybe..."; @a ^= 1; recalculatestat(); next; mes "probably..."; @a ^= 1; recalculatestat(); next; mes "yeah..."; @a ^= 1; recalculatestat(); close; } yes, this actually works !!
     
    with version 2.0 onwards,
    no more spamming <npc name>::OnPCStatCalcEvent !!
    and even `*skill` working perfectly fine now
     
     
  12. Upvote
    evilpuncker reacted to AnnieRuru in getitemname2   
    another lame script that has been around for a very long time ...
    just a function to show the item name exactly like on the client side
     
    Download: 2.6
    script
     
     
    Display Item name just as the client

    version 2 onward has color code for display inside npc dialog

     
    original topic from eathena and rathena ...
     
     
  13. Upvote
    evilpuncker reacted to AnnieRuru in *setmobdata & *getmobdata   
    hmm ...
    I actually didn't know rathena already has it when I opened this topic
    I admit they at least tried to "make stuffs happens", although some of their design is flaw
     
    I think mine is a little bit better, because mine can modify attack damage for monster, which they can't
    but rathena also has a few stuffs that I didn't have, like the monster no cast skill flag, and I haven't code setmoblook
     
    erm .... HAHAHAHA !!
    so rathena monster's stat cannot change due to a bug
    https://github.com/rathena/rathena/issues/462
    https://github.com/rathena/rathena/issues/516
    https://github.com/rathena/rathena/issues/751
     
    it doesn't matter now, I copy all their good stuffs, so now mine is better than them
     
    patch 1.2
    http://upaste.me/ed6c2196382229bc7
    crazy 500 lines modification, hercules seriously missing many stuffs
  14. Upvote
    evilpuncker reacted to AnnieRuru in *setmobdata & *getmobdata   
    again, 2nd PM come in and asked me to convert this into rathena
    because they claimed this script isn't working in rathena
     
    ... and I don't believe rathena will release stuffs that are "full of bugs"
     
    1st reason
    I was scripting moderator at rathena forum during year 2013,
    so I knew how strict they are when they recruit a core developer
    there is no way their developer will make things full of bugs
     
    2nd reason
    emistry server is probably based on rathena emulator
    I'm confident emistry know how to write his mvp ladder with setunitdata
    if setunitdata is bug, then he wont be able to make that mvp ladder script with
    -> Boss Max HP will increase depend on total amount of party members who joined currently.
     
    and, this is the script I tested on my rathena test server

    prontera,159,185,5 script kjdsfkshfs 1_F_MARIA,{monster "this", -1,-1, "--ja--", 1002, 1, "";setunitdata $@mobid[0], 3, 10000000;setunitdata $@mobid[0], 2, 10000000;} .

     
     
    the main difference is at the *monster script command
     
    hercules *monster script command can be set with any variable, however, only 1 monster at a time
    if want to modify 10 monsters, has to use a loop

    prontera,155,185,5 script kdjhfksfdh 1_F_MARIA,{for ( .@i = 0; .@i < 10; .@i++ ) {.@id[.@i] = monster( "this", -1,-1, "--ja--", PORING, 1, "" );setmobdata .@id[.@i], MOBDATA_MAXHP, 10000000;setmobdata .@id[.@i], MOBDATA_HP, 10000000;}end;} .
    rathena *monster script command cannot be set, it push $@mobid in an array

    prontera,159,185,5 script kjdsfkshfs 1_F_MARIA,{monster "this", -1,-1, "--ja--", 1002, 10, "";for ( .@i = 0; .@i < 10; .@i++ ) {setunitdata $@mobid[.@i], 3, 10000000;setunitdata $@mobid[.@i], 2, 10000000;}end;} .
    so the way rathena and hercules write them are totally different
    ... and yes, rathena also can't use constant
     
     
    EDIT : codebox is broken ...
    EDIT2 : nvm leave it ....
  15. Upvote
    evilpuncker reacted to AnnieRuru in *setmobdata & *getmobdata   
    I don't want rathena members come and steal my source edits anymore hahaha
     
    1.1
    plugin
    - remove MOBDATA_NAME field and MOBDATA_DIRECTION field
    - add monster's emote constants (found in src/map/status.h)
  16. Upvote
    evilpuncker reacted to AnnieRuru in One char per gm account   
    nonono ... the char_make_new_char_sql function already has a slot variable
    so we can make use of that variable for not using sql syntax
     
    btw, my mistake for not using slot variable in my previous post, fixed
    src/char/char.c | 8 ++++++++ 1 file changed, 8 insertions(+)diff --git a/src/char/char.c b/src/char/char.cindex 41b13b3..d5849f5 100644--- a/src/char/char.c+++ b/src/char/char.c@@ -1671,6 +1671,9 @@ int char_make_new_char_sql(struct char_session_data* sd, char* name_, int str, i return -2; // invalid input #endif + if ( slot != 0 && sd->group_id > 10 ) { // change 10 to minimum gm level+ return -2;+ } // check char slot if( sd->found_char[slot] != -1 ) return -2; /* character account limit exceeded */@@ -4574,6 +4577,11 @@ void char_parse_char_select(int fd, struct char_session_data* sd, uint32 ipl) } #endif + if ( slot != 0 && sd->group_id > 10 ) {+ chr->creation_failed(fd, -2);+ return;+ }+ ARR_FIND(0, ARRAYLENGTH(chr->server), server_id, chr->server[server_id].fd > 0 && VECTOR_LENGTH(chr->server[server_id].maps) > 0); /* not available, tell it to wait (client wont close; char select will respawn). * magic response found by Ind thanks to Yommy <3 */somehow I'm unable to write the char_parse_char_select as plugin ...I always get error for this line in plugin
    int slot = RFIFOB(fd,2);
  17. Upvote
    evilpuncker reacted to AnnieRuru in movespeed mapflag   
    this is useful for certain events when you want your players to move at a fixed speed
    eg: even if the player has agi up, mount peco or using Authoritative Badge,
    all players movement speed are fixed at your desire value
     
    Download: 1.3
    plugin
     
    Example:
    prontera mapflag movespeed 150 setmf_movespeed "prontera", 150; all players at prontera will move at default speed
    the value capped between 20~1000 
     
    prontera mapflag movespeed 150 99 setmf_movespeed "prontera", 150, 99; all players except GM99 at prontera will move at default speed
     
    removemf_movespeed "prontera"; remove the movespeed mapflag in prontera, without using "@reloadscript"
     
    dispbottom getmf_movespeed( "prontera" ) +""; dispbottom getmf_movespeed( "prontera", 0 ) +""; dispbottom getmf_movespeed( "prontera", 1 ) +""; first 2 lines return the movespeed value, 3rd line return the GM level bypass restriction
    Note: since the minimum value is 20, if the mapflag is off, return 0
     
     
  18. Upvote
    evilpuncker reacted to AnnieRuru in fixedaspd mapflag   
    hehehe ... I'm so happy that now mapflag also can be a plugin
    I think I can safely release all my custom mapflags for hercules users
     
    Download: 1.3
    plugin
    .
    prontera mapflag fixedaspd 150 setmf_fixedaspd "prontera", 150; all players will have fixed attack speed at 150 speed
    the value capped between 85~199 ... although the maximum may not actually 199,
    it can be battle_config.max_aspd for 1st/2nd jobs, or battle_config.max_third_aspd for 3rd jobs
     
    prontera mapflag fixedaspd 150 99 setmf_fixedaspd "prontera", 150, 99; all players except GM99 at prontera has fixed attack speed at 150
     
    removemf_fixedaspd "prontera"; remove the fixedaspd mapflag in prontera, without using "@reloadscript"
     
    dispbottom getmf_fixedaspd( "prontera" ) +""; dispbottom getmf_fixedaspd( "prontera", 0 ) +""; dispbottom getmf_fixedaspd( "prontera", 1 ) +""; first 2 lines return the fixedaspd value, 3rd line return the GM level bypass restriction
    Note: since the minimum value is 85, if the mapflag is off, return 0
     
     
  19. Upvote
    evilpuncker reacted to Rytech in New Improved 3RD JOB Sprites.   
    Dressing room system is fully supported by kRO clients. Older 2015 clients like the 2015-05-13Ragexe supports it, but it uses a older version of the system still in development. The Oct 2015 clients uses a completed version of the system but isn't accessible without a small modification to some files. Here's some screenshots....
     
    Genetic wearing alternate outfit in battle pose.

     
    Guillotine Cross dressed as a Thief while welding katars.

     
    2 Genetics sitting next to each other. One wearing the original outfit and the other wearing the new alternate outfit.

     
    And finally, I added a custom entry in to support the old Rune Knight sprite.

     
    All of this without replacing anything.
     
  20. Upvote
    evilpuncker reacted to AnnieRuru 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
     
     
     
  21. Upvote
    evilpuncker reacted to AnnieRuru 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
  22. Upvote
    evilpuncker reacted to AnnieRuru 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 ?
  23. Upvote
    evilpuncker got a reaction from JulioCF in Mapas pretos!   
    ali n é mais o mesmo mapa no kRO :/ 
     
    http://herc.ws/board/topic/10579-2015-09-05-142-criatura-academy/?p=63390
  24. Upvote
    evilpuncker got a reaction from JulioCF in Mapas pretos!   
    baixa e coloca na sua grf:
     
    http://herc.ws/board/files/file/182-old-prontera/
    http://herc.ws/board/files/file/181-old-izlude-and-alberta/
  25. Upvote
    evilpuncker reacted to AnnieRuru 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
×
×
  • Create New...

Important Information

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