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