2023-03-31 21:42:06 +03:00
< ? php
2022-06-07 00:30:34 +03:00
2023-06-19 17:40:15 +03:00
use Core\Config ;
use Core\Db ;
2023-08-14 18:15:05 +03:00
use Helper\Conversion ;
2023-06-19 17:40:15 +03:00
use User\Effects ;
2022-06-07 00:30:34 +03:00
2023-06-19 17:40:15 +03:00
if ( ! defined ( 'GAME' )) {
die ();
2022-06-07 00:30:34 +03:00
}
2023-06-19 17:40:15 +03:00
if ( $u -> room [ 'file' ] != 'znahar' ) {
return ;
2022-06-07 00:30:34 +03:00
}
2023-06-19 17:40:15 +03: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-07 00:30:34 +03:00
}
2023-06-19 17:40:15 +03:00
function testSkills () : int
{
global $u ;
return getLevelsData ()[ 'sum_skills' ] + $u -> rep [ 'add_skills' ];
2022-06-07 00:30:34 +03:00
}
2023-06-19 17:40:15 +03:00
function testSkills2 () : int
{
global $u ;
return getLevelsData ()[ 'sum_nskills' ] + $u -> rep [ 'add_skills2' ];
2022-06-07 00:30:34 +03:00
}
2023-06-19 17:40:15 +03:00
function testAbilities () : int
{
global $u ;
return getLevelsData ()[ 'sum_abilities' ] + $u -> rep [ 'add_stats' ];
2022-06-07 00:30:34 +03:00
}
2023-06-19 17:40:15 +03:00
function testStat5 ()
{
return 3 + getLevelsData ()[ 'sum_vinos' ];
2022-06-07 00:30:34 +03:00
}
2023-06-19 17:40:15 +03:00
function testStat7 ()
{
return getLevelsData ()[ 'sum_duh' ];
2022-06-07 00:30:34 +03:00
}
2023-06-19 17:40:15 +03: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-07 00:30:34 +03:00
}
2023-01-10 18:29:32 +02:00
#------------------Запросы и прочее
2023-08-14 18:15:05 +03:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 17:40:15 +03: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 16:03:45 +03:00
" 21 " => 41 ,
2023-06-19 17:40:15 +03:00
];
2023-01-10 18:29:32 +02:00
//минимальный уровень для статов
2023-06-19 17:40:15 +03: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 16:03:45 +03:00
11 => 0 ,
2023-06-19 17:40:15 +03: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 16:03:45 +03:00
Effects :: removeById ( $u -> info [ 'id' ], $addictionId );
2023-08-14 18:15:05 +03:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 17:40:15 +03:00
$err = 'Все прошло успешно.' ;
} else {
$err = 'Пристрастие не найдено.' ;
}
} elseif ( isset ( $_POST [ 'dropstats' ])) {
zact ( 3 );
//сброс статов
2023-08-14 18:15:05 +03:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 17:40:15 +03: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 18:15:05 +03:00
$st = Conversion :: arrayToDataString ( $st );
2023-06-19 17:40:15 +03: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 18:15:05 +03:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 17:40:15 +03:00
$err = 'Все прошло успешно.' ;
} elseif ( isset ( $_POST [ 'dropmastery' ])) {
zact ( 1 );
//сброс статов
2023-08-14 18:15:05 +03:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 17:40:15 +03: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 18:15:05 +03:00
$st = Conversion :: arrayToDataString ( $st );
2023-06-19 17:40:15 +03: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 18:15:05 +03:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 17:40:15 +03:00
$err = 'Все прошло успешно.' ;
} elseif ( isset ( $_POST [ 'dropmastery' ])) {
//Старая версия
zact ( 1 );
//сброс характеристик
$u -> info [ 'wipe' ] = 3 ;
$u -> wipe ();
2023-08-14 18:15:05 +03:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 17:40:15 +03:00
$err = 'Умения покинули вас.' ;
} elseif ( isset ( $_POST [ 'dropperks' ])) {
zact ( 1 );
//сброс особенностей
$u -> info [ 'wipe' ] = 3.5 ;
$u -> wipe ();
2023-08-14 18:15:05 +03:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 17:40:15 +03: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 18:15:05 +03:00
$u -> info [ 'stats' ] = Conversion :: arrayToDataString ( $st );
2023-06-19 17:40:15 +03: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 18:15:05 +03:00
$st = Conversion :: dataStringToArray ( $u -> info [ 'stats' ]);
2023-06-19 17:40:15 +03:00
}
}
2022-06-07 00:30:34 +03:00
}
2023-06-19 17:40:15 +03:00
$err = " <span style='color: red;'> $err </span> " ;
2023-01-10 18:29:32 +02:00
#------------------Запросы и прочее
2022-06-07 00:30:34 +03:00
?>
<STYLE>
2023-06-19 17:40:15 +03:00
.H3 {
COLOR: #8f0000;
FONT-FAMILY: Arial, serif;
FONT-SIZE: 12pt;
FONT-WEIGHT: bold;
text-align: center;
}
body {
margin-top: 5px;
margin-left: 5px;
background-color: #e2e0e0;
}
#mmoves, #mmoves3 {
background-color: #FFFFCC;
overflow: visible;
position: absolute;
border-color: #666666;
border-style: solid;
border-width: 1px;
padding: 2px;
}
#mmoves3 {
z-index: 101;
}
#mmoves {
white-space: nowrap;
}
2022-06-07 00:30:34 +03:00
</STYLE>
<SCRIPT>
2023-06-19 17:40:15 +03:00
function gfastshow(dsc, dx, dy) {
top.fullfastshow(document, mmoves3, window.event, dsc, dx, dy);
}
function ghideshow() {
top.fullhideshow(mmoves3);
}
2022-06-07 00:30:34 +03:00
</SCRIPT>
</HEAD>
2023-06-19 17:40:15 +03: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-07 00:30:34 +03:00
</TABLE>
<TABLE>
2023-06-19 17:40:15 +03: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-07 00:30:34 +03:00
2023-06-19 17:40:15 +03: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-07 00:30:34 +03:00
</TABLE>
2023-06-19 17:40:15 +03:00
<small>Прежде чем перераспределять свои параметры, Вам необходимо полностью их сбросить</small>