wargamen
Участник
  
Репутация: 19
Offline
Пол: 
API: Game Maker 6.1
Деятельность: Java, GMS, pixelart
Сообщений: 155
Java, i love you:3
|
 |
« Ответ #210 : Август 22, 2012, 19:08:36 » |
|
мм, точно(насчет второго) Ну, а первый вопрос переформулирую: Чтобы нажал на одну ячейку инвентаря obj_inv1, и в obj_inv2 убирались предметы
|
|
|
|
|
Записан
|
"Если ты играешь в престолы, ты должен либо умереть, либо победить! Среднего не бывает!". Песнь льда и пламени.
"Закон бесконечной всемирной извращенности или закон Феликса." Когда сисадмины правили Землей.
|
|
|
|
Dva_Kota
|
 |
« Ответ #211 : Август 23, 2012, 10:29:30 » |
|
1. В первом посте, ниже спойлеров, есть ссылка как удалять и использовать предметы при нажатии клавиш на клавиатуре. Этот же код можно использовать при нажатии на предметах в инвентаре.
|
|
|
|
|
Записан
|
|
|
|
ETUN4
«Старожил форума»
    
Репутация: 50
Offline
Пол:  Награды:  ![За постоянность! [10 дней на форуме] За постоянность! [10 дней на форуме]](http://forum.hellroom.ru/awards/35b6e985f89cc9a79a2bbfdd216390ca_hellroomforum_time_tin.gif)
API: Game Maker 8.0 Pro
Деятельность: Game Maker, HTML, MobileBasic...
Сообщений: 855
Ну как-то так...
|
 |
« Ответ #212 : Август 25, 2012, 15:16:33 » |
|
Dva_Kota, у меня есть идея добавить к каждой вещи свой вес, и что бы у ГГ был лимит веса.
|
|
|
|
|
Записан
|
|
|
|
|
Dva_Kota
|
 |
« Ответ #213 : Август 26, 2012, 20:37:19 » |
|
Это легко осуществить: У каждого предмета переменная "вес". У инвентаря переменная "вес всех предметов". Перед перемещением предмета в инвентарь сравнивать вес всех предметов + вес этого предмета, и если сумма меньше или равна допустимому весу - перемещать предмет в инвентарь и увеличивать переменную "вес всех предметов", если нет - ничего не делать. При использовании/выбрасывании предмета уменьшать вес. Каждый, кому это нужно, может легко добавить это в свой инвентарь.
|
|
|
|
|
Записан
|
|
|
|
Reylor
Пользователь
 
Репутация: 1
Offline
Пол: 
API: Game Maker 8.0 Pro
Деятельность: Чём я занимаюсь в игрострое?... хм. да всем с чем приходится работать. Всего по немногу.
Сообщений: 90
|
 |
« Ответ #214 : Август 27, 2012, 18:34:19 » |
|
А как отобразить ботинки на игроке? И ещё как сделать урон нашему гг с защитой. Ну к примеру ГГ сталкивается с объектом Obj_ship если защиты у него 0 то урон будет 1. Ну а если защиты больше то урона меньше. И последнее как в инвентаре вместо второго меча/щита повесить ещё один амулет?
|
|
|
|
|
Записан
|
|
|
|
AndrewVideoGames
Главный Модератор
Репутация: 821
Offline
Пол:  Награды: ![За постоянность! [500 дней на форуме] За постоянность! [500 дней на форуме]](http://forum.hellroom.ru/awards/e0371460a203dd46d2dc161571bf6144_hellroomforum_time_gold.gif) ![За лояльность! [+750 репутации] За лояльность! [+750 репутации]](http://forum.hellroom.ru/awards/ba712f70231a68b216c525b7e8eca694_hellroomforum_good_silver.gif)  
API: GameMaker Studio Pro
Деятельность: А я кто? А я руководитель!
Сообщений: 7316
|
 |
« Ответ #215 : Август 27, 2012, 19:19:01 » |
|
2) Надо создать переменную, отвечающую за то, есть броня или её нет. Например glabal.br(поставь её в Create какого нибудь объекта). Далее в событии столкновения с obj_ship: if global.br=false { hp-=1 } else { hp-=0.5 }
|
|
|
|
|
Записан
|
|
|
|
Reylor
Пользователь
 
Репутация: 1
Offline
Пол: 
API: Game Maker 8.0 Pro
Деятельность: Чём я занимаюсь в игрострое?... хм. да всем с чем приходится работать. Всего по немногу.
Сообщений: 90
|
 |
« Ответ #216 : Август 28, 2012, 21:35:11 » |
|
А как сделать без переменной, ну вот как с шлемом например?
|
|
|
|
|
Записан
|
|
|
|
AndrewVideoGames
Главный Модератор
Репутация: 821
Offline
Пол:  Награды: ![За постоянность! [500 дней на форуме] За постоянность! [500 дней на форуме]](http://forum.hellroom.ru/awards/e0371460a203dd46d2dc161571bf6144_hellroomforum_time_gold.gif) ![За лояльность! [+750 репутации] За лояльность! [+750 репутации]](http://forum.hellroom.ru/awards/ba712f70231a68b216c525b7e8eca694_hellroomforum_good_silver.gif)  
API: GameMaker Studio Pro
Деятельность: А я кто? А я руководитель!
Сообщений: 7316
|
 |
« Ответ #217 : Август 28, 2012, 21:41:10 » |
|
Ну можно попробывать так: if instance_exists(имя_объекта_брони) { hp-=1 } else { hp-=0.5 }
Это будет работать, при условии, что у тебя нет объекта брони, если ты её не надел.
|
|
|
|
|
Записан
|
|
|
|
Repkin
Участник
  
Репутация: 2
Offline
Пол: 
API: Game Maker 8.0 Pro
Деятельность: GML, учу HTML*.
Сообщений: 197
Successful day? Sit down for game-maker.
|
 |
« Ответ #218 : Август 29, 2012, 14:57:12 » |
|
Решил немножко сократить create для obj_inv, ну чтоб новички как я - не рыскали в этом огромном "мире кода" , а сразу всё так на глазу. visible=!visible inv_height_y=4; inv_width_x=7; slot_height_y=sprite_height; slot_width_x=sprite_width;
image_xscale=inv_width_x; 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) { 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]=''; act_on[slot_x,slot_y]=''; act_off[slot_x,slot_y]=''; item_tyte[slot_x,slot_y]=''; } }
inv_item_x=0; inv_item_y=0;
inv_txt=''; inv_item=0; inv_spr=spr_inv; inv_name_obj=0;
Не чего не удалял, всё на месте. Внес всё под 1 цикл.Если кто-то уже так сделал, то извините...
|
|
|
|
|
Записан
|
|
|
|
|
Dva_Kota
|
 |
