Ir para conteúdo
  • 0

3 Comandos


FlamesAdmin

Pergunta

Boa noite, gostaria de fazer um pedido de 2 comandos.

 

1° - Comando de Notation, exatamente igual ao que já vem em clients.

Senior Tutor, GM, CM e GOD, ao executarem um comando, exemplo: /notation Fulano, motivo

Aparecerá a mensagem quanto para quem executou o comando quanto para quem recebeu, e por precausão, não poderá executar o comando em si próprio.

 

2° - Comando de banimento.

Aplica ban na conta por comando, exemplo: /ban Fulando,motivo,dias

Ao ser banido, o jogador será deslogado quando for banido, e por precausão, não poderá executar o comando em si próprio.

 

3° - Comando de Name Lock.

Aplica Name Lock no personagem, e automaticamente trocando o nome do jogador, exemplo: /namelock Fulano, motivo

Quando dado o Name Lock, o player irá passar a ter o nome 'Player' no nome e um número na frente - 'Player100', e assim por diante(do 100 em diante), de acordo com players que tiverem levado NL.

Por precausão, não poderá executar o comando em si próprio.

 

 

Por segurança, ficar salvo em algum arquivo.txt dentro da pasta do servidor os 3 comandos.

 

 

Agradeço à quem ajudar, e será reputado.

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Gabriel, achei aqui no xtibia um comando para !ban por storage feito pelo Omega e alterei para funcionar de acordo com o seu ot pokemon.

 

No login.lua seu localizado na pasta data\creaturescripts\scripts você irá apagar tudo e colocar isto:

local config = {
	loginMessage = getConfigValue('loginMessage'),
	useFragHandler = getBooleanFromString(getConfigValue('useFragHandler'))
}

--alterado v2.6 tabelas soh em lib/configuration.lua;

