Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // inv - массив, с которым работаем. invCell - айди клетки, с которой работаем.
- function scr_player_inv(inv, invCell) {
- if pickedItem == noone {
- if inv[invCell.cellId].id != noone {
- pickedItem = inv[invCell.cellId];
- inv[invCell.cellId] = new scr_cells_const(,,,,inv[invCell.cellId].cellType);
- }
- }
- else {
- if inv[invCell.cellId].cellType == objectTypes.any or inv[invCell.cellId].cellType == pickedItem.type {
- var needStruct = false; // true - если заменяем предмет в ячейке
- // Если ячейка не пустая и айдишники разные - значит меняем местами
- if (inv[invCell.cellId].id != noone) needStruct = true;
- // Если айдишники одинаковые - то наполняем ячейку из руки
- if (inv[invCell.cellId].id != noone and inv[invCell.cellId].id == pickedItem.id) and inv[invCell.cellId].cellType == objectTypes.any {
- if inv[invCell.cellId].stack + pickedItem.stack <= inv[invCell.cellId].maxStack {
- inv[invCell.cellId].stack += pickedItem.stack;
- pickedItem = noone;
- }
- else {
- // Находим разницу в том, сколько нам нужно предметов и её вычитаем
- pickedItem.stack -= inv[invCell.cellId].maxStack - inv[invCell.cellId].stack;
- inv[invCell.cellId].stack = inv[invCell.cellId].maxStack;
- }
- }
- else {
- var temp = scr_struct_copy(inv[invCell.cellId]);
- var changeDoll = false;
- // Если тип клетки - не хранилище, а кукла, то ограничение по 1.
- if inv[invCell.cellId].cellType != objectTypes.any {
- // Если ячейка пустая - кладём в неё один наших объектов
- if (inv[invCell.cellId].stack < 1) changeDoll = true
- // Если ячейка не пустая, то проверяем, чтобы в руке и в ячейке было по одному объекту
- // и активируем режим замены
- // Иначе - выход
- else {
- if (inv[invCell.cellId].stack == 1 and pickedItem.stack == 1)
- needStruct = true;
- else exit
- }
- }
- inv[invCell.cellId] = new scr_cells_const(pickedItem.name, pickedItem.id, pickedItem.sprite, pickedItem.type, inv[invCell.cellId].cellType, inv[invCell.cellId].stack, pickedItem.maxStack);
- if changeDoll {
- inv[invCell.cellId].stack = 1;
- pickedItem.stack -= 1;
- if (pickedItem.stack <= 0) pickedItem = noone;
- }
- else inv[invCell.cellId].stack = pickedItem.stack;
- if (!needStruct and !changeDoll) pickedItem = noone;
- else if (needStruct) pickedItem = temp;
- }
- }
- }
- }
- function scr_player_inv_rmb(inv, invCell) {
- if (inv[invCell.cellId].id == noone) {
- inv[invCell.cellId] = new scr_cells_const(pickedItem.name, pickedItem.id, pickedItem.sprite, pickedItem.type, inv[invCell.cellId].cellType, 1, pickedItem.maxStack);
- pickedItem.stack -= 1;
- }
- else if (inv[invCell.cellId].id == pickedItem.id
- and inv[invCell.cellId].stack + 1 <= inv[invCell.cellId].maxStack)
- and inv[invCell.cellId].cellType == objectTypes.any {
- inv[invCell.cellId].stack += 1;
- pickedItem.stack -= 1;
- }
- if (pickedItem.stack <= 0) pickedItem = noone;
- }
- function scr_struct_copy(from){
- if is_struct(from) {
- var names = variable_struct_get_names(from);
- var len = array_length(names);
- var struct = {};
- for (var i = 0; i < len; ++i) {
- variable_struct_set(struct, names[i], variable_struct_get(from, names[i]));
- }
- return struct;
- } else {
- return noone;
- }
- }
- function scr_cells_const(_name = "", _id = noone, _sprite = noone, _type = noone, _cellType = objectTypes.any, _stack = 0, _maxStack = 1) constructor{
- name = _name;
- id = _id;
- sprite = _sprite;
- type = _type;
- if (_cellType != noone) cellType = _cellType;
- stack = _stack;
- maxStack = _maxStack;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement