Hallo,
ich würde gerne eine Funktion erstellen, die aufgerufen wird, sobald der Spieler ein bestimmtes Radar-Area betritt.
Spoiler anzeigen
Lua
---KeksKing
Areas = {}
function loadZonen()
local Datei = xmlLoadFile("Zonensystem/Zonen.xml")
if Datei then else outputChatBox("Fehler: Zonen.xml konnte nicht geladen werden!", getRootElement(), 255, 0, 0) return end
local Child2 = xmlFindChild(Datei, "Zonen", 0)
for i, v in ipairs(xmlNodeGetChildren(Child2)) do
local c1, c2, c3 = tonumber(xmlNodeGetAttribute(v, "c1")), tonumber(xmlNodeGetAttribute(v, "c2")), tonumber(xmlNodeGetAttribute(v, "c3"))
local x, y = tonumber(xmlNodeGetAttribute(v, "x")), tonumber(xmlNodeGetAttribute(v, "y"))
local sizeX, sizeY = tonumber(xmlNodeGetAttribute(v, "sizex")), tonumber(xmlNodeGetAttribute(v, "sizey"))
local Name, besitzer = xmlNodeGetAttribute(v, "Name"), xmlNodeGetAttribute(v, "Besitzer")
Areas[Name] = createRadarArea(x, y, sizeX, sizeY, c1, c2, c3, 50, getRootElement())
table.insert(Areas, {Gebiet = Name, Besitzer = besitzer})
end
xmlUnloadFile(Datei)
end
addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), loadZonen)
addEventHandler("onResourceRestart", getResourceRootElement(getThisResource()), loadZonen)
--Ist dieses Element in der Zone?
function isElementInZone(Element, Zone)
local x, y = getElementPosition(Element)
if isInsideRadarArea(Zone, x, y) == true then
return true
else
return false
end
end
--In welcher Zone befindet sich das Element?
function inWichZone(Element)
local x, y = getElementPosition(Element)
for i, v in ipairs(Areas) do
local Name = v.Gebiet
if isElementInZone(Element, Areas[Name]) == true then
return Name
end
end
end
Alles anzeigen
Ich will, dass wenn der Spieler eine dieser Zonen betritt, ihn ein dxDraw-Text angezeigt wird.
Ich will das Script aber Serverseitig haben und dann an den Client den Namen des Areas triggern, sofern er ein Area betritt.
Ich habs bisher mit einem Timer gemacht.. das ist aber eine nicht sehr elegante Lösung.
Mfg KeksKing