PO

Sistema automático de recompensa por matar o top lvl do otserver

Por Poccnn, 10 de jun. de 2017 em CreatureScripts e Movements

sistema
hunted
lua
script
14
3.9k
PoccnnP
10 de junho de 2017 às 14:52

Hail Xtibianos.

Eu criei esse sistema, não lembro se foi a pedido de um membro ou não, para que seja interessante sempre matar o toplvl do otserver devido ao premio recebido por isso.

 

Em config.lua adicione:

huntedTopLevel = 100 -- "false" inibe o sistema; numero é o level minimo necessario para dar hunted ao toplvl.priceForEachLevelTohuntedTopLevel = 100 -- preço pago por cada lvl do toplvl ao mata-lo.

 

Em creaturescripts.xml adicione:

<event type="death" name="toplvl" script="toplvl.lua"/>

 

Em creaturescripts/scripts/config.lua adicione:

registerCreatureEvent(cid, "toplvl")

 

Na mesma pasta, crie um arquivo lua com o nome toplvl e adicione:

function onDeath(cid, corpse, deathList)local top,price =  getConfigInfo("huntedTopLevel"),getConfigInfo("priceForEachLevelTohuntedTopLevel")	if(isPlayer(cid))then		-- hunted top level		local _,level = getTopLevel()		if(tonumber(level) and top and tonumber(level) >= top and tonumber(level) <= getPlayerLevel(cid))then			for _,player in pairs(deathList) do				if(isPlayer(player))then doPlayerAddMoney(player, getPlayerLevel(cid)*price) end			end		end	end	return trueend

 

Agora abra o arquivo lib/050-functions.lua e adicione:

function getTopLevel() --[[( Marcryzius )]]--local target,name,level = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` <= 2 ORDER BY 'level' DESC;"),"",0	if(target:getID() ~= -1) then 		repeat		local glevel = target:getDataInt("level")				if(level < glevel)then				name,level = target:getDataString("name"),	glevel			end		until not(target:next()) 	end	target:free()	return name,levelend

 

No config.lua tu coloca o valor minimo requerido do toplvl para poder ser caçado.

 

Duvidas, erros e qualquer outra coisa, deixe nos comentários. 

2 meses depois...
lpdzL
14 de agosto de 2017 às 20:14

Teria como colocar pra aparecer o nome do jogador e o level pra aparecer na tela?

PoccnnP
14 de agosto de 2017 às 21:51

Aquela mensagem em vermelho para o servidor todo?

lpdzL
15 de agosto de 2017 às 10:14

Sim... se tiver como claro...

PoccnnP
15 de agosto de 2017 às 11:29

Existe duas formas práticas de fazer isso. Uma com globalevents e outra com ondeath.

A com globalevents, fica enviando de tempos em tempos a msg de quen é o top level atual; a outra manda a mensagem uma vez, toda vez que se mata o top level atual.

 

Vou deixar aqui a globalevents para ficar anunciando o toplevel atual.

Citar

function onThink(cid, interval)

local name,lvl = getTopLevel()

doBroadcastMessage("top level: "..name.." as level: "..lvl..".")

end

 

lpdzL
15 de agosto de 2017 às 12:06

entendi... mais teria como colocar que se matando aquele player especifico no caso o top level do sv, voce ganha uma recompensa...? outra coisa q eu queria saber, como colocar essa recompensa especifica...

Editado Agosto 15 por lpdz

nao dar double post

PoccnnP
15 de agosto de 2017 às 12:13

Substitua a função doplayeraddmoney para doplayeradditem com os respectivos parâmetros e a recompensa desejada.

 

lpdzL
15 de agosto de 2017 às 12:35

teria como colocar por favor pra mim como ficaria, so pra mim colocar o id que eu quero... é pq n manjo muito disso, mais desde ja obrigado por sanar todas as minhas duvidas...

 

PoccnnP
15 de agosto de 2017 às 13:11
47 minutos atrás, lpdz disse:

teria como colocar por favor pra mim como ficaria, so pra mim colocar o id que eu quero... é pq n manjo muito disso, mais desde ja obrigado por sanar todas as minhas duvidas...

 

 

Citar

doPlayerAddItem(player, id do item, quantidade)

@lpdz

Editado Agosto 15 por Poccnn

1 mês depois...
MarkziM
28 de setembro de 2017 às 06:32

meu ot não possui creaturescripts/scripts/config.lua

alternativa?

problema com o site também

 

 

Error occured!

Error ID: 
More info: ERROR: #C-1 : Class::ConfigLUA - Line 62 of LUA config file is not valid [key: huntedTopLevel]

File: /var/www/html/classes/configlua.php   Line: 59
File: /var/www/html/classes/configlua.php   Line: 20
File: /var/www/html/classes/configlua.php   Line: 12
File: /var/www/html/system/load.init.php   Line: 42
File: /var/www/html/index.php   Line: 18

PoccnnP
01 de outubro de 2017 às 20:29
Em 28/09/2017 at 06:32, Markzi disse:

meu ot não possui creaturescripts/scripts/config.lua

alternativa?

problema com o site também

 

 

Error occured!

Error ID: 
More info: ERROR: #C-1 : Class::ConfigLUA - Line 62 of LUA config file is not valid [key: huntedTopLevel]

File: /var/www/html/classes/configlua.php   Line: 59
File: /var/www/html/classes/configlua.php   Line: 20
File: /var/www/html/classes/configlua.php   Line: 12
File: /var/www/html/system/load.init.php   Line: 42
File: /var/www/html/index.php   Line: 18

 

o arquivo config.lua fica onde está a distro e não nesse diretório ai que tu citou.

MarkziM
02 de outubro de 2017 às 20:46

Sim, eu compreendi, só que quando se altera o config.lua que está atrelado ao site gera esse bug, o site não reconhece essa tag e o script não roda no 1.3 tfs

PoccnnP
02 de outubro de 2017 às 21:03
12 minutos atrás, Markzi disse:

Sim, eu compreendi, só que quando se altera o config.lua que está atrelado ao site gera esse bug, o site não reconhece essa tag e o script não roda no 1.3 tfs

Então não mecha no config.lua e adicione a variável ao script.

local huntedTopLevel = 100

 

4 meses depois...
mulinoM
25 de fevereiro de 2018 às 14:13
Em 15/08/2017 at 11:29, Poccnn disse:

Existe duas formas práticas de fazer isso. Uma com globalevents e outra com ondeath.

A com globalevents, fica enviando de tempos em tempos a msg de quen é o top level atual; a outra manda a mensagem uma vez, toda vez que se mata o top level atual.

 

Vou deixar aqui a globalevents para ficar anunciando o toplevel atual.

 

descupa reviver o topico mas o meu deu erro

<globalevent name="toplevel" interval="2000" script="toplevel.lua"/>

 

toplevel.lua

function onThink(cid, interval)

local name,lvl = getTopLevel()

doBroadcastMessage("top level: "..name.." as level: "..lvl..".")

end

 

erro ]

 

25/2/2018 14:12:36] [Error - GlobalEvent Interface] 
[25/2/2018 14:12:36] data/globalevents/scripts/toplevel.lua:onThink
[25/2/2018 14:12:36] Description: 
[25/2/2018 14:12:36] data/globalevents/scripts/toplevel.lua:3: attempt to call global 'getTopLevel' (a nil value)
[25/2/2018 14:12:36] stack traceback:
[25/2/2018 14:12:36]     data/globalevents/scripts/toplevel.lua:3: in function <data/globalevents/scripts/toplevel.lua:1>
[25/2/2018 14:12:36] [Error - GlobalEvents::think] Couldn't execute event: toplevel