조회 수 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
번호 제목 글쓴이 날짜 조회 수
8628 쯔꾸르 VX Ace 게임 오류 Alert! 1 가세공세 2017.02.02 6899
8627 alert라면서 게임이실행되지않아요 1 boru3990 2017.02.01 932
8626 인디사이드로 네코플레이어(모바일) 게임 만들때 캐쉬 시스템은 있나요? 2 file 신호등 2017.02.01 725
8625 케에데님께서 원하시는 설명 - 스압주의 - 6 lklslel 2017.01.31 2733
8624 파일 바로 뒤에 exe 파일을 넣었는데 실행기가 안보입니다. file 암통곡 2017.01.25 461
8623 이게 정확히 무슨 오류죠? 1 file DuranDuran 2017.01.25 730
8622 스크립트관련 질문입니다. 엽여비소엽 2017.01.24 372
» RPG MV 자바 스크립트 잘아시는분 질문드려봐요. 4 케에데 2017.01.23 1212
8620 [사진첨부]RPG MAKER MV의 자원관리의 가져오기 버튼을 눌렀더니 도트그림이 사라졌어요. 고물떡 2017.01.22 538
8619 rpg vx ace 강좌 질문 기초적인것 여러가지 아래아 2017.01.20 444
8618 네코rpg xp 쯔꾸르게임 버전업후 오류 1 file 캣킷 2017.01.19 3011
8617 설치안된게잇고설치된건없네요.. 초코뺭 2017.01.19 265
8616 게임 파일 올리고 나서 드래곤규 2017.01.14 253
8615 apk서비스이용관련)유료게임판매시 수익배분이 어떻게되는지알고싶습니다. 5 file 창문깬산타 2017.01.11 854
8614 이벤트를 움직이게 하고 맵을 나갔다오면 제자리에 돌아가있습니다. 1 뀨뀨까까 2017.01.09 729
8613 스크립트로 갤러리 해금 어떻게 하나요? c22sue 2017.01.07 398
8612 [MV] 캐릭터의 기본 보행속도를 줄이려면 어떻게 하나요? 2 흰자 2017.01.06 2315
8611 아오오니 파일 질문 Limes 2017.01.06 435
8610 긂긂 그림 새준 2017.01.06 313
8609 메뉴질문 새준 2017.01.06 335
Board Pagination Prev 1 ... 6 7 8 9 10 11 12 13 14 15 ... 442 Next
/ 442






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

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