WIP: removing User::class public array $items for Stat()::class.
This commit is contained in:
@@ -5,6 +5,7 @@ namespace User;
|
||||
use Core\Config;
|
||||
use Core\Db;
|
||||
use Helper\Conversion;
|
||||
use Model\Constant\Stat;
|
||||
use User;
|
||||
|
||||
/**
|
||||
@@ -12,16 +13,11 @@ use User;
|
||||
*/
|
||||
class InfoBox
|
||||
{
|
||||
|
||||
private User $user;
|
||||
private array $info;
|
||||
private array $is;
|
||||
|
||||
public function __construct(User $user)
|
||||
public function __construct(private readonly User $user, private readonly Stat $statname = new Stat())
|
||||
{
|
||||
$this->user = $user;
|
||||
$this->info = $user->info;
|
||||
$this->is = $user->is;
|
||||
}
|
||||
|
||||
public function getInfoPers($uid, $i1, $sn = 0, $ivv = 0): array
|
||||
@@ -116,7 +112,7 @@ class InfoBox
|
||||
|
||||
$lvar = $this->getInfoItemInfo($pl, $td);
|
||||
|
||||
if (@isset($sn['items_img'][$tp_img[$pl['inOdet']]])) {
|
||||
if (isset($sn['items_img'][$tp_img[$pl['inOdet']]])) {
|
||||
$uimg = 'rimg/r' . $sn['items_img'][$tp_img[$pl['inOdet']]];
|
||||
} else {
|
||||
$uimg = 'i/items/' . $pl['img'];
|
||||
@@ -160,6 +156,7 @@ class InfoBox
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Шлем,Венок
|
||||
$wj1i = '';
|
||||
$br = '<div align=\\\'center\\\' style=\\\'margin:4px;\\\'><img src=\\\'' . Config::img() . '/1x1.gif\\\' height=\\\'1\\\' width=\\\'111\\\' style=\\\'background-color:black;\\\'></div>';
|
||||
@@ -387,17 +384,17 @@ class InfoBox
|
||||
|
||||
//Действие эффекта
|
||||
$tr = '';
|
||||
$t = $this->user->items['add'];
|
||||
$t = array_keys($this->statname->getBonusNames());
|
||||
$x = 0;
|
||||
$ed = Conversion::dataStringToArray($e['data']);
|
||||
while ($x < count($t)) {
|
||||
$n = $t[$x];
|
||||
if (isset($ed['add_' . $n], $this->is[$n])) {
|
||||
if (isset($ed['add_' . $n])) {
|
||||
$z = '';
|
||||
if ($ed['add_' . $n] > 0) {
|
||||
$z = '+';
|
||||
}
|
||||
$tr .= '<br>' . $this->is[$n] . ': ' . $z . $ed['add_' . $n];
|
||||
$tr .= '<br>' . $this->statname->getBonusNames()[$n] . ': ' . $z . $ed['add_' . $n];
|
||||
}
|
||||
$x++;
|
||||
}
|
||||
@@ -426,7 +423,7 @@ class InfoBox
|
||||
//здоровье
|
||||
|
||||
$hptop = 0;
|
||||
$lh = [0 => 'hp_none', 1 => 1];
|
||||
$lh = [0 => 'hp_none'];
|
||||
|
||||
if ($sn['hpNow'] == 0 || $sn['hpAll'] == 0) {
|
||||
$lh[1] = 0;
|
||||
@@ -444,8 +441,7 @@ class InfoBox
|
||||
}
|
||||
if ($sn['mpAll'] > 0) {
|
||||
//мана
|
||||
$lm = [0 => 'hp_none', 1 => 1];
|
||||
$lm[1] = floor($sn['mpNow'] / $sn['mpAll'] * 120);
|
||||
$lm = ['hp_none', floor($sn['mpNow'] / $sn['mpAll'] * 120)];
|
||||
if ($lm[1] > 0) {
|
||||
$lm[0] = 'hp_mp';
|
||||
}
|
||||
@@ -471,10 +467,10 @@ class InfoBox
|
||||
|
||||
$pb = '';
|
||||
if ($u['banned'] > 0) {
|
||||
$pb .= '<div style="margin:0 2px 0 2px;"><font color="red" style="background-color:#fae0e0"><strong>Персонаж заблокирован</strong></font></div>';
|
||||
$pb .= '<div style="margin:0 2px 0 2px; color: red; background-color: #fae0e0;"><strong>Персонаж заблокирован</strong></div>';
|
||||
}
|
||||
if ($u['allLock'] > time()) {
|
||||
$pb .= '<div style="margin:0 2px 0 2px;"><font color="red" style="background-color:#fae0e0"><strong>Временный запрет передач!</strong></font></div>';
|
||||
$pb .= '<div style="margin:0 2px 0 2px; color: red; background-color: #fae0e0;"><strong>Временный запрет передач!</strong></div>';
|
||||
}
|
||||
|
||||
$swm = 0; //свитки магии
|
||||
@@ -503,39 +499,39 @@ class InfoBox
|
||||
|
||||
if ($ssm > 0 && $i1 == 0) {
|
||||
$witmg .= '<table style="padding-top:2px;padding-bottom:2px;" width="240" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td width="60" height="60">' . $witm[59] . '</td>
|
||||
<td width="60">' . $witm[60] . '</td>
|
||||
<td width="60">' . $witm[61] . '</td>
|
||||
<td width="60">' . $witm[62] . '</td>
|
||||
</tr>
|
||||
</table>';
|
||||
<tr>
|
||||
<td width="60" height="60">' . $witm[59] . '</td>
|
||||
<td width="60">' . $witm[60] . '</td>
|
||||
<td width="60">' . $witm[61] . '</td>
|
||||
<td width="60">' . $witm[62] . '</td>
|
||||
</tr>
|
||||
</table>';
|
||||
}
|
||||
|
||||
if ($swm > 0 && $i1 == 0) {
|
||||
$witmg .= '<table width="240" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td width="40" height="25">' . $witm[40] . '</td>
|
||||
<td width="40">' . $witm[41] . '</td>
|
||||
<td width="40">' . $witm[42] . '</td>
|
||||
<td width="40">' . $witm[43] . '</td>
|
||||
<td width="40">' . $witm[44] . '</td>
|
||||
<td width="40">' . $witm[50] . '</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="25">' . $witm[45] . '</td>
|
||||
<td>' . $witm[46] . '</td>
|
||||
<td>' . $witm[47] . '</td>
|
||||
<td>' . $witm[48] . '</td>
|
||||
<td>' . $witm[49] . '</td>
|
||||
<td>' . $witm[51] . '</td>
|
||||
</tr>
|
||||
|
||||
</table>';
|
||||
<tr>
|
||||
<td width="40" height="25">' . $witm[40] . '</td>
|
||||
<td width="40">' . $witm[41] . '</td>
|
||||
<td width="40">' . $witm[42] . '</td>
|
||||
<td width="40">' . $witm[43] . '</td>
|
||||
<td width="40">' . $witm[44] . '</td>
|
||||
<td width="40">' . $witm[50] . '</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="25">' . $witm[45] . '</td>
|
||||
<td>' . $witm[46] . '</td>
|
||||
<td>' . $witm[47] . '</td>
|
||||
<td>' . $witm[48] . '</td>
|
||||
<td>' . $witm[49] . '</td>
|
||||
<td>' . $witm[51] . '</td>
|
||||
</tr>
|
||||
|
||||
</table>';
|
||||
}
|
||||
$zag = '';
|
||||
if ($u['zag'] != '' && $i1 == 1) {
|
||||
$rt[0] .= '<style> .inf2s { position:relative; filter: alpha(opacity=10); -moz-opacity: 0.10; -khtml-opacity: 0.10; opacity: 0.10; } .inf2s:hover { background-color:#e2e0e0;filter: alpha(opacity=70); -moz-opacity: 0.70; -khtml-opacity: 0.70; opacity: 0.70; } </style>';
|
||||
$rt[0] .= '<style> .inf2s { position:relative; filter: alpha(opacity=10); -moz-opacity: 0.10; opacity: 0.10; } .inf2s:hover { background-color:#e2e0e0;filter: alpha(opacity=70); -moz-opacity: 0.70; opacity: 0.70; } </style>';
|
||||
|
||||
$zag = '<img width="243" height="283" style="position:absolute;top:-1px;left:-1px;" src="' . Config::img() . '/i/zag/' . $u['zag'] . '">';
|
||||
|
||||
@@ -712,45 +708,28 @@ class InfoBox
|
||||
$lvar .= '<br>Урон: ' . $po['sv_yron_min'] . '-' . $po['sv_yron_max'];
|
||||
}
|
||||
|
||||
$t = $this->user->items['add'];
|
||||
$t = array_keys($this->statname->getBonusNames());
|
||||
$x = 0;
|
||||
while ($x < count($t)) {
|
||||
$n = $t[$x];
|
||||
if (isset($po['add_' . $n], $this->is[$n])) {
|
||||
if (isset($po['add_' . $n])) {
|
||||
$z = '+';
|
||||
if ($po['add_' . $n] < 0) {
|
||||
$z = '';
|
||||
}
|
||||
$lvar .= '<br>' . $this->is[$n] . ': ' . $z . $po['add_' . $n];
|
||||
}
|
||||
$x++;
|
||||
}
|
||||
//
|
||||
$x = 0;
|
||||
while ($x < count($t)) {
|
||||
$n = $t[$x];
|
||||
if (isset($po['sv_' . $n])) {
|
||||
$z = '+';
|
||||
if ($po['sv_' . $n] < 0) {
|
||||
$z = '';
|
||||
}
|
||||
if ($n != 'yron_min' && $n != 'yron_max') {
|
||||
$lvar .= '<br>' . $this->is[$n] . ': ' . $z . $po['sv_' . $n];
|
||||
}
|
||||
$lvar .= '<br>' . $this->statname->getBonusNames()[$n] . ': ' . $z . $po['add_' . $n];
|
||||
}
|
||||
$x++;
|
||||
}
|
||||
|
||||
|
||||
if (isset($pl['2h']) && $pl['2h'] == 1) {
|
||||
$lvar .= '<br>• Двуручное оружие';
|
||||
}
|
||||
if (isset($po['zonb'])) {
|
||||
$lvar .= '<br>Зоны блокирования: ';
|
||||
if ($po['zonb'] > 0) {
|
||||
$x = 1;
|
||||
while ($x <= $po['zonb']) {
|
||||
$lvar .= '+';
|
||||
$x++;
|
||||
}
|
||||
$lvar .= str_repeat('+', $po['zonb']);
|
||||
} else {
|
||||
$lvar .= '—';
|
||||
}
|
||||
@@ -772,7 +751,7 @@ class InfoBox
|
||||
|
||||
|
||||
if (isset($pl['iznosMAX']) && $pl['iznosMAX'] > 0) {
|
||||
$lvar .= '<br>Долговечность: ' . floor($pl['iznosNOW']) . DIRECTORY_SEPARATOR . ceil($pl['iznosMAX']);
|
||||
$lvar .= '<br>Долговечность: ' . (int)($pl['iznosMAX'] - $pl['iznosNOW']);
|
||||
}
|
||||
|
||||
if (!empty($po['battleUseZd']) && $po['battleUseZd'] > 0) {
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace User;
|
||||
|
||||
use Helper\Conversion;
|
||||
use Model\Constant\Stat;
|
||||
|
||||
class Item
|
||||
{
|
||||
public readonly int $id;
|
||||
public readonly int $type;
|
||||
public readonly string $name;
|
||||
public readonly string $img;
|
||||
public int $inslot;
|
||||
public int $inodet;
|
||||
public readonly string $data;
|
||||
public int $durability;
|
||||
|
||||
public function __construct(array $item)
|
||||
{
|
||||
[
|
||||
'id' => $this->id,
|
||||
'type' => $this->type,
|
||||
'name' => $this->name,
|
||||
'img' => $this->img,
|
||||
'inslot' => $this->inslot,
|
||||
'inOdet' => $this->inodet,
|
||||
'data' => $this->data,
|
||||
'iznosNOW' => $iNow,
|
||||
'iznosMAX' => $iMax,
|
||||
] = $item;
|
||||
$this->durability = $iMax - $iNow;
|
||||
$stat = new Stat();
|
||||
$dataArr = Conversion::dataStringToArray(strtolower($this->data));
|
||||
foreach (array_keys($stat->getBonusNames()) as $bonusName) {
|
||||
if (!isset($dataArr["add_$bonusName"])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$this->{"add_$bonusName"} = $dataArr["add_$bonusName"];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// type, data, inOdet,
|
||||
// item_id, inslot, useInBattle, btl_zd, iznosNOW, iznosMAX, magic_inci, name, items_users.id, img, `2h`
|
||||
|
||||
/*
|
||||
'data' => string 'add_za1=5|add_m4=40|add_s2=1|add_s3=2|sv_yron_min=5|sv_yron_max=15|add_m5=30|add_m1=30|add_m9=15|complect=106|tya1=75|tya3=25|fromshop=1' (length=136)
|
||||
'item_id' => int 6473
|
||||
|
||||
'useInBattle' => int 0
|
||||
'btl_zd' => int 0
|
||||
'magic_inci' => string '' (length=0)
|
||||
'2h' => int 0
|
||||
*/
|
||||
@@ -195,7 +195,7 @@ class Stats
|
||||
|
||||
}
|
||||
|
||||
[$hnd1, $hnd2, $sht1, $oza, $ozm, $dom, $coms] = $this->addWearedItemsBonuses($u['id'], $st, $s_v, $baseStats);
|
||||
[$hnd1, $hnd2, $sht1, $dom, $coms] = $this->addWearedItemsBonuses($u['id'], $st, $s_v, $baseStats);
|
||||
|
||||
|
||||
$this->addMedalsBonuses($u['id'], $st);
|
||||
@@ -408,21 +408,9 @@ class Stats
|
||||
$st['zonb']++;
|
||||
}
|
||||
|
||||
if ($st['zona'] < 1) {
|
||||
$st['zona'] = 1;
|
||||
}
|
||||
if ($st['zona'] > 5) {
|
||||
$st['zona'] = 5;
|
||||
}
|
||||
if ($st['zonb'] < 1) {
|
||||
$st['zonb'] = 1;
|
||||
}
|
||||
if ($st['zonb'] > 3) {
|
||||
$st['zonb'] = 3;
|
||||
}
|
||||
$st['zona'] = Comparsion::minimax($st['zona'], 1, 5);
|
||||
$st['zonb'] = Comparsion::minimax($st['zonb'], 1, 3);
|
||||
|
||||
$st['ozash'] = $oza;
|
||||
$st['ozmsh'] = $ozm;
|
||||
$st['weapon1'] = $hnd1;
|
||||
$st['weapon2'] = $hnd2;
|
||||
$st['sheld1'] = $sht1;
|
||||
@@ -500,6 +488,15 @@ class Stats
|
||||
$st[$key] += $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет бонусы к статам игрока.
|
||||
* Генерирует переменную User:class->stats['items'], где лежат одетые предметы.
|
||||
* @param int $uid
|
||||
* @param array $st
|
||||
* @param array $s_v
|
||||
* @param array $baseStats
|
||||
* @return array
|
||||
*/
|
||||
private function addWearedItemsBonuses(int $uid, array &$st, array &$s_v, array $baseStats): array
|
||||
{
|
||||
//Характеристики от предметов //ТУТ tr_lvl
|
||||
@@ -518,33 +515,20 @@ class Stats
|
||||
$coms = []; // комплекты
|
||||
$dom = [];
|
||||
|
||||
$oza = [
|
||||
1 => [0, 0],
|
||||
2 => [0, 0],
|
||||
3 => [0, 0],
|
||||
4 => [0, 0],
|
||||
]; //особенности защиты
|
||||
$ozm = [
|
||||
1 => [0, 0],
|
||||
2 => [0, 0],
|
||||
3 => [0, 0],
|
||||
4 => [0, 0],
|
||||
]; //особенности магии
|
||||
|
||||
$ozaozmtypes = [
|
||||
1 => [1, 9,],//Слабая
|
||||
2 => [20, 39,],//Нормальная
|
||||
3 => [40, 69,],//Хорошая
|
||||
4 => [10, 19,],//Посредственная
|
||||
5 => [70, 89,],//Великолепная
|
||||
];
|
||||
|
||||
$wi = new WearedItem(); // на замену User:class->stats['items']
|
||||
$st['items_o'] = $wi;
|
||||
|
||||
foreach ($wearedItems as $wearedItem) {
|
||||
// Генерируем всратую пепяку User:class->stats['wpXid'] > 0, которая показывает, что определённый слот
|
||||
// чем-то занят. Странное решение.
|
||||
$this->addKeyIfNotExist('wp' . $wearedItem['inOdet'] . 'id', $h, $st);
|
||||
|
||||
$st['items'][$h] = $wearedItem;
|
||||
$h++;
|
||||
|
||||
$wi->add(new Item($wearedItem));
|
||||
|
||||
// Если в левой руке (3) предметы определённого типа, то рука занята оружием.
|
||||
if ($wearedItem['inOdet'] == 3 &&
|
||||
(($wearedItem['type'] >= 18 && $wearedItem['type'] <= 24) ||
|
||||
$wearedItem['type'] == 26 ||
|
||||
@@ -552,6 +536,8 @@ class Stats
|
||||
$wearedItem['type'] == 28)) {
|
||||
$hnd1 = 1;
|
||||
}
|
||||
|
||||
// Если в правой руке (14) предметы определённого типа, то рука занята оружием или щитом.
|
||||
if ($wearedItem['inOdet'] == 14 &&
|
||||
(($wearedItem['type'] >= 18 && $wearedItem['type'] <= 24) ||
|
||||
$wearedItem['type'] == 26 ||
|
||||
@@ -562,44 +548,13 @@ class Stats
|
||||
$sht1 = 1;
|
||||
}
|
||||
|
||||
$data = Conversion::dataStringToArray($wearedItem['data']);
|
||||
// Если в любом слоте что-то есть, повышается User:class->stats['reting'] за каждый слот
|
||||
// Используется каким-то непонятным образом в хаотах.
|
||||
if ($wearedItem['inOdet'] <= 18 && $wearedItem['inOdet'] > 0) {
|
||||
$this->addKeyIfNotExist('reting', 1, $st);
|
||||
}
|
||||
|
||||
# Пришлось зацикливать, уж больно однотипное.
|
||||
# oza[X][0,1] = add_ozaX[0,1] + add_oza[0,1]
|
||||
# ozm[X][0,1] = add_ozmX[0,1] + add_ozm[0,1]
|
||||
for ($i = 1; $i <= 4; $i++) {
|
||||
if (!isset($data["add_oza$i"])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isset($data['add_oza']) && in_array($data['add_oza'], range(1, 5))) {
|
||||
$oza[$i][0] += $ozaozmtypes[$data['add_oza']][0];
|
||||
$oza[$i][1] += $ozaozmtypes[$data['add_oza']][1];
|
||||
}
|
||||
if (isset($data['add_ozm']) && in_array($data['add_ozm'], range(1, 5))) {
|
||||
$ozm[$i][0] += $ozaozmtypes[$data['add_ozm']][0];
|
||||
$ozm[$i][1] += $ozaozmtypes[$data['add_ozm']][1];
|
||||
} else {
|
||||
$ozm[$i][0] += $ozaozmtypes[1][0];
|
||||
$ozm[$i][1] += $ozaozmtypes[1][1];
|
||||
}
|
||||
|
||||
if (in_array($data["add_oza$i"], range(1, 5))) {
|
||||
$oza[$i][0] += $ozaozmtypes[$data["add_oza$i"]][0];
|
||||
$oza[$i][1] += $ozaozmtypes[$data["add_oza$i"]][1];
|
||||
}
|
||||
if (isset($data["add_ozm$i"]) && in_array($data["add_ozm$i"], range(1, 5))) {
|
||||
$ozm[$i][0] += $ozaozmtypes[$data["add_ozm$i"]][0];
|
||||
$ozm[$i][1] += $ozaozmtypes[$data["add_ozm$i"]][1];
|
||||
} else {
|
||||
$ozm[$i][0] += $ozaozmtypes[1][0];
|
||||
$ozm[$i][1] += $ozaozmtypes[1][1];
|
||||
}
|
||||
}
|
||||
|
||||
$data = Conversion::dataStringToArray($wearedItem['data']);
|
||||
if (isset($data['art'])) {
|
||||
$this->addKeyIfNotExist('art', $data['art'], $st);
|
||||
}
|
||||
@@ -696,7 +651,7 @@ class Stats
|
||||
}
|
||||
}
|
||||
}
|
||||
return [$hnd1, $hnd2, $sht1, $oza, $ozm, $dom, $coms];
|
||||
return [$hnd1, $hnd2, $sht1, $dom, $coms];
|
||||
}
|
||||
|
||||
private function addMedalsBonuses(int $uid, array &$st): void
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace User;
|
||||
|
||||
class WearedItem
|
||||
{
|
||||
private array $slot = [];
|
||||
|
||||
|
||||
public function add(Item $item): void
|
||||
{
|
||||
$this->slot[$item->inslot] = $item;
|
||||
}
|
||||
|
||||
public function exist(int $slot): bool
|
||||
{
|
||||
return array_key_exists($slot, $this->slot);
|
||||
}
|
||||
|
||||
public function get(int $slot): Item
|
||||
{
|
||||
return $this->slot[$slot];
|
||||
}
|
||||
|
||||
public function count(): int
|
||||
{
|
||||
return count($this->slot);
|
||||
}
|
||||
|
||||
public function remove(int $slot): void
|
||||
{
|
||||
array_splice($this->slot, $slot, 1);
|
||||
}
|
||||
}
|
||||
@@ -5,33 +5,33 @@ namespace User;
|
||||
use Core\Db;
|
||||
|
||||
/**
|
||||
* Íåïîíÿòíûé êóñîê ôóíêöèè, êîòîðûé ëåæàë âíóòðè ñèñòåìû ïîäñ÷¸òà áîíóñîâ ê ïàðàìåòðàì,
|
||||
* ïðè ýòîì íèêàê íà ýòî íå âëèÿÿ è íè ñ ÷åì íå âçàèìîäåéñòâóÿ. Íàäî ïîíÿòü ÷òî åãî
|
||||
* âûçûâàåò è âûãíàòü åãî èç User\Stats.
|
||||
* Непонятный кусок функции, который лежал внутри системы подсчёта бонусов к параметрам,
|
||||
* при этом никак на это не влияя и ни с чем не взаимодействуя. Надо понять что его
|
||||
* вызывает и выгнать его из User\Stats.
|
||||
*/
|
||||
class WearedScrolls
|
||||
{
|
||||
|
||||
public static function ScrollsChange(array &$u): void
|
||||
{
|
||||
//Çàìåíà ñâèòêîâ
|
||||
//Замена свитков
|
||||
if ($u['autospell'] == 0 || $u['battle'] != 0) {
|
||||
return;
|
||||
}
|
||||
//ïðîâåðÿåì ñâèòêè
|
||||
//проверяем свитки
|
||||
$sparr = [];
|
||||
foreach (Db::getRows('select item_id, inOdet from items_users where inOdet between 40 and 50 and uid = ? order by item_id desc', [$u['id']]) as $scroll) {
|
||||
$sparr[] = "{$scroll['item_id']} - {$scroll['inOdet']}";
|
||||
}
|
||||
$splink = implode(',', $sparr);
|
||||
|
||||
//Çàïîìèíàåì íîâûé êîìïëåêò ñâèòêîâ
|
||||
//Запоминаем новый комплект свитков
|
||||
if ($u['autospell'] == 1) {
|
||||
$u['autospell'] = $splink;
|
||||
Db::sql('update users set autospell = ? where id = ?', [$splink, $u['id']]);
|
||||
}
|
||||
|
||||
//Âûäàåì íóæíûé ñâèòîê, åñëè îí åñòü â èíâåíòàðå
|
||||
//Выдаем нужный свиток, если он есть в инвентаре
|
||||
if ($u['autospell'] != $splink) {
|
||||
$spe1 = explode(',', $splink);
|
||||
$spe2 = explode(',', $u['autospell']);
|
||||
|
||||
Reference in New Issue
Block a user