function rem_sc_from_book($spell, $book, $login)
{
    // v has_item proveritsja
    //$spell = preg_replace ('/[^a-z0-9_\.]/i', '', $spell);
    //$book = preg_replace ('/[^a-z0-9_\.]/i', '', $book);
    //$login = preg_replace ('/[^a-z0-9_]/i', '', $login);
    include_once 'modules/f_has_item.php';
    if (!has_item($book, $login)) {
        put_g_error('у вас нету книги');
    }
    // zapros na magiju chto v knige:
    $q = do_mysql("SELECT on_take FROM items WHERE fullname = '" . $book . "' AND type = 'b';");
    if (!mysql_num_rows($q)) {
        return 0;
    }
    $magic = mysql_result($q, 0);
    if (strpos($magic, $spell) === false) {
        put_g_error('в этой книге нету этого заклинания!');
    }
    // esli prodolzhaetsja skript, znachit magija estq, izvlekem ee (snachala udalim, togda bagov skryvatq nebvudut:)
    $magic = string_drop($magic, $spell);
    // terq sozdadim:
    //include_once ('modules/f_create_item.php');
    $q = do_mysql("SELECT type FROM magic WHERE fullname = '" . $spell . "';");
    if (!mysql_num_rows($q)) {
        put_error('netu takogo zaklinanija');
    }
    $tp = mysql_result($q, 0);
    //#####$scroll = create_item ('i.s.'.$tp.'.'.$spell);
    include_once 'modules/f_gain_item.php';
    gain_item('i.s.' . $tp . '.' . $spell, 1, $login);
    // obnovim knigu i vse:
    do_mysql("UPDATE items SET on_take = '" . $magic . "' WHERE fullname = '" . $book . "';");
    return 1;
}
function upd_last_cast($pl, $spell)
{
    //$pl = preg_replace ('/[^a-z0-9_]/i', '', $pl);
    //$spell = preg_replace ('/[^a-z0-9_]/i', '', $spell);
    $now = time();
    $id = is_player($pl);
    if (!$id) {
        put_error('npc cant cast spell');
    }
    $q = do_mysql("SELECT last FROM players WHERE id_player = '" . $id . "';");
    $last = mysql_result($q, 0);
    $last = explode('|', $last);
    // vremja zaklinanija:
    $q = do_mysql("SELECT timewait FROM magic WHERE fullname = '" . $spell . "';");
    if (!mysql_num_rows($q)) {
        put_error('there are no such spell: ' . $spell . '');
    }
    $tw = mysql_result($q, 0);
    $last[3] = $now + $tw;
    // obrabotka effektami:
    #include_once ('modules/f_get_affected.php');
    // effecty:
    #$aff = get_affected ($LOGIN);
    // primer: if (is_in ('oglushen', $aff)) $last[3] += 10;
    $nlast = $last[0] . '|' . $last[1] . '|' . $last[2] . '|' . $last[3] . '|' . $last[4] . '|' . $last[5] . '|' . $last[6] . '|' . $last[7] . '|' . $last[8];
    do_mysql("UPDATE players SET last = '" . $nlast . "' WHERE id_player = '" . $id . "';");
    return 1;
}
function set_w_effects($weapon, $dmg_type, $name)
{
    //$weapon = preg_replace ('/[^a-z0-9_\.]/', '', $weapon);
    //$name = preg_replace ('/[^a-z0-9_\.]/', '', $name);
    if (!$weapon) {
        return 0;
    }
    $q = do_mysql("SELECT on_drop FROM items WHERE fullname = '" . $weapon . "';");
    if (!mysql_num_rows($q)) {
        put_error('ner to weapo');
    }
    $effs = mysql_result($q, 0);
    $effs = explode('|', $effs);
    $c = count($effs);
    for ($i = 0; $i < $c; $i++) {
        if (rand(0, 100) <= 30) {
            include_once 'modules/f_set_affected.php';
            set_affected($name, $effs[$i]);
        }
    }
    // otdelqnyj razgovor s oglusheniem
    if ($dmg_type == 'drob') {
        if (rand(0, 100) <= 30) {
            include_once 'modules/f_set_affected.php';
            set_affected($name, 'oglushen');
        }
    }
    return 1;
}
Пример #4
0
 function do_mysql($query, $return = 0)
 {
     $query = mysql_real_escape_string($query);
     $this->a = mysql_query($query, $this->dbcnx);
     if (!$this->a) {
         put_error('error in mysql: the query was: "' . $query . '"');
     }
     if ($return == 2) {
         // returning associative masive
         while ($this->ret = mysql_fetch_assoc($this->a)) {
             return $this->ret;
         }
     } else {
         if ($return == 1) {
             // returning one element, or empty
             if (!mysql_num_rows($this->a)) {
                 return '';
             }
             $this->ret = mysql_result($this->a, 0);
             return $this->ret;
         } else {
             // simply returns connection descriptor:
             return $this->a;
         }
     }
 }
