조회 수 1212 추천 수 0 댓글 4
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

저는 스크립트 문외한입니다..만 구글링의 힘을 빌려서 어느정도 스크립트를 짜집기 해봤습니다.

 

RPG MV 에 있는 변수 대입값 스크립트 (script) 란에 다음과 같이 입력했습니다.

 

if (target.result().critical) {

($gameActors.actor(7).mat *35.8 - $gameTroop.members()[0].mdf * 2)*2}

else {

$gameActors.actor(7).mat *35.8 - $gameTroop.members()[0].mdf * 2}

end

 

하지만 이대로 쓰면 에러가 납니다. target이나 result 에 대한 정의가 되지 않았다면서 말이죠.

 

조건부에 공격시 치명타가 터졌는지 안터졌는지 판별하는 부분을 어떻게 코딩 해야 하는지 알고 싶습니다.

 

(글로벌 변수니 인스턴스 변수니 아직 개념이 안잡혀서 모릅니다. ㅠ)

?
  • ?
    huguduk 2017.01.23 20:25
    스크립트 이전에 간단한 코딩공부를 하시면 도움이 될것같습니다.

    함수의 전체스코프를 올려주시지 않아서 원인은 알수없습니다만, 아마도 정의되지않은 변수 target혹은

    target의 result함수를 참조하지 못해서 문제가 생기는것같습니다.
  • profile
    lklslel 2017.01.27 01:52

    정확하게 어떤 기능을 만드시려는지 설명이 우선 필요합니다.

    어떤 상황에서 어느 쪽이 어떤 효과를 받는지 등등의

    일련의 흐름을 알려주시지 않으면 정확하게 캐치해드릴 수 없습니다.



    그리고 모호하게 생각하는 부분에 대해서 먼저 이야기하겠습니다.


    1. $gameActors 부분에서 $gameActors.actor(7)부분은


    Game_Action.prototype.subject = function() {
    if (this._subjectActorId > 0) {
    return $gameActors.actor(this._subjectActorId);
    } else {
    return $gameTroop.members()[this._subjectEnemyIndex];
    }
    };


    를 참고하셔서 작성하신 것 같은데

    맵을 이동하거나 바뀔 때마다 액터의 배열 인덱스 번호는 바뀌게 되어

    현재 맵에서 사용할 수 없는 this._subjectActorId 일 경우에는 제대로

    실행이 되지 않을 수 있습니다.


    우선 this._subjectActorId에 해당하는 액터가 존재하는가를 살펴야합니다.



    2. target.result().critical 이부분은 특정 객체(Game_Action 등) 내에서

    사용되는 외부로부터 전달되어 온 파라미터 변수 값을 기반으로

    로직이 기동하는 것이기 때문에 그냥 쓰게 되면 존재하지 않거나

    올바르지 않은 값이라는 에러가 뜨게 됩니다.


    Game_Action 객체는 배틀러의 각종 행동에 대한 처리를 담당합니다.


    배틀러로 등록된

    $gameParty.members()
    $gameTroop.members()

    에 연관된 모든 행동에 연관된다고 보시면 되겠습니다.


    그러므로 target.result().critical처럼 사용하시려면 target을

    가져올 수 있는 시점에 대해서 먼저 아셔야 합니다.

    BattleManager.startAction() 함수를 살펴보시면

    (js/rpg_manager.js : 2138줄)

    실행하는 중에 tartget들이 생성됩니다.


    BattleManager.startAction = function() {
    var subject = this._subject;
    var action = subject.currentAction();
    var targets = action.makeTargets();
    this._phase = 'action';
    this._action = action;
    this._targets = targets;
    subject.useItem(action.item());
    this._action.applyGlobal();
    this.refreshStatus();
    this._logWindow.startAction(subject, action, targets);
    };


    살펴보시면 여기에서는 직접적으로 실행해서

    크리티컬이 터졌는지까지는 알 수 없습니다.

    targets로 묶여있기 때문인데요.

    Game_Action.prototype.apply = function(target) {
    var result = target.result();
    this.subject().clearResult();
    result.clear();
    result.used = this.testApply(target);
    result.missed = (result.used && Math.random() >= this.itemHit(target));
    result.evaded = (!result.missed && Math.random() < this.itemEva(target));
    result.physical = this.isPhysical();
    result.drain = this.isDrain();
    if (result.isHit()) {
    if (this.item().damage.type > 0) {
    result.critical = (Math.random() < this.itemCri(target));
    var value = this.makeDamageValue(target, result.critical);
    this.executeDamage(target, value);
    }
    this.item().effects.forEach(function(effect) {
    this.applyItemEffect(target, effect);
    }, this);
    this.applyItemUserEffect(target);
    }
    };


    (js/rpg_object.js : 1644줄)

    를 살펴보시게 되면 케에데님께서 원하시는 부분이 나옵니다.

    result.critical = (Math.random() < this.itemCri(target));




    해당부분은 BattleManager 객체에서 전투시에 모두 접근이 가능합니다.

    BattleManager..actor()로 즉각적으로

    $gameParty.members()[this._actorIndex] or 대상없음

    으로 값을 알 수 있고

    전투시가 아니면 제대로된 값을 얻기 힘듭니다.


    추가적으로 모르시겠다면 질문해주세요.

  • ?
    케에데 2017.01.31 12:16

    긴 답글에 일단 감사드립니다.
    만들고자 하는 기능은 Yanfly 의 사이드베틀(시컨스1번) 플러그인에 있는 전투중 목표(user나 target(대상)을 정해서 HP를 증가시킬지 감소시킬지를 정하는 시컨스에서 HP증감양을 조절할때 정수와 변수로 조절하는 기능이 있는데 거기서 정수가 아닌 변수로 사용하고자 합니다.
    HP -100, user // HP +variable 13, target 이런식의 시컨스입니다.

    => 첫번째 유저의 체력을 100만큼 감소 // 둘째 변수13값 만큼 대상의 체력회복.


    그래서 저 변수값을 시컨스에 불러와서 쓰려고 하는데 문제는 HP 데미지를 만들고자 할때 크리티컬이 터졌는지 안터졌는지에 따라
    데미지의 양을 조절해서 대입하고자 하는건데 변수안에 있는 대입값 스크립트란에 코딩을 어찌해야 되는지를 몰라 질문드린겁니다.
    크리티컬이 터졌으면 2배의 데미지를 크리티컬이 안터졌으면 1배의 데미지를 이런식으로..

     

    $gameActors.actor(7).mat *35.8 - $gameTroop.members()[0].mdf * 2 => 액터 7번의 마법력 * 35.8 - 적 맴버 0번의 마법방어력 *2

    이부분은 제대로 실행이 되는것으로 확인이 되었습니다.

    다만 if 문을 써서 크리의 여부에 따라 실행값을 두부분으로 나누어야 하는데 조건부에 코딩을 모르겠습니다.

  • profile
    러닝은빛 2017.02.01 13:24

    데미지 값을 바꾸려는 거라면, Damage Core로 데미지 변경과 데미지의 흐름을 매개변수로 조절이 가능합니다.

     

    Damage Core - http://yanfly.moe/2015/11/07/yep-25-damage-core/

     

    모든 스크립트는 스킬 또는 아이템의 메모(Note)란에 적으면 됩니다.

     

    <damage formula>
    if (b.result().critical) {
      value = (a.mat *35.8 - b.mdf * 2)* 2;
    } else {
      value = a.mat *35.8 - b.mdf * 2;
    }
    </damage formula>


List of Articles
번호 제목 글쓴이 날짜 조회 수
8668 [RMMV] 안드로이드용 apk로 빌드하니 Fail to load : img~ 에러가 발생합니다. 8 MVMAKER 2017.04.17 2562
8667 [네코노벨] 선택지 질문 JkzmN 2017.04.16 526
8666 RPGMAKER의 전문가분을 찾고 싶은 심정이네요. 13 정술 2017.04.13 1791
8665 [RMMV] 특정 스위치나 변수값 변동시 다른 이벤트도 동시에 영향주기? 2 file MVMAKER 2017.04.06 689
8664 RPGVXACE는 광고삽입을 할 수 없나요? 2 흔들린콜라 2017.04.05 745
8663 RPG Maker mv 이상한 검은창 dlwndud9 2017.04.03 459
8662 스팀 MV 작동이 중지되었습니다 오류 2 액티팹 2017.04.03 898
8661 [RMMV] 말풍선이 쭉 떠있게 할 순 없을까요? 4 MVMAKER 2017.04.03 771
8660 한가지 질문이 있는데 말이에요 1 MV초보자 2017.04.02 736
8659 안녕하세요! 게임회사 포트폴리오 제작을위해서 알만툴로 게임을 제작중인 학생입니다. 1 헤르모드 2017.03.30 892
8658 [RMMV] MV에서 특정 장비를 장착하고 있을때의 이벤트는 어떻게 구현하죠? 2 허공의경계식 2017.03.30 724
8657 퀘스트 마커와 퀘스트 목록 구현은 어떻게 하는게 좋을까요? 4 MVMAKER 2017.03.30 884
8656 현재 저는 게임 출시 직전 치명적인 버그에 걸렸습니다.좀 도와주세요. 5 file RPG란무엇인가? 2017.03.29 800
8655 [RMVX] 액알 - 플레이어가 레벨업 했을 때만 모두회복되는 방법?? 히토리로랑 2017.03.25 451
8654 존경하는 행님들 Dkdjdos 2017.03.22 292
8653 네코 Rpgxp에 게임을 다운 받아도 게임이 나타나지 않습니다. 1 쿠크다 2017.03.21 731
8652 게임에지장이있어서물어봅니다. 반짝반짝작은별 2017.03.20 274
8651 Rpg maker mv java에대해서 질문드립니다. 1 길가메스 2017.03.17 894
8650 인텔 xdk 써보려고하는데.. 1 file 쭌잉 2017.03.16 330
8649 [VX] 액알 - 일정 변수 초과&다수 몹리젠이 안되는 오류 2 file 히토리로랑 2017.03.16 681
Board Pagination Prev 1 ... 4 5 6 7 8 9 10 11 12 13 ... 442 Next
/ 442






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)