머드클럽
머드게임이란?
게임은 어떤 환경에서?
본격적으로 게임해 볼까?
배너교환
머드강좌
일반 머드강좌
성천사님의 머드강좌
혼님의 머드강좌
방울꽃님의 머드강좌
리트님의 머드강좌
2Soo님의 머드강좌
내머드소개하기
접속가능머드
내머드소개하기
자료실
접속 프로그램
머드소스
머드 유틸리티
기타
커뮤니티
공지사항
등업신청
머드클럽에바란다
자유 게시판
질문 AND 답변
머드클럽 갤러리
구인구직
머드게임소개
사신전(死神戰)
사신전 소개
사신전 맵
사신전 명령어 모음집
천명(天命)
천명 소개
천명 맵
천명 명령어 모음집
마이페이지
로그인
회원가입
계정찾기
로그인
회원가입
계정찾기
텍스트머드클럽
검색
[mordor]순위 소스 입니다.
달마
0
4,292
0
0
2004-02-28 13:02:48
<br />올린이:hhhk (황용석 ) <br />자신의 머드에맞게 알아서고쳐주세요. -_-; <br /> <br />global.c에 있는 cmdlist선언문에 다음과같이 추가하여 주십시오. <br /> <br />{ "순위", cmdno, rank }, <br /> <br />cmdno에는 아무숫자나 알아서 너어주십시오 -_-. <br /> <br />command??.c 파일 아무데나 다음을 집어너어 주십시오 -_-. <br />그리고 mextern.h에 extern int rank(); 를 추가하여 주십시오. <br /> <br />/**********************************************************************/ <br />/* rank */ <br />/**********************************************************************/ <br /> <br /> <br />/* 레벨및 직업순으로 전체사용자 순위보기 만든이 : 위즈 */ <br />/* 사용법 : <순위> 순위, <이름> 순위 */ <br /> <br /> <br />int rank(ply_ptr, cmnd) <br />creature *ply_ptr; <br />cmd *cmnd; <br />{ <br /> struct rank_table { <br /> char name[80]; <br /> char class; <br /> unsigned char level; <br /> }; <br /> struct rank_table *rank_table; <br /> int number_of_players; <br /> int fd; <br /> int i, cnt; <br /> int start, end; <br /> int hlight=0; <br /> <br /> fd = ply_ptr->fd; <br /> <br /> number_of_players = count_players(); <br /> rank_table = (struct rank_table *)calloc(number_of_players, \ <br /> sizeof(struct rank_table)); <br /> <br /> /* 이런일이야 거의 없겠지만 간혹 순위작성도중 플레이어파일이 <br /> 증가한다든지 -_-. 하는경우 순위작성을 그만둡니다. */ <br /> if((cnt = init_rank(rank_table, number_of_players)) == -1) <br /> { <br /> free(rank_table); <br /> print(fd,"순위 작성중 오류가 발생하였습니다.\n"); <br /> return(0); <br /> } <br /> else if(cnt != number_of_players) <br /> { <br /> print(fd,"손상된 플레이어파일이 있습니다.\n"); <br /> } <br /> <br /> sort_rank(rank_table, number_of_players); <br /> <br /> if (cmnd->num<2) <br /> { <br /> if(cmnd->val[0]<1 || cmnd->val[0]>cnt) <br /> { <br /> free(rank_table); <br /> print(fd,"범위를 초과하였습니다.\n"); <br /> return(0); <br /> } <br /> hlight=cmnd->val[0]; <br /> if(hlight>10) <br /> start=hlight-10; <br /> else <br /> start=1; <br /> if(start+20<=cnt) <br /> end=start+20; <br /> else <br /> { <br /> if((cnt-20)>0) <br /> start=cnt-20; <br /> else <br /> start=1; <br /> end=cnt; <br /> } <br /> } <br /> else <br /> { <br /> if(!ishan(cmnd->str[1])) <br /> { <br /> free(rank_table); <br /> <br /> print(fd,"잘못된 이름입니다.\n"); <br /> return(0); <br /> } <br /> for(i=0;i<cnt;i++) <br /> { <br /> if(!strcmp(rank_table[i].name,cmnd->str[1])) <br /> { <br /> hlight=i+1; <br /> break; <br /> } <br /> } <br /> if(hlight==0) <br /> { <br /> free(rank_table); <br /> <br /> print(fd,"그런 이름을가진 사용자는 없습니다.\n"); <br /> return(0); <br /> } <br /> if(hlight>10) <br /> start=hlight-10; <br /> else <br /> start=1; <br /> if(start+20<=cnt) <br /> end=start+20; <br /> else <br /> { <br /> if((cnt-20)>0) <br /> start=cnt-20; <br /> else <br /> start=1; <br /> end=cnt; <br /> } <br /> } <br /> <br />print(fd, \ <br />"┏━━┳━━━━━┳━━━┳━━━┳━━━━━━━━━━━━━━━━━━━┓\n <br />" <br />); <br />print(fd, \ <br />"┃순위┃ 이 름 ┃레 벨┃직 업┃ 칭 호 ┃\n <br />" <br />); <br />print(fd, \ <br />"┣━━╋━━━━━╋━━━╋━━━╋━━━━━━━━━━━━━━━━━━━┫\n <br />" <br />); <br /> for(i=start-1;i<end;i++) <br /> { <br /> if(i==hlight-1) /* 하이라이트 돼는부분 */ <br /> print(fd,"┃%4d┃%-10s┃%6d┃%6s┃%-38s┃\n", \ <br /> i+1,rank_table[i].name,rank_table[i].level, \ <br /> class_str[rank_table[i].class]," <--"); <br /> else /* 하이라이트 돼지 않는부분 */ <br /> print(fd,"┃%4d┃%-10s┃%6d┃%6s┃%-38s┃\n", \ <br /> i+1,rank_table[i].name,rank_table[i].level, \ <br /> class_str[rank_table[i].class],""); <br /> } <br /> <br />print(fd, \ <br />"┗━━┻━━━━━┻━━━┻━━━┻━━━━━━━━━━━━━━━━━━━┛\n <br />" <br />); <br /> <br /> <br /> free(rank_table); <br /> return(0); <br />} <br /> <br /> <br /><RANK.C> 파일을 만들어 다음내용을 너어주세요. <br /> <br />/****************************************************************** <br />* File : rank.c Part of 무한대전 * <br />* 무한대전용 전체순위 소스 만든이 : 위즈 * <br />* 사용자파일을 읽어 레벨및 직업순으로 소트해줍니다. * <br />* 본소스는 상업적목적으로 사용할수 없습니다. (누가? -_-;) * <br />* 배포시에는 원본을 그대로 올려주십시오 * <br />******************************************************************/ <br /> <br />#include <dirent.h> <br />#include <unistd.h> <br />#include <stdlib.h> <br />#include <string.h> <br />#include <sys/stat.h> <br />#include <sys/types.h> <br />#include "mstruct.h" <br />#include "mextern.h" <br /> <br />#include "mtype.h" <br /> <br />#ifndef MAXDM <br />#define MAXDM 7 <br />#endif <br /> <br />char diridx[14][3]={"가","나","다","라","마","바","사","아","자","차", \ <br /> "카","타","파","하"}; <br /> <br />struct rank_table { <br /> char name[80]; <br /> char class; <br /> unsigned char level; <br /> <br />}; <br /> <br />int init_rank(struct rank_table *rank_table, int number_of_players); <br />void sort_rank(struct rank_table *rank_table, int number_of_players); <br />int count_players(); <br />int rank_cmp(const void *rank_cmp1, const void *rank_cmp2); <br /> <br />/**************************************************************************/ <br />/* init_rank */ <br />/**************************************************************************/ <br />/* rank_table을 초기화 시킨다. 첫번재 인수는 rank_table형 포인터 */ <br />/* 이고 두번째 인수는 count_players의 리턴값인 number_of_players이다. */ <br />/* cnt는 읽어들인 플레이어수이다. 만약 이 cnt 값과 count_players의 리 */ <br />/* 턴값인 number_of_players가 다르다면 깨진 플레이어파일이 있다는 것이다. */ <br /> <br />/* 만약 cnt가 number_of_players보다 큰 기현상(?)이 일어난다면 다면 -1을 */ <br />/* 리턴한다. 리턴값 cnt */ <br /> <br />int init_rank(struct rank_table *rank_table, int number_of_players) <br />{ <br /> DIR *dp; <br /> struct dirent *entry; <br /> struct stat statbuf; <br /> creature *ply_ptr; <br /> <br /> char dirbuf[80]; <br /> char cwd[80]; <br /> int cnt=0; <br /> int i; <br /> <br /> <br /> getcwd(cwd,80); <br /> for(i=0;i<14;i++) <br /> { <br /> sprintf(dirbuf,"%s/%s",PLAYERPATH,diridx[i]); <br /> if ((dp = opendir(dirbuf)) == NULL) <br /> continue; <br /> <br /> chdir(dirbuf); <br /> while((entry=readdir(dp)) != NULL) <br /> { <br /> stat(entry->d_name,&statbuf); <br /> if(!S_ISDIR(statbuf.st_mode)) <br /> if(ishan(entry->d_name)) /* 한글로된 파일만 검사 */ <br /> { <br /> <br /> if(load_ply(entry->d_name, &ply_ptr)==0) { <br /> if (cnt >= number_of_players) <br /> { <br /> free_crt(ply_ptr); <br /> chdir(cwd); <br /> return -1; <br /> } <br /> if (ply_ptr->class >=SUB_DM) /* 운영 이상은 제외 */ <br /> { <br /> free_crt(ply_ptr); <br /> continue; <br /> } <br /> strcpy(rank_table[cnt].name, ply_ptr->name); <br /> rank_table[cnt].class = ply_ptr->class; <br /> rank_table[cnt].level = ply_ptr->level; <br /> <br /> cnt++; <br /> free_crt(ply_ptr); <br /> } <br /> } <br /> } <br /> closedir(dp); <br /> } <br /> chdir(cwd); <br /> return cnt; <br />} <br /> <br />/**************************************************************************/ <br />/* sort_rank */ <br />/**************************************************************************/ <br /> <br />/* rank_cmp 함수를 이용해 rank_table을 quick_sort합니다. */ <br /> <br />void sort_rank(struct rank_table *rank_table, int number_of_players) <br />{ <br /> qsort(rank_table,number_of_players,sizeof(struct rank_table),rank_cmp); <br />} <br /> <br />/*****************************************************************/ <br />/* count_players */ <br />/*****************************************************************/ <br />/* PLAYERPATH에 있는 사용자파일 갯수를 세어 반환합니다. */ <br /> <br />int count_players() <br />{ <br /> <br /> DIR *dp; <br /> struct dirent *entry; <br /> struct stat statbuf; <br /> <br /> int number_of_players = 0; <br /> char dirbuf[80]; <br /> char cwd[80]; <br /> <br /> int i; <br /> int c; <br /> int dmchk=0; <br /> <br /> getcwd(cwd,80); <br /> for(i=0;i<14;i++) <br /> { <br /> sprintf(dirbuf,"%s/%s",PLAYERPATH,diridx[i]); <br /> if ((dp = opendir(dirbuf)) == NULL) <br /> continue; <br /> <br /> chdir(dirbuf); <br /> while((entry=readdir(dp)) != NULL) <br /> { <br /> stat(entry->d_name,&statbuf); <br /> if(!S_ISDIR(statbuf.st_mode)) <br /> if(ishan(entry->d_name)) /* 한글로된 파일만 검사 */ <br /> { <br /> dmchk=0; <br /> for(c=0;c<MAXDM;c++) /* 관리는 제외 */ <br /> { <br /> if(!strcmp(entry->d_name,dmname[c])) <br /> dmchk=1; <br /> } <br /> if(!dmchk) <br /> number_of_players++; <br /> } <br /> } <br /> closedir(dp); <br /> } <br /> chdir(cwd); <br /> return number_of_players; <br />} <br /> <br />/**************************************************************************/ <br />/* rank_cmp */ <br /> <br />/**************************************************************************/ <br />/* sort_rank 함수에서 이용할 qsort용 비교함수 */ <br /> <br />int rank_cmp(const void *rank_cmp1, const void *rank_cmp2) <br />{ <br /> struct rank_table *r1, *r2; <br /> r1 = (struct rank_table *) rank_cmp1; <br /> r2 = (struct rank_table *) rank_cmp2; <br /> <br /> /* 둘다 직업이 일반이라면 레벨순으로 소트 */ <br /> if((ASSASSIN <= r1->class && r1->class < INVINCIBLE) && \ <br /> (ASSASSIN <= r2->class && r2->class < INVINCIBLE)) <br /> return r2->level - r1->level; <br /> else <br /> { <br /> /* 둘다 무적 이상이고 직업이 같다면 레벨순으로 소트 */ <br /> if(r1->class == r2->class) <br /> return r2->level - r1->level; <br /> /* 둘다 무적 이상이고 직업이 다르다면 직업순으로 소트 */ <br /> else <br /> return r2->class - r1->class; <br /> } <br />} <br /> <br />Makefile의 OBJECTS 에 rank.o를 추가해 주시고, <br /> <br />mextern.h에 다음을 추가하여 주십시오. <br />/* RANK.C */ <br />extern int init_rank(),count_players(),rank_cmp(); <br />extern void sort_rank();
0
0
새글
답변
수정
삭제
최신목록
전체목록
*완치 기능?;; 허접해요^-^;;
강화 주문 소스
0
Comments
-표시할 내용이 없습니다.-
코멘트를 삭제할 비밀번호를 입력하세요.
비밀번호:
댓글에 답하기
입력
닫기
정회원 이상만 코멘트 쓰기가 가능합니다.
총 게시물 107개 / 검색된 게시물: 107개
누구든지 머드 강의를 올리수 있는 곳입니다...^^
[circle]
서클의 지도 공부..
0
3076
0
0
머드짱
2004-09-03
[천무혼]
은행 시스템 만들기!
2
2946
0
0
천무혼
2004-08-12
[흑염]
기술의 지속시간과 향상 능력치를 call_out 없이 구현.
1
3113
0
0
흑염기사
2004-08-12
[천무혼]
없는 명령어를 입력했을때 나오는 '^^;' 바꾸기
3
2777
0
0
천무혼
2004-08-09
[기타]
vi 에디터의 안시에 관한 내용입니다.
1
3045
0
0
머드사랑(1)
2004-07-26
[circle]
Ascii Player files 패치된 써클머드 한글화 시키기!
2
3345
0
0
미르
2004-07-06
[흑염]
[천명]노점상인.c 천명 삼일장에서 사용되고있는 노점상인 쏘스.
1
4368
0
0
흑염기사
2004-06-13
[흑염]
[천명] save_data.c - 특정 오브젝트의 플래그를 아이템 파일처럼 저장시켜준다.
0
2701
0
0
흑염기사
2004-06-13
[흑염]
[천명] req_string.c - mapping을 보기좋게 string으로.
0
2794
0
0
흑염기사
2004-06-13
[mordor]
상점개설
3
3039
0
0
GrayRese
2004-05-27
[mordor]
게시판의 기능 편하게..(위로 올라가고, 글쓰기기능 추가)
1
3228
0
0
달마
2004-05-19
[circle]
hanlp의 지도.c
0
3333
0
0
사천건
2004-05-18
[circle]
시간의문 경험치 못먹는거 먹게하는방법(허접이라두 잘봐주세영)
4
2809
0
0
손문
2004-05-07
[hanlp]
[천명] 완치 이벤트 ......
2
3152
0
0
어두운별
2004-04-30
[기타]
gdb 사용법!
3
4528
0
0
GrayRese
2004-04-23
[hanlp]
현재 습득한 기술 목록 보이기.
2
2924
0
0
박대성
2004-04-19
[circle]
새천사님의 수정 사항에 추가할점..
1
2800
0
0
푸른가람
2004-04-03
[hanlp]
10초간 데미지와 방어력 상승
2
2965
0
0
박대성
2004-03-14
[mordor]
*완치 기능?;; 허접해요^-^;;
1
2986
0
0
탈퇴
2004-02-28
[mordor]
순위 소스 입니다.
0
4293
0
0
달마
2004-02-28
이전
1
2
3
4
5
6
다음
검색
글쓰기
최신목록
전체목록
시작일
종료일
분류별 검색
전체보기
기타
circle
hanlp
mordor
소스분석
흑염
천무혼
검색어
이름
제목
내용
검색
닫기
로그인
회원가입
계정찾기
개인정보처리방침
이용약관
PC화면
Copyright (c) 텍스트머드클럽. All rights reserved.
쪽지를 전송하고 있습니다. 잠시 기다려주세요.
쪽지보내기
받는이(ID/닉네임)
닉네임으로 입력
내용
쪽지가 도착하였습니다.
쪽지함
쪽지 내용을 읽어오고 있습니다. 잠시 기다려주세요.
--