viewing paste Unknown #22967 | C

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
// script.c
// после функции BUILDIN(bg_reward)
// { ..... }
 
ставим
BUILDIN(bg_team_reveal)
{
        struct battleground_data *bgd;
        int bg_id;
 
        bg_id = script_getnum(st,2);
        if( (bgd = bg->team_search(bg_id)) == NULL )
                return false;
 
        bgd->reveal_pos_sub = 1; // Reveal Position Mode
        return true;
}
 
// ниже / выше, полностью меняем функцию bg_create_team на:
BUILDIN(bg_create_team) {
        const char *map_name, *ev = "", *dev = "";
        int x, y, map_index = 0, bg_id;
 
        map_name = script_getstr(st,2);
        if( strcmp(map_name,"-") != 0 ) {
                map_index = script->mapindexname2id(st,map_name);
                if( map_index == 0 ) { // Invalid Map
                        script_pushint(st,0);
                        return true;
                }
        }
 
        x = script_getnum(st,3);
        y = script_getnum(st,4);
        ev = script_getstr(st,5); // Logout Event
        dev = script_getstr(st,6); // Die Event
       
        if( (bg_id = bg->create(map_index, x, y, ev, dev)) == 0 ) { // Creation failed
                script_pushint(st,-1);
        } else
                script_pushint(st,bg_id);
 
        return true;
 
}
 
// battleground.h, ищем struct battleground_data {
// и после unsigned short mapindex, x, y;
// добавляем:
int reveal_pos_sub, reveal_flag;
 
// дальше, ищем struct battleground_interface {
// добавляем в конец, перед enum bg_queue_types (*str2teamtype) (const char *str);
int (*reveal_pos_sub) (struct block_list *bl, va_list ap);
 
// battleground.c, перед :
// Player joins team
// bool bg_team_join(int bg_id, struct map_session_data *sd) {
 
// добавляем:
int bg_send_dot_remove(struct map_session_data *sd)
{
        struct battleground_data *bgd;
        int m;
 
        if( sd && sd->bg_id && (bgd = bg->team_search(sd->bg_id)) != NULL )
        {
                clif->bg_xy_remove(sd);
                if( bg->reveal_pos_sub && (m = map->mapindex2mapid(bgd->mapindex)) == sd->bl.m )
                        map->foreachinmap(bg->reveal_pos_sub, m, BL_PC, sd, 2, 0xFFFFFF);
        }
        return true;
}
 
// полностью меняем функцию int bg_create(unsigned short map_index, short rx, short ry, const char *ev, const char *dev) {
// на:
int bg_create(unsigned short map_index, short rx, short ry, const char *ev, const char *dev) {
        struct battleground_data *bgd;
        bg->team_counter++;
 
        CREATE(bgd, struct battleground_data, 1);
        bgd->bg_id = bg->team_counter;
        bgd->count = 0;
        bgd->mapindex = map_index;
        bgd->x = rx;
        bgd->y = ry;
        safestrncpy(bgd->logout_event, ev, sizeof(bgd->logout_event));
        safestrncpy(bgd->die_event, dev, sizeof(bgd->die_event));
 
        memset(&bgd->members, 0, sizeof(bgd->members));
        idb_put(bg->team_db, bg->team_counter, bgd);
 
        return bgd->bg_id;
}
 
 
// перед функцией int bg_afk_timer(int tid, int64 tick, int id, intptr_t data) {
// добавляем:
int bg_reveal_pos_sub(struct block_list *bl, va_list ap)
{
        struct map_session_data *pl_sd, *sd = NULL;
        int flag, color;
 
        pl_sd = (struct map_session_data *)bl;
        sd = va_arg(ap,struct map_session_data *); // Source
        flag = va_arg(ap,int);
        color = va_arg(ap,int);
 
        if( pl_sd->bg_id == sd->bg_id )
                return false; // Same Team
 
        clif->viewpoint(pl_sd,sd->bl.id,flag,sd->bl.x,sd->bl.y,sd->bl.id,color);
        return true;
}
 
// крутим вниз, и перед bg->str2teamtype = bg_str2teamtype;
// добавляем:
bg->reveal_pos_sub = bg_reveal_pos_sub;
Viewed 333 times, submitted by unknown.