Случайная подборка модов
Новый Арсенал 5.0
3.6
SZM CoP 0.2
3.9
Absolute Nature 3
4.1
Поиск (DIES IRAE)
4.1
GUNSLINGER mod
4.5
Смерти Вопреки 2. Одним днем живу
3.4
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Модератор форума: FanG, Аdmin, FantomICW, Overfirst  
Форум » S.T.A.L.K.E.R. Модификации » Помощь в моддинге » Скрипты, конфиги, логика, движок » [CS] Ограничение обьёма инвентаря
[CS] Ограничение обьёма инвентаря
Российская Федерация  Stalker_Monstr
Четверг, 14.11.2013, 17:33 | Сообщение # 1
Статус:
Отмычка:
Сообщений: 194
Награды: 8
Регистрация: 30.01.2013

Автор: Меченый(Стрелок)

Для этого нам нужно создать в папке gamedata\scripts файл limiting_items_l.script в нем пишем вот это:
Цитата
local maximum = 420
local upd = 0
local t_upd =0

function isAmmo(object)
if obj then
if string.find(object:section(),"ammo_" ) and (object:section()~="ammo_vog-25p" and object:section()~="ammo_vog-25" and object:section()~="ammo_m209") ) then
return true
end
end
return false
end

function isGren(object)
if obj then
if (object:section()=="grenade_rgd5" or "explosive_hide" or "grenade_f1" ) then
return true
end
end
return false
end

function isMed(object)
if obj then
if (object:section()=="medkit" or "medkit_army" or "medkit_scientic" or "antirad" ) then
return true
end
end
return false
end

function isGrenammo(object)
if obj then
if (object:section()=="ammo_vog-25p" or "ammo_vog-25" or "ammo_m209" ) then
return true
end
end
return false
end

function isOutf(object)
if obj then
if string.find(object:section(),"outfit" ) then
return true
end
end
return false
end

function isArtefact(object)
if obj then
if string.find(object:section(),"af_" ) then
return true
end
end
return false
end

function isWeapon(object)
if obj then
if string.find(object:section(),"weapon_" ) then
return true
end
end
return false
end

function get_vol(obj)
if obj then
if isMed(obj) then
return 7.8
elseif isWeapon(obj) then
return 11.1
elseif isArtefact(obj) then
return 9.5
elseif isAmmo(obj) then
return 2.7
elseif isGren(obj) then
return 1.5
elseif isGrenammo(obj) then
return 2.1
elseif isOutf(obj) then
return 14.3
else
return 5
end
end
end

function get_item()
local actor=db.actor
db.actor:iterate_inventory(get_items, actor)
upd = 0
end

function get_items(actor,item)
local s = item
local vol = get_vol(s)
local nv = upd+vol
if vol==nil then return end
if maximum>=nv then
upd = upd+vol
end

if maximum<nv then
if item:section()~="repair_box" or "repair_box_mini" or "repair_box_otf" or "meshok" or "rukzak" or "zapiska" or "acumm" or "pda_leb" or "nokia" or "protivogaz" or "razgruzka" then
db.actor:drop_item(item)
add_text(item)
end
end
end

function update(bol)
if bol then
get_item()
end
end

function add_text(obj)
local text, descr = limiting_items_r.get_name(obj:section())
local name = "%c[255,160,200,160]"..text
db.actor:give_game_news("Инвентарь:", name.."%c[default] не помещается в рюкзаке.", "ui_iconsTotal_lost_thing", 2, 6000, 1)
end


Сохраняем и дальше в той папке создаем скрипт limiting_items_r.script и пишем туда вот это:
Цитата
function get_inv_name(section)
return system_ini():r_string(section,"inv_name" )
end

function get_name(sec)
local name = nil
local n = get_ltx(sec,"inv_name","str" )
name = get_text(n)
return name
end

function get_text(ltx)
return game.translate_string(ltx)
end

