Случайная подборка модов
Путь во мгле
4.5
Равновесие
3.2
Dead City Breakthrough
3.7
Prosectors Project
4.0
История Борова
3.5
Новое Время. Судьба наемника
2.3
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Модератор форума: FanG, Аdmin, FantomICW, Overfirst  
Форум » S.T.A.L.K.E.R. Модификации » Помощь в моддинге » Скрипты, конфиги, логика, движок » [CoP] Создание инвентарного комплекса (Пример создания медкомплекта в Сталкер ЗП)
[CoP] Создание инвентарного комплекса
Российская Федерация  MoDoStRoY
Воскресенье, 02.06.2013, 19:32 | Сообщение # 31
Статус:
Бывалый:
Сообщений: 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
Украина  FantomICW
Воскресенье, 02.06.2013, 19:55 | Сообщение # 32
Проект Смерти Вопреки
Статус:
Опытный:
Сообщений: 2259
Награды: 8
Регистрация: 06.01.2013

MoDoStRoY, кому как удобней, скрипты - это дело крайне "интимное")))
  Злобная реклама
Воскресенье, 02.06.2013, 19:55
Статус:
Сообщений: 666
Регистрация: 06.01.2013
Российская Федерация  MoDoStRoY
Воскресенье, 02.06.2013, 19:57 | Сообщение # 33
Статус:
Бывалый:
Сообщений: 602
Награды: 4
Регистрация: 03.04.2012

Интимное... Меня новые, интересные функции очень возбуждают...
FantomICW, Нет, правда так ведь проще, а ты там наверетенил)
  Злобная реклама
Воскресенье, 02.06.2013, 19:57
Статус:
Сообщений: 666
Регистрация: 03.04.2012
Украина  FantomICW
Воскресенье, 02.06.2013, 20:01 | Сообщение # 34
Проект Смерти Вопреки
Статус:
Опытный:
Сообщений: 2259
Награды: 8
Регистрация: 06.01.2013

MoDoStRoY, не знаю, просто к этому методу привык) еще с времен начала ковыряния СГМ) но как-нибудь и так попробую, спасибо за функцию! smile
  Злобная реклама
Воскресенье, 02.06.2013, 20:01
Статус:
Сообщений: 666
Регистрация: 06.01.2013
Российская Федерация  Sanjaaa
Воскресенье, 02.06.2013, 20:14 | Сообщение # 35
Dark Reaper Souls
Статус:
Бывалый:
Сообщений: 926
Награды: 6
Регистрация: 22.08.2012

FantomICW, если не трудно можеш на тч разобрать? happy
  Злобная реклама
Воскресенье, 02.06.2013, 20:14
Статус:
Сообщений: 666
Регистрация: 22.08.2012
Украина  FantomICW
Воскресенье, 02.06.2013, 20:17 | Сообщение # 36
Проект Смерти Вопреки
Статус:
Опытный:
Сообщений: 2259
Награды: 8
Регистрация: 06.01.2013

Sanjaaa, как-нибудь попробую smile
  Злобная реклама
Воскресенье, 02.06.2013, 20:17
Статус:
Сообщений: 666
Регистрация: 06.01.2013
Российская Федерация  MoDoStRoY
Понедельник, 03.06.2013, 09:42 | Сообщение # 37
Статус:
Бывалый:
Сообщений: 602
Награды: 4
Регистрация: 03.04.2012

FantomICW, Не за что. wink
  Злобная реклама
Понедельник, 03.06.2013, 09:42
Статус:
Сообщений: 666
Регистрация: 03.04.2012
Украина  BozKurt
Понедельник, 03.06.2013, 13:39 | Сообщение # 38
Статус:
Опытный:
Сообщений: 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
Украина  FantomICW
Понедельник, 03.06.2013, 14:15 | Сообщение # 39
Проект Смерти Вопреки
Статус:
Опытный:
Сообщений: 2259
Награды: 8
Регистрация: 06.01.2013

ColR_iT, для удобства. Механизм комплекса можно задать по-разному. Необязательно использовать if item_name==. Это ведь уже на усмотрение пользователя.
  Злобная реклама
Понедельник, 03.06.2013, 14:15
Статус:
Сообщений: 666
Регистрация: 06.01.2013
Украина  BozKurt
Понедельник, 03.06.2013, 14:31 | Сообщение # 40
Статус:
Опытный:
Сообщений: 1753
Награды: 3
Регистрация: 25.05.2012

FantomICW, ты не очень внимателен... Я конкретно указал какие строки я имел ввиду, при чём здесь проверка?
  Злобная реклама
Понедельник, 03.06.2013, 14:31
Статус:
Сообщений: 666
Регистрация: 25.05.2012
Украина  FantomICW
Понедельник, 03.06.2013, 15:08 | Сообщение # 41
Проект Смерти Вопреки
Статус:
Опытный:
Сообщений: 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
Украина  BozKurt
Понедельник, 03.06.2013, 15:15 | Сообщение # 42
Статус:
Опытный:
Сообщений: 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
Украина  FantomICW
Понедельник, 03.06.2013, 16:14 | Сообщение # 43
Проект Смерти Вопреки
Статус:
Опытный:
Сообщений: 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
Украина  BozKurt
Понедельник, 03.06.2013, 16:36 | Сообщение # 44
Статус:
Опытный:
Сообщений: 1753
Награды: 3
Регистрация: 25.05.2012

FantomICW, и даже функцию спавна в таком случае можно сократить:
Код
alife():create("предмет",vector(),nil,nil,db.actor:id())

Извини за наглость и не сочти за оскорбление, но этот ... урок, мало кому может быть действительно полезным. Вот было бы совсем другое дело, если бы при использовании предмета, появлялось окно, в котором можно было бы выбрать, какой из компонентов медкомплекта использовать, при этом сам комплект бы исчезал, только после того, как из него были бы использованы все предметы. А так...
  Злобная реклама
Понедельник, 03.06.2013, 16:36
Статус:
Сообщений: 666
Регистрация: 25.05.2012
Украина  FantomICW
Понедельник, 03.06.2013, 18:44 | Сообщение # 45
Проект Смерти Вопреки
Статус:
Опытный:
Сообщений: 2259
Награды: 8
Регистрация: 06.01.2013

ColR_iT, спасибо за совет, в дальнейшем я могу такое сделать. Конечно, урок посерьезней будет, но попробуем smile
  Злобная реклама
Понедельник, 03.06.2013, 18:44
Статус:
Сообщений: 666
Регистрация: 06.01.2013
Форум » S.T.A.L.K.E.R. Модификации » Помощь в моддинге » Скрипты, конфиги, логика, движок » [CoP] Создание инвентарного комплекса (Пример создания медкомплекта в Сталкер ЗП)
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Поиск: