| [CoP] Создание инвентарного комплекса | 
| 
				
			 | 
|  
|  |   
|  
 
 
 Воскресенье, 02.06.2013, 19:32 | Сообщение # 31 MoDoStRoY  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Бывалый: |  |   
 | Сообщений: | 602 |   
 | Награды: | 4 |   
 | Регистрация: | 03.04.2012 |  | Возможно я чего-то не понимаю, но к чему всё так усложнять? Я делаю гораздо проще. 
 Код local eat = nil 
 function use_med()
 if eat and type(eat) == 'number' then
 if not level.object_by_id( eat ) then
 amk.spawn_item_in_inv("vodka")
 end
 eat = nil
 end
 
 if eat and type(eat) == 'userdata' then
 eat = eat:id()
 else
 eat = nil
 end
 end
 
 function drop_med(obj)
 local obj_sect = obj:section()
 if obj_sect == 'bread' then
 eat = obj
 end
 end
 Там конечно ещё в bind_stalker.script прописать колбеки на апдейт, но это я уже писать не буду, ибо и так понятно. Хотя может быть функции твоего скрипта в чём-то лучше, но я честно не понимаю чем он отличается от этого. Разве, что набором функций, которые используются при "юзании" предмета.
 |  |  Воскресенье, 02.06.2013, 19:32   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 03.04.2012 |  |  |  |  | 
|  
|  |   
|  
 
 
 Воскресенье, 02.06.2013, 19:55 | Сообщение # 32 FantomICW  
  
 | 
 
 
 
 
 
Проект Смерти Вопреки  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 2259 |   
 | Награды: | 8 |   
 | Регистрация: | 06.01.2013 |  | MoDoStRoY, кому как удобней, скрипты - это дело крайне "интимное"))) |  |  Воскресенье, 02.06.2013, 19:55   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 06.01.2013 |  |  |  |  | 
|  
|  |   
|  
 
 
 Воскресенье, 02.06.2013, 19:57 | Сообщение # 33 MoDoStRoY  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Бывалый: |  |   
 | Сообщений: | 602 |   
 | Награды: | 4 |   
 | Регистрация: | 03.04.2012 |  | Интимное... Меня новые, интересные функции очень возбуждают... FantomICW, Нет, правда так ведь проще, а ты там наверетенил)
 |  |  Воскресенье, 02.06.2013, 19:57   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 03.04.2012 |  |  |  |  | 
|  
|  |   
|  
 
 
 Воскресенье, 02.06.2013, 20:01 | Сообщение # 34 FantomICW  
  
 | 
 
 
 
 
 
Проект Смерти Вопреки  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 2259 |   
 | Награды: | 8 |   
 | Регистрация: | 06.01.2013 |  | MoDoStRoY, не знаю, просто к этому методу привык) еще с времен начала ковыряния СГМ) но как-нибудь и так попробую, спасибо за функцию!  |  |  Воскресенье, 02.06.2013, 20:01   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 06.01.2013 |  |  |  |  | 
|  
|  |   
|  
 
 
 Воскресенье, 02.06.2013, 20:14 | Сообщение # 35 Sanjaaa  
  
 | 
 
 
 
 
 
Dark Reaper Souls  
  
 | Статус: |  |   
 | Бывалый: |  |   
 | Сообщений: | 926 |   
 | Награды: | 6 |   
 | Регистрация: | 22.08.2012 |  | FantomICW, если не трудно можеш на тч разобрать?  |  |  Воскресенье, 02.06.2013, 20:14   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 22.08.2012 |  |  |  |  | 
|  
|  |   
|  
 
 
 Воскресенье, 02.06.2013, 20:17 | Сообщение # 36 FantomICW  
  
 | 
 
 
 
 
 
Проект Смерти Вопреки  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 2259 |   
 | Награды: | 8 |   
 | Регистрация: | 06.01.2013 |  | Sanjaaa, как-нибудь попробую  |  |  Воскресенье, 02.06.2013, 20:17   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 06.01.2013 |  |  |  |  | 
|  
|  |   
|  
 
 
 Понедельник, 03.06.2013, 09:42 | Сообщение # 37 MoDoStRoY |  Понедельник, 03.06.2013, 09:42   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 03.04.2012 |  |  |  |  | 
|  
|  |   
|  
 
 
 Понедельник, 03.06.2013, 13:39 | Сообщение # 38 BozKurt  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 1753 |   
 | Награды: | 3 |   
 | Регистрация: | 25.05.2012 |  | А можно такой вопрос: для чего в функции on_use_item вот эти строки:?Код --Переменные  local actor=db.actor
 local item_name=sect:section()
 local actor_pos=db.actor:position()
 local active_slot=db.actor:active_slot()
 local active_item=db.actor:active_item()
 local pistol_in_slot=db.actor:item_in_slot(2)
 local rifle_in_slot=db.actor:item_in_slot(3)
 local outfit_in_slot=db.actor:item_in_slot(7)
 local helm_in_slot=db.actor:item_in_slot(12)
 |  |  Понедельник, 03.06.2013, 13:39   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 25.05.2012 |  |  |  |  | 
|  
|  |   
|  
 
 
 Понедельник, 03.06.2013, 14:15 | Сообщение # 39 FantomICW  
  
 | 
 
 
 
 
 
Проект Смерти Вопреки  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 2259 |   
 | Награды: | 8 |   
 | Регистрация: | 06.01.2013 |  | ColR_iT, для удобства. Механизм комплекса можно задать по-разному. Необязательно использовать if item_name==. Это ведь уже на усмотрение пользователя. |  |  Понедельник, 03.06.2013, 14:15   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 06.01.2013 |  |  |  |  | 
