Since erig is shuting down he release some of his scripts if some one want them you can download them at erig.net right now but im also posting them here can be usefull for someone
All credits to Erig.net
Script 1:
Script 2:
Script 3:
Script 4:
All credits to Erig.net
Script 1:
PHP:
<?php
class spCalc {
const MAX_NUMWORD_LEVEL = '3914867641168863595426'; // results in closest level to 999 vigintillion
const BACKPACK_SIZE = 20; // 20 slots
const COST_BLANK_RUNE = 10; // Blank Rune cost
public static $COST_BACKPACK = 10; // Backpack cost
static function getXP($from, $to) {
$to = gmp_sub($to, 1);
$from--;
$xp = gmp_div_q(gmp_add(gmp_sub(gmp_mul(50, gmp_pow($to, 3)), gmp_mul(150, gmp_pow($to, 2))), gmp_mul(400, $to)), 3);
$xp = gmp_sub($xp, gmp_div_q(gmp_add(gmp_sub(gmp_mul(50, gmp_pow($from, 3)), gmp_mul(150, gmp_pow($from, 2))), gmp_mul(400, $from)), 3));
$ret = gmp_strval($xp);
if (substr($ret, -1) == "\0x00")
$ret = substr($ret, 0, -1);
return $ret;
}
static function getMana($voc, $from, $to) {
switch ($voc) {
case 'd':
case 's':
$pow = 1.1; break;
case 'p':
$pow = 1.4; break;
case 'k':
$pow = 3.0; break;
default:
$pow = 0.0; break;
}
$mana_g = '0';
$scale = bcscale(10);
for ($cnt = $from + 1; $cnt <= $to; $cnt++) {
bcscale(10);
$pow1 = bcpow((string)$pow, (string)($cnt - 1));
bcscale(0);
$mul = bcmul('400', $pow1);
$mana_g = bcadd($mana_g, $mul);
}
$mana_g = bcmul($mana_g, 4);
bcscale($scale);
return $mana_g;
}
static function getManaPercent($voc, $from, $to, $percent) {
$mana = self::getMana($voc, $from, $to);
$scale = bcscale(10);
$mana2 = self::getMana($voc, $from, $from + 1);
$mana2 = bcmul($mana2, (100 - $percent) / 100);
bcscale(0);
$mana = bcsub($mana, $mana2);
bcscale($scale);
return $mana;
}
static function getManaRegenVocationValue($voc, $promo, $potion, $boots, $ring) {
$mana = $duration = 0;
if (($voc == 's' || $voc == 'd') && $promo) {
$mana = 2; $duration = 2;
}
else if (($voc == 's' || $voc == 'd') && !$promo) {
$mana = 2; $duration = 3;
}
else if ($voc == 'p' && $promo) {
$mana = 2; $duration = 3;
}
else if ($voc == 'p' && !$promo) {
$mana = 2; $duration = 4;
}
else if ($voc == 'k') {
$mana = 2; $duration = 6;
}
if ($potion == 'm') {
$mps = 100 / 2; // Mana Potion gives 100 mana every 2 seconds
$mana = $mana + ($duration * $mps);
}
if ($potion == 's') {
$mps = 150 / 2; // Strong Mana Potion gives 150 mana every 2 seconds
$mana = $mana + ($duration * $mps);
}
if ($potion == 'g') {
$mps = 240 / 2; // Great Mana Potion gives 240 mana every 2 seconds
$mana = $mana + ($duration * $mps);
}
if ($boots == 'sb') {
$mps = 2; // Soft Boots give 2 mana per second
$mana = $mana + ($duration * $mps);
}
if ($ring == 'l') {
$mps = 8 / 6; // Life Ring gives 8 mana every 6 sconds
$mana = $mana + ($duration * $mps);
}
if ($ring == 'h') {
$mps = 4; // Ring of Healing gives 4 mana per second
$mana = $mana + ($duration * $mps);
}
return array('mana' => $mana, 'duration' => $duration);
}
static function getManaRegenDuration($mana, $voc, $promo, $potion, $boots, $ring) {
$scale = bcscale(10);
$vals = self::getManaRegenVocationValue($voc, $promo, $potion, $boots, $ring);
$div = bcdiv($vals['duration'], $vals['mana']);
bcscale(0);
$dur = bcmul($mana, $div);
bcscale($scale);
return $dur;
}
static function getManaRegenDurationOnePercent($voc, $from, $promo, $potion, $boots, $ring) {
$mana = self::getMana($voc, $from, $from + 1);
$dur = self::getManaRegenDuration($mana, $voc, $promo, $potion, $boots, $ring);
return gmp_strval(gmp_div_q($dur, 100));
}
static function getModifierInfo($modifier) {
$gp = 0;
$dur = 0;
// Soft Boots
if ($modifier == 'sb') {
// 10000gp every 4 hours (14400 seconds)
$gp = 10000; $dur = 14400;
}
// Life Ring
if ($modifier == 'l') {
// 900gp every 20 minutes (1200 seconds)
$gp = 900; $dur = 1200;
}
// Ring of Healing
if ($modifier == 'h') {
// 2000gp every 7.5 minutes (450 seconds)
$gp = 2000; $dur = 450;
}
// Mana Potion
if ($modifier == 'm') {
// 50gp every 2 seconds
$gp = 50; $dur = 2;
}
// Strong Mana Potion
if ($modifier == 's') {
// 80gp every 2 seconds
$gp = 80; $dur = 2;
}
// Great Mana Potion
if ($modifier == 'g') {
// 120gp every 2 seconds
$gp = 120; $dur = 2;
}
$scale = bcscale(10);
$gps = bcdiv($gp, $dur);
bcscale($scale);
return array('gps' => $gps, 'gp' => $gp, 'dur' => $dur);
}
static function getModifierCost($dur, $modifier) {
$info = self::getModifierInfo($modifier);
$scale = bcscale(0);
$cost = bcmul($dur, $info['gps']);
bcscale($scale);
return $cost;
}
static function getModifierCostPerMinute($dur, $cost) {
$scale = bcscale(10);
$gps = bcdiv($cost, $dur);
bcscale(1);
$cost = bcmul($gps, 60);
bcscale($scale);
return $cost;
}
static function getTotalModifierCost($mods) {
$scale = bcscale(0);
$cost = '0';
foreach ($mods as $mod) {
$cost = bcadd($cost, $mod['cost']);
}
bcscale($scale);
return $cost;
}
static function getTotalModifierCostPerMinute($dur, $totalcost) {
$scale = bcscale(10);
$gps = bcdiv($totalcost, $dur);
bcscale(1);
$cost = bcmul($gps, 60);
bcscale($scale);
return $cost;
}
static function getModifierUsed($dur, $modifier) {
$info = self::getModifierInfo($modifier);
$scale = bcscale(2);
$used = bcdiv($dur, $info['dur']);
bcscale($scale);
return $used;
}
static function getRuneBackpackAmount($mana, $runemana) {
$scale = bcscale(2);
$bps = bcdiv($mana, bcmul($runemana, self::BACKPACK_SIZE));
bcscale($scale);
return $bps;
}
static function getRuneBackpackProfit($mana, $runemana, $bpsell) {
$scale = bcscale(10);
$bps = bcdiv($mana, bcmul($runemana, self::BACKPACK_SIZE));
$bpsell = $bpsell - (self::COST_BLANK_RUNE * 20) - (self::$COST_BACKPACK);
bcscale(0);
$profit = bcmul($bps, $bpsell);
bcscale($scale);
return $profit;
}
static function numWord($n) {
$a = split(':', 'a:one:two:three:four:five:six:seven:eight:nine');
$b = split(':', 'a:ten:eleven:twelve:thir:four:fif:six:seven:eigh:nine');
$c = split(':', 'a:twen:thir:for:fif:six:seven:eigh:nine');
$d = split(':', 'a:thousand:m:b:tr:quadr:quint:sext:sept:oct:non:dec:undec:duodec:tredec:quattuordec:quindec:sexdec:septendec:octodec:novemdec:vigint');
if ((string)$n[0] == '-') { $n = substr($n, 1); $v = 1; }
$n = preg_replace('/[^\d]/', '', $n);
if ((int)$n == 0) return 'zero';
if (strlen($n) > 66) return 'invalid';
while ($n) {
$w = sprintf('%03d', strlen($n) > 3 ? substr($n, -3) : $n); $n = strlen($n) > 3 ? substr($n, 0, -3) : '';
$o = ($w[0] ? $a[$w[0]] . ' hundred ' . ($w[1] || $w[2] ? 'and ' : ''): '')
. ($w[1] ? ($w[1] == 1 ? $b[$w[2]+1] . ($w[2] > 2 ? 'teen ' : ' ') : $c[$w[1]-1] . 'ty') : '')
. ($w[2] && $w[1] != 1 ? ($w[1] ? '-' : '') . $a[$w[2]] . ' ': '')
. ($i && $w != 0 ? ($d[$i] . ($i > 1 ? 'illion' : '') . (!$l[0] && ($l[1] || $l[2]) ? ', and ' : ', ')) : '')
. $o;
$l = $w;
$i++;
}
if (substr($o, -2) == ', ') $o = substr($o, 0, -2);
return ($v ? 'negative ' : '') . trim($o);
}
static function formatNumber($n, $nospaces = false) {
$d = 0;
$r = '';
$parts = explode('.', $n);
$n = $parts[0];
$remainder = @$parts[1];
for ($c = strlen($n) - 1; $c >= 0; $c--, $d++) {
$r .= $n{$c};
if ($d % 3 == 2) { $r .= ' ,'; }
}
$r = strrev($r);
if ($r{0} == ',') $r = substr($r, 1);
if ($nospaces)
$r = str_replace(' ', '', $r);
if ($remainder)
$r .= '.' . $remainder;
return $r;
}
}
Script 2:
PHP:
<?php
// usage: $table = spTibExperience::getExperienceTable(array('Antica', 'Pacera'));
// if any element in $table has less than 300 entries then there was a pretty serious failure (since it automatically retries)
class spTibExperience {
const PAGES = 11;
const PERPAGE = 25;
const MAXTIME = 18000; // keep trying for 5 hours, enough time for maintenance/update/etc. to run, in theory..
const TIMEOUT = 30; // seconds
const MAXBACKOFF = 600; // maximum "backoff" in case of failure
static function getExperienceTable($worlds = array()) {
$start_t = time();
$table = array();
$failcnt = 0;
$output = array();
do {
$failures = array();
if (!function_exists('curl_multi_init')) {
error_log('spTibExperience requires the cURL PHP extension');
return false;
}
foreach ($worlds as $world) {
$mh = curl_multi_init();
$chs = array();
if (!isset($output[$world])) $output[$world] = array();
for ($page = 0; $page <= self::PAGES; $page++) {
if (isset($output[$world][$page]))
continue;
$chs[$page] = curl_init();
curl_setopt($chs[$page], CURLOPT_URL, $url = sprintf('http://www.tibia.com/community/?subtopic=highscores&world=%s&list=%s&page=%d', $world, 'experience', $page));
curl_setopt($chs[$page], CURLOPT_RETURNTRANSFER, true);
curl_setopt($chs[$page], CURLOPT_FRESH_CONNECT, true);
curl_setopt($chs[$page], CURLOPT_TIMEOUT, self::TIMEOUT);
curl_multi_add_handle($mh, $chs[$page]);
if (@$GLOBALS['debug']) { error_log("preparing to fetch $url"); }
}
do {
$mrc = curl_multi_exec($mh, $active);
} while ($active);
for ($page = 0; $page <= self::PAGES; $page++) {
if (isset($output[$world][$page]))
continue;
$out = curl_multi_getcontent($chs[$page]);
curl_close($chs[$page]);
$failure = false;
if (preg_match_all('#<TD WIDTH=10%>(.*?)</TD>.*?subtopic=characters&name=.*?">(.*?)</A></TD><TD WIDTH=15%>(.*?)</TD><TD WIDTH=20%>(.*?)</TD></TR>#s', $out, $m)) {
if (count($m[2]) != self::PERPAGE) {
if (@$GLOBALS['debug']) { error_log("on $world page $page, found " . count($m[2]) . ", not " . self::PERPAGE); }
$failure = true;
}
/*
else if (rand(1, 2) == 1) {
if (@$GLOBALS['debug']) { error_log("failing because i can"); }
$failure = true;
}
*/
else {
foreach ($m[2] as $k => $name) {
$rank = $m[1][$k];
$level = $m[3][$k];
$xp = $m[4][$k];
if (!isset($table[$world])) $table[$world] = array();
$table[$world][$rank] = array('name' => $name, 'level' => $level, 'xp' => $xp);
}
$output[$world][$page] = true;
}
}
else {
$failure = true;
}
if ($failure) {
$now_t = time();
if (@$GLOBALS['debug']) { error_log("failure for $world page $page"); }
if ($now_t - $start_t >= self::MAXTIME)
$output[$world][$page] = true;
}
}
curl_multi_close($mh);
if (count($output[$world]) <= self::PAGES)
$failures[$world] = true;
else {
ksort($output[$world]);
unset($failures[$world]);
}
}
if (count($failures)) {
$failcnt++;
$backoff = min(self::MAXBACKOFF, pow(2, $failcnt));
// don't want pow(2, ...) to get too big!
if (pow(2, $failcnt) > self::MAXBACKOFF)
$failcnt--;
if (@$GLOBALS['debug']) { error_log("backing off for $backoff seconds. will keep trying for " . (self::MAXTIME - ($now_t - $start_t)) . " seconds"); }
sleep($backoff);
}
else {
foreach ($table as $world => $ranks)
ksort($table[$world]);
ksort($table);
break;
}
} while (1);
return $table;
}
}
?>
Script 3:
PHP:
<?php
class spTibCharacter {
const ATTEMPTS = 5;
const TIMEOUT = 30; // seconds
static function getCharacter($names) {
$table = array();
do {
if (!function_exists('curl_multi_init')) {
error_log('spTibCharacter requires the cURL PHP extension');
return false;
}
$mh = curl_multi_init();
$chs = array();
foreach ($names as $name) {
$chs[$name] = curl_init();
curl_setopt($chs[$name], CURLOPT_URL, $url = sprintf('http://www.tibia.com/community/?subtopic=characters&name=%s', urlencode($name)));
curl_setopt($chs[$name], CURLOPT_RETURNTRANSFER, true);
curl_setopt($chs[$name], CURLOPT_FRESH_CONNECT, true);
curl_setopt($chs[$name], CURLOPT_TIMEOUT, self::TIMEOUT);
curl_multi_add_handle($mh, $chs[$name]);
if (@$GLOBALS['debug']) { error_log("preparing to fetch $url"); }
}
do {
$mrc = curl_multi_exec($mh, $active);
} while ($active);
foreach ($names as $name) {
$out = curl_multi_getcontent($chs[$name]);
curl_close($chs[$name]);
$failure = false;
if (preg_match('@<TR><TD BGCOLOR="#505050" CLASS=white><B>Could not find character</B></TD></TR>@s', $out)) {
$table[$name] = array('error' => 'Could not find character');
}
else if (preg_match('@<TD WIDTH=20%>Name:</TD><TD>(.+?)</TD></TR>@s', $out, $m)) {
$table[$name] = array('name' => $m[1], 'raw' => $out, 'error' => null);
if (preg_match('@<TD.*?CLASS=red>Banished:</TD><TD CLASS=red>until .*? because of using unofficial software to play</TD>@s', $out)) {
$table[$name]['banished'] = 'unofficial_software';
}
$table[$name]['origname'] = $name;
}
else {
$table[$name] = array('error' => 'Unknown error');
}
}
curl_multi_close($mh);
} while (0);
return $table;
}
}
?>
Script 4:
PHP:
<?php
class spUtil {
static function duration($t) {
$s = $t % 60;
$m = ($t / 60) % 60;
$h = ($t / 60 / 60) % 24;
$d = ($t / 60 / 60 / 24) % 365;
$y = (int)($t / 60 / 60 / 24 / 365);
$r = ($y?"{$y}y ":'') . ($d?"{$d}d ":'') . ($h?"{$h}h ":'') . ($m?"{$m}m ":'') . ($s?"{$s}s ":'');
if ($r == '')
return '0s';
else
return substr($r, 0, -1);
}
static function durationBC($t) {
$neg = $t < 0;
if ($neg)
$t = substr($t, 1);
$scale = bcscale(10);
$s = bcmod($t, 60);
$m = bcmod(bcdiv($t, 60), 60);
$h = bcmod(bcdiv($t, 3600), 24);
$d = bcmod(bcdiv($t, 86400), 365);
bcscale(0);
$y = bcdiv($t, 31536000);
bcscale($scale);
$r = ($y?"{$y}y ":'') . ($d?"{$d}d ":'') . ($h?"{$h}h ":'') . ($m?"{$m}m ":'') . ($s?"{$s}s ":'');
if ($r == '')
return '0s';
else if (!$neg)
return substr($r, 0, -1);
else
return '-' . substr($r, 0, -1);
}
}
?>