function get_ltx(l_name,l_string,type)
if system_ini():r_u32(l_name, l_string)==nil then
return
end
if type=="bol" then
return toboolean(system_ini():r_u32(l_name, l_string))
end
if type=="num" then
return tonumber(system_ini():r_u32(l_name, l_string))
end
if type=="str" then
return tostring(system_ini():r_string(l_name, l_string))
end
if type==nil then
return system_ini():r_u32(l_name, l_string)
end
end

function toboolean(_str)
if string.find(string.lower(_str), "true" ) or _str == "1" then
return true
end
return false
end

local pistol = 0
local auto = 0
local outf = ms_razgruzka.get_name(db.actor:get_current_outfit():section())

function getoutf()
if db.actor:get_current_outfit() then
return db.actor:get_current_outfit():section() else
return "novice_outfit"
end
end

function ammo_slot(slot)
g_obj = db.actor:item_in_slot(slot)
if g_obj ~= nil then
sl = g_obj:get_ammo_total()
- g_obj:get_ammo_in_magazine()
else
sl = 0
end return sl
end

function return_slot(slot)
if slot==1 then
return pistol elseif slot==2 then
return auto
else return nil
end
end

function spawn_item_in_inv(spawn_item,npc)
if npc==nil then npc=db.actor
end
return alife():create(spawn_item, npc:position(),npc:level_vertex_id(),npc:game_vertex_id(),npc:id())
end

function use_main(pid)
if (alife():object(pid)==nil and check_game()==true) then
pistol =ammo_slot(1)
auto=ammo_slot(2)
local spwn= ms_razgruzka.ui_razgruzka(get_hud())
level.start_stop_menu(spwn,true) spawn_item_in_inv("razgruzka" )
end
end
class "ui_razgruzka" (CUIScriptWnd)
function ui_razgruzka:__init()
super()
self:InitControls()
self:InitCallBacks()
end

function ui_razgruzka:__finalize()
end

function ui_razgruzka:InitControls()
self:SetWndRect (Frect():set(50,50,300,300))
local xml = CScriptXmlInit()
xml:ParseFile("ui_msraz.xml" )
xml:InitStatic("background_for_ui", self)
local sl_1 =return_slot(1)
local sl_2 = return_slot(2)
self.name=xml:InitStatic("name",self)
self.name:SetFont(GetFontGraffiti22Russian())
self.name:SetTextColor (255,110,197,146)
self.name:SetText(tostring(sl_1))
self.name2=xml:InitStatic("name2",self)
self.name2:SetFont (GetFontGraffiti22Russian())
self.name2:SetTextColor(255,110,197,146)
self.name2:SetText(tostring(sl_2))
self.name3=xml:InitStatic("money",self)
self.name3:SetFont(GetFontGraffiti22Russian())
self.name3:SetTextColor(255,110,197,146)
self.name3:SetText(tostring(db.actor:money()))
self.name4=xml:InitStatic("out",self)
self.name4:SetFont(GetFontGraffiti22Russian())
self.name4:SetTextColor(255,110,197,146)
if check_outf() then
self.name4:SetText(outf) else
self.name4:SetText("брони нет" )
end
end

function ui_razgruzka:InitCallBacks()
end

function ui_razgruzka:OnKeyboard(dik, keyboard_action)
CUIScriptWnd.OnKeyboard(self,dik,keyboard_action)
if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
if dik == DIK_keys.DIK_ESCAPE then
self:GetHolder():start_stop_menu (self,true)
end
end
return true
end

function check_game()
if level.present() and (db.actor ~= nil) and db.actor:alive() then
return true
end
return false
end


Далее заходим в bind_stalker.script и после этих строк:
Цитата
if guiders.teleported_to_another_level and not guiders.level_changed then
guiders.action_teleport_to_point()
end

пишем вот это: limiting_items_l.update(true) так чтоб получилось вот так:
Цитата
if guiders.teleported_to_another_level and not guiders.level_changed then
guiders.action_teleport_to_point()
end
limiting_items_l.update(true)
end


