Advertisement
Ulabael

scr_player_inv

Oct 9th, 2022 (edited)
1,459
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // inv - массив, с которым работаем. invCell - айди клетки, с которой работаем.
  2. function scr_player_inv(inv, invCell) {
  3.     if pickedItem == noone {
  4.         if inv[invCell.cellId].id != noone {
  5.             pickedItem = inv[invCell.cellId];
  6.             inv[invCell.cellId] = new scr_cells_const(,,,,inv[invCell.cellId].cellType);
  7.         }
  8.     }
  9.     else {
  10.         if inv[invCell.cellId].cellType == objectTypes.any or inv[invCell.cellId].cellType == pickedItem.type {
  11.             var needStruct = false; // true - если заменяем предмет в ячейке
  12.             // Если ячейка не пустая и айдишники разные - значит меняем местами
  13.             if (inv[invCell.cellId].id != noone) needStruct = true;
  14.                
  15.             // Если айдишники одинаковые - то наполняем ячейку из руки
  16.             if (inv[invCell.cellId].id != noone and inv[invCell.cellId].id == pickedItem.id) and inv[invCell.cellId].cellType == objectTypes.any {
  17.                 if inv[invCell.cellId].stack + pickedItem.stack <= inv[invCell.cellId].maxStack {
  18.                     inv[invCell.cellId].stack += pickedItem.stack;
  19.                     pickedItem = noone;
  20.                 }
  21.                 else {
  22.                     // Находим разницу в том, сколько нам нужно предметов и её вычитаем
  23.                     pickedItem.stack -= inv[invCell.cellId].maxStack - inv[invCell.cellId].stack;
  24.                     inv[invCell.cellId].stack = inv[invCell.cellId].maxStack;
  25.                 }
  26.             }
  27.             else {
  28.                 var temp = scr_struct_copy(inv[invCell.cellId]);
  29.                 var changeDoll = false;
  30.                 // Если тип клетки - не хранилище, а кукла, то ограничение по 1.
  31.                 if inv[invCell.cellId].cellType != objectTypes.any {
  32.                     // Если ячейка пустая - кладём в неё один наших объектов
  33.                     if (inv[invCell.cellId].stack < 1) changeDoll = true
  34.                     // Если ячейка не пустая, то проверяем, чтобы в руке и в ячейке было по одному объекту
  35.                     // и активируем режим замены
  36.                     // Иначе - выход
  37.                     else {
  38.                         if (inv[invCell.cellId].stack == 1 and pickedItem.stack == 1)
  39.                             needStruct = true; 
  40.                         else exit
  41.                     }
  42.                 }
  43.                 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);
  44.                 if changeDoll {
  45.                     inv[invCell.cellId].stack = 1;
  46.                     pickedItem.stack -= 1;
  47.                     if (pickedItem.stack <= 0) pickedItem = noone;
  48.                 }
  49.                 else inv[invCell.cellId].stack  = pickedItem.stack;
  50.                    
  51.                 if (!needStruct and !changeDoll) pickedItem = noone;
  52.                 else if (needStruct) pickedItem = temp;
  53.             }
  54.         }
  55.     }
  56. }
  57.  
  58. function scr_player_inv_rmb(inv, invCell) {
  59.     if (inv[invCell.cellId].id == noone) {
  60.         inv[invCell.cellId] = new scr_cells_const(pickedItem.name, pickedItem.id, pickedItem.sprite, pickedItem.type, inv[invCell.cellId].cellType, 1, pickedItem.maxStack);
  61.         pickedItem.stack -= 1;
  62.     }
  63.     else if (inv[invCell.cellId].id == pickedItem.id
  64.     and inv[invCell.cellId].stack + 1 <= inv[invCell.cellId].maxStack)
  65.     and inv[invCell.cellId].cellType == objectTypes.any {
  66.         inv[invCell.cellId].stack += 1;
  67.         pickedItem.stack -= 1;
  68.     }
  69.     if (pickedItem.stack <= 0) pickedItem = noone; 
  70. }
  71.  
  72. function scr_struct_copy(from){
  73.     if is_struct(from) {
  74.         var names = variable_struct_get_names(from);
  75.         var len = array_length(names);
  76.         var struct = {};
  77.         for (var i = 0; i < len; ++i) {
  78.             variable_struct_set(struct, names[i], variable_struct_get(from, names[i]));
  79.         }
  80.         return struct;
  81.     } else {
  82.         return noone;  
  83.     }
  84. }
  85.  
  86. function scr_cells_const(_name = "", _id = noone, _sprite = noone, _type = noone, _cellType = objectTypes.any, _stack = 0, _maxStack = 1) constructor{
  87.     name = _name;
  88.     id = _id;
  89.     sprite = _sprite;
  90.     type = _type;
  91.     if (_cellType != noone) cellType = _cellType;
  92.     stack = _stack;
  93.     maxStack = _maxStack;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement