조회 수 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
번호 제목 글쓴이 날짜 조회 수
8828 힐다의 학자금퀘스트 스크립트 관련 질문 5 심심치 2014.10.11 1785
8827 흠...오프닝에 관한 질문인데요. 다크아머 2005.05.28 396
8826 흠...오프닝에 관한 질문인데요. Survivor-c 2005.05.28 562
8825 흠.. 케릭터가 안움직여져요.... 일당백 2005.08.20 398
8824 흠.. 케릭터가 안움직여져요.... 카리스 2005.08.20 305
8823 흠.. 케릭터가 안움직여져요.... ☆무적기사★ 2005.08.21 438
8822 흠.. 맵배치에 관해서.. 1 『덩키동크』 2006.02.20 376
8821 흠.. 맵배치에 관해서.. 아두 2006.02.20 371
8820 흠.. 궁금한거 하나 있는데요.. 1 다크진™ 2005.08.06 420
8819 흠.. rpg2003에 대해서 인데요 꼭좀 알려주시면... 재티s 2005.11.06 907
8818 흠.. 2k만하다가 xp하려는데.. 1 잘생긴넘 2007.02.14 616
8817 흠,, 뭐가 문제인지좀,, 좌표의 이동에대해,, XLostTimesX 2006.01.10 374
8816 흠 그;;; 조건분기그런거 할때 쓰는 명령어좀~~ ☆무적기사★ 2005.08.05 437
8815 아마란스 2005.06.19 260
8814 ★RPG_Maker★ 2005.09.02 476
8813 흑흑 콩나물 2015.05.16 299
8812 흑인rpg왜없어짐? 2 자라토끼 2014.05.18 523
8811 흑백으로 만들기(RPG2003)(빠른답변부탁) 『덩키동크』 2006.05.25 986
8810 흑백으로 만들기(RPG2003)(빠른답변부탁) 1 cyverjen 2006.05.25 1032
8809 흑룡님 사라진터전 최신판 없나요? 2 에에... 닉넴바뀨라네요.. 2014.06.22 360
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 442 Next
/ 442






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

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