Вот, собственное и все.

Адаптация под ЗП:
Открываем bind_stalker.script.
И после строчки:
Цитата
pda.fill_sleep_zones()

Вставляем:
Цитата
if limiting_items_l then
limiting_items_l.update(true)
end

Должно получиться так:
Цитата
pda.fill_sleep_zones()
if limiting_items_l then
limiting_items_l.update(true)
end
end
Сообщение отредактировал Stalker_Monstr - Пятница, 15.11.2013, 14:41
  Злобная реклама
Четверг, 14.11.2013, 17:33
Статус:
Сообщений: 666
Регистрация: 30.01.2013
Ватикан  glebichhh36
Четверг, 14.11.2013, 17:34 | Сообщение # 2
Cheeki-Breeki
Статус:
Опытный:
Сообщений: 1705
Награды: 4
Регистрация: 01.03.2012

Кхм. Я конечно понимаю, что это дело нужное, даже хорошее, но не проще ли создать одну тему и убирать все под спойлеры, чем создавать огромное количество тем?
  Злобная реклама
Четверг, 14.11.2013, 17:34
Статус:
Сообщений: 666
Регистрация: 01.03.2012
Российская Федерация  Stalker_Monstr
Четверг, 14.11.2013, 17:37 | Сообщение # 3
Статус:
Отмычка:
Сообщений: 194
Награды: 8
Регистрация: 30.01.2013

glebichhh36, Хорошо.
  Злобная реклама
Четверг, 14.11.2013, 17:37
Статус:
Сообщений: 666
Регистрация: 30.01.2013
Российская Федерация  dark_stalker_98
Четверг, 14.11.2013, 17:40 | Сообщение # 4
Darkness
Статус:
Опытный:
Сообщений: 1341
Награды: 8
Регистрация: 26.04.2013

Stalker_Monstr, такой(ие) скрипт(ы) на ЗП пашет(ут)?
Сообщение отредактировал dark_stalker_98 - Четверг, 14.11.2013, 17:43
  Злобная реклама
Четверг, 14.11.2013, 17:40
Статус:
Сообщений: 666
Регистрация: 26.04.2013
Российская Федерация  Stalker_Monstr
Четверг, 14.11.2013, 17:44 | Сообщение # 5
Статус:
Отмычка:
Сообщений: 194
Награды: 8
Регистрация: 30.01.2013

dark_stalker_98, Если честно, не проверял.
  Злобная реклама
Четверг, 14.11.2013, 17:44
Статус:
Сообщений: 666
Регистрация: 30.01.2013
Российская Федерация  dark_stalker_98
Четверг, 14.11.2013, 17:47 | Сообщение # 6
Darkness
Статус:
Опытный:
Сообщений: 1341
Награды: 8
Регистрация: 26.04.2013

Stalker_Monstr, попробую, посмотрим на лог. biggrin
  Злобная реклама
Четверг, 14.11.2013, 17:47
Статус:
Сообщений: 666
Регистрация: 26.04.2013
Российская Федерация  Stalker_Monstr
Четверг, 14.11.2013, 17:49 | Сообщение # 7
Статус:
Отмычка:
Сообщений: 194
Награды: 8
Регистрация: 30.01.2013

dark_stalker_98, Если что, пиши.
  Злобная реклама
Четверг, 14.11.2013, 17:49
Статус:
Сообщений: 666
Регистрация: 30.01.2013
Ирландия  Nick_Freedom
Четверг, 14.11.2013, 18:15 | Сообщение # 8
Созидатель
Статус:
Бывалый:
Сообщений: 607
Награды: 1
Регистрация: 24.05.2013

Цитата
инвенторя
  Злобная реклама
Четверг, 14.11.2013, 18:15
Статус:
Сообщений: 666
Регистрация: 24.05.2013
Российская Федерация  Stalker_Monstr
Четверг, 14.11.2013, 18:19 | Сообщение # 9
Статус:
Отмычка:
Сообщений: 194
Награды: 8
Регистрация: 30.01.2013

