This is a read-only snapshot of the ComputerCraft forums, taken in April 2020.
Kristaps220's profile picture

[Openccsensors] Pnearby V1.0 - See List Of Players Nearby!

Started by Kristaps220, 16 August 2013 - 03:12 AM
Kristaps220 #1
Posted 16 August 2013 - 05:12 AM
PNearby

See list of players nearby!


Introduction

Hello ComputerCrafter! I'm Kristaps220 and I made program that uses OpenCCSensors. I was messing around tekkit lite, and discovered sensor cards. I started to use them and I kinda liked them. Server where I played was PVP server, so I decided to make program that shows players nearby my house.

Features

Current features are:
  • Lists players on monitor
  • GitHub auto-updater
  • Manual configuration
  • Monitor and sensor auto-detection
Download

Latest version: v321bzDD
OpenCCSensors topic: is here

NOTE: I am not creator of OpenCCSensors.

Screenshots

Of course, screenies! :P/>
SpoilerSetup:

This pops out when you type PNearby.

Running the program:

Configuration setup:

While running program, you can press Q to exit it.

Todo list

I'm open for suggestions.

Changelog

V1.0
Spoiler- First release!
- Added auto-updater
- Added manual configuration
- Added auto-detection for monitor and sensor

Code

Spoiler

--[[

   ======================  
   PNearby	
   version 1.0
   by Kristaps220
   ======================
  
   To use this program, you will need
   OpenCCSensors peripheral installed
  
   [OPTIONAL]
   Proximity Sensor Card Mk4
   2x3 Sized (advanced) monitor.
  
]]--


local this = shell.getRunningProgram()
local Arguments = { ... }  
local version = "1.0"

local function clear()
term.clear()
term.setCursorPos(1,1)
end

local function sl(str)
string.lower(str)
end

function update()
http.request("https://raw.github.com/Kristaps220/PNearby-Files-LUA/master/PNearby%20V1.1")
anotherStuff = true
while anotherStuff do
  local evt, urs, ursText = os.pullEvent()
  if evt == "http_success" then
   local resText = ursText.readAll()
   if fs.exists("PNearby") then
	fs.delete("PNearby")
   end
   han = fs.open("PNearby","w")
   han.write(resText)
   han.close()
   print("Finished updating. New file name: PNearby")
   print(" ")
   anotherStuff = false
  elseif evt == "http_failure" then
   print("Failed to connect to github. Download newest version automatically at ComputerCraft forums PNearby topic")
   anotherStuff = false
  end
end
end

function checkForUpdates()
http.request("https://raw.github.com/Kristaps220/PNearby-Files-LUA/master/updateAvailable")
local stuff = true
while stuff do
  local event, url, urlText = os.pullEvent()
  if event == "http_success" then
   local respText = urlText.readAll()
   if respText == "yes" then
	print("Update available! Would you like to download it now?")
	write("Yes/No : ")
	tAnswer = read()
	if tAnswer == string.lower("yes") then
	 print("Updating now...")
	 stuff = false
	 update()
	else
	 print("Updating cancelled.")
	 stuff = false
	 print(" ")
	end
   end
   stuff = false
  elseif event == "http_failure" then
   print("Failed to connect to github. Download newest version automatically at ComputerCraft forums PNearby topic. ")
   stuff = false
   print(" ")
  end
end
end

local function readConfig()
if fs.exists("PNearbyCFG") then
  tc = fs.open("PNearbyCFG/titleCol","r")
  nc = fs.open("PNearbyCFG/namesCol","r")
  it = fs.open("PNearbyCFG/updinter","r")
  sc = fs.open("PNearbyCFG/monscale","r")
  titleCol = tc.readAll()
  namesCol = nc.readAll()
  inter = it.readAll()
  scale = sc.readAll()
  tc.close()
  nc.close()
  it.close()
  sc.close()
else
  print("Please set up configuration file to use this program.")
  term.restore()
  error()
end
end
--readconfig and check if conifguration directory exists