« Ответ #219 : Август 29, 2012, 21:05:07 » |
|
Reylor: 1. Так же как броню, аналогично. 2. Это делается именно через переменную. У игрока должна быть переменная "защита". У предметов есть код, который выполняется при одевании/снимании предмета. В этом коде у некоторых предметов написано изменение переменной "Защита". Когда одеваем предмет переменная увеличивается, когда снимаем - уменьшается (так же со всеми остальными переменными, которые меняются если надеть предмет). Вот в зависимости от переменной "защита" (которая у игрока, не помню как именно она называется). В зависимости от этой переменной изменяй наносимый урон (на форуме есть темы про это, связи с инвентарем тут уже нет). Один из вариантов - чем больше защита - тем меньше урон. Например защита может меняться от 0 (нет защиты) до 1 (100% зацита). Тогда урон можно рассчитывать так: hp -= урон * (1 - защита); 3. Если не ошибаюсь, в инвентаре экипировки, в событии Create описаны типы предметов. Каждому слоту присвоен свой тип. Создай еще один слот с таким же типом как у ячейки с амулетом. Вообще можно в инвентарь экипировки добавить сколько угодно слотов, сколько угодно типов слотов (для разных типов предметов) и расположить их как угодно (при большом желании можно и не в виде квадрата расположить). P.s. ГМ под рукой нет, пример давно не смотрел, по этому пишу по памяти. Repkin, да так лучше. Но это было в самой старой версии инвентаря. В новых все так же как ты написал.
|
|
|
|
|
Записан
|
|
|
|
Reylor
Пользователь
 
Репутация: 1
Offline
Пол: 
API: Game Maker 8.0 Pro
Деятельность: Чём я занимаюсь в игрострое?... хм. да всем с чем приходится работать. Всего по немногу.
Сообщений: 90
|
 |
« Ответ #220 : Август 31, 2012, 20:03:49 » |
|
Вот, я исправил, но эффекта ноль. Почему?
|
|
|
|
Записан
|
|
|
|
|
Dva_Kota
|
 |
« Ответ #221 : Сентябрь 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 в событии нажатия ЛКМ сделать то же самое.
|
|
|
|
|
Записан
|
|
|
|
ALT
Посетитель

Репутация: 0
Offline
API: GameMaker Studio
Сообщений: 30
|
 |
« Ответ #222 : Сентябрь 11, 2012, 11:26:33 » |
|
Кстати вопрос один интересный мучает. Пропадают спрайты предметов в инвентаре когда переходишь из комнаты в комнату. Сам obj_inv со свойством persistent у меня. В той комнате где ты предмет взял, спрайты показываются как надо, но если из комнаты выйдешь, то в окне инвентаря ничего нету. Вернешься обратно - все на месте. Предметы по клику в слоте в обоих случаях используются без проблем, но вот спрайты их не отображаются, так же как и описание предмета
Добавлено: Сентябрь 11, 2012, 12:14:04 Хотя разобрался уже
|
|
|
|
|
Записан
|
|
|
|
|
Dva_Kota
|
 |
« Ответ #223 : Сентябрь 11, 2012, 12:59:18 » |
|
Могу лишь предположить что во второй комнате тоже есть инвентарь, он рисуется поверх первого, из-за этого не видно что находится в ячейках первого.
Напиши в чем проблема была.
|
|
|
|
|
Записан
|
|
|
|
ALT
Посетитель

Репутация: 0
Offline
API: GameMaker Studio
Сообщений: 30
|
 |
« Ответ #224 : Сентябрь 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 Хотя с нулями разобрался. '' при чтении из файла пропускались. В общем массив заполнялся не верно. Это исправил вроде. А вот с картинками что делать не знаю
|
|
|
|
« Последнее редактирование: Сентябрь 19, 2012, 15:14:29 от ALT »
|
Записан
|
|
|
|
|