local sw,sh = guiGetScreenSize() local osw = sw/1280 local osh = sh/1024 local maxdist = 200 local vis = 0 local currentUse = false local infoTable = {{"Health",true,nil},{"Armor",true,nil},{"Weapon",true,nil},{"Vehicle",true,nil},{"Team",true,"player"}} local colors = {window=tocolor(0,0,200,130),windowHead=tocolor(0,0,0,180),windowHeadText=tocolor(255,0,0,255),windowText=tocolor(255,0,0,255)} --BONES-- local lvl1bones = {[54] = 53,[53] = 52,[52] = 51,[51] = 1,[44] = 43,[43] = 42,[42] = 41,[41] = 1,[1] = 2,[2] = 3,[3] = 4,[26] = 25,[25] = 24,[24] = 23,[23] = 22,[21] = 22, [36] = 35,[35] = 34,[34] = 33,[33] = 32,[31] = 32,[4] = 6,[6] = 7,[7] = 4,[32] = 41,[22] = 51} local lvl2bones = {[5] = 32, [22] = 5, [24] = 23, [23] = 22, [32] = 33, [33] = 34, [1] = 5, [51] = 1, [41] = 1, [52] = 51, [42] = 41, [6] = 5, [53] = 52, [43] = 42} local lvl3bones = {[24] = 23, [23] = 5, [34] = 33, [33] = 5, [1] = 5, [52] = 1, [42] = 1, [53] = 52, [43] = 42} --BONES-- function getType(element) if isElement(element) then return getElementType(element) else return type(element) end end function isNormalValue(value) if getType(value) ~= "table" then return false, "Argument must be 'table'" elseif getType(value[1]) ~= "string" or getType(value[2]) ~= "string" then return false, "Value should be like '{string showingName, string elementData, player/ped/nil workingElement, [{childValue1,childValue2,..}]}" end if value[4] then if getType(value[4]) ~= "table" then return false, "Child values must be 'table'" else for i,value in ipairs(value[4]) do local isNormal, debugMessage = isNormalValue(value) if not isNormal then return isNormal, debugMessage end end end end return true end function addWindowInfo(value) local isNormal, debugMessage = isNormalValue(value) if not isNormal then return isNormal, debugMessage end infoTable[#infoTable+1] = value return true end function removeWindowInfo(v1,v2,v3) if v1 then for i,value in ipairs(infoTable) do if value[1] == v1 then if v2 then if value[2] == v2 then if v3 then if value[3] == v3 then table.remove(infoTable,i) return true end else table.remove(infoTable,i) return true end end else table.remove(infoTable,i) return true end end end end return false end function table.ps(pl) local scores = {} local n = 0 local win = {} for k,v in pairs(pl) do table.insert(scores,v) end table.sort(scores,function(a,b) return aend) for i,v in ipairs(scores) do n = n + 1 local find = 0 for e,r in pairs(pl) do if r == v and find ~= 1 then win[i] = e find = 1 end end end return win end function checkTarget(tab) local target = table.ps(tab)[1] if target == getLocalPlayer() or target == nil then target = table.ps(tab)[2] end if target then drawInfoWindow(target) end end function getValue(ped,value,num) local ret = getElementData(ped,value[2]) local space = " " if ret then if value[4] then for i,value in ipairs(value[4]) do ret = tostring(ret).."\n"..space:rep(num+1)..value[1]..": "..tostring(getValue(ped,value,num+1)) end end end return ret end function getStandartValue(ped,value) local ret if value == "Health" then ret = math.floor(getElementHealth(ped)) elseif value == "Armor" then ret = math.floor(getPedArmor(ped)) elseif value == "Weapon" then local pedWeap = getPedWeapon(ped) ret = getWeaponNameFromID(pedWeap).." (ID: "..pedWeap..")" ret = ret.."\n Ammo: "..getPedTotalAmmo(ped) elseif value == "Vehicle" then local pedVeh = getPedOccupiedVehicle(ped) ret = "-" if pedVeh then local vModel = getElementModel(pedVeh) ret = getVehicleNameFromModel(vModel).." (ID: "..vModel..")\n Vehicle Health: "..math.ceil(getElementHealth(pedVeh)) if getVehicleOccupant(pedVeh) == ped then ret = ret.."\n Seat: Driver" else ret = ret.."\n Seat: Passenger" end end elseif value == "Team" then local team = getPlayerTeam(ped) ret = team if team then ret = getTeamName(team) end end return ret end function drawInfoWindow(ped) local pedType = getType(ped) local color2 = tocolor(205,205,205,255) local color3 = tocolor(50,50,50,255) local txt = "" local txtname = "" local alltxt = "" if pedType == "player" then txtname = getPlayerName(ped) else txtname = string.upper(pedType) end if getElementHealth(ped) > 0 then txt = math.floor(getElementHealth(ped)) .. " HP" else txt = "DEAD" end if getType(ped) == "player" then local plteam = getPlayerTeam(ped) if (plteam) then local tr,tg,tb = getTeamColor(plteam) color2 = tocolor(255-tr,255-tg,255-tb,255) color3 = tocolor(tr,tg,tb,255) else color2 = tocolor(0,0,0,255) color3 = tocolor(255,255,255,255) end end local x8,y8,z8 = getPedBonePosition(ped,8) local px8,py8 = getScreenFromWorldPosition(x8,y8,z8+0.3) if not px8 then x8,y8,z8 = getElementPosition(ped) px8,py8 = getScreenFromWorldPosition(x8,y8,z8) end for ind,value in ipairs(infoTable) do local vtxt = value[1] if not value[3] or value[3] == pedType then if value[2] == true then vtxt = vtxt..": "..tostring(getStandartValue(ped,vtxt)) else vtxt = vtxt..": "..tostring(getValue(ped,value,0)) end alltxt = alltxt..vtxt.."\n" end end alltxt = alltxt:sub(1,alltxt:len()-1) dxDrawText(txt,px8+1,py8-1,px8+1,py8-1,color2,1,"default-bold","center","center") dxDrawText(txt,px8-1,py8+1,px8-1,py8+1,color2,1,"default-bold","center","center") dxDrawText(txt,px8+1,py8+1,px8+1,py8+1,color2,1,"default-bold","center","center") dxDrawText(txt,px8-1,py8-1,px8-1,py8-1,color2,1,"default-bold","center","center") dxDrawText(txt,px8,py8,px8,py8,color3,1,"default-bold","center","center") local _,amountOfN = string.gsub(alltxt,"\n","") local windHeight = 35+15*(amountOfN+1) dxDrawRectangle(sw-(osh*250+16),osh*650,osh*250,osh*windHeight,colors.window) dxDrawRectangle(sw-(osh*250+16),osh*650,osh*250,osh*25,colors.windowHead) dxDrawText(txtname,sw-(osh*250+16),osh*650,sw-6,osh*675,colors.windowHeadText,1,"default-bold","center","center") dxDrawText(alltxt,sw-(osh*250+6),osh*680,sw-26,osh*850,colors.windowText,1 ,"default-bold","left","top",false,true) end function drawPedBones (ped) local aList = {} if ped ~= getLocalPlayer() then local x,y,z = getCameraMatrix() local px,py,pz = getElementPosition(ped) local fDistance = getDistanceBetweenPoints3D(x,y,z,px,py,pz) if fDistance < 40 then aList = lvl1bones elseif fDistance < 90 and fDistance >= 40 then aList = lvl2bones elseif fDistance < maxdist and fDistance >= 90 then aList = lvl3bones end local playerTeam = nil if getType(ped) == "player" then playerTeam = getPlayerTeam( ped ) end local red,green,blue = 200,200,200 if playerTeam then red,green,blue = getTeamColor ( playerTeam ) end local pedColor = tocolor(red,green,blue,255) for iFrom,iTo in pairs(aList) do local x1,y1,z1 = getPedBonePosition(ped,iFrom) local x2,y2,z2 = getPedBonePosition(ped,iTo) if not (x1 or x2) then return end local screenX1, screenY1 = getScreenFromWorldPosition ( x1,y1,z1 ) local screenX2, screenY2 = getScreenFromWorldPosition ( x2,y2,z2 ) if screenX1 and screenX2 then