Jump to content
  • 0

setcell CELL_PVP


Scofield

Question


  • Group:  Members
  • Topic Count:  107
  • Topics Per Day:  0.03
  • Content Count:  265
  • Reputation:   11
  • Joined:  01/11/13
  • Last Seen:  

 I've been researching how to put pvp in just one area of
map, such as the center of Prontera found a change in
eAthena allowing leaves an area in PK mode which is very functional, but
I wish it was pvp instead of PK. wanted someone to help me
leave it so pvp.

Modifications of SRC

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

 


    
    

Example of how the script would

-    script    SetPvPCells    -1,{
    end;
    
    OnInit:
    //setcell "prontera",<x1>,<y1>,<x2>,<y2>,<type>,<flag>;
    //A1
    setcell "prontera",133,192,142,170,cell_pvp,1;
    setcell "prontera",126,185,134,178,cell_pvp,1;
    setcell "prontera",141,185,149,178,cell_pvp,1;
  • Upvote 1
Link to comment
Share on other sites

2 answers to this question

Recommended Posts


  • Group:  Members
  • Topic Count:  31
  • Topics Per Day:  0.01
  • Content Count:  666
  • Reputation:   93
  • Joined:  04/27/12
  • Last Seen:  

Well, in this case, all I can deduce from the src, is that it effectively makes it so players can kill one another in the specified cells. The names cell_pk  &  cell_pk_check  are just that in themselves. Names. You can change those names to cell_pvp if you wished too. In fact, it is VERY easy to make custom cells, in rA, the only part that makes custom cells difficult, is whether or not those cells hold any real function.

Keeping that in mind, I wrote a few scripts that uses custom cells to determine location, thus eliminating the use of OnTouch NPCs. It is quite effective.

 

All in all, my suggestion is simply change out the word:  pk   and put your prefered word:   pvp

  • 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...