머드클럽
머드게임이란?
게임은 어떤 환경에서?
본격적으로 게임해 볼까?
배너교환
머드강좌
일반 머드강좌
성천사님의 머드강좌
혼님의 머드강좌
방울꽃님의 머드강좌
리트님의 머드강좌
2Soo님의 머드강좌
내머드소개하기
접속가능머드
내머드소개하기
자료실
접속 프로그램
머드소스
머드 유틸리티
기타
커뮤니티
공지사항
등업신청
머드클럽에바란다
자유 게시판
질문 AND 답변
머드클럽 갤러리
구인구직
머드게임소개
사신전(死神戰)
사신전 소개
사신전 맵
사신전 명령어 모음집
천명(天命)
천명 소개
천명 맵
천명 명령어 모음집
마이페이지
로그인
회원가입
계정찾기
로그인
회원가입
계정찾기
텍스트머드클럽
검색
[흑염]기술의 지속시간과 향상 능력치를 call_out 없이 구현.
흑염기사
1
3,114
0
0
2004-08-12 18:13:42
안녕하세요. 머드 천명의 처음부터 지금까지 코더와 기획을 맞고있는 흑염입니다. <br />맞춤법이나 문법이 틀리더라도 양해 부탁드립니다. <br />그리고 올려지는 코드들은 그냥 무작정 붙여넣으면 아니되고 맞는 위치에 <br />( 변수 선언부는 위쪽에 코드는 아래쪽에...) 넣어주셔야 정상적으로 작동합니다. <br />혹은 제가 쓴 코드중 오타가 있을수도 있으므로 (;를 까먹었다던가 하는..) 지적 부탁드립니다. <br /> <br /> <br />지속시간이 있는 기술이나 상태를 구현하는 방법을 설명해 보도록 하겠습니다. <br />(이 방식은 현재 천명에서 사용되고 있습니다.) <br />여러 방법이 있겠지만 저는 call_out()을 쓰지 않고 heart_beat()녀석을 수정하여 콜아웃 부하를 줄이는 쪽으로 하였습니다. <br /> <br />자 일단 자신에게 다음과 같은 코드가 적용됩니다. (테스트용 명령어를 만들어서 해 보세요.) <br /> <br />this_player()->set(<font color="#ff00ff">"상태/흑염기술"</font>, ([ <font color="#ff00ff">"지속"</font> : <font color="#ff00ff">5</font>, <font color="#ff00ff">"해제표현"</font> : this_player()->query(<font color="#ff00ff">"이름"</font>)+<font color="#ff00ff">"에게 걸려있던 기술이 풀립니다."</font>, <font color="#ff00ff">"향상"</font> : ([ <font color="#ff00ff">"힘"</font> : <font color="#ff00ff">999</font>, <font color="#ff00ff">"민첩"</font> : <font color="#ff00ff">100</font> ]) ]) ); <br /> <br />this_player() 즉 자신에게 상태라는 플래그 안에 흑염기술이라는 플래그를 셋팅합니다. (이런 구조를 가지는 플래그를 mapping 이라고 합니다.) <br /> <br />플래그를 트리구조로 표시하자면... <br /> <br /> <br /> 상태 -- 흑염기술 -- 지속 -- <font color="#ff00ff">5</font> <br /> | <br /> -- 해제표현 -- <font color="#ff00ff">"흑염에게 걸려있던 기술이 풀립니다."</font> <br /> | <br /> -- 향상 -- 민첩 -- <font color="#ff00ff">100</font> <br /> | <br /> -- 힘 -- <font color="#ff00ff">999</font> <br /> <br />이런 상태가 됩니다. <br />만약 상태에 또 다른 기술이 추가된다면 흑염기술 아래로 다른 가지가 추가되겠죠. <br /> <br />자 그럼 이 플래그들이 제 구실을 할 수 있도록 구현해 봅시다. <br /> <br />먼저 지속 시간을 감소시켜 주며 해제표현 메세지 처리와 상태 종료 처리를 해주는 부분을 구현해 봅시다. <br /> <br />/std/user.c에 <font color="#2e8b57"><b>void</b></font> heart_beat()함수를 수정할 것입니다. <br />이 함수는 사용자의 매 턴마다 호출되는 곳이며 사용자의 공격턴 처리를 하는 함수를 불러주는 곳이기도 합니다. <br /> <br />다음의 코드를 continue_attack(); 의 앞이나 뒤 부분에 적당히 넣으시거나 따로 함수를 만드셔서 호출하게 하셔도 좋습니다. <br /> <br /> mapping mapp; <font color="#0000ff">// 상태 플래그의 포인터를 담을 맵핑 변수 선언. (맵핑값의 플래그를 변수에 대입시킬 경우 포인터로 들어가게 됩니다.)</font> <br /> <font color="#0000ff">// query("상태") 남발을 피해 가독성을 높이자 추가한 변수로. 반드시 필요는 없습니다.</font> <br /> string *key2; <font color="#0000ff">// LPC에선 변수 앞에 *를 넣을 경우 Array(배열)로 선언되게 됩니다.</font> <br /> <br /> <font color="#804040"><b>if</b></font>(query(<font color="#ff00ff">"상태"</font>)) <font color="#0000ff">// 사용자에게 상태 플래그가 있을 경우.</font> <br /> { <br /> mapp = query(<font color="#ff00ff">"상태"</font>); <font color="#0000ff">// 상태 플래그를 mapp변수에 대입.</font> <br /> key2 = keys(mapp); <font color="#0000ff">// 상태 플래그안에 있는 키값(set("상태/???") 중 ???들을 모두 받아옵니다.)</font> <br /> <font color="#804040"><b>for</b></font>(<font color="#2e8b57"><b>int</b></font> i = <font color="#ff00ff">0</font>; i < <font color="#804040"><b>sizeof</b></font>(key2);i++) <font color="#0000ff">// 키의 갯수만큼(상태 저장된 기술 갯수 만큼) 루프를 돕니다.</font> <br /> { <br /> <font color="#804040"><b>if</b></font>(intp(query(<font color="#ff00ff">"상태/"</font>+key2[i])) || query(<font color="#ff00ff">"상태/"</font>+key2[i]+<font color="#ff00ff">"/지속"</font>) <= <font color="#ff00ff">0</font>) <font color="#804040"><b>continue</b></font>; <br /> <font color="#0000ff">// 지속시간 설정되지 않았거나 set("상태/기술",1); 이런식으로 되어있을 경우 무시하고 다음 기술로 넘어갑니다.</font> <br /> <br /> add(<font color="#ff00ff">"상태/"</font>+key2[i]+<font color="#ff00ff">"/지속"</font>,-<font color="#ff00ff">1</font>); <font color="#0000ff">// 지속시간을 -1 해줍니다.</font> <br /> <font color="#804040"><b>if</b></font>(query(<font color="#ff00ff">"상태/"</font>+key2[i]+<font color="#ff00ff">"/지속"</font>) <= <font color="#ff00ff">0</font>) <font color="#0000ff">// 만약 -1한 지속 시간이 0이거나 그보다 작을 경우..(작을일은 없겠습니다만...)</font> <br /> { <br /> <font color="#804040"><b>if</b></font>(query(<font color="#ff00ff">"상태/"</font>+key2[i]+<font color="#ff00ff">"/해제표현"</font>)) <font color="#0000ff">// 만약 해제표현이 있을 경우...</font> <br /> { <br /> <br /> say(<font color="#ff00ff">"</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>+query(<font color="#ff00ff">"상태/"</font>+key2[i]+<font color="#ff00ff">"/해제표현"</font>)+<font color="#ff00ff">"</font><font color="#6a5acd">\n\n</font><font color="#ff00ff">"</font>); <font color="#0000ff">// 출력해 줍니다.</font> <br /> write(<font color="#ff00ff">"</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>+query(<font color="#ff00ff">"상태/"</font>+key2[i]+<font color="#ff00ff">"/해제표현"</font>)+<font color="#ff00ff">"</font><font color="#6a5acd">\n\n</font><font color="#ff00ff">"</font>); <br /> } <br /> <br /> delete(<font color="#ff00ff">"상태/"</font>+key2[i]); <font color="#0000ff">// 지속시간이 다 되었으므로 상태 플래그에서 현재 기술을 삭제해 줍니다.</font> <br /> calc_armor_class(); <font color="#0000ff">// 기술 변동으로 인한 향상, 감소 수치변화를 적용해 줍니다.</font> <br /> } <br /> } <br /> } <br /> <br />여기서 calc_armor_class()를 왜 호출하는지 의문을 가지실 수 있습니다. <br />이 함수는 /std/body/attack.c에 위치하며 사용자가 방어구를 바꿔 입을 경우 호출되는 함수입니다. <br />즉 현재 사용자 상태에 따라서 방어력을 계산해 주는 함수이죠. <br />이곳을 수정하여 상태 플래그에 있던 향상 부분을 처리해 주도록 하겠습니다. <br /> <br />일단 이 함수를 맨 위에 추가해 줍니다. <br />mapping으로된 플래그를 받아 캐릭터의 향상 플래그에 누적시켜 주는 기능을 합니다. <br /> <br /> <br /><font color="#2e8b57"><b>void</b></font> stat_up(mapping member) <font color="#0000ff">// member에는 ([ "힘" : 999, "지력" : 999 ]) 와 같은 형식의 맵핑값이 전해져야 합니다.</font> <br />{ <br /> string *member2; <br /> <br /> member2 = member && mapp(member) ? keys(member) : (<span style="background-color: #ff0000"><font color="#ffffff">{</font></span> <span style="background-color: #ff0000"><font color="#ffffff">}</font></span>); <br /> <br /> <font color="#804040"><b>for</b></font>(<font color="#2e8b57"><b>int</b></font> i = <font color="#ff00ff">0</font>; i < <font color="#804040"><b>sizeof</b></font>(member);i++) <br /> { <br /> add(<font color="#ff00ff">"향상/"</font>+member2[i],member[member2[i]]); <br /> } <br />} <br /> <br /><font color="#2e8b57"><b>int</b></font> calc_armor_class()를 수정해 봅시다. <br /> <br />맨 앞부분에 추가해 줍니다. <br /> <br /> string *key; <br /> mapping member; <br /> <br /> delete(<font color="#ff00ff">"향상"</font>); <font color="#0000ff">//재 계산이 필요하므로 향상 플래그를 초기화 시켜줍니다.</font> <br /> <font color="#804040"><b>if</b></font>(query(<font color="#ff00ff">"상태"</font>)) <font color="#0000ff">// 상태가 있을경우.</font> <br /> { <br /> member = query(<font color="#ff00ff">"상태"</font>) ; <br /> key = member && mapp(member) ? keys(member) : (<span style="background-color: #ff0000"><font color="#ffffff">{</font></span> <span style="background-color: #ff0000"><font color="#ffffff">}</font></span>); <br /> <font color="#804040"><b>for</b></font>(i =<font color="#ff00ff">0</font>; i < <font color="#804040"><b>sizeof</b></font>(member);i++) <br /> { <br /> <font color="#804040"><b>if</b></font>(query(<font color="#ff00ff">"상태/"</font>+key[i]+<font color="#ff00ff">"/향상"</font>)) stat_up(query(<font color="#ff00ff">"무공향상/"</font>+key[i]+<font color="#ff00ff">"/향상"</font>)); <br /> <font color="#0000ff">// 만약 해당 상태에 향상 플래그가 지정되어 있을 경우 stat_up()을 호출한다.</font> <br /> } <br /> } <br /> <br />자 이제 calc_armor_class()가 호출될때 마다 상태에 지정된 기술들의 향상수치가 <font color="#ff00ff">"향상"</font>플래그에 모두 더해져 지정될 것입니다. <br />이 플래그를 데미지 계산이나 성공률 계산 등등 능력치나 특성 수치를 참고로 하는 곳에 +query(<font color="#ff00ff">"향상/힘"</font>) 이런식으로 더해주면 됩니다. <br />반드시 특성치에만 한하지 않고 은둔술을 쓰면 <font color="#ff00ff">"은둔"</font>이 <font color="#ff00ff">1</font> 향상되게 하여 몹이 선공을 할때 캐릭터의 <font color="#ff00ff">"향상/은둔"</font> 값이 있을경우 <br />선공을 하지 않는 다던가 하는 응용법이 다양하게 존재합니다. <br /> <br /> <br /> <br />
0
0
새글
답변
수정
삭제
최신목록
전체목록
은행 시스템 만들기!
없는 명령어를 입력했을때 나오는 '^^;' 바꾸기
1
Comments
박대성
2004.08.14(토) 오전 08:59:10
답변
아하.. 이렇게도 할수 있겠군요.. 상당히 좋은 방식
코멘트를 삭제할 비밀번호를 입력하세요.
비밀번호:
댓글에 답하기
입력
닫기
정회원 이상만 코멘트 쓰기가 가능합니다.
총 게시물 107개 / 검색된 게시물: 107개
누구든지 머드 강의를 올리수 있는 곳입니다...^^
[circle]
서클의 지도 공부..
0
3078
0
0
머드짱
2004-09-03
[천무혼]
은행 시스템 만들기!
2
2948
0
0
천무혼
2004-08-12
[흑염]
기술의 지속시간과 향상 능력치를 call_out 없이 구현.
1
3115
0
0
흑염기사
2004-08-12
[천무혼]
없는 명령어를 입력했을때 나오는 '^^;' 바꾸기
3
2782
0
0
천무혼
2004-08-09
[기타]
vi 에디터의 안시에 관한 내용입니다.
1
3048
0
0
머드사랑(1)
2004-07-26
[circle]
Ascii Player files 패치된 써클머드 한글화 시키기!
2
3347
0
0
미르
2004-07-06
[흑염]
[천명]노점상인.c 천명 삼일장에서 사용되고있는 노점상인 쏘스.
1
4370
0
0
흑염기사
2004-06-13
[흑염]
[천명] save_data.c - 특정 오브젝트의 플래그를 아이템 파일처럼 저장시켜준다.
0
2702
0
0
흑염기사
2004-06-13
[흑염]
[천명] req_string.c - mapping을 보기좋게 string으로.
0
2795
0
0
흑염기사
2004-06-13
[mordor]
상점개설
3
3040
0
0
GrayRese
2004-05-27
[mordor]
게시판의 기능 편하게..(위로 올라가고, 글쓰기기능 추가)
1
3229
0
0
달마
2004-05-19
[circle]
hanlp의 지도.c
0
3334
0
0
사천건
2004-05-18
[circle]
시간의문 경험치 못먹는거 먹게하는방법(허접이라두 잘봐주세영)
4
2811
0
0
손문
2004-05-07
[hanlp]
[천명] 완치 이벤트 ......
2
3154
0
0
어두운별
2004-04-30
[기타]
gdb 사용법!
3
4529
0
0
GrayRese
2004-04-23
[hanlp]
현재 습득한 기술 목록 보이기.
2
2928
0
0
박대성
2004-04-19
[circle]
새천사님의 수정 사항에 추가할점..
1
2802
0
0
푸른가람
2004-04-03
[hanlp]
10초간 데미지와 방어력 상승
2
2968
0
0
박대성
2004-03-14
[mordor]
*완치 기능?;; 허접해요^-^;;
1
2987
0
0
탈퇴
2004-02-28
[mordor]
순위 소스 입니다.
0
4294
0
0
달마
2004-02-28
이전
1
2
3
4
5
6
다음
검색
글쓰기
최신목록
전체목록
시작일
종료일
분류별 검색
전체보기
기타
circle
hanlp
mordor
소스분석
흑염
천무혼
검색어
이름
제목
내용
검색
닫기
로그인
회원가입
계정찾기
개인정보처리방침
이용약관
PC화면
Copyright (c) 텍스트머드클럽. All rights reserved.
쪽지를 전송하고 있습니다. 잠시 기다려주세요.
쪽지보내기
받는이(ID/닉네임)
닉네임으로 입력
내용
쪽지가 도착하였습니다.
쪽지함
쪽지 내용을 읽어오고 있습니다. 잠시 기다려주세요.
--