이걸보고도 더럽다는 말이 나오나여 ㅋ 이쁨 ㅋ


void game_accept(SOCKET s)
{
 session[s]->type = 1;
}

char game_sight(struct point *me, struct point *you)
{
// int i, j;
 int x0, y0, x1, y1;
 struct map_data *map;

 map = me->m;
 if(me->m != you->m){ return 0; }
 if(!memcmp(&me, &you, sizeof(struct point))){ return 1; }

 if(me->x < 9){ x0 = 0; x1 = 17; }
 else if((map->xs - 10) < me->x){ x0 = map->xs - 18; x1 = map->xs; }
 else{ x0 = me->x - 9; x1 = me->x + 9; }
 if(x0 < 0){ x0 = 0; }

 if(me->y < 9){ y0 = 0; y1 = 17; }
 else if((map->ys - 10) < me->y){ y0 = map->ys - 18; y1 = map->ys; }
 else{ y0 = me->y - 9; y1 = me->y + 9; }
 if(y0 < 0){ y0 = 0; }

 return ((x0 <= you->x) && (you->x <= x1) && (y0 <= you->y) && (you->y <= y1))?1:0;
}

char game_sight2(struct point *me, struct point *you, int distance)
{
// int i, j;
 int x0, y0, x1, y1;
// int sightx, sighty;
 struct map_data *map;

 map = me->m;
 if(me->m != you->m){ return 0; }
 if(!memcmp(&me, &you, sizeof(struct point))){ return 1; }

 if(me->x < distance){ x0 = 0; x1 = distance*2; }
 else if((map->xs - (distance)) < me->x){ x0 = map->xs - distance*2; x1 = map->xs; }
 else{ x0 = me->x - distance; x1 = me->x + distance; }
 if(x0 < 0){ x0 = 0; }

 if(me->y < distance){ y0 = 0; y1 = distance*2; }
 else if((map->ys - (distance)) < me->y){ y0 = map->ys - distance*2; y1 = map->ys; }
 else{ y0 = me->y - distance; y1 = me->y + distance; }
 if(y0 < 0){ y0 = 0; }

 return ((x0 <= you->x) && (you->x <= x1) && (y0 <= you->y) && (you->y <= y1))?1:0;
}


void game_send(SOCKET s, int type)
{
 int i, size;
 struct point *p;
 struct socket_data *sd;
 struct game_session_data *gsd;
 
 gsd = session[s]->session_data;
 p    = &(gsd->account->point);
 size = (wb(s, 1)<<8) + wb(s, 2) + 3;

 switch(type){
  case ALL:
   for(i=0; i<SOCK_COUNT; i++){
    if((SOCK(i) != s) && (sd = session[SOCK(i)])){
     if(sd->auth && sd->type){
      memmove(wp(SOCK(i), 0), wp(s, 0), size);
      wset(SOCK(i));
     }
    }
   }
   break;

  case SAMEMAP:
   for(i=0; i<SOCK_COUNT; i++){
    if((SOCK(i) != s) && (sd = session[SOCK(i)])){
     if(sd->auth && sd->type && (gsd = sd->session_data)){
      if(p->m == gsd->account->point.m){
       memmove(wp(SOCK(i), 0), wp(s, 0), size);
       wset(SOCK(i));
      }
     }
    }
   }
   break;

  case SAMEMAP_WOS:
   for(i=0; i<SOCK_COUNT; i++){
    if((SOCK(i) != s) && (sd = session[SOCK(i)])){
     if(sd->auth && sd->type && (gsd = sd->session_data)){
      if(p->m == gsd->account->point.m){
       memmove(wp(SOCK(i), 0), wp(s, 0), size);
       wset(SOCK(i));
      }
     }
    }
   }
   return;

  case AREA:
   for(i=0; i<SOCK_COUNT; i++){
    if((SOCK(i) != s) && (sd = session[SOCK(i)])){
     if(sd->auth && sd->type && (gsd = sd->session_data)){
      if(game_sight(&(gsd->account->point), p)){
       memmove(wp(SOCK(i), 0), wp(s, 0), size);
       wset(SOCK(i));
      }
     }
    }
   }
   break;

  case AREA_WOS:
   for(i=0; i<SOCK_COUNT; i++){
    if((SOCK(i) != s) && (sd = session[SOCK(i)])){
     if(sd->auth && sd->type && (gsd = sd->session_data)){
      if(game_sight(&(gsd->account->point), p)){
       memmove(wp(SOCK(i), 0), wp(s, 0), size);
       wset(SOCK(i));
      }
     }
    }
   }
   return;
 }

 wset(s);
}