public static function execute(SR_Player $player, array $args) { $p = $player->getParty(); # Can lvlup in combat? // if ($p->isFighting()) // { // $player->message('You cannot lvlup when your party is fighting.'); // return false; // } // $bot = Shadowrap::instance($player); $runner = $player->isRunner(); $have = $player->getBase('karma'); if (count($args) !== 1) { $cost = self::KARMA_COST_SPELL; // $b = chr(2); $max = $runner ? self::MAX_VAL_SKILL_RUNNER : self::MAX_VAL_SKILL; $player->msg('5057', array($max, Shadowfunc::getStatsLvlUpArray($player, SR_Player::$SKILL, self::KARMA_COST_SKILL, $max))); // $player->message('Skills to upgrade: ' . Shadowfunc::getStatsLvlUpArray($player, SR_Player::$SKILL, self::KARMA_COST_SKILL, $runner?self::MAX_VAL_SKILL_RUNNER:self::MAX_VAL_SKILL)); $arr = SR_Player::$ATTRIBUTE; unset($arr['es']); //ignore essence $max = $runner ? self::MAX_VAL_ATTRIBUTE_RUNNER : self::MAX_VAL_ATTRIBUTE; $player->msg('5058', array($max, Shadowfunc::getStatsLvlUpArray($player, $arr, self::KARMA_COST_ATTRIBUTE, $max))); // $player->message('Attributes to upgrade: ' . Shadowfunc::getStatsLvlUpArray($player, $arr, self::KARMA_COST_ATTRIBUTE, $runner?self::MAX_VAL_ATTRIBUTE_RUNNER:self::MAX_VAL_ATTRIBUTE)); $max = $runner ? self::MAX_VAL_KNOWLEDGE_RUNNER : self::MAX_VAL_KNOWLEDGE; $player->msg('5059', array($max, Shadowfunc::getStatsLvlUpArray($player, SR_Player::$KNOWLEDGE, self::KARMA_COST_KNOWLEDGE, $max))); // $player->message('Knowledge to upgrade: ' . Shadowfunc::getStatsLvlUpArray($player, SR_Player::$KNOWLEDGE, self::KARMA_COST_KNOWLEDGE, $runner?self::MAX_VAL_KNOWLEDGE_RUNNER:self::MAX_VAL_KNOWLEDGE)); $s = ''; if ($player->getSpellData()) { $format = $player->lang('fmt_lvlup'); $max = $runner ? self::MAX_VAL_SPELL_RUNNER : self::MAX_VAL_SPELL; $nl = $player->getSpellData(); asort($nl); foreach (array_reverse($nl) as $name => $base) { $k = 'K'; $bold = ''; $could = 0; if ($base >= $max) { $n = '*'; $k = ''; } else { $n = ($base + 1) * 2; if ($n <= $have) { $bold = chr(2); $could = 1; // $n = $b.$n.'K'.$b; // $name = $b.$name.$b; } else { // $n = $n.'K'; } } $s .= sprintf($format, $name, $base + 1, $n, $bold, $k, $could); // $s .= sprintf(', %s:%s(%s)', $name, ($base+1), $n); } } $s = $s === '' ? $player->lang('none') : ltrim($s, ',; '); return $player->msg('5060', array($max, $s)); // $player->message('Spells to upgrade: '.$s); // return true; } $f = strtolower($args[0]); # Shortcuts if (isset(SR_Player::$SKILL[$f])) { $f = SR_Player::$SKILL[$f]; } if (isset(SR_Player::$ATTRIBUTE[$f])) { $f = SR_Player::$ATTRIBUTE[$f]; } if (isset(SR_Player::$KNOWLEDGE[$f])) { $f = SR_Player::$KNOWLEDGE[$f]; } // if ($f === 'essence') { $bot->reply('You can not levelup your essence.'); return false; } if ($f === 'essence') { $player->msg('1024'); // $bot->reply('You can not levelup your essence.'); return false; } $is_spell = false; $cost = self::getKarmaCostFactor($f); if (in_array($f, SR_Player::$SKILL)) { $level = $player->getBase($f); // $cost = self::KARMA_COST_SKILL; $max = $runner ? self::MAX_VAL_SKILL_RUNNER : self::MAX_VAL_SKILL; } elseif (in_array($f, SR_Player::$ATTRIBUTE)) { $level = $player->getBase($f); // $cost = self::KARMA_COST_ATTRIBUTE; $max = $runner ? self::MAX_VAL_ATTRIBUTE_RUNNER : self::MAX_VAL_ATTRIBUTE; } elseif (in_array($f, SR_Player::$KNOWLEDGE)) { $level = $player->getBase($f); // $cost = self::KARMA_COST_KNOWLEDGE; $max = $runner ? self::MAX_VAL_KNOWLEDGE_RUNNER : self::MAX_VAL_KNOWLEDGE; } elseif (false !== ($spell = SR_Spell::getSpell($f))) { $level = $spell->getBaseLevel($player); // $cost = self::KARMA_COST_SPELL; $is_spell = true; $max = $runner ? self::MAX_VAL_SPELL_RUNNER : self::MAX_VAL_SPELL; } else { $player->msg('1024'); // $bot->reply('You can only levelup attributes, skills, knowledge and spells.'); return false; } if ($level < 0) { $player->msg('1025', array($f)); // $bot->reply(sprintf('You need to learn %s first.', $f)); return false; } if ($level >= $max) { $player->msg('1026', array($max, $f)); // $bot->reply(sprintf('You already have reached the max level of %d for %s.', $max, $f)); return false; } $need = ($level + 1) * $cost; if ($need > $have) { $player->msg('1027', array($need, $f, $level, $level + 1, $have)); // $bot->reply(sprintf('You need %d karma to increase your base level for %s from %d to %d, but you only have %d karma.', $need, $f, $level, $level+1, $have)); return false; } # Reduce Karma $player->alterField('karma', -$need); # Lvlup if ($is_spell === true) { $player->levelupSpell($f, 1); } else { $player->levelupField($f, 1); // $player->alterField($f, 1); } // $player->modify(); return self::rply($player, '5061', array($need, $f, $level, $level + 1)); // return $bot->reply(sprintf('You used %d karma and leveled up your %s from %d to %d.', $need, $f, $level, $level+1)); }