function onLogin(cid)
    if isPlayerBanned(cid) and getPlayerStorageValue(cid,banCount) >= 3 then
        return false
    end        
    if isPlayerBanned(cid) then
        local reason = getPlayerBanReason(cid)
        if reason ~= "" then
            setPlayerStorageValue(cid,banCount,getPlayerStorageValue(cid,banCount)+1)
            doTeleportThing(cid,getPlayerTemplePos(cid))
            addEvent(doKickPlayerIf,5000,cid)
            doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING,'Voce foi banido por '..reason..' e sera kickado em 5 segundos.')
            mayNotMove(cid,true)
        else
            setPlayerStorageValue(cid,banCount,getPlayerStorageValue(cid,banCount)+1)
            doTeleportThing(cid,getPlayerTemplePos(cid))
            addEvent(doKickPlayerIf,5000,cid)
            mayNotMove(cid,true)            
            doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING,'Voce esta banido e sera kickado em 5 segundos.')
        end        
        doMutePlayer(cid, 5)
		return true
    end
	if getPlayerLevel(cid) >= 1 and getPlayerLevel(cid) <= 10 then   --alterado v2.8
       doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, 0)
    else     
       doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, (getPlayerLevel(cid) >= 200 and 100 or math.floor(getPlayerLevel(cid)/2)) )
	end
	doCreatureSetDropLoot(cid, false)

	local accountManager = getPlayerAccountManager(cid)

	if(accountManager == MANAGER_NONE) then
		local lastLogin, str = getPlayerLastLoginSaved(cid), config.loginMessage
		if(lastLogin > 0) then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)
			str = "Your last visit was on " .. os.date("%a %b %d %X %Y", lastLogin) .. "."
		else
			str = str
		end

		doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)

	elseif(accountManager == MANAGER_NAMELOCK) then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, it appears that your character has been namelocked, what would you like as your new name?")
	elseif(accountManager == MANAGER_ACCOUNT) then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, type 'account' to manage your account and if you want to start over then type 'cancel'.")
	else
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, type 'account' to create an account or type 'recover' to recover an account.")
	end

	if getCreatureName(cid) == "Account Manager" then
		local outfit = {}
		if accountManagerRandomPokemonOutfit then
			outfit = {lookType = getPokemonXMLOutfit(oldpokedex[math.random(151)][1])}
		else
			outfit = accountManagerOutfit
		end
	
		doSetCreatureOutfit(cid, outfit, -1)
	return true
	end

	if(not isPlayerGhost(cid)) then
		doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT)
	end

	local outfit = {}

	if getPlayerVocation(cid) == 0 then
		doPlayerSetMaxCapacity(cid, 0)
		doPlayerSetVocation(cid, 1)
		setCreatureMaxMana(cid, 6)
		doPlayerAddSoul(cid, -getPlayerSoul(cid))
		setPlayerStorageValue(cid, 19898, 0)
			if getCreatureOutfit(cid).lookType == 128 then
				outfit = {lookType = 510, lookHead = math.random(0, 132), lookBody = math.random(0, 132), lookLegs = math.random(0, 132), lookFeet = math.random(0, 132)}
			elseif getCreatureOutfit(cid).lookType == 136 then
				outfit = {lookType = 511, lookHead = math.random(0, 132), lookBody = math.random(0, 132), lookLegs = math.random(0, 132), lookFeet = math.random(0, 132)}
			end
		doCreatureChangeOutfit(cid, outfit)
	end

    registerCreatureEvent(cid, "dropStone")  --alterado v2.7
    --alterado v2.6.1
    registerCreatureEvent(cid, "ShowPokedex") --alterado v2.6
    registerCreatureEvent(cid, "ClosePokedex") --alterado v2.6
	registerCreatureEvent(cid, "WatchTv")
	registerCreatureEvent(cid, "StopWatchingTv")
	registerCreatureEvent(cid, "WalkTv")
	registerCreatureEvent(cid, "RecordTv")
	--registerCreatureEvent(cid, "Death")
	registerCreatureEvent(cid, "PlayerLogout")
	registerCreatureEvent(cid, "WildAttack")
	registerCreatureEvent(cid, "Idle")
	registerCreatureEvent(cid, "PokemonIdle")
	registerCreatureEvent(cid, "EffectOnAdvance")
	registerCreatureEvent(cid, "GeneralConfiguration")
	registerCreatureEvent(cid, "ReportBug")
	registerCreatureEvent(cid, "LookSystem")
	registerCreatureEvent(cid, "T1")
	registerCreatureEvent(cid, "T2")
	registerCreatureEvent(cid, "task_count")

	if getPlayerStorageValue(cid, 99284) == 1 then
		setPlayerStorageValue(cid, 99284, -1)
	end

    if getPlayerStorageValue(cid, 6598754) >= 1 or getPlayerStorageValue(cid, 6598755) >= 1 then
       setPlayerStorageValue(cid, 6598754, -1)
       setPlayerStorageValue(cid, 6598755, -1)
       doRemoveCondition(cid, CONDITION_OUTFIT)             --alterado v2.9 \/
       doTeleportThing(cid, posBackPVP, false)
       doCreatureAddHealth(cid, getCreatureMaxHealth(cid))
    end
    
	doChangeSpeed(cid, -(getCreatureSpeed(cid)))
	
	--///////////////////////////////////////////////////////////////////////////--
    local storages = {17000, 63215, 17001, 13008, 5700}
    for s = 1, #storages do
        if not tonumber(getPlayerStorageValue(cid, storages[s])) then
           if s == 3 then
              setPlayerStorageValue(cid, storages[s], 1)
           elseif s == 4 then
              setPlayerStorageValue(cid, storages[s], -1)
           else   
              if isBeingUsed(getPlayerSlotItem(cid, 8).itemid) then
                 setPlayerStorageValue(cid, storages[s], 1)                 --alterado v2.6
              else
                 setPlayerStorageValue(cid, storages[s], -1) 
              end
           end
           doPlayerSendTextMessage(cid, 27, "Sorry, but a problem occurred on the server, but now it's alright")
        end
    end
    --/////////////////////////////////////////////////////////////////////////--
	   
	if getPlayerStorageValue(cid, 17000) >= 1 then -- fly
        
		local item = getPlayerSlotItem(cid, 8)
		local poke = getItemAttribute(item.uid, "poke")
		doChangeSpeed(cid, getPlayerStorageValue(cid, 54844))
		doRemoveCondition(cid, CONDITION_OUTFIT)
		doSetCreatureOutfit(cid, {lookType = flys[poke][1] + 351}, -1)

	local apos = getFlyingMarkedPos(cid)
	apos.stackpos = 0
		
			if getTileThingByPos(apos).itemid <= 2 then
				doCombatAreaHealth(cid, FIREDAMAGE, getFlyingMarkedPos(cid), 0, 0, 0, CONST_ME_NONE)
				doCreateItem(460, 1, getFlyingMarkedPos(cid))
			end 

	doTeleportThing(cid, apos, false) 
    if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) >= 1 then   
       sendAuraEffect(cid, auraSyst[getItemAttribute(item.uid, "aura")])                     --alterado v2.8
    end  
 
    local posicao = getTownTemplePosition(getPlayerTown(cid))
    markFlyingPos(cid, posicao)
    
	elseif getPlayerStorageValue(cid, 63215) >= 1 then -- surf

		local item = getPlayerSlotItem(cid, 8)
		local poke = getItemAttribute(item.uid, "poke")
		doSetCreatureOutfit(cid, {lookType = surfs[poke].lookType + 351}, -1) --alterado v2.6
		doChangeSpeed(cid, getPlayerStorageValue(cid, 54844))
		if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) >= 1 then   
           sendAuraEffect(cid, auraSyst[getItemAttribute(item.uid, "aura")])                     --alterado v2.8
        end 

	elseif getPlayerStorageValue(cid, 17001) >= 1 then -- ride
        
		local item = getPlayerSlotItem(cid, 8)
		local poke = getItemAttribute(item.uid, "poke")
		
		
		if rides[poke] then
		   doChangeSpeed(cid, getPlayerStorageValue(cid, 54844))
		   doRemoveCondition(cid, CONDITION_OUTFIT)
		   doSetCreatureOutfit(cid, {lookType = rides[poke][1] + 351}, -1)
		   if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) >= 1 then   
              sendAuraEffect(cid, auraSyst[getItemAttribute(item.uid, "aura")])                     --alterado v2.8
           end 
		else
		   setPlayerStorageValue(cid, 17001, -1)
		   doRegainSpeed(cid)   --alterado v2.6
		end
	
	    local posicao2 = getTownTemplePosition(getPlayerTown(cid))
        markFlyingPos(cid, posicao2)
        
	elseif getPlayerStorageValue(cid, 13008) >= 1 then -- dive
       if not isInArray({5405, 5406, 5407, 5408, 5409, 5410}, getTileInfo(getThingPos(cid)).itemid) then
			setPlayerStorageValue(cid, 13008, 0)
			doRegainSpeed(cid)              --alterado v2.6
			doRemoveCondition(cid, CONDITION_OUTFIT)
		return true
		end   
          
       if getPlayerSex(cid) == 1 then
          doSetCreatureOutfit(cid, {lookType = 1034, lookHead = getCreatureOutfit(cid).lookHead, lookBody = getCreatureOutfit(cid).lookBody, lookLegs = getCreatureOutfit(cid).lookLegs, lookFeet = getCreatureOutfit(cid).lookFeet}, -1)
       else
          doSetCreatureOutfit(cid, {lookType = 1035, lookHead = getCreatureOutfit(cid).lookHead, lookBody = getCreatureOutfit(cid).lookBody, lookLegs = getCreatureOutfit(cid).lookLegs, lookFeet = getCreatureOutfit(cid).lookFeet}, -1)
       end
       doChangeSpeed(cid, 800)

     elseif getPlayerStorageValue(cid, 5700) > 0 then   --bike
        doChangeSpeed(cid, -getCreatureSpeed(cid))
        doChangeSpeed(cid, getPlayerStorageValue(cid, 5700))  --alterado v2.8
        if getPlayerSex(cid) == 1 then
           doSetCreatureOutfit(cid, {lookType = 1394}, -1)
        else
           doSetCreatureOutfit(cid, {lookType = 1393}, -1)
        end
    elseif getPlayerStorageValue(cid, 75846) >= 1 then     --alterado v2.9 \/
        doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)  
        setPlayerStorageValue(cid, 75846, -1)
        sendMsgToPlayer(cid, 20, "You have been moved to your town!")    
	 else
		doRegainSpeed(cid)  --alterado v2.6
	 end
	
	if getPlayerStorageValue(cid, 22545) >= 1 then   --golden arena
	   setPlayerStorageValue(cid, 22545, -1)              --alterado v2.4
	   doTeleportThing(cid, getClosestFreeTile(cid, posBackGolden), false)
       setPlayerRecordWaves(cid)     --alterado v2.7 
    end
    
	if useKpdoDlls then
		doUpdateMoves(cid)          --alterado v2.4 soh pra quem quiser... ;p
		doUpdatePokemonsBar(cid)
	end

	return true
