Ir para conteúdo
  • Cadastre-se

Suporte pvp enforced por creaturescript


Ir para solução Resolvido por Sun,

Posts Recomendados

tenho um script de pvp enforced , porem ele da a exp pra todos os players que participaram da kill, alguem sabe colocar pra somente o ultimo player que deu o ultimo hit receber? (tipo o que fragou a kill)

script:

Spoiler

 

function onKill(cid, target, lastHit)
local storage = getPlayerStorageValue(target, 2310)
    if getPlayerLevel(cid) <= getPlayerLevel(target) and isPlayer(cid) and isPlayer(target) then
            doSendAnimatedText(getPlayerPosition(cid), "5000000", 215)
            doPlayerAddExperience(cid, (getPlayerExperience(target) / 500))
elseif getPlayerLevel(cid) > getPlayerLevel(target) and isPlayer(cid) and isPlayer(target) then
            doSendAnimatedText(getPlayerPosition(cid), "5000000", 215)
            doPlayerAddExperience(cid, (getPlayerExperience(target) / 5000))
        return true
    end
return true
end


 

 

Link para o post
Compartilhar em outros sites

@poko360
Muda de onKill para onDeath o xml

 

function onDeath(cid, corpse, killer)
local storage = getPlayerStorageValue(cid, 2310)
    if getPlayerLevel(cid) <= getPlayerLevel(cid) and isPlayer(killer[1]) and isPlayer(cid) then
            doSendAnimatedText(getPlayerPosition(cid), "5000000", 215)
            doPlayerAddExperience(killer[1], (getPlayerExperience(cid) / 500))     
elseif getPlayerLevel(cid) > getPlayerLevel(cid) and isPlayer(killer[1]) and isPlayer(cid) then
            doSendAnimatedText(getPlayerPosition(cid), "5000000", 215)
            doPlayerAddExperience(killer[1], (getPlayerExperience(cid) / 5000))
        return true
    end
return true
end

 

Compre seus Scripts Agora totalmente seguro e de forma rápida, aceitamos também encomendas.

discord.gg/phJZeHa2k4

 

Projeto ATS (Naruto)

Informações Abaixo

Facebook

Youtube
Discord

 

Tutoriais / Conteúdos

Clique Aqui

Link para o post
Compartilhar em outros sites

@LeoTK
ja tentei fazer isso antes, mas nada acontece
tentei agr tambem com esse script, nao funfou =C

dei uma atualizada no script, removi uma linha q tava dando bug
dai testei assim:

Spoiler

function onDeath(cid, corpse, deathList)
local storage = getPlayerStorageValue(target, 2310)
    if  isPlayer(deathList[1]) and isPlayer(target) then
            doSendAnimatedText(getPlayerPosition(cid), "5000000", 215)
            doPlayerAddExperience(deathList[1], (getPlayerExperience(target) / 500))     
return true
end

vc sabe dizer se ta faltando algo?

 

edit: 
parece que a função OnDeath não reconhece "isPlayer(target)" , vc tem alguma ideia de como posso fazer?

Editado por poko360 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@poko360 editei testa lá

Compre seus Scripts Agora totalmente seguro e de forma rápida, aceitamos também encomendas.

discord.gg/phJZeHa2k4

 

Projeto ATS (Naruto)

Informações Abaixo

Facebook

Youtube
Discord

 

Tutoriais / Conteúdos

Clique Aqui

Link para o post
Compartilhar em outros sites

pode deixar onKill e registrar no player pelo onlogin, ai vc usa o codigo assim:

 

function onKill(cid, target, lastHit)
	if lastHit and isPlayer(target) then
		local calc = getPlayerLevel(cid) <= getPlayerLevel(target) and 500 or 5000
		doSendAnimatedText(getPlayerPosition(cid), "5000000", 215)
		doPlayerAddExperience(cid, (getPlayerExperience(target) / calc))
	end
	return true
end

 

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites
  • Moderador
function onKill(cid, target, damage)
local storage = getPlayerStorageValue(target, 2310)
local life = getCreatureMaxHealth(target)
  if damage >= (life / 2) then
    if getPlayerLevel(cid) <= getPlayerLevel(target) and isPlayer(cid) and isPlayer(target) then
            doSendAnimatedText(getPlayerPosition(cid), "5000000", 215)
            doPlayerAddExperience(cid, (getPlayerExperience(target) / 500))
elseif getPlayerLevel(cid) > getPlayerLevel(target) and isPlayer(cid) and isPlayer(target) then
            doSendAnimatedText(getPlayerPosition(cid), "5000000", 215)
            doPlayerAddExperience(cid, (getPlayerExperience(target) / 5000))
        return true
    end
 end
return true
end


