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 raphadoidera
      .Qual servidor ou website você utiliza como base? 
      8.60
      Qual o motivo deste tópico? 
      Preciso de um SCRIPT.

      Salve TK. Então rapaziada, estou a meses tentando achar um SCRIPT que faça com que o personagem solte mais de um míssil em uma mesma skill. Me passaram um que ele solta vários mísseis, porém os mesmos não saem diretamente do personagem. Eu preciso de um script que eu possa adicionar mais de um Míssil e que eles saiam diretamente do personagem. Alguém da uma força por favor!


      Esse é o Script que eu quero adicionar os Mísseis, 3 para ser mais exato. Míssel (41)
       
      Você tem o código disponível? Se tiver publique-o aqui: 
      local combat = createCombatObject()
      setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
      setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 41)
      setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -78.2, 1, -88.2, 1)
      function onCastSpell(cid, var)

      local waittime = 2 -- Tempo de exhaustion
      local storage = 1000600
      if exhaustion.check(cid, storage) then
      return false
      end

      local position1 = {x=getThingPosition(getCreatureTarget(cid)).x+1, y=getThingPosition(getCreatureTarget(cid)).y+1, z=getThingPosition(getCreatureTarget(cid)).z}
      local position2 = {x=getCreaturePosition(cid).x+3, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z}
      doSendMagicEffect(position1, 106)
      doSendMagicEffect(position2, 189)
      exhaustion.set(cid, storage, waittime)
      return doCombat(cid, combat, var)
      end
    • By djteteh
      Alguem Poderia Me Ajudar Com Um Script Que Mostra Rank e a Vocaçao Juntos em Uma Tabela ?

      Tipo Assim
       
      1- 140256 - Yoshiizin - Sorcerer
       
      So que ta assim no Server

       


    • By XGaduX
      local config = { jumps5 = 10, walktime = 10 } combat5 = createCombatObject() setCombatParam(combat5, COMBAT_PARAM_HITCOLOR, COLOR_PINK) setCombatParam(combat5, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat5, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat5, COMBAT_PARAM_EFFECT, 22) setCombatFormula(combat5, COMBAT_FORMULA_LEVELMAGIC, -40.0, 0, -65.0, 0) function onCastSpell(cid) if exhaustion.check(cid, 4132213952) == TRUE then doPlayerSendCancel(cid, "Podera usar novamente dentro de 5 segundos.") doSendMagicEffect(getCreaturePosition(cid), 2) return false end function move5343(cid, pos, n) local n = n or 0 if (n < config.jumps5) then if (isCreature(cid)) then local pos = pos or getCreaturePosition(cid) local target = getCreatureTarget(cid) local dir = (target ~= 0) and getDirectionTo(pos, getCreaturePosition(target)) or getCreatureLookDirection(cid) local tpos = (target ~= 0) and getCreaturePosition(target) local newPos if ((target ~= 0) and ((pos.x-0 == tpos.x) and (pos.y == tpos.y))) then newPos = tpos else newPos = getPosByDir(pos, dir) end if ((getTopCreature(newPos).uid == 1) and doTileQueryAdd(cid, newPos) ~= 0) then return false end doCombat(cid, combat5, { pos = newPos, type = 2 }) addEvent(move5343, config.walktime, cid, newPos, n + 1) end end end move5343(cid) exhaustion.set(cid, 4132213952, 3.0) return true end Olá! alguém poderia "consertar" essa spell? os "erros" são que quando se da target em algum alvo ela segue ele, queria que ela fosse apenas em linha reta. Outro é que quando o player gira de sentido (está andando sentindo para baixo \/ e vira esquerda < a habilidade acompanha). A proposta é que ela vá em linha reta "x" vezes e ao tocar em player  com 10% da vida o execute. Att!.

      2021-03-05 17-56-30.mp4
      2021-03-05 17-53-10.mp4 2021-03-05 17-56-30.mp4 2021-03-05 17-56-30.mp4 2021-03-05 17-56-30.mp4 2021-03-05 17-53-10.mp4
    • By Sun
      ~ Olá galera, fiz parte do grupo por uns anos e fiquei 3 longos anos sem dar as caras
                                                       Antes pessoas me ajudavam, hoje, consigo ajudar as pessoas, e queria compartilhar com vocês conhecimento sobre itemAttribute!
                                                            essa função do tibia é maravilhosa, porém muitos não sabem seu potencial ou até mesmo não coloca ela em seus planos,
                                                          ela é bem simples porém deixa duvida em muitos, principalmente servidores de Poketibia que utiliza isso em quase tudo.
      getItemAttribute(uid, key) -- ## oque é get? get em inglês seria algo como obter, então a função traduzida seria, obter atributo do item! ## -- getItemAttribute(uid, key) -- ## UID seria direcionado a qual item eu estaria perguntando seu attributo, lembrando que eu obtenho isso com a key ##-- --## quando se pesquisa pelo atributo do item, o mais importante seria a chave que está contido no item, a key, no caso é uma {string} doItemSetAttribute(uid, key, value) -- ## oque é set? set seria algo como "definir", usamos para "dar" algo, traduzido fica definir atributo no item doItemSetAttribute(uid, key, value) -- ## uid novamente! seria o item a ser setado o attributo, chave, será algo que iremos colocar, como "defense" ## -- -- ## oque seria value? value seria o valor, como 1, etc já que é defense podemos fazer se tiver mais, defende mais ##  
      doItemEraseAttribute(uid, key) --## oque é do? do seria como "faça", na tradução seria, faça um corte no atributo do item doItemEraseAttribute(uid, key) --## uid novamente! será o item, a chave seria aque você setou no item, essa função retira o attributo!. ##--  
      exemplo dos Attribute sendo usados
       
      -- ## exemplo de catch seria o charmander ## -- Ensino = {"Charmander", 3200, 1515, 4} -- ## fazemos de exemplo que 3200 seria vida do charmander e 1515 seria o id do item do seu portfoil e 4 o sexo item = doCreateItemEx(12664, 1) -- ## 12664 seria o id da pokebola, 1 seria a quantia doPlayerAddItemEx(cid, item, true, CONST_SLOT_BACKPACK) doItemSetAttribute(item, "poke", 3200) -- ## vida do pokemon ## -- doItemSetAttribute(item, "nome", "Charmander") -- ## nome do pokemon ## -- doItemSetAttribute(item, "portrait", 1515) -- ## portrait do pokemon ## -- doItemSetAttribute(item, "gender", 4) -- ## 4 seria o sexo dele ## -- -- ## claro que ná hora de fazer seu system de catch irá ser assim, mas isso é apenas um exemplo de como irá funcionar ## -- -- ## lembrando que o valor do doItemSetAttribute pode ser além de numero. ## --  
                                                 
                                                                       
       
       
                                                        Espero que muitos pratiquem ai, e que vocês tenham conseguido entender o tópico e se aventurem para usar a função!.
                                                                                                                                                   bye
       
    • By ADMRagnarok
      .Qual servidor ou website você utiliza como base? 
      https://github.com/mattyx14/otxserver/tree/otxserv2
      Qual o motivo deste tópico? 
      Alguem teria um script de reset preferencialmente por source para otx2 atualizado https://github.com/mattyx14/otxserver/tree/otxserv2
      se for por distro as mudanças me diga aonde mudar eu mesmo compilo
      ou script normal mesmo, porem as configuraçoes do script seriam as seguintes
      level necessario para resetar = x
      aumento de x level para reset = x
      item e quantidade de item para resetar = x,x
      aumento de x items por reset= x
      vida e mana volta ao inicio ao resetar = true or false
      skills voltao ao inicio ao resetar = true false
      hp e mp adicional ganho /lvl por reset = 1% (configurável)
      dano e heal adicionado por reset = 1% configuravel
      reset voc = {x, x, x, x, x, x, x} (quando der o 10 reset por exemplo(configuravel) , será feito uma checagem de vocation para poder resetar, por exemplo até 10 resets qualquer voc reseta nao será feito checagem, porem no reset 10 só resetará se for uma das seguintes vocações, se for mais facil deixa só 1 reset configuravel assim se for dificil pode colocar apartir de tantos resets precisa da classe, coloque oque for mais pratico pois o efeito será o mesmo.
      teleport para o templo= true or false
      pode resetar com battle= true or false
      a cada x resets ganhe tal item (configuravel) reset x recebe item x ao resetar, reset =5 {2160, 100} - exemplo.
      nao me importa se será storage, source, script. só me importo com o resultado e que nao tenha bugs, quanto mais bem feito melhor na hora de negociar o preço, se nao for permitido este tipo de post aqui alguem me avise que eu retiro ele. se tem outro local por favor movam ele, mais informações mande msg no privado responderei assim que possível.
         
  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...

Important Information

Confirmação de Termo