방전체 공격루틴 #2
2007.04.12 13:09
Ultra BBS
무한 강좌 (fmz13a2) [담당자:작은용 님] ( 4/ 29)
───────────────────────────────────────
제목 : ##방전체 공격 루틴입니다... 줄수 : 0/103
번호 : 4 [12/04-07:31] 조회 : 64
------------------------------------------------------------------------------
저희 머드에서도 사용해본 것입니다..
int room_attack(ply_ptr, cmnd)
creature *ply_ptr;
cmd *cmnd;
{
room *rom_ptr;
int fd, m, n, mpdown;
ctag *cp, *ctemp;
long i, t;
fd = ply_ptr->fd;
rom_ptr = ply_ptr->parent_rom;
/* 직업 체크 */
if(ply_ptr->class < CARETAKER) {
print(fd, "이건 초인만 쓸수 있어요!!!");
return(0);
}
/* 실명 상태인지 체크. 벙어리 상태인지 체크등 추가하면 됨. */
if(F_ISSET(ply_ptr, PBLIND)) {
print(fd, "아무것도 보이지 않습니다.");
return(0);
}
/* 도력 소모량 : 최대 도력의 20%를 사용 */
/* mpdown = 100; 등과 같이 사용하면 됨. */
mpdown = (ply_ptr->mpmax) * 2 /10;
if(ply_ptr->mpcur < mpdown) {
print(fd, "당신의 도력이 부족합니다.");
return(0);
}
/* 딜레이의 체크 */
/* 먼저 mtype.h 에서 LT_RATTCK 이라는 것을 정의해둬야 함 */
i = LT(ply_ptr, LT_RATTCK);
t = time(0);
if(i > t) {
please_wait(fd, i-t);
return(0);
}
ply_ptr->lasttime[LT_RATTCK].ltime = t;
ply_ptr->lasttime[LT_RATTCK].interval = 20L; /* 딜레이가 20초임 */
ply_ptr->mpcur -= mpdown;
F_CLR(ply_ptr, PHIDDN); /* 은신 상태 해제 */
if(F_ISSET(ply_ptr, PINVIS)) { /* 은둔법 걸고 있을 경우 */
F_CLR(ply_ptr, PINVIS);
print(fd, "당신의 모습이 서서히 드러납니다.\n");
broadcast_rom(fd, ply_ptr->rom_num
, "\n%M의 모습이 서서히 드러납니다.", ply_ptr);
}
print(fd, "당신은 어쩌구저쩌구 하여서 방전체 공격을 합니다.");
broadcast_rom(fd, ply_ptr->rom_num
, "\n%M%j 어쩌구저쩌구 하여서 방전체 공격을 합니다.", ply_ptr, "1");
/* 여기서부터가 실제 공격을 들어가는 부분 */
n = mdice(ply_ptr) + mpdown/5;
/* 공격의 타격치 계산 : 아래 while 문에서 중간에 넣어도 관계없음 */
cp = rom_ptr->first_mon;
while(cp) {
ctemp = cp->next_tag; /* ctemp를 사용하는 이유는, 공격으로 인해
몹이 죽을 경우를 대비해서 사용
사용하지 않으면, 버그 생김 -.- */
/* 공격할수 없는 몹 체크 */
if(F_ISSET(cp->crt, MUNKIL)) {
cp = ctemp;
continue;
}
if(cp->crt == ply_ptr) {
cp = ctemp;
continue;
} /* 몹이 이 기술을 사용할 경우를 대비해서 넣어둠.
그럴 가능성은 없으므로 빼도 됨. --; */
m = MIN(cp->crt->hpcur, n);
add_enm_crt(ply_ptr->name, cp->crt);
add_enm_dmg(ply_ptr->name, cp->crt, m);
cp->crt->hpcur -= n;
printa(fd, "\n%M%j 어쩌구하면서 기술에 맞았습니다.", cp->crt, "1");
broadcast_rom(fd, rom_ptr->rom_num
, "\n%M%j 어쩌구하면서 기술에 맞았습니다.", cp->crt, "1");
if(cp->crt->hpcur < 1) { /* 죽였을 경우 */
printa(fd, "\n당신은 %M%j 죽였습니다.", cp->crt,"3");
broadcast_rom(fd, cp->crt->rom_num
, "\n%M%j %M%j 죽였습니다.", ply_ptr,"1", cp->crt, "3");
die(cp->crt, ply_ptr);
}
else /* 자동 도망 체크 */
check_for_flee(ply_ptr, cp->crt);
cp = ctemp;
}
return(0);
}
무한 강좌 (fmz13a2) [담당자:작은용 님] ( 4/ 29)
───────────────────────────────────────
제목 : ##방전체 공격 루틴입니다... 줄수 : 0/103
번호 : 4 [12/04-07:31] 조회 : 64
------------------------------------------------------------------------------
저희 머드에서도 사용해본 것입니다..
int room_attack(ply_ptr, cmnd)
creature *ply_ptr;
cmd *cmnd;
{
room *rom_ptr;
int fd, m, n, mpdown;
ctag *cp, *ctemp;
long i, t;
fd = ply_ptr->fd;
rom_ptr = ply_ptr->parent_rom;
/* 직업 체크 */
if(ply_ptr->class < CARETAKER) {
print(fd, "이건 초인만 쓸수 있어요!!!");
return(0);
}
/* 실명 상태인지 체크. 벙어리 상태인지 체크등 추가하면 됨. */
if(F_ISSET(ply_ptr, PBLIND)) {
print(fd, "아무것도 보이지 않습니다.");
return(0);
}
/* 도력 소모량 : 최대 도력의 20%를 사용 */
/* mpdown = 100; 등과 같이 사용하면 됨. */
mpdown = (ply_ptr->mpmax) * 2 /10;
if(ply_ptr->mpcur < mpdown) {
print(fd, "당신의 도력이 부족합니다.");
return(0);
}
/* 딜레이의 체크 */
/* 먼저 mtype.h 에서 LT_RATTCK 이라는 것을 정의해둬야 함 */
i = LT(ply_ptr, LT_RATTCK);
t = time(0);
if(i > t) {
please_wait(fd, i-t);
return(0);
}
ply_ptr->lasttime[LT_RATTCK].ltime = t;
ply_ptr->lasttime[LT_RATTCK].interval = 20L; /* 딜레이가 20초임 */
ply_ptr->mpcur -= mpdown;
F_CLR(ply_ptr, PHIDDN); /* 은신 상태 해제 */
if(F_ISSET(ply_ptr, PINVIS)) { /* 은둔법 걸고 있을 경우 */
F_CLR(ply_ptr, PINVIS);
print(fd, "당신의 모습이 서서히 드러납니다.\n");
broadcast_rom(fd, ply_ptr->rom_num
, "\n%M의 모습이 서서히 드러납니다.", ply_ptr);
}
print(fd, "당신은 어쩌구저쩌구 하여서 방전체 공격을 합니다.");
broadcast_rom(fd, ply_ptr->rom_num
, "\n%M%j 어쩌구저쩌구 하여서 방전체 공격을 합니다.", ply_ptr, "1");
/* 여기서부터가 실제 공격을 들어가는 부분 */
n = mdice(ply_ptr) + mpdown/5;
/* 공격의 타격치 계산 : 아래 while 문에서 중간에 넣어도 관계없음 */
cp = rom_ptr->first_mon;
while(cp) {
ctemp = cp->next_tag; /* ctemp를 사용하는 이유는, 공격으로 인해
몹이 죽을 경우를 대비해서 사용
사용하지 않으면, 버그 생김 -.- */
/* 공격할수 없는 몹 체크 */
if(F_ISSET(cp->crt, MUNKIL)) {
cp = ctemp;
continue;
}
if(cp->crt == ply_ptr) {
cp = ctemp;
continue;
} /* 몹이 이 기술을 사용할 경우를 대비해서 넣어둠.
그럴 가능성은 없으므로 빼도 됨. --; */
m = MIN(cp->crt->hpcur, n);
add_enm_crt(ply_ptr->name, cp->crt);
add_enm_dmg(ply_ptr->name, cp->crt, m);
cp->crt->hpcur -= n;
printa(fd, "\n%M%j 어쩌구하면서 기술에 맞았습니다.", cp->crt, "1");
broadcast_rom(fd, rom_ptr->rom_num
, "\n%M%j 어쩌구하면서 기술에 맞았습니다.", cp->crt, "1");
if(cp->crt->hpcur < 1) { /* 죽였을 경우 */
printa(fd, "\n당신은 %M%j 죽였습니다.", cp->crt,"3");
broadcast_rom(fd, cp->crt->rom_num
, "\n%M%j %M%j 죽였습니다.", ply_ptr,"1", cp->crt, "3");
die(cp->crt, ply_ptr);
}
else /* 자동 도망 체크 */
check_for_flee(ply_ptr, cp->crt);
cp = ctemp;
}
return(0);
}
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
77 | 무한대전 방 데이터 Convert | 그리움 | 2007.11.23 | 491 |
76 | 몹 소환하여 소환몹이 대신 싸우게 하기 | 그리움 | 2007.11.23 | 27429 |
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 |
» | 방전체 공격루틴 #2 | 그리움 | 2007.04.12 | 332 |
66 | 온라인 리붓 | 그리움 | 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 |