não tenho a mínima ideia de como funciona este system de pvp enforced, mas oque alterei foi, o player tem que dar 50% da vida no player para poder ganhar a exp
@poko360

ei @Vodkart vi em minha source (0.4) e nela onKill não possui Lasthit , se ele estiver usando a mesma que eu uso, que é a do fire, provavelmente este parâmetro não irá funcionar.

Editado por Sun (veja o histórico de edições)

                                                                                                                  Have no idea!

                                                                                                  freelance? go to my discord:  sun#8860

 

Link para o post
Compartilhar em outros sites
2 minutos atrás, Sun disse:

function onKill(cid, target, damage)
local storage = getPlayerStorageValue(target, 2310)
local life = getCreatureMaxHealth(target)
  if damage >= (life / 2) then
    if getPlayerLevel(cid) <= getPlayerLevel(target) and isPlayer(cid) and isPlayer(target) then
            doSendAnimatedText(getPlayerPosition(cid), "5000000", 215)
            doPlayerAddExperience(cid, (getPlayerExperience(target) / 500))
elseif getPlayerLevel(cid) > getPlayerLevel(target) and isPlayer(cid) and isPlayer(target) then
            doSendAnimatedText(getPlayerPosition(cid), "5000000", 215)
            doPlayerAddExperience(cid, (getPlayerExperience(target) / 5000))
        return true
    end
 end
return true
end


não tenho a mínima ideia de como funciona este system de pvp enforced, mas oque alterei foi, o player tem que dar 50% da vida no player para poder ganhar a exp
@poko360

 

nesse caso a verificação da storage tem que ser depois de verificar se o target é um player, se ele for atacar um summon ou monstro, vai tentar pegar a storage do mesmo e dar erro...

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites
  • Moderador
1 minuto atrás, Vodkart disse:

 

nesse caso a verificação da storage tem que ser depois de verificar se o target é um player, se ele for atacar um summon ou monstro, vai tentar pegar a storage do mesmo e dar erro...

sim verdade! erro meu!

                                                                                                                  Have no idea!

                                                                                                  freelance? go to my discord:  sun#8860

 

Link para o post
Compartilhar em outros sites

@Sun Verdade, na minha possuiu, muito bem sua colocação sobre o parâmetro "lastHit"

 

sendo assim, só usando onDeath mesmo

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites

nenhum dos 3 script funfou =C
nao acontece nada (tambem n da error na distro)

o script original seria esse: (sem o elfseif)


function onKill(cid, target, lastHit)
local storage = getPlayerStorageValue(target, 2310)
    if getPlayerLevel(cid) <= getPlayerLevel(target) and isPlayer(cid) and isPlayer(target) then
            doSendAnimatedText(getPlayerPosition(cid), "5000000", 215)
            doPlayerAddExperience(cid, (getPlayerExperience(target) / 500))
return true
end

Link para o post
Compartilhar em outros sites
  • Moderador

vai na sua src em creatureevent.cpp procure por onKill e veja se tem Lasthit

@poko360 se puder me falar como funciona esse pvp enforced tbm

                                                                                                                  Have no idea!

                                                                                                  freelance? go to my discord:  sun#8860

 

Link para o post
Compartilhar em outros sites

@Sun seria isso?
bool Creature::onKilledCreature(Creature* target, DeathEntry& entry)


o script funciona assim:
quando 1 ou mais players participarem de uma kill, o script vai pegar a exp total do target e dividir por 500 (configuravel no script) e distribuir igualmente essa xp pra todos os participantes da kill

oq eu queria é somente distribuir pro player que fragou a kill

Link para o post
Compartilhar em outros sites
  • Moderador
  • Solução
function onDeath(cid, corpse, deathList)

