Jump to content

Recommended Posts

Atualmente este script está dando experiência fixa e eu gostaria que ele estivesse ganhando em porcentagem (configurável) e se ele matar um player 10 leveis(configurável) menor que o dele não ganhar experiência nenhuma

Se for possível adicionar a perda de experiência ao matar com o mesmo IP em porcentagem e não fixa.

 

  function onKill(cid, target)
--config----------------------------
local lvl = getPlayerLevel(cid) --players level
local nlvl = getPlayerLevel(cid) + 1 -- add 5 levels
--end-------------------------------
    if isPlayer(target) == TRUE then
        if getPlayerIp(cid) ~= getPlayerIp(target) then
                        local exp = (50 * (lvl) * (lvl) * (lvl) - 130 * (lvl) * (lvl) + 400 * (lvl)) / 5
                        local nexp = (50 * (nlvl) * (nlvl) * (nlvl) - 130 * (nlvl) * (nlvl) + 400 * (nlvl)) / 5
                        local newexp = nexp - exp
                        doPlayerAddExp(cid,newexp)
                        doSendAnimatedText(getPlayerPosition(cid), "Orgasmic~", 198)
                else
            doPlayerAddExperience(cid, -90000000)
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"You have been punished for killing a player of the same IP.")
        end
        end
    return TRUE
end 

 

Link to post
Share on other sites

Não entendi a parte de ganhar em 'porcentagem', o ganho de XP está seguindo as fórmulas 'exp' e 'nexp'. Dá mais detalhes de como quer, e assim que possível eu vejo pra ti.

 

PS: Acho que ficaria legal se a fórmula fosse calculada em cima do level do player que morreu, e não em cima do lvl de quem matou (como está atualmente), daí colocar um limite de lvl tbm, pra evitar que jogadores iniciantes matem high lvl e abusem do ganho de xp.

Link to post
Share on other sites

17 minutos atrás, Pisces disse:

Não entendi a parte de ganhar em 'porcentagem', o ganho de XP está seguindo as fórmulas 'exp' e 'nexp'. Dá mais detalhes de como quer, e assim que possível eu vejo pra ti.

 

PS: Acho que ficaria legal se a fórmula fosse calculada em cima do level do player que morreu, e não em cima do lvl de quem matou (como está atualmente), daí colocar um limite de lvl tbm, pra evitar que jogadores iniciantes matem high lvl e abusem do ganho de xp.

@Pisces Eu gostaria que o jogador que matou o outro player ganhar uma porcentagem da exp perdida do jogador e que essa porcentagem seja configurável e ao matar um player level menor que o dele não ganhar exp

e se matar o jogador com o mesmo IP perder a experiência que ele ganharia do jogador que ele matou, nem sei se isso é possível nesse script.

Eu não conseguir deixar explicado isso no post por não entender sobre script estou começando agora e estou aprendendo conforme eu vou pesquisando vou aprendendo

Edited by Breniinx (see edit history)
Link to post
Share on other sites

A quantidade de XP que o jogador irá receber tu consegue definir nas variáveis "exp", "nexp", e "newexp", basta alterar as operações matemáticas que estão sendo feitas dentro delas. Modifiquei pra que o cálculo seja feito em cima do level do jogador inimigo, assim fica algo mais proveitoso e menos "fixo". Testa aí e me fala:

 

Spoiler

function onKill(cid, target)
local lvlCid = getPlayerLevel(cid)
local lvlTarget = getPlayerLevel(target)

------------- Em exp/nexp/newexp são as fórmulas de cálculo para decidir qual será a XP que o jogador irá obter.

  local exp = (50 * (lvlTarget) * (lvlTarget) * (lvlTarget) - 130 * (lvlTarget) * (lvlTarget) + 400 * (lvlTarget)) / 5
  local nexp = (50 * (lvlCid) * (lvlCid) * (lvlCid) - 130 * (lvlCid) * (lvlCid) + 400 * (lvlCid)) / 5
  local newexp = (exp - nexp) / 2
  local punishment = 2 -- Valor que será multiplicado pelo resultado de 'newexp'. (Punição por matar player do mesmo IP)

  if (isPlayer(target)) and (lvlTarget >= lvlCid)then
    if getPlayerIp(cid) ~= getPlayerIp(target) then
      doPlayerAddExp(cid, newexp)
      doCreatureSay(cid, "You earned " .. newexp .. " points of experience.", TALKTYPE_MONSTER)
    else
      doPlayerAddExperience(cid, -((newexp) * punishment))
      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"You have been punished for killing a player of the same IP.")
    end
  end
  return true
end 

 

 

Link to post
Share on other sites

7 horas atrás, Pisces disse:

A quantidade de XP que o jogador irá receber tu consegue definir nas variáveis "exp", "nexp", e "newexp", basta alterar as operações matemáticas que estão sendo feitas dentro delas. Modifiquei pra que o cálculo seja feito em cima do level do jogador inimigo, assim fica algo mais proveitoso e menos "fixo". Testa aí e me fala:

 

  Ocultar conteúdo




function onKill(cid, target)
local lvlCid = getPlayerLevel(cid)
local lvlTarget = getPlayerLevel(target)

