Написана логика работы dressitem().
This commit is contained in:
parent
32f3b2fc67
commit
5f8334cf30
142
main.php
142
main.php
@ -294,94 +294,76 @@ function del_efs($uid, $id, $type)
|
|||||||
// одеть предмет
|
// одеть предмет
|
||||||
function dressitem($id)
|
function dressitem($id)
|
||||||
{
|
{
|
||||||
/*
|
define('HELMET', 1);
|
||||||
* FFFFUUUUUUU!!!!!!!!!!!!
|
define('ARMOR', 2);
|
||||||
* 1. получаем id одеваемого предмета
|
define('LEGS', 3);
|
||||||
* 2. смотрим в кокой слот он хочет
|
define('BOOTS', 4);
|
||||||
* 3. проверяем пустой ли слот
|
define('GLOVES', 5);
|
||||||
* 4. если слот не пустой, освобождаем слот
|
define('WEAPON', 6);
|
||||||
* 5. привязываем предмет к слоту
|
define('SHIELD', 7);
|
||||||
*
|
define('BELT', 8);
|
||||||
* если предмет кольцо
|
define('RING', 9);
|
||||||
* 1. смотрим три слота колец
|
define('AMULET', 10);
|
||||||
* 2. если слот не пустой смотрим слебующий слот
|
define('ERROR_TOO_MANY_ITEMS_IN_SLOTS', 'Критическая ошибка: Переполнение слота!');
|
||||||
* 3. если слот пустой одеваем предмет в слот
|
define('ERROR_UNKNOWN_ITEM_TYPE', 'Неизвестный тип предмета!');
|
||||||
* 4. если все три слота не пустые освобождаем последний слот
|
define('ERROR_ITEM_NOT_FOUND', 'Предмет не найден!');
|
||||||
* 5. привязываем предмет к слоту
|
|
||||||
*/
|
|
||||||
global $user;
|
|
||||||
|
|
||||||
//$items = new DressedItems($_SESSION['uid']);
|
$selectedItemRow = db::c()->query('SELECT item_type FROM `inventory` WHERE item_id = ?i AND owner_id = ?i AND `dressed_slot` = 0', $id, $_SESSION['uid']);
|
||||||
//$items->undressItem($_GET['drop']);
|
if ($selectedItemRow->getNumRows()) {
|
||||||
|
$selectedItem = $selectedItemRow->fetch_object();
|
||||||
$selectedItem = db::c()->query('SELECT * FROM `inventory` WHERE item_id = ?i AND owner_id = ?i AND `dressed_slot` = 0', $id, $_SESSION['uid'])->fetch_object();
|
$itemInSlotRow = db::c()->query('SELECT dressed_slot FROM inventory WHERE owner_id = ?i AND dressed_slot > 0 AND item_type = ?i', $_SESSION['uid'], $selectedItem->item_type);
|
||||||
$itemInSlot = db::c()->query('SELECT * FROM inventory WHERE owner_id = ?i AND dressed_slot = ?i', $_SESSION['uid'], $selectedItem['item_type']);
|
$itemInSlotQuantity = $itemInSlotRow->getNumRows();
|
||||||
if ($itemInSlot->getNumRows()) {
|
if ($itemInSlotQuantity) {
|
||||||
// снимаем предмет и одеваем поверх
|
$itemInSlot = $itemInSlotRow->fetch_assoc();
|
||||||
} else {
|
}
|
||||||
// просто одеваем предмет в слот
|
if (in_array($selectedItem->item_type,[HELMET,ARMOR,LEGS,BOOTS,GLOVES,WEAPON,SHIELD,BELT,AMULET])) {
|
||||||
}
|
//работаем с нормальными слотами
|
||||||
if (in_array($selectedItem->item_type, [9, 10, 11])) {
|
if (!$itemInSlotQuantity) {
|
||||||
$wearedRings = db::c()->query('SELECT * FROM `inventory` WHERE owner_id = ?i AND dressed_slot IN (9,10,11)', $_SESSION['uid'])->fetch_object();
|
// просто одеваем предмет
|
||||||
for ($i = 1; $i <= 3; $i++) {
|
db::c()->query('UPDATE inventory SET dressed_slot = item_type WHERE id = ?i', $id);
|
||||||
if (!$wearedRings->dressed_slot) {
|
} elseif ($itemInSlotQuantity === 1) {
|
||||||
db::c()->query('UPDATE inventory SET dressed_slot = ');
|
// снимаем предмет и одеваем вместо
|
||||||
|
db::c()->query('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot = ?i', $itemInSlot['dressed_slot']);
|
||||||
|
db::c()->query('UPDATE inventory SET dressed_slot = item_type WHERE id = ?i', $id);
|
||||||
|
} else {
|
||||||
|
// невозможная ситуация - два предмета в одиночном слоте. критическая ошибка, запись в лог, раздевание.
|
||||||
|
$error = ERROR_TOO_MANY_ITEMS_IN_SLOTS;
|
||||||
|
db::c()->query('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot BETWEEN 1 AND 12');
|
||||||
|
}
|
||||||
|
} elseif ($selectedItem->item_type === RING) {
|
||||||
|
// работаем с кольцами
|
||||||
|
if (!$itemInSlotQuantity) {
|
||||||
|
// просто одеваем предмет в слот 9
|
||||||
|
db::c()->query('UPDATE inventory SET dressed_slot = 9 WHERE id = ?i', $id);
|
||||||
|
} elseif ($itemInSlotQuantity > 0 && $itemInSlotQuantity < 3) {
|
||||||
|
// Сравниваем массив колец и массив слотов для колец.
|
||||||
|
$emptyRingSlots = array_diff([9,10,11], $itemInSlot);
|
||||||
|
// Сортируем массив свободных слотов по возрастанию.
|
||||||
|
sort($emptyRingSlots);
|
||||||
|
// Одеваем предмет в первый свободный слот.
|
||||||
|
db::c()->query('UPDATE inventory SET dressed_slot = ?i WHERE id = ?i',$emptyRingSlots[0], $id);
|
||||||
|
} elseif ($itemInSlotQuantity === 3) {
|
||||||
|
db::c()->query('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot = 11');
|
||||||
|
db::c()->query('UPDATE inventory SET dressed_slot = 11 WHERE id = ?i', $id);
|
||||||
|
// снимаем предмет из слота 11 и одеваем вместо
|
||||||
|
} else {
|
||||||
|
// невозможная ситуация - больше трёх предметов на три слота. критическая ошибка, запись в лог, раздевание.
|
||||||
|
$error = ERROR_TOO_MANY_ITEMS_IN_SLOTS;
|
||||||
|
db::c()->query('UPDATE inventory SET dressed_slot = 0 WHERE dressed_slot BETWEEN 1 AND 12');
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($selectedItem) {
|
|
||||||
db::c()->query('UPDATE inventory SET dressed_slot = item_type WHERE id = ?i', $selectedItem['item_id']);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if ($item['type'] == 5) {
|
|
||||||
if (!$user['r1']) {
|
|
||||||
$slot1 = 'r1';
|
|
||||||
} elseif (!$user['r2']) {
|
|
||||||
$slot1 = 'r2';
|
|
||||||
} elseif (!$user['r3']) {
|
|
||||||
$slot1 = 'r3';
|
|
||||||
} else {
|
} else {
|
||||||
$slot1 = 'r1';
|
//предмет вообще не должен одеваться, ошибка
|
||||||
dropitem(5);
|
$error = ERROR_UNKNOWN_ITEM_TYPE;
|
||||||
}
|
|
||||||
} elseif ($item['type'] == 12) {
|
|
||||||
if (!$user['m1']) {
|
|
||||||
$slot1 = 'm1';
|
|
||||||
} elseif (!$user['m2']) {
|
|
||||||
$slot1 = 'm2';
|
|
||||||
} elseif (!$user['m3']) {
|
|
||||||
$slot1 = 'm3';
|
|
||||||
} elseif (!$user['m4']) {
|
|
||||||
$slot1 = 'm4';
|
|
||||||
} elseif (!$user['m5']) {
|
|
||||||
$slot1 = 'm5';
|
|
||||||
} elseif (!$user['m6']) {
|
|
||||||
$slot1 = 'm6';
|
|
||||||
} elseif (!$user['m7']) {
|
|
||||||
$slot1 = 'm7';
|
|
||||||
} elseif (!$user['m8']) {
|
|
||||||
$slot1 = 'm8';
|
|
||||||
} elseif (!$user['m9']) {
|
|
||||||
$slot1 = 'm9';
|
|
||||||
} elseif (!$user['m10']) {
|
|
||||||
$slot1 = 'm10';
|
|
||||||
} else {
|
|
||||||
$slot1 = 'm1';
|
|
||||||
dropitem(12);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
dropitem($item['type']);
|
//с предметом что-то сильно не ок, ошибка.
|
||||||
|
$error = ERROR_ITEM_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!($item['type'] == 12 && $user['level'] < 4)) {
|
if (isset($error)) {
|
||||||
if (db::c()->query('UPDATE `users` AS `u`, `inventory` AS `i` SET `u`.?f = ?i, `i`.`dressed` = 1, `u`.`sila` = `u`.`sila` + `i`.`gsila`, `u`.`lovk` = `u`.`lovk` + `i`.`glovk`, `u`.`inta` = `u`.`inta` + `i`.`ginta`, `u`.`intel` = `u`.`intel` + `i`.`gintel`, `u`.`maxhp` = `u`.`maxhp` + `i`.`ghp`, `u`.`noj` = `u`.`noj` + `i`.`gnoj`, `u`.`topor` = `u`.`topor` + `i`.`gtopor`, `u`.`dubina` = `u`.`dubina` + `i`.`gdubina`, `u`.`mec` = `u`.`mec` + `i`.`gmech`, `u`.`mfire` = `u`.`mfire` + `i`.`gfire`, `u`.`mwater` = `u`.`mwater` + `i`.`gwater`, `u`.`mair` = `u`.`mair` + `i`.`gair`, `u`.`mearth` = `u`.`mearth` + `i`.`gearth`, `u`.`mlight` = `u`.`mlight` + `i`.`glight`, `u`.`mgray` = `u`.`mgray` + `i`.`ggray`, `u`.`mdark` = `u`.`mdark` + `i`.`gdark`, `u`.`ubron1` = `u`.`ubron1` + `i`.`bron1`, `u`.`ubron2` = `u`.`ubron2` + `i`.`bron2`, `u`.`ubron3` = `u`.`ubron3` + `i`.`bron3`, `u`.`ubron4` = `u`.`ubron4` + `i`.`bron4`, `u`.`fkrit` = `u`.`fkrit` + `i`.`mfkrit`, `u`.`fakrit` = `u`.`fakrit` + `i`.`mfakrit`, `u`.`fuvorot` = `u`.`fuvorot` + `i`.`mfuvorot`, `u`.`fauvorot` = `u`.`fauvorot` + `i`.`mfauvorot`, `u`.`uminu` = `u`.`uminu` + `i`.`minu`, `u`.`umaxu` = `u`.`umaxu` + `i`.`maxu` WHERE `i`.`needident` = 0 AND `i`.`id` = ?i AND `i`.`dressed` = 0 AND `i`.owner = ?i AND (20 + `u`.`sila`) >= `i`.`nsila` AND (20 + `u`.`lovk`) >= `i`.`nlovk` AND (20 + `u`.`inta`) >= `i`.`ninta` AND `u`.`vinos` >= `i`.`nvinos` AND (20 + `u`.`intel`) >= `i`.`nintel` AND `u`.`mudra` >= `i`.`nmudra` AND `u`.`level` >= `i`.`nlevel` AND (((?i = `i`.`nalign`)) OR (`i`.`nalign` = 0)) AND `u`.`noj` >= `i`.`nnoj` AND `u`.`topor` >= `i`.`ntopor` AND `u`.`dubina` >= `i`.`ndubina` AND `u`.`mec` >= `i`.`nmech` AND `u`.`mfire` >= `i`.`nfire` AND `u`.`mwater` >= `i`.`nwater` AND `u`.`mair` >= `i`.`nair` AND `u`.`mearth` >= `i`.`nearth` AND `u`.`mlight` >= `i`.`nlight` AND `u`.`mgray` >= `i`.`ngray` AND `u`.`mdark` >= `i`.`ndark` AND `i`.`setsale` = 0 AND `u`.`id` = ?i', $slot1, $id, $id, $user['id'], $user['align'], $user['id'])) {
|
return $error;
|
||||||
$user[$slot1] = $item['id'];
|
} else {
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user