end

Adicione no 050-function.lua localizado em data\lib o código abaixo:

function isOnline(cid)
local onl = getOnlinePlayers()
for i=1,#onl do
  if getPlayerByName(onl[i]) == cid then
   return true
  end
end
return false
end

function doKickPlayerIf(cid)
if isOnline(cid) then
  doRemoveCreature(cid)
end
end


function getPlayerTemplePos(cid)
    local town = getPlayerTown(cid)
    local temple = getTownTemplePosition(town)
    return temple or false
end   


function doBanPlayer(cid,days,reason)
    if reason ~= false and reason ~= nil and isPlayer(cid) then
        setPlayerStorageValue(cid,banReason,reason)
    end
    if days ~= false and days ~= nil and isPlayer(cid) then
        local bantime = ((days * 60 * 60 * 24) + os.time(t))
        setPlayerStorageValue(cid,banStorage,bantime)
        doRemoveCreature(cid)
        return true
    elseif isPlayer(cid) then
        setPlayerStorageValue(cid,banStorage,0)
        doRemoveCreature(cid)
        return true
    end
    return false
end

function isPlayerBanned(cid)
    if not isPlayer(cid) then
        return false
    elseif getPlayerStorageValue(cid,banStorage) == 0 then
        return true
    elseif getPlayerStorageValue(cid,banStorage) == -1 then
        return false
    elseif getPlayerStorageValue(cid,banStorage) >= os.time(t) then
        return true
    end
    return false
