y * 365 * 24 * 60 * 60) + ($in->m * 30 * 24 * 60 * 60) + ($in->d * 24 * 60 * 60) + ($in->h * 60 * 60) + ($in->i * 60) + $in->s; if($sec <= 0) throw new Exception("Bad resulting interval in seconds '$sec' for spec '$spec'"); return $sec; } /** * @global */ function macro_ENUM_OR($proc) { global $GAME_ROOT; $args = func_get_args(); array_shift($args); $class = array_shift($args); $opts = 0; for($i=0;$i 1) throw new Exception("Format indices gap: '{$res[0]}'"); $prev = $idx; } } return $res; } /** * @raw_args */ function macro_Q($proc, $value) { if(strpos(ltrim($value), '[') === 0) return $value; else return "\"$value\""; } /** * @global */ function macro_SELF_CONF_ID($jsm) { $file = $jsm->getRootFile(); $proto_id = 0; $alias = ""; if(!\taskman\config_get_header($file, $proto_id, $alias)) throw new Exception("No valid header for config: $file"); return $proto_id; } /** * @global */ function macro_SELF_SHORT_NAME($jsm) { $file = $jsm->getRootFile(); return str_replace(".conf.js", "", basename($file)); } /** * @global @raw_args */ function macro_BOOL($jsm, $expr) { $res = jsm_eval_string_value($jsm, $expr); return $res == 0 ? "false" : "true"; } /** * @global */ function macro_IS_DEV($jsm) { return \taskman\getor("GAME_IS_DEV", 0); } /** * @global */ function macro_VCLASS($proc, $class) { return '"vclass__" : ' . constant("$class::CLASS_ID"); } /** * @global */ function macro_ITEM($proc, $proto_id, $amount) { return array('proto_id' => $proto_id, 'amount' => $amount); } /** * @global @raw_args */ function macro_UNWRAP($jsm, $content) { $content = trim($content); $content = ltrim($content, '{'); $content = rtrim($content, '}'); return $content; }