------------- Em exp/nexp/newexp são as fórmulas de cálculo para decidir qual será a XP que o jogador irá obter.

  local exp = (50 * (lvlTarget) * (lvlTarget) * (lvlTarget) - 130 * (lvlTarget) * (lvlTarget) + 400 * (lvlTarget)) / 5
  local nexp = (50 * (lvlCid) * (lvlCid) * (lvlCid) - 130 * (lvlCid) * (lvlCid) + 400 * (lvlCid)) / 5
  local newexp = (exp - nexp) / 2
  local punishment = 2 -- Valor que será multiplicado pelo resultado de 'newexp'. (Punição por matar player do mesmo IP)

  if (isPlayer(target)) and (lvlTarget >= lvlCid)then
    if getPlayerIp(cid) ~= getPlayerIp(target) then
      doPlayerAddExp(cid, newexp)
      doCreatureSay(cid, "You earned " .. newexp .. " points of experience.", TALKTYPE_MONSTER)
    else
      doPlayerAddExperience(cid, -((newexp) * punishment))
      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"You have been punished for killing a player of the same IP.")
    end
  end
  return true
end 

 

 

a parte da punição por matar pelo mesmo ip não está funcionando e não aparece nenhum erro na distro, o resto tá funcionando perfeitamente, eu sei que estou pedindo demais mas não teria como deixar de forma mais clara essa formula de cálculo ? eu sinceramente não entendi nada e sobre a diferença de level deve  está na formula também e como eu não entendi fica difícil fazer alguma modificação eu queria que o jogador que matar o outro for 100 leveis menor ganhar 50% da exp perdida se forem level igual ou 10 nivel de diferença ganhar 100% da exp perdida e se ele for 20 nivel ou mais não ganhar exp nenhuma, se tiver varios player matando 1 jogador a exp seja shareada de forma igual dentro das condiçôes citada.

 

não precisa ser necessariamente esse script, se você tiver algum outro funcional que consiga fica o mais próximo possivel das condiçôes citada eu ficaria grato eternamente.

 

eu acho que já estou pedindo demais mas se não for possivel tudo bem, o script tá funcionando perfeitamente tirando a parte do IP

Edited by Breniinx (see edit history)
Link to post
Share on other sites

10 horas atrás, Pisces disse:

As fórmulas são apenas cálculos comuns (adição, subtração, etc..) de acordo como você desejar. Irei pensar em um outro script, de modo que fique mais claro e envio aqui no tópico. 😁

Estarei esperando ansiosamente :)

Link to post
Share on other sites

Em 15/01/2021 em 13:27, Pisces disse:

As fórmulas são apenas cálculos comuns (adição, subtração, etc..) de acordo como você desejar. Irei pensar em um outro script, de modo que fique mais claro e envio aqui no tópico. 😁

Não pensou em nada sobre o outro script?

Link to post
Share on other sites

Estava com pouco tempo.. Mas estranho não estar funcionando a parte do IP, sendo que é a mesma linha de código que tu enviou anteriormente kkk

 

O script só vai funcionar se o target for um jogador e que este seja maior ou igual ao level do cid, talvez você matou alguém de level inferior.

Link to post
Share on other sites

3 horas atrás, Pisces disse:

Estava com pouco tempo.. Mas estranho não estar funcionando a parte do IP, sendo que é a mesma linha de código que tu enviou anteriormente kkk

 

O script só vai funcionar se o target for um jogador e que este seja maior ou igual ao level do cid, talvez você matou alguém de level inferior.

Jogador morto level 550, o killer era 600 e ambos com mesmo ip porque sou eu testando e não teve punição ou não entendi direito?

gif_morte.gif

Em 20/01/2021 em 15:39, XGaduX disse:

@WooX Ver se resolver esse...

Serei eternamente grato

Link to post
Share on other sites

O script por completo só funciona se o level do jogador morto for maior que o level do jogador que matou, assim como pediu ali atrás:

"e ao matar um player level menor que o dele não ganhar exp."

E o gif que mostrou ali, o player é lvl 600 e está matando um 550 :d

 

Se o Bruno for level 500, e matar o Guilherme que é lvl 400, o script não vai ser executado. Porque está configurado para que funcione apenas se o Guilherme tiver um level maior que o do Bruno.

