[CS] Ограничение обьёма инвентаря
|
|
|
Статус: |
|
Отмычка: |
|
Сообщений: |
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 |
|
|
|
|
|
Cheeki-Breeki
Статус: |
|
Опытный: |
|
Сообщений: |
1705 |
Награды: |
4 |
Регистрация: |
01.03.2012 |
|
Кхм. Я конечно понимаю, что это дело нужное, даже хорошее, но не проще ли создать одну тему и убирать все под спойлеры, чем создавать огромное количество тем?
|
|
Четверг, 14.11.2013, 17:34
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
01.03.2012 |
|
|
|
|
|
Статус: |
|
Отмычка: |
|
Сообщений: |
194 |
Награды: |
8 |
Регистрация: |
30.01.2013 |
|
glebichhh36, Хорошо.
|
|
Четверг, 14.11.2013, 17:37
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
30.01.2013 |
|
|
|
|
|
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 |
|
|
|
|
|
Статус: |
|
Отмычка: |
|
Сообщений: |
194 |
Награды: |
8 |
Регистрация: |
30.01.2013 |
|
dark_stalker_98, Если честно, не проверял.
|
|
Четверг, 14.11.2013, 17:44
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
30.01.2013 |
|
|
|
|
|
Darkness
Статус: |
|
Опытный: |
|
Сообщений: |
1341 |
Награды: |
8 |
Регистрация: |
26.04.2013 |
|
Stalker_Monstr, попробую, посмотрим на лог.
|
|
Четверг, 14.11.2013, 17:47
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
26.04.2013 |
|
|
|
|
|
Статус: |
|
Отмычка: |
|
Сообщений: |
194 |
Награды: |
8 |
Регистрация: |
30.01.2013 |
|
dark_stalker_98, Если что, пиши.
|
|
Четверг, 14.11.2013, 17:49
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
30.01.2013 |
|
|
|
|
|
Созидатель
Статус: |
|
Бывалый: |
|
Сообщений: |
607 |
Награды: |
1 |
Регистрация: |
24.05.2013 |
|
|
|
Четверг, 14.11.2013, 18:15
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
24.05.2013 |
|
|
|
|
|
Статус: |
|
Отмычка: |
|
Сообщений: |
194 |
Награды: |
8 |
Регистрация: |
30.01.2013 |
|
Nick_Freedom, Благодарю.
|
|
Четверг, 14.11.2013, 18:19
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
30.01.2013 |
|
|
|
|
|
Clear Sky - Remake
Статус: |
|
Опытный: |
|
Сообщений: |
1552 |
Награды: |
4 |
Регистрация: |
18.01.2013 |
|
Код читать долго. Скажи так. Есть ли здесь система проверки на нахождение предмета в слоте? Например, если оружие в руках, а костюм на теле, их просчет будет выглядеть крайне нереалистично.
|
|
Четверг, 14.11.2013, 19:03
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
18.01.2013 |
|
|
|
|
|
Статус: |
|
Отмычка: |
|
Сообщений: |
194 |
Награды: |
8 |
Регистрация: |
30.01.2013 |
|
Max_Warlock, Есть.
|
|
Четверг, 14.11.2013, 19:07
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
30.01.2013 |
|
|
|
|
|
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. еще не тестировал, но вылета при загрузке не обнаружено, что весьма радует.
Сообщение отредактировал dark_stalker_98 - Четверг, 14.11.2013, 19:16
|
|
Четверг, 14.11.2013, 19:14
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
26.04.2013 |
|
|
|
|
|
Статус: |
|
Отмычка: |
|
Сообщений: |
194 |
Награды: |
8 |
Регистрация: |
30.01.2013 |
|
dark_stalker_98, Отлично, дополню тему.
|
|
Четверг, 14.11.2013, 19:16
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
30.01.2013 |
|
|
|
|
|
Darkness
Статус: |
|
Опытный: |
|
Сообщений: |
1341 |
Награды: |
8 |
Регистрация: |
26.04.2013 |
|
Stalker_Monstr, расскажите в общих чертах, как оно должно работать? Я поставил, но изменений не наблюдаю.
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 |
|
|
|
|