모드 (API): Advanced Examples

The Cookboox는 시작하는 데 도움이 되는 몇 가지 간단한 스크립트 예제를 제공합니다. 자유롭게 가져가서 자신의 캠페인에 사용하기 위해 수정할 수 있습니다. 또한 커뮤니티와 스크립트를 공유할 수 있는모드 (API) 스크립트 포럼이 있습니다.


토큰 상태 관리자 

(Eric Dalquist가 기여함)

이 스크립트는 막대 값에 따라 상태 표시기를 자동으로 추가합니다. 스크립트는 0에서 1 사이의 비율에 대해 어떤 상태 표시기든 설정할 수 있도록 구성할 수 있습니다. 스크립트는 단일 인스턴스에서 여러 막대/토큰을 관리할 수 있습니다. 아래 예제는 값이 <= 50%일 때 빨간색 표시기를 설정하고 값이 <= 0일 때 죽은 표시기를 설정합니다.

 * 바의 cur/max 비율에 따라 다양한 토큰 마커를 설정합니다.
 * 
 * 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 관리자

(Eric Dalquist가 기여함)

임시 히트포인트를 자동으로 관리합니다. 토큰 바 중 하나가 임시 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: 이전 바 " + HP_BAR_ID + "에 숫자가 없습니다: '" + prevHpValStr + "'");
        return;
    }
    
    var hpValStr = obj.get("bar" + HP_BAR_ID + "_value");
    var hpVal = parseInt(hpValStr);
    if (isNaN(hpVal)) {
        log("WARN: 바 " + HP_BAR_ID + "에 숫자가 없습니다: '" + 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초마다 동작을 수행합니다.
});
 
도움이 되었습니까?
35명 중 23명이 도움이 되었다고 했습니다.