Dá pra colocar a punição independente do level, mas não faz sentido dado o contexto. Visto que se o jogador for de level menor, ele não ganhará experiência nem nada.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Similar Content

    • By GniusPlay
      Pessoal, preciso de uma script que ao player usar o item na pokeball do pokemon, ele ganhe +100 de vida
      Exemplo:
      Ele tem 1400 de vida, ai ao usar o item ele ficaria com 1500
       
    • By Nother
      Olá, gostaria de uma speel em área que puxasse o agro dos bixos para que eles parassem de focar outra pessoa e focassem quem agrou eles.
      A spell pode ser um quadrado de 4 sqm de distancia para todos os lados.
      Desde já agradeço
       
    • By Kanoshi
      Ent to tentando fazer com que o npc feche o shop assim que o player der bye porém ele continua com o shop aberto.
       
      Rep a quem ajudar!
    • By xBlackWolf
      .Qual servidor ou website você utiliza como base? 
      OTG 
       
      Qual o motivo deste tópico? 
      Estou tentando repassar para linguagem do OTG e não funciona o script, também não dá erros.
       
      Você tem o código disponível? Se tiver publique-o aqui: 
       function addOnlineBonus(player, minutos, bonus_contador, bonus_max) player:setStorageValue(bonus_contador, player:getStorageValue(bonus_contador) + 1) addEvent(addOnlineBonus, minutos * 60 * 1000, player, minutos, bonus_contador, bonus_max) end function MinutesToClock(minutes) local minutes = tonumber(minutes) if minutes <= 0 then return "00:00"; else if minutes >= 60 then hours = string.format("%02.f", math.floor(minutes/60)); mins = string.format("%02.f", math.floor(minutes - hours*60)); else hours = "00"; mins = minutes; end if hours ~= 1 then return hours.." Horas e "..mins.. " minutos." else return hours.." Hora e "..mins.. " minutos." end end end function showOnlineBonus(player,bonus_contador,minutos) local finaltime = 0 if(player:getStorageValue(bonus_contador) >= 60) then finaltime = MinutesToClock(player:getStorageValue(bonus_contador)) else finaltime = (player:getStorageValue(bonus_contador).." Minutos.") end player:SendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE,"Voce esta Online a: " ..finaltime) addEvent(showOnlineBonus, minutos * 600 * 1000, player, bonus_contador, minutos) end function onLogin(player) player:registerEvent("onlinebonus") local bonus_contador = 72702 -- Storage que vai guardar tempo online em minutos. local bonus_max = 99999 -- Quantidade de minutos máximo por dia. local minutos = 1 -- A cada quanto tempo vamos ganhar pontos. if player:getStorageValue(bonus_contador) > 0 then player:SendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE,"Tempo Online acumulado hoje: "..MinutesToClock(player:getStorageValue(cid,bonus_contador))) else player:setStorageValue(bonus_contador, 0) player:SendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE,"Fique Online e receba o TOP Online ! Alem de chances maiores na loteria ! Tenha um otimo jogo!") end addEvent(addOnlineBonus, minutos * 60 * 1000, player, minutos, bonus_contador, bonus_max) addEvent(showOnlineBonus, minutos * 600 * 1000, player, bonus_contador, minutos) return true end  
      Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 
       
      Não tem print de erros, simplesmente o processo não inicia de contar os minutos disponíveis... também não envia nada ao player.
       
      Segue script usado como base TFS 0.4 :
      function addOnlineBonus(cid, minutos, bonus_contador, bonus_max) if not isPlayer(cid) then return false end setPlayerStorageValue(cid, bonus_contador, getPlayerStorageValue(cid, bonus_contador) + 1) addEvent(addOnlineBonus, minutos * 60 * 1000, cid, minutos, bonus_contador, bonus_max) end function MinutesToClock(minutes) local minutes = tonumber(minutes) if minutes <= 0 then return "00:00"; else if minutes >= 60 then hours = string.format("%02.f", math.floor(minutes/60)); mins = string.format("%02.f", math.floor(minutes - hours*60)); else hours = "00"; mins = minutes; end if hours ~= 1 then return hours.." Horas e "..mins.. " minutos." else return hours.." Hora e "..mins.. " minutos." end end end function showOnlineBonus(cid,bonus_contador,minutos) local finaltime = 0 if not isPlayer(cid) then return false end if(getPlayerStorageValue(cid,bonus_contador) >= 60) then finaltime = MinutesToClock(getPlayerStorageValue(cid,bonus_contador)) else finaltime = (getPlayerStorageValue(cid,bonus_contador).." Minutos.") end doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"Voce esta Online a: " ..finaltime) addEvent(showOnlineBonus, minutos * 600 * 1000, cid, bonus_contador, minutos) end function onLogin(cid) local bonus_contador = 72702 -- Storage que vai guardar tempo online em minutos. local bonus_max = 99999 -- Quantidade de minutos máximo por dia. local minutos = 1 -- A cada quanto tempo vamos ganhar pontos. if getPlayerStorageValue(cid, bonus_contador) > 0 then doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"Tempo Online acumulado hoje: "..MinutesToClock(getPlayerStorageValue(cid,bonus_contador))) else setPlayerStorageValue(cid, bonus_contador, 0) doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"Fique Online e receba o TOP Online ! Alem de chances maiores na loteria ! Tenha um otimo jogo!") end addEvent(addOnlineBonus, minutos * 60 * 1000, cid, minutos, bonus_contador, bonus_max) addEvent(showOnlineBonus, minutos * 600 * 1000, cid, bonus_contador, minutos) return true end  
       
      Aguardo quem puder me ajudar rsrs
    • By ZeeroBR
      Não sei se é padrão do game ou coisa do tipo, mas os summons que eu spawno conseguem me atacar com spells em área, alguém sabe a solução? tentei utilizar um script mas não tive êxito. Utilizo tfs 0.4 rev 3884 8.60
  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...

Important Information

Confirmação de Termo