redoing mp stuff
This commit is contained in:
@@ -6,19 +6,25 @@ end
|
||||
|
||||
-----------------------------------------
|
||||
-- MP HANDLING CHECKS
|
||||
function CheckIfCanBeCut(part_name)
|
||||
function CheckIfCanBeCut(part_name, part_data)
|
||||
|
||||
local toc_data = getPlayer():getModData().TOC
|
||||
local check = (not toc_data.Limbs[part_name].is_cut) and
|
||||
(not CheckIfProsthesisAlreadyInstalled(toc_data.Limbs, part_name))
|
||||
if part_data == nil then
|
||||
part_data = getPlayer():getModData().TOC.Limbs
|
||||
|
||||
end
|
||||
local check = (not part_data[part_name].is_cut) and
|
||||
(not CheckIfProsthesisAlreadyInstalled(part_data, part_name))
|
||||
|
||||
return check
|
||||
|
||||
end
|
||||
|
||||
function CheckIfCanBeOperated(part_name)
|
||||
function CheckIfCanBeOperated(part_name, part_data)
|
||||
|
||||
if part_data == nil then
|
||||
part_data = getPlayer():getModData().TOC.Limbs
|
||||
end
|
||||
|
||||
local part_data = getPlayer():getModData().TOC.Limbs
|
||||
|
||||
return part_data[part_name].is_operated == false and part_data[part_name].is_amputation_shown
|
||||
|
||||
|
||||
@@ -229,3 +229,30 @@ local function OnTocServerCommand(module, command, args)
|
||||
end
|
||||
|
||||
Events.OnServerCommand.Add(OnTocServerCommand)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
---------------------------------- TEST -----------------------------
|
||||
|
||||
|
||||
function TOC_OnReceiveGlobalModData(key, modData)
|
||||
if modData then
|
||||
ModData.remove(key)
|
||||
ModData.add(key, modData)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Events.OnReceiveGlobalModData.Add(TOC_OnReceiveGlobalModData)
|
||||
|
||||
function TOC_OnConnected()
|
||||
ModData.request("TOC_PLAYER_DATA")
|
||||
end
|
||||
|
||||
|
||||
Events.OnConnected.Add(TOC_OnConnected)
|
||||
|
||||
|
||||
@@ -101,14 +101,6 @@ TocContextMenus.CreateOperateWithOvenMenu = function(player, context, worldObjec
|
||||
end
|
||||
|
||||
|
||||
TocContextMenus.DoCut = function(_, patient, surgeon, part_name)
|
||||
|
||||
if TocGetSawInInventory(surgeon) then
|
||||
ISTimedActionQueue.add(ISCutLimb:new(patient, surgeon, part_name));
|
||||
else
|
||||
surgeon:Say("I don't have a saw on me")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
@@ -131,20 +123,38 @@ TocContextMenus.FillCutAndOperateMenus = function(local_player, clicked_player,
|
||||
|
||||
|
||||
if local_player == clicked_player then -- Local player
|
||||
if CheckIfCanBeCut(v) then
|
||||
if CheckIfCanBeCut(v) and TocGetSawInInventory(local_player) ~= nil then
|
||||
|
||||
cut_menu:addOption(getText('UI_ContextMenu_' .. v), _, TryTocAction, v, "Cut", local_player, local_player)
|
||||
|
||||
elseif CheckIfCanBeOperated(v) then
|
||||
elseif CheckIfCanBeOperated(v) and TocGetKitInInventory(local_player) ~= nil then
|
||||
operate_menu:addOption(getText('UI_ContextMenu_' .. v), _, TryTocAction, v, "Operate", local_player,
|
||||
local_player)
|
||||
end
|
||||
|
||||
else -- Another player
|
||||
-- TODO add way to prevent cutting already cut parts of another player
|
||||
cut_menu:addOption(getText('UI_ContextMenu_' .. v), world_objects, TryTocAction, v, "Cut", local_player,
|
||||
clicked_player)
|
||||
operate_menu:addOption(getText('UI_ContextMenu_' .. v), world_objects, TryTocAction, v, "Operate",
|
||||
local_player, clicked_player)
|
||||
|
||||
if ModData.get("TOC_PLAYER_DATA")[clicked_player:getUsername()] ~= nil then
|
||||
local anotherPlayerData = ModData.get("TOC_PLAYER_DATA")[clicked_player:getUsername()]
|
||||
|
||||
if CheckIfCanBeCut(v, anotherPlayerData[1]) and TocGetSawInInventory(local_player) then
|
||||
cut_menu:addOption(getText('UI_ContextMenu_' .. v), world_objects, TryTocAction, v, "Cut", local_player,
|
||||
clicked_player)
|
||||
elseif CheckIfCanBeOperated(v, anotherPlayerData[1]) and TocGetKitInInventory(local_player) ~= nil then
|
||||
operate_menu:addOption(getText('UI_ContextMenu_' .. v), world_objects, TryTocAction, v, "Operate",
|
||||
local_player, clicked_player)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
function TocCutLocal(_, player, part_name)
|
||||
if TocGetSawInInventory(player) ~= nil then
|
||||
ISTimedActionQueue.add(ISCutLimb:new(player, player, part_name));
|
||||
ISTimedActionQueue.add(ISCutLimb:new(player, player, part_name))
|
||||
else
|
||||
player:Say("I don't have a saw on me")
|
||||
end
|
||||
|
||||
@@ -31,8 +31,7 @@ end
|
||||
|
||||
------------------------------
|
||||
-- UI Visible stuff functions
|
||||
local function GetImageName(part_name, toc_data)
|
||||
local part_data = toc_data.Limbs[part_name]
|
||||
local function GetImageName(part_name, part_data)
|
||||
local name = ""
|
||||
|
||||
if part_data.is_cut and part_data.is_cicatrized and part_data.is_prosthesis_equipped then -- Cut and equip
|
||||
@@ -59,9 +58,9 @@ local function GetImageName(part_name, toc_data)
|
||||
end
|
||||
|
||||
-- If foreaerm equip, change hand
|
||||
if part_name == "Right_Hand" and toc_data.Limbs["Right_LowerArm"].is_prosthesis_equipped then
|
||||
if part_name == "Right_Hand" and part_data["Right_LowerArm"].is_prosthesis_equipped then
|
||||
name = "media/ui/TOC/" .. part_name .. "/Hook.png"
|
||||
elseif part_name == "Left_Hand" and toc_data.Limbs["Left_LowerArm"].is_prosthesis_equipped then
|
||||
elseif part_name == "Left_Hand" and part_data["Left_LowerArm"].is_prosthesis_equipped then
|
||||
name = "media/ui/TOC/" .. part_name .. "/Hook.png"
|
||||
end
|
||||
return name
|
||||
@@ -137,7 +136,7 @@ local function OnClickTocMainUI(button, args)
|
||||
|
||||
desc_ui:open()
|
||||
desc_ui:setPositionPixel(main_ui:getRight(), main_ui:getY())
|
||||
SetupTocDescUI(main_ui.surgeon, main_ui.patient, args.toc_data, args.part_name) -- surgeon is generic.
|
||||
SetupTocDescUI(main_ui.surgeon, main_ui.patient, args.part_data, args.part_name) -- surgeon is generic.
|
||||
|
||||
end
|
||||
|
||||
@@ -351,37 +350,36 @@ end
|
||||
-----------------------------------------
|
||||
-- Setup stuff with variables and shit
|
||||
|
||||
function SetupTocMainUI(surgeon, patient, toc_data)
|
||||
function SetupTocMainUI(surgeon, patient, part_data)
|
||||
|
||||
-- TODO add a ontick to update it regularly
|
||||
|
||||
main_ui.surgeon = surgeon -- we shouldn't need an arg for this
|
||||
main_ui.patient = patient
|
||||
|
||||
if toc_data then
|
||||
main_ui["b11"]:addArg("toc_data", toc_data)
|
||||
main_ui["b12"]:addArg("toc_data", toc_data)
|
||||
main_ui["b21"]:addArg("toc_data", toc_data)
|
||||
main_ui["b22"]:addArg("toc_data", toc_data)
|
||||
main_ui["b31"]:addArg("toc_data", toc_data)
|
||||
main_ui["b32"]:addArg("toc_data", toc_data)
|
||||
if part_data then
|
||||
main_ui["b11"]:addArg("part_data", part_data)
|
||||
main_ui["b12"]:addArg("part_data", part_data)
|
||||
main_ui["b21"]:addArg("part_data", part_data)
|
||||
main_ui["b22"]:addArg("part_data", part_data)
|
||||
main_ui["b31"]:addArg("part_data", part_data)
|
||||
main_ui["b32"]:addArg("part_data", part_data)
|
||||
|
||||
main_ui["b11"]:setPath(GetImageName("Right_UpperArm", toc_data))
|
||||
main_ui["b12"]:setPath(GetImageName("Left_UpperArm", toc_data))
|
||||
main_ui["b11"]:setPath(GetImageName("Right_UpperArm", part_data))
|
||||
main_ui["b12"]:setPath(GetImageName("Left_UpperArm", part_data))
|
||||
|
||||
main_ui["b21"]:setPath(GetImageName("Right_LowerArm", toc_data))
|
||||
main_ui["b22"]:setPath(GetImageName("Left_LowerArm", toc_data))
|
||||
main_ui["b21"]:setPath(GetImageName("Right_LowerArm", part_data))
|
||||
main_ui["b22"]:setPath(GetImageName("Left_LowerArm", part_data))
|
||||
|
||||
main_ui["b31"]:setPath(GetImageName("Right_Hand", toc_data))
|
||||
main_ui["b32"]:setPath(GetImageName("Left_Hand", toc_data))
|
||||
main_ui["b31"]:setPath(GetImageName("Right_Hand", part_data))
|
||||
main_ui["b32"]:setPath(GetImageName("Left_Hand", part_data))
|
||||
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
function SetupTocDescUI(surgeon, patient, toc_data, part_name)
|
||||
local part_data = toc_data.Limbs[part_name]
|
||||
function SetupTocDescUI(surgeon, patient, part_data, part_name)
|
||||
desc_ui["textTitle"]:setText(getText("UI_ContextMenu_" .. part_name))
|
||||
desc_ui.part_name = part_name
|
||||
desc_ui.surgeon = surgeon
|
||||
@@ -454,11 +452,11 @@ function SetupTocDescUI(surgeon, patient, toc_data, part_name)
|
||||
-- TODO add check for cuts and scratches
|
||||
desc_ui["status"]:setText("Not cut")
|
||||
desc_ui["status"]:setColor(1, 1, 1, 1)
|
||||
if TocGetSawInInventory(surgeon) and not CheckIfProsthesisAlreadyInstalled(toc_data.Limbs, part_name) then
|
||||
if TocGetSawInInventory(surgeon) and not CheckIfProsthesisAlreadyInstalled(part_data, part_name) then
|
||||
desc_ui["b1"]:setVisible(true)
|
||||
desc_ui["b1"]:setText("Cut")
|
||||
desc_ui["b1"]:addArg("option", "Cut")
|
||||
elseif TocGetSawInInventory(surgeon) and CheckIfProsthesisAlreadyInstalled(toc_data.Limbs, part_name) then
|
||||
elseif TocGetSawInInventory(surgeon) and CheckIfProsthesisAlreadyInstalled(part_data, part_name) then
|
||||
desc_ui["b1"]:setVisible(true)
|
||||
desc_ui["b1"]:setText("Remove prosthesis before")
|
||||
desc_ui["b1"]:addArg("option", "Nothing")
|
||||
@@ -547,20 +545,29 @@ function ISNewHealthPanel.onClick_TOC(button)
|
||||
|
||||
if surgeon then
|
||||
if surgeon == patient then
|
||||
SetupTocMainUI(surgeon, surgeon, surgeon:getModData().TOC)
|
||||
SetupTocMainUI(surgeon, surgeon, surgeon:getModData().TOC.Limbs)
|
||||
else
|
||||
-- MP stuff, try to get the other player data and display it on the surgeon display
|
||||
sendClientCommand(surgeon, "TOC", "GetPlayerData", { surgeon:getOnlineID(), patient:getOnlineID() })
|
||||
if ModData.get("TOC_PLAYER_DATA")[patient:getUsername()] ~= nil then
|
||||
local other_player_part_data = ModData.get("TOC_PLAYER_DATA")[patient:getUsername()]
|
||||
|
||||
TocTempTable.TempPatient = patient
|
||||
TocTempTable.TempSurgeon = surgeon
|
||||
SetupTocMainUI(surgeon, patient, other_player_part_data[1])
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
--sendClientCommand(surgeon, "TOC", "GetPlayerData", { surgeon:getOnlineID(), patient:getOnlineID() })
|
||||
|
||||
--TocTempTable.TempPatient = patient
|
||||
--TocTempTable.TempSurgeon = surgeon
|
||||
|
||||
-- Wait for ack
|
||||
Events.OnTick.Add(TocWaitForOnlinePlayerData)
|
||||
--Events.OnTick.Add(TocWaitForOnlinePlayerData)
|
||||
end
|
||||
else
|
||||
-- This is when surgeon doesnt exist for some reason.
|
||||
SetupTocMainUI(patient, patient, patient:getModData().TOC)
|
||||
SetupTocMainUI(patient, patient, patient:getModData().TOC.Limbs)
|
||||
end
|
||||
|
||||
main_ui:toggle()
|
||||
|
||||
@@ -26,7 +26,6 @@ function TheOnlyCure.CheckIfPlayerIsInfected(player, toc_data)
|
||||
if body_damage:getBodyPart(v):bitten() and part_data ~= nil then
|
||||
if part_data.is_cut == false then
|
||||
part_data.is_infected = true
|
||||
player:transmitModData()
|
||||
end
|
||||
|
||||
end
|
||||
@@ -35,7 +34,6 @@ function TheOnlyCure.CheckIfPlayerIsInfected(player, toc_data)
|
||||
for _, v in ipairs(GetOtherBodyPartTypes()) do
|
||||
if body_damage:getBodyPart(v):bitten() then
|
||||
toc_data.Limbs.is_other_bodypart_infected = true -- Even one is enough, stop cycling if we find it
|
||||
player:transmitModData()
|
||||
break
|
||||
end
|
||||
end
|
||||
@@ -55,7 +53,6 @@ function TheOnlyCure.UpdatePlayerHealth(player, part_data)
|
||||
end
|
||||
end
|
||||
|
||||
player:transmitModData()
|
||||
|
||||
|
||||
end
|
||||
@@ -159,6 +156,16 @@ function TheOnlyCure.UpdateEveryOneMinute()
|
||||
TheOnlyCure.UpdatePlayerHealth(player, toc_data.Limbs)
|
||||
end
|
||||
|
||||
|
||||
|
||||
if toc_data ~= nil then
|
||||
sendClientCommand(player, 'TOC', 'ChangePlayerState', { toc_data.Limbs } )
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
end
|
||||
|
||||
function TheOnlyCure.UpdateEveryTenMinutes()
|
||||
@@ -183,12 +190,9 @@ function TheOnlyCure.UpdateEveryTenMinutes()
|
||||
for _, part_name in pairs(GetBodyParts()) do
|
||||
if part_data[part_name].is_cut and not part_data[part_name].is_cicatrized then
|
||||
part_data[part_name].cicatrization_time = part_data[part_name].cicatrization_time - 1 -- TODO Make it more "dynamic"
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
player:transmitModData()
|
||||
end
|
||||
|
||||
Events.EveryTenMinutes.Add(TheOnlyCure.UpdateEveryTenMinutes)
|
||||
|
||||
@@ -423,6 +423,8 @@ function TryTocAction(_, part_name, action, surgeon, patient)
|
||||
patient = surgeon
|
||||
end
|
||||
|
||||
|
||||
|
||||
if action == "Cut" then
|
||||
AskCanCutLimb(patient, part_name)
|
||||
elseif action == "Operate" then
|
||||
|
||||
@@ -40,15 +40,40 @@ Commands["AskToResetEverything"] = function(_, arg)
|
||||
|
||||
end
|
||||
|
||||
local function OnTocClientCommand(module, command, player, args)
|
||||
if module == 'TOC' then
|
||||
print("OnTocClientCommand " .. command)
|
||||
if Commands[command] then
|
||||
args = args or {}
|
||||
Commands[command](_, args)
|
||||
end
|
||||
end
|
||||
-- local function OnTocClientCommand(module, command, player, args)
|
||||
-- if module == 'TOC' then
|
||||
-- print("OnTocClientCommand " .. command)
|
||||
-- if Commands[command] then
|
||||
-- args = args or {}
|
||||
-- Commands[command](_, args)
|
||||
-- end
|
||||
-- end
|
||||
|
||||
-- end
|
||||
|
||||
--Events.OnClientCommand.Add(OnTocClientCommand)
|
||||
|
||||
-------------------------------- TEST ------------------------
|
||||
|
||||
TOC_Commands = {}
|
||||
|
||||
function TOC_OnInitGlobalModData()
|
||||
ModData.getOrCreate("TOC_PLAYER_DATA")
|
||||
end
|
||||
|
||||
Events.OnClientCommand.Add(OnTocClientCommand)
|
||||
Events.OnInitGlobalModData.Add(TOC_OnInitGlobalModData)
|
||||
|
||||
TOC_Commands.OnClientCommand = function(module, command, playerObj, args)
|
||||
if module == 'TOC' and TOC_Commands[command] then
|
||||
TOC_Commands[command](playerObj, args)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Events.OnClientCommand.Add(TOC_Commands.OnClientCommand)
|
||||
|
||||
|
||||
TOC_Commands.ChangePlayerState = function(playerObj, args)
|
||||
ModData.get("TOC_PLAYER_DATA")[playerObj:getUsername()] = args
|
||||
ModData.transmit("TOC_PLAYER_DATA")
|
||||
end
|
||||
Reference in New Issue
Block a user