function learn_skill($skill, $price)
{
    global $p;
    global $sid;
    $skill = preg_replace('/[^0-9]/', '', $skill);
    $price = preg_replace('/[^0-9]/', '', $price);
    if ($skill === false) {
        put_error('неуказан навык');
    }
    if ($price === false) {
        put_error('неуказанa цена');
    }
    if (!isset($p['skills'][$skill])) {
        put_error('такого навыка нету');
    }
    if ($p['skills'][$skill]) {
        put_g_error('вы уже имеете этот навык!');
    }
    $mage = array(22, 23, 24, 25, 26, 27, 28, 29, 30);
    $warrior = array(7, 8, 9, 10, 41);
    $ranger = array(11, 12);
    // proverka na klassy:
    if ($p['classof'] != 3 && in_array($skill, $mage)) {
        put_g_error('только для магов!');
    }
    if ($p['classof'] != 1 && in_array($skill, $warrior)) {
        put_g_error('только для воина!');
    }
    if ($p['classof'] != 2 && in_array($skill, $ranger)) {
        put_g_error('только для лучников!');
    }
    if ($p['money'] < $price) {
        put_g_error('у вас нехватает серебра - надо ' . $price . ' монет!');
    }
    if (!$p['stats'][3]) {
        put_g_error('у вас нету очка навыка!');
    }
    // nelzja vychitq vtoroj navyk iz serii parirovanie - dvuruchnoe - dva
    if (($p['skills'][18] || $p['skills'][40] || $p['skills'][41]) && ($skill == 18 || $skill == 40 || $skill == 41)) {
        put_g_error('нелзя выучить два навыка из серии двуручное - два - парирование. Либо щит, либо двуручное, либо два.');
    }
    // esli vsju proverku proshli, podnimem i zabudem
    $p['skills'][$skill] = 1;
    $p['stats'][3] -= 1;
    $skills = implode('|', $p['skills']);
    $stats = implode('|', $p['stats']);
    $p['money'] -= $price;
    do_mysql("UPDATE players SET skills = '" . $skills . "', stats = '" . $stats . "', money = '" . $p['money'] . "' WHERE id_player = '" . $p['id_player'] . "';");
    $f = gen_header('навыки');
    $f .= '<div class="y" id="sodhg"><b>навыки:</b></div><p>';
    include 'modules/sp/sp_skillnames.php';
    $f .= 'вы выучили ' . $skn[$skill] . '!<br/>';
    $f .= '<a class="blue" href="game.php?sid=' . $sid . '">в игру</a></p>';
    $f .= gen_footer();
    exit($f);
}
function get_dead_info($dead)
{
    //$dead = preg_replace ('/[^a-z0-9\.]/i', '', $dead);
    if (substr($dead, 0, 2) != 'd.') {
        put_error('это не труп');
    }
    $q = do_mysql("SELECT * FROM dead WHERE fullname = '" . $dead . "';");
    $d = mysql_fetch_assoc($q);
    $d['l_hunt'] = $d['hunt'];
    $d['hunt'] = explode('|', $d['hunt']);
    return $d;
}
function can_reach($from, $to, $depth)
{
    $map = substr($from, 0, 4);
    if ($map != substr($to, 0, 4)) {
        put_error('raznye karty');
    }
    include 'modules/loc/' . $map . '.php';
    $fromi = substr($from, 5);
    $toi = substr($to, 5);
    if (!isset($l[$fromi]) || !isset($l[$toi])) {
        put_error('нет таких лок');
    }
}
function gain_item($item, $count, $login)
{
    global $I_SEP_C, $p;
    //$item = preg_replace ('/[^a-z0-9\._]/i', '', $item);
    $count = preg_replace('/[^0-9]/', '', $count);
    //$login = preg_replace ('/[^a-z0-9_]/', '', $login);
    if (!$item || !$count || !$login) {
        put_error('заполните усе данные (это к админу)');
    }
    $id = is_player($login);
    include_once 'modules/f_create_item.php';
    include_once 'modules/f_add_item_to_pl.php';
    include_once 'modules/f_add_item_to_loc.php';
    include_once 'modules/f_get_it_name.php';
    if (substr($item, 2, 1) == 'm') {
        $nitem = create_item($item);
        //add_item_to_pl ($login, $nitem);
        $name = get_it_name($nitem);
        $q = do_mysql("SELECT COUNT(*) FROM items WHERE belongs = '" . $login . "' AND is_in = 'inv' AND weight > 0;");
        $c = mysql_result($q, 0);
        if ($c > $I_SEP_C) {
            add_item_to_loc($p['location'], $nitem);
        } else {
            $q = do_mysql("SELECT fullname FROM items WHERE belongs = '" . $login . "' AND is_in = 'inv' AND realname = '" . $item . "';");
            if (mysql_num_rows($q)) {
                $fn = mysql_result($q, 0);
                do_mysql("UPDATE items SET on_take = on_take + " . $count . " WHERE fullname = '" . $fn . "';");
                do_mysql("DELETE FROM items WHERE fullname = '" . $nitem . "';");
            } else {
                add_item_to_pl($login, $nitem);
                do_mysql("UPDATE items SET on_take = '" . $count . "' WHERE fullname = '" . $nitem . "';");
            }
        }
        add_journal('вы получили ' . $name . '!', $login);
    } else {
        for ($i = 0; $i < $count; $i++) {
            $nitem = create_item($item);
            $name = get_it_name($nitem);
            $q = do_mysql("SELECT COUNT(*) FROM items WHERE belongs = '" . $login . "' AND is_in = 'inv' AND weight > 0;");
            $c = mysql_result($q, 0);
            if ($c > $I_SEP_C) {
                add_item_to_loc($p['location'], $nitem);
            } else {
                add_item_to_pl($login, $nitem);
            }
            add_journal('вы получили ' . $name . '!', $login);
        }
    }
    return $nitem;
}
function trade_param($item)
{
    $item = preg_replace('/[^a-z0-9\\._]/i', '', $item);
    $cl = substr($item, 2, 1);
    $tp = substr($item, 4, 3);
    if (!file_exists('modules/items/items_' . $cl . '/items_' . $cl . '_' . $tp . '.php')) {
        put_error('<p>нету такого файла для создания веши: modules/items/items_' . $cl . '/items_' . $cl . '_' . $tp . '.php</p>');
    }
    include 'modules/items/items_' . $cl . '/items_' . $cl . '_' . $tp . '.php';
    if (!isset($it[$item])) {
        put_error('<p>такой веши нету в файлах: ' . $item . '</p>');
    }
    $it[$item] = explode('|', $it[$item]);
    return $it[$item];
}
function check_last_cast($pl)
{
    //$pl = preg_replace ('/[^a-z0-9_\.]/i', '', $pl);
    $now = time();
    $id = is_player($pl);
    if (!$id) {
        // pokachtoo zhivotnye ne kastujut:
        put_error('npc cant cast');
    }
    $q = do_mysql("SELECT last FROM players WHERE id_player = '" . $id . "';");
    $a = mysql_fetch_assoc($q);
    $last = $a['last'];
    $last = explode('|', $last);
    // v magii pri obnovlenii ukazyvaetsja vremja, sejchas nado tolqko proveritq, nastupilo li
    if ($last[3] < $now) {
        return 1;
    }
    return 0;
}
function get_max_str($item)
{
    global $I_P_P;
    global $I_P_J;
    $pref = substr($item, 8, 3);
    $q = do_mysql("SELECT jewel FROM items WHERE fullname = '" . $item . "';");
    if (!mysql_num_rows($q)) {
        put_error('вешь не существует: ' . $item);
    }
    $jewel = mysql_result($q, 0);
    $str = $I_P_P[$pref];
    if (isset($I_P_J[$jewel])) {
        $str = round($str * $I_P_J[$jewel]);
    }
    //$q = do_mysql ("SELECT maxduraminus FROM items WHERE fullname = '".$item."';");
    //$mdm = mysql_result ($q, 0);
    //$str -= $mdm;
    return $str;
}
function delete_count($item, $count, $login)
{
    //$item = preg_replace ('/[^a-z0-9\._]/i', '', $item);
    $count = preg_replace('/[^0-9]/', '', $count);
    //$login = preg_replace ('/[^a-z0-9_]/', '', $login);
    if (!$item || !$count || !$login) {
        put_error('заполните усе данные (это к админу): ' . $item . ', ' . $count . ', ' . $login);
    }
    $i = 1;
    $q = do_mysql("SELECT fullname FROM items WHERE belongs = '" . $login . "' AND is_in <> 'ban' AND type <> 'm' AND realname LIKE '" . $item . "%';");
    while ($it = mysql_fetch_assoc($q)) {
        if ($i > $count) {
            break;
        }
        do_mysql("DELETE FROM items WHERE fullname = '" . $it['fullname'] . "';");
        $i++;
    }
    return $i - 1;
}
function add_item_to_pl($pl, $item)
{
    //$item = preg_replace ('/[^a-z\._0-9]/i', '', $item);
    //$pl = preg_replace ('/[^a-z\._0-9]/i', '', $pl);
    $t = substr($item, 2, 1);
    if ($t == 'o' || $t == 'l') {
        put_error('ne te veshi, pane!');
    }
    //require_once ("modules/f_get_weight.php");
    // kolichestvo:
    $q = do_mysql("SELECT COUNT(*) FROM items WHERE belongs = '" . $pl . "' AND is_in = 'inv' AND weight > 0;");
    $c = mysql_result($q, 0);
    global $I_SEP_C;
    if ($c > $I_SEP_C) {
        put_g_error('в рюгзаке нехватает места');
    }
    // add_journal ('[green]'.$item.' to '.$pl.'[/end]', 'maxx');
    do_mysql("UPDATE items SET belongs = '" . $pl . "', location = '0', map = '', is_in = 'inv' WHERE fullname = '" . $item . "';");
    return 1;
}
function has_count($item, $count, $login)
{
    //$item = preg_replace ('/[^a-z0-9\._]/i', '', $item);
    $count = preg_replace('/[^0-9]/', '', $count);
    //$login = preg_replace ('/[^a-z0-9_]/', '', $login);
    if (!$item || !$count || !$login) {
        put_error('заполните усе данные (это к админу)');
    }
    $q = do_mysql("SELECT COUNT(*) FROM items WHERE realname LIKE '" . $item . "%' AND belongs = '" . $login . "' AND is_in <> 'ban';");
    $has = mysql_result($q, 0);
    if ($has == 0) {
        return 0;
    }
    if ($has < $count) {
        return -1;
    }
    if ($has >= $count) {
        return 1;
    }
}
function create_item_m($fullname, $count)
{
    //$fullname = preg_replace ('/[^a-z0-9_\.]/i', '', $fullname);
    //$count = preg_replace ('/[^0-9]/', '', $count);
    // v princype v etu funkciju iz faila vvodjatsja vse dannye
    // klass:
    $cl = substr($fullname, 2, 1);
    // tip
    $tp = substr($fullname, 4, 3);
    // podkljuchim
    //echo $fullname;
    if (!file_exists('modules/items/items_' . $cl . '/items_' . $cl . '_' . $tp . '.php')) {
        put_error('<p>нету такого файла для создания веши: modules/items/items_' . $cl . '/items_' . $cl . '_' . $tp . '.php</p>');
    }
    include 'modules/items/items_' . $cl . '/items_' . $cl . '_' . $tp . '.php';
    if (!isset($it[$fullname])) {
        put_error('<p>такой веши нету в файлах: ' . $fullname . '</p>');
    }
    $it[$fullname] = explode('|', $it[$fullname]);
    // edinstvennoe chto nado sdelatq - eto izmenitq fullname
    // poetomu, zapolnim za dva raza, pervyj raz ukazhem lozhnyj fullname
    $name = mysql_real_escape_string($it[$fullname][0]);
    $fullname = mysql_real_escape_string($it[$fullname][1]);
    $type = mysql_real_escape_string($it[$fullname][2]);
    $on_take = mysql_real_escape_string($count);
    $on_use = mysql_real_escape_string($it[$fullname][4]);
    $on_drop = mysql_real_escape_string($it[$fullname][5]);
    $price = mysql_real_escape_string($it[$fullname][6]);
    $dmg = mysql_real_escape_string($it[$fullname][7]);
    $armor = mysql_real_escape_string($it[$fullname][8]);
    $weight = mysql_real_escape_string($it[$fullname][11]);
    do_mysql("INSERT INTO items VALUES (0, '" . $name . "', '" . $fullname . ".i', '" . $type . "', '" . $on_take . "', '" . $on_use . "', '" . $on_drop . "', '" . $price . "', '" . $dmg . "', '" . $armor . "', '', '', '" . $weight . "', '', '" . $fullname . "', '', '', '0', '0', '0');");
    // teperq vozqmem id_item i pripishem ego k fullname
    $a = do_mysql("SELECT id_item FROM items WHERE fullname = '" . $fullname . ".i';");
    $id_item = mysql_result($a, 0);
    // obnovim
    do_mysql("UPDATE items SET fullname = '" . $fullname . "." . $id_item . "' WHERE fullname = '" . $fullname . ".i';");
    return $fullname . '.' . $id_item;
}
Пример #16
0
function trade_param($item)
{
    $item = preg_replace('/[^a-z0-9\\._]/i', '', $item);
    $cl = substr($item, 2, 1);
    $tp = substr($item, 4, 3);
    // podkljuchim
    if ($cl == 'a' || $cl == 'w' || $cl == 'x') {
        $else = substr($item, 12);
        $item2 = 'i.' . $cl . '.' . $tp . '.' . $else;
    } else {
        $item2 = $item;
    }
    if (!file_exists('modules/items/items_' . $cl . '/items_' . $cl . '_' . $tp . '.php')) {
        put_error('<p>trade - нету такого файла для создания веши: modules/items/items_' . $cl . '/items_' . $cl . '_' . $tp . '.php</p>');
    }
    include 'modules/items/items_' . $cl . '/items_' . $cl . '_' . $tp . '.php';
    if (!isset($it[$item2])) {
        put_error('<p>такой веши нету в файлах: ' . $item2 . '</p>');
    }
    $it[$item2] = explode('|', $it[$item2]);
    return $it[$item2][0];
}
function repair_item($item, $login, $self = 0)
{
    include_once 'modules/f_get_max_str.php';
    $strm = get_max_str($item);
    if (!$strm) {
        $strm = 1;
    }
    $q = do_mysql("SELECT str, price FROM items WHERE fullname = '" . $item . "' AND belongs = '" . $login . "';");
    if (!mysql_num_rows($q)) {
        put_error('нема вещи ' . $item);
    }
    $i = mysql_fetch_assoc($q);
    if (!$self) {
        $id = is_player($login);
        $q = do_mysql("SELECT money FROM players WHERE id_player = '" . $id . "'");
        $money = mysql_result($q, 0);
        if (!$i['str']) {
            $i['str'] = 1;
        }
        $cost = round($i['price'] * $i['str'] / $strm);
        if ($money < $cost) {
            put_g_error('нехватает серебра, надо ' . $cost);
        }
        $money -= $cost;
        do_mysql("UPDATE players SET money = '" . $money . "' WHERE id_player = '" . $id . "';");
    } else {
        // chinim samostojatelqno, self navyk
        $cost = $self * 20;
        $i['str'] += $cost;
        if ($i['str'] < $strm) {
            $strm = $i['str'];
        }
    }
    do_mysql("UPDATE items SET str = '" . $strm . "' WHERE fullname = '" . $item . "';");
    return $cost;
}
Пример #18
0
<?php 
// osvezhitq
$dead = preg_replace('/[^a-z0-9\\._]/i', '', $_GET['dead']);
if (!$dead) {
    put_error('а какой труп то резать!!?');
}
$q = do_mysql("SELECT * FROM dead WHERE location = '" . $p['location'] . "' AND fullname = '" . $dead . "';");
if (!mysql_num_rows($q)) {
    put_g_error('нет такого trupa');
}
$di = mysql_fetch_assoc($q);
// infa trupa
if (!$di['hunt']) {
    put_g_error('на трупе ничего нету!');
}
// esli estq nozh odetyj
$q = do_mysql("SELECT fullname FROM items WHERE belongs = '" . $LOGIN . "' AND is_in = 'wea';");
$q2 = do_mysql("SELECT fullname FROM items WHERE belongs = '" . $LOGIN . "' AND is_in = 'wst';");
if (!mysql_num_rows($q) && !mysql_num_rows($q2)) {
    put_g_error('возьмите в руки нож!');
}
if (!mysql_num_rows($q)) {
    $weapon = '';
} else {
    $weapon = mysql_result($q, 0);
}
if (!mysql_num_rows($q2)) {
    $w2 = '';
} else {
    $w2 = mysql_result($q2, 0);
}
////////////////////////////////
// infa veshi
if (substr($item, 2, 1) != 'm') {
    put_error('это не мелкая вещь');
}
$iin = do_mysql("SELECT name, on_take, price FROM items WHERE fullname = '" . $item . "' AND belongs = '" . $LOGIN . "' AND is_in <> 'ban';");
if (!mysql_num_rows($iin)) {
    put_g_error('нету такой вещи');
}
$iin = mysql_fetch_assoc($iin);
$nid = is_npc($npc);
$tr = do_mysql("SELECT drop2 FROM npc WHERE id_npc = '" . $nid . "';");
$tr = mysql_result($tr, 0);
$tr = explode('|', $tr);
if (strpos($tr[0], substr($item, 2, 1)) === false && $tr[0] != '*') {
    put_error('торговец не покупает эти виды вещей');
}
if ($count > $iin['on_take']) {
    $count = $iin['on_take'];
}
// cena
$cost = round($iin['price'] * $count * $tr[2]);
$p['money'] += $cost;
do_mysql("UPDATE players SET money = '" . $p['money'] . "' WHERE id_player = '" . $p['id_player'] . "';");
if ($count == $iin['on_take']) {
    // beretsja vsja veshq
    // udaljaem veshq von
    include_once 'modules/f_delete_item.php';
    delete_item($item);
} else {
    include_once 'modules/f_decrease_misc.php';
function trade_param($item)
{
    $item = preg_replace('/[^a-z0-9\\._]/i', '', $item);
    $cl = substr($item, 2, 1);
    $tp = substr($item, 4, 3);
    // podkljuchim
    if ($cl == 'a' || $cl == 'w' || $cl == 'x') {
        $else = substr($item, 12);
        $item2 = 'i.' . $cl . '.' . $tp . '.' . $else;
    } else {
        $item2 = $item;
    }
    if (!file_exists('modules/items/items_' . $cl . '/items_' . $cl . '_' . $tp . '.php')) {
        put_error('<p>trade - нету такого файла для создания веши: modules/items/items_' . $cl . '/items_' . $cl . '_' . $tp . '.php</p>');
    }
    include 'modules/items/items_' . $cl . '/items_' . $cl . '_' . $tp . '.php';
    if (!isset($it[$item2])) {
        put_error('<p>такой веши нету в файлах: ' . $item2 . '</p>');
    }
    $it[$item2] = explode('|', $it[$item2]);
    if ($cl == 'w' || $cl == 'a' || $cl == 'x') {
        $pref = substr($item, 8, 3);
        switch ($pref) {
            case 'fur':
                $it[$item2][6] *= 1.2;
                $it[$item2][11] *= 1.5;
                break;
            case 'tun':
                $it[$item2][6] *= 1.2;
                $it[$item2][11] *= 0.5;
                break;
            case 'bet':
                $it[$item2][6] *= 1.25;
                break;
            case 'rar':
                $it[$item2][6] *= 1.5;
                break;
            case 'eli':
                $it[$item2][6] *= 2.0;
                break;
            case 'epi':
                $it[$item2][6] *= 2.5;
                break;
            case 'leg':
                $it[$item2][6] *= 3.0;
                break;
        }
        $it[$item2][6] = round($it[$item2][6]);
        $it[$item2][11] = round($it[$item2][11]);
    }
    $name = $it[$item2][0];
    if ($cl == 'w') {
        // teperq izmenim svojstva po prefiksu
        $a = explode('~', $it[$item2][7]);
        for ($i = 0; $i < 5; $i++) {
            $a[$i] = explode('-', $a[$i]);
        }
        #print_r ($a);
        switch ($pref) {
            case 'bas':
                $a[0] = round($a[0][0] * 1) . '-' . round($a[0][1] * 1);
                $a[1] = round($a[1][0] * 1) . '-' . round($a[1][1] * 1);
                $a[2] = round($a[2][0] * 1) . '-' . round($a[2][1] * 1);
                $a[3] = round($a[3][0] * 1) . '-' . round($a[3][1] * 1);
                $a[4] = round($a[4][0] * 1) . '-' . round($a[4][1] * 1);
                break;
            case 'nor':
                $a[0] = round($a[0][0] * 1) . '-' . round($a[0][1] * 1);
                $a[1] = round($a[1][0] * 1) . '-' . round($a[1][1] * 1);
                $a[2] = round($a[2][0] * 1) . '-' . round($a[2][1] * 1);
                $a[3] = round($a[3][0] * 1) . '-' . round($a[3][1] * 1);
                $a[4] = round($a[4][0] * 1) . '-' . round($a[4][1] * 1);
                break;
            case 'bet':
                $name = $name . ' (Улучшенное)';
                $a[0] = round($a[0][0] * 1.05) . '-' . round($a[0][1] * 1.05);
                $a[1] = round($a[1][0] * 1.05) . '-' . round($a[1][1] * 1.05);
                $a[2] = round($a[2][0] * 1.05) . '-' . round($a[2][1] * 1.05);
                $a[3] = round($a[3][0] * 1.05) . '-' . round($a[3][1] * 1.05);
                $a[4] = round($a[4][0] * 1.05) . '-' . round($a[4][1] * 1.05);
                break;
            case 'rar':
                $name = $name . ' (Редкое)';
                $a[0] = round($a[0][0] * 1.1) . '-' . round($a[0][1] * 1.1);
                $a[1] = round($a[1][0] * 1.1) . '-' . round($a[1][1] * 1.1);
                $a[2] = round($a[2][0] * 1.1) . '-' . round($a[2][1] * 1.1);
                $a[3] = round($a[3][0] * 1.1) . '-' . round($a[3][1] * 1.1);
                $a[4] = round($a[4][0] * 1.1) . '-' . round($a[4][1] * 1.1);
                break;
            case 'eli':
                $name = $name . ' (Элитное)';
                $a[0] = round($a[0][0] * 1.15) . '-' . round($a[0][1] * 1.15);
                $a[1] = round($a[1][0] * 1.15) . '-' . round($a[1][1] * 1.15);
                $a[2] = round($a[2][0] * 1.15) . '-' . round($a[2][1] * 1.15);
                $a[3] = round($a[3][0] * 1.15) . '-' . round($a[3][1] * 1.15);
                $a[4] = round($a[4][0] * 1.15) . '-' . round($a[4][1] * 1.15);
                break;
            case 'epi':
                $name = $name . ' (Эпическое)';
                $a[0] = round($a[0][0] * 1.2) . '-' . round($a[0][1] * 1.2);
                $a[1] = round($a[1][0] * 1.2) . '-' . round($a[1][1] * 1.2);
                $a[2] = round($a[2][0] * 1.2) . '-' . round($a[2][1] * 1.2);
                $a[3] = round($a[3][0] * 1.2) . '-' . round($a[3][1] * 1.2);
                $a[4] = round($a[4][0] * 1.2) . '-' . round($a[4][1] * 1.2);
                break;
            case 'leg':
                $name = $name . ' (Легендарное)';
                $a[0] = round($a[0][0] * 1.25) . '-' . round($a[0][1] * 1.25);
                $a[1] = round($a[1][0] * 1.25) . '-' . round($a[1][1] * 1.25);
                $a[2] = round($a[2][0] * 1.25) . '-' . round($a[2][1] * 1.25);
                $a[3] = round($a[3][0] * 1.25) . '-' . round($a[3][1] * 1.25);
                $a[4] = round($a[4][0] * 1.25) . '-' . round($a[4][1] * 1.25);
                break;
        }
        $it[$item2][7] = $a[0] . '~' . $a[1] . '~' . $a[2] . '~' . $a[3] . '~' . $a[4];
    }
    if ($cl == 'a' || $cl == 'x') {
        // teperq izmenim svojstva po prefiksu
        $a = explode('~', $it[$item2][8]);
        if (!isset($a[4])) {
            $a[4] = 0;
        }
        switch ($pref) {
            case 'fur':
                $name .= ' (мех)';
                break;
            case 'tun':
                $name .= ' (хлопок)';
                break;
            case 'bas':
                break;
            case 'nor':
                break;
            case 'bet':
                $name = $name . ' (Улучшенное)';
                $a[0] = round($a[0] * 1.05);
                $a[1] = round($a[1] * 1.05);
                $a[2] = round($a[2] * 1.05);
                $a[3] = round($a[3] * 1.05);
                $a[4] = round($a[4] * 1.05);
                break;
            case 'rar':
                $name = $name . ' (Редкое)';
                $a[0] = round($a[0] * 1.1);
                $a[1] = round($a[1] * 1.1);
                $a[2] = round($a[2] * 1.1);
                $a[3] = round($a[3] * 1.1);
                $a[4] = round($a[4] * 1.1);
                break;
            case 'eli':
                $name = $name . ' (Элитное)';
                $a[0] = round($a[0] * 1.15);
                $a[1] = round($a[1] * 1.15);
                $a[2] = round($a[2] * 1.15);
                $a[3] = round($a[3] * 1.15);
                $a[4] = round($a[4] * 1.15);
                break;
            case 'epi':
                $name = $name . ' (Эпическое)';
                $a[0] = round($a[0] * 1.2);
                $a[1] = round($a[1] * 1.2);
                $a[2] = round($a[2] * 1.2);
                $a[3] = round($a[3] * 1.2);
                $a[4] = round($a[4] * 1.2);
                break;
            case 'leg':
                $name = $name . ' (Легендарное)';
                $a[0] = round($a[0] * 1.25);
                $a[1] = round($a[1] * 1.25);
                $a[2] = round($a[2] * 1.25);
                $a[3] = round($a[3] * 1.25);
                $a[4] = round($a[4] * 1.25);
                break;
        }
        $it[$item2][8] = $a[0] . '~' . $a[1] . '~' . $a[2] . '~' . $a[3] . '~' . $a[4];
    }
    $it[$item2][0] = $name;
    return $it[$item2];
}
if (!isset($_GET['part'])) {
    // chastq pervaja:  vyberaem svitok:
    $f .= 'выберите свиток (также имейте при себе пустой):<br/>';
    include_once 'modules/f_list_inventory.php';
    $f .= list_inventory($LOGIN, 'i.s.', 'clone_scroll&part=2');
    $f .= '';
    $f .= '<a class="blue" href="game.php?sid=' . $sid . '">в игру</a>';
    $f .= gen_footer();
    exit($f);
}
if ($_GET['part'] == 2) {
    // teperq sobstvenno vse i delaem
    $scroll = preg_replace('/[^a-z0-9_\\.]/i', '', $_GET['to']);
    include_once 'modules/f_has_item.php';
    if (!has_item($scroll, $LOGIN)) {
        put_error('netu etogo svitka');
    }
    // proverim estq li u igroka pustoj svitok:
    include_once 'modules/f_has_count.php';
    include_once 'modules/f_delete_count.php';
    if (!has_count('i.q.que.scroll', 1, $LOGIN)) {
        put_g_error('при себе надо иметь пустой свиток для записи');
    }
    // udaljaem -
    delete_count('i.q.que.scroll', 1, $LOGIN);
    // berem nazvanie svitka
    include_once 'modules/f_real_name.php';
    $rn = real_name($scroll);
    // berem cebnu svitka
    $q = do_mysql("SELECT price FROM items WHERE fullname = '" . $scroll . "';");
    $price = mysql_result($q, 0);
<?php 
// odetq ili snjatq knigu magii na mesto:
$book = preg_replace('/[^a-z0-9_\\.]/i', '', $_GET['book']);
if (!$book) {
    put_error('neukazana kniga');
}
$q = do_mysql("SELECT name, is_in FROM items WHERE fullname = '" . $book . "' AND belongs = '" . $LOGIN . "' AND is_in <> 'ban';");
if (!mysql_num_rows($q)) {
    put_error('нету такой книги');
}
$it = mysql_fetch_assoc($q);
$f = '';
if ($it['is_in'] == 'mbk') {
    // snimem:
    $q = do_mysql("SELECT COUNT(*) FROM items WHERE belongs = '" . $LOGIN . "' AND is_in = 'inv' AND weight > 0;");
    $c = mysql_result($q, 0);
    if ($c > $I_SEP_C) {
        put_g_error('в рюгзаке нехватает места');
    }
    $q = do_mysql("UPDATE items SET is_in = 'inv' WHERE fullname = '" . $book . "';");
    $f .= 'вы сняли ' . $it['name'] . '!';
} else {
    // estq li tam eshe odna?
    $q = do_mysql("SELECT fullname FROM items WHERE is_in = 'mbk' AND belongs = '" . $LOGIN . "';");
    if (mysql_num_rows($q)) {
        $itb = mysql_result($q, 0);
        do_mysql("UPDATE items SET is_in = 'inv' WHERE fullname = '" . $itb . "';");
        do_mysql("UPDATE items SET is_in = 'mbk' WHERE fullname = '" . $book . "';");
    } else {
        do_mysql("UPDATE items SET is_in = 'mbk' WHERE fullname = '" . $book . "';");
    }
function carpenter($i)
{
    global $LOGIN;
    global $p;
    global $arr;
    global $sm;
    // setting image
    $imga = substr($sm['carpenter'], 0, 7);
    if (!array_key_exists($imga, $arr)) {
        put_error('несовпадают индексы');
    }
    $imga = str_replace('.', '_', $imga);
    $img = file('modules/ascii_art/carpenter/' . $imga . '.txt');
    $img = implode('', $img);
    $img = str_replace("\n", '', $img);
    $img = str_replace("\r", '', $img);
    $sm['carpenter_img'][$i] = $img[$i];
    do_mysql("UPDATE carpenter SET carpenter_img = '" . $sm['carpenter_img'] . "' WHERE id_player = '" . $p['id_player'] . "';");
    // checking if all identical
    $found = 1;
    for ($i = 0; $i < 25; $i++) {
        if ($img[$i] == ' ') {
            continue;
        }
        if ($img[$i] != $sm['carpenter_img'][$i]) {
            $found = 0;
            break;
        }
    }
    if ($found) {
        // gaining item
        include_once 'modules/f_gain_item.php';
        $it = gain_item($sm['carpenter'], 1, $LOGIN);
        do_mysql("DELETE FROM carpenter WHERE id_player = '" . $p['id_player'] . "';");
        do_mysql("UPDATE items SET name = CONCAT(name, ' [" . $p['name'] . "]') WHERE fullname = '" . $it . "';");
        exit_msg('плотник', 'изделье завершено! ');
    }
}
<?php 
// bystroe ispolqzovanie veshej
$num = preg_replace('/[^0-9]/', '', $_GET['num']);
if ($num === false) {
    put_error('a num gde?');
}
if ($num > count($p['magic'])) {
    $num = count($p['magic']);
}
if ($num <= 0) {
    $num = 1;
}
$num -= 1;
$_GET['spell'] = $p['magic'][$num];
$action = 'cast_from_head';
<?php 
// razgovarivatq s priruchennym
$npc = preg_replace('/[^a-z0-9\\._]/i', '', $_GET['npc']);
if (!$npc) {
    put_error('where is animal taklk to');
}
if (isset($_GET['part'])) {
    $part = preg_replace('/[^a-z0-9_]/i', '', $_GET['part']);
} else {
    $part = '';
}
$nid = is_npc($npc);
$nn = do_mysql("SELECT * FROM npc WHERE id_npc = '" . $nid . "';");
$nn = mysql_fetch_assoc($nn);
if ($nn['belongs'] != $LOGIN) {
    put_error('это не ваш нпц');
}
if ($nn['location'] != $p['location']) {
    put_g_error('рядом с вами нету этого нпц');
}
$f = gen_header($nn['name']);
$f .= '<div class="y" href="aof"><b>' . $nn['name'] . '</b></div><p>';
if (!$part) {
    $f .= '» <a class="blue" href="game.php?sid=' . $sid . '&action=talk_to_priru&part=har&npc=' . $npc . '">';
    $f .= 'просмотреть информацию</a><br/>';
    $f .= '» <a class="blue" href="game.php?sid=' . $sid . '&action=talk_to_priru&part=name1&npc=' . $npc . '">';
    $f .= 'дать кличку</a><br/>';
    if ($nn['move'] != 0) {
        $f .= '» <a class="blue" href="game.php?sid=' . $sid . '&action=talk_to_priru&part=stay&npc=' . $npc . '">стой тут!</a><br/>';
    } else {
        $f .= '» <a class="blue" href="game.php?sid=' . $sid . '&action=talk_to_priru&part=stay&npc=' . $npc . '">иди за мной!</a><br/>';
function check_npc_exp($npc2)
{
    $id = is_npc($npc2);
    if (!$id) {
        return 0;
    }
    $q = do_mysql("SELECT * FROM  npc WHERE id_npc = '" . $id . "';");
    $n = mysql_fetch_assoc($q);
    $exphas = round((600 * $n['lvl'] * $n['lvl'] + 1000 * $n['lvl']) / 7);
    $expto = 600 * $n['lvl'] * $n['lvl'] + 1000 * $n['lvl'];
    // exphas - do novogo ochka, expto, do novogo urovnja.
    if ($exphas <= $n['exphas']) {
        $n['exphas'] -= $exphas;
        $s = array('str', 'dex', 'int', 'rea', 'other');
        $num = array_rand($s);
        $n[$s[$num]]++;
        add_journal($n['name'] . ' получил очко опыта! ' . $s[$num] . '++!', 'l.' . $n['location']);
        $file_name = str_replace('.', '_', $n['realname']);
        $dir = substr($n['realname'], 2, 1);
        if (!file_exists('modules/npc/' . $dir . '/' . $file_name . '.php')) {
            put_error('файл нпц не найден ' . $fullname);
        }
        include 'modules/npc/' . $dir . '/' . $file_name . '.php';
        $p['skills'][0] = $n['str'];
        $p['skills'][1] = $n['dex'];
        $p['skills'][2] = $n['int'];
        $p['skills'][3] = $n['rea'];
        $p['skills'][4] = $n['other'];
        $t[0] = $p['skills'][1] * 10 + $p['skills'][4] * 10 + $p['skills'][3] * 2;
        # udar
        $t[1] = $p['skills'][1] * 10 + $p['skills'][4] * 10 + $p['skills'][3] * 5;
        # blok
        $t[2] = $p['skills'][1] * 5 + $p['skills'][4] * 5 + $p['skills'][3] * 5;
        # uklon
        $t[3] = $p['skills'][1] * 10 + $p['skills'][4] * 10 + $p['skills'][3] * 2;
        # parirovanie
        $t[4] = $p['skills'][2] * 8 + $p['skills'][4] * 3;
        // pri primenenii dobavitq magija na 9 # uron magija
        $t[5] = $p['skills'][2] * 4 + $p['skills'][4] * 2 + $p['skills'][4] * 6;
        // pri primenenii dobavitq magija na 3 # ochki blok magija
        $t[6] = $p['skills'][2] * 8 + $p['skills'][4] * 2 + $p['skills'][4] * 8;
        // pri primenenii dobavitq magija na 3 # soprotivlenie magii
        $t[7] = $p['skills'][2] * 5 + $p['skills'][4] * 5 + $p['skills'][4] + $p['skills'][4] * 3;
        // pri ispolqzovanii dobavitq magija na 3; # uklon ot magii
        $t[8] = $p['skills'][1] * 3 + $p['skills'][4] * 3 + $p['skills'][4] * 3;
        # uklon ot strelqby
        $t[9] = $p['skills'][1] * 5 + $p['skills'][3] * 5 + $p['skills'][4] * 5;
        $life = $p['skills'][0] * 71 + $p['skills'][1] * 32;
        $n['life'] = $life . '|' . $life;
        $n['chanse'] = $t[0] . '~' . $t[1] . '~' . $t[2] . '~' . $t[3] . '~' . $t[4] . '~' . $t[5] . '~' . $t[6] . '~' . $t[7] . '~' . $t[8] . '~' . $t[9];
        $n['exp'] = $n['lvl'] * 20 + $n['str'] * 5;
        $dmgmin = $n['lvl'] * 21 + $p['skills'][0] * 4 + $p['skills'][4] * 5 + $p['skills'][1] * 3;
        $dmgmax = $n['lvl'] * 22 + $p['skills'][0] * 8 + $p['skills'][4] * 7 + $p['skills'][1] * 4;
        // $n['dmg'] = str_replace ('1-1', $dmgmin.'-'.$dmgmax, $n['dmg']);
        $primea = round(($dmgmin + $dmgmax) / 3);
        $seconda = round(($dmgmin + $dmgmax) / 5);
        // $dmgmin = round ($dmgmin * 0.7);
        // $dmgmax = round ($dmgmax * 0.7);
        // $n['dmg'] = str_replace ('2-2', $dmgmin.'-'.$dmgmax, $n['dmg']);
        $n['dmg'] = explode('~', $npc['dmg']);
        for ($i = 0; $i < 5; $i++) {
            if ($n['dmg'][$i] == '1-1') {
                $n['dmg'][$i] = $dmgmin . '-' . $dmgmax;
            }
            if ($n['dmg'][$i] == '2-2') {
                $n['dmg'][$i] = round($dmgmin * 0.7) . '-' . round($dmgmax * 0.7);
            }
        }
        $n['dmg'] = implode('~', $n['dmg']);
        $n['armor'] = explode('~', $npc['armor']);
        for ($i = 0; $i < 5; $i++) {
            if ($n['armor'][$i] == 1) {
                $n['armor'][$i] = $primea;
            }
            if ($n['armor'][$i] == 2) {
                $n['armor'][$i] = $seconda;
            }
        }
        $n['armor'] = implode('~', $n['armor']);
        //echo '<pre>';
        //print_r ($n);
        //print_r ($npc);
        do_mysql("UPDATE npc SET exphas = '" . $n['exphas'] . "', str = '" . $n['str'] . "', dex = '" . $n['dex'] . "', `int` = '" . $n['int'] . "', rea = '" . $n['rea'] . "', other = '" . $n['other'] . "', sp = sp + 1, dmg = '" . $n['dmg'] . "', armor = '" . $n['armor'] . "', life = '" . $n['life'] . "', chanse = '" . $n['chanse'] . "', exp = '" . $n['exp'] . "' WHERE id_npc = '" . $id . "';");
        unset($npc);
    }
    if ($expto <= $n['expto']) {
        $n['expto'] -= $expto;
        $n['lvl'] += 1;
        $n['str'] += 1;
        $n['dex'] += 1;
        $n['other'] += 1;
        $n['sp'] += 3;
        add_journal($n['name'] . ' получил новый уровень! ', 'l.' . $n['location']);
        $file_name = str_replace('.', '_', $n['realname']);
        $dir = substr($n['realname'], 2, 1);
        if (!file_exists('modules/npc/' . $dir . '/' . $file_name . '.php')) {
            put_error('файл нпц не найден ' . $fullname);
        }
        include 'modules/npc/' . $dir . '/' . $file_name . '.php';
        $p['skills'][0] = $n['str'];
        $p['skills'][1] = $n['dex'];
        $p['skills'][2] = $n['int'];
        $p['skills'][3] = $n['rea'];
        $p['skills'][4] = $n['other'];
        $t[0] = $p['skills'][1] * 10 + $p['skills'][4] * 10 + $p['skills'][3] * 2;
        # udar
        $t[1] = $p['skills'][1] * 10 + $p['skills'][4] * 10 + $p['skills'][3] * 5;
        # blok
        $t[2] = $p['skills'][1] * 5 + $p['skills'][4] * 5 + $p['skills'][3] * 5;
        # uklon
        $t[3] = $p['skills'][1] * 10 + $p['skills'][4] * 10 + $p['skills'][3] * 2;
        # parirovanie
        $t[4] = $p['skills'][2] * 8 + $p['skills'][4] * 3;
        // pri primenenii dobavitq magija na 9 # uron magija
        $t[5] = $p['skills'][2] * 4 + $p['skills'][4] * 2 + $p['skills'][4] * 6;
        // pri primenenii dobavitq magija na 3 # ochki blok magija
        $t[6] = $p['skills'][2] * 8 + $p['skills'][4] * 2 + $p['skills'][4] * 8;
        // pri primenenii dobavitq magija na 3 # soprotivlenie magii
        $t[7] = $p['skills'][2] * 5 + $p['skills'][4] * 5 + $p['skills'][4] + $p['skills'][4] * 3;
        // pri ispolqzovanii dobavitq magija na 3; # uklon ot magii
        $t[8] = $p['skills'][1] * 3 + $p['skills'][4] * 3 + $p['skills'][4] * 3;
        # uklon ot strelqby
        $t[9] = $p['skills'][1] * 5 + $p['skills'][3] * 5 + $p['skills'][4] * 5;
        $life = $p['skills'][0] * 71 + $p['skills'][1] * 32;
        $n['life'] = $life . '|' . $life;
        $n['chanse'] = $t[0] . '~' . $t[1] . '~' . $t[2] . '~' . $t[3] . '~' . $t[4] . '~' . $t[5] . '~' . $t[6] . '~' . $t[7] . '~' . $t[8] . '~' . $t[9];
        $n['exp'] = $n['lvl'] * 20 + $n['str'] * 5;
        $dmgmin = $n['lvl'] * 21 + $p['skills'][0] * 4 + $p['skills'][4] * 5 + $p['skills'][1] * 3;
        $dmgmax = $n['lvl'] * 22 + $p['skills'][0] * 8 + $p['skills'][4] * 7 + $p['skills'][1] * 4;
        // $n['dmg'] = str_replace ('1-1', $dmgmin.'-'.$dmgmax, $n['dmg']);
        $primea = round(($dmgmin + $dmgmax) / 3);
        $seconda = round(($dmgmin + $dmgmax) / 5);
        // $dmgmin = round ($dmgmin * 0.7);
        // $dmgmax = round ($dmgmax * 0.7);
        // $n['dmg'] = str_replace ('2-2', $dmgmin.'-'.$dmgmax, $n['dmg']);
        $n['dmg'] = explode('~', $npc['dmg']);
        for ($i = 0; $i < 5; $i++) {
            if ($n['dmg'][$i] == '1-1') {
                $n['dmg'][$i] = $dmgmin . '-' . $dmgmax;
            }
            if ($n['dmg'][$i] == '2-2') {
                $n['dmg'][$i] = round($dmgmin * 0.7) . '-' . round($dmgmax * 0.7);
            }
        }
        $n['dmg'] = implode('~', $n['dmg']);
        $n['armor'] = explode('~', $npc['armor']);
        for ($i = 0; $i < 5; $i++) {
            if ($n['armor'][$i] == 1) {
                $n['armor'][$i] = $primea;
            }
            if ($n['armor'][$i] == 2) {
                $n['armor'][$i] = $seconda;
            }
        }
        $n['armor'] = implode('~', $n['armor']);
        //echo '<pre>';
        //print_r ($n);
        //print_r ($npc);
        do_mysql("UPDATE npc SET life = '" . $n['life'] . "', dmg = '" . $n['dmg'] . "', armor = '" . $n['armor'] . "', exp = '" . $n['exp'] . "', chanse = '" . $n['chanse'] . "', str = '" . $n['str'] . "', dex = '" . $n['dex'] . "', other = '" . $n['other'] . "', expto = '" . $n['expto'] . "', sp = '" . $n['sp'] . "', lvl = '" . $n['lvl'] . "' WHERE id_npc = '" . $id . "';");
    }
    return 1;
}
Пример #27
0
<?php 
// odetq vtoroe oruzhie esli estq takoj navyk
//
$item = preg_replace('/[^a-z0-9_\\.]/i', '', $_GET['weapon']);
$f = '';
if (!$p['skills'][41]) {
    put_g_error('вы неможете взять второе оружие - у вас нету этого навыка');
}
$q = do_mysql("SELECT name, is_in, type FROM items WHERE fullname = '" . $item . "';");
$is_in = mysql_fetch_assoc($q);
if ($is_in['type'] != 'w') {
    put_error('это не оружие: ' . $item);
}
// vmeste s dvuruchnym nelzja nichego:
if (is_in('.2h.', $p['weapon'])) {
    put_g_error('вместе с двуручным второе оружие не возьмешь');
}
if ($is_in['is_in'] == 'shi') {
    // mesto:
    $q = do_mysql("SELECT COUNT(*) FROM items WHERE belongs = '" . $LOGIN . "' AND is_in = 'inv' AND weight > 0;");
    $c = mysql_result($q, 0);
    if ($c > $I_SEP_C) {
        put_g_error('в рюгзаке нехватает места');
    }
    // snimem
    do_mysql("UPDATE items SET is_in = 'inv' WHERE fullname = '" . $item . "';");
    $f .= 'вы сняли ' . $is_in['name'] . '!';
} else {
    // znachit gdeto ne tam
    // proverim harakteristiku:
    $itinf = do_mysql("SELECT on_take FROM items WHERE fullname = '" . $item . "';");
function create_npc($fullname, $region, $location = 0)
{
    //$fullname = preg_replace ('/[^a-z\._0-9]/i', '', $fullname);
    //$region = preg_replace ('/[^a-z0-9_]/i', '', $region);
    //$location = preg_replace ('/[^a-z0-9_\|]/i', '', $location);
    // zagruzim fail npc
    $file_name = str_replace('.', '_', $fullname);
    $dir = substr($fullname, 2, 1);
    if (!file_exists('modules/npc/' . $dir . '/' . $file_name . '.php')) {
        put_error('файл нпц не найден ' . $fullname);
    }
    include 'modules/npc/' . $dir . '/' . $file_name . '.php';
    // teperq imeem vazhnejshie dannye. mnogie postavim 0, nekotorye pridetsja pridumatq
    //////////////////////////////////
    // dlja prostyh npc klassa a i x izmenim drop2
    if ($npc['type'] == 'a' || $npc['type'] == 'x') {
        if (!isset($NO)) {
            $mult = 6;
            //$mult += round ($npc['lvl'] / 10);
            $pts = $npc['lvl'] * $mult + $npc['str'] * 3;
            $npc['pts'] = $pts;
            $base = $npc['lvl'];
            if ($base == 0) {
                $base = 1;
            }
            $pts -= $base * 4;
            // intellekt kachatq stoit lishq magam, drugim ochki raspredelim inache
            $npc['dmg'] = explode('~', $npc['dmg']);
            if ($npc['dmg'][4] != '0-0') {
                $p['skills'][0] = rand(0, $pts);
                $p['skills'][1] = rand(0, $pts - $p['skills'][0]);
                $p['skills'][2] = rand(0, $pts - $p['skills'][0] - $p['skills'][1]);
                $p['skills'][3] = rand(0, $pts - $p['skills'][0] - $p['skills'][1] - $p['skills'][2]);
                $p['skills'][0] += $base;
                $p['skills'][1] += $base;
                $p['skills'][2] += $base;
                $p['skills'][3] += $base;
                $p['skills'][4] = $base;
            } else {
                $p['skills'][0] = rand(0, $pts);
                $p['skills'][1] = rand(0, $pts - $p['skills'][0]);
                $p['skills'][2] = 0;
                $p['skills'][3] = rand(0, $pts - $p['skills'][0] - $p['skills'][1] - $p['skills'][2]);
                $p['skills'][0] += $base;
                $p['skills'][1] += $base;
                $p['skills'][2] += $base;
                $p['skills'][3] += $base;
                $p['skills'][4] = $base;
            }
            $npc['skills'] = $p['skills'];
            $t[0] = $p['skills'][1] * 10 + $p['skills'][4] * 10 + $p['skills'][3] * 2;
            # udar
            $t[1] = $p['skills'][1] * 10 + $p['skills'][4] * 10 + $p['skills'][3] * 5;
            # blok
            $t[2] = $p['skills'][1] * 5 + $p['skills'][4] * 5 + $p['skills'][3] * 5;
            # uklon
            $t[3] = $p['skills'][1] * 10 + $p['skills'][4] * 10 + $p['skills'][3] * 2;
            # parirovanie
            $t[4] = $p['skills'][2] * 8 + $p['skills'][4] * 3;
            // pri primenenii dobavitq magija na 9 # uron magija
            $t[5] = $p['skills'][2] * 4 + $p['skills'][4] * 2 + $p['skills'][4] * 6;
            // pri primenenii dobavitq magija na 3 # ochki blok magija
            $t[6] = $p['skills'][2] * 8 + $p['skills'][4] * 2 + $p['skills'][4] * 8;
            // pri primenenii dobavitq magija na 3 # soprotivlenie magii
            $t[7] = $p['skills'][2] * 5 + $p['skills'][4] * 5 + $p['skills'][4] + $p['skills'][4] * 3;
            // pri ispolqzovanii dobavitq magija na 3; # uklon ot magii
            $t[8] = $p['skills'][1] * 3 + $p['skills'][4] * 3 + $p['skills'][4] * 3;
            # uklon ot strelqby
            $t[9] = $p['skills'][1] * 5 + $p['skills'][3] * 5 + $p['skills'][4] * 5;
            $life = $p['skills'][0] * 71 + $p['skills'][1] * 32;
            $npc['life'] = $life . '|' . $life;
            $npc['chanse'] = $t[0] . '~' . $t[1] . '~' . $t[2] . '~' . $t[3] . '~' . $t[4] . '~' . $t[5] . '~' . $t[6] . '~' . $t[7] . '~' . $t[8] . '~' . $t[9];
            $npc['exp'] = $npc['lvl'] * 20 + $npc['str'] * 5;
            $dmg1 = round((21 + 32 * $npc['lvl']) * 1 * 99 * 100 / 10000);
            $dmg2 = round((21 + 33 * $npc['lvl']) * 1 * 101 * 100 / 10000);
            $dmgmin = $dmg1 + $p['skills'][0] * 4 + $p['skills'][4] * 5 + $p['skills'][1] * 3;
            $dmgmax = $dmg2 + $p['skills'][0] * 8 + $p['skills'][4] * 7 + $p['skills'][1] * 4;
            // $npc['dmg'] = str_replace ('1-1', $dmgmin.'-'.$dmgmax, $npc['dmg']);
            $primea = round(($dmgmin + $dmgmax) / 3);
            $seconda = round(($dmgmin + $dmgmax) / 5);
            // $dmgmin = round ($dmgmin * 0.7);
            // $dmgmax = round ($dmgmax * 0.7);
            // $npc['dmg'] = str_replace ('2-2', $dmgmin.'-'.$dmgmax, $npc['dmg']);
            for ($i = 0; $i < 5; $i++) {
                if ($npc['dmg'][$i] == '1-1') {
                    $npc['dmg'][$i] = $dmgmin . '-' . $dmgmax;
                }
                if ($npc['dmg'][$i] == '2-2') {
                    $npc['dmg'][$i] = round($dmgmin * 0.7) . '-' . round($dmgmax * 0.7);
                }
            }
            $npc['dmg'] = implode('~', $npc['dmg']);
            $npc['armor'] = explode('~', $npc['armor']);
            for ($i = 0; $i < 5; $i++) {
                if ($npc['armor'][$i] == 1) {
                    $npc['armor'][$i] = $primea;
                }
                if ($npc['armor'][$i] == 2) {
                    $npc['armor'][$i] = $seconda;
                }
            }
            $npc['armor'] = implode('~', $npc['armor']);
            $lvl = $npc['lvl'];
            $plus = 3;
            $plus += $npc['str'] * 3;
            $expto = round((600 * $lvl * $lvl + 1000 * $lvl) / 7 * $plus);
        }
        if ($npc['drop2']) {
            //echo $npc['drop2'];
            // chtoto estq
            $sth = explode('~', $npc['drop2']);
            $num = array_rand($sth);
            $sth[$num] = explode(':', $sth[$num]);
            if (rand(0, 100) <= $sth[$num][1]) {
                $npc['drop2'] = $sth[$num][0];
            } else {
                $npc['drop2'] = '';
            }
        }
        if (!$npc['drop2']) {
            // sluchajnyj drop:
            if (rand(0, 100) <= 50) {
                // znachit kidaem to chtyo poluchitsja:
                $rnd = rand(0, 100);
                if ($rnd < 19) {
                    // sluchajnoe oruzhie:
                    $types = array('arb', 'axe', 'bow', 'ham', 'kli', 'kni', 'spe', 'swo', 'tre');
                    $arnd = array_rand($types);
                    include 'sp/sp_rand_weapon.php';
                } else {
                    if ($rnd < 47) {
                        // sluchajnaja bronja
                        $types = array('amu', 'bel', 'bo1', 'bo2', 'bot', 'glo', 'hea', 'leg', 'pon', 'rin', 'sho');
                        $arnd = array_rand($types);
                        include 'sp/sp_rand_armor.php';
                    } else {
                        if ($rnd < 48) {
                            // kvestavaja veshq:
                            include 'sp/sp_rand_quest_item.php';
                        } else {
                            if ($rnd < 59) {
                                // wit
                                include 'sp/sp_rand_shield.php';
                            } else {
                                if ($rnd < 79) {
                                    // eda
                                    include 'sp/sp_rand_food.php';
                                } else {
                                    if ($rnd < 89) {
                                        // svitok:
                                        include 'sp/sp_rand_scroll.php';
                                    } else {
                                        // reagenty
                                        include 'sp/sp_rand_rea.php';
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    if (!isset($expto)) {
        $expto = 0;
        $lvl = 1;
        $npc['pts'] = 0;
        $npc['skills'] = array(10, 10, 10, 10, 10);
    }
    ///////////////////////////////////
    // LOKACIJA:
    // esli lokacija pod nulevym elementom imeetsja, my tolqko dobavim k inloc
    if (!$location) {
        include_once 'modules/f_gen_rnd_loc.php';
        $loc = gen_rnd_loc($region);
        // sozdaem zapros, i ustanavlivaem flag NC = 1, chtob srazu posle npc sozdatq lokaciju
        // na vsjakij sluchjaj, chtob npc bez loki ne ostavitq ili naoborot
        $q2cl = "INSERT INTO locations Values ('" . $loc[0] . "', '" . $region . "', '');";
        $location = $loc[0];
        // dlja togo, chtob potom ukazatq pravilqno
    }
    $map = substr($location, 0, 4);
    // esli ne ukazana, pridetsja sozdatq
    // s lokacijami razobralisq
    // teperq kidaem v bazu npc
    // zapros na kolichestvo pohozhih
    $time = time();
    // vremja sejchjas
    if (!isset($npc['hidden'])) {
        $npc['hidden'] = 0;
    }
    if (!isset($npc['attack_speed'])) {
        $npc['attack_speed'] = 4;
    }
    if (!isset($npc['effect'])) {
        $npc['effect'] = '';
    }
    do_mysql("INSERT INTO npc VALUES (0, '" . $npc['name'] . "', '" . $npc['fullname'] . ".n', '" . $npc['type'] . "', '" . $npc['life'] . "', '" . $location . "', '" . $time . "', '', '" . $npc['move'] . "', '0', '', '" . $npc['dmg'] . "', '" . $npc['armor'] . "', '" . $npc['exp'] . "', '" . $npc['chanse'] . "', '" . $npc['drop2'] . "', '" . $npc['hunt'] . "', '" . $map . "', '0', '" . $time . "', '" . $npc['attack_speed'] . "', '', '" . $npc['fullname'] . "', '" . $npc['hidden'] . "', '" . $npc['skills'][0] . "', '" . $npc['skills'][1] . "', '" . $npc['skills'][2] . "', '" . $npc['skills'][3] . "', '" . $npc['skills'][4] . "', '0', '" . $expto . "', '" . $npc['pts'] . "', '" . $lvl . "', '0', '0', '" . $npc['effect'] . "');");
    //////////
    //die ($npc['drop2']);
    // fullname
    $qfn = do_mysql("SELECT id_npc FROM npc WHERE fullname = '" . $npc['fullname'] . ".n';");
    $fn = mysql_result($qfn, 0);
    $npc['fullname'] .= '.' . $fn;
    do_mysql("UPDATE npc SET fullname = '" . $npc['fullname'] . "' WHERE id_npc = '" . $fn . "';");
    return $npc['fullname'];
}
        $f = gen_header('магия');
        $f .= '<div class="y" id="lagfi"><b>цель</b></div><p>';
        $f .= list_inloc($LOGIN, 'cast_from_book&spell=' . $spell . '&book=' . $book);
        $f .= '<hr/>';
        $f .= '<a class="blue" href="game.php?sid=' . $sid . '&action=showinventory">в инвентарь</a><br/>';
        $f .= '<a class="blue" href="game.php?sid=' . $sid . '">в игру</a>';
        $f .= gen_footer();
        exit($f);
    }
} else {
    $to = preg_replace('/[^a-z0-9_\\.-]/i', '', $_GET['to']);
}
// snachala proverim, estq li kniga:
include_once 'modules/f_has_item.php';
if (!has_item($book, $LOGIN)) {
    put_error('у вас нету книги магии');
}
// proverim estq li v knige zaklinanie:
$q = do_mysql("SELECT on_take FROM items WHERE fullname = '" . $book . "' AND type = 'b';");
$magic = mysql_result($q, 0);
if (strpos($magic, $spell) === false) {
    put_g_error('в этой книге нету этого заклинания!');
}
// proverka na poslednee kastovanie:
include_once 'modules/f_check_last_cast.php';
if (!check_last_cast($LOGIN)) {
    // formiruem blokirujusheju stranicu, no na nej pomestim ssylku prodolzhitq dejstvie:
    $str = $_SERVER['QUERY_STRING'];
    // iz $str nado vyreatq sid
    // nam pomozhet strpos
    $pos = strpos($str, '&');
<?php 
// izmenjaet sobstvennye nastrojki
// $_GET['change']:
// maininfo - osnovnaja infa
// pgmode - tip stranica, loka ili chat
//------------------------
$set = preg_replace('/[^012]/', '', $_GET['set']);
if (!$_GET['change'] || $set === false) {
    put_error('<p>all settings required for settings..</p>');
}
if ($_GET['change'] == 'maininfo') {
    $p['settings'][0] = $set;
}
if ($_GET['change'] == 'pgmode') {
    $p['settings'][1] = $set;
}
if ($_GET['change'] == 'locmode') {
    $p['settings'][2] = $set;
}
if ($_GET['change'] == 'journal') {
    $p['settings'][3] = $set;
}
if ($_GET['change'] == 'mapinfo') {
    $p['settings'][4] = $set;
}
if ($_GET['change'] == 'daynight') {
    $p['settings'][6] = $set;
}
if ($_GET['change'] == 'journal2') {
    $p['settings'][7] = $set;
}