viewing paste Unknown #21848 | 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
void bg_match_over(struct bg_arena *arena, bool canceled) {
    struct hQueue *queue = &script->hq[arena->queue_id];
    int i;
 
    nullpo_retv(arena);
    if( !arena->ongoing )
        return;
    arena->ongoing = false;
 
    for( i = 0; i < queue->size; i++ ) {
        struct map_session_data * sd = NULL;
 
        if (queue->item[i] > 0 && (sd = map->id2sd(queue->item[i])) != NULL) {
            if( sd->bg_queue.arena ) {
                bg->team_leave(sd, 0);
                bg->queue_pc_cleanup(sd);
            }
            if (canceled)
                clif->messagecolor_self(sd->fd, COLOR_RED, "BG Match Canceled: not enough players");
            else
                pc_setglobalreg(sd, script->add_str(arena->delay_var), (unsigned int)time(NULL));
        }
    }
 
    arena->begin_timer = INVALID_TIMER;
    arena->fillup_timer = INVALID_TIMER;
    /* reset queue */
    script->queue_clear(arena->queue_id);
}
void bg_begin(struct bg_arena *arena) {
    struct hQueue *queue = &script->hq[arena->queue_id];
    int i, count = 0;
 
    nullpo_retv(arena);
    for( i = 0; i < queue->size; i++ ) {
        struct map_session_data * sd = NULL;
 
        if (queue->item[i] > 0 && (sd = map->id2sd(queue->item[i])) != NULL) {
            if( sd->bg_queue.ready == 1 )
                count++;
            else
                bg->queue_pc_cleanup(sd);
        }
    }
    /* TODO/FIXME? I *think* it should check what kind of queue the player used, then check if his party/guild
     * (his team) still meet the join criteria (sort of what bg->can_queue does)
     */
 
    if( count < arena->min_players ) {
        bg->match_over(arena,true);
    } else {
        arena->ongoing = true;
        /* TODO: make this a arena-independant var? or just .@? */
        mapreg->setreg(script->add_str("$@bg_queue_id"),arena->queue_id);
        mapreg->setregstr(script->add_str("$@bg_delay_var$"),bg->gdelay_var);
        
        count = 0;
        for( i = 0; i < queue->size; i++ ) {
            struct map_session_data * sd = NULL;
            
            if (queue->item[i] > 0 && (sd = map->id2sd(queue->item[i])) != NULL) {
                if( sd->bg_queue.ready == 1 ) {
                    
                    mapreg->setreg(reference_uid(script->add_str("$@bg_member"), count), sd->status.account_id);
 
                    mapreg->setreg(reference_uid(script->add_str("$@bg_member_group"), count),
                                   sd->bg_queue.type == BGQT_GUILD ? sd->status.guild_id :
                                   sd->bg_queue.type == BGQT_PARTY ? sd->status.party_id :
                                   0
                                   );
                    mapreg->setreg(reference_uid(script->add_str("$@bg_member_type"), count),
                                   sd->bg_queue.type == BGQT_GUILD ? 1 :
                                   sd->bg_queue.type == BGQT_PARTY ? 2 :
                                   0
                                   );
                    count++;
                }
            }
        }
        mapreg->setreg(script->add_str("$@bg_member_size"),count);
 
        npc->event_do(arena->npc_event);
    }
}
//other part of battleground.c
// FIXME Maybe
    //nullpo_retv(sd);
    //nullpo_retv(arena);
    //if( arena->begin_timer != INVALID_TIMER || arena->ongoing ) {
    if( arena->begin_timer != INVALID_TIMER ) {
        clif->bgqueue_ack(sd,BGQA_FAIL_QUEUING_FINISHED,arena->id);
        return;
    }
    
    if( result != BGQA_SUCCESS ) {
        clif->bgqueue_ack(sd,result,arena->id);
        return;
    }
Viewed 1018 times, submitted by Guest.