Nick_Freedom, Благодарю.
  Злобная реклама
Четверг, 14.11.2013, 18:19
Статус:
Сообщений: 666
Регистрация: 30.01.2013
Казахстан  Max_Warlock
Четверг, 14.11.2013, 19:03 | Сообщение # 10
Clear Sky - Remake
Статус:
Опытный:
Сообщений: 1552
Награды: 4
Регистрация: 18.01.2013

Код читать долго. Скажи так. Есть ли здесь система проверки на нахождение предмета в слоте? Например, если оружие в руках, а костюм на теле, их просчет будет выглядеть крайне нереалистично.
  Злобная реклама
Четверг, 14.11.2013, 19:03
Статус:
Сообщений: 666
Регистрация: 18.01.2013
Российская Федерация  Stalker_Monstr
Четверг, 14.11.2013, 19:07 | Сообщение # 11
Статус:
Отмычка:
Сообщений: 194
Награды: 8
Регистрация: 30.01.2013

Max_Warlock, Есть.
  Злобная реклама
Четверг, 14.11.2013, 19:07
Статус:
Сообщений: 666
Регистрация: 30.01.2013
Российская Федерация  dark_stalker_98
Четверг, 14.11.2013, 19:14 | Сообщение # 12
Darkness
Статус:
Опытный:
Сообщений: 1341
Награды: 8
Регистрация: 26.04.2013

Получилось!

Открываем bind_stalker.script.
И после строчки:
Код
    pda.fill_sleep_zones()

Вставляем:
Код
if limiting_items_l then
          limiting_items_l.update()   
          end

Должно получиться так:
Код
pda.fill_sleep_zones()
          if limiting_items_l then
          limiting_items_l.update()   
          end
end

P.S. еще не тестировал, но вылета при загрузке не обнаружено, что весьма радует. biggrin
Сообщение отредактировал dark_stalker_98 - Четверг, 14.11.2013, 19:16
  Злобная реклама
Четверг, 14.11.2013, 19:14
Статус:
Сообщений: 666
Регистрация: 26.04.2013
Российская Федерация  Stalker_Monstr
Четверг, 14.11.2013, 19:16 | Сообщение # 13
Статус:
Отмычка:
Сообщений: 194
Награды: 8
Регистрация: 30.01.2013

dark_stalker_98, Отлично, дополню тему.
  Злобная реклама
Четверг, 14.11.2013, 19:16
Статус:
Сообщений: 666
Регистрация: 30.01.2013
Российская Федерация  dark_stalker_98
Четверг, 14.11.2013, 22:26 | Сообщение # 14
Darkness
Статус:
Опытный:
Сообщений: 1341
Награды: 8
Регистрация: 26.04.2013

Stalker_Monstr, расскажите в общих чертах, как оно должно работать? Я поставил, но изменений не наблюдаю. biggrin

Update: а, всё, теперь работает. Полезная вещица однако.
Сообщение отредактировал dark_stalker_98 - Пятница, 15.11.2013, 00:39
  Злобная реклама
Четверг, 14.11.2013, 22:26
Статус:
Сообщений: 666
Регистрация: 26.04.2013
Российская Федерация  R0D23
Пятница, 15.11.2013, 11:49 | Сообщение # 15
Мертвый Путь 3
Статус:
Опытный:
Сообщений: 1491
Награды: 1
Регистрация: 23.06.2013

На ТЧ не придумали?
Сообщение отредактировал R0D23 - Пятница, 15.11.2013, 11:49
  Злобная реклама
Пятница, 15.11.2013, 11:49
Статус:
Сообщений: 666
Регистрация: 23.06.2013
Форум » S.T.A.L.K.E.R. Модификации » Помощь в моддинге » Скрипты, конфиги, логика, движок » [CS] Ограничение обьёма инвентаря
  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск: