Game Maker - создание игр | HellRoom Games

Game Maker | GameMaker: Studio [Game-Maker.ru] => Примеры, библиотеки, статьи, уроки, дополнения => Тема начата: Dva_Kota от Февраль 24, 2011, 20:43:47



Название: Пример инвентаря
Отправлено: Dva_Kota от Февраль 24, 2011, 20:43:47
Пример инвентаря.

Авторы: Dva_Kota (http://forum.hellroom.ru/index.php?action=profile;u=958), bodimir (http://forum.hellroom.ru/index.php?action=profile;u=1112), Alexis (http://forum.hellroom.ru/index.php?action=profile;u=995)

Небольшой пример инвентаря с подробными комментариями (на русском языке).
Этот пример был сделан для игры Wonderful World Armatrit (http://forum.hellroom.ru/index.php/topic,1793.0.html). Теперь он модифицирован для игры The Heroes of Stream - Wolrand (http://forum.hellroom.ru/index.php?topic=9157.0) и к нему добавлен инвентарь экипировки – можно надевать различные вещи и предметы на игрока.
Всю графику для примера рисовал Alexis (http://forum.hellroom.ru/index.php?action=profile;u=995).

Я видел не так уж мало примеров инвентаря, но все они мне не очень нравились. Там было много кода (если в инвентаре достаточно функций) и чтобы его как-то изменить (изменить количество ячеек изменить их размер и т.д.) нужно было «бродить» по скриптам, добавлять кучу строк для каждой новой ячейки, причем добавлять строки нужно в разные скрипты и разные места кода. Может быть, есть более удобные в использовании инвентари, просто я их не видел. По этой причине пришлось создавать свой инвентарь, который можно легко добавлять в любые проекты, практически ничего не меняя…

Прошу обратить внимание на то, что предметы в инвентаре не являются объектами. При перемещении «предмета» в инвентарь происходит следующее: параметры объекта записываются в массивы, а сам объект удаляется из комнаты. В событии рисования объекта obj_inv происходит просто рисование спрайтов объектов, перемещенных в инвентарь, в соответствии с данными из массивов. Когда «выбрасываем» «предмет» из инвентаря – создается объект, данные которого записаны в ячейку массива, соответствующую ячейке инвентаря, в которой находился «предмет». Когда перетаскиваем «предмет» из одного инвентаря в другой – значения массива первого инвентаря переписываются в массив второго инвентаря. Это следует учитывать, например, если вам нужно подсчитать количество объектов в комнате – объекты в инвентаре не будут учитываться. Дальше под понятием «предмет» следует понимать несколько массивов, содержащих данные объекта, а под понятием «объект» сам объект ГМ.











Ниже приведены примеры как можно еще модифицировать инвентарь:
 








Удаление и использование предметов из инвентаря при нажатии клавиши (на версии 1.0064 не тестировалось, но работать должно аналогично) (http://forum.hellroom.ru/index.php/topic,4668.0.html)

Горячие клавиши для конкретных слотов (для версии 1.0028 ) (http://forum.hellroom.ru/index.php?topic=6381.msg66872#msg66872)

Двойной инвентарь (http://forum.hellroom.ru/index.php?topic=6381.msg75322#msg75322)

Двойной инвентарь, второй вариант (в разработке) (http://forum.hellroom.ru/index.php?topic=10742.msg122776#msg122776)

Как сделать в инвентаре подсветку ячеек при наведении курсора (для любой версии) (http://forum.hellroom.ru/index.php?topic=8437.msg89545#msg89545)

Инвентарь крафта и обычный (здесь ничего конкретного, только идеи и общий принцип, но, возможно, кто-то сможет это применить) (http://forum.hellroom.ru/index.php?topic=7046.0)

Пример инвентаря, в котором присутствует крафт (http://forum.hellroom.ru/index.php?topic=4064.msg170814#msg170814)
Автор крафта Reylor (http://forum.hellroom.ru/index.php?action=profile;u=2674)

Во вложении еще один пример (1.0028), в котором инвентарь находится в отдельной комна


Название: Re: Пример инвентаря
Отправлено: VeGaS от Февраль 24, 2011, 20:44:28
О, ну вы круты ;) Может когда-нибудь мне пригодиться sm_milo


Название: Re: Пример инвентаря
Отправлено: Vendet от Февраль 24, 2011, 21:28:59
Инвентарь отличный, еще бы открывать его на клавишу I, было бы круто  sm:)
Полезный пример, да еще с документацией и комментариями, заслуживает  sm_respekt


Название: Re: Пример инвентаря
Отправлено: De_Joker от Февраль 24, 2011, 21:32:40
О! Классно.  sm_respekt Пригодится, может не скоро, но пригодится.
Заметил один баг. Берём 3 одинаковых предмета. В сумке появляется три этих предмета в одной ячейке. Выкидываем их из сумки. Подбираем их снова. В сумке уже один предмет. Где ещё два?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Февраль 24, 2011, 21:58:09
Кстати да... De_Joker, спасибо, сейчас исправлю...


Название: Re: Пример инвентаря
Отправлено: S_Kleer от Февраль 24, 2011, 22:18:21
У меня что-то вообще ничего не работает.  :(
Мне надо что-то самому добавлять?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Февраль 24, 2011, 22:29:59
Вообще не запускается? Добавлять ничего не надо вроде бы.
Залил новый инвентарь:
- Исправил баг (это я оптимизацией увлекся и удалил лишнюю строку  :o );
- добавил привязку к видам (на всякий случай);
- добавил кнопку, при клике на которую можно показать/скрыть инвентарь. Так же можно это сделать нажатием клавиши "I"

Добавлено: Февраль 24, 2011, 22:32:56
Плюсики это, конечно, приятно... Но я этот пример не один делал... :_blush2_:


Название: Re: Пример инвентаря
Отправлено: S_Kleer от Февраль 24, 2011, 22:37:14
Также...
Может я такой нуб?
Я не могу положить смайлик в инвентарь...
Всё перепробывал (за исключением клавиш), но ничего не помогает.

Добавлено: Февраль 24, 2011, 22:39:17
Ах вот оно что!
Тут оказывается игрок, которым нужно управлять.  ;D

Меня точно нубнуло.   sm_016


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Февраль 24, 2011, 22:46:05
Можно событие столкновения с игроком заменить на нажатие клавиши мышки  ;D


Название: Re: Пример инвентаря
Отправлено: S_Kleer от Февраль 24, 2011, 22:49:13


Название: Re: Пример инвентаря
Отправлено: Alcatraz от Февраль 24, 2011, 23:07:47
Довольно интересный пример! Отлично! ;)


Название: Re: Пример инвентаря
Отправлено: illidan от Февраль 27, 2011, 18:21:08
Я скачал но вот тоео жаль запускатся отказывается(( :'(


Название: Re: Пример инвентаря
Отправлено: SilentPhil от Февраль 27, 2011, 19:10:36
Код:
___________________________________________
ERROR in
action number 1
of Draw Event
for object obj_inv:

Error in code at line 29:
       if (txt[klick_x,klick_y]!='' && txt[klick_x,klick_y]!='empty')//если слот, на который наведен курсор, не пустой
           ^
at position 10: Unknown variable txt or array index out of bounds

Забил инвентарь смайликами, потом начал выкидывать и вдруг весь инвентарь очистился и вылетела эта ошибка.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Февраль 27, 2011, 22:48:37
эта ошибка в той версии которая сейчас выложена или ты скачал еще когда я только создал тему. В той версии которая была сначала эта ошибка была когда быстро двигаешь мышь и нажимаешь кнопку. Там координаты ячейки вычислялись один раз в драв, и, на сколько я понял, когда происходило событие рисования курсор был еще не над инвентарем, а при клике уже над инвентарем, и получалось что такого элемента массива не существует. В этом примере я вычисляю координаты и в драв и в событии рисования. Пока что не удалось получить такую ошибку... Но если у тебя она возникла в последней версии (1.0025) то я пока что не нашел в чем именно причина. У кого-то еще такое было?

Добавлено: Февраль 27, 2011, 23:01:08
И еще важный момент: ошибка появилась при клике правой кнопкой или просто при наведении курсора?


Название: Re: Пример инвентаря
Отправлено: MegaDimon от Февраль 27, 2011, 23:02:54
 sm_respekt


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Февраль 27, 2011, 23:22:32
Заменил пример в первом посте. Теперь вычисление переменных klick_x и klick_y происходит только когда курсор наведен на инвентарь, т.е. они не могут быть больше размера инвентаря (раньше они вычислялись каждый шаг в событии Draw и каждый раз при глобальном левом клике мышкой). Теперь ошибки быть не должно (я долго мучил пример и ошибка у меня все таки появилась один раз, теперь, после исправления, не появляется, по крайней мере пока что). Если у кого-то будут ошибки, обязательно пишите. Фил,  sm_respekt


Название: Re: Пример инвентаря
Отправлено: illidan от Февраль 28, 2011, 16:41:10
Спасибо, хороший пример!
Но...
На виндоус хп запускается, а на винде 7 неа  :(
И еще заметил ошибку:
Например у мя в первой ячейке предмет, что делает хп- 10 , а во второй хп + 10.
Я использую п редмет с первой ячейки, а потом предмет со второй ячейки перетаскую в первуюи использую, он мне делает хп -10 хотя должно делать хп +10!!! Я так понял типа память о свойствах предмета сохраняется в ячейке штоли? Ну в общем проверь и исправь, пожалуйста! А так "+"  sm_respekt!


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Февраль 28, 2011, 16:44:46
Ок. Вечером обязательно посмотрю в чем проблема. Скорее всего это из-за оптимизации: я лишнее по убирал. наверное не все было "лишнее". ;D


Название: Re: Пример инвентаря
Отправлено: illidan от Февраль 28, 2011, 17:05:01
Цитировать
наверное не все было "лишнее".
sm:)


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Февраль 28, 2011, 20:44:34
Ошибка была легко найдена. Событие Global Left Relesed у объекта obj_inv. Не хватало одной строки (выделена красным):



Название: Re: Пример инвентаря
Отправлено: illidan от Февраль 28, 2011, 21:23:26
Спасибо! Но что насчет Windows 7? Не загружается((( :(


Название: Re: Пример инвентаря
Отправлено: Vendet от Февраль 28, 2011, 21:59:54
Спасибо! Но что насчет Windows 7? Не загружается((( :(


Название: Re: Пример инвентаря
Отправлено: Alcatraz от Февраль 28, 2011, 22:32:46
Вендет, мне кажеться, на хелруме, кроме тебя, все юзают кряки...я вот хочу купить лицуху...но вот никак не соберусь! :)


Название: Re: Пример инвентаря
Отправлено: illidan от Февраль 28, 2011, 23:21:24
Я скачал Game_Maker.exe  и вставил себе в папку с ГМ))
Так что не лицензия!


Название: Re: Пример инвентаря
Отправлено: Alcatraz от Февраль 28, 2011, 23:58:55
Ч.Т.Д (Что.и Требовалось.Доказать) :)


Название: Re: Пример инвентаря
Отправлено: illidan от Март 01, 2011, 00:10:03
То, что все пиратством занимаются это понятно и так!!!
Ты лучше мне скажи без лицензии на Windows 7 многое отказывается работать?
Если да - то жаль, сильно жаль...


Название: Re: Пример инвентаря
Отправлено: Alcatraz от Март 01, 2011, 00:14:23
У меня тоже ГМ не лицензия..пока что! И была у меня винда 7 пиратка, на новом винда 7 лицуха! На новом-нет проблем..
На старом была одна проблемма:
Через ярлык исходники не открывались, я запускал ГМ и через него открывал файл..но потом прошло!
А у тебя, что там за проблема?


Название: Re: Пример инвентаря
Отправлено: illidan от Март 01, 2011, 00:26:52
У мя исходники через ярлык запускаются но когда жму "зеленый треугольник" недогрузившись до конца пишет ошибку и предлогает либо закрыть программу либо искать решение в интернете!
ЗЫ: запятые потерял...
ЗЗЫ: щя попробую не через ярлык запустить, но думаю - разницы никакой небудет(.

Добавлено: Март 01, 2011, 00:29:17
Да, разницы никакой(!
И почемуть это именно с этим примером sm_???.
Остальные, тфу-тфу-тфу, работают норм!

Добавлено: Март 01, 2011, 00:33:18
Да и еще винда у мя вроде не пиратка)


Название: Re: Пример инвентаря
Отправлено: Alcatraz от Март 01, 2011, 07:07:16
странно!... ::)... у меня через ярлык не открывались на пиратской винде.. а тут и не запускаеться...  ::)


Название: Re: Пример инвентаря
Отправлено: SilentPhil от Март 01, 2011, 13:36:42
На семерке все работает.


Название: Re: Пример инвентаря
Отправлено: Vendet от Март 01, 2011, 13:44:14
На семерке все работает.
Аналогично, работает отлично, значит проблема только у illidan - из за железа, версия windows, кривой кряк для ГМ 8 (а их штуки 3 если не больше) или, что то другое.


Название: Re: Пример инвентаря
Отправлено: illidan от Март 01, 2011, 18:39:27
Попробую кряк другой, потом как нибудь.
Ну ладно: мои проблемы - сам решу!


Название: Re: Пример инвентаря
Отправлено: Hamster099 от Март 13, 2011, 15:28:27
Очень крутой инвентарь  ;)
эх, видел бы я его пораньше, не мучился бы столько  ;D


Название: Re: Пример инвентаря
Отправлено: Near от Март 27, 2011, 19:11:41
ERROR in
action number 1
of Mouse Event for Right Pressed
for object obj_inv:

Error in code at line 33:
               txt[klick_x,klick_y]='empty';/*помечаем эту ячейку "пусто", но в нее пока что ничего положить нельзя будет.
                   ^
at position 18: Negative array index


И это везде, где есть [klick_x,klick_y].


Что с этим делать?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Март 31, 2011, 19:30:17
Координаты центров спрайтов ячеек и фона инвентаря должны быть в точке (0,0).

Добавлено: Апрель 07, 2011, 01:05:18
Может быть кому то пригодится этот код:
Код:
//Это код проверки наличия предмета в инвентаре

with (obj_inv)//выполняем код для объекта obj_inv
    {
    for (slot_y=0; slot_y<inv_height_y; slot_y+=1)//выбираем строку инвентаря для проверки
        {
        for (slot_x=0; slot_x<inv_width_x; slot_x+=1)//проверяем все ячейки в этой строке, а потом опять выполнится сторка выше и мы перейдем к следующепй строке инвентаря
            {
            if (txt[slot_x,slot_y]='Grin')//когда находим ячейку с таким же предметом
                {
                      //здесь код, который должен выполниться если предмет есть в инвентаре
                }
            }
        }
    }


Название: Re: Пример инвентаря
Отправлено: weadon от Июнь 08, 2011, 12:27:05
Интересный пример, то что надо. Вот был бы еще вариант примера, описанный подробно, по шагам. А то я не так давно в Game Maker, не все знаю и понимаю. Уже 4,5 часа вожусь с примером. Хочется создать свой инвентарь по подобию данного, но со своими названиями объектов и спрайтов, свое количество и разнообразие объектов.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 08, 2011, 13:08:45
Объектов, которые можно помещать в инвентарь, можно создать сколько угодно, с любыми именами и спрайтами - главное назначит им один общий родительский объект.
Все названия можно легко заменить на свои воспользовавшись поиском в коде и заменой.

Добавлено: Июнь 10, 2011, 14:50:48
Добавил в первый пост "Как изменить привязку предметов при перетаскивании"


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 29, 2011, 13:19:23
В ближайшее время будет новая версия инвентаря. Добавлю всякие мелочи (разные спрайты в объектов в комнате и в ячейках инвентаря, можно будет поменять предметы местами если перетащить один на другой, что-то еще...).


Если у кого-то есть предложения/пожелания что добавить/изменить пишите, постараюсь реализовать (если будет время).


Название: Re: Пример инвентаря
Отправлено: Лер да Рим от Июль 10, 2011, 12:00:01
Как исправить эту проблему
of Mouse Event for Right Pressed
for object obj_inv:

Error in code at line 33:
               txt[klick_x,klick_y]='empty';/*помечаем эту ячейку "пусто", но в нее пока что ничего положить нельзя будет.
                   ^
at position 18: Negative array index

если центр спрайта должен быть в центре? Иначе придётся подгонять разного размера бутылки под иного размера ячейки...


А, ладно, можно просто делать спрайты с пустыми краями.
Сотрите это)


Название: Re: Пример инвентаря
Отправлено: Server313 от Август 01, 2011, 10:08:02
КУЛЛ. РЕСЕКТ


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Август 05, 2011, 09:16:42
Добавил в первый пост еще один пример, в котором инвентарь находится в отдельной комнате (открывается/закрывается на клавишу I) и при перетаскивании одного предмета на другой они меняются местами. Чтобы предметы менялись местами см. изменения в событии Global Right Released у объекта obj_inv (можно просто скопировать весь код оттуда в старый пример).


Название: Re: Пример инвентаря
Отправлено: SlooM от Август 05, 2011, 14:54:54
Ошибочка. Во втором примере. с комнатой. Когда нажимаешь на смайлик с открытым ртом. НУ после того как он в инвентаре.

Добавлено: Август 05, 2011, 14:55:30
Спасибо. Пример очень пригодился. +! А можно ли сделать перетаскивание предметов с одной ечеёки в другую?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Август 05, 2011, 15:02:38
Ошибка из-за того что в комнате с инвентарем нет игрока, у которого должно пополняться здоровье при использовании предмета. Пример этот я делал уже не помню для кого, там нужно было просто чтобы инвентарь был в отдельной комнате и чтобы можно было менять предметы при перетаскивании.

Цитировать
А можно ли сделать перетаскивание предметов с одной ечеёки в другую?

Это и так реализовано как в первом так и во втором примере (второй я выложил как раз из-за того что там перетаскивание отличается).
Перетаскивание правой кнопкой мыши.


Название: Re: Пример инвентаря
Отправлено: SlooM от Август 05, 2011, 15:16:28
А... Спасибо)


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Август 06, 2011, 10:17:12
Можно сделать чтобы предметы перетаскивались не при удержании правой кнопкой а по принципу "нажал один раз - перетаскиваешь, нажал еще раз - положил"

Событие Glob Right Released меняем на событие Glob Right Pressed и в конец добавляем else код из события Right Pressed:
Схема такая:
Код:
"Код из события Glob Right Released"
else
"Код из события Right Pressed"

А вот уже готовый код:

Здесь в код из события Right Pressed добавлена еще одна проверка "находится ли курсор над инвентарем
Код:
if (position_meeting(mouse_x,mouse_y,self))

Возможно я здесь еще что-то менял. И, возможно, комментарии не везде соответствуют тому что на самом деле...

P.S.: Сделать окончательный вариант инвентаря пока что-нет времени, по этому выкладываю куски.
Добавил эту информацию в первый пост.


Название: Re: Пример инвентаря
Отправлено: Server313 от Август 12, 2011, 09:55:26
Как это понять "Двойной"?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Август 15, 2011, 12:22:52
Два отдельных инвентаря одновременно, можно перетаскивать предметы из одного в другой. (Можно сделать и больше инвентарей).


Название: Re: Пример инвентаря
Отправлено: Dmi7ry от Август 18, 2011, 20:00:23
При перетаскивании неплохо было бы запоминать смещение мыши внутри спрайта предмета (mouse_x-sprite_x и mouse_y-sprite_y) и при "привязке" к курсору мыши прибавлять это смещение. Для того, чтобы спрайт не "прыгал" вправо вниз относительно курсора мышки во время перетаскивания.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Август 26, 2011, 10:24:41
Да, хорошая идея.


Название: Re: Пример инвентаря
Отправлено: Lord от Август 26, 2011, 11:21:14
Спасибо огромное! sm_good я cам делаю RPG и мне очень пригодится! sm_respekt sm_hzx спасибо тебе Dva_Kota!!!! тебе +2 ;)


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Август 26, 2011, 11:26:04
Автор не только я (см. первый пост).


Название: Re: Пример инвентаря
Отправлено: Araxero от Август 29, 2011, 13:36:59
много текста


Название: Re: Пример инвентаря
Отправлено: Shredder от Сентябрь 01, 2011, 15:11:40
там же ошибка в коде при создании инвентаря?
вместо трех inv_width_x должно быть inv_height_y
потому у некоторых и глючило, когда берешь много предметов


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Сентябрь 07, 2011, 14:37:28
Araxero, в примере двойного инвентаря предметы берутся на клавишу Е (написано в теме и можно было увидеть в самом примере). немного подправил пример чтобы нельзя было перемещать предметы во второй инвентарь когда он заполнен.

Двойной инвентарь (http://forum.hellroom.ru/index.php?topic=6381.msg75322#msg75322)

Shredder, да, спасибо, это ошибка (хотя она, в данном случае не влияет не на что, вроде бы). Это тоже исправил.


Название: Re: Пример инвентаря
Отправлено: Devastator от Ноябрь 15, 2011, 19:15:37
Спасибо за пример. +1  sm_good


Название: Re: Пример инвентаря
Отправлено: Cuper479 от Декабрь 09, 2011, 20:44:41
Хороший инвентарь sm_mosking я его для своей игры использую, но ты можешь реализовать, сундуки и крафтиг плиз оч надо sm_good!


Название: Re: Пример инвентаря
Отправлено: kavoch от Декабрь 24, 2011, 12:14:25
Инвентарь просто куль =)  можно было бы  крафтинг привязать к нему (было бы ваще sm_hzx)


Название: Re: Пример инвентаря
Отправлено: sanya9090 от Январь 04, 2012, 15:49:24
Можно ли этот пример переделать, чтобы ну допустим сбоку от инвенторя было еще поле экипировки персонажа. И при выборе ну например меча в инвенторе он одевался в экиперовку (+ к атаке))) как во всех нормальных рпг.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Январь 07, 2012, 12:28:35
sanya9090, можно сделать это при помощи двойного инвентаря (только инвентарей сделать больше). Ссылка выше, сейчас пока нет времени с этим разобраться. Может быть у тебя получится самому сделать. Когда у меня будет время я планирую этим заняться, но когда это будет - не известно.

По поводу крафта (давно в эту тему не заглядывал, только сейчас увидел что кому-то это нужно) как раз вчера думал. Есть неплохая идея, тоже попробую сделать.


Название: Re: Пример инвентаря
Отправлено: Sanek94 от Январь 17, 2012, 15:33:22
Огромнейшее  спасибо за этот пример.  sm_respekt . Сколько примеров смотрел ничего не понимал а тут все просто, подредактировал чутка и норм. sm_good


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Январь 18, 2012, 15:57:38
Небольшое дополнение "Как сделать чтобы в инвентаре отображались маленькие иконки предметов" (под спойлером в первом посте). Спасибо Alexis за то что задал такой вопрос.

Добавлено: Январь 30, 2012, 22:56:00

Добавлена новая версия инвентаря 1.0062 - инвентарь+инвентарь экипировки (в первом посте). В версии 1.0062 ошибок мы не обнаружили, но не исключено что они там есть. Если найдете ошибку обязательно напишите в теме, чтобы мы ее исправили как можно быстрее


Название: Re: Пример инвентаря
Отправлено: Alexis от Январь 30, 2012, 23:21:15
Ура! Dva_Kota, молодец, хорошо поработал!  sm_milo


Название: Re: Пример инвентаря
Отправлено: plomax от Январь 31, 2012, 02:47:11
Dva_Kota Молодец! sm_milo

Добавлено: Январь 31, 2012, 04:36:42
ошибка!
не поставить в инвентары в слот :'(
http://www.youtube.com/watch?v=1RKJPQjDYhc


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Январь 31, 2012, 16:10:09
plomax, такой баг раньше тоже был, но я давно его не встречал и думал что не заметил как его исправил. При каких обстоятельствах появилась эта "волшебная ячейка"? Подозреваю что при перемещении предмета из одного инвентаря в другой (скорее всего оружие), но хотелось бы знать подробнее.


Название: Re: Пример инвентаря
Отправлено: plomax от Январь 31, 2012, 16:44:37
я нашел ошибка спрайт и текст :'(!!!

Я нажать кнопки удерживать право мышь :gm129:
взял ячейка из инвентарь врашает окно.
Потом отпущена слева и право мышь :gm129: ячейка положит в инвентарь, потом появился ошибка без спрайт и текст а ячейка занята в инвентары а где спрайт и текст sm_??????????


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Январь 31, 2012, 17:14:17
В объекте obj_inv в событии нажатие левой клавиши заменить первую проверку
Код:
if (visible)
на
Код:
if (visible and inv_txt!='' and obj_inv_weapon.inv_txt!='' )

В объекте obj_inv_weapon в событии нажатие левой клавиши заменить первую проверку
Код:
if (visible)
на
Код:
if (visible and inv_txt!='' and obj_inv.inv_txt!='' )

Вроде бы это решает вышеуказанную проблему. Проверь с таким кодом.

p.s.: я бы не догадался такой с инвентарем проделывать, по этому и не заметил такую ошибку sm_sarcastic


Название: Re: Пример инвентаря
Отправлено: Sanek94 от Январь 31, 2012, 18:02:35
 sm_good sm_respekt Круто сделано. 


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Январь 31, 2012, 21:18:57
Перепутал: вместо
Код:
if (visible and inv_txt!='' and obj_inv_weapon.inv_txt!='' )
и
Код:
if (visible and inv_txt!='' and obj_inv.inv_txt!='' )

нужно было ставить
Код:
if (visible and inv_txt!='' and obj_inv_weapon.inv_txt!='' )
и
Код:
if (visible and inv_txt!='' and obj_inv.inv_txt!='' )

Новая версия в первом посте. Исправлен этот баг и добавлена возможность менять предметы местами в основном инвентаре.


Название: Re: Пример инвентаря
Отправлено: Sewer от Январь 31, 2012, 22:05:57
Нашел очень маленький баг....даже на баг не похож  :facepalm: Если одеть кровавый меч на персонажа ,то он отобразится не на нем ,а в верхнем левом углу - http://s018.radikal.ru/i503/1201/25/33319b72cae6.png


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Январь 31, 2012, 22:16:04
Спасибо, Sewer. Я случайно удалил событие End Step у меча... :facepalm_2:
Перезалил в первом посте


Название: Re: Пример инвентаря
Отправлено: plomax от Февраль 03, 2012, 18:57:05
Ошибка! автоматический положил в экипировку почему не поставил инвентары :facepalm:


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Февраль 03, 2012, 22:56:28
Ошибка! автоматический положил в экипировку почему не поставил инвентары :facepalm:

Подробнее можно!


Название: Re: Пример инвентаря
Отправлено: Alexis от Февраль 04, 2012, 11:19:09
Наверное, ему не понравилось то, что предмет одежды сразу одевается на игрока, а не ложится сначала в инвентарь!


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Февраль 04, 2012, 19:42:35
В комментариях и в описании написано как это отключается: удалением нескольких строк кода.


Название: Re: Пример инвентаря
Отправлено: plomax от Февраль 04, 2012, 20:22:12
Наверное, ему не понравилось то, что предмет одежды сразу одевается на игрока, а не ложится сначала в инвентарь!
да да да


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Февраль 04, 2012, 20:24:52
Нужно удалить первые несколько строк в событии столкновения родительского объекта для всех предметов с игроком (в комментариях написано до какой строки удалять).


Название: Re: Пример инвентаря
Отправлено: plomax от Февраль 04, 2012, 20:28:09
Спасибо.я попробуйте sm:)


Название: Re: Пример инвентаря
Отправлено: R от Февраль 12, 2012, 21:27:18
У меня пример не запускался. Выдавало ошибку "Закрыть программу", "Искать решение в интернете".
Но потом просто переименовал файл. ;D Заработало.
Может из за точки в названии файла он не запускается.


Название: Re: Пример инвентаря
Отправлено: Limekys от Февраль 15, 2012, 00:45:49
Блин а как сделать так чтобы удалялось сразу два определённых предмета и если какогото в кол-ве нехватает то ничего не происходило? Например: нужно 2 палки и 3 булыжника, надо чтобы они удалились, а если 1 булыжника или 1 палки нехватает, то ничего не происходит.
Либо подскажите как сделать отдельный инвентарь для крафта вещей(колонкой 3х3)! Очень надо!!! :'( :'( :'(


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Февраль 15, 2012, 18:29:00
В первом посте есть ссылка на тему Инвентарь крафта и обычный (http://forum.hellroom.ru/index.php?topic=7046.0). Там обсуждалось как сделать крафт. Автор темы разобрался как это сделать, возможно поделится примером.
Вообще это можно сделать проверкой количества предметов. В первом посте есть код, добавим туда еще одну проверку - количество предметов и искать будем каждый предмет. Если нашли - записываем в какую-то переменную что мы нашли этот предмет в инвентаре. Если все необходимые ингридиенты есть в инвентаре - удаляем предметы и создаем новый предмет (создаем его не в инвентаре, а в координатах игрока - если в инвентаер есть место - он автоматически подберется).
Вот пример кода создания зеленого кольца из трех бутылок лечебного зелья и двух бутылок зелья телепортации. Названия предметов, нужных для крафта, и их количество записываются в массив, так что их можно легко менять. Можно сделать этот код скриптом - использовать его будет удобнее. Тогда предмет, получаемый при крафте, то тоже нужно будет записать в переменную. Здесь есть только одно ограничение - предметы, используемые для крафта, должны лежать в одной ячейке (т.е. если 3 бутылки лечебного зелья будут лежать не в одной ячейке а в разных - создать кольцо не получится). Это можно исправить, но код будет немного сложнее. Вот пример кода, исходник прикреплю к первому посту.


Добавлено: Февраль 15, 2012, 20:23:17
Добавил скрипт scr_craft - код там почти такой же, но использовать скрипт проще. Формат скрипта:
scr_craft(объект_который_будет_создан_при_крафте,первый_ингредиент,количество_первого_ингредиента, второй_ингредиент, количество_второго_ингредиента). Можно легко сделать больше ингредиентов, добавив еще пару аргументов в скрипт и увеличив значение переменной n.
В примере использование скрипта стоит в событии нажатия клавиши "F" у основного инвентаря.


Пример прикреплен в первом посте:
http://forum.hellroom.ru/index.php?action=dlattach;topic=4064.0;attach=11136

Добавлено: Февраль 15, 2012, 21:32:47
можно сделать из скрипта еще один скрипт - проверку достаточно ли ингредиентов для создания нового предмета. с помощью него вычислять какие предметы можно создавать и создавать соответствующие кнопки (или пункты меню), при нажатии на которые будет выполняться скрипт scr_craft (создание нового предмета). В целях оптимизации можно блокировать игрока при открытии меню крафта - чтобы содержимое инвентаря не менялось и чтобы было достаточно один раз проверить какие предметы можно создавать, и перепроверять после каждого созданного предмета.


Название: Re: Пример инвентаря
Отправлено: Limekys от Февраль 17, 2012, 23:57:48
Спасибо! Попробую сделать. Но вот можно ли как-нибуть сделать, так чтобы крафт был как в игре Minecraft?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Февраль 18, 2012, 00:14:21
Я не играл в эту игру и не знаю как там сделан крафт.
Позже сделаю крафт примерно как в terraria (наработки уже есть), но доделывать буду когда появится время.


Название: Re: Пример инвентаря
Отправлено: Limekys от Февраль 20, 2012, 01:30:27
Оооо... как в террарии будет норм, потому-что у меня что-то на подобии сейчас. sm_milo


Название: Re: Пример инвентаря
Отправлено: annykey8 от Февраль 23, 2012, 20:41:13
Выползла такая ошибка при запуске скрипта крафта. Это я что то сделал не так? Если в настройках поставить присвоение 0 неизвестным переменным, то ничего не происходит.

Цитировать
___________________________________________
ERROR in
action number 1
of Key Press Event for T-key Key
for object obj_hero:

In script scr_craft:
Error in code at line 17:
       for (slot_y=0; slot_y<inv_height_y; slot_y+=1)//выбираем строку инвентаря для проверки
                             ^
at position 28: Unknown variable inv_height_y

Извините. Разобрался  :facepalm:


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Февраль 23, 2012, 20:48:41
Этот скрипт нужно выполнять в объекте-инвентаре (или для объекта-инвентаря).

А вообще, если почитать комментарии и немножко разобраться в устройстве инвентаря, то будет понятно что ты в игроке проверяешь слоты инвентаря, а это разные объекты.


Название: Re: Пример инвентаря
Отправлено: annykey8 от Февраль 23, 2012, 21:16:18
Такой вопрос:
При крафте один из ингредиентов нужно удалить, а второй оставить. Например имеем палку и топор, крафтим копье, удаляется палка, а топор остается.
Как это можно провернуть?


Название: Re: Пример инвентаря
Отправлено: S_Kleer от Февраль 23, 2012, 21:57:30
Ну, как бы не удалять топор. Логично?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Февраль 23, 2012, 22:10:34
В конце скрипта удаление предметов через for. Сделай отдельно удаление для тех предметов крафта, которые нужно удалять - убери цикл for и вместо i ставь номера тех предметов которые будешь удалять (нумерация начинается с 0).


Название: Re: Пример инвентаря
Отправлено: Karmax от Февраль 27, 2012, 01:21:31
Здравствуйте! Такой вопрос: допустим имеется пистолет и патроны к нему. Игрок берет пистолет и когда стреляет, то патронов в инвентаре соответственно становится меньше. Т.е. возможность стрелять и наличие патронов просчитывались через наличие тех самых количества патронов в инвентаре. Получилось только реализовать убыль, а вот заменить переменные, которые отвечают за наличие патронов - никак.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Февраль 27, 2012, 20:17:04
т.е. уменьшение количества патронов и проверку их наличия реализовать получилось, не получилось только реализовать очистку ячейки когда количество патронов равно 0?
Если да, то очистка делается так:

Код:
//очищаем переменные для ячейки из которой перетаскивали (удаляем предмет из инвентаря)
                            other.txt[other.slot_x,other.slot_y]='';
                            other.item[other.slot_x,other.slot_y]=0;
                            other.max_number[other.slot_x,other.slot_y]=0;
Такой код встречается в инвентаре. Если не получается сделать уменьшение количества патронов, в первом посте есть ссылка на тему про удаление предметов из инвентаря
http://forum.hellroom.ru/index.php?topic=4668.msg99557#msg99557

Перед этим нужно проверить есть ли такой предмет в инвентаре (код для этого есть под спойлером в первом посте)


Название: Re: Пример инвентаря
Отправлено: Karmax от Февраль 27, 2012, 20:42:29
Имел в виду другое, но вы меня почему-то навели на правильное решение. Спасибо!

Добавлено: Февраль 28, 2012, 20:01:46
И еще вопрос. Выбрасываешь предмет из инвентаря, после чего спрайт игрока меняется. Не могу реализовать никак. Если ставить в коде наличия предмета в инвентаре через else после действия, то спрайт будет всегда таким, который указан после else и изменить его невозможно. 

{with (obj_inv)
    {
    for (slot_y=0; slot_y<inv_height_y; slot_y+=1)
        {
        for (slot_x=0; slot_x<inv_width_x; slot_x+=1)
            {
            if (txt[slot_x,slot_y]='Pistol')
                {with(h)
                if keyboard_check(ord('1'))
{sprite_index=spistol1}}

}
else
{sprite_index=spistol0}
}}}
Вот тот самый код.


Название: Re: Пример инвентаря
Отправлено: Limekys от Март 01, 2012, 00:06:25
Dva_kota, ну пожалуйста, напиши как сделать инвентарь как в террарии который ты уже начал вроде делать. Очень надо! Буду очень очень очень сильно благодарен!!! :'( :'( :'(


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Март 01, 2012, 00:25:41
Karmax, работает не так как хочется по тому что проверяется каждый слот, после того как нашли нужный предмет - меняется спрайт на spistol1, но потом поиск продолжается, и если следующая ячейка содержит другой предмет или пустая (а так будет почти всегда, за исключением того случая, когда нужный предмет лежит в нижней правой ячейке) спрайт поменяется на spistol1.

Чтобы это исправить поставь exit после {sprite_index=spistol1}, вот так:

Эта часть кода должна быть в конце, т.к. если предмет будет найден, все что написано после exit не будет выполняться.

Не знаю для чего именно ты это используешь, но, возможно, было бы проще сделать как в последней версии инвентаря (если ты не ее используешь).



SUPCHIK, я уже писал что разрабатывать ее начал, но на то чтобы закончить времени нет, и когда будет - не могу даже представить. Возможно ты сам быстрее это сделаешь из той заготовки крафта, которая лежит в первом посте.


Название: Re: Пример инвентаря
Отправлено: MaximXGame от Март 01, 2012, 07:01:19
Код:
___________________________________________
ERROR in
action number 1
of Mouse Event for Left Pressed
for object obj_inv:

Error in code at line 16:
               case obj_sm15: obj_hero.hp+=10; break;//увеличиваем у игрока hp на 10
                              ^
at position 29: Unknown variable hp
Либо Game Maker читает комменты и делает их действия, либо это реально незаведённая переменная.
Инвентарь версии 1.0028


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Март 01, 2012, 10:14:56
Это пример без изменений или ты в нем что-то менял?
вообще у игрока есть переменная hp. Может ты игрока убрал из комнаты?

Добавлено: Март 01, 2012, 10:22:03
Вспомнил, в версии 1.0028 просто сделан инвентарь в отдельной комнате. если при использовании предметов должны меняться какие-то переменные - эти переменные должны быть глобальными или находиться в постоянном объекте (например в самом инвентаре - он постоянный).
А вообще советую использовать последнюю версию - там настройка удобнее. Если не нужен инвентарь экипировки - его можно отключить.


Название: Re: Пример инвентаря
Отправлено: Limekys от Март 04, 2012, 17:22:02
Слушай, Dva_Kota, а можешь скинуть мне хотябы наработки твоего инвентаря как в террарии? пожалуйста!


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Март 04, 2012, 18:15:28
Наработки в виде нескольких записей на листе бумаги. Никакого кода. Так что делиться нечем.

Принцип такой:
сделать таблицу, по х расположить какие предметы можно получить при крафте, по у те предметы из которых можно что-то получить.
в саму табилицу на пересечении соответствующих строк и столбцов записывать сколько нужно предметов для создания нужного предмета


дерево
сталь
молоток
1
1
топор
1
2
гиря
0
2

На основе этого создается двухмерный массив, в который записываются числа. причем нулевую строку заполняем не числами а false, а нулевой столбец заполняем нулями. На основе приведенной выше таблицы должен получиться такой массив:

при открытии окна крафта (лучше сделать чтобы при этом игрок не мог подбирать/использовать поредметы, чтобы не пересчитывать каждый шаг) проверяем какие предметы и в каком количестве есть в инвентаре, количество записываем нулевую колонку массива - на против каждого предмета (в данном случае для дерева в craft[0,1], для стали в craft[0,2])

после этого проверяем какие предметы можно создать, для этого по очереди сравниваем каждый столбец с нулевым столбцом (с количеством предметов в инвентаре) - если предметов достаточно - меняем в этом столбце "верхний" элемент (у которого второй индекс равен 0) с false на true, если недостаточно  - не меняем (это нужно делать с помощью циклов).

После этого записываем в список все предметы, которые можно создать (у которых стоит true), на основе этого списка создаем кнопки для создания предметов. При создании предмета удаляем из инвентаря нужное количество предметов (на основе массива) и создаем то что нужно.

Ну вот как-то так...


Название: Re: Пример инвентаря
Отправлено: Limekys от Март 08, 2012, 00:46:03
Спасибо, как нибуть разберусь.


Название: Re: Пример инвентаря
Отправлено: El-arto от Апрель 04, 2012, 20:47:31
А возможно сделать чтоб при закрытии инвентаря была доступна только верхняя строка, а при открытии все?


Название: Re: Пример инвентаря
Отправлено: Лер да Рим от Апрель 04, 2012, 20:51:17
Не помню уже примера... Но по логике вместо смены visible нужно поменять количество строк (т.е. в высоту) с 3 на 1 при закрытии... ну и с 1 на 3 при открытии.

Добавлено: Апрель 04, 2012, 20:53:37
А, хотя это же удалит предметы из тех двух строк. Тогда можно сделать отдельный объект и при закрытии делать невидимым инвентарь и создавать его, заполняя его ячейки данными из инвентаря. А при открытии удалять.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Апрель 08, 2012, 12:26:02
Лер да Рим предложил хороший вариант. Еще можно поменять размеры маски инвентаря (спрайта):
image_yscale=1;
когда нужно открыть
image_yscale=inv_height_y;
это для того чтобы нельзя было нажимать на остальные ячейк.

ну и отображение менять - чтобы отображалась только первая строка:
вместо
Код:
for (slot_x=0; slot_x<inv_width_x; slot_x+=1)//выбираем столбец инвентаря для проверки
    {
    for (slot_y=0; slot_y<inv_height_y; slot_y+=1)//проверяем все ячейки в этом столбце, а потом опять выполнится сторка выше и мы перейдем к следующему столбцу инвентаря
        {
        draw_sprite(sprite_index,image_index,x+slot_x*slot_width_x,y+slot_y*slot_height_y);//рисуем ячейки инвентаря
        if (txt[slot_x,slot_y]!='' && txt[slot_x,slot_y]!='empty')//если слот не пустой
            {
            draw_sprite(spr[slot_x,slot_y],image_index,x+slot_x*slot_width_x,y+slot_y*slot_height_y);//рисуем спрайт предмета, находящегося в этой ячейке инвентаря (в своих координатах)
            if item[slot_x,slot_y]!=1 {draw_text(x+slot_x*slot_width_x,y+slot_y*slot_height_y,item[slot_x,slot_y])};//пишем количество предметов в слоте
            }
        }
    }

нужно писать
Код:
slot_y=0
for (slot_x=0; slot_x<inv_width_x; slot_x+=1)//выбираем столбец инвентаря для проверки
    {
        draw_sprite(sprite_index,image_index,x+slot_x*slot_width_x,y+slot_y*slot_height_y);//рисуем ячейки инвентаря
        if (txt[slot_x,slot_y]!='' && txt[slot_x,slot_y]!='empty')//если слот не пустой
            {
            draw_sprite(spr[slot_x,slot_y],image_index,x+slot_x*slot_width_x,y+slot_y*slot_height_y);//рисуем спрайт предмета, находящегося в этой ячейке инвентаря (в своих координатах)
            if item[slot_x,slot_y]!=1 {draw_text(x+slot_x*slot_width_x,y+slot_y*slot_height_y,item[slot_x,slot_y])};//пишем количество предметов в слоте
            }
    }
переменную visible теперь не трогаем. Можно ее заменить какой-то другой, и в зависимости от єтой переменной выполнять нужные действия
аналогично меняем фон инвентаря, если он используется

Пример в первом посте "Пример_инвентаря_Dva_Kota_Bodimir_Alexis_1.0064_rpg_mod + equipment+1str.gmk"


Название: Re: Пример инвентаря
Отправлено: Limekys от Апрель 08, 2012, 22:52:38
А каким кодом удалить все предметы из инвентаря?


Название: Re: Пример инвентаря
Отправлено: El-arto от Апрель 08, 2012, 23:54:48
А каким кодом удалить все предметы из инвентаря?
Самый простейший способ:
Код:
with(obj_inv){
instance_create(x,y,obj_inv)
instance_destroy()
}


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Апрель 09, 2012, 01:40:54
SUPCHIK, ты ведь уже спрашивал про удаление. Ссылка на тему про удаление предметов в первом посте. Правда там удаляется определенное количество конкретного предмета, нужно лишь убрать все лишнее (проверку какой предмет в слоте и количество):
Код:
with (obj_inv)//выполняем код для объекта obj_inv
    {
    for (slot_y=0; slot_y<inv_height_y; slot_y+=1)//выбираем строку инвентаря для проверки
        {
        for (slot_x=0; slot_x<inv_width_x; slot_x+=1)//проверяем все ячейки в этой строке, а потом опять выполнится сторка выше и мы перейдем к следующепй строке инвентаря
            {
                        txt[slot_x,slot_y]='';//очищаем переменные для этой ячейки (удаляем предмет из инвентаря)
                        item[slot_x,slot_y]=0;
                        max_number[slot_x,slot_y]=0;
            }
        }
    }


Название: Re: Пример инвентаря
Отправлено: Limekys от Апрель 09, 2012, 18:31:58
Dva_Kota, вот именно что я спрашивал как удалить опр. кол-во. предметов, а теперь нужно чтобы все.
El-arto, спс.

Добавлено: Апрель 10, 2012, 20:19:11
Вот, а теперь у меня вопрос по сложней. Вот я в своей игре хочу сделать так чтобы можно было хранить вещи в отдельном сундуке, а потом их брать оттуда, а главное чтобы можно было сделать сколько угодно сундуков и в каждом лежали свои вещи. Как это реализовать?


Название: Re: Пример инвентаря
Отправлено: DIMKA_98 от Апрель 10, 2012, 20:24:29
Вот, а теперь у меня вопрос по сложней. Вот я в своей игре хочу сделать так чтобы можно было хранить вещи в отдельном сундуке, а потом их брать оттуда, а главное чтобы можно было сделать сколько угодно сундуков и в каждом лежали свои вещи. Как это реализовать?
Сделать сундук как объект инвентаря  :whistling:


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Апрель 11, 2012, 14:04:51
Сделать как советует DIMKA_98. Есть пример двойного инвентаря (в первом посте ссылка), по такому же принципу можно перетаскивать предметы между ними.


Название: Re: Пример инвентаря
Отправлено: Limekys от Апрель 13, 2012, 00:57:11
 :facepalm: я до этого давно додумался! А если у меня будет несколько сундуков!!!??? как быть???


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Апрель 13, 2012, 22:03:48
Каждый сундук как отдельный объект инвентаря. Или использовать двойной инвентарь, в сундуках записывать список предметов, при открытии сундука очищать второй инвентарь, потом записывать туда предметы из списка сундука. можно их перетаскивать в свой инвентарь, при закрытии переписывать список обратно в сундук (предметы которые остались или которые мы туда добавили). Надо бы сделать такой примерчик... (пока ничего не обещаю т.к. нет на это времени).


Название: Re: Пример инвентаря
Отправлено: Limekys от Апрель 28, 2012, 17:33:29
А как сделать проверку предмета в определённом слоте? Если это узнаю, то создам крафт как в Minecraft.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Апрель 29, 2012, 16:35:48
Код:
if (txt[slot_x,slot_y]='Grin')//когда находим ячейку с таким же предметом

Вместо slot_x,slot_y поставить координаты ячейки (числа).

Аналогично можно проверить количество предметов в этом слоте:
Код:
if (item[slot_x,slot_y]=1)//вместо 1 ставить нужное количество, вместо slot_x,slot_y поставить координаты ячейки (числа).


Название: Re: Пример инвентаря
Отправлено: GariZ0nT от Май 03, 2012, 15:46:58
Работаю над своим инвентарём, надеялся увидеть оптимизации кода для себя или что то новое. Нет блин, инвентарь штука не простая и условий много, просто так в пару строк её не напишешь  sm_sad


Название: Re: Пример инвентаря
Отправлено: Limekys от Май 05, 2012, 22:06:07
GariZ0nT, Если всё прочитаешь внимательно, то всё легко.
Dva_Kota, СПС ОГРОМНОЕ!!! Как же я этого кода мог не увидеть, работал же с ним =)


Название: Re: Пример инвентаря
Отправлено: Repkin от Май 07, 2012, 23:10:27
Два кота у меня не запускает не один пример инвентаря, просто запускаю гм, потом жму играть... Выскакивает отчет об ошибке и всё.. =((


Название: Re: Пример инвентаря
Отправлено: WinSTOP от Май 08, 2012, 21:11:46
как сделать что бы при запуску игры инвентарь не появлялся??


Название: Re: Пример инвентаря
Отправлено: Limekys от Май 09, 2012, 11:43:14
как сделать что бы при запуску игры инвентарь не появлялся??
Поставь при старте игры вот это:
Код:
with (obj_inv)
{visible=!visible;}


Название: Re: Пример инвентаря
Отправлено: WinSTOP от Май 09, 2012, 11:59:11
как сделать что бы при запуску игры инвентарь не появлялся??
Поставь при старте игры вот это:
Код:
with (obj_inv)
{visible=!visible;}
спс помогло))
так теперь осталось сделать что бы из одного инвентаря в другой объект перекладывать... "мысли в слух"  sm:)

Добавлено: Май 10, 2012, 06:29:04
блин как перекладывать из одного в другой???
посмотрел пример с двумя инвентарями, подставил в свой пример код который пощитал нужным ,а он не работает точне предметы не перекладываються.
сможете код дать отвечающий за перетаскивание?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Май 10, 2012, 11:33:06
Repkin, если выдает сообщение об ошибке, почему не выложил это сообщение? Думаю проблема у тебя, т.к. у всех открывается.

WinSTOP, Этот (http://forum.hellroom.ru/index.php?topic=6381.msg75322#msg75322) пример двойного инвентаря смотрел?
Если да, то "перетаскивание" там сделано через использование предмета, т.е. при использовании предмета sm15 его данные записываются в переменные для перетаскивания и если во втором инвентаре есть свободная ячейка - переписываются туда, а сам предмет из первого инвентаря удаляется, аналогично во втором инвентаре. Код в событии нажатия левой клавиши мыши (в инвентане obj_inv начиная с 16 строки, в obj_inv2 начиная с 15 строки).
Можно этот код вставить в событие Глобальное отпускание правой кнопки мыши, проверяя над каким инвентарем находится указатель мыши в момент отпускания клавиши.


Название: Re: Пример инвентаря
Отправлено: WinSTOP от Май 10, 2012, 12:03:54
спс огромное помог всё работает)))  sm_respekt я качал этот пример ток не мог найти 2 инвентарь  :xD:

Добавлено: Май 10, 2012, 12:22:22
а почему когда я забираю из сундука все вещи отхожу на километр  :xD: открываю свой инвентарь нажиаю на предмет и он возращаеться в сундук?
как сделать что бы герой использовал этот предмет а не отдавал его сундуку? допустим если у нас открыта два инвентаря то мы просто перетаскиваюем и отнимаем деньги а если один(героя) то используем?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Май 10, 2012, 12:30:41
Сделай чтобы второй инвентарь можно было тоже скрывать (по аналогии с первым), например если расстояние до него больше определенного, то
Код:
with (obj_inv2)
{visible=false;}
else
{{visible=true;}

а при использовании проверяй: если второй инвентарь видимый перемещать предмет в него, если нет, использовать (эту проверку нужно делать в использовании)
Код:
if (obj_inv2.visible)
{
//перемещаем
}
else
{
//используем
}


Название: Re: Пример инвентаря
Отправлено: Limekys от Май 14, 2012, 23:04:32
Dva_kota, а ты можешь сделать пример как сделать так чтобы можно было хранить вещи в многих сундуках? И причём даже если сундуков может становиться больше и меньше. Очень нужно! Заранее спс!


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Май 16, 2012, 16:17:45
Сейчас нет времени это делать, но сделать, я думаю, не сложно. Вроде бы, я уже писал как такое сделать:
Нужно в каждом сундуке создать список (или массив) со списком предметов, которые в нем хранятся. Если "открываешь сундук" открываются два инвентаря (пример двойного инвентаря) и во второй инвентарь записываются предметы из списка. Все очень просто. Если время будет, может быть сделаю пример, но ничего не обещаю.


Название: Re: Пример инвентаря
Отправлено: ETUN4 от Май 16, 2012, 17:05:22
Есть идея, розделить инвентарь на на 3 группы как в большенствах играх:
1.Там бутылки для хп, и прочее то что исполбзуется для улучьшения характеристики.
2.Экипировка.
3.Вещи, которые нужны для квестов, всякие ключи, и всё что бесполезное...


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Май 16, 2012, 17:13:03
Сейчас он разделен на две, аналогично можно разделить и на три (вообще инвентарь экипировки еще разделен на несколько групп - по типам предметов, их можно сделать сколько угодно).

Добавлено: Май 16, 2012, 20:56:03
Нашел ошибку в примере Пример_инвентаря_Dva_Kota_Bodimir_Alexis_1.0064_rpg_mod + equipment.gmk
Если основной инвентарь полный, то при клике на любом предмете в инвентаре экипировки его спрайт "прилипает к курсору. Исправляется заменой строки №62 у объекта obj_inv_weapon в событии "нажатие левой клавиши мыши" с
Код:
inv_txt='';
на
Код:
other.inv_txt='';
пример перезалью позже

p.s.: странно что раньше эту ошибку никто не заметил...

Добавлено: Май 16, 2012, 22:11:17
Пример сундуков
http://forum.hellroom.ru/index.php?topic=10742.msg125335#msg125335


Название: Re: Пример инвентаря
Отправлено: Nordok от Май 26, 2012, 20:14:34
инвентарь классный! Молодцы ребята!  sm_respekt

Нашел баг в версии с сундуками. Если изменить размер стандартного инвентаря, он сам по себе изменится, но при обмене с сундуком он отображается в стандартном размере


Название: Re: Пример инвентаря
Отправлено: Autodesk от Май 27, 2012, 18:15:56
Dva_Kota, Ваш пример инвентаря мне понравился.
Хотел бы задать вопросы:
  --как возможно сделать отображение характеристики предмета под его картинкой без наведения курсора;
  --как запрограммировать свёртывание инвентаря в трей при его касании игроком.
Заранее благодарен.

Уже разобрался...

----------------------------------------------------------------------------------------
Ещё один вопрос: как с помощью кода класть объекты в сундук?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Май 29, 2012, 14:31:18
Nordok, нужно менять размеры не только в объекте obj_inv, но и в объекте obj_inv_obm_1

Autodesk, код для создания предметов в сундуках (нужно знать id сундука, в котором тебе нужно создать предмет)


Если нужно создавать много разных предметов - можно вынести этот код в отдельный скрипт, в качестве аргументов указать только те параметры, которые задаются вручную (перечислены в третьем комментарии)

Добавлено: Май 29, 2012, 14:33:28
Разве никто не заметил что когда забираешь из сундука что-то, потом опять в него заглядываешь, а предметы там опять появляются?

Добавлено: Май 29, 2012, 14:56:51
Исправил ошибку, добавил скрипт создания предметов в сундуках (+то же самое кодом, без использования скрипта)
Скачать версию 1.0073 (http://rghost.ru/38350643)


Название: Re: Пример инвентаря
Отправлено: Autodesk от Май 29, 2012, 15:44:29
Dva_Kota, большое спасибо за код.
Хотел бы поинтересоваться, как узнать ID сундука, в который следует поместить объект.

И еще, извините за глупый вопрос, но куда следует вставлять этот элемент кода?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Май 29, 2012, 16:28:03
id сундука можно узнать наведя не него курсор в редакторе комнат, если он будет создан не в процессе игры (будет написан в нижней части окно). Если сундук создается в процессе игры то функция создания объекта возвращает его id.

Куда вставлять этот элемент кода (или вызов скрипта) зависит от того когда нужно создать объект. Например я вставил в события нажатия клавиш и при нажатии "Еnter" и "3" в разных сундуках создается по 1 бутылке.

Вообще в событии Create у игрока стоит код создания сундука не стандартного размера в котором уже есть один предмет. Можно и таким кодом пользоваться, но он не очень удобный. Предметы в сундуки лучше добавлять скриптом, который есть в последнем примере.


Название: Re: Пример инвентаря
Отправлено: Autodesk от Май 29, 2012, 17:30:37
Dva_Kota, в примере скрипт и данный Вами код работают, а в моей игре - выдают ошибки. Я, должно быть, не скопировал из примера какие-то коды?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Май 29, 2012, 17:56:14
Не смогу помочь без лога ошибки. Там должно быть написано что сделано не правильно.


Название: Re: Пример инвентаря
Отправлено: Nordok от Май 29, 2012, 18:51:26
Nordok, нужно менять размеры не только в объекте obj_inv, но и в объекте obj_inv_obm_1

Autodesk, код для создания предметов в сундуках (нужно знать id сундука, в котором тебе нужно создать предмет)


Если нужно создавать много разных предметов - можно вынести этот код в отдельный скрипт, в качестве аргументов указать только те параметры, которые задаются вручную (перечислены в третьем комментарии)

Добавлено: Май 29, 2012, 14:33:28
Разве никто не заметил что когда забираешь из сундука что-то, потом опять в него заглядываешь, а предметы там опять появляются?

Добавлено: Май 29, 2012, 14:56:51
Исправил ошибку, добавил скрипт создания предметов в сундуках (+то же самое кодом, без использования скрипта)
Скачать версию 1.0073 (http://rghost.ru/38350643)

Спасибо )))

Я замечал эту ошибку (забранная из сундука появляется там вновь) ))) как раз собирался об этом написать.

Два кота, ты кажется что то говорил про оптимизацию кода сундука - у тебя случайно не появилось желания ее сделать? )))

Добавлено: Май 29, 2012, 19:22:10
Мне ваш инвентарь понравился! ))) Делаю сейчас РПГ, и хороший инвентарь мне нужен, ой как нужен. Я подумал, а зачем изобретать велосипед? Можно же доработать то что уже есть! Поэтому, разрешите, внести пару предложений по совершенствованию:

0) Оптимизировать код сундука
1) Добавить двуручное оружие, занимающее обе ячейки рук сразу!
2) Создать "быстрый запуск" для инвентаря - горизонтальную панель с n ячеек, в которую можно помещать вещи из инвентаря (не удаляя их оттуда) и использовать нажатием на клавишу.
3) Дабавить возможность прокручивания оружия. Т.е. вращением колеса мыши менять оружие находящееся в руках на то, что лежит в инвентаре. По умолчанию использовать правую руку (с возможностью переключения).
4) Немного переработать управление:
  - Использование: даблклик
  - Перетаскивание между ячейками: левой клавишей
  - Информация об итеме: правая клавиша
  - Если инвентарь был открыт перед тем, как мы общарили сундук, то открыть его снова по закрытии оного
5) Добавить продвинутый крафт на основе сундука. Т.е. по какому нибудь действию открывать n ячеек в которые можно закинуть всю лабуду и кнопку "крафт" (можно также с превью полученной вещи). В случае успеха, сырье естественно пропадает, а крафт падает в инвентарь.
6) Реализовать торговлю! Также на основе сундука. )))

Есть еще пара вещей, озвучу позже.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Май 30, 2012, 15:17:49
0) Код сундука я уже немного оптимизировал в последнем примере.
1) двуручное оружие добавлять не буду (по крайней мере в ближайшее время)
2) где-то был пример, в котором при сворачивании инвентаря остается верхний ряд ячеек
3) Тоже пока что нет желания это делать
4) Для изменения клавиш использования и перетаскивания просто поменяй все события левой клавиши мыши на правую и наоборот. Информация показывается при наведении на предмет (можно сделать чтобы не возле курсора выводилась информация, а в отдельном "окне", про это где-то в первом посте было).
5) Про крафт была тема (в первом посте ссылка), там, вроде бы что-то сделали, но результатов я не видел.
Про крафт еще в теме я писал несколько страниц назад.
6) Магазин делается очень легко - добавляем еще один массив - стоимость. При перемещении предмета из сундука-магазина в инвентарь проверяй эту переменную (хватит ли денег), если переменная меньше чем количество денег уменьшай деньги на эту переменную, если больше - ничего не делаем (exit, не перетаскиваем предмет). При перетаскивании предмета из инвентаря в сундук-магазин увеличивай деньги на эту переменную умноженную на 0,7 (или любое другое число меньше 1, чтобы продавать предметы дешевле чем покупать).


Название: Re: Пример инвентаря
Отправлено: Nordok от Май 30, 2012, 19:45:06

0) Ок, значит придется наверное самому. Но блин, разбираться в чужом коде это  :facepalm:
1) в чем сложность добавления двуручного оружия?
2) где? )))
3) необязательно
4) пробовал, не дурак, только не получилось что-то. Перетаскиваемые вещи фактически находились в нужных ячейках но их спрайты не отрисовывались ( и так еще по мелочи какие-то баги были. Я просто подумал что ты еще где-то в коде использовал события клавиш, поэтому не получается просто поменять(
5) немного не то что нужно ( ну да ладно...
6) да это понятно... см. пункт 0)

Есть что-то, что вызовет в тебе желание помочь мне с твоим инвентарем? )))


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Май 31, 2012, 11:27:04
2) Первый пост, прикреплен пример Пример_инвентаря_Dva_Kota_Bodimir_Alexis_1.0064_rpg_mod + equipment+1str.gmk
6) Магазин я постараюсь сделать когда будет время, т.к. сделать это будет не трудно. Оптимизацией тоже нужно заняться, но времени сейчас нет.


Название: Re: Пример инвентаря
Отправлено: Nordok от Май 31, 2012, 12:21:12
Нашел баг в твоем инвентаре:
Если сложить в него экиперовку (меч, щит, итд...) то забрав ее назад мы получим баг с ее одеванием: Мечи не отрисовываются в инвентаре экиперовки и все одеваются на один слот. Скорее всего это связано с опечаткой:
item_tyte[slot_x,slot_y]=    В obj_box и obj_hero

но я не уверен )))

Добавлено: Май 31, 2012, 12:25:13
Да, и еще, зачем ты пишешь "hp:..." в левом верхнем углу, когда инвентари обмена открыты?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Май 31, 2012, 13:07:34
Да, проблема в опечатке. Причем не только у этих объектов, но и у obj_inv (у остальных вроде бы нормально все, но луче еще раз проверить, т.к. я в примере исправил и уже не помню была ли опечатка в других объектах.

hp выводится по тому что я код копировал из старого примера инвентаря и забыл убрать эту строку. Посмотри событие Draw в одном из инвентарей обмена (ну помню в каком), там где-то в начале есть строка вывода hp - убери ее.
Инвентарь 1.0074 сундуки (http://rghost.ru/38390960)
Спасибо что нашел ошибку.


Название: Re: Пример инвентаря
Отправлено: Nordok от Май 31, 2012, 17:31:37
Незачто ))).

Насколько я понял, каждый итем содержит в себе переменные:
Название,
макс количество в ячейке,
действие применения,
действие снятия,
тип.

Если организовывать магазин, туда еще нужно бы внести переменную цена. Кроме того, если поднимаемый итем лежит на земле не один, (в частности это касается магазина патронов, лечилок или денег) то логично было бы еще добавить туда переменную количество тебе не кажется?

И что касается оптимизации: может все эти переменные занести в двумерный массив объекту-контроллеру, а итему оставить только название и количество? Поднимая итем с земли, мы ищем необходимую строчку в массиве по названию и берем все значения оттуда.
Зачем:
- облегчается редактирование итемов группами (нет необходимости каждый объект клацать отдельно)
- повышается наглядность
- если речь идет о встраивании инвентаря в онлайн игру, то вся эта таблица должна храниться в БД, из одного контроллера перенести ее будет проще, чем из всех объектов


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Май 31, 2012, 17:44:44
Да, нужно добавить переменную цена в объект и добавить в сам инвентарь (во все инвентари/сундуки) массив для цены.

Можно перенести код из предметов в контролер. Даже не в контролер, а в родительский объект для всех предметов, а проверять по имени объекта.

Переменную для количества предметов можно задавать не у всех предметов (как сделано для максимального количества предметов - если нет переменной то можно складывать сколько угодно предметов в одну ячейку). А вообще для переноса всех предметов в другой проект можно использовать экспорт/импорт ресурсов.


Название: Re: Пример инвентаря
Отправлено: Autodesk от Май 31, 2012, 20:03:50
Dva_Kota, это текст ошибки при исполнении скрипта scr_add_item_to_box:


Код:
ERROR in
action number 1
of Create Event
for object obj_hero:

In script scr_add_item_to_box:
Error in code at line 24:
           for (slot_y=0; slot_y<inv_height_y; slot_y+=1)//выбираем строку инвентаря для проверки
                                 ^
at position 32: Unknown variable inv_height_y

Я уже понял.


Название: Re: Пример инвентаря
Отправлено: Nordok от Май 31, 2012, 21:38:25
Не, Dva_Kota ты меня не правильно понял. Я имею ввиду, что есть валяющиеся предметы, например обойма патронов, или кучка денег, у которых есть количество. Т.е. ГГ бежит, хватает с пола автоматный рожок, к количеству патронов в инвентаре добавилось +23 патрона, хватает второй рожок, а в нем всего +4 патрона и так далее. Не создавать же 23 одинаковых объекта в одних координатах комнаты, правильно? Лучше добавить переменную "количество".

Кстати, в твоем примере инвентаря, когда мы выбрасываем все содержимое ячейки (например 10 зелий), ты создаешь 10 объектов! Нафига? Создавай 1 объект с количеством 10


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 01, 2012, 11:04:16
Nordok, да, я тебя не правильно понял. Я думал что ты предлагаешь добавить количество только определенным предметам. Тогда еще нужно писать над предметом их количество, если больше 1. И немного переделать перемещение предметов в инвентарь и из инвентаря, т.к. там код написан для одного предмета.


Название: Re: Пример инвентаря
Отправлено: Autodesk от Июнь 01, 2012, 18:01:35
Dva_Kota, подскажите, пожалуйста, какой код дописывать к инвентарю обмена, чтобы на время его использования все последствия действий игрока (нажатия клавиш, в частности) аннулировались?


Название: Re: Пример инвентаря
Отправлено: Nordok от Июнь 01, 2012, 22:07:54
Nordok, да, я тебя не правильно понял. Я думал что ты предлагаешь добавить количество только определенным предметам. Тогда еще нужно писать над предметом их количество, если больше 1. И немного переделать перемещение предметов в инвентарь и из инвентаря, т.к. там код написан для одного предмета.
Во во, я это и имел ввиду, только подписывать лежащий на земле итем (писать его количество) наверное не стоит. Это станет известно, когда персонаж поднимет вещь. Ну или на крайняк можно сделать всплывающую подсказку с количеством по наведению мыши на итем
Ну так ты добавишь это? Просто ты представь себе, если вдруг надо быдет выкинуть из инвентаря 1500-2000 золотых монет например или 200-300 лечилок? Что-то подсказывает, что это сильно ударит по FPS. Думаю подобное совершенствование всем пойдет на пользу!

Да, и еще, нашел еще один баг. Если задать размер инвентаря так, что строк будет больше чем столбцов (например 5 строк 2 столбца) то при попытке его заполнения вылетает куча ошибок!


Название: Re: Пример инвентаря
Отправлено: Autodesk от Июнь 02, 2012, 13:50:04
Dva_Kota, а можно ли добавить предметы в инвентарь игроку, используя код?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 02, 2012, 16:47:52
Dva_Kota, подскажите, пожалуйста, какой код дописывать к инвентарю обмена, чтобы на время его использования все последствия действий игрока (нажатия клавиш, в частности) аннулировались?
Мне не очень понятен вопрос. Нужно чтобы при открытом инвентаре игрок не мог ходить? Если да, то перед перемещением игрока (или перед другими действиям) нужно проверить есть ли в комнате один из инвентарей обмена (любой, на ваш выбор)

Dva_Kota, а можно ли добавить предметы в инвентарь игроку, используя код?
Можно. Два варианта:
1. В координатах игрока создать предмет, он его автоматически поднмет
2. Воспользоваться кодом для добавления предметов в сундук, только вместо сундука указать инвентарь (код был в теме выше и в последнем примере).

Nordok, про размеры инвентаря посмотрю. Остальное позже попробую добавить.


Название: Re: Пример инвентаря
Отправлено: Nordok от Июнь 02, 2012, 16:49:54
спасибо )


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 02, 2012, 16:54:21
Nordok, только что проверил. Инвеньарь с размерами 5х2. Все отлично работает, никаких ошибок у меня нет.
Вы правила форума читали? Если есть ошибка - выкладывайте лог. Это ведь не просто так написано, а для того, чтобы можно было быстрее найти в чем проблема и чтобы не пришлось долго ждать ответа на вопрос. Жду лог.

Добавлено: Июнь 02, 2012, 16:58:41
Nordok, был вопрос про крафт. В первом посте есть пример Пример_инвентаря_Dva_Kota_Bodimir_Alexis_1.0064_rpg_mod + equipment + craft_1.0002.gmk Посмотри его, если еще не смотрел (я и забыл что делал его, сейчас увидел - удивился).


Название: Re: Пример инвентаря
Отправлено: Nordok от Июнь 02, 2012, 19:07:38

Ошибка возникает только тогда, когда столбцов меньше чем строк!
Да, и только если пытаться запполнить его целиком


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 02, 2012, 19:19:59
Какой пример инвентаря?
Если есть возможность скинь исходник, я посмотрю.

Добавлено: Июнь 02, 2012, 19:28:06
Если это старая версия инвентаря, то там такая ошибка, вроде бы, была, но уже исправлена. (судя по логам версия старая, т.к. в новой номера строк другие).


Название: Re: Пример инвентаря
Отправлено: Nordok от Июнь 02, 2012, 22:05:21
Да, кстати возможно, что это баг старой версии. Я еще покопаюсь и отпишусь


Название: Re: Пример инвентаря
Отправлено: Horizon от Июнь 05, 2012, 11:42:13
Выложите пожалуйста этот же пример, но только чтобы при перетаскивании из obj_inv правой кнопкой мыши в obj_inv_weapon , из obj_inv не удалялись предметы


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 05, 2012, 11:45:51
Чтобы они отображались в obj_inv когда одеты или чтобы именно перемещались в obj_inv_weapon а при перемещении обратно их становилось в два раза больше?

Добавлено: Июнь 05, 2012, 11:49:31
А при клике левой клавишей мыши предметы тоже должны оставаться в obj_inv или здесь оставить как было?

Добавлено: Июнь 05, 2012, 12:03:03
Сейчас времени переделывать пример нет. Но расскажу как сделать.
там есть комментарии где происходит удаление предметов из инвентаря. Нужно убрать удаление у объекта obj_inv, а у объекта obj_inv_weapon убрать перемещение в obj_inv и оставить только удаление (строку inv_txt=''; нигде не убирай). Кроме этого нужно будет сделать чтобы предметы которые сразу перемещаются в obj_inv_weapon перемещались и в obj_inv (когда игрок их подбирает). Для этого убери строки 65 и 87 у объекта obj_item_base в событии столкновения с игроком (там написано exit).


Название: Re: Пример инвентаря
Отправлено: Horizon от Июнь 05, 2012, 12:04:09
Они должны быть как в магия-баре в MMORPG, там есть отдельный инвентарь для навыков(№1), и иневентарь(№2) это 10 слотов на экране для навыков где каждый слот еще соответствует клавише с цифрой, вот перетаскиваем из инвентаря(№1) в инвентарь(№2), но навык не пропадает в инвентаре(№1)

Добавлено: Июнь 05, 2012, 12:07:24
Чтобы они отображались в obj_inv когда одеты или чтобы именно перемещались в obj_inv_weapon а при перемещении обратно их становилось в два раза больше?

Добавлено: Июнь 05, 2012, 11:49:31
А при клике левой клавишей мыши предметы тоже должны оставаться в obj_inv или здесь оставить как было?

Добавлено: Июнь 05, 2012, 12:03:03
Сейчас времени переделывать пример нет. Но расскажу как сделать.
там есть комментарии где происходит удаление предметов из инвентаря. Нужно убрать удаление у объекта obj_inv, а у объекта obj_inv_weapon убрать перемещение в obj_inv и оставить только удаление (строку inv_txt=''; нигде не убирай). Кроме этого нужно будет сделать чтобы предметы которые сразу перемещаются в obj_inv_weapon перемещались и в obj_inv (когда игрок их подбирает). Для этого убери строки 65 и 87 у объекта obj_item_base в событии столкновения с игроком (там написано exit).


пытался так делать, в итоге объекты из инвентаря удалялись а вот на курсоре мыши их было бесконечно, первый раз я перемещал объект, отпускал клавишу мыши, и около курсора появлялся этот бесконечный предмет который можно было еще поместить в любые яйчейки и он не пропадал совсем


Название: Re: Пример инвентаря
Отправлено: Лер да Рим от Июнь 05, 2012, 12:08:13
Сразу бы сказал "книга умений")


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 05, 2012, 12:17:36
Возможно это из-за того что ты убирал строку inv_txt='' - если она не равна '', то предмет считается перетаскиваемым, отсюда такая проблема.

Как вариант могу предложить пример Пример_инвентаря_Dva_Kota_Bodimir_Alexis_1.0064_rpg_mod + equipment+1str.gmk (в первом посте прикреплен) - там верхняя строка инвентаря всегда отображается, можно нужные предметы перемещать в верхние ячейки. Этим ячейкам можно назначить горячие клавиши (в примере этого нет, но в первом посте написано как это сделать).


Название: Re: Пример инвентаря
Отправлено: Horizon от Июнь 05, 2012, 12:22:46
Возможно это из-за того что ты убирал строку inv_txt='' - если она не равна '', то предмет считается перетаскиваемым, отсюда такая проблема.

Как вариант могу предложить пример Пример_инвентаря_Dva_Kota_Bodimir_Alexis_1.0064_rpg_mod + equipment+1str.gmk (в первом посте прикреплен) - там верхняя строка инвентаря всегда отображается, можно нужные предметы перемещать в верхние ячейки. Этим ячейкам можно назначить горячие клавиши (в примере этого нет, но в первом посте написано как это сделать).

Хорошо, спасибо попробую

Добавлено: Июнь 05, 2012, 12:34:37
Верхняя строчка в примере не отображается если его скрыть


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 05, 2012, 12:45:51
Признаю свою ошибку: при нажатии на I инвентарь скрывается полностью, при нажатии на кнопку "убрать/показать инвентарь" (кнопка в верхнем левом углу инвентаря) все работает как нужно. Нужно у объекта obj_inv_open скопировать код из события нажатия левой клавиши мыши в событие нажатия клавиши I (или поменять их местами, если нужно чтобы можно было скрывать инвентарь и полностью и не полностью).


Название: Re: Пример инвентаря
Отправлено: Horizon от Июнь 05, 2012, 12:50:30
Отлично, так и сделаю.
P.S. Отличный инвентарь, уже переделал его в инвентарь под петов, сегодня еще в инвентарь для магии, просто спасает мою будущую игру

Добавлено: Июнь 05, 2012, 16:58:41
Сейчас времени переделывать пример нет. Но расскажу как сделать.
там есть комментарии где происходит удаление предметов из инвентаря. Нужно убрать удаление у объекта obj_inv, а у объекта obj_inv_weapon убрать перемещение в obj_inv и оставить только удаление (строку inv_txt=''; нигде не убирай). Кроме этого нужно будет сделать чтобы предметы которые сразу перемещаются в obj_inv_weapon перемещались и в obj_inv (когда игрок их подбирает). Для этого убери строки 65 и 87 у объекта obj_item_base в событии столкновения с игроком (там написано exit).

Это снова я, по поводу удаления, еще раз попытался реализовать ваш совет, оказалось что предметы не удалялись но их спрайт удалялся, ну или заменялся на спрайт пустого слота. Не дадите совет как это исправить?
Вот какой получился пример, я там не удалял код а закомментировал его


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 05, 2012, 17:19:58
Два варианта решения:

1) В событии "ПКМ нажата" закомментировать строку 44
Код:
txt[klick_x,klick_y]='empty';
В этом случае предмет будет все время отображаться в инвентаре во время перетаскивания (любой предмет). Либо, если нужно, можно проверять тип предмета и для тех, которые перемещаются во второй инвентарь, не убирать эту строку, а для остальных нет. Но лучше вариант, который ниже:

2) в событии "ПКМ отпущена" там где ты закомментировал строки
Код:
txt[inv_item_x,inv_item_y]='';
замени их на
Код:
txt[inv_item_x,inv_item_y]=inv_txt;

Т.е. после перемещения предмета во второй инвентарь будет обратно записано его название и спрайт будет отображаться (спрайт не отображается если txt[inv_item_x,inv_item_y]= "" или "empty". В этом случае во время перетаскивания спрайт не будет отображаться в инвентаре.


Название: Re: Пример инвентаря
Отправлено: Autodesk от Июнь 14, 2012, 16:03:57
Dva_Kota, если возможно, одним вопросом более: как создать предмет, который не исчезает из инвентаря при нажатии на него ЛКМ; кроме того, его нельзя выбросить, однако возможно переместить в инвентарь обмена.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 14, 2012, 16:14:38
Сделать это можно, но сейчас не готов ответить как именно, т.к. нужно смотреть пример, а времени на это нет.

Предположительно так:
Там где код выбрасывания (глобальное событие отпускания клавиши мыши) есть проверка где именно находится указатель мыши - если он не над инвентарем и не над вторым инвентарем (там есть комментарии) - проверяем какой предмет мы перетаскивали (эту проверку нужно добавить) - если это тот предмет который нельзя выбросить - возвращаем его туда, откуда взяли, затем exit (код возврата предмета на место есть где-то в примере с комментарием, там всего пару строк).


Название: Re: Пример инвентаря
Отправлено: Reylor от Июнь 16, 2012, 12:55:23
Предметы выбрасываются и появляются чуть ниже игрока. Это можно настроить. Можно сделать, например, чтобы
предметы выбрасывались туда, где была отпущена правая копка мыши.*/

Знаю это мега нубский вопрос, :facepalm_2: но я просто не понял, как это можно реализовать, :facepalm: :errm: подскажите пожалуста.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 16, 2012, 13:05:23
Там где код создания объекта (в событии отпускания клавиши мыши) - instance_create() нужно указать координаты мыши вместо х у


Название: Re: Пример инвентаря
Отправлено: Reylor от Июнь 16, 2012, 20:56:29
Спасибо большое, А я то пытался в Right pressed изменить вот я  sm_fool )
За помощь конечно же + :xD:


Название: Re: Пример инвентаря
Отправлено: Limekys от Июнь 18, 2012, 00:48:04
Dva_Kota, слушай а возможно ли сделать так чтобы из одного инвентаря мышкой перенести предмет в другой инвентарь? Если да то скажи плиз!!


Название: Re: Пример инвентаря
Отправлено: Nordok от Июнь 18, 2012, 10:44:29
Так это уже реализовано. Хватай вещи правой клавишей мыши и тащи туда куда надо - на пол или в другой инвентарь (или экипировки или в сундук)


Название: Re: Пример инвентаря
Отправлено: Limekys от Июнь 19, 2012, 03:17:01
А почему у меня так не работает? старая версия чтоли?


Название: Re: Пример инвентаря
Отправлено: Nordok от Июнь 19, 2012, 10:02:25
а ты какую скачал?


Название: Re: Пример инвентаря
Отправлено: Limekys от Июнь 20, 2012, 18:26:45
У меня 1.0064

Добавлено: Июнь 20, 2012, 18:28:02
А как сделать чтобы у предмета была полоса жизней, а когда закончится то он исчезнет?


Название: Re: Пример инвентаря
Отправлено: Nordok от Июнь 20, 2012, 18:37:44
щас 73 актуальная, поищи, там много багов поправлено.

Для этого предмету нужно добавить параметр при помощи переменной (например прочность) и уменьшать ее по мере использования. Это же просто


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 20, 2012, 19:32:48
73 уже давно не актуальная (там была ошибка с оружием). Актуальная 74.
Скоро (наверное сегодня) будет новая версия. Глобальных изменений не будет. Будет закрытие инвентаря на пробел и мелкие изменения.
Может есть какие-то пожелания? Если что-то небольшое могу сразу сделать.


Добавлено: Июнь 20, 2012, 19:33:27
В версии 1.0064 перетаскивание мышкой есть.

Добавлено: Июнь 20, 2012, 21:24:04
Новые примеры инвентаря (http://forum.hellroom.ru/index.php?topic=10742.msg134448#msg134448)


Название: Re: Пример инвентаря
Отправлено: Nordok от Июнь 20, 2012, 21:12:02
Блин )) не успел с пожеланиями. Хотя я их на предыдущей странице очень подробно описал )

Добавлено: Июнь 20, 2012, 21:21:42
Dva_kota реализуй плиз ОЧЕНЬ важную функцию подбирания с полавыбрасывания на пол нескольких объектов сразу, но не путем создания большого количества предметов в одних координатах, а путем задания переменной количества. Мы с тобой уже это обсуждали.

И еще, перенеси данные о поднимаемых предметах в двумерный массив внутри родительского объекта. Чтобы объект на полу имел только 1 параметр: количество

Добавлено: Июнь 20, 2012, 21:28:43
И еще (это скорее относится к оптимизации). Если инвентарь был открыт до того как мы подошли к сундуку, то сделай, чтобы он автоматически открывался снова, когда мы отходим от сундука. Если небыл открыт, то чтобы не открывался. (Короче запоминание состояния инвентаря и перенос его через инвентарь обмена)


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 20, 2012, 21:33:17
Про эти пожелания я помню. Я имел ввиду какие-то небольшие изменения связанные с сундуками (т.к. на что-то большое сейчас времени нет, а сундуки нужно было довести до более или менее нормального вида).
Про эти предложения я помню, просто времени на них пока нет. Объединение предметов постараюсь в ближайшее время реализовать.

А занесение предметов в массив - думаю не очень актуально для этого примера, т.к. каждый сам для себя будет создавать нужные ему предметы, и не факт что те которые в примере будут использоваться. Так что это каждый для себя сможет сам сделать (но когда будет много свободного времени постараюсь сделать и это).

Добавлено: Июнь 20, 2012, 21:36:56
И еще (это скорее относится к оптимизации). Если инвентарь был открыт до того как мы подошли к сундуку, то сделай, чтобы он автоматически открывался снова, когда мы отходим от сундука. Если небыл открыт, то чтобы не открывался. (Короче запоминание состояния инвентаря и перенос его через инвентарь обмена)

Хорошее замечание. Это обязательно сделаю (может даже сегодня).

Добавлено: Июнь 20, 2012, 22:22:30
Добавил запоминание состояния инвентаря (Инвентарь 1.0078 (http://rghost.ru/38780444))


Название: Re: Пример инвентаря
Отправлено: Nordok от Июнь 20, 2012, 22:41:07
Спасибо, буду ждать и все остальное sm_hi3

Да и еще. Реализовать двуручное оружие будет сложно?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 20, 2012, 22:59:53
Пока не представляю как это сделать.

Добавлено: Июнь 20, 2012, 23:03:08
Объединение предметов почти доделал. Но там есть некоторые оганичения (т.к. я не хочу переписывать весь код перемещения предметов в инвентарь): все предметы, которые можно перемещать в инвентарь экипировки можно складывать только по одному в ячейку (соответственно и выкидывать их можно только по одному. Это ведь не очень плохо?


Название: Re: Пример инвентаря
Отправлено: Nordok от Июнь 21, 2012, 00:02:36
Это отлично. По идее во всех играх аммуниция и экипировка занимает строго свои ячейки и не комбинируется с себе подобными. Т.е. только лечилки, патроны и тому подобные элементы объединяются и выбрасываютсяподнимаются группами


Добавлено: Июнь 21, 2012, 19:08:31

Что касается двуручного оружия:
1. Проверяем, пусты ли обе руки
2. Если нет, проверяем, надето одноручное или двуручное и опустошаем (ту или другую или обе)
3. Одеваем в обе руки одинаковое оружие (классически правая ячейка в окне инвентаря экипировки обычная цветная, а вторая такая-же, только черно-белая), отрисовываем один спрайт большого оружия.
4. Запоминаем, что в руках у нас двуручное оружие

Снятие или переодевание:
5. Проверяем, надето ли двуручное, и если:
да  - 6. Опустошаем обе руки, удаляем спрайт нарисованного оружия  и 7. если переодевание - Надеваем оружие обычным способом
нет - 6.1. Действуем как обычно

Это дает возможность одеть на перса такие виды оружия как копье, алебарда, двуручный меч или топор, лук с колчаном стрел. Я не представляю себе medieval RPG без этого элемента...


Название: Re: Пример инвентаря
Отправлено: Limekys от Июнь 21, 2012, 21:07:58
Для этого предмету нужно добавить параметр при помощи переменной (например прочность) и уменьшать ее по мере использования. Это же просто
А как сделать чтобы полоса показывалась? Можно поподробней.


Название: Re: Пример инвентаря
Отправлено: Nordok от Июнь 21, 2012, 21:58:32
Для этого есть даже стандартная функция draw_healthbar поищи в справке, там все предельно просто описано


Название: Re: Пример инвентаря
Отправлено: Limekys от Июнь 21, 2012, 23:57:54
Да об этом я всё знаю блин!!! Куда именно код вставить надо чтобы под предметом горел хелсбар?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 22, 2012, 00:29:47
В draw, там где рисуются спрайты предметов.


Название: Re: Пример инвентаря
Отправлено: Reylor от Июнь 29, 2012, 23:15:19
А как закидывать в сундуки предметы а то я что-то в коде лазил но не нашёл (а может плохо искал).
И ещё когда нажимаешь right mouse выкидываеются все предметы такого типа как сделать что бы выкидывался именно 1?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 29, 2012, 23:51:41
Код добавления предметов в сундуки находится в событии Create игрока. Там создается сундук которого изначально нет в комнате и в него добавляются предметы.

В те сундуки, которые уже есть в комнате, можно добавить предметы аналогично, только вместо instance_create(300,200,obj_box) нужно ставить id сундука, в который добавляете предметы (id можно посмотреть в нижней части редактора комнат если навести курсор на объект).

И еще один очень важный момент: первые две строки задают размеры сундука. Если размеры больше чем те, которые указаны в событии создания объекта obj_box, то перед добавлением предметов в этот сундук необходимо заполнить все ячейки стартовыми значениями, как в событии создания obj_box:



Для того чтобы выбрасывать предметы по одному нужно кликать по ним ПКМ удерживая клавишу shift

Добавлено: Июнь 30, 2012, 10:38:40
Был недавно вопрос про то, как сделать не выбрасываемый предмет. Конкретного кода я так и не дал. Вот два варианта (первый способ для версии 1.0064 и выше, второй - для любой версии):

1. Добавить новый тип предметов (например 8), которые нельзя выбрасывать. В событии Глобальное отпускание ПКМ, после последнего else (после строки 182) добавить проверку типа предмета, если тип который нельзя выбрасывать - возвращаем на место:
Код:
if (inv_item_type == 8)
    {
    txt[inv_item_x,inv_item_y]=inv_txt;//записываем в массив имя

    inv_txt='';//ничего не перетаскиваем
    exit;//завершаем выполнение кода (чтобы предмет не удалился)
    }

2. Все то же самое, только проверку делать не по типу предмета, а по имени предмета, имени объекта или спрайту предмета (тут кому как нравится). Можно перечислить несколько предметов которые нельзя выбрасывать, например:
Код:
if (inv_name_obj == obj_potion_mana or inv_name_obj == obj_potion_health)
    {
    txt[inv_item_x,inv_item_y]=inv_txt;//записываем в массив имя

    inv_txt='';//ничего не перетаскиваем
    exit;//завершаем выполнение кода (чтобы предмет не удалился)
    }

Кроме этого не забываем про то что предметы еще можно выбрасывать при нажатии ПКМ+Shift. По этому в событии Нажатие Правой Клавиши Мыши добавим такую же проверку, только наоборот, после проверки нажатия клавиши Shift и проверки наличия предмета в слоте (после 19 строки), должно получиться так:

для способа №1
Код:
if (keyboard_check(vk_shift))//Если зажата клавиша Shift
        {
        if (txt[klick_x,klick_y]!='')//елси в слоте, над которым находится курсор, что-то есть
            {
            if (item_type[klick_x,klick_y] != 8)
                {

для способа №2
Код:
if (keyboard_check(vk_shift))//Если зажата клавиша Shift
        {
        if (txt[klick_x,klick_y]!='')//елси в слоте, над которым находится курсор, что-то есть
            {
            if (name_obj[klick_x,klick_y] != obj_potion_mana and name_obj[klick_x,klick_y] != obj_potion_health)
                {

p.s.: добавлю эту информацию на первую страницу.


Название: Re: Пример инвентаря
Отправлено: Reylor от Июнь 30, 2012, 15:08:21
О, спасибо. sm_good  В create как раз и не смотрел :facepalm_2:
Лови + sm_respekt


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июнь 30, 2012, 16:04:16
Что-то я совсем забыл про то что код добавления предметов был уже давно написан. Сидел вчера, придумывал что-то :facepalm_2: . И даже скрипт для удобного добавления написан. Здесь написано как пользоваться:
http://forum.hellroom.ru/index.php?topic=10742.msg134476#msg134476
На Enter предметы добавляются кодом, на 1 - скриптом. Скриптом удобнее.


Название: Re: Пример инвентаря
Отправлено: Limekys от Июль 11, 2012, 13:49:41
А как добавить окошко выбора предмета как в Minecraft чтобы колёсиком крутить и этот предмет выбрался? А то некак в голову не приходит идея.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июль 11, 2012, 22:46:20
создать переменную равную 0. При прокрутке колесика мышки увеличивать или уменьшать ее. Эта переменная будет обозначать номер слота в инвентаре. Обращайся к этому слоту через эту переменную - узнаешь какой в этом слоте предмет. (переменную нужно ставить вместо индекса массива).


Название: Re: Пример инвентаря
Отправлено: Limekys от Июль 12, 2012, 12:57:53
Для меня немного сложно, чёнить попробую сделать.


Название: Re: Пример инвентаря
Отправлено: Reylor от Июль 22, 2012, 19:53:03
Вот в примере когда на деваешь на себяшлем (кожанный) на ГГ надевается именно spr_shlem_01_player а как сделать что бы он поворачивался в сторону движения ГГ.?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июль 24, 2012, 11:54:11
Сделай в этом спрайте 3 кадра. Кард 0 для инвентаря, кадра 1 для отображении на игроке, когда он смотрит влево, кадр 2 для отображении на игроке, когда он смотрит вправо. Когда предмет на игроке - рисуй спрайт с нужным номером кадра в зависимости от направления.


Название: Re: Пример инвентаря
Отправлено: Reylor от Июль 28, 2012, 18:24:33
А как это реализовать? Просто я нуб ещё так что не очень что то получается.


Название: Re: Пример инвентаря
Отправлено: Sanek94 от Июль 28, 2012, 18:33:29
А как это реализовать? Просто я нуб ещё так что не очень что то получается.
Код: (Draw)
if sprite_index=спрайт направления героя влево {draw_sprite(спрайт,нужный кадр,x,y)}
if sprite_index=спрайт направления героя вправо {draw_sprite(спрайт,нужный кадр,x,y)}
Как то так. Если не получается, лучше пока про инвентарь забудь, и изучай справку.


Название: Re: Пример инвентаря
Отправлено: Reylor от Июль 28, 2012, 22:37:18
Этим кодом я не чего не получу :fyyy:. Ты хоть сам смотрел пример инвентаря? sm_??? Этот немного нубский код ни чего не меняет (даже наоборот мешает :shooock:) Так что справку не мне читать надо. :xD:


Название: Re: Пример инвентаря
Отправлено: Sanek94 от Июль 28, 2012, 22:47:30
Этим кодом я не чего не получу :fyyy:. Ты хоть сам смотрел пример инвентаря? sm_??? Этот немного нубский код ни чего не меняет (даже наоборот мешает :shooock:) Так что справку не мне читать надо. :xD:
Код работает. Код я написал по ответу Dva_Kota. Справку читаю постоянно, не вредит. Инвентарь посмотрел, все там понятно.


Название: Re: Пример инвентаря
Отправлено: Reylor от Июль 29, 2012, 00:36:44

При этом коде,спрайт шлема с самого начала игры тупо прилипнет к ГГ и всё, а мне нужно что бы именно spr_armor_01_player менялся в зависимости от направления.


Название: Re: Пример инвентаря
Отправлено: Sanek94 от Июль 29, 2012, 09:32:21
При этом коде,спрайт шлема с самого начала игры тупо прилипнет к ГГ и всё, а мне нужно что бы именно spr_armor_01_player менялся в зависимости от направления.
А что мешает тебе, вместо проверки спрайта, проверять направление? Я написал тебе примерный код, самый простой.
Вот другой вариант. Cоздай переменную у героя, и меняй ее в зависимости от нажатой клавиши (Влево- dir=0, Вправо- dir=1).
А в рисовании вместо image_index(кадр) подставляешь эту переменную. draw_sprite(s_helmet,dir,x,y);




Название: Re: Пример инвентаря
Отправлено: Reylor от Июль 29, 2012, 11:12:38
Зачем создавать переменные, если всё уже давно прописанно. Вот здесь я хочу переписать:
act_on = '
obj_hero.armor += 2;
obj_hero.s_helmet = spr_armor_01_player';
act_off = '
obj_hero.armor -= 2;
obj_hero.s_helmet = spr_no_spr;
';


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Июль 30, 2012, 17:41:18
Sanek94 правильный код написал, нечего на него наезжать. Его, конечно, можно немного усовершенствовать, но в целом он работает как нужно.
В Draw у игрока есть такой код:
Код:
draw_sprite(sprite_index,-1,x,y);//Рисуем игрока
draw_sprite(s_armor,-1,x,y);//Рисуем броню
draw_sprite(s_helmet,-1,x,y);//Рисуем шлем

Замени третью строку на то что предлагает Sanek94. То что в условии if зависит от того как ты определяешь в какую сторону повернут ГГ, например если это смена спрайтов, то код именно как у него, а если отражением спрайта то
Код:
if (image_xscale)
{
draw_sprite(s_armor,нужный номер кадра,x,y);//Рисуем броню
}
else
{
draw_sprite(s_armor,нужный номер кадра,x,y);//Рисуем броню
}


Добавлено: Июль 30, 2012, 17:53:17
Может быть, я не совсем правильно объяснил. Я забыл что в примере для отображения на игроке используется другой спрайт, не тот который отображается в инвентаре. Но тут все то же самое, нужно сделать два кадра у спрайта который отображается на игроке: один когда игрок смотрит вправо, второй - когда игрок смотрит влево. В остальном все то же самое.


Название: Re: Пример инвентаря
Отправлено: dtestd от Август 08, 2012, 02:11:11
А как сделать перетаскивание инвентаря за Title, а не за ячейки? Ведь вещи мешают перетаскиванию.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Август 09, 2012, 12:51:18
Добавить в событие нажатия правой клавиши мыши, в самое начало, еще одну проверку "Если курсор находится в верхней части окна инвентаря", примерно так:
Код:
if (mouse_y < y+20 and mouse_y > y and mouse_x < x+200 and mouse_x > x)
    {
    if (!position_meeting(mouse_x,mouse_y,obj_inv_obm_2))
        {
        inv_move = true;
        m_x = mouse_x - x;
        m_y = mouse_y - y;
        }
    }

Это код для твоей картинки, т.е. перетаскиваем за заголовок, заголовок на всю ширину окна инвентаря , заголовок начинается с верхней части инвентаря и высота его 20, ширина 200 (числа взыл просто так, 200 должно быть равно ширине окна инвентаря).
Но, как я понимаю, заголовок не является частью инвентаря (у меня в примере заголовка нет), а просто рисуется. Тогда события нажатия клавиши не сработает и нежно будет заменить его на глобальное событие нажатия клавиши мыши.


Название: Re: Пример инвентаря
Отправлено: dtestd от Август 11, 2012, 12:49:55
Не получилось. Почему-то перетаскивание происходит в этом районе (см. влож.). А можно ли сделать перетаскивание по спрайту spr_inv_back ?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Август 13, 2012, 17:13:58
Но, как я понимаю, заголовок не является частью инвентаря (у меня в примере заголовка нет), а просто рисуется. Тогда события нажатия клавиши не сработает и нежно будет заменить его на глобальное событие нажатия клавиши мыши.

Код:
if (mouse_y < y+20 and mouse_y > y and mouse_x < x+200 and mouse_x > x)
заменить на
Код:
if (mouse_y < y and mouse_y > y-20 and mouse_x < x+200 and mouse_x > x)

(Числа сам подбери, можно нарисовать еще один спрайт - спрайт заголовка, потом рисовать его отдельно)


Название: Re: Пример инвентаря
Отправлено: dtestd от Август 14, 2012, 00:07:31
Dva_Kota, спасибо тебе!


Название: Re: Пример инвентаря
Отправлено: Reylor от Август 17, 2012, 19:23:56
Dva_Kota но если использовать твой код то на ГГ с самого начала игры будет надет этот спрайт!


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Август 17, 2012, 22:02:51
Reylor, ты пример смотрел? В сообщении #197 написан код, который сейчас в Draw. s_armor это не спрайт, а переменная, в которую записывается индекес спрайта брони. Если брони на игроке нет, то в эту переменную записывается индекс пустого (прозрачного) спрайта и броня не отображается. Аналогично и переменная s_helmet.


Название: Re: Пример инвентаря
Отправлено: Reylor от Август 19, 2012, 17:45:18
Ну вот сделал с твоим кодом, что не так? (s_armor это не спрайт - знаю, просто не так выразился)


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Август 20, 2012, 09:29:44
Вообще-то я думал что если тебе нужно чтобы спрайт одежды показывался по-разному в зависимости от того в какую сторону повернут персонаж, то ты и поворот персонажа уже реализовал, а у тебя персонаж не поворачивается, поэтому и броня отображает только первый кадр.

В Step у игрока замени код на это:

Код:
if keyboard_check (ord('A')) && place_free (x-hero_speed,y)
{
x-= hero_speed;
image_xscale = -1;
}
if keyboard_check (ord('D')) && place_free (x+hero_speed,y)
{
x+=hero_speed
image_xscale = 1;
}
if keyboard_check (ord('W')) && place_free (x,y-hero_speed)
y-= hero_speed;
if keyboard_check (ord('S')) && place_free (x,y+hero_speed)
y+= hero_speed;

Если тебе нужно сделать поворот игрока не отражением спрайта, а заменой, то в событии рисования, там где выбирается какой кадр брони рисовать, нужно делать проверку не по отражению спрайта игрока, а по спрайту игрока.


Название: Re: Пример инвентаря
Отправлено: Reylor от Август 20, 2012, 15:53:09
О, благодарю.  :sm_plus:


Название: Re: Пример инвентаря
Отправлено: wargamen от Август 22, 2012, 17:12:43
мм, у меня возник вопросик, как можно в этом инвентаре реализовать две вещи:
1.Чтобы при нажатии в одном инвентаре, в другом находился какойто итем и уничтожалось какое то количество из них
2.Вопрос посложнее, вот допустим у меня есть обьект - итем, когда он создается у него случайно генерируется какойто параметр, как можно это сделать только при первом создании, тоесть например если выкинешь из инвентаря и снова подберёш - у него были такие же параметры


Название: Re: Пример инвентаря
Отправлено: Sanek94 от Август 22, 2012, 18:41:54
мм, у меня возник вопросик, как можно в этом инвентаре реализовать две вещи:
1.Чтобы при нажатии в одном инвентаре, в другом находился какойто итем и уничтожалось какое то количество из них
2.Вопрос посложнее, вот допустим у меня есть обьект - итем, когда он создается у него случайно генерируется какойто параметр, как можно это сделать только при первом создании, тоесть например если выкинешь из инвентаря и снова подберёш - у него были такие же параметры
1. Не понял вопроса.
2. Нужно записывать эти параметры в ячейку инвентаря. А в событии выкидывания делаем следующее.
Код:
predmet=instance_create(x,y,object) // создаем предмет, и записываем его id в переменную predmet
А дальше присваиваешь к этой переменной параметры, которые ты записал в ячейку инвентаря.


Название: Re: Пример инвентаря
Отправлено: wargamen от Август 22, 2012, 19:08:36
мм, точно(насчет второго)
Ну, а первый вопрос переформулирую: Чтобы нажал на одну ячейку инвентаря obj_inv1, и в obj_inv2 убирались предметы


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Август 23, 2012, 10:29:30
1. В первом посте, ниже спойлеров, есть ссылка как удалять и использовать предметы при нажатии клавиш на клавиатуре. Этот же код можно использовать при нажатии на предметах в инвентаре.


Название: Re: Пример инвентаря
Отправлено: ETUN4 от Август 25, 2012, 15:16:33
Dva_Kota, у меня есть идея добавить к каждой вещи свой вес, и что бы у ГГ был лимит веса.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Август 26, 2012, 20:37:19
Это легко осуществить: У каждого предмета переменная "вес". У инвентаря переменная "вес всех предметов". Перед перемещением предмета в инвентарь сравнивать вес всех предметов + вес этого предмета, и если сумма меньше или равна допустимому весу - перемещать предмет в инвентарь и увеличивать переменную "вес всех предметов", если нет - ничего не делать. При использовании/выбрасывании предмета уменьшать вес. Каждый, кому это нужно, может легко добавить это в свой инвентарь.


Название: Re: Пример инвентаря
Отправлено: Reylor от Август 27, 2012, 18:34:19
А как отобразить ботинки на игроке?
И ещё как сделать урон нашему гг с защитой. Ну к примеру ГГ сталкивается с объектом Obj_ship если защиты у него 0 то урон будет 1. Ну а если защиты больше то урона меньше.
И последнее как в инвентаре вместо второго меча/щита повесить ещё один амулет?


Название: Re: Пример инвентаря
Отправлено: AndrewVideoGames от Август 27, 2012, 19:19:01
 2) Надо создать переменную, отвечающую за то, есть броня или её нет. Например glabal.br(поставь её в Create какого нибудь объекта). Далее в событии столкновения с obj_ship:
Код:
if global.br=false
{
hp-=1
}
else
{
hp-=0.5
}


Название: Re: Пример инвентаря
Отправлено: Reylor от Август 28, 2012, 21:35:11
А как сделать без переменной, ну вот как с шлемом например?


Название: Re: Пример инвентаря
Отправлено: AndrewVideoGames от Август 28, 2012, 21:41:10
 Ну можно попробывать так:
Код:
if instance_exists(имя_объекта_брони)
{
hp-=1
}
else
{
hp-=0.5
}
Это будет работать, при условии, что у тебя нет объекта брони, если ты её не надел.


Название: Re: Пример инвентаря
Отправлено: Repkin от Август 29, 2012, 14:57:12
Решил немножко сократить create для obj_inv, ну чтоб новички как я -  не рыскали в этом огромном "мире кода" , а сразу всё так на глазу.
Не чего не удалял, всё на месте. Внес всё под 1 цикл.Если кто-то уже так сделал, то извините...


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Август 29, 2012, 21:05:07
Reylor:
1. Так же как броню, аналогично.

2. Это делается именно через переменную. У игрока должна быть переменная "защита". У предметов есть код, который выполняется при одевании/снимании предмета. В этом коде у некоторых предметов написано изменение переменной "Защита". Когда одеваем предмет переменная увеличивается, когда снимаем - уменьшается (так же со всеми остальными переменными, которые меняются если надеть предмет). Вот в зависимости от переменной "защита" (которая у игрока, не помню как именно она называется). В зависимости от этой переменной изменяй наносимый урон (на форуме есть темы про это, связи с инвентарем тут уже нет). Один из вариантов - чем больше защита - тем меньше урон.
Например защита может меняться от 0 (нет защиты) до 1 (100% зацита). Тогда урон можно рассчитывать так:
Код:
hp -= урон * (1 - защита);

3. Если не ошибаюсь, в инвентаре экипировки, в событии Create описаны типы предметов. Каждому слоту присвоен свой тип. Создай еще один слот с таким же типом как у ячейки с амулетом. Вообще можно в инвентарь экипировки добавить сколько угодно слотов, сколько угодно типов слотов (для разных типов предметов) и расположить их как угодно (при большом желании можно и не в виде квадрата расположить).

P.s. ГМ под рукой нет, пример давно не смотрел, по этому пишу по памяти.

Repkin, да  так лучше. Но это было в самой старой версии инвентаря. В новых все так же как ты написал.


Название: Re: Пример инвентаря
Отправлено: Reylor от Август 31, 2012, 20:03:49
Вот, я исправил, но эффекта ноль. Почему?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Сентябрь 10, 2012, 12:05:31
Возможно уже не актуально, но раньше не было времени ответить.

Нужно еще в событиях перемещения предметов подправить строки с 6 по аналогии со строками с 7 (амулеты сделать так же как кольца)

Объект obj_item_base, событие столкновения с игроком:
Где выбирается зависимость куда переместить предмет от типа предмета, вариант 6 изменить вот так:
Код:
...
        case 6: n_x_1 = 2;
                n_y_1 = 0;
                n_x_2 = 0;
                n_y_2 = 0;
                break;
...

а в варианте 5 вообще убрать (чтобы перчатки туда нельзя было переместить).

Здесь указаны координаты первого и второго слотов для амулета.

Если хочешь чтобы амулет был в другой ячейки - нужно ставить другие координаты.

Теперь если амулет подобрать он автоматически будет перемещаться в свободную ячейку. Но нужно добавить еще перемещение амулетов при клике по ним в основном инвентаре. Для этого нужно в объекте obj_inv в событии нажатия ЛКМ сделать то же самое.


Название: Re: Пример инвентаря
Отправлено: ALT от Сентябрь 11, 2012, 11:26:33
Кстати вопрос один интересный мучает. Пропадают спрайты предметов в инвентаре когда переходишь из комнаты в комнату. Сам obj_inv со свойством persistent у меня. В той комнате где ты предмет взял, спрайты показываются как надо, но если из комнаты выйдешь, то в окне инвентаря ничего нету. Вернешься обратно -  все на месте. Предметы по клику в слоте в обоих случаях используются без проблем, но вот спрайты их не отображаются, так же как и описание предмета

Добавлено: Сентябрь 11, 2012, 12:14:04
Хотя разобрался уже


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Сентябрь 11, 2012, 12:59:18
Могу лишь предположить что во второй комнате тоже есть инвентарь, он рисуется поверх первого, из-за этого не видно что находится в ячейках первого.

Напиши в чем проблема была.


Название: Re: Пример инвентаря
Отправлено: ALT от Сентябрь 11, 2012, 19:08:31
Ну да. Так и есть. Сразу не заметил, как во второй комнате случайно инвентарь создал.

Добавлено: Сентябрь 19, 2012, 14:25:00
Извиняюсь за тупой вопрос, а как содержимое инветаря в текстовый файл сохранить?
Попоробовал вот такой вот код для сохранения
Код:
for (slot_x=0; slot_x<obj_inv.inv_width_x; slot_x+=1)
    {
    for (slot_y=0; slot_y<obj_inv.inv_height_y; slot_y+=1)
        {
        file_text_write_string(file,obj_inv.txt[slot_x,slot_y]);
        file_text_writeln(file);
        file_text_write_real(file,obj_inv.item[slot_x,slot_y]);
        file_text_writeln(file);
        file_text_write_real(file,obj_inv.max_number[slot_x,slot_y]);
        file_text_writeln(file);
        file_text_write_string(file,sprite_get_name(obj_inv.spr[slot_x,slot_y]));
        file_text_writeln(file);
        file_text_write_string(file,obj_inv.name_obj[slot_x,slot_y]);
        file_text_writeln(file);
        file_text_write_string(file,obj_inv.act_on[slot_x,slot_y]);
        file_text_writeln(file);
        file_text_write_string(file,obj_inv.act_off[slot_x,slot_y]);
        file_text_writeln(file);
        file_text_write_string(file,obj_inv.item_type[slot_x,slot_y]);
        file_text_writeln(file);
        }
    }
И вот такой для загрузки
Код:
for (slot_x=0; slot_x<obj_inv.inv_width_x; slot_x+=1)
    {
    for (slot_y=0; slot_y<obj_inv.inv_height_y; slot_y+=1)
        {
        obj_inv.txt[slot_x,slot_y]=file_text_read_string(file);
        file_text_readln(file);
        obj_inv.item[slot_x,slot_y]=file_text_read_real(file);
        file_text_readln(file);
        obj_inv.max_number[slot_x,slot_y]=file_text_read_real(file);
        file_text_readln(file);
        obj_inv.spr[slot_x,slot_y]=file_text_read_string(file);
        file_text_readln(file);
        obj_inv.name_obj[slot_x,slot_y]=file_text_read_string(file);
        file_text_readln(file);
        obj_inv.act_on[slot_x,slot_y]=file_text_read_string(file);
        file_text_readln(file);
        obj_inv.act_off[slot_x,slot_y]=file_text_read_string(file);
        file_text_readln(file);
        obj_inv.item_type[slot_x,slot_y]=file_text_read_string(file);
        file_text_readln(file);
        }
    }
Команды инициализации текстового файла само-собой пропускаю. Инвентарь перед загрузкой очищаю. теперь вот закавыка. Не знаю как спрайт сохранить. И почему то при загрузке в массиве в загруженных ячейках одни нули

Добавлено: Сентябрь 19, 2012, 15:14:29
Хотя с нулями разобрался. '' при чтении из файла пропускались. В общем массив заполнялся не верно. Это исправил вроде. А вот с картинками что делать не знаю


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Сентябрь 19, 2012, 16:31:06
act_on[] и act_off[] содержат не по одной строчке, по этому загрузка будет не удачной (загружается ведь все по одной строчке).
По этому лучше было бы записывать в файл готовый код и потом выполнять его с помощью  execute_file()

С остальным попробую позже разобраться.

Добавлено: Сентябрь 19, 2012, 18:10:13
Разобрался с проблемой. На самом деле проблема не только со спрайтами, но и с объектами (аналогичная проблема). Дело в том что в массивы записываются индексы (числа) спрайтов и объектов (которые должны создаваться если выбросить предмет из инвентаря). По этому сохранять name_obj[] нужно через object_get_name (по аналогии со спрайтами). т.е. мы переводим индексы в текст. При загрузке нужно сделать обратную процедуру. Делается это через execute_string().


Но проблема с act_on[] и act_off[], в которых несколько строк, осталась. Чтобы не переделывать весь код загрузки можно код, записанный в эти переменные, записывать одной строкой, а не несколькими, как у меня в примере.


Название: Re: Пример инвентаря
Отправлено: ALT от Сентябрь 19, 2012, 18:14:02
Ну у меня проект под Андроид, в Studio разрабатываю, так что о такой роскоши как execute_string приходится забыть. В act_on у меня несколько иное написано, поэтому одной строчки вполне хватает.
А насчет сохранения картинок, одна идейка все же есть. В общем полные картинки предметов я только в магазине, да в некоторых комнатах использую, так что ассоциируем спрайты с этими объектами и забудем про них. А вот то что в инвентаре отображается можно в принципе в один спрайт все картинки записать и выводить на экран только его, сохраняя в массиве лишь номер кадра с необходимой картинкой. Точно так же и сохранять все в файл. То есть в массиве spr хранить не спрайты, а порядковые номера  картинок в спрайте ассоциированные с этими предметами.Ну в общем для obj_inv строка вывода спрайта хранящегося в инвентаре будет выглядеть так
Код:
draw_sprite(spr_mini,spr[slot_x,slot_y],x+slot_x*slot_width_x,y+slot_y*slot_height_y);//рисуем спрайт предмета, находящегося в этой ячейке инвентаря (в своих координатах)
Где spr_mini как раз и есть тот самый спрайт в котором содержатся картинки предметов. Вроде работает как надо и сохраняет и загружает


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Сентябрь 19, 2012, 18:17:53
Ну, если без execute_string то попробую что-то другое придумать. Проблему с индексом объекта все равно нужно будет решать, она аналогичная, но без ее решения нельзя будет выбрасывать предметы.


Название: Re: Пример инвентаря
Отправлено: ALT от Сентябрь 19, 2012, 18:56:46
А без execute_string обошелся примерно так. В act_on и act_off что-то типа "hp10" или "str-5" писал. Потом в событии нажатия левой клавиши в нужных местах Switch ставил и там уже описывал то что нужно. Предметов у меня не слишком много. Так что вроде нормально все обрабатывается. Падения FPS не заметно. Можно конечно было по названию предмета все парсить, но у меня есть разного типа предметы, но с одинаковыми свойствами, так что такая запись короче получается.

Добавлено: Сентябрь 19, 2012, 19:01:28
Единственное над чем голову ломаю, как действия двух кнопок мыши на одну повесить. На тач скрине правой клавиши мыши по определению нет, так что надо что-то придумывать с длинными, короткими, двойными или тапами с удержанием придумывать. Хотя пока мыслей нет никаких. Через alarm чтоли мутить или фиг его знает как


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Сентябрь 19, 2012, 19:27:16
Использование предметов делать при отпускании клавиши (если отпущена над той же ячейкой над которой нажата). этой же клавишей и перетаскивание предметов между ячейками и выбрасывание.


Название: Re: Пример инвентаря
Отправлено: ALT от Сентябрь 19, 2012, 21:04:56
 sm_good Хорошая идея. Попробую. Что-то сразу до этого не додумался


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Сентябрь 20, 2012, 10:39:30
Проблема решена.
Индексы спрайтов и объектов, хранящиеся в переменных нужно сохранять в виде чисел.
Код
Код:
file_text_write_string(file,obj_inv.name_obj[slot_x,slot_y]);
сохранит пустую строку,

Код
Код:
file_text_write_string(file,object_get_name(obj_inv.name_obj[slot_x,slot_y]));
сохранит имя ресурса-бъекта,

а вот код
Код:
file_text_write_string(file,string(obj_inv.name_obj[slot_x,slot_y]));
сохранит число, хранящееся в переменной как строку. Это именно то что нам нужно.

Теперь загрузка. При загрузке кодом
Код:
obj_inv.name_obj[slot_x,slot_y]=file_text_read_string(file);
в obj_inv.name_obj[slot_x,slot_y] будет записана строка (не зависимо от того как и что записано в файл сохранения - хоть число, хоть строка - все равно это будет строкой). Для правильной загрузки числа как числа нам нужна такой код:
Код:
obj_inv.name_obj[slot_x,slot_y]=real(file_text_read_string(file));

Со спрайтами аналогично.

Полный код сохранения и загрузки:


Название: Re: Пример инвентаря
Отправлено: ALT от Сентябрь 20, 2012, 12:41:43
Про string() real() не думал даже. Так и file_text_write_string и file_text_write_real для спрайтов и объектов в любом случае пустую строку выдавали. Надо попробовать будет твой способ. Заодно и посмотреть, что это за индексы объектов такие, которые и не цифрой и не текстом не являются

Добавлено: Сентябрь 20, 2012, 12:53:54
Еще вопрос такой из разряда придирок, но все же спрошу. Почему массив item_type текстового типа? Там же все равно только цифры хранятся. Или я немного не правильно понимаю строку в событии create obj_inv: item_type[x,y]='' ?('' - это ж пустая строка вроде, хотя все вроде работает и так, поэтому не критично, но немного понимание затрудняет)


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Сентябрь 20, 2012, 12:59:30
1. Я уже пробовал, перед написанием поста - все работает.
2. Копировал часть кода выше и не поменял тип. Нужно было 0 поставить, я просто об этом забыл. (там даже в названии переменной опечатка).


Название: Re: Пример инвентаря
Отправлено: ALT от Октябрь 08, 2012, 20:56:44
Глупый вопрос наверно, да и инвентаря скорее всего косвенно касается, но все же спрошу.
При открытом инвентаре когда клацаешь мышкой по инвентарю иногда срабатывают события кнопок мыши у объектов находящихся под окном инвентаря. Можно ли этого как-то по простому избежать?
Если непонятно спросил - поясню.
Допустим есть комната. В ней объект дверь. По клику на двери перемещаемся в другую комнату. Открываем инвентарь. Окно инвентаря полностью перекрывает дверь. В инвентаре, допустим, есть зелье. По координатам на экране его местоположение примерно совпадает с координатами двери.  При попытке кликнуть на зелье, если не попасть точно в спрайт, происходит клик по двери и перемещение в другую комнату. Как избежать этого кроме как для всех объектов в зоне риска прописывать:
if (!obj_inv.visible)
{
...
Действия по клику мыши для предмета
...
}
Объектов и комнат много, так что прописывать много придется


Название: Re: Пример инвентаря
Отправлено: AndrewVideoGames от Октябрь 08, 2012, 21:12:04
 В событии нажатия пиши так:
Код:
if !place_meeting(x,y,объект_окна_инвентаря)
{
//переход в другую комнату
}
Или диактивируй объекты при явлении инвентаря.


Название: Re: Пример инвентаря
Отправлено: ALT от Октябрь 08, 2012, 22:27:40
Вообще да. С деактивацией объектов как раз такое можно замутить. Спасибо. Что-то сразу об этом не подумал. Лови плюсик


Название: Re: Пример инвентаря
Отправлено: Reylor от Октябрь 12, 2012, 18:41:45
А как сделать квестовые предметы, где то в этойтеме уже был подобный вопрос подскажите пожалуйста.
Немного перефразирую как сделать что бы разная переменная отвечала за щит и за меч. Что бы можно было надеть только один меч и один щит.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Октябрь 12, 2012, 21:14:30
1. Про квестовый предмет вопрос уже был ты хочешь чтобы кто-то за тебя полистал тему и нашел? А вообще все ответы на важные вопросы, которые могут повторяться, я выношу в первый пост темы. Если имеется ввиду предмет, который нельзя выбросить, то ответ на него под последним спойлером.

2. Сделай разные типы слотов для щита и меча (как для всех остальных предметов), убери ту часть кода которая отвечает за выбор руки.


Название: Re: Пример инвентаря
Отправлено: ALT от Октябрь 14, 2012, 18:46:04
А как сделать квестовые предметы, где то в этойтеме уже был подобный вопрос подскажите пожалуйста.
Так в шапке темы по моему был как раз ответ на этот вопрос


Название: Re: Пример инвентаря
Отправлено: RussFakt от Ноябрь 15, 2012, 13:26:02
У меня такой вопрос. Как сделать чтобы инвентарь был во всех комнатах одинаковый? А то после перехода в другую комнату все вещи удаляются. sm_sad


Название: Re: Пример инвентаря
Отправлено: skypo от Ноябрь 15, 2012, 13:32:13
У меня такой вопрос. Как сделать чтобы инвентарь был во всех комнатах одинаковый? А то после перехода в другую комнату все вещи удаляются. sm_sad
Использовать глобальные переменные.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Ноябрь 15, 2012, 14:20:58
Проще сделать инвентарь постоянным объектом и поставить в первую комнату.


Название: Re: Пример инвентаря
Отправлено: RussFakt от Ноябрь 16, 2012, 22:05:31
Проще сделать инвентарь постоянным объектом и поставить в первую комнату.
Спасибо, помогло. sm_good


Название: Re: Пример инвентаря
Отправлено: Reylor от Ноябрь 30, 2012, 15:10:49
Dva_Kota можешь про крафт немного объяснить? Вот пару вопросов:
1.Как сделать крафт не только из 2-ух вещей.
2.Как сделать что бы некоторые предметы можно было создавать только у особенных предметов (печь, наковальня) Была идея сделать через проверку столкновения в х,у. Но потом от этого отказался.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Декабрь 01, 2012, 16:59:10
1. Есть такая и идея: При клике на предметы в инвентаре проверяешь нажатие клавиши (например ctrl). Если эта клавиша нажата - записываешь координаты ячейки и название предмета в список. При отпускании клавиши проверяешь какие предметы в списке. Если этому набору предметов соответствует како-то предмет, который можно сделать из этих предметов - создаем его, после чего удаляем из инвентаря предметы по списку, затем очищаем список. Если из выбранных предметов создать ничего нельзя - просто очищаем список. Если из выбранных предметов можно создать несколько разных предметов - показывать меню, в котором игрок выбирает какой предмет создавать (после этого создаем предмет, удаляем предметы и очищаем список).

2. Я бы проверял столкновение с предметом, либо расстояние до него (второй вариант, мне кажется, более удобный).


Название: Re: Пример инвентаря
Отправлено: Reylor от Декабрь 01, 2012, 18:43:31
м-м-м а вот насчёт первого. Можешь кодом сообразить?

И вот ещё, если у игрока, например, достаточно в инвентаре вещей для создания нескольких предметов, то тогда ГГ скрафтит сразу несколько предметов поэтому. Как сделать крафт по принципу взял предмет (ПКМ) Начинаешь перетаскивать (в инвентаре) наводишь на другой, отпускаешь-крафт
Это есть в этой теме (items).
http://forum.hellroom.ru/index.php?topic=10954.0


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Декабрь 01, 2012, 19:52:43
И вот ещё, если у игрока, например, достаточно в инвентаре вещей для создания нескольких предметов, то тогда ГГ скрафтит сразу несколько предметов поэтому.

Прочитай внимательно мой предыдущий пост.
Цитата: Dva_Kota
Если из выбранных предметов можно создать несколько разных предметов - показывать меню, в котором игрок выбирает какой предмет создавать (после этого создаем предмет, удаляем предметы и очищаем список).
Для этой цели можно использовать стандартное меню ГМ (по крайней мере для тестов был бы самый удобный вариант, наверное)

По поводу перетаскивания предмета на предмет - я не представляю как сделать при таком способе крафт более чем из двух вещей.

Писать код сейчас нет времени.


Название: Re: Пример инвентаря
Отправлено: Reylor от Декабрь 07, 2012, 14:22:27
Два кота, с крафтом разобрался, но как сделать его в отдельном окне (как ты советовал) не знаю. Для этого стандартные ГМ функции кажутся мне не очень подходящими. И вообще как будет выглядеть крафтинг в отдельном окне не представляю. Поэтому в который раз прошу твоей помощи.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Декабрь 07, 2012, 15:08:57
В отдельном окне - так же как второй инвентарь. Перетаскиваешь в него предметы и уже во втором инвентаре крафтишь.  Наверное как-то так. Все зависит от особенностей конкретного инвентаря.
Можно сделать окно крафта как "сундук" в примере с сундуками (тогда вообще переделывать почти ничего не нужно будет).


Название: Re: Пример инвентаря
Отправлено: Reylor от Декабрь 09, 2012, 17:07:30
Ну да в принципе как я и думал, ладно буду пытаться. Спасибо.

Но снова я встал перед задачей! ( :facepalm: На счёт второго окна (крафта). Как сделать дополнительное окно.
На все мои попытки сделать копию сундука, с постоянным окном ГМ страшно ругался. А идея такая мы из основного инвентаря кидаем объекты в малый с scr_craft проверяет строки на создание нового объекта. Если их достаточно создаём в боковом (рядом с окном крафта) окошке этот предмет. Если из этого окна мы берём новый объект то в окне крафта отнимается нужное кол-во предметов. (это всё делает scr_craft)
Но у меня вопрос такой как сделать доп. окно и как произвести автоматическую проверку и создать объект. (не нажимая клавишу Е или F)
Снизу скрин как желательно что бы всё выглядело.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Декабрь 10, 2012, 11:32:40
Для создания еще одного инвентаря нужно сделать еще один массив (так же как сделаны сундуки). Напиши какие ошибки, может быть там не все так страшно как кажется.
Код для проверки наличия предметов в инвентаре (и их количества) есть в первом посте. только нужно будет ставить имя того инвентаря, в котором проверяешь предметы. Для отдельной ячейки можно сделать либо еще один инвентарь, либо просто рисовать спрайт создаваемого предмета в нужном месте и проверять нажатие клавиши мышки в тех координатах.


Название: Re: Пример инвентаря
Отправлено: Reylor от Декабрь 12, 2012, 16:41:31
Ну вот я создал по принципу ещё одного инвентаря окно для крафта (3 ячейки) и окно создания нового предмета (1 ячейка). Но вопрос в том как можно перетаскивать из инвентаря в крафт предметы.
Я думаю, что когда я перетаскиваю из инвентаря в крафт ПКМ уходит за пределы инвентаря и предмет я просто выбрасываю. Как сделать что бы из инвентаря можно было перетаскивать предметы в крафт?
(ниже прикрепил пример)


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Декабрь 12, 2012, 17:40:13
Сейчас нет времени смотреть пример, может быть позже посмотрю. На самом деле там все просто - в событии отпускания клавиши есть проверка "где в данный момент находится курсор". Если двойной инвентарь, то там проверяется "находится ли курсор над вторым инвентарем", если еще и с сундуками, то добавляется проверка "находится ли курсор над окном сундука". В зависимости от того над каким окном инвентаря находится курсор выполняем нужное действие. Если ни над одним из инвентарей курсор не находится - выбрасываем предмет. Аналогично нужно будет сделать и в окне крафта (чтобы предметы при перетаскивании оттуда не выбрасывались).


Название: Re: Пример инвентаря
Отправлено: dtestd от Декабрь 13, 2012, 14:19:03
Можно узнать, как увеличить расстояние ячеек друг от друга?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Декабрь 13, 2012, 18:53:51
Везде, где идет вычисление координат ячеек через цикл добавлять ширину/высоту расстояния между ячейками. По умолчанию расстояние между ячейками равно 0.


Название: Re: Пример инвентаря
Отправлено: RussFakt от Декабрь 16, 2012, 19:37:21
Как сделать, чтобы при старте игры инвентарь был закрыт? sm_???


Название: Re: Пример инвентаря
Отправлено: Hadarak от Декабрь 16, 2012, 20:27:55
obj_inv Create
Код:
visible = false;


Название: Re: Пример инвентаря
Отправлено: Reylor от Декабрь 21, 2012, 11:23:40
Я сделал несколько инвентарей (с помощью двойного инвентаря, как я раньше не додумался :hm:) ну так вот, если мы подбираем obj_shoes_01, переносим ботинки в основной инвентарь. Зажимаем shift жмём ПКМ ботинки переносятся во inv_3 опять жмём ПКМ на ботинках, они переносятся в inv_2. Опять ПКМ и ботинки переносятся в obj_inv.
У меня есть вопрос почему я не могу ложить все предметы в inv_3,2 с помощью obj_item_base.
Вот отрезок кода из Left Pressed inv_3  такойже и в inv_2.


        switch (name_obj[klick_x,klick_y])//Выбираем в зависимости от названия предметак какое действие выполнить
            {
            case obj_shoes_01:             //записываем все данные из этого слота в переменные для перетаскивания
                            inv_item_x=klick_x;
                            inv_item_y=klick_y;
                            inv_txt=txt[klick_x,klick_y];
                            inv_item=1;//item[klick_x,klick_y];
                            inv_spr=spr[klick_x,klick_y];
                            inv_max_number=max_number[klick_x,klick_y];
                            inv_name_obj=name_obj[klick_x,klick_y];
Если я ставлю вместо obj_shoes_01, obj_item_base то предметы вообще не ложатся в inv_2,3.
В чем проблемма?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Декабрь 21, 2012, 15:53:56
obj_item_base - родитель для всех предметов-объектов которые присутствуют в комнате (не в инвентаре!). Он используется для проверки столкновения с предметами в комнате - нужен для того чтобы при добавлении новых предметов не создавать еще одно событие столкновения - весь код перемещения предмета (для всех предметов) написан в одном событии.


Название: Re: Пример инвентаря
Отправлено: Reylor от Декабрь 26, 2012, 20:04:13
Да, я понял. Как то глупо получилось, ну да ладно.
Как бы мне осуществить систему крафта не поможешь. Пока, что крафт реализован как в начальном примере, в inv_3 кидаем 2 предмета (в моём случае Лечебное зелье + Меч = Кровавый меч) как сделать крафт как в моей прошлой нарисовке? Не могу сделать что бы после проверки на предметы в inv_3 (Зелье + меч) в inv_2 создавался предмет (кровавый меч). Как бы это реализовать?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Декабрь 27, 2012, 11:12:28
Я бы посоветовал сделать немного по другому:
В Draw проверять какие предметы в inv_3, в соответствии с этим рисовать в inv_2 спрайт создаваемого предмета. Проверять то же самое при клике мышкой по inv_2, при этом удаляя все предметы из inv_3 и создавая предмет (кровавый меч) сразу в основном инвентаре. Так будет на много проще. Думаю что проверить какие предметы находятся в inv_3 не составит труда, т.к. в первом сообщении темы описано как сделать такую проверку. Код очистки инвентаря там тоже есть.


Название: Re: Пример инвентаря
Отправлено: UniversalCreator от Декабрь 27, 2012, 11:55:59
ух ты! прикольный инвентарь!
Мне обязательно пригодится


Название: Re: Пример инвентаря
Отправлено: Reylor от Декабрь 27, 2012, 21:39:38
Начал делать как ты сказал но спрайт кровавого меча рисует не там где надо как быть.
И ещё как сделать, что бы спрайт рисовался когда именно два предмета определенны. (меч, зелье)
Пытался сделать так
            {
            if (txt[slot_x,slot_y]='меч')//когда находим ячейку с таким же предметом
if (txt[slot_x,slot_y]='зелье')
                {
Но эффекта ноль как быть.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Декабрь 27, 2012, 23:10:28
Так ты проверяешь наличие двух предметов в одной и той же ячейке.
Создай переменную, значение которой false.
Нужно сначала проверить все ячейки на наличие первого предмета. Как только найдешь первый предмет меняй значение этой переменной на true. затем проверяем переменную. Если она true - меняем ее значение на false и проверяем все ячейки на наличие второго предмета. Если находим второй предмет - меняем значение переменной на true. Если после поиска всех предметов значение переменной true - рисуем спрайт.

Приблизительный код:
Код:
a = false;

//поиск первого предмета
for (slot_y=0; slot_y<inv_height_y; slot_y+=1)
        {
        for (slot_x=0; slot_x<inv_width_x; slot_x+=1)
            {
            if (txt[slot_x,slot_y]='зелье')
                {
                     a = true;
                }
            }
        }
if (a)
        {
        a = false
        for (slot_y=0; slot_y<inv_height_y; slot_y+=1)
                {
                for (slot_x=0; slot_x<inv_width_x; slot_x+=1)
                    {
                    if (txt[slot_x,slot_y]='Меч')
                        {
                             a = true;
                        }
                    }
                }
}

if (a)
{
//Здесь рисуем спрайт
}

Разумеется, если много различных вариантов крафта то такой код не очень удобен. В примерах крафта, вроде бы, было описано как лучше это организовать.


Название: Re: Пример инвентаря
Отправлено: Reylor от Декабрь 27, 2012, 23:59:26
С этим понятно, но почему я не могу задать собственные координаты спрайту.? Он рисуется как при координатах х=0 у=0


Название: Re: Пример инвентаря
Отправлено: Vulcano от Декабрь 28, 2012, 00:08:18
Инвентарь отличный. Маленько переработал код, добавил кое-что свое и сделал всякие красивости в виде нарисованных спрайтов. Но наткнулся на камень, под который никак не затекает вода!
Как логически сообразить, что нужно для кода, при котором будут отображаться только части инвентаря. Поясню подробнее.

Есть инвентарь только из одной колонки. В нем 15 ячеек, но изначально рисуются только 5 (понятно, что в них отображаются взятые предметы, если они уже взяты). При нажатии кнопки, или области нарисованного спрайта (стрелка вправо), исчезают первые пять ячеек и на тех же позициях появляются следующие 5 (т.е. начиная с 5, т.к. массив хранит переменные с 0 - 1 ячейка и т.д., если я правильно понял sm_???). Нажатие на стрелку влево, возвращает первые пять ячеек с предметами (начиная с 0-й). По этому принципу в инвентаре получается как бы 3 страницы, которые отображают разные адреса ячеек. Если видно какую-то одну страничку, то не видно остальные, или они вообще не прорисовываются.

Просто дичайшими затратами и так уставшего мозга после работы сидел вечерами больше недели. Все, что удалось выжать - страницы две не исполняющегося кода:

Сломал себе уже весь мозг. Не хватает у меня логического мышления, чтобы решить, скорее всего, пустяковую задачу. Элементы кода, что я приложил, возможно вообще бред. Я даже в этом ничуть не сомневаюсь. Подскажите, в каком направлении хотя бы соображать :shok:


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Декабрь 28, 2012, 00:22:14
Reylor, а как именно задаются координаты рисующегося спрайта? (сейчас нет возможности посмотреть твой пример)

Vulcano, задача, вроде бы, не сложная. Наверное, нужно сделать так: Задаем переменную, которая показывает какой столбец сейчас активный. По умолчанию задаем ей значение 0. При нажатии стрелок увеличиваем/уменьшаем ее значение на 1 (не забываем поставить ограничение, чтобы значение переменной не получилось отрицательным или большим чем количество столбцов -1).

В коде (в Draw и в событиях нажатия клавиш мыши) убираем строки   for (slot_x=0; slot_x<inv_width_x; slot_x+=1) и slot_x в коде заменяем на нашу переменную (про которую я написал выше). Возможно (скорее всего), нужно будет еще изменить настройки маски инвентаря. Они задаются в событии Create (где-то в начале, там есть комментарии). Маска размером как одна ячейка растягивается по Х и У таким образом, чтобы она покрывала все ячейки - нужно убрать растягивание по Х, оставить только по У.



Название: Re: Пример инвентаря
Отправлено: Reylor от Декабрь 28, 2012, 22:27:29
a = false;

//поиск первого предмета
for (slot_y=0; slot_y<inv_height_y; slot_y+=1)
        {
        for (slot_x=0; slot_x<inv_width_x; slot_x+=1)
            {
            if (txt[slot_x,slot_y]='зелье')
                {
                     a = true;
                }
            }
        }
if (a)
        {
        a = false
        for (slot_y=0; slot_y<inv_height_y; slot_y+=1)
                {
                for (slot_x=0; slot_x<inv_width_x; slot_x+=1)
                    {
                    if (txt[slot_x,slot_y]='Меч')
                        {
                             a = true;
                        }
                    }
                }
}

if (a)
{
draw_sprite(spr_sword_red,0,x=obj_inv2,y=obj_inv2)//решил рисовать через draw_sprite
}


Название: Re: Пример инвентаря
Отправлено: Vulcano от Декабрь 28, 2012, 23:10:42
Сделал все так, как было подсказано.
Остается пара вопросов и как обычно незавершенный код.
1. slot_x стоило убрать из всех строк и заменить его новой переменной, определяющей столбец? Даже из массивов (spr[], txt[] и т.д.)
2. весь код отрисовки стоит оставить в draw объекта инвентаря, или можно перенести его в draw стрелок и отрисовывать нужные ячейки массивов в момент нажатия при изменении переменной (скорее можно и так и так, но у меня не получается).
3. я ограничил отрисовку ячеек инвентаря относительно размера, т.о. у меня получилось в каждой колонке он рисует только 5 ячеек - это вообще правильно, т.к. в неотрисованные ячейки просто не записываются взятые предметы. Я прекрасно понимаю, что взятый предмет сначала записывается в массив, а уже потом отрисовывается в определенной ячейке, но с такими ограничениями как у меня, вылазит ошибка:

Почему программа считает slot_y неизвестной? На мой взгляд потому, что следующая позиция массива просто не отрисована и отображаться спрайту следующего взятого предмета - негде. Как это исправить? Рисовать все сразу и делать ячейки массива невидимыми, это вообще может помочь или я опять что-то недопонимаю?
4. код draw теперь выглядит так:

Верно ли я понял ваши замечания, либо вконец все испортил и снова иду в неправильном направлении?

Вроде бы все, я правда, стараюсь, однако, как видите, получается плохо. Заранее спасибо за проявленное внимание, жду хоть каких-нибудь советов по теме.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Декабрь 29, 2012, 02:04:19
Reylor, ну, вроде бы, так и нужно...

Vulcano
1. Да.

2. Лучше оставить его в событии Draw инвентаря. Переменную тоже задавай в инвентаре (в Create) а изменяй ее значение при нажатии стрелок.

3. Скорее всего не правильно ограничил. Размеры инвентаря задаются в событии Create инвентаря, там и нужно менять размеры инвентаря.

4. Здесь нужно еще немного подправить (я про это забыл, по этому не написал в прошлый раз):

Строку
Код:
draw_sprite(spr[inv_stolb,slot_y],image_index,x+inv_stolb*slot_width_x,y+slot_y*slot_height_y);
Нужно изменить так:
Код:
draw_sprite(spr[inv_stolb,slot_y],image_index,x,y+slot_y*slot_height_y);

Строку
Код:
draw_text_ext(x+inv_stolb*slot_width_x+sprite_get_width(spr[inv_stolb,slot_y]),y+slot_y*slot_height_y,txt[klick_x,klick_y],14,100);
Изменить так:
Код:
draw_text_ext(x+sprite_get_width(spr[inv_stolb,slot_y]),y+slot_y*slot_height_y,txt[klick_x,klick_y],14,100);

Иначе будет рисоваться только один столбец (как  и нужно), только они будут рисоваться не на одном и том же месте, а каждый следующий столбец будет рисоваться правее.


Название: Re: Пример инвентаря
Отправлено: Reylor от Декабрь 29, 2012, 18:36:09
Dva_Kota, так я и говорю, прописываю вроде бы правильно. А рисует спрайт в левом верхнем углу.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Декабрь 30, 2012, 01:43:31
это:
Код:
draw_sprite(spr_sword_red,0,x=obj_inv2,y=obj_inv2)//решил рисовать через draw_sprite

заменить на это:
Код:
draw_sprite(spr_sword_red,0,x.obj_inv2,y.obj_inv2)//решил рисовать через draw_sprite
или на это:
Код:
draw_sprite(spr_sword_red,0,x.obj_inv2+5,y.obj_inv2+5)//решил рисовать через draw_sprite
//вместо 5 подобрать число.

Или (если в Step или в Draw объект obj_inv2 не перемещается за видом) заменить x.obj_inv2 y.obj_inv2 и y.obj_inv2 на соответствующие координаты вида (view_xview, view_yview).


Название: Re: Пример инвентаря
Отправлено: Vulcano от Январь 03, 2013, 01:11:54
Я вернулся к тому, с чего начал. Я разобрался с некоторыми переменными и теперь весь массив рисуется в пределах одних координат. Т.о. получается, что все ячейки наслаиваются друг на друга и в конечном итоге отображаются те, что нарисованы последними.
Цикл отрисовки ячеек инвентаря теперь выглядит так:
Но как теперь в коде отразить зависимой между изменяемой переменной, которая изменяется в случае нажатия на определенную стрелочку, и видимостью определенной части инвентаря - я не знаю. Просто изменять глубину у каждой рисующейся части в зависимости от означенной ранее переменной. Так в цикле это сделать не получится. Здесь используется простой перебор и любое условие со значением true будет действовать на все части инвентаря, а не только на промежуток - все 5 ячеек inv_stolb=0. Если это как-то можно сделать, я весь во внимании. Ну или всю эту "несложную задачу" можно решить каким-то другим логическим способом... Для меня она уже не просто сложная, а гиперсложная. Прошу помощи и совета у людей более сведущих в этом вопросе.


Название: Re: Пример инвентаря
Отправлено: Reylor от Январь 04, 2013, 22:44:58
Ну вот и финальная версия крафта. У меня остался только один вопрос. Вот отрезок кода из Left Pressed;obj_inv;
   if (keyboard_check(vk_shift))//Если зажата клавиша Shift
{if (visible)
    {
    klick_x=floor((mouse_x-x)/slot_width_x);
    klick_y=floor((mouse_y-y)/slot_height_y);

    if (txt[klick_x,klick_y]!='')//елси в слоте, над которым сейчас находится курсор, что-то есть
        {
        switch (name_obj[klick_x,klick_y])//Выбираем в зависимости от названия предметак какое действие выполнить
            {
            case obj_sword:             //записываем все данные из этого слота в переменные для перетаскивания
                            inv_item_x=klick_x;
                            inv_item_y=klick_y;
                            inv_txt=txt[klick_x,klick_y];
                            inv_item=1;//item[klick_x,klick_y];
                            inv_spr=spr[klick_x,klick_y];
                            inv_max_number=max_number[klick_x,klick_y];
                            inv_name_obj=name_obj[klick_x,klick_y];
                        case obj_potion_health:             //записываем все данные из этого слота в переменные для перетаскивания
                            inv_item_x=klick_x;
                            inv_item_y=klick_y;
                            inv_txt=txt[klick_x,klick_y];
                            inv_item=1;//item[klick_x,klick_y];
                            inv_spr=spr[klick_x,klick_y];
                            inv_max_number=max_number[klick_x,klick_y];
                            inv_name_obj=name_obj[klick_x,klick_y];  

                            /*txt[klick_x,klick_y]='empty';/*помечаем эту ячейку "пусто", но в нее пока что ничего положить нельзя будет.
                                    Если переменная txt[] будет равна 'empty', то предмет в этой ячейке рисоваться не будет,
                                    хотя фактически он будет там находиться.*/
Меня немного смущает выделенный отрезок кода, что бы перемещать в инвентарь все предметы придётся добавлять для каждого предмета свой отрезок кода, но тогда код получиться совершенно не оптемизированн.
Сейчас в inv_3 можно скинуть лишь 2 предмета зелье здоровья и меч, а остальные при нажатии ПКМ + shift просто удаляются,а это ни есть хорошо. Хотелось бы сделать, что бы все предметы можно было кидать в inv_3 либо только отдельные предметы (на выбор), но, что бы не приходилось писать для каждого предмета такой код как выше. Крафт уже реализовал так что это последний вопрос по инвентарю. Если есть время посмотри пример.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Январь 06, 2013, 02:09:15
Vulcano
Нужно просто убрать первую строку
for (inv_stolb=0; inv_stolb<inv_height_y mod 5; inv_stolb+=1)
и задавать переменную inv_stolb, равную номеру нужного столбца

Reylor
Наверное, не самый лучший вариант, но у меня сейчас нет веремени придумывать что-то другое. Суть способа в следующем: не перемещаем предмет в инвентарь, а создаем под ногами игрока. Тогда, если предметы перемещаются в инвентарь при прикосновении к игроку, он сам туда переместится. Если нужно нажимать клавишу - попробуй эмитировать нажатие этой клавиши.
Для того чтобы то сделать достаточно заменить
Цитировать
switch (name_obj[klick_x,klick_y])//Выбираем в зависимости от названия предметак какое действие выполнить
(и весь код который ты выделил)
на одну строку:

Код:
instance_create(игрок.x,игрок.y,name_obj[klick_x,klick_y])


Название: Re: Пример инвентаря
Отправлено: Reylor от Январь 06, 2013, 14:13:23
Dva_Kota,сделал немного по-другому (циклы просто в коде перепутал), но все равно спасибо. Крафт довёл до ума. Добавил ещё один рецепт меч+зелье маны = меч маны. (так от делать нечего).
Пример крафта выложу ниже, может кому пригодиться.
P.S.
Если кто будет использовать пример.
Добавление "рецептов" думаю не составит труда т.к использованы не сложные коды. Да и комментарии там тоже присутствуют.

Добавлено: Январь 10, 2013, 12:15:07
Ах да, и ешё Dva_Kota как бы мне в инвентаре экипировке переставить слоты для одежды/оружия.
Сам переставлял, но они всё равно ложатся не на место.
Может что пропустил. Хотелось бы сделать как на картинке.
P.S.
И ещё хотелось бы убрать переменные для правой/левой рук. И оставить одну т.к. меч один. Но на мои попытки убрать одну из "рук" Выскакивала ошибка компиляции.


Название: Re: Пример инвентаря
Отправлено: Hadarak от Январь 10, 2013, 12:40:55
Во сделал как нужно. Посмотри изменения в obj_inv_weapon create, там я поменял типы предметов. И obj_item_base, там сменил n_x_(1,2) у некоторых предметов (меча, перчаток, амулетов)


Название: Re: Пример инвентаря
Отправлено: Reylor от Январь 10, 2013, 15:51:44
Hadarak, делал как ты. Но проблема в том, что после крафта предмета (К примеру, кровавый меч). Предметы ложатся как в стандартном spr_inv_equip_back. В чем причина, не пойму.


Название: Re: Пример инвентаря
Отправлено: Hadarak от Январь 10, 2013, 16:06:38
Вот ещё немного изменил пример, а то если активировать меч из инвентаря он одевался во вторую руку тоже.
Вообщем тебе во всех switch с n_x_1, n_y_1 нужно заменить:
Код:
case 1:...break;
case 2:...break;
case n:...break;
на
Исправил бы сам, но не знаю как и где происходит крафт.


Добавлено: Январь 10, 2013, 16:08:00
А хотя я вроде всё правильно сделал, ты же имел ввиду после крафта ты активируешь в инвентаре, а потом уже встаёт не на то место.


Название: Re: Пример инвентаря
Отправлено: cfif31 от Январь 21, 2013, 16:51:02
Скажите можно ли убрать цифры количества предметов в инвентаре?
И ещё как сделать чтобы при отпускании мыши (в которой объект из инвентаря) вне инвентаря объект возвращался в инвентарь , а если например над объектом stacan (определённого предмета) выполнялось действие?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Январь 22, 2013, 01:45:14
1. Числа модно отключит в событии Draw. Нужно убрать строку, с функцией draw_text() (ту, которая отображает значение item[])

2. В событии "Глобальное отпускание клавиши", в самом конце, есть такая часть кода:
Код: (Код1)
with (instance_create(obj_hero.x-16,obj_hero.y+16,inv_name_obj))
                {
                number = other.inv_item;
                }

            inv_txt='';//показываем что больше ничего не перетаскиваем

            txt[inv_item_x,inv_item_y]='';//очищаем переменные для ячейки из которой перетаскивали (удаляем предмет из инвентаря)
            item[inv_item_x,inv_item_y]=0;
            max_number[inv_item_x,inv_item_y]=0;
замени ее на это:
Код: (Код2)
with (other)
                        {
                        txt[inv_item_x,inv_item_y]=inv_txt;//записываем в массив имя

                        inv_txt='';//показываем что больше ничего не перетаскиваем
                        }
Тогда предметы не будут выбрасываться.

Выше (в том же событии) есть проверка ячейки, над которой находится выбрасываемый предмет (смотри комментарии в коде). Где сравнивается перетаскиваемый предмет с предметом, который в ячейке добавь еще свою проверку (если в ячейке предмет stacan - выполнять действие).


Название: Re: Пример инвентаря
Отправлено: cfif31 от Январь 22, 2013, 16:31:17
1. Числа модно отключит в событии Draw. Нужно убрать строку, с функцией draw_text() (ту, которая отображает значение item[])

2. В событии "Глобальное отпускание клавиши", в самом конце, есть такая часть кода:
Код: (Код1)
with (instance_create(obj_hero.x-16,obj_hero.y+16,inv_name_obj))
                {
                number = other.inv_item;
                }

            inv_txt='';//показываем что больше ничего не перетаскиваем

            txt[inv_item_x,inv_item_y]='';//очищаем переменные для ячейки из которой перетаскивали (удаляем предмет из инвентаря)
            item[inv_item_x,inv_item_y]=0;
            max_number[inv_item_x,inv_item_y]=0;
замени ее на это:
Код: (Код2)
with (other)
                        {
                        txt[inv_item_x,inv_item_y]=inv_txt;//записываем в массив имя

                        inv_txt='';//показываем что больше ничего не перетаскиваем
                        }
Тогда предметы не будут выбрасываться.

Выше (в том же событии) есть проверка ячейки, над которой находится выбрасываемый предмет (смотри комментарии в коде). Где сравнивается перетаскиваемый предмет с предметом, который в ячейке добавь еще свою проверку (если в ячейке предмет stacan - выполнять действие).



А если Объект стакан(stacan) не в инвентаре?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Январь 22, 2013, 17:03:08
Если не в ячейке, тогда нужно делать по-другому:
перед кодом
Код:
with (other)
                        {
                        txt[inv_item_x,inv_item_y]=inv_txt;//записываем в массив имя

                        inv_txt='';//показываем что больше ничего не перетаскиваем
                        }
(который ты вставил)
нужно добавить проверку "находится ли под курсором объект "Стакан". Если true - выполнять действие, иначе - выполнять код выше.


Название: Re: Пример инвентаря
Отправлено: cfif31 от Январь 22, 2013, 17:37:30
Если не в ячейке, тогда нужно делать по-другому:
перед кодом
Код:
with (other)
                        {
                        txt[inv_item_x,inv_item_y]=inv_txt;//записываем в массив имя

                        inv_txt='';//показываем что больше ничего не перетаскиваем
                        }
(который ты вставил)
нужно добавить проверку "находится ли под курсором объект "Стакан". Если true - выполнять действие, иначе - выполнять код выше.

Спасибо!!!!!  А можно ли чтобы если определённый предмет отпущен над стаканом(stacan) то выполнялось действие, а если другой предмет не выполнялось?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Январь 23, 2013, 01:16:11
проверяй какой предмет перетаскиваешь. Это переменная inv_txt, ее значение - название предмета, которое отображается при перетаскивании (пустая строка если ничего не перетаскиваем).


Название: Re: Пример инвентаря
Отправлено: cfif31 от Январь 23, 2013, 15:38:00
Спасибо!!!!!!!!!!!!!!! А можно ли ещё при клике например по тумбе добавлялся объект в инвентарь например тот же стакан?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Январь 23, 2013, 15:51:15
создавай объект "стакан" в координатах игрока - он сам переместится в инвентарь (если у тебя для перемещения предмета в инвентарь не назначена клавиша). Или посмотри код в событии столкновения игрока и объекта - для создания предмета в инвентаре код аналогичный.


Название: Re: Пример инвентаря
Отправлено: dokerstar от Январь 23, 2013, 17:16:18
Решил посмотреть твой инвентарь, но всегда со всеми твоими примерами ошибка.


Название: Re: Пример инвентаря
Отправлено: cfif31 от Январь 23, 2013, 20:04:07
Я только что скачал инвентарь

 "Пример_инвентаря_Dva_Kota_bodimir_1.0028_rpg_mod_Инвентарь_в_отдельно_ комнате_замена_объектов.gmk!

и при изменении размера на 10 в высону и 1 в ширину вылетела вот эта ошибка :



Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Январь 23, 2013, 22:16:53
В этом примере опечатка: В объекте obj_inv, в событии Create Все строки:
Код:
for (slot_y=0; slot_y<inv_width_x; slot_y+=1)
заменить на
Код:
for (slot_y=0; slot_y<inv_height_y; slot_y+=1)

Вообще там должен быть один цикл, как в более поздинх версиях:
Код:
for (slot_x=0; slot_x<inv_width_x; slot_x+=1)//выбираем столбец инвентаря для проверки
    {
    for (slot_y=0; slot_y<inv_height_y; slot_y+=1)//проверяем все ячейки в этом столбце, а потом опять выполнится сторка выше и мы перейдем к следующему столбцу инвентаря
        {
        txt[slot_x,slot_y]='';
        item[slot_x,slot_y]=0;
        max_number[slot_x,slot_y]=0;
        spr[slot_x,slot_y]=spr_inv;
        name_obj[slot_x,slot_y]='';
        }
    }


Название: Re: Пример инвентаря
Отправлено: cfif31 от Февраль 23, 2013, 22:37:49
Вопрос о горячих клавишаш

Это очень просто. В примере при нажатии левой кнопки мыши на инвентаре есть такая часть кода (почти в начале):

Код:
...
if (txt[klick_x,klick_y]!='')
        {
switch (name_obj[klick_x,klick_y])
            {
            case obj_grin: obj_hero.hp+=10; break;
            case obj_wink: obj_hero.x=random(room_width); obj_hero.y=random(room_height); break;
            case obj_shocked: obj_hero.hp-=10; break;
...
Ставишь эту часть при нажатии, нарпимер, клавиши 1, только вместо klick_x,klick_y ставь координаты первой ячейки (например 0,0). Аналогично и с другими горячими клавишами.


Извините у меня выдает ошибку помогите пожалуйста

___________________________________________
ERROR in
action number 1
of Mouse Event for Left Released
for object object14:

Error in code at line 1:
   if (txt[77,164]!='')
      ^
at position 5: Unknown variable txt or array index out of bounds


Приложил пример (в инвентаре надо нажать "Всё")


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Февраль 27, 2013, 20:10:43
Здесь координаты ячейки это не положение в комнате, а номер ячейки по горизонтали и вертикали (начиная с нуля).


Название: Re: Пример инвентаря
Отправлено: cfif31 от Март 04, 2013, 09:11:01
Здесь координаты ячейки это не положение в комнате, а номер ячейки по горизонтали и вертикали (начиная с нуля).

 Извините а можно ли пример? (кнопка "все" должна удалять все предметы из инвентаря)


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Март 09, 2013, 13:47:15
Пример кода для удаления всех предметов из инвентаря есть в епрвом сообщении темы под спойлером "Удаление всех предметов из инвентаря (для любой версии)". Вот этот код:


Код:
with (obj_inv)//выполняем код для объекта obj_inv
    {
    for (slot_y=0; slot_y<inv_height_y; slot_y+=1)//выбираем строку инвентаря для проверки
        {
        for (slot_x=0; slot_x<inv_width_x; slot_x+=1)//проверяем все ячейки в этой строке, а потом опять выполнится сторка выше и мы перейдем к следующепй строке инвентаря
            {
                        txt[slot_x,slot_y]='';//очищаем переменные для этой ячейки (удаляем предмет из инвентаря)
                        item[slot_x,slot_y]=0;
                        max_number[slot_x,slot_y]=0;
            }
        }
    }


Название: Re: Пример инвентаря
Отправлено: cfif31 от Март 09, 2013, 16:33:08
Пример кода для удаления всех предметов из инвентаря есть в епрвом сообщении темы под спойлером "Удаление всех предметов из инвентаря (для любой версии)". Вот этот код:


Код:
with (obj_inv)//выполняем код для объекта obj_inv
    {
    for (slot_y=0; slot_y<inv_height_y; slot_y+=1)//выбираем строку инвентаря для проверки
        {
        for (slot_x=0; slot_x<inv_width_x; slot_x+=1)//проверяем все ячейки в этой строке, а потом опять выполнится сторка выше и мы перейдем к следующепй строке инвентаря
            {
                        txt[slot_x,slot_y]='';//очищаем переменные для этой ячейки (удаляем предмет из инвентаря)
                        item[slot_x,slot_y]=0;
                        max_number[slot_x,slot_y]=0;
            }
        }
    }

Спасибо! И ещё вопрос, а если надо почистить одну ячейку


Название: Re: Пример инвентаря
Отправлено: wargamen от Март 09, 2013, 16:48:25
Код:
with (obj_inv)//выполняем код для объекта obj_inv
    {
           txt[ячейка_по_горизонтали,ячейка_по_вертикали]='';//очищаем переменные для этой ячейки (удаляем предмет из инвентаря)
           item[ячейка_по_горизонтали,ячейка_по_вертикали]=0;
           max_number[ячейка_по_горизонтали,ячейка_по_вертикали]=0;
    }


Название: Re: Пример инвентаря
Отправлено: cfif31 от Март 09, 2013, 18:13:32
Код:
with (obj_inv)//выполняем код для объекта obj_inv
    {
           txt[ячейка_по_горизонтали,ячейка_по_вертикали]='';//очищаем переменные для этой ячейки (удаляем предмет из инвентаря)
           item[ячейка_по_горизонтали,ячейка_по_вертикали]=0;
           max_number[ячейка_по_горизонтали,ячейка_по_вертикали]=0;
    }
Спасибо! я ещё один вопрос задам так вот при использовании предмета(не скликая пор нему) 

стоит вот этот код
Код:
with (obj_inv)
    {
    for (slot_y=0; slot_y<inv_height_y; slot_y+=1)
        {
        for (slot_x=0; slot_x<inv_width_x; slot_x+=1)
            {
            if (txt[slot_x,slot_y]='Cav')
                with (other)
                    {
                   
                            other.item[other.slot_x,other.slot_y]-=1;
                            instance_create(624,928,obj_cav1);
                            with(obj_cav1) move_towards_point(64,34,6)
                            exit;
                           
                   
                    }
                }
            }
        }

а мне надо если other.item[other.slot_x,other.slot_y]=0; то объект из инвентаря удалялся, а то получается количество предметов и -1 и -2 и т.д  помогите пожалуйста это реализовать?


Название: Re: Пример инвентаря
Отправлено: wargamen от Март 09, 2013, 18:23:53
Стоп-стоп. Под other ты имеешь ввиду другой инвентарь? Other разве не возвращает с которым столкнулся? Сейчас даже в справку гляну>:D

Добавлено: Март 09, 2013, 18:26:14
И довольно странная конструкция: with(other) { other.*** }


Название: Re: Пример инвентаря
Отправлено: cfif31 от Март 09, 2013, 18:32:11
Стоп-стоп. Под other ты имеешь ввиду другой инвентарь? Other разве не возвращает с которым столкнулся? Сейчас даже в справку гляну>:D

Добавлено: Март 09, 2013, 18:26:14
И довольно странная конструкция: with(other) { other.*** }

давайте я ссылку на пример в Л.С сброшу?


Название: Re: Пример инвентаря
Отправлено: wargamen от Март 09, 2013, 18:33:54
Ты лучше обьясни по подробнее. Я тебя немного не пойму.


Название: Re: Пример инвентаря
Отправлено: cfif31 от Март 09, 2013, 18:38:37
Ты лучше обьясни по подробнее. Я тебя немного не пойму.

Я использую пример инвентаря в отдельной комнате

код из объекта obj_smil_base я изменил (убрал лишнее и item[slot_x,slot_y]+=1; поменял на  item[slot_x,slot_y]-=1;)

Код:
with (obj_inv)//выполняем код для объекта obj_inv
    {
    for (slot_y=0; slot_y<inv_height_y; slot_y+=1)//выбираем строку инвентаря для проверки
        {
        for (slot_x=0; slot_x<inv_width_x; slot_x+=1)//проверяем все ячейки в этой строке, а потом опять выполнится сторка выше и мы перейдем к следующепй строке инвентаря
            {
            if (txt[slot_x,slot_y]=other.name)//когда находим ячейку с таким же предметом
                {
                with (other)
                    {
                    if variable_local_exists('max_number')//если у этого объекта есть переменная max_number (ограничение на количество предметов в одной ячейке)
                        {
                        if (other.item[other.slot_x,other.slot_y]<max_number)//проверяем сколько предметов в этой ячейке. если меньше чем max_number:
                            {
                            other.txt[other.slot_x,other.slot_y]=name;//записываем в массив имя
                            other.spr[other.slot_x,other.slot_y]=sprite_index;//записываем в массив какой спрайт отображать в нивентаре
                            other.item[other.slot_x,other.slot_y]+=1;//увеличиваем кол-во предментов на 1
                            other.max_number[other.slot_x,other.slot_y]=max_number;//записываем максимальное количество предметов в слоте
                            instance_destroy();//удаляем предмет из комнаты
                            exit;//после того как нашли пустую ячейку и записали все нужные параметры прекращаем выполнение кода. остальные ячейки просматривать не имеет смысла
                            }
                        }
                    else
                        {//если у этого объекта нет переменной max_number то все предметы "складываем" в одну ячейку
                        other.txt[other.slot_x,other.slot_y]=name;//записываем в массив имя
                        other.spr[other.slot_x,other.slot_y]=sprite_index;//записываем в массив какой спрайт отображать в нивентаре
                        other.item[other.slot_x,other.slot_y]+=1;//увеличиваем кол-во предментов на 1 (это для отображния в инвентаре. пока что не работает
                        other.max_number[other.slot_x,other.slot_y]=0;//записываем максимальное количество предметов в слоте (т.к. это для безлимитных предметов - ставим 0
                        instance_destroy();//удаляем предмет из комнаты
                        exit;//после того как нашли пустую ячейку и записали все нужные параметры прекращаем выполнение кода. остальные ячейки просматривать не имеет смысла
                        }
                    }
                }
            }
        }
    }

Добавлено: Март 09, 2013, 21:39:14
Помогите пожалуйста с инвентарем в отдельной комнате, а то когда я открываю инвентарь в комнате с игрой все изменения пропадают, пробовал сохранять первую комнату загружать её из инвентаря всё наоборот(первая загружается во второй изменения проподают)! Как быть?


Название: Re: Пример инвентаря
Отправлено: MusNik от Март 09, 2013, 22:23:01
Помогите пожалуйста с инвентарем в отдельной комнате, а то когда я открываю инвентарь в комнате с игрой все изменения пропадают, пробовал сохранять первую комнату загружать её из инвентаря всё наоборот(первая загружается во второй изменения проподают)! Как быть?
Сделать комнату постоянной?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Март 10, 2013, 02:11:17
cfif31, почитай внимательно первый пост - там есть ответы на многие вопросы. первая ссылка под спойлером - как удалить предметы из инвентаря (там немного не так как при добавлении, т.к. нужно проверять сколько их осталось и, если удалены все предметы, полностью очищать ячейку, а не только количество уменьшать).

Добавлено: Март 10, 2013, 02:26:18
И, на всякий случай, поясню про other в этом примере.

Код:
with (obj_inv)//здесь из объекта "Игрок" (или из любого другого объекта) "перемещаемся" в инвентарь
    {
    for (slot_y=0; slot_y<inv_height_y; slot_y+=1)
        {
        for (slot_x=0; slot_x<inv_width_x; slot_x+=1)
            {
            if (txt[slot_x,slot_y]='Cav')
                with (other)//здесь "перемещаемся" из инвентаря (т.к. мы до этого "переместились" в него) обратно в первоначальный объект.
                                   //Теперь все переменные, перед которыми стоит "other." - это переменные объекта obj_inv
                    {
                   
                            other.item[other.slot_x,other.slot_y]-=1;
                            instance_create(624,928,obj_cav1);
                            with(obj_cav1) move_towards_point(64,34,6)
                            exit;
                           
                   
                    }
                }
            }
        }

Вообще из этого кода можно убрать with (other) и other перед переменными. Такая конструкция был сделана там где было много обращений к переменным объекта, в котором выполнялся код (чтобы не писать много раз other перед переменными), потом эту конструкцию я скопировал, а убрать лишнее забыл.


Название: Re: Пример инвентаря
Отправлено: Federico от Март 28, 2013, 23:58:00
У меня почему то сам инвентарь вместе с камерой не перемещается  sm_angry Что делать?  sm_??? В примере всё работает, а когда копировал в свой TDS единственное что не получается: Инвентарь с предметами не перемещается! Остаётся в левом верхнем углу комнаты :facepalm_2:


Название: Re: Пример инвентаря
Отправлено: onChyk от Март 29, 2013, 11:48:28
У меня почему то сам инвентарь вместе с камерой не перемещается  sm_angry Что делать?  sm_??? В примере всё работает, а когда копировал в свой TDS единственное что не получается: Инвентарь с предметами не перемещается! Остаётся в левом верхнем углу комнаты :facepalm_2:
Рисуй инвентарь не в координатах x,y , а в view_xview[0]+x и view_yview[0]+y


Название: Re: Пример инвентаря
Отправлено: Federico от Март 29, 2013, 13:32:50
У меня почему то сам инвентарь вместе с камерой не перемещается  sm_angry Что делать?  sm_??? В примере всё работает, а когда копировал в свой TDS единственное что не получается: Инвентарь с предметами не перемещается! Остаётся в левом верхнем углу комнаты :facepalm_2:
Рисуй инвентарь не в координатах x,y , а в view_xview[0]+x и view_yview[0]+y
Немного не понял, куда писать  sm_mosking


Название: Re: Пример инвентаря
Отправлено: onChyk от Март 29, 2013, 13:48:11
Допустим, в событии draw ты рисуешь что-то в координатах X:100 и Y:100. Теперь ты должен рисовать в координатах X:view_xview[0]+100 и Y:view_yview[0]+100. Если не понял, то в FAQ про это написано.


Название: Re: Пример инвентаря
Отправлено: Federico от Март 29, 2013, 14:18:41
Допустим, в событии draw ты рисуешь что-то в координатах X:100 и Y:100. Теперь ты должен рисовать в координатах X:view_xview[0]+100 и Y:view_yview[0]+100. Если не понял, то в FAQ про это написано.
Всё, понял спасибо  :sm_hi_santa:

Добавлено: Март 29, 2013, 21:00:38
У меня ещё одна проблема, когда я перехожу между комнатами лут не сохраняется, что делать?  sm_???  :errm:

Добавлено: Март 30, 2013, 00:26:04
У меня при переходе лут не сохраняется в инвенторе


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Март 30, 2013, 01:08:41
Сделай инвентарь постоянным объектом и ставь его только в первую комнату.


Название: Re: Пример инвентаря
Отправлено: Federico от Март 30, 2013, 01:19:51
Сделай инвентарь постоянным объектом и ставь его только в первую комнату.

 Я, конечно, извеняюсь, я не умею это делать.. Я про то, что бы сделать его постоянным  :facepalm_2:


Название: Re: Пример инвентаря
Отправлено: demon3521 от Март 30, 2013, 01:30:32
в свойствах объекта persistent поставь галочку


Название: Re: Пример инвентаря
Отправлено: Sanek94 от Март 30, 2013, 19:14:10
FedericoТак же, в настройке комнаты, делай комнату постоянной - чтобы изменения в ней сохранялись.


Название: Re: Пример инвентаря
Отправлено: Night от Март 31, 2013, 17:09:24
Классный пример.  sm_respekt Только слоты инвентаря лучше сделать полупрозрачными и с закругленными краями. Это лично мое мнение  sm:)


Название: Re: Пример инвентаря
Отправлено: ALT от Апрель 06, 2013, 10:07:01
Классный пример.  sm_respekt Только слоты инвентаря лучше сделать полупрозрачными и с закругленными краями. Это лично мое мнение  sm:)
А в чем проблема? Один файлик-то всего перерисовать. Это можно и самостоятельно сделать


Название: Re: Пример инвентаря
Отправлено: lesuk24 от Апрель 24, 2013, 16:05:08
Unknown variable txt or array index out of bounds вот такая ошибка что делать?


Название: Re: Пример инвентаря
Отправлено: AndrewVideoGames от Апрель 24, 2013, 19:29:12
 Переменная txt не задана или значения массива выходят за его пределы.


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Апрель 25, 2013, 10:40:36
Ошибка в примере или после переноса примера в игру?
И лог ошибки полностью.


Название: Re: Пример инвентаря
Отправлено: Vorti от Июль 27, 2013, 14:44:46
Спос! уЖЕ ЮЗАю В СВОЕЙ ИГРЕ!


Название: Re: Пример инвентаря
Отправлено: Troir от Сентябрь 15, 2013, 09:53:04
Dva_Kota, а в примере как-нибудь ограничивается область, на которой работает событие зажатия правой кнопки мыши и ее отпускание?

Если проще, у меня проблема в том, что если мышь за пределами инвентаря и если я пытаюсь нажать правую кнопку мыши то вылезает ошибка:
Код:
ERROR in
action number 1
of Mouse Event for Glob Right Pressed
for object o_inv:

Error in code at line 8:
     if slot[slot_place_x,slot_place_y]>0     //slot аналог txt, как и slot_place_x -  klick_x
        ^
at position 7: Unknown variable slot or array index out of bounds

Проблема решается легко, достаточно написать collision_rectangle с координатами инвентаря, но я не пойму, почему в примере все работает и без этого?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Сентябрь 16, 2013, 17:43:46
Проверка находится ли мышь в пределах инвентаря написана в третьей строке события Glob Right Pressed в объекте o_inv и там даже есть комментарий:

Код: (Glob Right Pressed)
if position_meeting(mouse_x,mouse_y,self)//если курсор над инвентарем

Вполне возможно что в твоем примере тоже есть эта проверка, но для того чтобы она правильно работала в событии Create этого объекта нужно растянуть спрайт (маску спрайта) инвентаря (которая вначале является одной ячейкой) до размеров инвентаря:
Код: (Create)
//Параметры инвентаря
inv_height_y=3;//количество ячеек в высоту
inv_width_x=4;//количество ячеек в ширину

...

/*Растягиваем спрайт ячейки таким образом, чтобы он был по размеру как все ячейки вместе взятые
Ону будет служить маской столкновения для инвентаря. Это нужно для выполнения события
нажатия кнопок мыши на инвентаре. Каждая ячейка будет рисоваться отдельно в событии Draw*/
image_xscale=inv_width_x;
image_yscale=inv_height_y;


Название: Re: Пример инвентаря
Отправлено: Troir от Сентябрь 16, 2013, 19:38:19
Спасибо, но не помогло.

Решил проблему другим способом.



Название: Re: Пример инвентаря
Отправлено: SevvenUp от Сентябрь 23, 2013, 13:23:24
есть ли инвентарь как этот только что бы итемы были не обектами а ну к примеру
item[0,0]=0 //ID item'a
item[0,1]='ввв' // Имя Item'a
и.т.д

Решено


Название: Re: Пример инвентаря
Отправлено: maks1221232 от Декабрь 18, 2013, 12:32:38
Как сделать вычисление ячейки на которую наведена мышь?


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Декабрь 18, 2013, 13:54:54
Это зависит от того как сделан твой инвентарь. По картинке это определить нельзя))
Я, в своем примере, вычислял таким образом: Находим расстояние от верхнего левого угла инвентаря до указателя мыши (отдельно по X и отдельно по Y). Делим, соответственно, на ширину и высоту спрайта ячейки (если спрайты квадратные можно делить на постоянную величину, у меня она занесена в переменные slot_width_x и slot_height_y, чтобы можно было легко менять размеры ячейки и не переписывать весь код). Получаем номер ячейки по вертикали и горизонтали - координаты ячейки в массиве.


Название: Re: Пример инвентаря
Отправлено: maks1221232 от Декабрь 18, 2013, 14:09:53
Это зависит от того как сделан твой инвентарь. По картинке это определить нельзя))
Я, в своем примере, вычислял таким образом: Находим расстояние от верхнего левого угла инвентаря до указателя мыши (отдельно по X и отдельно по Y). Делим, соответственно, на ширину и высоту спрайта ячейки (если спрайты квадратные можно делить на постоянную величину, у меня она занесена в переменные slot_width_x и slot_height_y, чтобы можно было легко менять размеры ячейки и не переписывать весь код). Получаем номер ячейки по вертикали и горизонтали - координаты ячейки в массиве.


У меня чуть по другому. Если хочешь посмотреть коды инвентаря, то смотри в той темке которую я создал.


Название: Re: Пример инвентаря
Отправлено: sanya9090 от Январь 03, 2014, 15:31:34
Здравствуйте!
Есть например какая-то вещь скажем броня. При надевании ее персонажа выполняется act_on и там все просто и логично например: global.zachita+=5; добовляем к нашей защите +5 что дала нам броня.
 
Как сделать так если на карте броня встречается НЕСКОЛЬКО (один и тот же объект) раз, а характеристики у нее должны быть разные. (можно конечно делать отдельные объекты) как я и сделал, но это не вариант.

Хочу irandom_range(x1,x2) чтобы работал. Но нечего не выходит.
В создании брони например стоит bron= irandom_range(5,10);
Тут же ниже  act_on ='global.zachita+=bron; ' (тут рандом ставить нельзя т.к. при надевании одной и той же вещи будут даваться разные характеристики)

Но это не работает если на карте несколько одинаковых вещей рандом берется только от ПЕРВОЙ созданной.
Что же делать?


Название: Re: Пример инвентаря
Отправлено: Xageu от Январь 03, 2014, 15:52:35
Обращаться не к имени объекта, а конкретно к подобранному объекту


Название: Re: Пример инвентаря
Отправлено: sanya9090 от Январь 03, 2014, 16:14:30
Обращаться не к имени объекта, а конкретно к подобранному объекту

Как будто не ответил, а просто сформулировал мой вопрос по короче.) Как?
Что конкретно прописать в act_on='  '   ?




Название: Re: Пример инвентаря
Отправлено: AndrewVideoGames от Январь 03, 2014, 16:41:39
 Что ты непонятного, Хадей сказал, что надо обращаться не к имени объекта(ибо объектов с таким именем несколько), а к конкретному экземпляру, то есть его  номеру, id.


Название: Re: Пример инвентаря
Отправлено: sanya9090 от Январь 03, 2014, 18:02:36
Что ты непонятного, Хадей сказал, что надо обращаться не к имени объекта(ибо объектов с таким именем несколько), а к конкретному экземпляру, то есть его  номеру, id.

Что-то именно на надевании вещей в этом инвентаре и не получается.
Тут как то через execute_string вызывается который считывает код из строки и ни как у меня не соотносит с обзектом.
В общем кто может гляньте именно в этот пример. и попробуйте сделать рандомные характеристики надеваемой вещи.
Знаний у меня не хватает.(


Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Январь 25, 2014, 19:04:22
Может уже и не актуально, но все же...

Обращаться не к имени объекта, а конкретно к подобранному объекту
Тут и так идет обращение к конкретному экземпляру, а не к имени объекта.

Когда мы взяли вещь - экземпляр удаляется. Когда выбросили - создается новый. Соответственно при создании опять срабатывает random и параметры будут уже другие. Решение
При создании экземпляра во время выбрасывания выполнять код не с рандомом, а с постоянным числом при помощи такого кода создания
Код:
with(instance_create(..., ..., ...))
{
//здесь код который должен быть в create предмета, только вместо рандома конкретное число (переменная)
}
Этот код будет выполнен после события create.

Но где-то нужно хранить эти самые параметры. Я думаю нужно добавить еще одну переменную act_on и act_off, в которой будет код, срабатывающий при выбрасывании предмета. В этот код и записывать числа, выбранные в самом начале рандомом.

p.s.: может быть не достаточно подробно описал, но, надеюсь общий смысл понятен.


Название: Re: Пример инвентаря
Отправлено: ZickDRD от Май 11, 2014, 16:13:33
В прилепленных файлах все аннотации выдаются квадратами. В итоге почти нет пользы...


Название: Re: Пример инвентаря
Отправлено: Troir от Май 11, 2014, 16:28:50
В прилепленных файлах все аннотации выдаются квадратами. В итоге почти нет пользы...

При должном желании можно разобраться и без комментариев.  sm:)


Название: Re: Пример инвентаря
Отправлено: Fur от Май 11, 2014, 16:31:20
В прилепленных файлах все аннотации выдаются квадратами. В итоге почти нет пользы...
Потому что исходники для гм8, а у тебя 8.1 либо гмс.


Название: Re: Пример инвентаря
Отправлено: Nordok от Июль 16, 2014, 14:37:53
Dva_kota, адаптируй пример под GM:S и выкладывай на YYMarketplace


Название: Re: Пример инвентаря
Отправлено: stasmen07 от Январь 04, 2015, 08:30:54
Сделайте инвентарь с крафтом как в майнкрафт, с экипировкой и сундуками.
Ну пожалуйста sm_milo .


Название: Re: Пример инвентаря
Отправлено: onChyk от Январь 04, 2015, 09:12:18
"Сделайте за меня всю суть игры"


Название: Re: Пример инвентаря
Отправлено: Nobody от Январь 05, 2015, 19:12:18
Здравствуйте, столкнулся с такой проблемой: если перетаскивать, например, шлем из окна экипировки на другой шлем в окне инвентаря (дабы заменить его) происходит, как я понял action_off и всё, спрайт в ячейке меняется, а вот action_on предмета не выполняет. Помогите решить данную проблему, пожалуйста. :sideways:


Название: Re: Пример инвентаря
Отправлено: sergei248 от Октябрь 17, 2015, 23:24:55
Всем привет друзья,подскажите пожалуйста ,возможно ли как-то реализовать управление в инвентаре не мышью ,а с клавиатуры ...допустим стрелками, а левую и правую клавишу на мышке ,заменить на любой другой на клавиатуре...помогите ,перерыл весь инет в поиске примера инвентаря на клавишах,ни чего не нашёл ,все выше выложенные примеры от Dva_kota то что нужно ,вот только управление в игре ,у меня должно быть только с клавиатуры....


Название: Re: Пример инвентаря
Отправлено: Goo от Октябрь 18, 2015, 07:26:14
Цитировать
Всем привет друзья,подскажите пожалуйста ,возможно ли как-то реализовать управление в инвентаре не мышью ,а с клавиатуры
Да возможно,
первое, в массиве инвентаря введи "Понятие" активная
типа

create
Код:

/* давно не видел код этого инвентаря, а качать не хочу,
    но я уверен в том, что предварительно инвентарь "Очищается" */
/* Отсюда следует, что тебе одну из клеток надо "Пометить" - типа она активна */

for ( i = 0      i < WidthArray      i ++ )
    {
         for ( j = 0      j < HeightArray    j ++ )
             {
                   Active [ i ,  j ] = false // Почистили инвентарь
              }
    }

Active [ 0 , 0 ] = true // активируем первую ячейку , это один из возможных алгоритмов, можно и по другому сделать


Затем перемещение с одной ячейки на другую
допустим это клавиши-стрелки

Код:

// пишу по сути словами, не помню как код этих влавишь в gml выглядит, могу написать не правильно

if left press // если левая нажата, в gml скорее так if keyboard_check ( vk_left ) { ... } , как - то так
    {
         /* Предварительно проверяя, можно ли сдвинуться в ту или иную сторону,
             ведь левее ячейки [0,0] ячеек нет, поэтому проверку сам делай, во всех клавишах
             i и j - это координаты текушей активной ячейки, а правильнее сказать индексы активной ячейки массива,
             из которого сделан инвентарь */
         Active [ i , j ] = false
         Active [ i -1 , j ] = true
    }

if right press
    {
         Active [ i , j ] = false
         Active [ i +1 , j ] = true
    }

if down preess
    {
         Active [ i , j  ] = false
         Active [ i  , j-1 ] = true
    }

if up press
    {
         Active [ i , j ] = false
         Active [ i  , j +1] = true
    }


далее в клавише которая заменяет левую / правую кнопку мыши ставишь проверку

Код:

if Active [ i , j ]
    {
         // дествия с активной ячейкой в позиции i , j
    }


А ДАЛЬШЕ САМ!

Добавлено: Октябрь 18, 2015, 08:37:06


Добавлено: Октябрь 18, 2015, 08:43:47
Ах да, забыл самое главное, в том месте где должен "рисоваться" инвентарь
надо добавить

Код:

/* x1 , y1 координаты левого верхнего угла ячейки с показателем Active
    x2 , y2 координаты правого нижнего угла ячейки с показателем Active
    эти координаты вычтешь сам, это будет рамка вокруг активной ячейки */

if Active [ i , j ]
    {
         draw_rectangle ( x1 , y1 , x2 , y2 , true )
    }



Название: Re: Пример инвентаря
Отправлено: sergei248 от Октябрь 18, 2015, 11:54:48
Цитировать
Всем привет друзья,подскажите пожалуйста ,возможно ли как-то реализовать управление в инвентаре не мышью ,а с клавиатуры
Да возможно,
первое, в массиве инвентаря введи "Понятие" активная
типа

Ну в общих чертах вроде бы всё понятно ,спасибо за помощь ,буду пробовать... sm_good

Добавлено: Октябрь 19, 2015, 19:46:47
Цитировать
/* x1 , y1 координаты левого верхнего угла ячейки с показателем Active
    x2 , y2 координаты правого нижнего угла ячейки с показателем Active
    эти координаты вычтешь сам, это будет рамка вокруг активной ячейки */

if Active [ i , j ]
    {
         draw_rectangle ( x1 , y1 , x2 , y2 , true )
    }

всё работает без ошибок...
Не могу разобраться с координатами...
пишу код в event draw в draw инвентаря:

Код:
if Active[slot_x,slot_y]
{
draw_rectangle (slot_x+32,slot_y+32,slot_x+64,slot_y+64,true)
}

квадрат рисуется в первой ячейке ,но он не реагируют на нажатие клавиш left,right....и при движении игрока ,остаётся на самом фоне комнаты,как-бы съезжая с ячейки инвентаря

в степе прописал:

Код:
if keyboard_check(vk_left)
{
Active [slot_x,slot_y] = false
Active [slot_x-1,slot_y] = true
}

if keyboard_check(vk_right)
{
Active [slot_x,slot_y] = false
Active [slot_x+1,slot_y] = true
}

if keyboard_check(vk_down)
{
Active [slot_x,slot_y] = false
Active [slot_x,slot_y+1] = true
}

if keyboard_check(vk_up)
{  
Active [slot_x,slot_y] = false
Active [slot_x,slot_y-1] = true
}








Название: Re: Пример инвентаря
Отправлено: Goo от Октябрь 19, 2015, 19:51:54
от координат отнимай координаты вида, а лучше кинь исходник, помогу поправить


Название: Re: Пример инвентаря
Отправлено: sergei248 от Октябрь 19, 2015, 20:00:56
ок ,примного благодарен...)


Название: Re: Пример инвентаря
Отправлено: Goo от Октябрь 19, 2015, 20:15:31
погодь минуту

Добавлено: Октябрь 19, 2015, 20:51:03
Держи


Название: Re: Пример инвентаря
Отправлено: sergei248 от Октябрь 19, 2015, 21:24:21
wow , спасибо приогромнейшее +++ ,целый день сижу туплю...)))

Добавлено: Октябрь 20, 2015, 01:11:58
Прошу прощения за наглую наглость ,но не мог бы ты ещё добавить к примеру, как задействовать клавиши на клавиатуре,вместо кнопок на мыши ,не могу догнать, как заменить эти строчки ...

 klick_x=floor((mouse_x-x)/slot_width_x);
 klick_y=floor((mouse_y-y)/slot_height_y);



Название: Re: Пример инвентаря
Отправлено: Dva_Kota от Октябрь 20, 2015, 10:19:42
Всё на много проще.
Нужно везде убрать
Код:
klick_x=floor((mouse_x-x)/slot_width_x);
klick_y=floor((mouse_y-y)/slot_height_y);

В коде создания инвентаря
Код:
//Это будут координаты ячейки, выбранной по умолчанию
klick_x=0;
klick_y=0;

В нажатии клавиш выбора ячейки менять соответственно переменные klick_x и klick_y (предварительно сделав проверку, чтобы не выйти за пределы инвентаря) и события нажатия клавиш мыши заменить на события нажатия каких-то других клавиш. Больше ничего можно не менять и не добавлять дополнительный массивы и переменные.


Название: Re: Пример инвентаря
Отправлено: sergei248 от Октябрь 20, 2015, 23:10:08
плиз ,если не сложно,добавите нужный код в клавиши передвижения по инвентарю ,не соображу как это сделать ...,удалил все ненужные строчки ,заменил eventы на нажатие клавиш ...
да и не пойму опять куда вставить спрайт select(рамка навигации в инвентаре) в draw...
буду очень признателен... sm_hi3


Название: Re: Пример инвентаря
Отправлено: Goo от Октябрь 21, 2015, 13:41:34
Как я понял ты удалил все, и не помнишь как там было, скачай тот пример, что я скидывал, там все это есть.
и это
Цитировать
код в клавиши передвижения по инвентарю
и это
Цитировать
куда вставить спрайт select(рамка навигации в инвентаре) в draw


Название: Re: Пример инвентаря
Отправлено: sergei248 от Октябрь 21, 2015, 15:43:47
Ну всё ,аллилуйя ,наконец то разобрался ,спасибо за помощь sm_good

Добавлено: Октябрь 22, 2015, 00:31:00
Люди,а кто нибудь знает, возможно ли как нить сделать так ,чтобы при использовании предмета (к примеру находящегося на второй ячейке)все остальные предметы в инвентаре передвинулись на пустую ячейку за место использованного предмета...?


Название: Re: Пример инвентаря
Отправлено: Troir от Октябрь 22, 2015, 11:48:47
Ну всё ,аллилуйя ,наконец то разобрался ,спасибо за помощь sm_good

Добавлено: Октябрь 22, 2015, 00:31:00
Люди,а кто нибудь знает, возможно ли как нить сделать так ,чтобы при использовании предмета (к примеру находящегося на второй ячейке)все остальные предметы в инвентаре передвинулись на пустую ячейку за место использованного предмета...?

Пишешь скрипт, который будет делать следующее:
1) Создает цикл, который перебирает все ячейки инвентаря
2) Если ячейка пуста, а следующая за ней ячейка не пуста, то переносишь содержимое ячейки в пустую ячейку и тд (важно только учесть, что когда цикл дойдет до конца, будет проверяться последняя и следующая за ней ячейка(которой не существует), поэтому в ходе цикла делать проверку, а есть ли вообще следующая ячейка)

Скрипт должен вызываться, когда предмет использован.


Название: Re: Пример инвентаря
Отправлено: sergei248 от Октябрь 24, 2015, 00:22:04
Пожалуйста помогите ,возникла проблема с переменной variable_local_exists в obj_smil_base ,её нет в студии ,как быть ?? может есть альтернатива ??


Название: Re: Пример инвентаря
Отправлено: Goo от Октябрь 24, 2015, 10:14:17
все просто, убери везде проверку на существование переменной,
а в тех предметах, на которые потом инвентарь будет жаловаться, мол нет такой переменной,
просто занеси им эту переменную в create, либо равную
9999 - когда предметов в ячейке должно быть до хера,
либо == 1 - когда предмет лишь в единичном экземпляре помещается в ячейку ( точнее хочешь, чтобы он был один )


Название: Re: Пример инвентаря
Отправлено: sergei248 от Октябрь 24, 2015, 18:00:21
все просто, убери везде проверку на существование переменной,
а в тех предметах, на которые потом инвентарь будет жаловаться, мол нет такой переменной,
просто занеси им эту переменную в create, либо равную
9999 - когда предметов в ячейке должно быть до хера,
либо == 1 - когда предмет лишь в единичном экземпляре помещается в ячейку ( точнее хочешь, чтобы он был один )

Спасибо ,всё заработало)))+++

Добавлено: Октябрь 25, 2015, 15:35:22
Люди подскажите :у меня в obj_inv  навигация в ячейках назначена на стрелки клавиатуры в step и управление гг тоже на эти же стрелки,при входе в инвентарь деактивируются все объекты, соответственно кроме obj_inv ,но так как obj_inv должен быть всегда активирован, все действия нажатий клавиш гг отражаются в инвентаре.. как мне отключить скрипт отвечающий за навигацию в инвентаре на тот момент пока я управляю гг,и как включить этот скрипт при входе в инвентарь  sm_???


Название: Re: Пример инвентаря
Отправлено: Troir от Октябрь 25, 2015, 17:21:12
Люди подскажите :у меня в obj_inv  навигация в ячейках назначена на стрелки клавиатуры в step и управление гг тоже на эти же стрелки,при входе в инвентарь деактивируются все объекты, соответственно кроме obj_inv ,но так как obj_inv должен быть всегда активирован, все действия нажатий клавиш гг отражаются в инвентаре.. как мне отключить скрипт отвечающий за навигацию в инвентаре на тот момент пока я управляю гг,и как включить этот скрипт при входе в инвентарь  sm_???

Задай переменную, например inv_active. Когда инвентарь открыт, она будет равна 1, когда закрыт - 0. И в коде движения персонажа делай проверку:
Код:
if not inv_active
{
   //код движения персонажа
}


Название: Re: Пример инвентаря
Отправлено: sergei248 от Октябрь 25, 2015, 19:01:40
Люди подскажите :у меня в obj_inv  навигация в ячейках назначена на стрелки клавиатуры в step и управление гг тоже на эти же стрелки,при входе в инвентарь деактивируются все объекты, соответственно кроме obj_inv ,но так как obj_inv должен быть всегда активирован, все действия нажатий клавиш гг отражаются в инвентаре.. как мне отключить скрипт отвечающий за навигацию в инвентаре на тот момент пока я управляю гг,и как включить этот скрипт при входе в инвентарь  sm_???

Задай переменную, например inv_active. Когда инвентарь открыт, она будет равна 1, когда закрыт - 0. И в коде движения персонажа делай проверку:
Код:
if not inv_active
{
   //код движения персонажа
}

ни как не получается, может есть другой выход ,не затрагивая управление гг..
может возможно как то создать глобальную переменную, отвечающую за включение и отключение скрипта  управления навигацией в obj_inv  в step...?


Название: Re: Пример инвентаря
Отправлено: Troir от Октябрь 25, 2015, 20:35:33
может возможно как то создать глобальную переменную, отвечающую за включение и отключение скрипта  управления навигацией в obj_inv  в step...?

Можно. Делается точно также. Только когда inv_active=1, то тогда навигация по инвентарю активна. Если 0 - то нет.



Название: Re: Пример инвентаря
Отправлено: sergei248 от Октябрь 25, 2015, 21:04:02
может возможно как то создать глобальную переменную, отвечающую за включение и отключение скрипта  управления навигацией в obj_inv  в step...?

Можно. Делается точно также. Только когда inv_active=1, то тогда навигация по инвентарю активна. Если 0 - то нет.


ok понял ,буду пробовать ...спасибо..

Добавлено: Октябрь 26, 2015, 22:23:20
может возможно как то создать глобальную переменную, отвечающую за включение и отключение скрипта  управления навигацией в obj_inv  в step...?

Можно. Делается точно также. Только когда inv_active=1, то тогда навигация по инвентарю активна. Если 0 - то нет.

ok понял ,буду пробовать ...спасибо..


В общем решил проблему так: в obj_inv создал переменную global.inv_active ,сделал её false, в step вставил код:
if global.inv_active
{
//скрипт навигации по инвентарю//;
}
далее в включении инвентаря global.inv_active=true при выключении false
и всё.)
гг не затрагивал так как ,его объект деактивируется при входе в инвентарь.

Так написал,мож кому интересно...


Название: Re: Пример инвентаря
Отправлено: Konstruktor001 от Ноябрь 15, 2015, 13:46:30
Делал по примеру свой инвентарь, и выдаёт ошибку если очень быстро водить курсором по инвентарю.
Ошибка в Draw вот в этом куске кода
///////////////////////////
if (position_meeting(mouse_x,mouse_y,o_ini) { //
mousx=floor((mouse_x-x)/ini_w);//
mousy=floor((mouse_y-y)/ini_h);//
draw_set_font(name)//
if naimen_ob[mousx,mousy]!='' && naimen_ob[mousx,mousy]!='@'{
draw_text(view_xview[0]+340,view_yview[0]+0,russ_name[mousx,mousy])//русское имя предмета в координатах курсора
}}
А ошибка такая  
############################################################################################
FATAL ERROR in
action number 1
of Draw Event
for object o_ini:

Array index must be +'ve
 at gml_Object_o_ini_DrawEvent_1 (line 15) - if  naimen_ob[mousx,mousy]!='' && naimen_ob[mousx,mousy]!='@'
############################################################################################


Название: Re: Пример инвентаря
Отправлено: Goo от Ноябрь 15, 2015, 14:26:58
по идее такого быть не должно,
но раз уж так случилось, то

Код:

if position_meeting ( mouse_x , mouse_y , o_ini )
    {
        mousx = floor (( mouse_x - x ) / ini_w )
        mousy=floor (( mouse_y - y ) / ini_h )

        if mousx > -1
        and mousy > -1
        and mousx < количество_ячеек_в_ширину
        and mousy > количество_ячеек_в_высоту
               {
                               //       твой код
               }
    }


Ну как - то так!

Добавлено: Ноябрь 15, 2015, 14:29:47
Код:
russ_name[mousx,mousy]

замени на string ( russ_name[mousx,mousy] ) // мало ли, вдруг там хранится не строковая величина


Название: Re: Пример инвентаря
Отправлено: Konstruktor001 от Ноябрь 15, 2015, 14:58:00
по идее такого быть не должно,
но раз уж так случилось, то

Код:

if position_meeting ( mouse_x , mouse_y , o_ini )
    {
        mousx = floor (( mouse_x - x ) / ini_w )
        mousy=floor (( mouse_y - y ) / ini_h )

        if mousx > -1
        and mousy > -1
        and mousx < количество_ячеек_в_ширину
        and mousy > количество_ячеек_в_высоту
               {
                               //       твой код
               }
    }


Ну как - то так!

Добавлено: Ноябрь 15, 2015, 14:29:47
Код:
russ_name[mousx,mousy]

замени на string ( russ_name[mousx,mousy] ) // мало ли, вдруг там хранится не строковая величина
Помогло, только имя предмета теперь не показывает, а показывает только если убрать
if mousx > -1
and mousy > -1
and mousx < количество_ячеек_в_ширину
and mousy > количество_ячеек_в_высоту
А без них ошибка.
А поможет если написать вот так
 if (mousx > -1 && mousy > -1 && mousx < 8 && mousy > 2){             
   mousx=0
   mousy=0
   }
Отдельно от общего кода.


Название: Re: Пример инвентаря
Отправлено: Goo от Ноябрь 15, 2015, 15:29:43
покажи весь код, ( точнее весь фрагмент, где текст должен рисоваться )


Название: Re: Пример инвентаря
Отправлено: Konstruktor001 от Ноябрь 15, 2015, 15:35:15
Ну вот это
if position_meeting ( mouse_x , mouse_y , o_ini )
    {
    mousx = floor (( mouse_x - x ) / ini_w )
    mousy=floor (( mouse_y - y ) / ini_h )
draw_set_font(name) 
if naimen_ob[mousx,mousy]!='' && naimen_ob[mousx,mousy]!='@'{
draw_text(view_xview[0]+340,view_yview[0]+0,russ_name[mousx,mousy])
///////
Это переменная отвечает за русское название
russ_name[mousx,mousy]
///////////
Это имя на английском, для чтения в коде
naimen_ob[mousx,mousy]
//////////////
Я попробовал написать отдельно в Draw вроде всё нормально, но не уверен.
 if (mousx > -1 && mousy > -1 && mousx < 8 && mousy > 2){             
   mousx=0
   mousy=0}


Название: Re: Пример инвентаря
Отправлено: Goo от Ноябрь 15, 2015, 15:49:47
Код:

 /*
        ПОПРОБУЙ ТАК!
*/

if position_meeting ( mouse_x , mouse_y , o_ini )
{
    mousx = floor (( mouse_x - x ) / ini_w )
    mousy = floor (( mouse_y - y ) / ini_h )
   
    // draw_set_font(name) 
                            /*
                               это перетащи в create, какждый шаг присваивать то,
                               что можно один раз, не обязательно
                            */
 
    if naimen_ob [ mousx , mousy ] != ''
    and naimen_ob [ mousx , mousy ] != '@'
        {
       
            if mousx > -1
            and mousy > -1
            and mousx < 8  // замени на переменную, которую хранит число 8 - колличество ячеек
            and mousy > 2  // и сдесь, использование "магических чисел" - не есть хорошо.
                {             
           
                     draw_text ( view_xview[0] +340 , view_yview[0] , russ_name [ mousx , mousy ] )
                    // проверь на всякий случай массив russ_name , может он пуст.                   
               
                    /*
                        это
                            mousx=0
                            mousy=0
                        не к чему,
                        т.к. ты все рано их в следующем шаге приравняешь к
                            mousx = floor (( mouse_x - x ) / ini_w )
                            mousy = floor (( mouse_y - y ) / ini_h )                       
                       
                    */
                }
        }
}


Добавлено: Ноябрь 15, 2015, 15:57:11
Тьфу, туплю, лучше так

Код:

/*
        ПОПРОБУЙ ТАК!
*/

if position_meeting ( mouse_x , mouse_y , o_ini )
{
    mousx = floor (( mouse_x - x ) / ini_w )
    mousy = floor (( mouse_y - y ) / ini_h )
   
    // draw_set_font(name) 
                            /*
                               это перетащи в create, какждый шаг присваивать то,
                               что можно один раз, не обязательно
                            */
    if mousx > -1
    and mousy > -1
    and mousx < 8  // замени на переменную, которую хранит число 8 - колличество ячеек
    and mousy > 2  // и сдесь, использование "магических чисел" - не есть хорошо.
        {
     
            if naimen_ob [ mousx , mousy ] != ''
            and naimen_ob [ mousx , mousy ] != '@'
                {                         
                   
                             draw_text ( view_xview[0] +340 , view_yview[0] , russ_name [ mousx , mousy ] )
                            // проверь на всякий случай массив russ_name , может он пуст.                   
                       
                            /*
                                это
                                    mousx=0
                                    mousy=0
                                не к чему,
                                т.к. ты все рано их в следующем шаге приравняешь к
                                    mousx = floor (( mouse_x - x ) / ini_w )
                                    mousy = floor (( mouse_y - y ) / ini_h )                       
                               
                            */
                }
        }
}



Название: Re: Пример инвентаря
Отправлено: Konstruktor001 от Ноябрь 15, 2015, 16:51:54
// draw_set_font(name)  
                            /*
                               это перетащи в create, какждый шаг присваивать то,
                               что можно один раз, не обязательно
                            */
Но в create не будет работать, текст всё-равно не отрисовывается
Проблема не уходит, уходит только если
if mousx > -1
and mousy > -1
and mousx < 8 
and mousy > 2
написать это, но текст перестаёт рисоваться.


Название: Re: Пример инвентаря
Отправлено: Gans от Январь 09, 2016, 14:38:45
Доброго времени суток! Товарищи, подскажите,как проще всего реализовать предмет, который занимает несколько ячеек. Т.е в данном примере каждый предмет занимает одну ячейку в массиве. Мы перебираем ячейки пока не находим свободную и записываем в нее данные предмета. Допустим, есть предмет который должен занимать три ячейки по горизонтали, как это можно сделать, ведь например первая ячейка может быть свободна а следующая занята. Каша в голове, помогите придти к истине.


Название: Re: Пример инвентаря
Отправлено: S_Kleer от Январь 09, 2016, 16:16:25
Делать проверку не по одной ячейки,а сразу по 3.

Т.е. примерно так:

Код:
for (i=0; i<20; i++)
{
    for (j=0; j<15; j++)
    {
        if inventory[i,j] = 0 && inventory[i + 1,j] = 0 && inventory[i + 2,j] = 0
        {
            inventory[i,j] = 1;
            inventory[i + 1,j] = 1;
            inventory[i + 2,j] = 1;
            exit;
        }
    }
}

Но это слишком чугунное решение. В плане того, что одним массивом не обойтись.
Несколько раз я делал такой инвентарь, но не доделывал до идеала. Использовал 4 массива.
1) Сам предмет
2) Занятость ячеек (т.е. свободна или занята)
3) Ссылка из занятой ячейки в конкретный предмет (Допустим, предмет занимает 3 ячейки по горизонтали, при клике на последнюю или на среднюю, берём информацию из самой левой)
4) Стек предмета


Название: Re: Пример инвентаря
Отправлено: TeTaTeT от Январь 09, 2016, 16:21:23
Пример инвентаря в стиле Diablo 2. (http://game-maker.ru/infusions/pro_download_panel/download.php?did=1425)


Название: Re: Пример инвентаря
Отправлено: Gans от Январь 09, 2016, 16:38:39

Благодарю, попробую помудрить. Если есть возможность описать в общих чертах этот пункт
или скинуть пример, что бы поковырять

Добавлено: Январь 09, 2016, 16:40:43
Пример инвентаря в стиле Diablo 2. (http://game-maker.ru/infusions/pro_download_panel/download.php?did=1425)

Я находил данный пример. К сожалению он не запускается и там много иных фишек, которые отвлекают от сути, но все равно спасибо


Название: Re: Пример инвентаря
Отправлено: S_Kleer от Январь 09, 2016, 19:02:54
Прикрепил.
Я этот пример как раз для хелрума и делал, но потом как-то забылось и бросилось...

Эдакий, движок инвентаря хотел сделать, где всё можно парой функций настроить.


Название: Re: Пример инвентаря
Отправлено: Gans от Январь 09, 2016, 19:14:55
Прикрепил.
Я этот пример как раз для хелрума и делал, но потом как-то забылось и бросилось...

Эдакий, движок инвентаря хотел сделать, где всё можно парой функций настроить.

Шикарно, буду ковырять, спасибо за помощь!


Название: Re: Пример инвентаря
Отправлено: S_Kleer от Январь 09, 2016, 19:33:48
Ой. Забыл же самое главное.
Он не доделан.  :xD:


Название: Re: Пример инвентаря
Отправлено: Gans от Январь 09, 2016, 19:50:33
Ой. Забыл же самое главное.
Он не доделан.  :xD:

Там более менее понятно, принцип и ход мыслей. А то я начинаю городить кучу лишнего, так что мне и так пойдет.


Название: Re: Пример инвентаря
Отправлено: geroy231 от Январь 09, 2016, 21:52:25
Доброго времени суток! Товарищи, подскажите,как проще всего реализовать предмет, который занимает несколько ячеек. Т.е в данном примере каждый предмет занимает одну ячейку в массиве. Мы перебираем ячейки пока не находим свободную и записываем в нее данные предмета. Допустим, есть предмет который должен занимать три ячейки по горизонтали, как это можно сделать, ведь например первая ячейка может быть свободна а следующая занята. Каша в голове, помогите придти к истине.
Есть пример инвентаря на ds_grid, как раз что бы работать сразу с несколькими ячейками. Выложу в понедельник, когда дома буду.


Название: Re: Пример инвентаря
Отправлено: Gans от Январь 09, 2016, 21:59:16
Доброго времени суток! Товарищи, подскажите,как проще всего реализовать предмет, который занимает несколько ячеек. Т.е в данном примере каждый предмет занимает одну ячейку в массиве. Мы перебираем ячейки пока не находим свободную и записываем в нее данные предмета. Допустим, есть предмет который должен занимать три ячейки по горизонтали, как это можно сделать, ведь например первая ячейка может быть свободна а следующая занята. Каша в голове, помогите придти к истине.
Есть пример инвентаря на ds_grid, как раз что бы работать сразу с несколькими ячейками. Выложу в понедельник, когда дома буду.

Было бы здорово, любой пример пригодится. Если он еще и с комментариями, цены нет.


Название: Re: Пример инвентаря
Отправлено: sergei248 от Октябрь 02, 2016, 23:32:19
Всем привет ,подскажите кто знает как поменять язык в названии предмета (допустим с англ на рус)
Создал объект для переключения языков в меню игры с помощью глобальных переменных (не буду писать подробности кода)
Я так понял Надо что-то мудрить с переменной name в obj_smil_base, после того как предмет взят язык уже не поменять, в этом то и вся беда..
Помогите кто чем может...пример использовал Dva_Kota__bodimir__1.0026


Название: Re: Пример инвентаря
Отправлено: Nonyx от Октябрь 03, 2016, 10:18:20
Всем привет ,подскажите кто знает как поменять язык в названии предмета (допустим с англ на рус)
Создал объект для переключения языков в меню игры с помощью глобальных переменных (не буду писать подробности кода)
Я так понял Надо что-то мудрить с переменной name в obj_smil_base, после того как предмет взят язык уже не поменять, в этом то и вся беда..
Помогите кто чем может...пример использовал Dva_Kota__bodimir__1.0026

Когда-то меня за использование русского языка в гамаке  грубо послали на юг и посоветовали бросать это безполезное дело, посему советую вам либо пользоваться гугл транслитом для перевода, либо записывать английскими буквами по-русски (obj_kotleta, pbj_borsh, obj_pulya, obj_pistolet, obj_putana, obj_putin и т.д.)


Название: Re: Пример инвентаря
Отправлено: 2009yasha2009 от Октябрь 03, 2016, 12:15:50
Всем привет ,подскажите кто знает как поменять язык в названии предмета (допустим с англ на рус)
Создал объект для переключения языков в меню игры с помощью глобальных переменных (не буду писать подробности кода)
Я так понял Надо что-то мудрить с переменной name в obj_smil_base, после того как предмет взят язык уже не поменять, в этом то и вся беда..
Помогите кто чем может...пример использовал Dva_Kota__bodimir__1.0026
Самое удобное, подключить работу с ini+двумерный массив.
В старте игры, загружаете из ини текст в двумерный массив, например именуемый letters.
где первый индекс - номер языка(0-английский, 1-русский, 2-впарваопруйский и т.д.)
А второй - номер фразы(0-меч/sword,1-здоровье/hp и т.д.)

И в меню, где выбор языка, переменная отвечающая за язык, например language, меняет значение первого индекса, отвечающего за язык. Вот и всё.
Ах да. и потом, в инвентаре выводить необходимую фразу. Вооооооот. =)


Название: Re: Пример инвентаря
Отправлено: DmitryDS от Октябрь 03, 2016, 12:37:57
Тут (http://forum.hellroom.ru/index.php?topic=23100.0) можно посмотреть разные варианты реализации локализаций, но я, в отличии от Яши, не уверен, что это то, что вы ищете.


Название: Re: Пример инвентаря
Отправлено: sergei248 от Октябрь 03, 2016, 22:31:40
спасибо большое, буду пробовать...


Название: Re: Пример инвентаря
Отправлено: Troir от Октябрь 04, 2016, 08:47:26
либо записывать английскими буквами по-русски (obj_kotleta, pbj_borsh, obj_pulya, obj_pistolet, obj_putana, obj_putin и т.д.)

Очень плохой совет. Никогда так не делай.


Название: Re: Пример инвентаря
Отправлено: Rendoul от Октябрь 04, 2016, 15:16:51
либо записывать английскими буквами по-русски (obj_kotleta, pbj_borsh, obj_pulya, obj_pistolet, obj_putana, obj_putin и т.д.)

Очень плохой совет. Никогда так не делай.



Название: Re: Пример инвентаря
Отправлено: Dmi7ry от Октябрь 04, 2016, 15:48:48
А где место русскому?  sm:)
1С. Сомнительная хрень.


Название: Re: Пример инвентаря
Отправлено: DmitryDS от Октябрь 04, 2016, 15:51:17

 sm_offtop



Название: Re: Пример инвентаря
Отправлено: Rendoul от Октябрь 04, 2016, 16:18:19
Операционки на русском не хватает нормальной, а не БолгенОСа. Win-совместимой sm_epik

ReactOS (https://ru.wikipedia.org/wiki/ReactOS) потихоньку пилят, но ей еще далекто до релиза sm:)

 А BolgenOS - крутая вещь, даже лучше win7. Не верите? Гляньте:


Название: Re: Пример инвентаря
Отправлено: DmitryDS от Октябрь 04, 2016, 16:44:37
Загузка за 5 секунд - это вещь. Только я не знаю, что она делает. Берет пользователя за жопу (т.е. гузку)?


Название: Re: Пример инвентаря
Отправлено: Rendoul от Октябрь 04, 2016, 16:55:13
Загузка за 5 секунд - это вещь. Только я не знаю, что она делает. Берет пользователя за жопу (т.е. гузку)?

А я о чем? Крутая штука, эта BolgenOS sm:) Ну а если серьезно, то эт надо ж так скоммуниздить сплагиатить, чтоб о тебе пресса заговорила :xD:


Название: Re: Пример инвентаря
Отправлено: MusNik от Октябрь 04, 2016, 18:49:38
А BolgenOS - крутая вещь, даже лучше win7. Не верите? Гляньте:

Обои это конечно круто!!!  sm_good sm_good sm_good



Название: Re: Пример инвентаря
Отправлено: Rendoul от Октябрь 04, 2016, 19:47:24

Обои это конечно круто!!!  sm_good sm_good sm_good

Мне больше "заГУзка за пять секунд" нравится sm:)


Название: Re: Пример инвентаря
Отправлено: Chen от Февраль 19, 2017, 21:04:15
Всем привет! Никто не подскажет, как можно заменить многочисленно используемый execute_string? В GMS эта функция, увы, вырезана с корнями.


Название: Re: Пример инвентаря
Отправлено: SilentPhil от Февраль 20, 2017, 04:47:10
Всем привет! Никто не подскажет, как можно заменить многочисленно используемый execute_string? В GMS эта функция, увы, вырезана с корнями.
Пересмотром архитектуры кода. Если вам нужен execute_string, значит вы делаете что-то не так. Опишите свой юзкейс.


Название: Re: Пример инвентаря
Отправлено: Aliery от Апрель 09, 2017, 20:25:32
У меня вот тоже возникла проблема с вашим примером в GMS...Вроде все настроил, все ставится, поднимается, в общем работает, а из-за отсутствия функции execute_string я не понимаю как поменять значения, которые берутся из переменных act_on и act_off соответственно....Сможете подсказать альтернативу?


Название: Re: Пример инвентаря
Отправлено: AndrewVideoGames от Апрель 09, 2017, 20:57:20
У меня вот тоже возникла проблема с вашим примером в GMS...Вроде все настроил, все ставится, поднимается, в общем работает, а из-за отсутствия функции execute_string я не понимаю как поменять значения, которые берутся из переменных act_on и act_off соответственно....Сможете подсказать альтернативу?
Для чего вы её используете? Какая цель? К примеру, если с помощью execute_string вы получаете название ресурса: execute_string('return s_'+string(number)), эту функцию в gms можно заменить на asset_get_index('s_'+string(number))


Название: Re: Пример инвентаря
Отправлено: Aliery от Апрель 09, 2017, 22:01:57
Код:
if (n_x_1 != -1)
        {
        if (txt[n_x_1,n_y_1]='')
            {
            txt[n_x_1,n_y_1]=other.name;
            spr[n_x_1,n_y_1]=other.sprite_index;
            item[n_x_1,n_y_1]=1;
            name_obj[n_x_1,n_y_1]=other.object_index;
            max_number[n_x_1,n_y_1]=1;
            act_on[n_x_1,n_y_1] = other.act_on;
            act_off[n_x_1,n_y_1] = other.act_off;
            item_type[n_x_1,n_y_1] = other.item_type;
            r_weap = true;
            execute_string('act_on[n_x_1,n_y_1]');
Вот кусок кода из примера инвентаря. Как я понял там сначала идет оператор switch(определение клеток), затем условия проверки слота и добавление предмета в слот. Переменная act_on отвечает за действие предмета на персонажа, но я не понял как использовать ее правильно, чтобы все работало.
Спс за подсказду, попробую воспользоваться ей.
А с помощью ds_list, ds_map можно ли сделать?

PS. Файл "Пример инвентаря и экипировки", Обект "obj_item_base".


Название: Re: Пример инвентаря
Отправлено: Andrey_27 от Январь 26, 2019, 23:53:25
Всем привет.
Подскажите пожалуйста, как можно сохранить пропорции инвентаря при смене параметров view_wview, view_hview.
Кликабельная область смещается.


Название: Re: Пример инвентаря
Отправлено: Fur от Январь 27, 2019, 00:01:50
Примеры существуют для изучения, а не для копипасты в свои проекты. Если ты не удосужился понять, как что работает и почитать о Draw GUI, то уж извиняй.


Название: Re: Пример инвентаря
Отправлено: Andrey_27 от Январь 29, 2019, 15:35:01
Отрисовка в Draw GUI к сожалению не решила проблему. Объект сползает в сторону от спрайта.
Не могу понять в чём дело.


Название: Re: Пример инвентаря
Отправлено: AndrewVideoGames от Январь 29, 2019, 15:47:11
Отрисовка в Draw GUI к сожалению не решила проблему. Объект сползает в сторону от спрайта.
Не могу понять в чём дело.
Какой объект? Что означает "сползает"? Что именно у вас не так с кликабельностью и как вы её реализуете?


Название: Re: Пример инвентаря
Отправлено: Andrey_27 от Январь 29, 2019, 16:12:24
Если взять пример инвентаря 1.0078 и попробовать реализовать зум при помощи view_wview, view_hview (колесо мыши)
получается, что клетки инвентаря и их содержимое будут находится там где нужно, а вот клик по ячейкам уже не сработает.
Меняя view_hview нужно будет кликать возле инвентаря а не по ячейкам.
И чем больше меняется параметр view_hview, тем левее будет находится кликабельная область.
Вот и получается, чтоб схватить предмет из ячейки, нужно кликать где-то в стороне, а не под спрайтом.


Название: Re: Пример инвентаря
Отправлено: AndrewVideoGames от Январь 29, 2019, 16:14:25
У вас абсолютные координаты у ячеек? Скиньте кусок кода, который отрисовывает ячейки и кусок кода, который отрабатывает нажатие.


Название: Re: Пример инвентаря
Отправлено: Andrey_27 от Январь 29, 2019, 16:16:38
Отрисовка в Draw GUI не помогла приклеить инвентарь так, чтоб он не реагировал на зум


Название: Re: Пример инвентаря
Отправлено: AndrewVideoGames от Январь 29, 2019, 17:00:03
Отрисовка в Draw GUI не помогла приклеить инвентарь так, чтоб он не реагировал на зум
Чтобы инвентарь не реагировал на зум - вам нужно сделать координаты нажатия относительными. Проверять нажатие относительно экрана, а не относительно комнаты.


Название: Re: Пример инвентаря
Отправлено: Andrey_27 от Январь 29, 2019, 18:42:48
Отрисовка

Left Pressed


Название: Re: Пример инвентаря
Отправлено: AndrewVideoGames от Январь 29, 2019, 19:22:26
1) Оформление кода плохое, он не читаем.
Пробелы ставьте везде, а не только в некоторых местах, фигурные скобки и вовсе расставлены непонятным образом, я даже одной не досчитал. Так же, используйте табуляцию и [code][/code] для вставки кода на форуме.
2) Вы используете непонятные числа.
32 и 1377 - это числа для вызова Сатаны? Откуда они? Что они означают? Забейте их в переменные и сделайте относительными, если 32 - это высота спрайта, то так и пишите sprite_get_height(sprite). Так же, по коду у вас бывают значения по типу 5, 237, 290, 45, 50 - это безобразие.
3) Использование абсолютных координат.
В klick_x=floor((mouse_x-x)/slot_width_x); вы используте mouse_x и x - эти координаты указаны относительно комнаты, используйте display_get_gui_height, display_get_gui_width или относительно вида (учитывать view_xview, view_yview, view_wport, view_hport), координаты мыши так же относительно экрана, а не комнаты.


Название: Re: Пример инвентаря
Отправлено: Andrey_27 от Январь 29, 2019, 19:32:32
Понял, спасибо. Попробую сделать переменные относительными. + поставил  sm_good


Название: Re: Пример инвентаря
Отправлено: vxsvsavasv от Ноябрь 02, 2019, 16:20:37
Эх, жаль в примере не рассчитано на переход между комнатами, чтобы предметы сохранялись.


Название: Re: Пример инвентаря
Отправлено: AndrewVideoGames от Ноябрь 02, 2019, 19:52:35
Эх, жаль в примере не рассчитано на переход между комнатами, чтобы предметы сохранялись.
В чём проблема сделать сохранения самому?


Название: Re: Пример инвентаря
Отправлено: ярик от Ноябрь 02, 2019, 20:25:23
в интернете трудно залезть или самому справку прочитать и все выучить вот в чем проблема


Название: Re: Пример инвентаря
Отправлено: vxsvsavasv от Ноябрь 03, 2019, 12:24:25
Эх, жаль в примере не рассчитано на переход между комнатами, чтобы предметы сохранялись.
В чём проблема сделать сохранения самому?
Я тупой.  _gg_:

Добавлено: Ноябрь 03, 2019, 12:57:54
в интернете трудно залезть или самому справку прочитать и все выучить вот в чем проблема
Дайте пожалуйста справку, которая поможет сделать так, что данный инвентарь будет сохранять предметы в переходах между комнатами. Я с радостью почитаю, чтобы быть осведомленным в этом деле.


Название: Re: Пример инвентаря
Отправлено: AndrewVideoGames от Ноябрь 03, 2019, 22:44:09
Почитайте про глобальные переменные (global.*) и постоянные объекты (persistent). Для сохранения состояния инвентаря при выходе из игры – почитайте про ini файлы.
Вот ссылки, которые могут пригодится при изучении GameMaker(GML):
1) Обязательно прочитать:
- Русская справка по Game maker (http://game-maker.ru/infusions/pro_download_panel/download.php?did=1024);
- Школа GML (http://forum.hellroom.ru/index.php?board=65.0);
2) Почитать уроки:
- Статьи/Уроки (http://forum.hellroom.ru/index.php?board=30.0);
- Туториалы (http://game-maker.ru/infusions/pro_download_panel/download.php?catid=10);
3) Посмотреть различные примеры:
- Примеры на форуме (http://forum.hellroom.ru/index.php?board=22.0);
- Примеры на сайте (http://game-maker.ru/viewpage.php?page_id=54);
4) Обратите внимание на эти правила и советы:
- 10 советов пользователям GM для избежания часто встречающихся ошибок (http://forum.hellroom.ru/index.php?topic=4275.0);
- Простые правила оптимизации кода / игры в целом (http://forum.hellroom.ru/index.php?topic=7896.0);
- Оптимизация игр в GameMaker: Studio (http://forum.hellroom.ru/index.php?topic=18542)
5) Если возникла ошибка - попробуйте найти решение здесь:
- Ошибки, их причины и исправление (http://forum.hellroom.ru/index.php?topic=2940.0);
- [GMS] Ошибки раннера и компилятора (описание и причины) (http://forum.hellroom.ru/index.php?topic=13765.0);
6) Если возник вопрос или хочется узнать как что то сделать, то скорее всего, на форуме это уже обсуждалось:
- F.A.Q. для начинающих (http://forum.hellroom.ru/index.php?topic=2035.0);
- Поиск на форуме (http://forum.hellroom.ru/index.php?action=search);
- Поиск на сайте (http://game-maker.ru/infusions/pro_download_panel/search.php);
- Как пользоваться поиском (http://forum.hellroom.ru/index.php?topic=20718.0)
7) Основные источники это наш форум (http://forum.hellroom.ru/) и сайт (http://game-maker.ru/).


Название: Re: Пример инвентаря
Отправлено: vxsvsavasv от Ноябрь 04, 2019, 02:15:47
Почитайте про глобальные переменные (global.*) и постоянные объекты (persistent). Для сохранения состояния инвентаря при выходе из игры – почитайте про ini файлы.
Вот ссылки, которые могут пригодится при изучении GameMaker(GML):
1) Обязательно прочитать:
- Русская справка по Game maker (http://game-maker.ru/infusions/pro_download_panel/download.php?did=1024);
- Школа GML (http://forum.hellroom.ru/index.php?board=65.0);
2) Почитать уроки:
- Статьи/Уроки (http://forum.hellroom.ru/index.php?board=30.0);
- Туториалы (http://game-maker.ru/infusions/pro_download_panel/download.php?catid=10);
3) Посмотреть различные примеры:
- Примеры на форуме (http://forum.hellroom.ru/index.php?board=22.0);
- Примеры на сайте (http://game-maker.ru/viewpage.php?page_id=54);
4) Обратите внимание на эти правила и советы:
- 10 советов пользователям GM для избежания часто встречающихся ошибок (http://forum.hellroom.ru/index.php?topic=4275.0);
- Простые правила оптимизации кода / игры в целом (http://forum.hellroom.ru/index.php?topic=7896.0);
- Оптимизация игр в GameMaker: Studio (http://forum.hellroom.ru/index.php?topic=18542)
5) Если возникла ошибка - попробуйте найти решение здесь:
- Ошибки, их причины и исправление (http://forum.hellroom.ru/index.php?topic=2940.0);
- [GMS] Ошибки раннера и компилятора (описание и причины) (http://forum.hellroom.ru/index.php?topic=13765.0);
6) Если возник вопрос или хочется узнать как что то сделать, то скорее всего, на форуме это уже обсуждалось:
- F.A.Q. для начинающих (http://forum.hellroom.ru/index.php?topic=2035.0);
- Поиск на форуме (http://forum.hellroom.ru/index.php?action=search);
- Поиск на сайте (http://game-maker.ru/infusions/pro_download_panel/search.php);
- Как пользоваться поиском (http://forum.hellroom.ru/index.php?topic=20718.0)
7) Основные источники это наш форум (http://forum.hellroom.ru/) и сайт (http://game-maker.ru/).
Спасибо!


Название: Re: Пример инвентаря
Отправлено: HriP от Январь 03, 2020, 02:19:21
Как мне это посмотреть на второй студии?  sm_thinking


Название: Re: Пример инвентаря
Отправлено: AndrewVideoGames от Январь 03, 2020, 10:58:40
Как мне это посмотреть на второй студии?  sm_thinking
Скачайте GMS 1, импортируйте *.gmk в него и экспортируйте *.gmz (File -> Export) из него. После открывайте GMS 2 и импортируйте в него *.gmz.


Название: Re: Пример инвентаря
Отправлено: HriP от Январь 03, 2020, 16:39:12
Как мне это посмотреть на второй студии?  sm_thinking
Скачайте GMS 1, импортируйте *.gmk в него и экспортируйте *.gmz (File -> Export) из него. После открывайте GMS 2 и импортируйте в него *.gmz.

И получил я на выходе нерабочий проект, изза execute_string, так еще и все комментарии кодировку потеряли ?????????? ? ????? ???? ?????.  sm_dont_know И так как не сильно подкованный в этой теме, ничего внятного из этого извлечь не смогу.


Название: Re: Пример инвентаря
Отправлено: AndrewVideoGames от Январь 03, 2020, 17:28:22
Как мне это посмотреть на второй студии?  sm_thinking
Скачайте GMS 1, импортируйте *.gmk в него и экспортируйте *.gmz (File -> Export) из него. После открывайте GMS 2 и импортируйте в него *.gmz.

И получил я на выходе нерабочий проект, изза execute_string, так еще и все комментарии кодировку потеряли ?????????? ? ????? ???? ?????.  sm_dont_know И так как не сильно подкованный в этой теме, ничего внятного из этого извлечь не смогу.
execute_string давно устарел, даже в GMS1. Вы без проблем сможете заменить его на accet_get_index.
Комментарии потеряли кодировку при импорте в GMS1 или в GMS2?


Название: Re: Пример инвентаря
Отправлено: ГоК от Январь 03, 2020, 19:27:41
Неужели нет более свежего примера инвентаря? В том же маркетплэйсе посмотри, наверняка есть бесплатные.


Название: Re: Пример инвентаря
Отправлено: 2sit от Июль 01, 2020, 10:16:44
sm_respekt Достойный инвентарь получился. Но после экспорта в GMS2, простой заменой неработающих команд execute_string, дело не решается.
Надо понимать, что и на что менять. Интересно было бы уже в GMS2, изучить логику кода этого инвентаря и используемые команды.
https://drive.google.com/file/d/1-lL2fvVlTFkAnfl1t413R_Q80p0IEfPI/view?usp=sharing   ///версия под GMS2
А ещё интересней были бы уроки, по теме создания чего-то подобного, как этот конкретный инвентарь (так как в нём, много самых популярных опций)
Кодировку коменты потеряли, после импорта в GMS1. Но коменты, можно восстановить переносом.
Но вот сам код инвентаря восстановить для 2 версии, я думаю стоило бы.
Может кто-то, за это возьмётся? Ошибок там вроде около 15, все связаны с execute_string, корме ещё двух, по другой теме.


Название: Re: Пример инвентаря
Отправлено: Einharr от Январь 13, 2021, 17:34:06
Действительно, очень хороший пример. Автору респект и плюсик. На GMS2, с некоторым геморроем ставится.

execute_string легко заменить на отдельные скрипты, а к ним получить доступ через

Код:
act_on = asset_get_index("s_item_handler");

в create самих предметов.

Execute_string, соответственно, заменить на script_execute, а всю логику из act_on в самих предметах перенести в соответствующие скрипты. Ну, или в один большой скрипт, но тогда логику предметов придётся основательно перелопатить.

Ну и да, не знаю, в отличиях от старого GM ли дело, или ещё в чём, но в obj_inv и obj_weapon_inv всё из draw лучше перенести в Draw GUI

А события нажатий на левую\правую кнопки мышки в step, через

Код:
if position_meeting(device_mouse_x_to_gui(0),device_mouse_y_to_gui(0),self){
if (mouse_check_button_pressed(mb_left)){
show_debug_message("CLICK LEFT!");
}
if (mouse_check_button_pressed(mb_left)){
show_debug_message("CLICK RIGHT!");
}
} else {
}

Ну и, соответственно, заменить mouse_x и mouse_y на device_mouse_x_to_gui(0),device_mouse_y_to_gui(0), это там в куче мест встречается.

Может, поможет кому. За идеальность исполнения не ручаюсь, я в GML только начал разбираться, но у меня подобное решение вполне работает.

Ну, и пара опечаток там в коде есть. Вроде, и без их исправления работает, но есть там nv_txt вместо inv_text и item_tyte вместо item_type.