end

function doUnbanPlayer(name)
    if getPlayerGUIDByName(name) then
        pid = getPlayerGUIDByName(name)
    else
        return false
    end
    if getCreatureByName(name) then
        local cid = getCreatureByName(name)
        if isPlayer(cid) then
            doRemoveCreature(cid)
        end
    end
    if db.query("UPDATE `player_storage` SET `value`=-1 WHERE `player_id` = "..pid.." AND `key`="..banStorage..";") == true then
        db.query("UPDATE `player_storage` SET `value`=-1 WHERE `player_id` = "..pid.." AND `key`="..banCount..";")
        db.query("UPDATE `player_storage` SET `value`=-1 WHERE `player_id` = "..pid.." AND `key`="..banReason..";")
        return true
    end
    return false
end

function getPlayerBanReason(cid)
    if isPlayer(cid) then
        local reason = getPlayerStorageValue(cid,banReason)
        if reason == -1 then
            reason = ""
        end
        return reason
    end
    return false
end

Adicione no 000-constant.lua localizado em data\lib o código abaixo:

banStorage = 918171623
banCount = 918171624
banReason = 918171625

Crie um arquivo chamado nban.lua em data\talkactions\scripts com o código:

function onSay(cid,words,param)
    if words == '!ban' then
        local param = string.lower(param)
        local param = string.explode(param,',')    
        if not param[1] then
            doPlayerSendTextMessage(cid,27,'You must specify a player to ban.')
            return true
        elseif(not param[2]) then
            local player = getPlayerByName(param[1])
            if isPlayer(player) then
                doBanPlayer(player,false)
            else
                doPlayerSendTextMessage(cid,27,param[1]..' is not a valid player.')
            end
        elseif param[3] then
            local player = getPlayerByName(param[1])
            local days = tonumber(param[2])
            local reason = tostring(param[3])
            if days and reason then
                doBanPlayer(player,days,reason)
                doPlayerSendTextMessage(cid,27,'You have banned '..param[1]..' for '..param[2]..' days. Reason: '..param[3]..'.')
            else
                doPlayerSendTextMessage(cid,27,'Invalid parameters.')
            end
        else
            if type(tonumber(param[2])) == 'number' then
                local player = getPlayerByName(param[1])
                local days = tonumber(param[2])
                if days ~= false and days ~= nil then
                    doBanPlayer(player,days)
                    doPlayerSendTextMessage(cid,27,'You have banned '..param[1]..' for '..param[2]..' days.')
                else
                    doPlayerSendTextMessage(cid,27,'Invalid parameter number 2: '..param[2]..'.')
                end
            else
                local reason = param[2]
                local player = getPlayerByName(param[1])
                doBanPlayer(player,false,reason)
                doPlayerSendTextMessage(cid,27,'You have banned '..param[1]..'. Reason: '..param[2]..'.')
            end
        end
    elseif words == '!unban' then
        if doUnbanPlayer(param) then
            doPlayerSendTextMessage(cid,27,'Player '..param..' foi desbanido.')
        else
            doPlayerSendTextMessage(cid,27,param..' is\'n a valid player.')
        end
    end
    return true
