온라인 리붓
2007.04.12 13:09
-온라인 리붓이란. 사용자들이 접속되어 있는 상태를
유지하면서 리붓이 가능한 기능이다.
온라인 리붓을 하면 머드가 종료되지 않으니
사용자 측면에서는 더없이 좋은 기능이다.
아래 글은 INS에서 퍼온 글이다. -
제 목 : [기능] 온라인리붓 - (CopyOver) - 찬성 : 0 반대 : 0
올린이 : liongo (김성우 ) 읽음 : 167 날짜 : 2000/04/18 11:58
-----------------------------------------------------------------------------
안녕하세요..
간만에 온 선물로. 온라인 리붓(CopyOver) 기능을 올립니다..
방금 만들어서 버그가 있을 가능성이 있으니 유의 하시고
문제점이 있다면 메일 주세요...
상용 머드 이외에선 사용할수 있습니다.
사용하시다가 적발될시에 법적 으로 대응하겠습니다..
CopyRight 2000.4.18 Maker: 김성우
int copy_over(ply_ptr,cmnd)
creature *ply_ptr;
cmd *cmnd;
{
int pid,i;
char file[80],buf[20],buf2[20];
FILE *fp;
log_f("온라인 리부팅 시도중 Desc %d Port %d",Waitsock,Port);
sprintf(buf,"%d",Waitsock);
sprintf(buf2,"%d",Port);
sprintf(file,"./User.dat");
unlink(file);
fp = fopen(file,"w");
for(i=0;i < Tablesize;i++)
{
if(!Ply[i].ply) continue;
if(Ply[i].ply->fd < 0) continue;
fprintf(fp,"%d %s\n",i,Ply[i].ply->name);
}
fprintf(fp,"-1 End");
fclose(fp);
execl("./kangho","kangho",buf2,buf,(char *) NULL);
exit(1);
}
이부분은 명령부입니다. 그대로 추가해주세요..
main 함수부분에 들어간 코드부 입니다..
if(fork()) exit(0); /* go into background */
close(0); close(1); close(2); //close stdio
이부분은 제거 해주해 주십시요 실행시 백그라운드로 실행되게
하는 부분입니다 제거한후에는 ./mordor & 형식으로 실행하면 됩니다.
sock_init(Port,?) 하는 두부분을 주석으로 막으시고.
////
Tablesize = getdtablesize();
if (Tablesize > PMAX){
Tablesize = PMAX;
log_f("Tablesize greater than PMAX\n");
}
/////// //로 묶은 부분 과 똑같이 생긴부분이..
sock_init 함수부분에 잇씁니다. 제거하세요..
sprintf(file,"./User.dat");
if(file_exists(file))
{
fp = fopen(file,"r");
for(i=0;i < Tablesize;i++)
{
log_f("\nRecover User data");
fscanf(fp,"%d %s\n",&bd,tempstr);
if(bd == -1) break;
accept_re(bd);
load_ply(tempstr,&ply_ptr);
Ply[bd].ply = ply_ptr;
free_crt(Ply[bd].ply);
FD_SET(bd,&Sockets);
if(load_ply(tempstr,&Ply[bd].ply) < 0) continue;
Ply[bd].ply->fd = bd;
init_ply(Ply[bd].ply);
init_alias(Ply[bd].ply);
Ply[bd].io->encstr = 0;
}
Waitsock = atoi(argv[2]);
FD_SET(Waitsock,&Sockets);
fclose(fp);
}
else
{
sock_init(Port,0);
}
unlink(file);
이부분은 main.c 입니다.
중요한것...
int Port,int Waitsock,fd_set Sockets 를 전역으로 선언해주세요..
기존에 선언된것들은 제거하세요...
따로 간단한 해더로 만드셔서 선언해둬 됩니당.
하나가 더있습니다.
void accept_re(int fd)
{
int len, i=1, pid;
iobuf *io;
extra *extr;
struct linger ling;
struct sockaddr_in addr;
char *inetname(), path[127],
port1str[10], port2str[10];
addr.sin_family = AF_INET;
addr.sin_port = htons(Port);
addr.sin_addr.s_addr = INADDR_ANY;
len = sizeof(struct sockaddr_in);
if (fd < 0)
printf("Error");
io = (iobuf *)malloc(sizeof(iobuf)+128);
extr = (extra *)malloc(sizeof(extra)+128);
if(!io || !extr)
merror("accept_connect", FATAL);
Ply[fd].io = io;
Ply[fd].ply = 0;
Ply[fd].extr = extr;
zero(extr, sizeof(extra));
zero(io, sizeof(iobuf));
io->ltime = time(0);
io->intrpt = 1;
}
그럼 대충 된듯...
안고친 부분이 있는데 고대로 쓰시면요...
리붓후에 사용자들 접속지주소가 사라질껍니다 아마도..? 맞나 체크 안해봤음..
그건 파일 저장할때 주소도 같이 넣고 로딩할때 다시 넣어주면 됩니다..
어렵지 않겟죠?
그럼.......
- 히네시스 -
유지하면서 리붓이 가능한 기능이다.
온라인 리붓을 하면 머드가 종료되지 않으니
사용자 측면에서는 더없이 좋은 기능이다.
아래 글은 INS에서 퍼온 글이다. -
제 목 : [기능] 온라인리붓 - (CopyOver) - 찬성 : 0 반대 : 0
올린이 : liongo (김성우 ) 읽음 : 167 날짜 : 2000/04/18 11:58
-----------------------------------------------------------------------------
안녕하세요..
간만에 온 선물로. 온라인 리붓(CopyOver) 기능을 올립니다..
방금 만들어서 버그가 있을 가능성이 있으니 유의 하시고
문제점이 있다면 메일 주세요...
상용 머드 이외에선 사용할수 있습니다.
사용하시다가 적발될시에 법적 으로 대응하겠습니다..
CopyRight 2000.4.18 Maker: 김성우
int copy_over(ply_ptr,cmnd)
creature *ply_ptr;
cmd *cmnd;
{
int pid,i;
char file[80],buf[20],buf2[20];
FILE *fp;
log_f("온라인 리부팅 시도중 Desc %d Port %d",Waitsock,Port);
sprintf(buf,"%d",Waitsock);
sprintf(buf2,"%d",Port);
sprintf(file,"./User.dat");
unlink(file);
fp = fopen(file,"w");
for(i=0;i < Tablesize;i++)
{
if(!Ply[i].ply) continue;
if(Ply[i].ply->fd < 0) continue;
fprintf(fp,"%d %s\n",i,Ply[i].ply->name);
}
fprintf(fp,"-1 End");
fclose(fp);
execl("./kangho","kangho",buf2,buf,(char *) NULL);
exit(1);
}
이부분은 명령부입니다. 그대로 추가해주세요..
main 함수부분에 들어간 코드부 입니다..
if(fork()) exit(0); /* go into background */
close(0); close(1); close(2); //close stdio
이부분은 제거 해주해 주십시요 실행시 백그라운드로 실행되게
하는 부분입니다 제거한후에는 ./mordor & 형식으로 실행하면 됩니다.
sock_init(Port,?) 하는 두부분을 주석으로 막으시고.
////
Tablesize = getdtablesize();
if (Tablesize > PMAX){
Tablesize = PMAX;
log_f("Tablesize greater than PMAX\n");
}
/////// //로 묶은 부분 과 똑같이 생긴부분이..
sock_init 함수부분에 잇씁니다. 제거하세요..
sprintf(file,"./User.dat");
if(file_exists(file))
{
fp = fopen(file,"r");
for(i=0;i < Tablesize;i++)
{
log_f("\nRecover User data");
fscanf(fp,"%d %s\n",&bd,tempstr);
if(bd == -1) break;
accept_re(bd);
load_ply(tempstr,&ply_ptr);
Ply[bd].ply = ply_ptr;
free_crt(Ply[bd].ply);
FD_SET(bd,&Sockets);
if(load_ply(tempstr,&Ply[bd].ply) < 0) continue;
Ply[bd].ply->fd = bd;
init_ply(Ply[bd].ply);
init_alias(Ply[bd].ply);
Ply[bd].io->encstr = 0;
}
Waitsock = atoi(argv[2]);
FD_SET(Waitsock,&Sockets);
fclose(fp);
}
else
{
sock_init(Port,0);
}
unlink(file);
이부분은 main.c 입니다.
중요한것...
int Port,int Waitsock,fd_set Sockets 를 전역으로 선언해주세요..
기존에 선언된것들은 제거하세요...
따로 간단한 해더로 만드셔서 선언해둬 됩니당.
하나가 더있습니다.
void accept_re(int fd)
{
int len, i=1, pid;
iobuf *io;
extra *extr;
struct linger ling;
struct sockaddr_in addr;
char *inetname(), path[127],
port1str[10], port2str[10];
addr.sin_family = AF_INET;
addr.sin_port = htons(Port);
addr.sin_addr.s_addr = INADDR_ANY;
len = sizeof(struct sockaddr_in);
if (fd < 0)
printf("Error");
io = (iobuf *)malloc(sizeof(iobuf)+128);
extr = (extra *)malloc(sizeof(extra)+128);
if(!io || !extr)
merror("accept_connect", FATAL);
Ply[fd].io = io;
Ply[fd].ply = 0;
Ply[fd].extr = extr;
zero(extr, sizeof(extra));
zero(io, sizeof(iobuf));
io->ltime = time(0);
io->intrpt = 1;
}
그럼 대충 된듯...
안고친 부분이 있는데 고대로 쓰시면요...
리붓후에 사용자들 접속지주소가 사라질껍니다 아마도..? 맞나 체크 안해봤음..
그건 파일 저장할때 주소도 같이 넣고 로딩할때 다시 넣어주면 됩니다..
어렵지 않겟죠?
그럼.......
- 히네시스 -
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
77 | 무한대전 방 데이터 Convert | 그리움 | 2007.11.23 | 491 |
76 | 몹 소환하여 소환몹이 대신 싸우게 하기 | 그리움 | 2007.11.23 | 27435 |
75 | 물건, 몹의 번호 찾아내기. | 그리움 | 2007.07.04 | 456 |
74 | *괴물이름 방폭 버그 수정 | 그리움 | 2007.04.12 | 585 |
73 | 게시판 버그 해결 방법. | 그리움 | 2007.04.12 | 528 |
72 | 연타기능 - 연타수 자동 | 그리움 | 2007.04.12 | 501 |
71 | 연타기능 - 직업별 연타 | 그리움 | 2007.04.12 | 534 |
70 | 감옥/퇴소 | 그리움 | 2007.04.12 | 390 |
69 | 운영자명령 "보고" | 그리움 | 2007.04.12 | 327 |
68 | 낚시 | 그리움 | 2007.04.12 | 338 |
67 | 방전체 공격루틴 #2 | 그리움 | 2007.04.12 | 332 |
» | 온라인 리붓 | 그리움 | 2007.04.12 | 342 |
65 | Mordor에 있는 몹 소환 소스 | 그리움 | 2007.04.12 | 332 |
64 | 귀환장소 수정판 | 그리움 | 2007.04.12 | 313 |
63 | 프롬프트 그래프화 #2 | 그리움 | 2007.04.12 | 340 |
62 | 주민등록번호 검사 소스 | 그리움 | 2007.04.12 | 476 |
61 | 프롬프트 그래프화 | 그리움 | 2007.04.12 | 315 |
60 | 이동하는 몹 | 그리움 | 2007.04.12 | 334 |
59 | 머드에서 몹 심기 | 그리움 | 2007.04.12 | 344 |
58 | 개척 소스 | 그리움 | 2007.04.12 | 354 |