모드 스크립트(API): 고급 예제

The Cookboox는 시작하는 데 도움이 될 수 있는 간단한 스크립트 예제를 제공합니다. 자유롭게 가져가서 여러분의 캠페인에 맞게 수정하여 사용하세요. 또한 Mod (API) 스크립트 포럼 도 있습니다. 여기서 모드(API) 스크립팅에 대해 논의하고 여러분의 스크립트를 커뮤니티와 공유할 수 있습니다.


토큰 상태 관리자 

(에릭 달퀴스트 제공)

이 스크립트는 바 값을 기반으로 상태 표시기를 자동으로 추가합니다. 스크립트는 세 개의 바 중 어느 것이든 추적하도록 설정할 수 있으며, 상태 표시기를 0과 1 사이의 임의의 비율로 설정할 수 있습니다. 스크립트는 단일 인스턴스 내에서 여러 개의 바/토큰을 관리할 수 있습니다. 아래 예제는 바 1을 모니터링하며, 값이 <= 50%일 때 빨간색 마커를 설정하고, 값이 <= 0일 때 죽은 마커를 설정합니다.

 * 바 전류/최대 전류 비율
 에 기반하여 다양한 토큰 마커 설정 * 
 * CONFIG 배열은 임의의 수의 구성 객체를 가질 수 있습니다. 이러한 객체들
 * 은 순서대로 처리됩니다.
 * 
 * barId - 값을 조회할 바의 ID [1, 2, 3]
 * barRatio - 상태 마커 설정을 트리거하는 바 값과 최대 값의 비율 [0 - 1]
 * status - 전환할 상태 마커의 이름 [redmarker, bluemarker, greenmarker, brownmarker, purplemarker, dead]
 * whenLow - 막대 값이 <= 비율일 때 마커의 상태 [true, false]
 *
var CONFIG = [
    {barId: 1, barRatio: .5, status: "redmarker", whenLow: true},
    {barId: 1, barRatio: 0, status: "dead", whenLow: true}];


on("change:token", function(obj) {
    CONFIG.forEach(function(opts) {
        var maxValue = parseInt(obj.get("bar" + opts.barId + "_max"));
        var curValue = parseInt(obj.get("bar" + opts.barId + "_value"));
        log(opts.barId + ": " + curValue + "/" + maxValue);
    
        if (!isNaN(maxValue) &&!isNaN(curValue)) {
            var markerName = "status_" + opts.status;
            if (curValue <= (maxValue * opts.barRatio)) {
                obj.set(markerName, opts.whenLow);
            }
            else {
                obj.set(markerName, !opts.whenLow);
            }
        }
    });
});

임시 HP 관리자

(에릭 달퀴스트 제공)

임시 체력을 자동으로 관리합니다. 토큰 바 중 하나가 임시 HP 추적용으로 사용될 경우, 이 스크립트는 해당 토큰이 메인 HP 바에서 제거되기 전에 임시 값에서 자동으로 HP를 차감할 수 있습니다.

* 임시 HP가 존재할 경우 자동으로 제거합니다.
 * 
 * 토큰의 HP가 감소할 때 스크립트는 임시 HP(
 )가 사용 가능한지 확인합니다. 해당 효과가 적용된 경우 먼저 제거되며, 실제 HP는
 * 타격을 흡수한 임시 HP를 반영하도록 업데이트됨.
 * 
 * TEMP_BAR_ID - 임시 HP를 추적하는 데 사용되는 바 [1, 2, 3]
 * HP_BAR_ID - 실제 HP를 추적하는 바 [1, 2, 3]
 *
var TEMP_BAR_ID = 2;
var HP_BAR_ID = 1;
 
on("change:token", function(obj, prev) {
    var prevHpValStr = prev["bar" + HP_BAR_ID + "_value"];
    var prevHpVal = parseInt(prevHpValStr);
    if (isNaN(prevHpVal)) {
        log("WARN: Previos bar " + HP_BAR_ID + " does not contain a number: '" + prevHpValStr + "'");
        return;
    }
    
    var hpValStr = obj.get("바" + HP_BAR_ID + "_value");
    var hpVal = parseInt(hpValStr);
    if (isNaN(hpVal)) {
        log("WARN: 바 " + HP_BAR_ID + " does not contain a number: '" + hpValStr + "'");
        return;
    }
    
    if (prevHpVal > hpVal) {
        var tmpHpVal = parseInt(obj.get("bar" + TEMP_BAR_ID + "_value"));
        log(prevHpVal + " - " + hpVal + " - " + tmpHpVal);
        if (!isNaN(tmpHpVal)) {
            var hpChange = prevHpVal - hpVal;
            var remainingTmp = tmpHpVal - hpChange;
            if (remainingTmp > 0) {
                obj.set("bar" + TEMP_BAR_ID + "_value", remainingTmp);
                obj.set("bar" + HP_BAR_ID + "_value", prevHpVal);
            }
            else {
                var remainingHp = prevHpVal + remainingTmp;
                obj.set("bar" + TEMP_BAR_ID + "_value", 0);
                obj.set("bar" + HP_BAR_ID + "_value", remainingHp);
            }
        }
    }
});


순찰 토큰

//캠페인이 완전히 로드되었음을 알 수 있도록 준비 이벤트가 발생할 때까지 기다립니다.
   //순찰 토큰에 대한 참조를 가져옵니다.
   var patroltoken = findObjs({_type: "graphic", name: "Guard A"})[0]; //캠페인에 "Guard A"라는 토큰이 존재함을 알고 있습니다.
   var direction = -70; // 왼쪽으로 70픽셀 이동.
   var stepstaken = 0; // 현재 방향으로 몇 걸음을 걸었는가?
   setInterval(function() {
     if(stepstaken > 3) {
       //방향 전환!
       direction = direction * -1; // 이동 방향을 반전시킵니다.
       stepstaken = 0; // 걸음 수를 0으로 초기화합니다.
     
     patroltoken.set("left", patroltoken.get("left") + direction); //걷기!
     stepstaken++;
   }, 5000); //5초마다 동작 수행
});
 
도움이 되었습니까?
43명 중 31명이 도움이 되었다고 했습니다.