local function fColor()
if term.isColor() then
  term.setTextColor(8)
  print("Welcome to "..this.." config setup!\n")
  term.setTextColor(128)
  write("Do not use numeric colors (")
  term.setTextColor(2048)
  write("1 2 4 8 etc.")
  term.setTextColor(128)
  write(") because this program isn't compatible with them. Use instead colors.(color) example: colors.")
  term.setTextColor(2)
  print("orange ")
  term.setTextColor(128)
  write("Title Color: ")
  term.setTextColor(256)
  tic = read()
  term.setTextColor(128)
  write("Names Color: ")
  term.setTextColor(256)
  nic = read()
  term.setTextColor(128)
  write("Names list updating interval: ")
  term.setTextColor(256)
  int = read()
  term.setTextColor(128)
  write("Monitor text scale: ")
  term.setTextColor(256)
  sca = read()
  term.setTextColor(1)
  print(" ")
  print("Use "..this.." run to run the program!")
else
  print("Welcome to "..this.." config setup!\n")
  print("Write numeric colors (1,2,4,8) or colors.(color) example: colors.orange")
  write("Title Color: ")
  tic = read()
  write("Names Color: ")
  nic = read()
  write("Names list updating interval: ")
  int = read()
  write("Monitor text scale: ")
  sca = read()
end
end

local function setConfig()
if fs.isDir("PNearbyCFG") then
  clear()
  tc = fs.open("PNearbyCFG/titleCol","w")
  nc = fs.open("PNearbyCFG/namesCol","w")
  it = fs.open("PNearbyCFG/updinter","w")
  sc = fs.open("PNearbyCFG/monscale","w")
  fColor()
-- WARNING: Walls of 'if ... then' !!
if tic == "colors.white" then
  tic2 = "1"
elseif tic == "colors.orange" then
  tic2 = "2"
elseif tic == "colors.magenta" then
  tic2 = "4"
elseif tic == "colors.lightBlue" then
  tic2 = "8"
elseif tic == "colors.yellow" then
  tic2 = "16"
elseif tic == "colors.lime" then
  tic2 = "32"
elseif tic == "colors.pink" then
  tic2 = "64"
elseif tic == "colors.gray" then
  tic2 = "128"
elseif tic == "colors.lightGray" then
  tic2 = "256"
elseif tic == "colors.cyan" then
  tic2 = "512"
elseif tic == "colors.purple" then
  tic2 = "1048"
elseif tic == "colors.blue" then
  tic2 = "2048"
elseif tic == "colors.brown" then
  tic2 = "4096"
elseif tic == "colors.green" then
  tic2 = "32"
elseif tic == "colors.red" then
  tic2 = "16384"
elseif tic == "colors.black" then
  tic2 = "32768"
end


  if nic == "colors.white" then
  nic2 = "1"
elseif nic == "colors.orange" then
  nic2 = "2"
elseif nic == "colors.magenta" then
  nic2 = "4"
elseif nic == "colors.lightBlue" then
  nic2 = "8"
elseif nic == "colors.yellow" then
  nic2 = "16"
elseif nic == "colors.lime" then
  nic2 = "32"
elseif nic == "colors.pink" then
  nic2 = "64"
elseif nic == "colors.gray" then
  nic2 = "128"
elseif nic == "colors.lightGray" then
  nic2 = "256"
elseif nic == "colors.cyan" then
  nic2 = "512"
elseif nic == "colors.purple" then
  nic2 = "1048"
elseif nic == "colors.blue" then
  nic2 = "2048"
elseif nic == "colors.brown" then
  nic2 = "4096"
elseif nic == "colors.green" then
  nic2 = "32"
elseif nic == "colors.red" then
  nic2 = "16384"
elseif nic == "colors.black" then
  nic2 = "32768"
end

  tc.writeLine(tic2)
  nc.writeLine(nic2)
  it.writeLine(int)
  sc.writeLine(sca)

  tc.close()
  nc.close()
  it.close()
  sc.close()