end

E em talkactions.xml localizado em data\talkactions\scripts você coloca o código abaixo uma linha antes de </talkactions>:

<talkaction log="yes" access="4" words="!ban;!unban" event="script" value="nban.lua"/>

Para saber como usar, basta visitar o tópico do autor inicial:

 

http://www.xtibia.com/forum/topic/225250-comando-ban-v20/

 

 

Quando players forem banidos e/ou logarem enquanto estiverem banidos, aparecerá um erro no console, mas basta ignorar... testei aqui e funcionou perfeitamente... eu tentei arrumar os erros, mas não conheço muito bem servidores de pokemon...

Link para o comentário
Compartilhar em outros sites

  • 0

Vamos lá, por partes...

 

O primeiro script, para o /notation:

function isOnTable(arg,t)
	for i=1,#t do
		if t[i]==arg then
			return true
		end
	end
	return false
end

function onSay(cid, words, param)
	local name,mot,op = string.explode(param,",")[1],string.explode(param,",")[2],getOnlinePlayers()
	acid = getPlayerByName(name)
	
	if (name == '') or (mot == '') or (acid == cid) or (not isOnTable(name,op)) then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Você usou o comando errado, não mande menssagem para si mesmo e nem para um player offline. Diga: /notation player,motivo")
		return true
	end

	doPlayerSendTextMessage(acid,MESSAGE_STATUS_WARNING,mot)
	doPlayerSendTextMessage(acid,MESSAGE_STATUS_WARNING,"Você mandou para "..name.." a menssagem: "..mot)
	return true
end

Para o /ban, tem vários idênticos ao que você deseja, vou pegar um que funciona e que já tem no server que uso como exemplo, se não me engano é do BAIAK, testei no TFS 1.0:

local default_comment = "Banido Temporariamente."
local default_lenght = 1 -- ban time in hours

function onSay(cid, words, param)
	local parametres = string.explode(param, ",")
	if(parametres[1] ~= nil) then
		local accId = getAccountIdByName(parametres[1])
		if(accId > 0) then
			local lenght = default_lenght
			local comment = default_comment
			if(parametres[2] ~= nil and tonumber(parametres[2]) > 0) then
				lenght = tonumber(parametres[2])
			end
			if(parametres[3] ~= nil) then
				comment = parametres[3]
			end
			doAddBanishment(accId, lenght * 3600, 23, ACTION_BANISHMENT, comment, getPlayerGUID(cid), comment)
			local player = getPlayerByNameWildcard(parametres[1])
			if(isPlayer(player) == TRUE) then
				doRemoveCreature(player)
			end
		else
			doPlayerSendCancel(cid, "Player with name " .. parametres[1] .. " doesn't exist.")
		end
	else
		doPlayerSendCancel(cid, "You must enter name.")
	end
	return true
end 

Esse comando do namelock achei bem inútil, seria mais fácil você colocar os nomes que não deseja na lista de namelock do GESIOR.

Link para o comentário
Compartilhar em outros sites

  • 0

Opa desculpa a demora por responder.

 

No notation, o player que recebe a notation, é o que aparece a mensagem:

19:57 Você recebeu uma notation: Sem Nome. Motivo: Testando

Já o comando de ban, ao digitar o comando, da o seguinte erro:

