#Dv^ Posted June 10, 2016 Share Posted June 10, 2016 Hola! ¿Cómo hago para que este sistema de advertencias luego de que llegue a 3 advertencias de "ban" de 30 minutos? Y que en el motivo del kick le salga al que fue expulsado la "razón", es decir la 3 advertencia que se le dio sea el motivo del kick Muchas Gracias function getPlayerFromNamePart(name) local name = name and name:gsub("#%x%x%x%x%x%x", ""):lower() or nil if name then for _, player in ipairs(getElementsByType("player")) do local name_ = getPlayerName(player):gsub("#%x%x%x%x%x%x", ""):lower() if name_:find(name, 1, true) then return player end end end end function warnPlayer_CMD(thePlayer, theCMD, theTarget, ...) local accN = getAccountName ( getPlayerAccount (thePlayer) ) local groupName = "Admin" or "Moderator" or "SuperModerator" or "Console" -- you can add more if groupName then if theTarget ~= nil and isObjectInACLGroup ("user."..accN,aclGetGroup (groupName) ) -- missing bracket then local theTargetElement = getPlayerFromNamePart(theTarget) if(getElementType(theTargetElement) == "player") then local allArgs = {...} local data = getElementData(theTargetElement,"warnC")or 0 local theReason = table.concat(allArgs, " ") setElementData(theTargetElement,"warnC", data + 1) outputChatBox("#ff0000[ADVERTENCIA]: "..getPlayerName(thePlayer).."#FFFFFF advertio a "..getPlayerName(theTargetElement).." ("..tostring(data).."/3)", getRootElement(), 255, 0, 0, true) outputChatBox("#ff0000[ADVERTENCIA]: #ffffffRazón: #FFFFFF("..tostring(theReason)..")", getRootElement(), 255, 0, 0, true) else outputChatBox("#ff0000[ADVERTENCIA]: #ffffffError! Codigo: /ad [player] [razon]", thePlayer, 255, 0, 0, true) end end end end addCommandHandler("ad", warnPlayer_CMD, false) Link to comment
Tomas Posted June 10, 2016 Share Posted June 10, 2016 Intenta con esto: adverts_command = "ad"; adverts_ACL = {"Admin", "SuperModerator", "Moderator", "Console"}; adverts_mes_1 = "#ff0000[ADVERTENCIA]: %s#FFFFFF ha advertido a %s (%d/3)"; adverts_mes_2 = "#ff0000[ADVERTENCIA]: %s#FFFFFF ha acumulado el maximo de advertencias consecutivamente, por consecuente ha sido expulsado"; adverts_reason = " Razon: %s"; adverts_err_1 = "You must be a member of the staff in order to use this command."; adverts_err_2 = "No target was found."; adverts_data_key = {"history", "current"}; addCommandHandler(adverts_command, function (a, _, c, ...) if ( not isGuestAccount(getPlayerAccount(a)) ) then local __isAdmin = 0; for _, aclName in ipairs(adverts_ACL) do if ( isObjectInACLGroup("user."..(getAccountName(getPlayerAccount(a))), aclGetGroup(aclName)) ) then __isAdmin = 1; break; end end if ( __isAdmin ~= 0 ) then local target = getPlayerFromPartialName(c); if ( target ) then if ( not isGuestAccount(getPlayerAccount(target)) ) then local t_account = getPlayerAccount(target); local t_c_warnings = getAccountData(t_account, adverts_data_key[2]) or 0; local t_h_warnings = getAccountData(t_account, adverts_data_key[1]) or 0; setAccountData(t_account, adverts_data_key[1], t_h_warnings+1); if ( ... ) then local reason = table.concat({...}, " "); end if ( t_c_warnings == 2 ) then __reason = adverts_mes_2:format(getPlayerName(target)); if ( reason ) then __reason = __reason .. ( adverts_reason:format(reason) ); end kickPlayer(target, a, __reason) setAccountData(t_account, adverts_data_key[2], 0); else setAccountData(t_account, adverts_data_key[2], t_c_warnings+1); __reason = adverts_mes_1:format(getPlayerName(a), getPlayerName(target), t_c_warnings+1); if ( reason ) then __reason = __reason .. ( adverts_reason:format(reason) ); end outputChatBox(__reason) end else outputChatBox(adverts_err_2, a); end else outputChatBox(adverts_err_1, a); end end end ) function getPlayerFromPartialName(name) local name = name and name:gsub("#%x%x%x%x%x%x", ""):lower() or nil if name then for _, player in ipairs(getElementsByType("player")) do local name_ = getPlayerName(player):gsub("#%x%x%x%x%x%x", ""):lower() if name_:find(name, 1, true) then return player end end end end No comprendí a qué te referías con lo del ban, el script que te dejé arriba debería luego de la tercer advertencia expulsar al jugador (kickear) y reiniciarle las advertencias. Link to comment
#Dv^ Posted June 10, 2016 Author Share Posted June 10, 2016 Hola! Gracias por tu ayuda Me sale este problema Link to comment
#Dv^ Posted June 10, 2016 Author Share Posted June 10, 2016 Con lo del Ban me refería a que sea expulsado y que no pueda entrar al servidor hasta que no pase 30 minutos despues de su expulsación, es decir "baneado" Link to comment
#Dv^ Posted June 10, 2016 Author Share Posted June 10, 2016 Ya lo pude arreglar, gracias de todas formas por ayudarme, te lo agredezco Link to comment
#Dv^ Posted June 10, 2016 Author Share Posted June 10, 2016 Ultima cosa que pido, si quiero que se vean con colores en el chat, como le pongo? ._. Link to comment
Tomas Posted June 10, 2016 Share Posted June 10, 2016 Ultima cosa que pido, si quiero que se vean con colores en el chat, como le pongo? ._. Reemplaza los outputChatBox(...) con outputChatBox(..., _, _, _, _, true) Link to comment
#Dv^ Posted June 18, 2016 Author Share Posted June 18, 2016 Amigo, cuando le doy advertencia a alguien no me sale "Razón: " ¿A qué se debe? Muchas Gracias Link to comment
Tomas Posted June 18, 2016 Share Posted June 18, 2016 Amigo, cuando le doy advertencia a alguien no me sale "Razón: "¿A qué se debe? Muchas Gracias Línea 36: reason = table.concat({...}, " "); Link to comment
#Dv^ Posted June 18, 2016 Author Share Posted June 18, 2016 Muchas gracias Lo modifiqué para que el script en vez de kickear a alguien le de ban al llegar a acumular 3 advertencias por 30 pero me sale error Link to comment
aka Blue Posted June 18, 2016 Share Posted June 18, 2016 Adivinos no somos, publica el código. Link to comment
#Dv^ Posted June 18, 2016 Author Share Posted June 18, 2016 Lo siento adverts_command = "ad"; adverts_ACL = {"Admin", "SuperModerator", "Moderator", "Console"}; adverts_mes_1 = "#ff0000[ADVERTENCIA]: %s#FFFFFF ha advertido a %s #FF0000(%d/3)"; adverts_mes_2 = "Demasiadas advertencias, fuiste expulsado(30 minutos)"; adverts_reason = " [Razón]: #FFFFFF%s"; adverts_err_1 = "#2971D5[#4E5861AD#2971D5]#FFFFFF Sintaxis invalida! Use /ad [nombre]."; adverts_err_2 = "#2971D5[#4E5861AD#2971D5]#FFFFFF No se encontró el objectivo."; adverts_data_key = {"history", "current"}; addCommandHandler(adverts_command, function (a, _, c, ...) if ( not isGuestAccount(getPlayerAccount(a)) ) then local __isAdmin = 0; for _, aclName in ipairs(adverts_ACL) do if ( isObjectInACLGroup("user."..(getAccountName(getPlayerAccount(a))), aclGetGroup(aclName)) ) then __isAdmin = 1; break; end end if ( __isAdmin ~= 0 ) then local target = getPlayerFromPartialName(c); if ( target ) then if ( not isGuestAccount(getPlayerAccount(target)) ) then local t_account = getPlayerAccount(target); local t_c_warnings = getAccountData(t_account, adverts_data_key[2]) or 0; local t_h_warnings = getAccountData(t_account, adverts_data_key[1]) or 0; setAccountData(t_account, adverts_data_key[1], t_h_warnings+1); if ( ... ) then reason = table.concat({...}, " "); end if ( t_c_warnings == 2 ) then __reason = adverts_mes_2:format(getPlayerName(target)); if ( reason ) then __reason = __reason .. ( adverts_reason:format(reason) ); end banPlayer(target,a, __reason, 30min) setAccountData(t_account, adverts_data_key[2], 0); else setAccountData(t_account, adverts_data_key[2], t_c_warnings+1); __reason = adverts_mes_1:format(getPlayerName(a), getPlayerName(target), t_c_warnings+1); if ( reason ) then __reason = __reason .. ( adverts_reason:format(reason) ); end outputChatBox(""..__reason.." ", root, 255, 0, 0, true) end else outputChatBox(""..adverts_err_2.."", source, 255, 0, 0, true); end else outputChatBox(""..adverts_err_1.."", source, 255, 0, 0, true); end end end end ) function getPlayerFromPartialName(name) local name = name and name:gsub("#%x%x%x%x%x%x", ""):lower() or nil if name then for _, player in ipairs(getElementsByType("player")) do local name_ = getPlayerName(player):gsub("#%x%x%x%x%x%x", ""):lower() if name_:find(name, 1, true) then return player end end end end Link to comment
DBY Posted June 18, 2016 Share Posted June 18, 2016 ¿Cómo pretendes que funcione poniendo '30min'? Tienes que ponerlo en segundos, en este caso 30 minutos son 1800 segundos. Link to comment
#Dv^ Posted June 18, 2016 Author Share Posted June 18, 2016 Cierto había olvidado eso :´v Es que vengo cansado y no me di cuenta Pero aún así me sale este error Link to comment
DBY Posted June 18, 2016 Share Posted June 18, 2016 Lo primero que debes hacer es buscar la función en la wiki... banPlayer. banPlayer(target, true, true, true, a, __reason, 1800) Link to comment
#Dv^ Posted June 18, 2016 Author Share Posted June 18, 2016 Gracias men, seguiré leyendo sobre esto por que me embola Aparte no logro entender como se usa el getTickCount() Leí en la Wiki pero no se como usarlo en mi script que hice Osea quiero darle tiempo al uso de comandos en el servidor, cuando alguien ingresa el comando /hola por ejemplo todos tengan que esperar 30 segundos para usarlo, pero me embola y no se como aplicarlo Link to comment
Tomas Posted June 18, 2016 Share Posted June 18, 2016 Gracias men, seguiré leyendo sobre esto por que me embola Aparte no logro entender como se usa el getTickCount() Leí en la Wiki pero no se como usarlo en mi script que hice Osea quiero darle tiempo al uso de comandos en el servidor, cuando alguien ingresa el comando /hola por ejemplo todos tengan que esperar 30 segundos para usarlo, pero me embola y no se como aplicarlo getTickCount devuelve un número en milisegundos, este número continuará aumentando infinitamente. Si ahora llamo la función getTickCount y me devuelve 1435133 en un segundo me devolverá 1436133 (1435133+1000ms[1 seg]). Con esa función, dentro de un evento de renderizado (el cual es "llamado" cada vez que el tick aumenta su valor) puedes saber cuánto tiempo ha pasado. Link to comment
#Dv^ Posted June 18, 2016 Author Share Posted June 18, 2016 Gracias, ya pude comprender mejor Solo me costaba entender algo fácil. Link to comment
Recommended Posts