JU

[ Resolvido ][Pedido] Se Matar Mc Perder 1 Lvl...

Por JumentoCuzaum, 28 de mai. de 2012 em Scripts

14
1.6k
28 de maio de 2012 às 12:29

Quero Um Sistema Que Se Eu Matar um MC Perdo Um Lvl Tornando Assim Impossivel Fazer FREE EXP em Ot De WAR :)

 

+REP a Quem Ajudar ;]

OneshotO
28 de maio de 2012 às 13:18

Não existe uma função que retire levels do jogador. Acho que dá até para fazer com querys na database, mas aí teria que ficar kickando o jogador se ele matasse um multiclient dele. :)

LordfireL
28 de maio de 2012 às 13:32

Como disse o oneshot, não existe função que retire level, mas teste meu script que vai adicionar 100% da exp do level, só que negativo (tipo -1600 para level 8 (4200) ao 7 (2600))

Fiz baseado em alguns scripts que eu vi, não tive como testar. Deve funcionar no TFS mais recente...

 

Em globalevents\scripts\antimckill.lua:

function onKill(cid, target)
 if (isPlayer(cid) and isPlayer(target)) then
   if (getIPByName(getPlayerNameByGUID(cid)) == getIPByName(getPlayerNameByGUID(target))) then
     exp_perdida = getExpForLevel(getPlayerLevel())-getExpForLevel(getPlayerLevel()-1)
     doPlayerAddExp(cid, exp_perdida)
     return true
   end
 end
end

 

Em globalevents\globalevents.xml:

<event type="kill" name="antimckill" event="script" value="antimckill.lua"/>

Editado Maio 28 por Lordfire

28 de maio de 2012 às 16:11

Como disse o oneshot, não existe função que retire level, mas teste meu script que vai adicionar 100% da exp do level, só que negativo (tipo -1600 para level 8 (4200) ao 7 (2600))

Fiz baseado em alguns scripts que eu vi, não tive como testar. Deve funcionar no TFS mais recente...

 

Em globalevents\scripts\antimckill.lua:

function onKill(cid, target)
 if (isPlayer(cid) and isPlayer(target)) then
if (getIPByName(getPlayerNameByGUID(cid)) == getIPByName(getPlayerNameByGUID(target))) then
  exp_perdida = getExpForLevel(getPlayerLevel())-getExpForLevel(getPlayerLevel()-1)
  doPlayerAddExp(cid, exp_perdida)
  return true
end
 end
end

 

Em globalevents\globalevents.xml:

<event type="kill" name="antimckill" event="script" value="antimckill.lua"/>

 

testei e não deu nada tenho que mudar alguma coisa?

VincV
28 de maio de 2012 às 17:59

por um motivo n funcionou

va no creaturescript/script/login.lua

e colocque isto antes do ultimo "return TRUE" (n tem aspas)

registerCreatureEvent(cid, "antimckill")

 

e troque o script que o lordfire passo por esse(tinha um pequeno errinho, ia addiona exp inves de tira)

function onKill(cid, target)
 if (isPlayer(cid) and isPlayer(target)) then
   if (getIPByName(getPlayerNameByGUID(cid)) == getIPByName(getPlayerNameByGUID(target))) then
  exp_perdida = getExpForLevel(getPlayerLevel())-getExpForLevel(getPlayerLevel()-1)
  doPlayerAddExp(cid, -(exp_perdida))
  return true
   end
 end
end

@lordfire

esqueceu de negativa o valor e de fala pra ele por o registre

LordfireL
28 de maio de 2012 às 18:11

Verdade, tinha esquecido do register. Quanto aos levels, eu fiz certo e errei porque fiz ao contrário, era pra pegar a exp do level-1 e tirar a do level pra ficar negativo, coloquei ao contrário. Obrigado por ajustar :p

28 de maio de 2012 às 20:04

Dei +REP pro lord por dar o script e amanhã darei seu +REP lordbug99

Por ter ajustado vou testar quando eu ver que deu certo vou postar aqui e reportar o topico...

 

 

@ Edit Bom Ainda Não Deu CERTO :S Matei Um MC Meu e Não Retirou nada :S algum erro alguma coisa que eu tenha que editar?

Editado Maio 28 por FriikoPall

OneshotO
28 de maio de 2012 às 21:23

Acho que essa tentativa de adicionar pontos de experiência negativos foi uma teoria que não deu certo. Ou seja só com query.

 

function onKill(cid, target)
if isPlayer(cid) and isPlayer(target) then
	if getPlayerIp(cid) == getPlayerIp(target) then
		local pid, level = getPlayerGUID(cid), getPlayerLevel(cid)
		doRemoveCreature(cid)
		db.executeQuery("UPDATE `players` SET `level` = ".. level - 1 .." WHERE `id` = ".. pid ..";")
	end
end
return true
end

 

O jogador que matou o multiclient então será kickado e quando voltar a entrar no jogo, terá um level a menos.

LordfireL
28 de maio de 2012 às 21:39

Oneshot, não vai ter problema de o player experiência suficiente pra avançar esse level retirado?

28 de maio de 2012 às 22:26

onde coloco? isto?

 

Acho que essa tentativa de adicionar pontos de experiência negativos foi uma teoria que não deu certo. Ou seja só com query.

 

function onKill(cid, target)
if isPlayer(cid) and isPlayer(target) then
	if getPlayerIp(cid) == getPlayerIp(target) then
		local pid, level = getPlayerGUID(cid), getPlayerLevel(cid)
		doRemoveCreature(cid)
		db.executeQuery("UPDATE `players` SET `level` = ".. level - 1 .." WHERE `id` = ".. pid ..";")
	end
end
return true
end

 

O jogador que matou o multiclient então será kickado e quando voltar a entrar no jogo, terá um level a menos.

OneshotO
29 de maio de 2012 às 08:06

Oneshot, não vai ter problema de o player experiência suficiente pra avançar esse level retirado?

 

Acho que não, andei testando essa query aqui e ao entrar no jogo, o campo experience é atualizado para o valor da experiência ao ter atingido o level.

 


 

Ao criador do tópico, isso é um creaturescript, siga o mesmo procedimento de instalação passado acima.

29 de maio de 2012 às 10:43

Funcionou +REP pra voce Oneshot Topico REPORTADO para moverem...

ErimythE
29 de maio de 2012 às 13:38

Tópico resolvido.

VildenV
29 de maio de 2012 às 13:39

Dúvida sanada, movido,