[02] 메서드를 추가해봤으니 심화하여 컨텐츠를 만들어보자! [출처] [02] 메서드를 추가해봤으니 심화하여 컨텐츠를 만들어보자! (@USFM - 메이플스토리 공식 카페) |작성자 enoch_rvn
안녕하세여! 에녹이에여!
이번 강좌는 뭐.. 전에 배웠던것들을 다시 복습하는겸, 실제 컨텐츠를 만들어보자는 의미에서 끄적여봅니다.
일단은 처음에는, 제가 만들어뒀던 컨텐츠를 소개하는겸, 어떤 원리로 돌아가는지 설명해드리려고합니다.

바로 얼마전, 제가 동영상으로 남긴 바이러스 '아포칼립스' 컨텐츠인데요!
오블리비언이라는 아이템을 사용하여, 상대방의 이름을 적으면
같은맵이며, 상대방이 아포칼립스에 감염이되어있을경우, 상대방을 죽이며 경험치를 얻는 아이템이에요!
위의 스크린샷을 보시면 아시겠지만, 1강에서 본것과 똑같은 원리입니다!

너무 똑같은가요? ㅋ.ㅋ

자 여기서 뭔가 다른것들이 보이기 시작합니다.
public void killInfecter(String name) {
if (isMyChannelConnected(name)) {
if (getPlayerStorage().getCharacterByName(name).getClient().getPlayer().apoState() == 1) {
getPlayerStorage().getCharacterByName(name).getClient().getPlayer().getMap().broadcastMessage(MainPacketCreator.startMapEffect("누군가 당신을 저주합니다. '오블리비언' 의 힘으로, 당신의 몸과 마음은 점차 망각되며, 죽음에 이르게 됩니다.", 5120124, true));
getPlayerStorage().getCharacterByName(name).getClient().getPlayer().addHP(-getPlayerStorage().getCharacterByName(name).getClient().getPlayer().getStat().getCurrentMaxHp());
getPlayerStorage().getCharacterByName(name).getClient().getPlayer().gainRC(1000);
getPlayerStorage().getCharacterByName(name).getClient().getPlayer().dropMessage(5, "[시스템] 오블리비언의 저주에대한 위로금으로 후`원포인트 1,000P 획득하셨습니다.");
}
}
}
잘 천천히, 3번만 훑어보세요!
정말로 정말로 간단합니다. 한줄씩 천천히 설명해드릴게요!
public void killInfecter(String name) {
이 부분은 전에 배웠던 public int xxx () { 와는 조금 다른 차이가 있습니다.
전에는 무조건 return 으로, 값을 전달해주어야 작동했지만, 이번엔 그렇지 않습니다.
void 형식을 선언했으며, 돌려주는 값도 없습니다. 그저 이 메서드가 호출되면, 반환되는것이 아닌
내부에서 모든걸 처리하는 메서드입니다. 즉 int 와 void 를 비교하자면,
////// int 소`스 //////
public int test() {
return c.getPlayer().getStat().getLevel();
}
////// int 스크`립트 //////
cm.sendOk("내 레벨은? : " + cm.test());
cm.dispose();
////// 결과 ///////
┌──────── ┐
│ 내 레벨은? : 101 │
└──────── ┘
////// void 소`스 //////
public void test() {
int myLevel = c.getPlayer().getStat().getLevel();
}
////// void 스크`립트 //////
cm.test();
////// 결과 //////
서버에서 캐릭터를 담당하는 변수에 레벨이 담겨있는 상태가된다.
대충 이해가 가셨습니까..?
void 는 작업처리를 담당하며, ex) 레`벨업, ap지급, 메`소지급, 아`이템지급 등
int 는 값 반환처리를 담당합니다. ex) 현재 레`벨, 현재 스`텟, 갖고있는 포`인트, 갖고있는 메`소 등
딱 이렇다고 할 순 없는데, 그냥 이정도로 이해하고계셔도 충분합니다!
그러면 3번째 사진의 소`스코드를 설명해드릴게요.
if (getPlayerStorage().getCharacterByName(name).getClient().getPlayer().apoState() == 1) {
ㄴ 받은 인자값(캐릭터이름) 의 apoState 가 1이면. // 여기서 apoState 는 제가 만든 int 형 메서드입니다. 아포칼립스
감염 상태를 나타내주는 메서드에요.
getPlayerStorage().getCharacterByName(name).getClient().getPlayer().getMap().broadcastMessage(MainPacketCreator.startMapEffect("누군가 당신을 저주합니다. '오블리비언' 의 힘으로, 당신의 몸과 마음은 점차 망각되며, 죽음에 이르게 됩니다.", 5120124, true));
ㄴ 이제 대충 getCharacterByName(name) 까지는 이해가 됬으리라 믿고, 설명해드리겠습니다. getPlayer()
안에 getMap() 이란놈 안에 broadcastMessage 라는 메서드가 있는데, 이 메서드는 그 뭐시더냐
맵 이펙트(캐시템 뿌리기같은) 것을 적용시켜주는 메서드이며, 저 5120124 코드는 엘리트 몬스터를 죽였을때
뿌려지는 이펙트입니다.
getPlayerStorage().getCharacterByName(name).getClient().getPlayer().addHP(-getPlayerStorage().getCharacterByName(name).getClient().getPlayer().getStat().getCurrentMaxHp());
ㄴ 이 부분은 굉장히 여러분들이 많이 당황하셨을거에요. 매우 소`스코드가 길거든요. 저였어도 좆같았을거에요.
하지만 이 소`스코드는 그저, 상대방의 MAXHP 의 값을 가져와 그만큼 데미지를 입히는 소`스에요.
addHP() 메서드가 바로 그 역할을 담당해주는데, add 인데 왜 데미지를 입히느냐! 하시는분들은 인자값을 잘
보시면, - 가 들어간걸 볼 수 있습니다. // 최대 hp를 구하는것은, getPlayer() 아래, getStat() 아래 getCurrentMaxHp()
라는 메서드입니다.
getPlayerStorage().getCharacterByName(name).getClient().getPlayer().gainRC(1000);
getPlayerStorage().getCharacterByName(name).getClient().getPlayer().dropMessage(5, "[시스템] 오블리비언의 저주에대한 위로금으로 후`원포인트 1,000P 획득하셨습니다.");
ㄴ 이제 대충 다 알거아닙니까. dropMessage(5, ""); 부분은 메`이`플 채팅창에서 출력되는 메세지며, 5는 빨강(?) 글씨를
뜻합니다. // 파랑색, 노랑색 있는것으로 압니다.

이제 스`크`립`트 부분입니다.
이 부분은 정말 아무런 설명도 넣지않을겁니다. 정말 궁금하신분들은 댓글달아주시겠죠 (ㅋ,ㅋ)
그리고 왠만하면 01 강좌를 이해하신분들은 대충은 이해하셨을겁니다.

이거슨 간지나는 오블리비언 아`이템!!

제가 지금 개`발하고있는 세계관은 창세 이전, 신의 오른팔인 루시엘이 타락하며 루시퍼로 전략할때의 세계관을 갖고있습니다.

으앙!! 저주받는당!!

휴.. 다행이 감염이 감지되지않아 살아있는모습

운`영`자니까 임의로 감염된다음!
이름을 적어보니!

잘 작동되는 모습입니다. (잘보면 죽어있어요 진짜야.)
다음 강좌에서는 채`널에있는 모든 인원에게 아`이`템을 돌리는(?) 핫타임 아이템이라던지, 그런걸 한번 개`발해보면서
배워가보도록 하겠습니다!
[출처] [02] 메서드를 추가해봤으니 심화하여 컨텐츠를 만들어보자! (@USFM - 메이플스토리 공식 카페) |작성자 enoch_rvn

원나소년 님의 최근 댓글
초보 개발자도 가능합니까? 아직 개발의 ㄱ자도 모르긴하는데.. 2016 06.07 구축하기 쉬운가용? 2016 06.02 흑 ㅜㅜ 팩을 구하고싶은데 ㅠㅠ 구글링하면 나오려나요?... 2016 06.02 라피스 해보고싶네요 정말 어떻게못하나요... 2016 05.31 하핳... 그런게임들은 프리서버 못하는건가요? 2016 05.31