[29/10/2015 19:59:28] [Error - TalkAction Interface] 
[29/10/2015 19:59:28] data/talkactions/scripts/Player_Ban.lua:onSay
[29/10/2015 19:59:28] Description: 
[29/10/2015 19:59:28] data/talkactions/scripts/Player_Ban.lua:17: attempt to call global 'doAddBanishment' (a nil value)
[29/10/2015 19:59:28] stack traceback:
[29/10/2015 19:59:28] 	data/talkactions/scripts/Player_Ban.lua:17: in function <data/talkactions/scripts/Player_Ban.lua:4>
Link para o comentário
Compartilhar em outros sites

  • 0

 

Opa desculpa a demora por responder.

 

No notation, o player que recebe a notation, é o que aparece a mensagem:

19:57 Você recebeu uma notation: Sem Nome. Motivo: Testando

Já o comando de ban, ao digitar o comando, da o seguinte erro:

[29/10/2015 19:59:28] [Error - TalkAction Interface] 
[29/10/2015 19:59:28] data/talkactions/scripts/Player_Ban.lua:onSay
[29/10/2015 19:59:28] Description: 
[29/10/2015 19:59:28] data/talkactions/scripts/Player_Ban.lua:17: attempt to call global 'doAddBanishment' (a nil value)
[29/10/2015 19:59:28] stack traceback:
[29/10/2015 19:59:28] 	data/talkactions/scripts/Player_Ban.lua:17: in function <data/talkactions/scripts/Player_Ban.lua:4>

 

 

1 - Qual TFS você usa no seu servidor?

2 - Mudei o script do notation de acordo com o que você postou:

function isOnTable(arg,t)
	for i=1,#t do
		if t[i]==arg then
			return true
		end
	end
	return false
end

function onSay(cid, words, param)
	local name,mot,op = string.explode(param,",")[1],string.explode(param,",")[2],getOnlinePlayers()
	acid = getPlayerByName(name)
	
	if (name == '') or (mot == '') or (acid == cid) or (not isOnTable(name,op)) then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Você usou o comando errado, não mande menssagem para si mesmo e nem para um player offline. Diga: /notation player,motivo")
		return true
	end

	doPlayerSendTextMessage(acid,MESSAGE_STATUS_WARNING,"Você recebeu uma notation: "..getCreatureName(cid)..". Motivo: "..mot)
	doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING,"Você enviou uma notation a "..param..". Motivo: "..mot)
	return true
end
Link para o comentário
Compartilhar em outros sites

  • 0

Se você me disponibilizar um link do tópico para baixar o servidor base que você está usando, terei como resolver suas dúvidas, caso contrário nem terei como.

Editado por Antharaz
Link para o comentário
Compartilhar em outros sites

  • 0

Do notation deu certo, maais, teria como colocar para quando executar o comando /notations player_name aparecer quantas notations o player tem?

 

Já o do ban, o !unban ta dando erro.

[30/10/2015 10:04:35] [Error - TalkAction Interface] 
[30/10/2015 10:04:35] data/talkactions/scripts/nban.lua:onSay
[30/10/2015 10:04:35] Description: 
[30/10/2015 10:04:35] data/lib/050-function.lua:67: attempt to call field 'query' (a nil value)
[30/10/2015 10:04:35] stack traceback:
[30/10/2015 10:04:35] 	data/lib/050-function.lua:67: in function 'doUnbanPlayer'
[30/10/2015 10:04:35] 	data/talkactions/scripts/nban.lua:43: in function <data/talkactions/scripts/nban.lua:1>
Link para o comentário
Compartilhar em outros sites

  • 0

Para o notation, utilize este script:

function isOnTable(arg,t)
for i=1,#t do
  if t[i]==arg then
   return true
  end
end
return false
end

local stor = 7658754

function onSay(cid, words, param)
local name,mot,op,n = string.explode(param,",")[1],string.explode(param,",")[2],getOnlinePlayers(),getPlayerStorageValue(cid, stor)
local acid = getPlayerByName(name)

if (name == '') or (acid == cid) or (not isOnTable(name,op)) then
  doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Você usou o comando errado, não mande menssagem para si mesmo e nem para um player offline. Diga: /notation player,motivo")
  return true
elseif not mot then
  doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING,name.." possui "..(n >= 1 and n or 0).." notations.")
        return true
end
        doCreatureSetStorage(acid,stor, (n < 0 and 1 or (n+1)))
