Jump to content
  • 0

Question

Posted

this is just like adding custom cell. i just want to make a custom events called agawan based.

 

but before that i must learn how to make custom cell like cell_nochat? but on mine i would like to call it cell_based. this cell effect have an option to disabled battle inside that cell zone. so player can stay there to avoid touching or hit by the other players.

thanks in advance. i found this on eAthena custom cell_pk but this is no longer compatible on rathena so i would like to ask for a support for this thanks.

 

//battle.c
//find this
int battle_check_target( struct block_list *src, struct block_list *target,int flag)
//add this before it
bool cell_pk_check(struct block_list *t_bl, struct block_list *s_bl, int m)
{
        if(t_bl->type == BL_PC && map[m].cell[s_bl->x+s_bl->y*map[m].xs].pk == true && map[m].cell[t_bl->x+t_bl->y*map[m].xs].pk == true)
        {
                if(status_get_party_id(t_bl)==status_get_party_id(s_bl))
                        if(map[m].flag.pvp_noparty)
                                return true;
                        else
                                return false;
                if(status_get_guild_id(t_bl)==status_get_guild_id(s_bl))
                        if(map[m].flag.pvp_noguild && map[m].flag.gvg)
                                return true;
                        else
                                return false;
                return true;
        }
        return false;
}
 
//+++++++++++++++++++++++++++++++++//
 
//find this
else if(( sd->duel_group && !((!battle_config.duel_allow_pvp && map[m].flag.p
//use this to replace
else if(( sd->duel_group && !((!battle_config.duel_allow_pvp && map[m].flag.pvp) || (!battle_config.duel_allow_gvg && map_flag_gvg(m))))||( cell_pk_check(t_bl, s_bl, m) == true ))
 
//+++++++++++++++++++++++++++++++++//
 
//map.c
void map_setcell(int m, int x, int y, cell_t cell, bool flag)
{
        int j;
        if( m < 0 || m >= map_num || x < 0 || x >= map[m].xs || y < 0 || y >= map[m].ys )
                return;
        j = x + y*map[m].xs;   
        switch( cell ) {
                case CELL_WALKABLE:      map[m].cell[j].walkable = flag;      break;
                case CELL_SHOOTABLE:     map[m].cell[j].shootable = flag;     break;
                case CELL_WATER:         map[m].cell[j].water = flag;         break;
                case CELL_NPC:           map[m].cell[j].npc = flag;           break;
                case CELL_BASILICA:      map[m].cell[j].basilica = flag;      break;
                case CELL_LANDPROTECTOR: map[m].cell[j].landprotector = flag; break;
                case CELL_NOVENDING:     map[m].cell[j].novending = flag;     break;
                case CELL_NOCHAT:        map[m].cell[j].nochat = flag;        break;
               
                case CELL_PK:   map[m].cell[j].pk = flag;       break;//<---add this
               
                default:
                        ShowWarning("map_setcell: invalid cell type '%d'\n", (int)cell);
                        break;
        }
}
 
//+++++++++++++++++++++++++++++++++//
 
//map.h
typedef enum {
        CELL_WALKABLE,
        CELL_SHOOTABLE,
        CELL_WATER,
        CELL_NPC,
        CELL_BASILICA,
        CELL_LANDPROTECTOR,
        CELL_NOVENDING,
        CELL_NOCHAT,
        CELL_PK,//<---add this
} cell_t;
 
//+++++++++++++++++++++++++++++++++//
 
struct mapcell
{
        // terrain flags
        unsigned char
                walkable : 1,
                shootable : 1,
                water : 1;
 
        // dynamic flags
        unsigned char
                npc : 1,
                basilica : 1,
                landprotector : 1,
                novending : 1,
                nochat : 1,
                pk      :       1;//<---add this
 
//+++++++++++++++++++++++++++++++++//
 
//db\const.txt
cell_walkable   0
cell_shootable  1
cell_water      2
cell_npc        3
cell_basilica   4
cell_landprotector      5
cell_novending  6
cell_nochat     7
cell_pk 8//<---add this
 
//+++++++++++++++++++++++++++++++++//

 

 

7 answers to this question

Recommended Posts

Posted

 

can u post the error?

what error?

did u try to implement this on your server? 

you will not get error if you use the cell_basilica.

 

try to check the changes on this revision

r13106

 

so cell_basilica is no longer working for this kind of custom modification.

Posted

The battle.c function cell_pk_check have some bug, where is fixed and working version:


bool cell_pk_check(struct block_list *t_bl, struct block_list *s_bl, int m)

{

if(t_bl->type == BL_PC && map[m].cell[s_bl->x+s_bl->y*map[m].xs].pk == true && map[m].cell[t_bl->x+t_bl->y*map[m].xs].pk == true) {

int s_party = status_get_party_id(s_bl);

int s_guild = status_get_guild_id(s_bl);

if( s_party && s_party == status_get_party_id(t_bl) ) {

if(map[m].flag.pvp_noparty)

return true;

else

return false;

}

if( s_guild && s_guild == status_get_guild_id(t_bl) ) {

if(map[m].flag.pvp_noguild && map[m].flag.gvg)

return true;

else

return false;

}

return true;

}

return false;

}

  • Upvote 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...