|  
|  |   
|  
 
 
 Понедельник, 03.06.2013, 14:31 | Сообщение # 40 BozKurt  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 1753 |   
 | Награды: | 3 |   
 | Регистрация: | 25.05.2012 |  | FantomICW, ты не очень внимателен... Я конкретно указал какие строки я имел ввиду, при чём здесь проверка? |  |  Понедельник, 03.06.2013, 14:31   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 25.05.2012 |  |  |  |  | 
|  
|  |   
|  
 
 
 Понедельник, 03.06.2013, 15:08 | Сообщение # 41 FantomICW  
  
 | 
 
 
 
 
 
Проект Смерти Вопреки  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 2259 |   
 | Награды: | 8 |   
 | Регистрация: | 06.01.2013 |  | ColR_iT, если говорить о конкретном механизме комплекса (используется предмет, другой выпадает), то действительно можно переменные сократить: 
 Код  --Переменные   local item_name=sect:section()
Опять-же, если используем механизм в роде
 
 Код if item_name=="medkit_complex" then  give_object_to_actor("drug_anabiotic")
 end
Переменных, кроме item_name, не задействовано.
 Тем не менее, остальные переменные кому-то могли бы пригодится, нет, так можно удалить. Если когда-нибудь ковырял СГМ, там есть коллбеки, как
 
 Код elseif sgm_functions.ReadActivateBinocular(item_name) then if sgm_functions.ReadActivateSection(db.actor:item_in_slot(5):section()) then
 give_object_to_actor(sgm_functions.ReadActivateSection(db.actor:item_in_slot(5):section()))
 remove_item_from_slot(db.actor,5)
 give_object_to_actor(sgm_functions.ReadActivateBinocular(item_name))
 end
 end
Тут переменная
 
 Код local binoc_in_slot=db.actor:item_in_slot(5)могла бы пригодится.
 Можно ли жить без переменных? Можно. Но с ними удобней.
 |  |  Понедельник, 03.06.2013, 15:08   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 06.01.2013 |  |  |  |  | 
|  
|  |   
|  
 
 
 Понедельник, 03.06.2013, 15:15 | Сообщение # 42 BozKurt  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 1753 |   
 | Награды: | 3 |   
 | Регистрация: | 25.05.2012 |  | FantomICW, честно, в упор не понимаю удобства наличия этих переменных... Да и вообще, всё из сказанного в шапке (касательно скриптов) можно свести к всего лишь одной записи:
 прописанную в колбеке на юз.Код if obj:section()=="medkit_complex" then  give_object_to_actor("drug_anabiotic")
 give_object_to_actor("antirad")
 give_object_to_actor("bandage")
 give_object_to_actor("drug_radioprotector")
 give_object_to_actor("drug_antidot")
 give_object_to_actor("drug_psy_blockade")
 give_object_to_actor("drug_coagulant")
 give_object_to_actor("drug_booster")
 end
Для чего такие сложности?
 |  |  Понедельник, 03.06.2013, 15:15   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 25.05.2012 |  |  |  |  | 
|  
|  |   
|  
 
 
 Понедельник, 03.06.2013, 16:14 | Сообщение # 43 FantomICW  
  
 | 
 
 
 
 
 
Проект Смерти Вопреки  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 2259 |   
 | Награды: | 8 |   
 | Регистрация: | 06.01.2013 |  | ColR_iT, не знаю, мне нравится использовать переменные. Хотя в целом ты прав, и это можно сократить. Можно и функцию give_object_to_actor не прописывать. Тогда уже будет: 
 Код if obj:section()=="medkit_complex" then    alife():create("предмет",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
 ...
 end
 Сообщение отредактировал FantomICW - Понедельник, 03.06.2013, 16:14 |  |  Понедельник, 03.06.2013, 16:14   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 06.01.2013 |  |  |  |  | 
|  
|  |   
|  
 
 
 Понедельник, 03.06.2013, 16:36 | Сообщение # 44 BozKurt  
  
 | 
 
 
 
 
 
 
  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 1753 |   
 | Награды: | 3 |   
 | Регистрация: | 25.05.2012 |  | FantomICW, и даже функцию спавна в таком случае можно сократить:Код alife():create("предмет",vector(),nil,nil,db.actor:id())Извини за наглость и не сочти за оскорбление, но этот ... урок, мало кому может быть действительно полезным. Вот было бы совсем другое дело, если бы при использовании предмета, появлялось окно, в котором можно было бы выбрать, какой из компонентов медкомплекта использовать, при этом сам комплект бы исчезал, только после того, как из него были бы использованы все предметы. А так...
 |  |  Понедельник, 03.06.2013, 16:36   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 25.05.2012 |  |  |  |  | 
|  
|  |   
|  
 
 
 Понедельник, 03.06.2013, 18:44 | Сообщение # 45 FantomICW  
  
 | 
 
 
 
 
 
Проект Смерти Вопреки  
  
 | Статус: |  |   
 | Опытный: |  |   
 | Сообщений: | 2259 |   
 | Награды: | 8 |   
 | Регистрация: | 06.01.2013 |  | ColR_iT, спасибо за совет, в дальнейшем я могу такое сделать. Конечно, урок посерьезней будет, но попробуем  |  |  Понедельник, 03.06.2013, 18:44   
|  |   
|  
 
  
  
  
 | 
 
  
  
 | Статус: |  |   
 | Сообщений: | 666 |   
 | Регистрация: | 06.01.2013 |  |  |  |  |