local position = getPlayerPosition(deathList[1])
local target = getCreatureTarget(deathList[1])
local mLevel = getPlayerLevel(cid) <= getPlayerLevel(target) and 500 or 5000
if getPlayerStorageValue(target, 2310) == -1 then return true end

    doSendAnimatedText(position, "+" .. tostring((getPlayerExperience(target) / mLevel) .. "exp", COLOR_RED)
    doCreatureAddHealth(deathList[1], 1000)
    doPlayerAddExperience(deathList[1], (getPlayerExperience(target) / mLevel))
	
 return true
end

perdão a demora, está ai o script!

não se esqueça de registrar no login.lua e colocar a tag no xml!

 

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

e em login.lua

registerCreatureEvent(cid, "PvpEnforced")

 

lembrando!, não altere nada no script, você pode alterar apenas a storage

tá ai o funcionamento!.

enforced.thumb.gif.03017d8525ac248f11a48f4b6ffdac85.gif

@poko360

lembrando se te ajudei rep+ e coloque como {Solução}

Editado por Sun (veja o histórico de edições)

                                                                                                                  Have no idea!

                                                                                                  freelance? go to my discord:  sun#8860

 

Link para o post
Compartilhar em outros sites
  • Moderador
1 minuto atrás, poko360 disse:

@Sun como faço pra tirar essa storage 2310? é só apagar?

se você retirar a storage, todo player que morrer independente irá ganhar xp!

só vc remover está linha

if getPlayerStorageValue(target, 2310) == -1 then return true end

 

                                                                                                                  Have no idea!

                                                                                                  freelance? go to my discord:  sun#8860

 

Link para o post
Compartilhar em outros sites

certo, mais uma duvida, isso seria oque?

local mLevel = getPlayerLevel(cid) <= getPlayerLevel(target) and 500 or 5000

essa parte do
and 500 or 5000

seria a divisão da xp certo?


pra deixar a xp fixa em 500, é só apagar?

Link para o post
Compartilhar em outros sites
  • Moderador
15 minutos atrás, poko360 disse:

certo, mais uma duvida, isso seria oque?


local mLevel = getPlayerLevel(cid) <= getPlayerLevel(target) and 500 or 5000

essa parte do
and 500 or 5000

seria a divisão da xp certo?


pra deixar a xp fixa em 500, é só apagar?

Se quer deixar fixo deixe

mLevel = 500

 

Não se esqueça de deixar rep+ e colocar a resposta como solucao, para ajudar mais pessoas!

                                                                                                                  Have no idea!

                                                                                                  freelance? go to my discord:  sun#8860

 

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por braianlomas
      Como faço para corrigir esse problema para meu cliente, eu uso o tfs 0.3.6  
      Quero resolver esse problema que tenho no meu cliente, como e onde posso resolver?  
      Eu uso o tfs 0.3.6, não tenho as fontes do cliente, se você puder me dar eu vou amá-las para sempre  
       

       
    • Por A.Mokk
      Ola pessoal, estou tentando compilar o TFS 1.5 Downgrade para 8.60 atraves do MSVC 2022, ao tentar compilar da o seguinte erro:
       
       
      Fiz o download do MSVC, GitDash, TFS-SDK-3.2, e de varios boosts que tentei, ao fazer o seguinte procedimento no GitDash:
       
      Ao chegar em ./bootstrap-vcpkg.bat o GitDash nao consegue realizar o procedimento corretamente, alguem poderia me ajudar ?

      Tentei de diversas formas mas o mesmo erro sempre persiste, atualmente meu servidor utiliza TFS 0.4, consigo compilar sem nenhum problema no MSVC 2010, porem, as limitações do TFS 0.4 estão me fazendo precisar atualizar, se alguem souber como corrigir esses erros eu agradeço !

      Tutoriais utilizados :
      Compiling on Windows (vcpkg) · otland/forgottenserver Wiki · GitHub
      Compiling on Windows · otland/forgottenserver Wiki · GitHub
      Compilando TFS 1.3 com vídeo-aula - Tutoriais Infraestrutura & Proteção - Tibia King - Tudo sobre Tibia, OTServ e Bots!
      Compilar TFS 1.3 Vcpkg - Tutoriais Infraestrutura & Proteção - Tibia King - Tudo sobre Tibia, OTServ e Bots!
       
      O que acontece no Powershell:
       
    • Por thunmin
      .Qual servidor ou website você utiliza como base? 
      Canary 2.3.6
      Qual o motivo deste tópico? 
      Queria fazer com que os players não pudessem mexer no aleta sio, pois, agora os mesmos estão conseguindo mexer nos itens
      Está surgindo algum erro? Se sim coloque-o aqui. 
       
      Você tem o código disponível? Se tiver publique-o aqui: 
         
      Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 
       
    • Por thunmin
      .Qual servidor ou website você utiliza como base? 
      canary para o cliente 13.16
      Qual o motivo deste tópico? 
      Não consigo encontrar onde ajusta
      to com o problema no 13.16  o exausted, por exemplo os kinas era pra combar exori, erori gran e exori min, porém não ta indo ta dando exausted o char ta soltando magia ou runa e não consegue usar as potions
      Está surgindo algum erro? Se sim coloque-o aqui. 
       
      Você tem o código disponível? Se tiver publique-o aqui: 
         
      Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 
       
    • Por Andersontatuador
      Olá galera da TK, me chamo Anderson estou procurando alguém profissional em otservs e site.
      Já tenho um servidor o site e o cliente preciso só de uma pessoal competente, que esteja empenhado a trabalhar,
      não quero nada de graça, pois nessa onda fui mais roubado do quer eu pagar um profissional.
      caso alguém se interesse entrar em contato comigo através do whatsapp
      82 9 9304-9462
       
      Está surgindo algum erro? Se sim coloque-o aqui. 
       
      Você tem o código disponível? Se tiver publique-o aqui: 
         
      Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 
       
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo