avatar_k2proud

Как скрыть информацию о персонаже в MU Online?

Автор k2proud, 2017 Дек. 07, 22:09

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] mu onlineexengineскрытие персонажа

k2proud

Привет знатокам, кто в курсе в чем может бить проблема:
делаю скрить информацию о персонаже на 5 дней, списивает валюту, а в скуле появляется бесконечное значения что делает скрития инфи навсегда а не на 5 дней.
к примеру:
switch($Period) {
case 5: $Selected = 3600 * 24 * 5; break;
5 * 3600 = 18,000
а у меня в скуле
case 10: $Selected = 3600 * 24 * 10; break;
case 20: $Selected = 3600 * 24 * 20; break;
case 30: $Selected = 3600 * 24 * 30; break;
default: $Selected = 3600 * 24 * 5; break;
}

Вот сам модуль hide.php
Спойлер
<?php

// Скрыть информацию о персонаже
// Автор: NexT

if(!defined('EXEngine')) {
Exit;
}

if ($_SESSION['UserName'] == true AND $Online == '0') {
$Credits = GetCoins($Username);

if (isset($_POST['hide'])) {
$Period = $_POST['period'];

$HideResult = $DB->FetchRow($DB->Query("SELECT HideTime FROM Character WHERE Name = '$CharacterName'"));
$HideTime = $HideResult
  • ;

switch($Period) {
case 5: $Selected = 3600 * 24 * 5; break;
case 10: $Selected = 3600 * 24 * 10; break;
case 20: $Selected = 3600 * 24 * 20; break;
case 30: $Selected = 3600 * 24 * 30; break;
default: $Selected = 3600 * 24 * 5; break;
}

$NewHide = $Time + $Selected;
$Sum = $Hide['price'] * $Period;
$Price = $Credits - $Sum;

if (!$Username) {
echo Message('error','Ошибка скрипта №1');
}
elseif (!$CharacterName) {
echo Message('error','Ошибка скрипта №2');
}
elseif ($HideTime > $Time) {
echo Message('error','У вас ещё осталось время!');
}
elseif ($Price < 0) {
echo Message('warning','У вас недостаточно кредитов.');
}
else {
$DB->Query("UPDATE MEMB_INFO SET CashPoint = '$Price' WHERE memb___id = '$Username'
UPDATE dbo.Character SET Hide = '1', HideTime = '$NewHide' WHERE AccountID = '$Username' AND Name = '$CharacterName'");

echo Message('ok','Вы успешно скрыли информацию о персонаже!');
}
}

if (isset($_POST['status'])) {
$Verify = $Security->CheckWord($_POST['hide_status']);

$HideResult = $DB->FetchRow($DB->Query("SELECT HideTime FROM Character WHERE Name = '$CharacterName'"));
$HideTime = $HideResult
  • ;

if (!$Username) {
echo Message('error','Ошибка скрипта №1');
}
elseif (!$CharacterName) {
echo Message('error','Ошибка скрипта №2');
}
elseif ($HideTime < $Time) {
echo Message('error','Время данной услуги истекло!');
}
else {
if($Verify == 'yes') {
$DB->Query("UPDATE dbo.Character SET Hide = '1' WHERE AccountID = '$Username' AND Name = '$CharacterName'");
echo Message('ok','Теперь информацию о персонаже скрывает.');
}
else {
$DB->Query("UPDATE dbo.Character SET Hide = '0' WHERE AccountID = '$Username' AND Name = '$CharacterName'");
echo Message('ok','Теперь информацию о персонаже показывает.');
}
}
}

?>
<h2>Скрыть информацию</h2>

<form name="status-form" method="post">
<div align="center" style="margin:20px 0 20px 0;">
<table class="cells" style="width:100%">
<tr>
<td class="header" colspan="2">Дополнительно</td>
</tr>
<tr>
<td colspan="2" align="left"><span class="small" style="color:#575757">В любой момент, пока действует скрытие информации. Вы можете включить или выключить скрытие информации о персонаже.</span></td>
</tr>
<tr align="left">
<td width="70%" valign="middle" style="vertical-align: middle;"><b>Скрывать информацию</b></td>
<td width="30%"><input type="checkbox" name="hide_status" value="yes"/></td>
</tr>
</table>
<p><input type="hidden" name="status" value="1"><input type="submit" class="newButton" value="Изменить" name="hid" style="width:100%"></p>
</div>
</form>

<form name="hide-form" method="post">
<div align="center" style="margin:20px 0 20px 0;">
<table class="cells" style="width:100%">
<tr>
<td class="header" colspan="2">Скрыть информацию о персонаже</td>
</tr>
<tr align="left">
<td width="40%" valign="middle" style="vertical-align: middle;"><b>Персонаж:</b></td>
<td width="60%"><b style="color:darkred;"><?=$CharacterName;?></b></td>
</tr>
<tr align="left">
<td style="vertical-align: middle;"><b>Кредиты:</b></td>
<td><b><?=$Credits;?></b></td>
</tr>
<tr align="left">
<td valign="middle" style="vertical-align: middle;"><b>Срок:</b></td>
<td>
<select name="period" style="width:100%;">
<option value="5">5 дней</option>
<option value="10">10 дней</option>
<option value="20">20 дней</option>
<option value="30">30 дней</option>
</select>
</td>
</tr>
<tr align="left">
<td valign="middle" style="vertical-align: middle;"><b>Стоимость:</b></td>
<td><b><?=number_format($Hide['price']);?> Кредиты</b> * Срок</td>
</tr>
</table>
<p><input type="hidden" name="hide" value="1"><input type="submit" class="newButton" value="Продолжить" name="hid" style="width:100%"></p>
</div>
</form>
<?php

}
else {
if ($_SESSION['UserName'] != true) {
echo Message('error','Войдите в личный кабинет, либо зарегистрируйтесь.');
}
elseif ($Online == '1') {
echo Message('error','Сначало выйдите из игры!');
}
}

?>
[свернуть]

Помогите розобратся, почему сайт делает значения в скуле больше чем пишет в модуле, спасибо +
Может кому будет также полезно, сайт популярный. Базу использую от ех-геймс обичная.


Swoop

скорей всего у тебя там уже было значение, и ты кучу раз наклацал, что у тебя получилось так.

SmallHabit

#2
Цитировать$NewHide = $Time + $Selected;

А где $Time определён? Я так понимаю должно быть $HideTime

k2proud

#3
Цитата: SmallHabit от 2017 Дек. 12, 20:06  А где $Time определён? Я так понимаю должно быть $HideTime

Поправил на $NewHide = $HideTime + $Selected;
считает правильно, числа заносит в базу нормально, но инфу не скривает + можно бесконечно скривать инфу и не пишет что инфа уже скрита дождитесь окончания срока.

RollsRoyce

Сначала делаешь сброс hidetime на 0.
делаешь через квери в скуле:
UPDATE dbo.Character SET Hide = '0', HideTime = '0' WHERE [Name] = '[color=#FF0000]Ник твоего чара[/color]'
Потом находишь код:
else {
$DB->Query("UPDATE MEMB_INFO SET CashPoint = '$Price' WHERE memb___id = '$Username'
UPDATE dbo.Character SET Hide = '1', HideTime = '$NewHide' WHERE AccountID = '$Username' AND Name = '$CharacterName'");

echo Message('ok','Вы успешно скрыли информацию о персонаже!');
}

сделай так, чтобы посмотреть какие параметры улетают в базу:
Спойлер
else {
$sql = "UPDATE MEMB_INFO SET CashPoint = '$Price' WHERE memb___id = '$Username'
UPDATE dbo.Character SET Hide = '1', HideTime = '$NewHide' WHERE AccountID = '$Username' AND Name = '$CharacterName'";
$DB->Query($sql);
echo Message('ok','Вы успешно скрыли информацию о персонаже!');
echo '<br/>запрос: ' . $sql;
}
[свернуть]

и посмотри какие данные передаются в запрос.

k2proud

#5
Цитата: RollsRoyce от 2017 Дек. 13, 13:13  Сначала делаешь сброс hidetime на 0.
делаешь через квери в скуле:
UPDATE dbo.Character SET Hide = '0', HideTime = '0' WHERE [Name] = '[color=#FF0000]Ник твоего чара[/color]'
Потом находишь код:
else {
$DB->Query("UPDATE MEMB_INFO SET CashPoint = '$Price' WHERE memb___id = '$Username'
UPDATE dbo.Character SET Hide = '1', HideTime = '$NewHide' WHERE AccountID = '$Username' AND Name = '$CharacterName'");

echo Message('ok','Вы успешно скрыли информацию о персонаже!');
}

сделай так, чтобы посмотреть какие параметры улетают в базу:
Спойлер
else {
$sql = "UPDATE MEMB_INFO SET CashPoint = '$Price' WHERE memb___id = '$Username'
UPDATE dbo.Character SET Hide = '1', HideTime = '$NewHide' WHERE AccountID = '$Username' AND Name = '$CharacterName'";
$DB->Query($sql);
echo Message('ok','Вы успешно скрыли информацию о персонаже!');
echo '<br/>запрос: ' . $sql;
}
[свернуть]

и посмотри какие данные передаются в запрос.


Вы успешно скрыли информацию о персонаже!


запрос: UPDATE MEMB_INFO SET CashPoint = '9631' WHERE memb___id = 'connect' UPDATE dbo.Character SET Hide = '1', HideTime = '432000' WHERE AccountID = 'test' AND Name = 'TestDW'

вносит правильно число в базу но всеравно можно беконечно покупать скрития + в char.php не скривает

epmak

#6
...число сильно похоже на дату в unix формате. И принцип работы там, если сейчас меньше дата, чем указана, то скрываем инфу, если больше или не указана, то показываем.

Так было в классической версии. Но исходя из описания, либо автор что-то недоговаривает, либо там сыр-бор из всего.
Вы б сначала весь скрипт посмотрели...

k2proud

Цитата: epmak от 2017 Дек. 13, 14:17  ...число сильно похоже на дату в unix формате. И принцип работы там, если сейчас меньше дата, чем указана, то скрываем инфу, если больше или не указана, то показываем.

Так было в классической версии. Но исходя из описания, либо автор что-то недоговаривает, либо там сыр-бор из всего.
Вы б сначала весь скрипт посмотрели...

стандарт скрипт от оригинал ех-веб вверху теми.

RollsRoyce

посмотри файл core/init.php
там есть присвоение переменной $Time = time(); строка 12
т.к. у тебя записывается в базу только то число которое исходит по формуле: $NewHide = $Time + $Selected; но при это $Time определяется как 0.

k2proud

#9
Цитата: SmallHabit от 2017 Дек. 12, 21:06  А где $Time определён? Я так понимаю должно быть $HideTime

сделал так + в файле core/init.php
с Time сделал HideTime, все заработало и скривает как нужнов базу вносит правильно.

Буду надеятся что Time с init.php только hide.php использует ) иначе смена етого значения может потянуть за собой проблеми с другими модулями

Profesor08

Вместо $Time напиши time(), и твои опасения исчезнут.

Похожие темы (5)