102 lines
2.9 KiB
Lua
102 lines
2.9 KiB
Lua
|
local _G = GLOBAL
|
||
|
local R_diao = GetModConfigData("rendiao")
|
||
|
local B_diao = GetModConfigData("baodiao")
|
||
|
local amu_diao = GetModConfigData("amudiao")
|
||
|
local zhuang_bei = GetModConfigData("zbdiao")
|
||
|
local modnillots = GetModConfigData("nillots") or 0
|
||
|
local R_d = R_diao - 3
|
||
|
local B_d = B_diao - 5
|
||
|
if R_d < 0 then R_d = 0 end if B_d < 0 then B_d = 0 end
|
||
|
|
||
|
AddComponentPostInit("container", function(Container, inst)
|
||
|
function Container:DropSuiji(ondeath)
|
||
|
local amu_x = true
|
||
|
local rev_x = true
|
||
|
for k=1, self.numslots do
|
||
|
local v = self.slots[k]
|
||
|
if amu_diao and amu_x and v and v.prefab == "amulet" then --掉落护符
|
||
|
amu_x = false
|
||
|
self:DropItem(v)
|
||
|
end
|
||
|
if amu_diao and rev_x and v and v.prefab == "reviver" then --掉落心脏
|
||
|
rev_x = false
|
||
|
self:DropItem(v)
|
||
|
end
|
||
|
end
|
||
|
for k=1, self.numslots do --随机掉落背包里的物品
|
||
|
local v = self.slots[math.random(1, self.numslots)]
|
||
|
if k > math.random(B_d, B_diao) then
|
||
|
return false
|
||
|
end
|
||
|
if v then
|
||
|
self:DropItem(v)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
AddComponentPostInit("inventory", function(Inventory, inst)
|
||
|
Inventory.oldDropEverythingFn = Inventory.DropEverything
|
||
|
function Inventory:DropSuiji(ondeath)
|
||
|
local amu_x = true
|
||
|
local rev_x = true
|
||
|
local nillots = modnillots
|
||
|
for k=1, self.maxslots do
|
||
|
local v = self.itemslots[k]
|
||
|
if amu_diao and amu_x and v and v.prefab == "amulet" then --掉落护符
|
||
|
amu_x = false
|
||
|
self:DropItem(v, true, true)
|
||
|
end
|
||
|
if amu_diao and rev_x and v and v.prefab == "reviver" then --掉落心脏
|
||
|
rev_x = false
|
||
|
self:DropItem(v, true, true)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
for k=1, self.maxslots do --随机掉落身体上的物品
|
||
|
if k~=1 and k > math.random(R_d, R_diao) then
|
||
|
return false
|
||
|
end
|
||
|
if v then
|
||
|
self:DropItem(v, true, true)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
for k=1, self.maxslots do --计算空格数量
|
||
|
if v == nil then
|
||
|
nillots = nillots + 1
|
||
|
end
|
||
|
end
|
||
|
if nillots == 0 then --掉落身体上一格的物品,为了能够使用心脏复活
|
||
|
local v = self.itemslots[1] --math.random(1, self.maxslots)
|
||
|
if v then
|
||
|
self:DropItem(v, true, true)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function Inventory:PlayerSiWang(ondeath)
|
||
|
for k, v in pairs(self.equipslots) do
|
||
|
if v:HasTag("backpack") and v.components.container then
|
||
|
v.components.container:DropSuiji(true)
|
||
|
end
|
||
|
end
|
||
|
if zhuang_bei then
|
||
|
for k, v in pairs(self.equipslots) do
|
||
|
if not v:HasTag("backpack") then
|
||
|
self:DropItem(v, true, true)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
self.inst.components.inventory:DropSuiji(true)
|
||
|
end
|
||
|
|
||
|
function Inventory:DropEverything(ondeath, keepequip)
|
||
|
if not inst:HasTag("player") or inst:HasTag("player") and not inst.components.health --不是玩家或玩家有血则掉落全部物品
|
||
|
or inst:HasTag("player") and inst.components.health and inst.components.health.currenthealth > 0 then --兼容换人
|
||
|
return Inventory:oldDropEverythingFn(ondeath, keepequip)
|
||
|
else
|
||
|
return Inventory:PlayerSiWang(ondeath)
|
||
|
end
|
||
|
end
|
||
|
end)
|