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 840 times, submitted by Guest.