Szerző Téma: targetPlayer kiválasztása?  (Megtekintve 823 alkalommal)

targetPlayer kiválasztása?
« Dátum: 2016. április 20. - 18:46:49 »
0 Show voters
Hali!
Megpróbáltam megcsinálni egy adminrendszer féleséget, viszont kicsit elakadtam. Mivel még kezdő vagyok, egy Social Gaming nevezetű modból próbáltam lesni, és onnan kiszedni pár dolgot, átalakítva.
Viszont ott elakadtam, amikor pl. egy admin adást, vagy egy skin választást kellene lebonyolítani.
Itt vannak a különféle kódok:
Maga a parancs
 
addCommandHandler(\"setalevel\",
function(playerSource, cmd, id, level)
if id and level then
   aszint = getElementData(playerSource, \"adminlevel\")
   if(aszint >= 1) then
      local targetPlayer, targetPlayerName = exports[\'sg_functions\']:findPlayerByID(playerSource, id)
      if targetPlayer then
         oldlevel = getElementData(targetPlayer, \"adminlevel\")
         setElementData(targetPlayer, \"adminlevel\", tonumber(level))
         pc = toPlayer()
         dbExec(kapcsolat, \"UPDATE accounts SET admin = ? WHERE ID = ?\",level,getElementData(targetPlayer, \"accountID\"))         
      end
   else
      outputChatBox(\"Nincs elég magas Adminszinted a parancshoz!\", playerSource,169,139,101,true)
   end
else
   outputChatBox(\"[sGaming] #ffffff/\"..cmd..\" [NÉVRÉSZLET/ID] [ADMINSZINT]\", playerSource,169,139,101,true)   
end
end
)

 
Kapcsolódó exportált funkciók(elvileg ezek vannak hozzá)
 
function findPlayerByPartialNick(thePlayer, partialNick)
if not partialNick and not isElement(thePlayer) and type( thePlayer ) == \"string\" then
outputDebugString( \"Hibás paraméterek lettek megadva.\" )
partialNick = thePlayer
thePlayer = nil
end
local candidates = {}
local matchPlayer = nil
local matchNick = nil
local matchNickAccuracy = -1
local partialNick = string.lower(partialNick)
if thePlayer and partialNick == \"*\" then
return thePlayer, getPlayerName(thePlayer):gsub(\"_\", \" \")
elseif getPlayerFromName(partialNick) then
return getPlayerFromName(partialNick), getPlayerName( getPlayerFromName(partialNick) ):gsub(\"_\", \" \")
elseif tonumber(partialNick) then
matchPlayer = findP(thePlayer, partialNick)
candidates = { matchPlayer }
else
local players = getElementsByType(\"player\")
for playerKey, arrayPlayer in ipairs(players) do
   if isElement(arrayPlayer) then
      local playerName = string.lower(getPlayerName(arrayPlayer))
      if(string.find(playerName, tostring(partialNick))) then
         local posStart, posEnd = string.find(playerName, tostring(partialNick))
         if posEnd - posStart > matchNickAccuracy then
            -- better match
            matchNickAccuracy = posEnd-posStart
            matchNick = playerName
            matchPlayer = arrayPlayer
            candidates = { arrayPlayer }
         elseif posEnd - posStart == matchNickAccuracy then
            matchNick = nil
            matchPlayer = nil
            table.insert( candidates, arrayPlayer )
         end
      end
   end
end
end
if not matchPlayer or not isElement(matchPlayer) then
if isElement( thePlayer ) then
   if #candidates == 0 then
      outputChatBox(\"#dc143c[Hiba]:#ffffff Nincs találat.\", thePlayer, 255, 255, 255, true )
   else
      --outputChatBox( #candidates .. \" találat:\", thePlayer, 255, 194, 14)
      for _, arrayPlayer in ipairs( candidates ) do
         outputChatBox(\"(\" .. tostring( getElementData( arrayPlayer, \"playerid\" ) ) .. \") \" .. getPlayerName( arrayPlayer ), thePlayer)
      end
   end
end
return false
else
return matchPlayer, getPlayerName( matchPlayer ):gsub(\"_\", \" \")
end
end
function findP(thePlayer, nick)
nick = tonumber(nick)
for key, value in ipairs(getElementsByType(\"player\")) do
local playerID = tonumber(getElementData(value, \"playerid\"))
local playerName2 = getPlayerName(value):gsub(\"_\", \" \")
if playerID == nick then
   return value, playerName2
end
end
outputChatBox(\"#cb1919[Hiba]: #ffffffNem találtam meg a játékost.\", thePlayer,0,0,0,true)
return false
end
function findPlayerByID(thePlayer, nick)
return findPlayerByPartialNick(thePlayer, nick)
end

 

local ids = {}
function assignID()
    for i=1,getMaxPlayers() do
        if not ids then
            ids = source
            setElementData(source,\"char:id\",i,not optimize)
            setElementData(source,\"playerid\",i,not optimize)
            break
        end
    end
end
addEventHandler(\"onPlayerJoin\",root,assignID)
 
function freeID()
    local id = getElementData(source,\"char:id\")
    if not id then return end
    ids[id] = nil
end
addEventHandler(\"onPlayerQuit\",root,freeID)

 
Valami olyat gondoltam ki ezek alapján, hogy megnézi a rendszer, hogy a beírt név vagy id egyezik-e bármelyik játékossal. És ha igen, akkor vele végezze el a műveletet.
Ha valaki tud ebben segíteni, azt nagyon megköszönném!

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal