2023-03-31 18:42:06 +00:00
< ? php
2022-06-06 21:30:34 +00:00
2023-06-19 14:40:15 +00:00
use Core\Config ;
use Core\Db ;
2023-08-14 15:15:05 +00:00
use Helper\Conversion ;
2023-06-19 14:40:15 +00:00
use User\Effects ;
2022-06-06 21:30:34 +00:00
2023-06-19 14:40:15 +00:00
if ( ! defined ( 'GAME' )) {
die ();
2022-06-06 21:30:34 +00:00
}
2023-06-19 14:40:15 +00:00
if ( $u -> room [ 'file' ] != 'znahar' ) {
return ;
2022-06-06 21:30:34 +00:00
}
2023-06-19 14:40:15 +00:00
$err = '' ;
function getLevelsData ()
{
global $u ;
return Db :: getRow ( ' select
sum ( skills ) as sum_skills ,
sum ( nskills ) as sum_nskills ,
sum ( ability ) as sum_abilities ,
sum ( vinos ) as sum_vinos ,
sum ( duh ) as sum_duh
from levels where upLevel < ? ', [$u->info[' upLevel ' ]]);
2022-06-06 21:30:34 +00:00
}
2023-06-19 14:40:15 +00:00
function testSkills () : int
{
global $u ;
return getLevelsData ()[ 'sum_skills' ] + $u -> rep [ 'add_skills' ];
2022-06-06 21:30:34 +00:00
}
2023-06-19 14:40:15 +00:00
function testSkills2 () : int
{
global $u ;
return getLevelsData ()[ 'sum_nskills' ] + $u -> rep [ 'add_skills2' ];
2022-06-06 21:30:34 +00:00
}
2023-06-19 14:40:15 +00:00
function testAbilities () : int
{
global $u ;
return getLevelsData ()[ 'sum_abilities' ] + $u -> rep [ 'add_stats' ];
2022-06-06 21:30:34 +00:00
}
2023-06-19 14:40:15 +00:00
function testStat5 ()
{
return 3 + getLevelsData ()[ 'sum_vinos' ];
2022-06-06 21:30:34 +00:00
}
2023-06-19 14:40:15 +00:00
function testStat7 ()
{
return getLevelsData ()[ 'sum_duh' ];
2022-06-06 21:30:34 +00:00
}
2023-06-19 14:40:15 +00:00
function zact ( $i ) : void
{
global $u ;
Db :: sql ( 'insert into aaa_znahar (act, point, uid, time,city) values (?,0,?,unix_timestamp(),?)' , [ $i , $u -> info [ 'id' ], $u -> info [ 'city' ]]);
2022-06-06 21:30:34 +00:00
}
2023-01-10 16:29:32 +00:00
#------------------Запросы и прочее
2023-08-14 15:15:05 +00:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 14:40:15 +00:00
$vinos = [
/* level,summvinos*/
" 0 " => 3 ,
" 1 " => 4 ,
" 2 " => 5 ,
" 3 " => 6 ,
" 4 " => 7 ,
" 5 " => 8 ,
" 6 " => 9 ,
" 7 " => 10 ,
" 8 " => 11 ,
" 9 " => 13 ,
" 10 " => 16 ,
" 11 " => 21 ,
" 12 " => 41 ,
2023-08-14 13:03:45 +00:00
" 21 " => 41 ,
2023-06-19 14:40:15 +00:00
];
2023-01-10 16:29:32 +00:00
//минимальный уровень для статов
2023-06-19 14:40:15 +00:00
$minlvl = [
1 => 0 ,
2 => 0 ,
3 => 0 ,
4 => 0 ,
5 => 4 ,
6 => 7 ,
7 => 10 ,
8 => 12 ,
9 => 15 ,
10 => 20 ,
2023-08-14 13:03:45 +00:00
11 => 0 ,
2023-06-19 14:40:15 +00:00
];
if ( Effects :: hasInjury ( $u -> info [ 'id' ])) {
$err = 'У вас травма. Вы не можете пользоваться услугами знахаря!' ;
} elseif ( isset ( $_GET [ 'unprist' ])) {
$addictionId = ( int ) $_GET [ 'unprist' ];
if ( Effects :: hasAddiction ( $addictionId , $u -> info [ 'id' ])) {
zact ( 4 );
//с б р о с пристрастия
2023-08-14 13:03:45 +00:00
Effects :: removeById ( $u -> info [ 'id' ], $addictionId );
2023-08-14 15:15:05 +00:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 14:40:15 +00:00
$err = 'В с е прошло успешно.' ;
} else {
$err = 'Пристрастие не найдено.' ;
}
} elseif ( isset ( $_POST [ 'dropstats' ])) {
zact ( 3 );
//с б р о с статов
2023-08-14 15:15:05 +00:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 14:40:15 +00:00
$st [ 's1' ] = 3 ;
$st [ 's2' ] = 3 ;
$st [ 's3' ] = 3 ;
$st [ 's4' ] = testStat5 ();
$st [ 's5' ] = 0 ;
$st [ 's6' ] = 0 ;
$st [ 's7' ] = testStat7 ();
$st [ 's8' ] = 0 ;
$st [ 's9' ] = 0 ;
$st [ 's10' ] = 0 ;
$st [ 's11' ] = 0 ;
$st [ 's12' ] = 0 ;
$st [ 's13' ] = 0 ;
$st [ 's14' ] = 0 ;
$st [ 's15' ] = 0 ;
2023-08-14 15:15:05 +00:00
$st = Conversion :: arrayToDataString ( $st );
2023-06-19 14:40:15 +00:00
$n1 = testAbilities ();
$n2 = $u -> info [ 'skills' ];
$n3 = $u -> info [ 'sskills' ];
$n4 = $u -> info [ 'nskills' ];
Db :: sql ( 'update stats set wipe = 0, stats = ?, ability = ?, skills = ?, sskills = ?, nskills = ? where id = ?' , [ $st , $n1 , $n2 , $n3 , $n4 , $u -> info [ 'id' ]]);
2023-08-14 15:15:05 +00:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 14:40:15 +00:00
$err = 'В с е прошло успешно.' ;
} elseif ( isset ( $_POST [ 'dropmastery' ])) {
zact ( 1 );
//с б р о с статов
2023-08-14 15:15:05 +00:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 14:40:15 +00:00
$st [ 'a1' ] = 0 ;
$st [ 'a2' ] = 0 ;
$st [ 'a3' ] = 0 ;
$st [ 'a4' ] = 0 ;
$st [ 'a5' ] = 0 ;
$st [ 'a6' ] = 0 ;
$st [ 'mg1' ] = 0 ;
$st [ 'mg2' ] = 0 ;
$st [ 'mg3' ] = 0 ;
$st [ 'mg4' ] = 0 ;
$st [ 'mg5' ] = 0 ;
$st [ 'mg6' ] = 0 ;
$st [ 'mg7' ] = 0 ;
2023-08-14 15:15:05 +00:00
$st = Conversion :: arrayToDataString ( $st );
2023-06-19 14:40:15 +00:00
$n1 = $u -> info [ 'ability' ];
$n2 = testSkills ();
$n3 = $u -> info [ 'sskills' ];
$n4 = $u -> info [ 'nskills' ];
Db :: sql ( 'update stats set wipe = 0, stats = ?, ability = ?, skills = ?, sskills = ?, nskills = ? where id = ?' , [ $st , $n1 , $n2 , $n3 , $n4 , $u -> info [ 'id' ]]);
2023-08-14 15:15:05 +00:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 14:40:15 +00:00
$err = 'В с е прошло успешно.' ;
} elseif ( isset ( $_POST [ 'dropmastery' ])) {
//Старая версия
zact ( 1 );
//с б р о с характеристик
$u -> info [ 'wipe' ] = 3 ;
$u -> wipe ();
2023-08-14 15:15:05 +00:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 14:40:15 +00:00
$err = 'Умения покинули вас.' ;
} elseif ( isset ( $_POST [ 'dropperks' ])) {
zact ( 1 );
//с б р о с особенностей
$u -> info [ 'wipe' ] = 3.5 ;
$u -> wipe ();
2023-08-14 15:15:05 +00:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 14:40:15 +00:00
$err = 'Особенности покинули вас.' ;
} elseif ( isset ( $_GET [ 'movestat' ])) {
//общее кол-во статов
$allStats = $st [ 's1' ] + $st [ 's2' ] + $st [ 's3' ] + $st [ 's4' ] + $st [ 's5' ] + $st [ 's6' ] + $st [ 's7' ] + $st [ 's8' ] + $st [ 's9' ] + $st [ 's10' ];
$allStatsTesto = $allStats ;
$no = 0 ;
$st_l = 0 ;
for ( $i = 1 ; $i <= 10 ; $i ++ ) {
if ( isset ( $_GET [ 's' . $i ]) && ( $st [ 's' . $i ] + ( int ) $_GET [ 's' . $i ]) >= 0 && $i <= 10 ) {
if ( $minlvl [ $i ] > $u -> info [ 'level' ] && $st [ 's' . $i ] < ( int ) $_GET [ 's' . $i ]) {
$no ++ ;
} else {
if (( int ) $_GET [ 's' . $i ] > 0 ) {
$st_l += ( int ) $_GET [ 's' . $i ];
}
$st [ 's' . $i ] += ( int ) $_GET [ 's' . $i ];
$allStatsNew += ( int ) $_GET [ 's' . $i ];
$allStatsTesto += ( int ) $_GET [ 's' . $i ];
}
}
}
if ( $allStatsTesto != $allStats ) {
$no ++ ;
}
if ( $no == 0 ) {
zact ( 5 );
if (
$st [ 's1' ] >= 3 &&
$st [ 's2' ] >= 3 &&
$st [ 's3' ] >= 3 &&
$st [ 's4' ] >= testStat5 () &&
$st [ 's5' ] >= 0 &&
$st [ 's6' ] >= 0 &&
$st [ 's7' ] >= testStat7 () &&
$st [ 's8' ] >= 0 &&
$st [ 's9' ] >= 0 &&
$st [ 's10' ] >= 0
) {
//Желательно проверку на статы по уровню (можно ли этот стат поднимать на текущем уровне перса)
2023-08-14 15:15:05 +00:00
$u -> info [ 'stats' ] = Conversion :: arrayToDataString ( $st );
2023-06-19 14:40:15 +00:00
Db :: sql ( 'update stats set stats = ? where id = ?' , [ $u -> info [ 'stats' ], $u -> info [ 'id' ]]);
//Надо добавить UPDATE в базе свободных статов
$u -> stats = $u -> getStats ( $u -> info [ 'id' ], 0 , 1 );
$u -> testItems ( $u -> info [ 'id' ], $u -> stats , 0 );
2023-08-14 15:15:05 +00:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 14:40:15 +00:00
}
}
2022-06-06 21:30:34 +00:00
}
2023-06-19 14:40:15 +00:00
$err = " <span style='color: red;'> $err </span> " ;
2023-01-10 16:29:32 +00:00
#------------------Запросы и прочее
2022-06-06 21:30:34 +00:00
?>
< STYLE >
2023-06-19 14:40:15 +00:00
. H3 {
COLOR : #8f0000;
FONT - FAMILY : Arial , serif ;
FONT - SIZE : 12 pt ;
FONT - WEIGHT : bold ;
text - align : center ;
}
body {
margin - top : 5 px ;
margin - left : 5 px ;
background - color : #e2e0e0;
}
#mmoves, #mmoves3 {
background - color : #FFFFCC;
overflow : visible ;
position : absolute ;
border - color : #666666;
border - style : solid ;
border - width : 1 px ;
padding : 2 px ;
}
#mmoves3 {
z - index : 101 ;
}
#mmoves {
white - space : nowrap ;
}
2022-06-06 21:30:34 +00:00
</ STYLE >
< SCRIPT >
2023-06-19 14:40:15 +00:00
function gfastshow ( dsc , dx , dy ) {
top . fullfastshow ( document , mmoves3 , window . event , dsc , dx , dy );
}
function ghideshow () {
top . fullhideshow ( mmoves3 );
}
2022-06-06 21:30:34 +00:00
</ SCRIPT >
</ HEAD >
2023-06-19 14:40:15 +00:00
< body marginwidth = 5 marginheight = 5 >
< div id = " mmoves3 " style = " visibility:hidden; " >
</ div >
< SCRIPT src = '<?= Config::img() ?>/i/commoninf.js' ></ SCRIPT >
< TABLE style = " width: 100% " >
< TR >
< TD >
< DIV class = 'H3' > Комната Знахаря </ DIV >
< ? = $err ; ?> <?php
if ( $u -> error != '' ) {
echo '<br><span style="float:right; color: red; " >' . $u -> error . '</span>' ;
}
if ( $re != '' ) {
echo '<br><span style="float:right; color: red; font-weight: bold;" >' . $re . '</span>' ;
}
?> <BR>
< div style = " font-weight: bold; font-style: italic; margin-bottom: 16px; " >
Запахи трав наполняют помещение , непонятные и пугающие предметы скрываются в пляшущих тенях ...< BR >
Говорят , здесь можно изменить свою судьбу . Стать кем - то иным ... кем раньше был лишь в мечтах ...
</ div >
</ TD >
< TD width = 1 valign = top >
< table border = " 0 " cellpadding = " 0 " cellspacing = " 0 " >
< tr align = " right " valign = " top " >
< td >
<!-- -->
< ? = $goLis ; ?>
<!-- -->
< table width = " 100% " border = " 0 " cellpadding = " 0 " cellspacing = " 1 " bgcolor = " #DEDEDE " >
< tr >
< td bgcolor = " #D3D3D3 " >
< img src = " <?= Config::img() ?>/i/move/links.gif " width = " 9 " height = " 7 " />
</ td >
< td bgcolor = " #D3D3D3 " nowrap >
< a href = " javascript:void(0) " class = " menutop " onClick = " location='main.php?loc=1.180.0.3&rnd=<?= PassGen::intCode() ?>'; " title = " <?php thisInfRm('1.180.0.3', 1); ?> " >
Бойцовский Клуб
</ a >
</ td >
</ tr >
</ table >
</ td >
</ tr >
</ table >
< div id = " mmoves " style = " visibility:hidden; " ></ div >
</ TD >
</ TR >
2022-06-06 21:30:34 +00:00
</ TABLE >
< TABLE >
2023-06-19 14:40:15 +00:00
< TR bgcolor = #D8D8D8>
< TD >< IMG width = 20 height = 20 src = '<?= Config::img() ?>/i/strsmall.gif' > Характеристики </ TD >
< TD >< IMG width = 20 height = 20 src = '<?= Config::img() ?>/i/cureelixirsmall.gif' > Пристрастия </ TD >
< TD >< IMG width = 20 height = 20 src = '<?= Config::img() ?>/i/weaponsmall.gif' > Прочее </ TD >
< TR >
< TD width = 270 valign = top >
< SCRIPT >
var mylvl = < ? = $u -> info [ 'level' ]; ?> ;
//////////////Название,параметр,всего, +сколько, до скольки сбросить(макс возможное),сколько сбрасывать/прибавлять
var pr = [
'Сила' , 's1' , < ? = ( 0 + $st [ 's1' ]) ?> , <?=$u->stats['s1'] - $st['s1'];?>, 3, 0, <?=$minlvl[1];?>,
'Ловкость' , 's2' , < ? = ( 0 + $st [ 's2' ]) ?> , <?=$u->stats['s2'] - $st['s2'];?>, 3, 0, <?=$minlvl[2];?>,
'Интуиция' , 's3' , < ? = ( 0 + $st [ 's3' ]) ?> , <?=$u->stats['s3'] - $st['s3'];?>, 3, 0, <?=$minlvl[3];?>,
'Выносливость' , 's4' , < ? = ( 0 + $st [ 's4' ]) ?> , 0, <?=$vinos[$u->info['level']]?>, 0, <?=$minlvl[4];?>,
'Интеллект' , 's5' , < ? = ( 0 + $st [ 's5' ]) ?> , <?=$u->stats['s5'] - $st['s5'];?>, 0, 0, <?=$minlvl[5];?>,
'Мудрость' , 's6' , < ? = ( 0 + $st [ 's6' ]) ?> , 0, 0, 0, <?=$minlvl[6];?>,
'Духовность' , 's7' , < ? = ( 0 + $st [ 's7' ]) ?> , 0, 0, 0, <?=$minlvl[7];?>,
'Воля' , 's8' , < ? = ( 0 + $st [ 's8' ]) ?> , 0, 0, 0, <?=$minlvl[8];?>,
'Свобода Духа' , 's9' , < ? = ( 0 + $st [ 's9' ]) ?> , 0, 0, 0, <?=$minlvl[9];?>,
'Божественность' , 's10' , < ? = ( 0 + $st [ 's10' ]) ?> , 0, 0, 0, <?=$minlvl[10];?>
];
2022-06-06 21:30:34 +00:00
2023-06-19 14:40:15 +00:00
function getprstr ( i ) {
let ss = pr [ i ] + " : " + ( pr [ i + 2 ] + pr [ i + 3 ] + pr [ i + 5 ]);
if ( pr [ i + 3 ] || pr [ i + 5 ]) {
ss += " ( " + pr [ i + 2 ];
if ( pr [ i + 3 ]) {
ss += ( pr [ i + 3 ] < 0 ? " " : " + " ) + pr [ i + 3 ]
}
if ( pr [ i + 5 ]) {
if ( pr [ i + 5 ] > 0 ) {
ss += " <span style='color: green;'>+ " + pr [ i + 5 ];
} else {
ss += " <span style='color: maroon;'> " + pr [ i + 5 ];
}
ss += " </span> " ;
}
ss += " ) " ;
}
return ss ;
}
var freepr = 0 ;
var movecost = 5 ;
function modpr ( i , to ) {
if ( to == 1 && freepr == 0 ) {
return ;
}
if ( to == - 1 && pr [ i + 2 ] + pr [ i + 5 ] <= pr [ i + 4 ]) {
return ;
}
pr [ i + 5 ] += to ;
freepr -= to ;
document . all [ " pr " + i ] . innerHTML = getprstr ( i );
document . all [ " prfree " ] . innerHTML = freepr ;
var moves = 0 ;
for ( j = 0 ; j < pr . length ; j += 7 ) {
if ( pr [ j + 5 ] > 0 ) {
moves += pr [ j + 5 ]
}
}
movedonebutton . disabled = ( freepr || moves == 0 ? true : false );
}
function movedone () {
if ( freepr ) {
return ;
}
var s = " " ;
for ( j = 0 ; j < pr . length ; j += 7 ) {
if ( pr [ j + 5 ]) {
s += " & " + pr [ j + 1 ] + " = " + pr [ j + 5 ];
}
}
if ( ! s ) {
return
}
location = " ?movestat=0.<?= PassGen::intCode() ?>&sd4=<?= $u->info ['id']?> " + s ;
}
let s = " <TABLE> " ;
for ( let i = 0 ; i < pr . length ; i += 7 ) {
if ( pr [ i + 2 ] != - 1 && mylvl >= pr [ i + 6 ]) {
s += " <TR><TD width=200 id=pr " + i + " > " + getprstr ( i ) + " </TD> " ;
s += '<TD><img src=<?= Config::img() ?>/i/minus.gif onclick="modpr(' + i + ',-1)" style="cursor: hand;"> '
s += '<img src=<?= Config::img() ?>/i/plus.gif onclick="modpr(' + i + ',1)" style="cursor: hand;"></TR>' ;
}
}
s += " </TABLE> " ;
s += " <small>(осталось: <span id='prfree'>0</span>, распределений: <span id='prmoves'>0</span>)<BR> " ;
document . write ( s );
</ SCRIPT >
< input type = button onClick = " movedone(); " id = 'movedonebutton' class = " btn " value = " Применить " disabled >
</ TD >
< TD width = 270 valign = top >
< ? php
$sp = Db :: getRows ( 'select * from eff_users left join eff_main on eff_users.id_eff = eff_main.id2 where (id_eff between 301 and 304 or id_eff between 321 and 332) and `delete` = 0 and uid = ?' , [ $u -> info [ 'id' ]]);
foreach ( $sp as $addiction ) : ?>
< img style = " display: inline-block; vertical-align: bottom; " src = " <?= Config::img() ?>/i/eff/<?= $addiction['img'] ?> " alt = " <?= $addiction['name'] ?> " >
< a style = " font-size: small " href = " /main.php?unprist=<?= $addiction['id'] ?> " > вылечить </ a >< br >
< ? php endforeach ;
if ( empty ( $sp )) : ?>
< div style = " font-size: small; text-align: center; margin-top: 50px; " > У вас нет пристрастий </ div >
< ? php endif ; ?>
</ TD >
< TD valign = top >< BR >
Навыки владения оружием и магией ( < ? = testSkills () ?> )<BR>
< form method = post >
< INPUT type = submit name = 'dropmastery' class = " btn " value = 'Сбросить' onClick = " return confirm('Вы действительно хотите сбросить умения?') " >
< HR style = " border:0;border-bottom:1px solid grey " >
</ form >
Особенности персонажа ( < ? = testSkills2 () ?> )<BR>
< form method = post >
< INPUT type = submit name = 'dropperks' class = " btn " value = 'Сбросить' onClick = " return confirm('Вы действительно хотите сбросить особенности?') " >
< HR style = " border:0;border-bottom:1px solid grey " >
</ form >
Характеристики ( < ? = testAbilities () ?> /<?= (9 + testStat5() + testStat7()) ?>)<BR>
< form method = post >
< INPUT type = submit name = 'dropstats' class = " btn " value = 'Сбросить' onClick = " return confirm('Вы действительно хотите сбросить все характеристики до минимального уровня?') " >
</ form >
2022-06-06 21:30:34 +00:00
</ TABLE >
2023-06-19 14:40:15 +00:00
< small > Прежде чем перераспределять свои параметры , Вам необходимо полностью их сбросить </ small >