Jump to content
  • 0

how to make custom cell?


Brynner

Question


  • Group:  Members
  • Topic Count:  118
  • Topics Per Day:  0.03
  • Content Count:  1942
  • Reputation:   197
  • Joined:  01/08/12
  • Last Seen:  

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
 
//+++++++++++++++++++++++++++++++++//

 

 

Link to comment
Share on other sites

7 answers to this question

Recommended Posts


  • Group:  Members
  • Topic Count:  48
  • Topics Per Day:  0.01
  • Content Count:  1125
  • Reputation:   236
  • Joined:  07/30/12
  • Last Seen:  

Hello sir, have you tried cell_basilica?

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  118
  • Topics Per Day:  0.03
  • Content Count:  1942
  • Reputation:   197
  • Joined:  01/08/12
  • Last Seen:  

Hello sir, have you tried cell_basilica?

cell_basillica is no longer working for this script.

 

and my topic is making custom cell.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  209
  • Topics Per Day:  0.05
  • Content Count:  892
  • Reputation:   27
  • Joined:  12/09/11
  • Last Seen:  

can u post the error?

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  118
  • Topics Per Day:  0.03
  • Content Count:  1942
  • Reputation:   197
  • Joined:  01/08/12
  • Last Seen:  

can u post the error?

what error?

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  209
  • Topics Per Day:  0.05
  • Content Count:  892
  • Reputation:   27
  • Joined:  12/09/11
  • Last Seen:  

can u post the error?

what error?

did u try to implement this on your server? 

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  118
  • Topics Per Day:  0.03
  • Content Count:  1942
  • Reputation:   197
  • Joined:  01/08/12
  • Last Seen:  

 

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.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  2
  • Topics Per Day:  0.00
  • Content Count:  13
  • Reputation:   9
  • Joined:  12/29/11
  • Last Seen:  

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
Link to comment
Share on other sites

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.

×
×
  • Create New...