Как сделать?
Re: Как сделать?
Lucifer,
ХЗ... Я свой писал. Мне стандартный вообще не зашел. С новым КуСП (5.9.1) это вообще просто. Зато функционал любой. И степень "вложенности"
Например так (для снаряжения):
Создаем некий "общий Предмет"
Код:
$Предмет['Название']=''
$Предмет['Картинка']=''
Предмет['Вид']=0 &!(1-кинжал, 2-меч, 3-топор, 4-копье, 5-молот, 6-щит, 7-шлем, 8-наруч, 9-кираса, 10.11...N)
Предмет['Слот']=0 &!(1-прав.рука, 2-лев.рука, 3-прав.плечо, 4-лев.плечо, 5-голова, 6-ноги, 7-грудь, 8.9...N)
Предмет['Владелец']=0 &!(0-в свободном доступе, 1-у игрока в инвентаре, 2-надето, 3-в хранилище, 4-у торговца, 5.6...106...N)
Предмет['Количество']=0 &!(Не всем нужно, но оставил для универсальности)
Предмет['Свойство 1']=0 &!(например Сила удара или Степень защиты)
Предмет['Свойство 2']=0
...
Предмет['Свойство К']=0
Это общий пресет без какой-либо привязки
Затем формируем предмет. Весь инвентарь формируются по простому принципу: НазваниеПредмета_Номер (Снаряжение_0, Снаряжение_1, Снаряжение_2, Зелье_1, Зелье_14... и пр. ). Можно для каждого типа создать свой пересет - кому как нравится. У меня отдельные. Для всяких индивидуальных предметов - свой, для тех, что по счету - свои.
Сначала определяем первый пустой, я вынес в функцию
Код:
# GetFreeID
! Определение первого "свободного" номера в снаряжении (и пр.)
! $Args[0] - Преффикс ('Снаряжение', 'Непись', 'Свиток' и прочее)
Result=0
Local i=0
Local j=Off
Local $SearchStr=''
Loop While j=Off:
$SearchStr=$Args[0]+'_'+Str(i)
If ArrType($SearchStr)='':
j=On
Else
I+=1
End
End
Result=i
--- GetFreeID ---
Дальше все просто:
Код:
NewID=@GetFreeID('Снаряжение')Функция среди всех массивов "Снаряжение_k" находит первый "неопределенный" и возвращает его номер
Формируем предмет простым копированием стартового пресета
Код:
$NewItem='Снаряжение_'+NewID
CopyArr $NewItem, 'Предмет'
И устанавливаем нужные свойства
Код:
SetVar($NewItem,'Топор','Название')
SetVar($NewItem,'./pic/weapon/axes/axe_1.png','Картинка')
...
SetVar($NewItem,7,'Свойство 1')
...
Лично я все вношу в отдельные функции, так удобнее. Внутри можно описать дополнительный обработчик
Вот как получается у меня - Стартовое получение Меча и Случайной амуниции.
Код:
#Дайте_Меч
Local NewID=@GetFreeID('Снаряжение')
If @Set_Ammo('Снаряжение_<<NewID>>',МЕЧ,ОБЫЧН,-1,0,0,-1)=On:
$АммоИгрока[]='Снаряжение_<<NewID>>' & !Сразу заполняю массив снаряжения у игрока (это можно вставить в функцию SetSlot, но пока вынесено)
@SetSlot('Снаряжение_<<NewID>>', ИГР)
End
NewID=@GetFreeID($DataName)
If @Set_Ammo('Снаряжение_<<NewID>>',RAND(0,7),ОБЫЧН,-1,0,0,-1)=On:
$АммоИгрока[]='Снаряжение_<<NewID>>'
@SetSlot('Снаряжение_<<NewID>>', ИГР)
End
--- Дайте_Меч ---
Функция Set_Ammo возвращает 1 в случае если все прошло удачно или 0 - при любой неудаче вовремя формирования Снаряжения. Все нужные данные я передаю как параметры функции.
И в конце создаю деструктор Снаряжения - например игрок продал, или потерял, или использовал все под чистую. Чтобы не хранить "пустые" переменные, память не резиновая.
Код:
#KillAmmo
!Очистка массива Снаряжения
If $Args[0]<>'':
Dynamic('Killvar ''<<$Args[0]>>''
Killvar ''$<<$Args[0]>>''')
Else
msg('Имя массива снаряжения не может быть пустым.<br> Проверьте правильность вызыва функции "KillAmmo"')
End
--- KillAmmo ---
Re: Как сделать?
Lucifer,
начни с основ, что называется:
https://aleksversus.github.io/howdo_faq … s/add_item
В этом справочнике много ответов на самые часто задаваемые вопросы, поэтому есть вероятность, что один из этих вопросов даст подсказку, как сделать инвентарь конкретно с твоим уровнем знаний. Особенно рекомендую посмотреть вопросы про многоуровневый рюкзак, считаемые предметы и предметы не в окне предметов.
Re: Как сделать?
Вполне себе,
не разбирался в коде, но вот это:
Код:
Dynamic('Killvar ''<<$Args[0]>>''
Killvar ''$<<$Args[0]>>''') по идее эквивалентно
Код:
killvar $args[0]
killvar '$<<$args[0]>>'
Т.е. можно и без dynamic. Правда я не понимаю зачем вызывать второй killvar - это один и тот же массив.
Re: Как сделать?
Byte,
Я это еще не переписывал. Каюсь. Я просто скопировал работающий код в пример.
Но на тот момент (когда создавался код) я еще плохо понимал логику КуСПа, как-то, что-то не так делал и у меня не работало просто КillVar $Переменная. Точнее с конкретными массивами. У меня данные сохранялись. Я обязательно этот момент перепишу.
А двойной вызов на всякий случай (я опять не помню почему), наверное чисто для страховки... Логика с ООП - в деструкторе обязательно надо очистить память внутри объекта, а затем удалить сам объект, иначе мусор накапливается.
Re: Как сделать?
Я начал делать инвентарь но зашел в тупик уже что тока не пробовал но показатели не увеличивается
Я скину проще кодом
Это при выборе персонажа. Чтобы отображалось в самом начале
$object_lev_1[0]='Персонаж'
$object_lev_1[1]='Статы'
$object_lev_1[2]='Кошелёк'
$object_lev_1[3]='Связка ключей'
$object_lev_1[4]='Рюкзак'
$onobjsel = 'выделение_предметов'
GOSUB 'выделение_предметов'
выделение_предметов
Там код прописан
if $selobj='' or $selobj='Назад':
killobj
i=0 &
:уровень1
if i<arrsize('$object_lev_1'):
addobj $object_lev_1[i]
i = i +1
jump 'уровень1'
end
elseif $selobj='Рюкзак':
killobj
addobj 'Назад'
addobj 'Назад
i=0 &
:уровень2
if i<arrsize('$object_lev_2'):
addobj $object_lev_2[i]
i = i +1
jump 'уровень2'
end
end
if $selobj='Статы':
killobj
Здоровье=100
addobj 'Здоровье <<здоровье>>','',1
Скрытность=0
addobj 'Скрытность <<Скрытность>>','',1
End
addobj 'Назад'
end
unsel
После на другой локе пытаюсь прокачать скрытность
money=money-100
Act 'Держи':
if $selobj='Статы':
Скрытность=Скрытность+1
obj 'Скрытность <<Скрытность>>','',1
End
Но по и тогу остается так же ноль, можете обьяснить почему
Информация
- Статистика форума:
- Всего тем:
- 1062
- Всего опросов:
- 14
- Всего сообщений:
- 16791271
- Бездействующий:
- Пользователи форума:
- Всего пользователей:
- 2901
- Последним зарегистрировался:
- IIIUT