doPlayerSendTextMessage(acid,MESSAGE_STATUS_WARNING,"Você recebeu uma notation: "..getCreatureName(cid)..". Motivo: "..mot)
doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING,"Você enviou uma notation a "..param..". Motivo: "..mot)
       
return true
end

Para arrumar o unban, va no 050-function.lua e troque estas linhas:

    if db.query("UPDATE `player_storage` SET `value`=-1 WHERE `player_id` = "..pid.." AND `key`="..banStorage..";") == true then
        db.query("UPDATE `player_storage` SET `value`=-1 WHERE `player_id` = "..pid.." AND `key`="..banCount..";")
        db.query("UPDATE `player_storage` SET `value`=-1 WHERE `player_id` = "..pid.." AND `key`="..banReason..";")
        return true
    end

Por estas:

    if db.executeQuery("UPDATE `player_storage` SET `value`=-1 WHERE `player_id` = "..pid.." AND `key`="..banStorage..";") == true then
        db.executeQuery("UPDATE `player_storage` SET `value`=-1 WHERE `player_id` = "..pid.." AND `key`="..banCount..";")
        db.executeQuery("UPDATE `player_storage` SET `value`=-1 WHERE `player_id` = "..pid.." AND `key`="..banReason..";")
        return true
    end

Testei no server que você indicou e funcionou.

Link para o comentário
Compartilhar em outros sites

  • 0

Continua não aparecendo as notations no player. Meu notations.lua caso precisa editar algo.

function onSay(cid, words, param, channel)
	if(param == '') then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.")
		return true
	end

	local ret = getAccountIdByName(param)
	if(ret == 0) then
		ret = getAccountIdByAccount(param)
		if(ret == 0) then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player or account '" .. param .. "' does not exists.")
			return true
		end
	end

	local list = getBanList(BAN_NOTATION, ret)
	if(type(list) ~= "table" or table.maxn(list) <= 0) then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Such account or player does not have any notation.")
		return true
	end

	ret = "Notations for account " .. ret .. "\n"
	for i, ban in ipairs(list) do
		local tmp = ban.adminId ~= 0 and getPlayerNameByGUID(ban.adminId) or "unknown"
		ret = ret .. "\nAdded at " .. os.date("%c", ban.added) .. " by " .. tmp .. " with reason: " .. getBanReason(ban.reason) .. " and comment: " .. ban.comment .. "."
	end

	doPlayerPopupFYI(cid, ret)
	return true
end

Do unban funcionou.

Link para o comentário
Compartilhar em outros sites

  • 0

Você não está usando o notation.lua que eu postei por último aqui, vou repostar...

function isOnTable(arg,t)
for i=1,#t do
  if t[i]==arg then
   return true
  end
end
return false
end

local stor = 7658754

function onSay(cid, words, param)
local name,mot,op,n = string.explode(param,",")[1],string.explode(param,",")[2],getOnlinePlayers(),getPlayerStorageValue(cid, stor)
local acid = getPlayerByName(name)

if (name == '') or (acid == cid) or (not isOnTable(name,op)) then
  doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Você usou o comando errado, não mande menssagem para si mesmo e nem para um player offline. Diga: /notation player,motivo")
  return true
elseif not mot then
  doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING,name.." possui "..(n >= 1 and n or 0).." notations.")
        return true
end
        doCreatureSetStorage(acid,stor, (n < 0 and 1 or (n+1)))
doPlayerSendTextMessage(acid,MESSAGE_STATUS_WARNING,"Você recebeu uma notation: "..getCreatureName(cid)..". Motivo: "..mot)
doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING,"Você enviou uma notation a "..param..". Motivo: "..mot)
       
return true
end
Link para o comentário
Compartilhar em outros sites

  • 0

Olha, eu testei o script que postei no server que você me disse que usa como base e funcionou... não existe motivos para não ter funcionado aí, a não ser que você tenha modificado o script ou use outro servidor... para testar, como não tenho MC, permiti que usasse o comando em si mesmo e ta ae a prova de que funciona no server que você me passou:

 

56X2Pus.png

 

 

Agora, você falar que usou o mesmo script que eu postei, no server que me passou link e que mesmo assim não funcionou, ta de brincadeira comigo...

Editado por Antharaz
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...