GTA Közösség - A magyar GTA fórum

Multi Theft Auto (MTA) => MTA: Szerverfejlesztés => Archívum => A témát indította: Cody - 2015. március 31. - 23:35:25

Cím: setlevel parancs probléma
Írta: Cody - 2015. március 31. - 23:35:25
Üdv.
Elkezdtem írni egy setlevel parancsot és ott leragadtam hogy amikor leellenőrzi a szintet hogy 0 és 5 között álló szám e és hogy nem string, egyfolytában azt írja hogy \"Nincs ilyen szint!\".
Valaki megtudná nézni hogy mit írtam el benne?
 
addCommandHandler(\"setlevel\",
function (source, commandName, otherPlayer, level)
if otherPlayer and level then
   if isElement(getPlayerFromName(otherPlayer)) then
      if type(level) == \"string\" or tonumber(level) < 0 or tonumber(level) > 5 then
         outputChatBox(\"#E74C3CNincs ilyen szint!\", source, 0, 0, 0, true)
      else
         outputChatBox(\"Jó szint\")
      end
   else
      outputChatBox(\"#E74C3CNincs ilyen játékos!\", source, 0, 0, 0, true)
   end
else
   outputChatBox(\"#00B7FFHasználat: #FFFFFF/setlevel <Játékos> <Szint>\", source, 0, 0, 0, true)
end
end
)
Cím: setlevel parancs probléma
Írta: DrAkE - 2015. április 01. - 00:52:43
Válasz igen egyszerű, maga a paraméter, amiket megadsz string típusúak, ergo a következő feltétel mindig igaz lesz, és kiírja a hibát:
 

type(level) == \"string\"

 
A kód tökéletesen fog futni, ha kiveszed a feltételt belőle, és nem fog semmilyen hibát sem eredményezni.
Cím: setlevel parancs probléma
Írta: Cody - 2015. április 01. - 09:17:09
Átalakítottam inkább egy felfokozás és lefokozás parancsra.
És most erre pedig a consol azt írja hogy hibás argument van a getElementData-ba.
Megnéznéd ezt is?
 
addCommandHandler(\"promote\",
function (source, commandName, otherPlayer)
if otherPlayer then
   if isElement(getPlayerFromName(otherPlayer)) then
      if playerszint == 5 then
         outputChatBox(\"#E74C3CEzt a játékost nem fokozhatod fel!\", source, 0, 0, 0, true)
      else
         local oldlevel = getElementData(getPlayerFromName(otherPlayer), \"AdminLevel\")
         setElementData(getPlayerFromName(otherPlayer), \"AdminLevel\", getElementData(getPlayerFromName(otherPlayer)) + 1)
         outputChatBox(\"#FFFFFF\".. getPlayerName(source) ..\" #00B7FFmegváltoztatta #FFFFFF\".. getPlayerName(getPlayerFromName(otherPlayer)) ..\" #00B7FFjátékos adminisztrátori szintjét. #FFFFFF(\".. oldlevel ..\" => \".. getElementData(getPlayerFromName(otherPlayer), \"AdminLevel\") ..\")\")
      end
   else
      outputChatBox(\"#E74C3CNincs ilyen játékos!\", source, 0, 0, 0, true)
   end
else
   outputChatBox(\"#00B7FFHasználat: #FFFFFF/promote <Játékos>\", source, 0, 0, 0, true)
end
end
)
addCommandHandler(\"demote\",
function (source, commandName, otherPlayer)
if otherPlayer then
   if isElement(getPlayerFromName(otherPlayer)) then
      if getElementData(getPlayerFromName(otherPlayer, \"AdminLevel\")) == 0 then
         outputChatBox(\"#E74C3CEzt a játékost nem fokozhatod le!\", source, 0, 0, 0, true)
      else
         local oldlevel = getElementData(getPlayerFromName(otherPlayer), \"AdminLevel\")
         setElementData(getPlayerFromName(otherPlayer), \"AdminLevel\", getElementData(getPlayerFromName(otherPlayer)) - 1)
         outputChatBox(\"#FFFFFF\".. getPlayerName(source) ..\" #00B7FFmegváltoztatta #FFFFFF\".. getPlayerName(getPlayerFromName(otherPlayer)) ..\" #00B7FFjátékos adminisztrátori szintjét. #FFFFFF(\".. oldlevel ..\" => \".. getElementData(getPlayerFromName(otherPlayer), \"AdminLevel\") ..\")\")
      end
   else
      outputChatBox(\"#E74C3CNincs ilyen játékos!\", source, 0, 0, 0, true)
   end
else
   outputChatBox(\"#00B7FFHasználat: #FFFFFF/demote <Játékos>\", source, 0, 0, 0, true)
end
end
)
Cím: setlevel parancs probléma
Írta: DrAkE - 2015. április 01. - 12:55:20
Hiba:
 
setElementData(getPlayerFromName(otherPlayer), \"AdminLevel\", getElementData(getPlayerFromName(otherPlayer)) + 1)

 
Helyesen:
 
setElementData(getPlayerFromName(otherPlayer), \"AdminLevel\", getElementData(getPlayerFromName(otherPlayer), \"AdminLevel\") + 1)

 
(mind a kettő parancsnál)
Ha már úgy is lemented lokális változóba a régi adminszintet, akkor:
 
setElementData(getPlayerFromName(otherPlayer), \"AdminLevel\", oldlevel + 1)
Cím: setlevel parancs probléma
Írta: Cody - 2015. április 01. - 14:35:53
Valamiért még mindig hibát ír a consol erre a sorokra.
 
setElementData(getPlayerFromName(otherPlayer), \"AdminLevel\", oldlevel + 1)
setElementData(getPlayerFromName(otherPlayer), \"AdminLevel\", oldlevel - 1)

 
Error:
 
attempt to perform aritmetic on local \'oldlevel\' (a boolean value)

 

local oldlevel = getElementData(getPlayerFromName(otherPlayer), \"AdminLevel\")
Cím: setlevel parancs probléma
Írta: DrAkE - 2015. április 01. - 15:23:17
Vagy nincs létrehozva, vagy pedig alakítsd át számmá (tonumber). (inkább az elsőnek van nagyobb lehetősége)
Cím: setlevel parancs probléma
Írta: koko1238640 - 2015. április 02. - 13:30:37
[mod]Megoldódott? Helyezhető? [/mod]