gelatine87 icon

colonyStatus

gelatine87 | PRO | 05/11/23 08:24:32 PM UTC (Edited) | 0 ⭐ | 1077 👁️ | Never ⏰ | [cc:tweaked, Minecolonies]
Lua |

4.94 KB

|

Gaming

|

0 👍

/

0 👎

 -- Startup Stuff
 local colony = peripheral.wrap("left")
 mon = peripheral.wrap("top")
 -- End Startup Stuff
 
function SortJob(a, b)
  if (a == nil or a["job"] == nil) then return false end
  if (b == nil or b["job"] == nil) then return false end
  return a["job"] < b["job"]
end
 
function FirstName(name)
  returnStr = ""
  for i=1, #name do
      local char = string.sub(name, i, i)
      if (char == " " or i == 9) then
          return returnStr
      end
      returnStr = returnStr .. char
  end
  return returnStr
end
 
function GetHappiness(happiness)
  local mult = 10 -- # of places
  happiness = math.floor(happiness * mult + 0.5) / mult
  if (happiness == 10.0) then
      mon.setTextColor(colors.green)
  else
      mon.setTextColor(colors.pink)
  end
  mon.write(happiness)
end
 
function GetJobStatus(status)
  local statusText = {
      ["Working"] = "Working",
      ["Farming"] = "Working",
      ["Delivering"] = "Working",
      ["Mining"] = "Working",
      ["Composting"] = "Working",
      ["Searching for trees"] = "Working"
  }
 
  if (statusText[status] == nil) then
      mon.setTextColor(colors.red)
      mon.write(status)
  else
      mon.setTextColor(colors.green)
      mon.write(statusText[status])
  end
end
 
function SetJobColor(job)
  local jobColors = {
      ["Knight"] = colors.magenta,
      ["Courier"] = colors.yellow,
      ["Archer"] = colors.pink,
      ["Builder"] = colors.brown,
      ["Druid"] = colors.lime,
      ["Enchanter"] = colors.purple,
      ["Farmer"] = colors.cyan,
      ["Student"] = colors.orange,
      ["Researcher"] = colors.lightBlue
  }
  if (jobColors[job] == nil) then
      mon.setTextColor(colors.blue)
  else
      mon.setTextColor(jobColors[job])
  end
end
 
function GetBedDistance(bed, work)
  local bedY = bed and bed["z"]
  local bedX = bed and bed["x"]
  if not (wobedYrkY and bedX) then
    return
  end
  local workY = work and work["z"]
  local workX = work and work["x"]
  if not (workY and workX) then
    return
  end
  local distanceY = math.abs(workY - bedY)
  local distanceX = math.abs(workX - bedX)
  local distance = math.sqrt(distanceX^2 + distanceY^2)
  local mult = 10 -- # of decimal places
  distance = math.floor(distance * mult + 0.5) / mult
  
  mon.setTextColor(colors.green)
  if (distance > 99) then
      mon.setTextColor(colors.red)
  end
  if (distance > 75 and distance < 100) then
      mon.setTextColor(colors.orange)
  end
  if (distance > 50 and distance < 76) then
      mon.setTextColor(colors.yellow)
  end
   mon.write(distance)
end
 
function ShowCitizens()
  local counter = 1
  local row = 1
  local column = 1
  local citizens = colony.getCitizens()
  local job = "unemployed"
  table.sort(citizens, SortJob)
 
  -- Erstelle eine Tabelle zur Zwischenspeicherung der neuen Anzeigen
  local newDisplays = {}
 
  for _, citizen in ipairs(citizens) do
    local status = citizen["status"]
    local job = citizen["job"]
    local bedDistance  -- define bedDistance here
      if (row > 80) then
        row = 1
        column = 82
      end
 
      -- Erstelle die neuen Anzeigen für den Bürger
      local displayName = citizen["name"]
      local jobStatus = status
      local happiness = citizen["happiness"]
      --local bedDistance = {bed = citizen["home"]["location"], work = citizen["work"]["location"]}
 
      if citizen ~= nil and citizen["home"] ~= nil and citizen["home"]["location"] ~= nil and citizen["work"] ~= nil and citizen["work"]["location"] ~= nil then
        local bedDistance = {bed = citizen["home"]["location"], work = citizen["work"]["location"]}
      end
 
      -- Speichere die neuen Anzeigen in der Tabelle
      newDisplays[counter] = {
        displayName = displayName,
        job = job,
        jobStatus = jobStatus,
        happiness = happiness,
        bedDistance = bedDistance,
        row = row,
        column = column
      }
 
      row = row + 1
      counter = counter + 1
  end
 
  -- Lösche den Monitor, bevor die neuen Anzeigen angezeigt werden
  mon.clear()
 
  -- Schreibe die neuen Anzeigen auf den Monitor
  for _, display in ipairs(newDisplays) do
    mon.setCursorPos(display.column, display.row)
    mon.setTextColor(colors.blue)
    mon.setTextScale(0.5)
    mon.write(FirstName(display.displayName))
 
    mon.setCursorPos(display.column + 10, display.row)
    SetJobColor(display.job)
    mon.write(display.job)
 
    mon.setCursorPos(display.column + 25 , display.row)
    mon.write(GetJobStatus(display.jobStatus))
 
    mon.setCursorPos(display.column + 43, display.row)
    mon.write(GetHappiness(display.happiness))
 
    local bed = display.bedDistance["bed"]
    local work = display.bedDistance["work"]
    mon.setCursorPos(display.column + 55, display.row)
    GetBedDistance(display.bedDistance.bed, display.bedDistance.work)  -- the error was here
  end
end
 
while true do
  ShowCitizens()
  sleep(0.5)
end

Comments