else
  print("Generating PNearbyCFG directory...")
  fs.makeDir("PNearbyCFG")
  print("Done.")
  print("Use "..this.." config to set up the configuration.")
end
end

checkForUpdates()
if Arguments[1] == "config" then
setConfig()
elseif Arguments[1] == "run" then

readConfig()
print("Press Q to quit.")
os.loadAPI("ocs/apis/sensor")

local function wrapSensor()
if peripheral.getType("bottom") == "sensor" then
  prox = sensor.wrap("bottom")
elseif peripheral.getType("top") == "sensor" then
  prox = sensor.wrap("top")
elseif peripheral.getType("right") == "sensor" then
  prox = sensor.wrap("right")
elseif peripheral.getType("left") == "sensor" then
  prox = sensor.wrap("left")
elseif peripheral.getType("back") == "sensor" then
  prox = sensor.wrap("back")
elseif peripheral.getType("front") == "sensor" then
  prox = sensor.wrap("front")
end
end

local function wrapMonitor()
if peripheral.getType("bottom") == "monitor" then
  m = peripheral.wrap("bottom")
elseif peripheral.getType("top") == "monitor" then
  m = peripheral.wrap("top")
elseif peripheral.getType("left") == "monitor" then
  m = peripheral.wrap("left")
elseif peripheral.getType("right") == "monitor" then
  m = peripheral.wrap("right")
elseif peripheral.getType("front") == "monitor" then
  m = peripheral.wrap("front")
elseif peripheral.getType("back") == "monitor" then
  m = peripheral.wrap("back")
end
end


local function main()

wrapSensor()
wrapMonitor()

local targets = prox.getTargets()

m.clear()
m.setCursorPos(1,1)
m.setTextColor(tonumber(titleCol))
m.setTextScale(tonumber(scale))

term.redirect(m)
print(" PLAYERS NEARBY "..version.."\n")
for name, basicDetails in pairs(targets) do
  local moreDetails = prox.getTargetDetails(name)
  if moreDetails.Name == "Player" then
   term.setTextColor(tonumber(namesCol))
   print(name.." "..moreDetails.Health.."HP")
  end
end
term.restore()
end

--* Thanks to TheoriginalBIT for BSoD tutorial! *--
function callMain()
while true do
  local ok, err = pcall(main)
  os.startTimer(tonumber(inter))
  evt, param1 = os.pullEvent()
  if evt == "key" then
   if param1 == 16 then
	sleep(0.1)
	m.clear()
	m.setCursorPos(1,1)
	print("Stopped.")
	term.restore()
	break
   end
  end

  if not ok then
   term.restore()
   print("Something bad happened. Check if you have attached monitor and Sensor Peripheral and make sure, that Sensor Peripheral has Proximity Sensor Card in it.")
   print("The actual error code is:")
   print(err)
   break
  end
end
end

callMain()

else
print("Usage: ")
print(this.." run")
print(this.." config")
end

--[[
  
	If program crashes and you can't
	edit any file, then reboot the
	computer.

]]--

Thank you for reading this topic!
Please give feedback/critique/suggestions about this program! I'm not experienced coder, so any tips will be good for me!
Vilsol #2
Posted 09 September 2013 - 06:54 PM
Open spoiler only if you are Latvian!
SpoilerOoo beidzot ari kads Latvietis paradijies forumos! Chau!

About the program, good job, is there a way I can change the radius of the search or the side of the monitor?

Oh my god, I just necro-bumped didn't I?
Kristaps220 #3
Posted 11 September 2013 - 09:32 AM
-snip-
is there a way I can change the radius of the search
Currently there's no options to change radius of player searching without, but you can still use the best (MK4) player sensor card. (as i use 1.4.7, this may be not true) also you can place monitor on any side you wish (but not networking cables)
By the way im so happy that someone finally posted! :)/>
Spoilerčau, nebiju domājis, ka satikšu kādu latvieti šajos forumos! :D/>