Ir para conteúdo
  • Cadastre-se

Derivado HELP Criaturescript incompleto ajudem completar


Posts Recomendados

15 horas atrás, wevertonvrb disse:

sim será um pokémon
podes me ajudar?

 

É difícil te ajudar devido eu não usar lt pokemon.

 

Faz o seguinte: se essa função retornar o valor do dano em porcentagem; usa ela no teu scmript postado no tópico.

getDamageMapPercent(pk, cid)

 

Se não funcionar, averigua se essa função - que possivelmente tenha sido criada para isso - retorna a xp do monstro inalterada.

getWildPokemonExp(cid)

 

Aparti dela podemos criar uma função que haveriguará o ganho xp de cada player, assim saberemos o quanto, em porcentagem cada um recebeu.

Link para o post
Compartilhar em outros sites
  • Respostas 60
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

@xWhiteWolf me ajuda aqui mano http://www.tibiaking.com/forum/topic/67062-subir-escada-bug/#comment-385003

Esse error se deu por causa da função isCreature(monster) que está retornando um valor falso, ou seja, não é um monstro que está na variável "monster" da função.    No caso dele estar sumind

Fiz uma modificação no script:     Ps: muda "isplayeron ()" por: "getCreatureName ()"

2 horas atrás, dominus disse:

 

É difícil te ajudar devido eu não usar lt pokemon.

 

Faz o seguinte: se essa função retornar o valor do dano em porcentagem; usa ela no teu scmript postado no tópico.

getDamageMapPercent(pk, cid)

 

Se não funcionar, averigua se essa função - que possivelmente tenha sido criada para isso - retorna a xp do monstro inalterada.

getWildPokemonExp(cid)

 

Aparti dela podemos criar uma função que haveriguará o ganho xp de cada player, assim saberemos o quanto, em porcentagem cada um recebeu.

getWildPokemonExp(cid)
WildPokemon no caso é pokémon selvagem eles são um monstro normal como se fosse um demon configurado na xml
os serves oficiais de tibia também deve ter uma função parecida pois o la também se divide as xp
vou testar essa função
mas como eu coloco a tag?
a tag do script original esta death
vou testar de todos os modos possíveis aqui e volto

Link para o post
Compartilhar em outros sites

@dominus deixei o script assim
 

Spoiler

function onDeath(cid, target)
local cidName = "abra"
    if isPlayer(target) then
        if getDamageMapPercent(target, cid) <= 14  then
        doPlayerSendTextMessage(target, MESSAGE_INFO_DESCR, 'voce não bateu o sufuciente')
        end
        if getDamageMapPercent(target, cid) >= 15 and getDamageMapPercent(target, cid) <= 29 then
            doPlayerAddItem(target, 2160, 1)
            end
        if getDamageMapPercent(target, cid) >= 30 and getDamageMapPercent(target, cid) <= 49 then
            doPlayerAddItem(target, 2160, 2)
            end
            
        if getDamageMapPercent(target, cid) >= 50 and getDamageMapPercent(target, cid) <= 100 then
            doPlayerAddItem(target, 2160, 3)
        end         
    end
return true
end

também inverti ele onde ta target testei como cid e vice versa nada aconteceu e continuou sem erro na distro

Link para o post
Compartilhar em outros sites

Já que não tem outra forma, tem que criar essa função para averiguar a porcentagem de dano de cada um.

 

Eu, estudo a noite - daqui a pouco vou pro colégio.

Provavelmente sábado eu terei feito essa função e te passo.

Link para o post
Compartilhar em outros sites
1 hora atrás, dominus disse:

Já que não tem outra forma, tem que criar essa função para averiguar a porcentagem de dano de cada um.

 

Eu, estudo a noite - daqui a pouco vou pro colégio.

Provavelmente sábado eu terei feito essa função e te passo.

ok vou estar aqui te agradeço mt, vou continuar tentando

Link para o post
Compartilhar em outros sites
Em 04/02/2016 17:42:00, wevertonvrb disse:

ok vou estar aqui te agradeço mt, vou continuar tentando


   query para ser adicionada no creature.xml 
   <event type="statschange" name="stats" script="stats.lua"/> 
   <event type="death" name="deathMonster" script="kill.lua"/> 

 

   query para ser adicionada no monstro: 
   <script> 
      <event name = "stats"/> 
      <event name = "deathMonster"/> 
   </script> 
 

-- Em creaturescripts>scripts>kill.lua, adicione: 

 

--[[ 
   autor = Marcryzius 
   data = sexta-feira, 05 de fevereiro de 2016 
   ]] 
function onDeath(cid, corpse, deathList) 
for _,player in pairs(deathList) do 
   if(isPlayer(player) and isPlayerOn(player))then 
      if(getDamageInMonster(cid,player) > 50)then
      -- aqui você adiciona o que quiser
      end 
   end 
end 
return true 
end 

 

-- Em creaturescripts>scripts>stats.lua, adicione: 

 

--[[ 
   autor = Marcryzius 
   data = sexta-feira, 05 de fevereiro de 2016 
   ]] 
local M = {} 
function getDamageInMonster(monster,cid) 
local monster,cid,m_life,p_dano = tonumber(monster),tonumber(cid),0,0 
if not(monster or cid)then return 0,error('function getDamageInMonster(): monster or cid, not number') end 
if not(isCreature(monster))then return 0,error('function getDamageInMonster(): variavel monster nao e monstro.') end 
   for k,v in pairs(M[monster]) do 
      if(k == cid)then p_dano = v end 
      m_life = m_life + v 
   end 
   return math.floor(p_dano/(m_life/100)) 
end 

function onStatsChange(cid, attacker, tipo, combat, value) 
local atac = attacker 
if not(M[cid])then M[cid] = {} end 
if not(tipo == 1)then return true end 

   if(isPlayer(attacker))then 
      if not(M[cid][attacker])then M[cid][attacker] = 0   end 
      M[cid][attacker] = M[cid][attacker] + value 
   elseif(isMonster(attacker))then -- caso seja um monstro o atacante 
   local get = getCreatureMaster(attacker) -- averigua se n�o � um summon que est� atacando 
      atac = get 
      if(tonumber(get) and isPlayer(get))then -- caso o summon seja de um player, adiciona o dano como se fosse o player 
         if not(M[cid][get])then M[cid][get] = 0   end 
         M[cid][get] = M[cid][get] + value 
      end 
   end 
   return true 
end 
 

Link para o post
Compartilhar em outros sites
Em 06/02/2016 09:20:45, dominus disse:


   query para ser adicionada no creature.xml 
   <event type="statschange" name="stats" script="stats.lua"/> 
   <event type="death" name="deathMonster" script="kill.lua"/> 

 

   query para ser adicionada no monstro: 
   <script> 
      <event name = "stats"/> 
      <event name = "deathMonster"/> 
   </script> 
 

-- Em creaturescripts>scripts>kill.lua, adicione: 

 

--[[ 
   autor = Marcryzius 
   data = sexta-feira, 05 de fevereiro de 2016 
   ]] 
function onDeath(cid, corpse, deathList) 
for _,player in pairs(deathList) do 
   if(isPlayer(player) and isPlayerOn(player))then 
      if(getDamageInMonster(cid,player) > 50)then
      -- aqui você adiciona o que quiser
      end 
   end 
end 
return true 
end 

 

-- Em creaturescripts>scripts>stats.lua, adicione: 

 

--[[ 
   autor = Marcryzius 
   data = sexta-feira, 05 de fevereiro de 2016 
   ]] 
local M = {} 
function getDamageInMonster(monster,cid) 
local monster,cid,m_life,p_dano = tonumber(monster),tonumber(cid),0,0 
if not(monster or cid)then return 0,error('function getDamageInMonster(): monster or cid, not number') end 
if not(isCreature(monster))then return 0,error('function getDamageInMonster(): variavel monster nao e monstro.') end 
   for k,v in pairs(M[monster]) do 
      if(k == cid)then p_dano = v end 
      m_life = m_life + v 
   end 
   return math.floor(p_dano/(m_life/100)) 
end 

function onStatsChange(cid, attacker, tipo, combat, value) 
local atac = attacker 
if not(M[cid])then M[cid] = {} end 
if not(tipo == 1)then return true end 

   if(isPlayer(attacker))then 
      if not(M[cid][attacker])then M[cid][attacker] = 0   end 
      M[cid][attacker] = M[cid][attacker] + value 
   elseif(isMonster(attacker))then -- caso seja um monstro o atacante 
   local get = getCreatureMaster(attacker) -- averigua se n�o � um summon que est� atacando 
      atac = get 
      if(tonumber(get) and isPlayer(get))then -- caso o summon seja de um player, adiciona o dano como se fosse o player 
         if not(M[cid][get])then M[cid][get] = 0   end 
         M[cid][get] = M[cid][get] + value 
      end 
   end 
   return true 
end 
 

deu este erro
 

Spoiler

[07/02/2016 10:48:51] [Error - CreatureScript Interface]
[07/02/2016 10:48:51] data/creaturescripts/scripts/kill.lua:onDeath
[07/02/2016 10:48:51] Description:
[07/02/2016 10:48:51] data/creaturescripts/scripts/kill.lua:7: attempt to call global 'isPlayerOn' (a nil value)
[07/02/2016 10:48:51] stack traceback:
[07/02/2016 10:48:51]     data/creaturescripts/scripts/kill.lua:7: in function <data/creaturescripts/scripts/kill.lua:5>

em seguida retirei essa parte do script kill.lua
and isPlayerOn(player)
e gerou este outro erro agora no stats
 

Spoiler

[07/02/2016 10:57:09] [Error - CreatureScript Interface]
[07/02/2016 10:57:09] data/creaturescripts/scripts/kill.lua:onDeath
[07/02/2016 10:57:09] Description:
[07/02/2016 10:57:09] data/creaturescripts/scripts/stats.lua:9: function getDamageInMonster(): variavel monster nao e monstro.
[07/02/2016 10:57:09] stack traceback:
[07/02/2016 10:57:09]     [C]: in function 'error'
[07/02/2016 10:57:09]     data/creaturescripts/scripts/stats.lua:9: in function 'getDamageInMonster'
[07/02/2016 10:57:09]     data/creaturescripts/scripts/kill.lua:8: in function <data/creaturescripts/scripts/kill.lua:5>

   outra coisa é que o pokémon quando é morto não aparece o corpo é como se tivesse dado um /r nele
 

Editado por wevertonvrb (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
Em 07/02/2016 10:01:32, wevertonvrb disse:

deu este erro
 

  Mostrar conteúdo oculto

[07/02/2016 10:48:51] [Error - CreatureScript Interface]
[07/02/2016 10:48:51] data/creaturescripts/scripts/kill.lua:onDeath
[07/02/2016 10:48:51] Description:
[07/02/2016 10:48:51] data/creaturescripts/scripts/kill.lua:7: attempt to call global 'isPlayerOn' (a nil value)
[07/02/2016 10:48:51] stack traceback:
[07/02/2016 10:48:51]     data/creaturescripts/scripts/kill.lua:7: in function <data/creaturescripts/scripts/kill.lua:5>

em seguida retirei essa parte do script kill.lua
and isPlayerOn(player)
e gerou este outro erro agora no stats
 

  Mostrar conteúdo oculto

[07/02/2016 10:57:09] [Error - CreatureScript Interface]
[07/02/2016 10:57:09] data/creaturescripts/scripts/kill.lua:onDeath
[07/02/2016 10:57:09] Description:
[07/02/2016 10:57:09] data/creaturescripts/scripts/stats.lua:9: function getDamageInMonster(): variavel monster nao e monstro.
[07/02/2016 10:57:09] stack traceback:
[07/02/2016 10:57:09]     [C]: in function 'error'
[07/02/2016 10:57:09]     data/creaturescripts/scripts/stats.lua:9: in function 'getDamageInMonster'
[07/02/2016 10:57:09]     data/creaturescripts/scripts/kill.lua:8: in function <data/creaturescripts/scripts/kill.lua:5>

   outra coisa é que o pokémon quando é morto não aparece o corpo é como se tivesse dado um /r nele
 

 

 

 

 

Substitui o isPlayerOn () por getCreatureName ()

 

Nesse outro caso, tu varia s ter que procurar se não existe outros scripts sendo executados por esse pokemon. 

Testa o sistema em outro monstro neutro apenas por questão de averiguação. 

Link para o post
Compartilhar em outros sites
Em 10/02/2016 09:44:51, dominus disse:

 

Substitui o isPlayerOn () por getCreatureName ()

 

Nesse outro caso, tu varia s ter que procurar se não existe outros scripts sendo executados por esse pokemon. 

Testa o sistema em outro monstro neutro apenas por questão de averiguação. 

deixei o script assim
 

Spoiler

--[[
   autor = Marcryzius
   data = sexta-feira, 05 de fevereiro de 2016
   ]]
function onDeath(cid, corpse, deathList)
for _,player in pairs(deathList) do
   if(isPlayer(player) and getCreatureName(player))then
      if(getDamageInMonster(cid,player) > 50)then
      doPlayerAddItem(player, 2160, 3)
      end
   end
end
return true
end 

Testei com outro pokémon que tinha acabado de adicionar que n tem como estar ligado a nenhum outro sistema
Não gerou erro porem continua do mesmo jeito, o jogador não ganha nada, e o pokémon quando é morto some como se tivesse dado um /r nele

um leki me disse que quando se adiciona um evento no xml do monstro o monstro vira o (cid) e o player o (target)
será que isso tem algo a ver? sera q o sistema ta entendendo que o pokemon é que tem que bater no player?

Link para o post
Compartilhar em outros sites
18 horas atrás, wevertonvrb disse:

deixei o script assim
 

  Mostrar conteúdo oculto

--[[
   autor = Marcryzius
   data = sexta-feira, 05 de fevereiro de 2016
   ]]
function onDeath(cid, corpse, deathList)
for _,player in pairs(deathList) do
   if(isPlayer(player) and getCreatureName(player))then
      if(getDamageInMonster(cid,player) > 50)then
      doPlayerAddItem(player, 2160, 3)
      end
   end
end
return true
end 

Testei com outro pokémon que tinha acabado de adicionar que n tem como estar ligado a nenhum outro sistema
Não gerou erro porem continua do mesmo jeito, o jogador não ganha nada, e o pokémon quando é morto some como se tivesse dado um /r nele

um leki me disse que quando se adiciona um evento no xml do monstro o monstro vira o (cid) e o player o (target)
será que isso tem algo a ver? sera q o sistema ta entendendo que o pokemon é que tem que bater no player?

Sim eu sei disso.

 

Faz o seguinte, testa o sistema em um monstro comum sem ser pokemom.

Link para o post
Compartilhar em outros sites
1 hora atrás, wevertonvrb disse:

já fiz isso também e acontece a mesma coisa

 

Mostr o teu creaturescript.xml e login.lua

Creio que tenha algum script impedindo a execução do mesmo.

Link para o post
Compartilhar em outros sites
10 minutos atrás, dominus disse:

 

Mostr o teu creaturescript.xml e login.lua

Creio que tenha algum script impedindo a execução do mesmo.

creaturescript
 

Spoiler

<?xml version="1.0" encoding="UTF-8"?>

<creaturescripts>


    <event type="joinchannel" name="ShowPokedex" event="script" value="newpokedex.lua"/>
    <event type="leavechannel" name="ClosePokedex" event="script" value="newpokedex.lua"/>
    <event type="kill" name="pokemons" event="script" value="bosses.lua"/>
     <event type="kill" name="task_count" script="task.lua"/>
    <event type="kill" name="dropStone" script="dropStone.lua"/>
    <event type="login" name="PlayerLogin" event="script" value="login.lua"/>
     <event type="login" name="AntiMc" event="script" value="antimc.lua"/>
    <event type="login" name="Velocidade" event="script" value="velocidade.lua"/>
        <event type="death" name="ArticunoTeleport" script="tparticuno.lua"/>

    <event type="receivemail" name="Mail" event="script" value="mail.lua"/>

    <event type="reportbug" name="SaveReportBug" script="reportbug.lua"/>
    
    <event type="think" name="Idle" event="script" value="idle.lua"/>
    <!--event type="login" name="FimPremium" event="script" value="fimvip.lua"/-->
    <event type="statschange" name="stats" script="stats.lua"/>
    <event type="death" name="deathMonster" script="kill.lua"/>


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

    <event type="spawn" name="Spawn" event="script" value="spawn.lua"/>

    <event type="think" name="t" event="script" value="wildpoke.lua"/>

    <event type="think" name="PokemonIdle" event="script" value="poketele.lua"/>

    <event type="statschange" name="GeneralConfiguration" event="script" value="exp2.0.lua"/>
    <event type="advance" name="EffectOnAdvance" event="script" value="levelup.lua"/>


    <event type="direction" name="DirectionSystem" event="script" value="wildpoke.lua"/>
    <event type="attack" name="AttackSystem" event="script" value="wildpoke.lua"/>
    <event type="cast" name="CastSystem" event="script" value="wildpoke.lua"/>
    <event type="target" name="WildAttack" event="script" value="playerattack.lua"/>


    <event type="look" name="LookSystem" event="script" value="look.lua"/>
    
    <event type="login" name="Protect" event="script" value="protect.lua"/>     
    <event type="statschange" name="Protection" event="script" value="protect.lua"/>  


    <event type="death" name="SummonDeath" event="script" value="goback.lua"/>
    <event type="logout" name="PlayerLogout" event="script" value="goback.lua"/>


<!-- TV SYSTEM -->
    <event type="joinchannel" name="WatchTv" event="script" value="tvsys.lua"/>
    <event type="leavechannel" name="StopWatchingTv" event="script" value="tvsys.lua"/>

    <event type="walk" name="WalkTv" event="script" value="tvsys.lua"/>

    <event type="textedit" name="RecordTv" event="script" value="tvsys.lua"/>


    <event type="traderequest" name="T2" event="script" value="trade system.lua"/>

    <event type="tradeaccept" name="T1" event="script" value="trade system.lua"/>

</creaturescripts>

 

login

Spoiler

local config = {
loginMessage = getConfigValue('loginMessage'),
useFragHandler = getBooleanFromString(getConfigValue('useFragHandler'))
}
 
function onLogin(cid)
 
    if getPlayerLevel(cid) >= 1 and getPlayerLevel(cid) <= 10 then   --alterado v1.8
       doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, 0)
    else     
       doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, (getPlayerLevel(cid) >= 200 and 100 or math.floor(getPlayerLevel(cid)/2)) )
end
doCreatureSetDropLoot(cid, false)
 
local accountManager = getPlayerAccountManager(cid)
 
if(accountManager == MANAGER_NONE) then
local lastLogin, str = getPlayerLastLoginSaved(cid), config.loginMessage
if(lastLogin > 0) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)
str = "Sua ultima visita foi em " .. os.date("%a %b %d %X %Y", lastLogin) .. "."
else
str = str
end
 
doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)
 
elseif(accountManager == MANAGER_NAMELOCK) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, it appears that your character has been namelocked, what would you like as your new name?")
elseif(accountManager == MANAGER_ACCOUNT) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, type 'account' to manage your account and if you want to start over then type 'cancel'.")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, type 'account' to create an account or type 'recover' to recover an account.")
end
 
if getCreatureName(cid) == "Account Manager" then
local outfit = {}
if accountManagerRandomPokemonOutfit then
outfit = {lookType = getPokemonXMLOutfit(oldpokedex[math.random(151)][1])}
else
outfit = accountManagerOutfit
end
 
doSetCreatureOutfit(cid, outfit, -1)
return true
end
 
if(not isPlayerGhost(cid)) then
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT)
end
 
local outfit = {}
 
if getPlayerVocation(cid) == 0 then
doPlayerSetMaxCapacity(cid, 0)
doPlayerSetVocation(cid, 1)
setCreatureMaxMana(cid, 6)
doPlayerAddSoul(cid, -getPlayerSoul(cid))
setPlayerStorageValue(cid, 19898, 0)
if getCreatureOutfit(cid).lookType == 128 then
outfit = {lookType = 510, lookHead = math.random(0, 132), lookBody = math.random(0, 132), lookLegs = math.random(0, 132), lookFeet = math.random(0, 132)}
elseif getCreatureOutfit(cid).lookType == 136 then
outfit = {lookType = 511, lookHead = math.random(0, 132), lookBody = math.random(0, 132), lookLegs = math.random(0, 132), lookFeet = math.random(0, 132)}
end
doCreatureChangeOutfit(cid, outfit)
end
 
    registerCreatureEvent(cid, "dropStone")
    registerCreatureEvent(cid, "ShowPokedex") --alterado v1.6
    registerCreatureEvent(cid, "ClosePokedex") --alterado v1.6
    registerCreatureEvent(cid, "WatchTv")
    registerCreatureEvent(cid, "StopWatchingTv")
    registerCreatureEvent(cid, "WalkTv")
    registerCreatureEvent(cid, "RecordTv")
    registerCreatureEvent(cid, "PlayerLogout")
    registerCreatureEvent(cid, "WildAttack")
    registerCreatureEvent(cid, "Idle")
    registerCreatureEvent(cid, "PokemonIdle")
    registerCreatureEvent(cid, "EffectOnAdvance")
    registerCreatureEvent(cid, "GeneralConfiguration")
    registerCreatureEvent(cid, "ReportBug")
    registerCreatureEvent(cid, "LookSystem")
    registerCreatureEvent(cid, "T1")
    registerCreatureEvent(cid, "T2")
    registerCreatureEvent(cid, "task_count")
    registerCreatureEvent(cid, "pokemons")
    registerCreatureEvent(cid, "Velocidade")
    registerCreatureEvent(cid, "GuildMotd")
    registerCreatureEvent(cid, "deathPlayer")
    
 
if getPlayerStorageValue(cid, 99284) == 1 then
setPlayerStorageValue(cid, 99284, -1)
end
 
    if getPlayerStorageValue(cid, 6598754) >= 1 or getPlayerStorageValue(cid, 6598755) >= 1 then
       setPlayerStorageValue(cid, 6598754, -1)
       setPlayerStorageValue(cid, 6598755, -1)
       doRemoveCondition(cid, CONDITION_OUTFIT)             --alterado v1.9 \/
       doTeleportThing(cid, posBackPVP, false)
       doCreatureAddHealth(cid, getCreatureMaxHealth(cid))
    end
    
doChangeSpeed(cid, -(getCreatureSpeed(cid)))
 
--///////////////////////////////////////////////////////////////////////////--
    local storages = {17000, 63215, 17001, 13008, 5700}
    for s = 1, #storages do
        if not tonumber(getPlayerStorageValue(cid, storages)) then
           if s == 3 then
              setPlayerStorageValue(cid, storages, 1)
           elseif s == 4 then
              setPlayerStorageValue(cid, storages, -1)
           else   
              if isBeingUsed(getPlayerSlotItem(cid, 8).itemid) then
                 setPlayerStorageValue(cid, storages, 1)                 
              else
                 setPlayerStorageValue(cid, storages, -1)
              end
           end
           doPlayerSendTextMessage(cid, 27, "Sorry, but a problem occurred on the server, but now it's alright")
        end
    end
    --/////////////////////////////////////////////////////////////////////////--
if getPlayerStorageValue(cid, 17000) >= 1 then -- fly
        
local item = getPlayerSlotItem(cid, 8)
local poke = getItemAttribute(item.uid, "poke")
doChangeSpeed(cid, getPlayerStorageValue(cid, 54844))
doRemoveCondition(cid, CONDITION_OUTFIT)
doSetCreatureOutfit(cid, {lookType = flys[poke][1] + 351}, -1)
 
local apos = getFlyingMarkedPos(cid)
    apos.stackpos = 0
 
if getTileThingByPos(apos).itemid <= 2 then
doCombatAreaHealth(cid, FIREDAMAGE, getFlyingMarkedPos(cid), 0, 0, 0, CONST_ME_NONE)
doCreateItem(460, 1, getFlyingMarkedPos(cid))
end
 
doTeleportThing(cid, apos, false)
if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) >= 1 then   
       sendAuraEffect(cid, auraSyst[getItemAttribute(item.uid, "aura")])                     --alterado v1.8
    end  
 
    local posicao = getTownTemplePosition(getPlayerTown(cid))
    markFlyingPos(cid, posicao)
    
elseif getPlayerStorageValue(cid, 63215) >= 1 then -- surf
 
local item = getPlayerSlotItem(cid, 8)
local poke = getItemAttribute(item.uid, "poke")
doSetCreatureOutfit(cid, {lookType = surfs[poke].lookType + 351}, -1) --alterado v1.6
doChangeSpeed(cid, getPlayerStorageValue(cid, 54844))
if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) >= 1 then   
           sendAuraEffect(cid, auraSyst[getItemAttribute(item.uid, "aura")])                     --alterado v1.8
        end
 
elseif getPlayerStorageValue(cid, 17001) >= 1 then -- ride
        
local item = getPlayerSlotItem(cid, 8)
local poke = getItemAttribute(item.uid, "poke")
 
 
if rides[poke] then
  doChangeSpeed(cid, getPlayerStorageValue(cid, 54844))
  doRemoveCondition(cid, CONDITION_OUTFIT)
  doSetCreatureOutfit(cid, {lookType = rides[poke][1] + 351}, -1)
  if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) >= 1 then   
              sendAuraEffect(cid, auraSyst[getItemAttribute(item.uid, "aura")])                     --alterado v1.8
           end
else
  setPlayerStorageValue(cid, 17001, -1)
  doRegainSpeed(cid)   
end
 
   local posicao2 = getTownTemplePosition(getPlayerTown(cid))
        markFlyingPos(cid, posicao2)
        
elseif getPlayerStorageValue(cid, 13008) >= 1 then -- dive
       if not isInArray({5405, 5406, 5407, 5408, 5409, 5410}, getTileInfo(getThingPos(cid)).itemid) then
setPlayerStorageValue(cid, 13008, 0)
doRegainSpeed(cid)              
doRemoveCondition(cid, CONDITION_OUTFIT)
return true
end   
          
       if getPlayerSex(cid) == 1 then
          doSetCreatureOutfit(cid, {lookType = 1034, lookHead = getCreatureOutfit(cid).lookHead, lookBody = getCreatureOutfit(cid).lookBody, lookLegs = getCreatureOutfit(cid).lookLegs, lookFeet = getCreatureOutfit(cid).lookFeet}, -1)
       else
          doSetCreatureOutfit(cid, {lookType = 1035, lookHead = getCreatureOutfit(cid).lookHead, lookBody = getCreatureOutfit(cid).lookBody, lookLegs = getCreatureOutfit(cid).lookLegs, lookFeet = getCreatureOutfit(cid).lookFeet}, -1)
       end
       doChangeSpeed(cid, 900)
 
     elseif getPlayerStorageValue(cid, 5700) > 0 then   --bike
        doChangeSpeed(cid, -getCreatureSpeed(cid))
        doChangeSpeed(cid, getPlayerStorageValue(cid, 5700))  --alterado v1.8
        if getPlayerSex(cid) == 1 then
           doSetCreatureOutfit(cid, {lookType = 1394}, -1)
        else
           doSetCreatureOutfit(cid, {lookType = 1393}, -1)
        end
     
     elseif getPlayerStorageValue(cid, 75846) >= 1 then     --alterado v1.9 \/
        doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)  
        setPlayerStorageValue(cid, 75846, -1)
        sendMsgToPlayer(cid, 20, "You have been moved to your town!")
else
doRegainSpeed(cid)  
end
 
if getPlayerStorageValue(cid, 22545) >= 1 then
  setPlayerStorageValue(cid, 22545, -1)              
  doTeleportThing(cid, getClosestFreeTile(cid, posBackGolden), false)
       setPlayerRecordWaves(cid)     
    end
 
    
if useKpdoDlls then
doUpdateMoves(cid)
doUpdatePokemonsBar(cid)
end
 
              if getCreatureSpeed(cid) ~= getCreatureBaseSpeed(cid) then
                 local delta = ( (getCreatureBaseSpeed(cid)) - (getCreatureSpeed(cid)) )
                 doChangeSpeed(cid, delta)
end
 
return true
end

xml do monstro testado

Spoiler

<?xml version="1.0" encoding="UTF-8"?>
<monster name="Shiny Feebas" nameDescription="a Shiny Feebas" race="water" experience="60" speed="207" manacost="0">
    <health now="10" max="10"/>
    <look type="164" head="1" body="5" legs="95" feet="113" corpse="14337"/>
    <targetchange interval="2000" chance="0"/>
    <strategy attack="100" defense="0"/>
    <flags>
        <flag summonable="1"/>
        <flag attackable="1"/>
        <flag hostile="1"/>
        <flag illusionable="1"/>
        <flag convinceable="1"/>
        <flag pushable="1"/>
        <flag canpushitems="0"/>
        <flag canpushcreatures="0"/>
        <flag targetdistance="1"/>
        <flag staticattack="97"/>
        <flag runonhealth="0"/>
       
    </flags>
    <attacks>
        <attack name="melee" interval="1000" chance="100" range="1" min="-500" max="-1000"/>
        <attack name="Splash" interval="2429" chance="90" range="6"/>
    </attacks>
    <defenses armor="0" defense="0"/>
    <voices interval="5000" chance="10">
        <voice sentence="FEEBAS!"/>
    </voices>
    <loot>
        <item id="12334" chance="5000" count="1" countmax="1"/>
                <item id="12338" chance="10" count="1"/> --bag box --bag box
    </loot>
    <script>
        <event name = "stats"/>
        <event name = "deathMonster"/>
        <event name="Spawn"/>
    </script>
</monster>

 

 

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

É difícil te ajudar, pois não sei qual seria o script que está gerando esse problema, pode até ser mesmo problema do sistema.

Testa de outras maneiras, com outros monstros ou até mesmo pvp.

No monstro, testa sem esse evento:

Citar

<event name="Spawn"/>

 

Link para o post
Compartilhar em outros sites
16 minutos atrás, dominus disse:

É difícil te ajudar, pois não sei qual seria o script que está gerando esse problema, pode até ser mesmo problema do sistema.

Testa de outras maneiras, com outros monstros ou até mesmo pvp.

No monstro, testa sem esse evento:

 

ja testei sem.
esse event é oque faz ele virar um pokemon se eu retirar ele vira um monstro normal

voce testou em outra base?
 

22 minutos atrás, dominus disse:

É difícil te ajudar, pois não sei qual seria o script que está gerando esse problema, pode até ser mesmo problema do sistema.

Testa de outras maneiras, com outros monstros ou até mesmo pvp.

No monstro, testa sem esse evento:

 

vou baixar um serve de tíbia e testar nele

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

Eu só uso tfs 8.54 0.3.6 crying damson

1 hora atrás, wevertonvrb disse:

ja testei sem.
esse event é oque faz ele virar um pokemon se eu retirar ele vira um monstro normal

voce testou em outra base?
 

vou baixar um serve de tíbia e testar nele

 

 

 

 

Qualquer coisa me comunica. 

Link para o post
Compartilhar em outros sites
8 minutos atrás, dominus disse:

Eu só uso tfs 8.54 0.3.6 crying damson

 

Qualquer coisa me comunica. 

o meu tambem é 8.54 mas isso de 0.3.6 eu n sei dizer

1 hora atrás, dominus disse:

Eu só uso tfs 8.54 0.3.6 crying damson

 

Qualquer coisa me comunica. 

testei em serve de tibia e também não funcionou unica diferença é que  no serve de tibia o monstro deixa o corpo
no pokémon o corpo esta sumindo
você testou no seu?
no seu deu certo??

Link para o post
Compartilhar em outros sites
2 horas atrás, wevertonvrb disse:

o meu tambem é 8.54 mas isso de 0.3.6 eu n sei dizer

testei em serve de tibia e também não funcionou unica diferença é que  no serve de tibia o monstro deixa o corpo
no pokémon o corpo esta sumindo
você testou no seu?
no seu deu certo??

No meu dá certo.

Funciona corretamente.

Qual servidor você baixou?

Link para o post
Compartilhar em outros sites
2 horas atrás, dominus disse:

No meu dá certo.

Funciona corretamente.

Qual servidor você baixou?


pokemon cyan by senhor
http://www.tibiaking.com/forum/topic/38174-854-pokecyan-editado-by-senhor-atualizado-20/?page=1

tou mexendo nele a 2 anos ja

2 horas atrás, dominus disse:

No meu dá certo.

Funciona corretamente.

Qual servidor você baixou?

criei outro monstro como se foce no tibia registrei apenas no monster.xml e criei sua xml, desta forma gera este erro

Spoiler

[12/02/2016 16:41:05] [Error - CreatureScript Interface]
[12/02/2016 16:41:05] data/creaturescripts/scripts/kill.lua:onDeath
[12/02/2016 16:41:05] Description:
[12/02/2016 16:41:05] data/creaturescripts/scripts/stats.lua:9: function getDamageInMonster(): variavel monster nao e monstro.
[12/02/2016 16:41:05] stack traceback:
[12/02/2016 16:41:05]     [C]: in function 'error'
[12/02/2016 16:41:05]     data/creaturescripts/scripts/stats.lua:9: in function 'getDamageInMonster'
[12/02/2016 16:41:05]     data/creaturescripts/scripts/kill.lua:8: in function <data/creaturescripts/scripts/kill.lua:5>


outra coisa no tibia deu certo sim a recompensa estava aparecendo no slot de munição e eu n vi
o pokemon n tem slot de munição sera q pode ser este o erro??
o novo monstro que criei acontece a mesma coisa ele some

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

Esse error se deu por causa da função isCreature(monster) que está retornando um valor falso, ou seja, não é um monstro que está na variável "monster" da função. 

 

No caso dele estar sumindo quando morto, deva ser devido o programador ter feito a função "ondeath()" igual à "onpreparedeath ()" essa em questão trata sobre como se dá a morte da criatura.

 

Como você mesmo testou, ela funciona em outros servidores menos editados.

Infelizmente é um impedimento te ajudar nessa questão. 

3 horas atrás, wevertonvrb disse:


pokemon cyan by senhor
http://www.tibiaking.com/forum/topic/38174-854-pokecyan-editado-by-senhor-atualizado-20/?page=1

tou mexendo nele a 2 anos ja

criei outro monstro como se foce no tibia registrei apenas no monster.xml e criei sua xml, desta forma gera este erro

  Ocultar conteúdo

[12/02/2016 16:41:05] [Error - CreatureScript Interface]
[12/02/2016 16:41:05] data/creaturescripts/scripts/kill.lua:onDeath
[12/02/2016 16:41:05] Description:
[12/02/2016 16:41:05] data/creaturescripts/scripts/stats.lua:9: function getDamageInMonster(): variavel monster nao e monstro.
[12/02/2016 16:41:05] stack traceback:
[12/02/2016 16:41:05]     [C]: in function 'error'
[12/02/2016 16:41:05]     data/creaturescripts/scripts/stats.lua:9: in function 'getDamageInMonster'
[12/02/2016 16:41:05]     data/creaturescripts/scripts/kill.lua:8: in function <data/creaturescripts/scripts/kill.lua:5>


outra coisa no tibia deu certo sim a recompensa estava aparecendo no slot de munição e eu n vi
o pokemon n tem slot de munição sera q pode ser este o erro??
o novo monstro que criei acontece a mesma coisa ele some

 

 

 

Eu não saberia dizer se esse error acontece exatamente devido a isso.

A base para o que tu queres, já foi feito, agora é só ir adaptando da forma que pra ti sejas mais satisfatório. 

Editado por dominus (veja o histórico de edições)
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 Imperius
      O propósito é criar uma nova função em creaturescripts que será acionada toda vez que um novo report (CTRL + R) for aberto.
       
      Eu implementei para enviar uma notificação no grupo do Telegram, contendo os dados do report.
       
      Isso garantirá que os GMs tenham acesso aos reports dos jogadores mesmo quando não estiverem logados, e também evitará que algum report seja perdido caso o jogador saia do servidor.
      A parte do Telegram é apenas um exemplo. Você pode ajustar o script para executar outras ações desejadas.
       
      creatureevent.cpp:
      Dentro deste arquivo, localize a função:
       
      uint32_t CreatureEvent::executeChannelLeave(Player* player, uint16_t channelId, UsersMap usersMap)  
      abaixo dela, adicione:
       
      uint32_t CreatureEvent::executeOpenRuleViolation(Player* player, std::string message) { if (!m_interface->reserveEnv()) { std::clog << "[Error - CreatureEvent::executeOpenRuleViolation] Call stack overflow." << std::endl; return 0; } ScriptEnviroment* env = m_interface->getEnv(); env->setScriptId(m_scriptId, m_interface); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); lua_pushstring(L, message.c_str()); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; }  
      Após, procure por:
       
      std::string CreatureEvent::getScriptEventName() const  
      abaixo de:
       
      case CREATURE_EVENT_CHANNEL_LEAVE: return "onLeaveChannel";  
      adicione:
       
      case CREATURE_EVENT_OPEN_RULE_VIOLATION: return "onOpenRuleViolation";  
      Agora, procure por:
       
      std::string CreatureEvent::getScriptEventParams() const  
      abaixo de:
       
      case CREATURE_EVENT_CHANNEL_LEAVE: return "cid, channel, users";  
      adicione:
       
      case CREATURE_EVENT_OPEN_RULE_VIOLATION: return "cid, message";  
      Procure por:
       
      bool CreatureEvent::configureEvent(xmlNodePtr p)  
      abaixo de:
       
      else if(tmpStr == "leavechannel") m_type = CREATURE_EVENT_CHANNEL_LEAVE;  
      adicione:
       
      else if(tmpStr == "openruleviolation") m_type = CREATURE_EVENT_OPEN_RULE_VIOLATION;  
       
      creatureevent.h:
      Dentro deste arquivo, localize:
       
      enum CreatureEventType_t  
      adicione "CREATURE_EVENT_OPEN_RULE_VIOLATION" como o último item de enum CreatureEventType_t
       
      Exemplo:
       
      enum CreatureEventType_t { // ... CREATURE_EVENT_OPEN_RULE_VIOLATION };  
      Agora, procure por:
       
      uint32_t executeChannelLeave(Player* player, uint16_t channelId, UsersMap usersMap);  
      abaixo dela, adicione:
       
      uint32_t executeOpenRuleViolation(Player* player, std::string message);  
      game.cpp:
      Dentro deste arquivo, localize:
       
      bool Game::playerReportRuleViolation(Player* player, const std::string& text)  
      e substitua por:
       
      bool Game::playerReportRuleViolation(Player* player, const std::string& text) { //Do not allow reports on multiclones worlds since reports are name-based if(g_config.getNumber(ConfigManager::ALLOW_CLONES)) { player->sendTextMessage(MSG_INFO_DESCR, "Rule violation reports are disabled."); return false; } cancelRuleViolation(player); boost::shared_ptr<RuleViolation> rvr(new RuleViolation(player, text, time(NULL))); ruleViolations[player->getID()] = rvr; ChatChannel* channel = g_chat.getChannelById(CHANNEL_RVR); if(!channel) return false; for(UsersMap::const_iterator it = channel->getUsers().begin(); it != channel->getUsers().end(); ++it) it->second->sendToChannel(player, SPEAK_RVR_CHANNEL, text, CHANNEL_RVR, rvr->time); CreatureEventList joinEvents = player->getCreatureEvents(CREATURE_EVENT_OPEN_RULE_VIOLATION); for(CreatureEventList::iterator it = joinEvents.begin(); it != joinEvents.end(); ++it) (*it)->executeOpenRuleViolation(player, text); return true; }  
      Agora é só compilar a source.
       
      depois em "data > creaturescripts > creaturescripts.xml", adicione:
       
      <event type="login" name="loginNotifyRuleViolation" script="notifyRuleViolation.lua"/> <event type="openruleviolation" name="openNotifyRuleViolation" script="notifyRuleViolation.lua"/>  
      em "data > creaturescripts > scripts", crie um arquivo notifyRuleViolation.lua e adicione:
       
      function onOpenRuleViolation(cid, message) local config = { token = "", -- Token do seu BOT no Telegram chatId = "" -- ID do chat do Telegram que será enviado a notificação. } local message = "Player: "..getCreatureName(cid).."\n\nReport:\n"..message.."" message = string.gsub(message, "\n", "%%0A") local url = "https://api.telegram.org/bot"..config.token.."/sendMessage" local data = "chat_id="..config.chatId.."&text="..message.."" local curl = io.popen('curl -d "'..data..'" "'..url..'"'):read("*a") return true end function onLogin(cid) registerCreatureEvent(cid, "openNotifyRuleViolation") return true end  
       
      Demonstração:
      1. Jogador abre um novo report (CTRL + R)

      2. notifyRuleViolation.lua, definido em creaturescripts.xml, é acionado para enviar uma notificação ao grupo do Telegram.
       

       
    • Por Ghaz
      Fala pessoal tudo bem?
       
      Estou com dificuldades em um script e preciso da ajuda dos magos do LUA rs.
       
      Tenho um script que quando o player morre (onDeath), ele faz algumas coisas e depois ele chama uma função que deveria retornar uma table (array) para eu fazer o for com o ipairs certinho. Segue abaixo o código:
       
       
      Segue abaixo a função getPlayersInArea:
       
       
      Acontece que no código de cima (do primeiro spoiler) eu dou um print no retorno da função getPlayersInArea, porém ela não tá me retornando a table, tá me retornando só: 2
       
       
       
      Alguém consegue me ajudar em, como raios eu faço a função retornar a lista de players ao invés da quantidade? Acredito que ta retornando o count da table, e não os itens do array.
       
       
      Agradeço desde já, valeu tchurma!
    • Por LeoTK
      Salve galera neste tópico irei postar algumas prints do mapa do servidor para quem queira acompanhar e quem sabe até utilizar de inspiração para mapear o seu NTO.
       
      #Att 11/08/2022

       
       
       
       
      Konoha (Em Desenvolvimento)
       
       
       
       
    • Por FeeTads
      salve rapaziada, estou fazendo uma quest no meu OT que é necessário faze-la durante 10 dias consecutivos, porém caso o player perca um dia, a storage da quest reseta.
      Já tenho esses scripts prontos de 2 formas: global event que checa a storage de todos os player online no momento e caso ja tenha passado 24h ele tira a storage do player que está entre os 10 dias de quest.
      E também tenho um creatureScript de onLogin() que quando o player loga, ele entra num loop de verificação a cada 60s

      minha duvida: globalEvents vai checar todos os players online de uma só vez e fazer as alterações necessarias, isso pode lagar a distro, ou até mesmo crashar?
      o creatureScript vai entrar num loop até o player deslogar, isso numa média de 250 pessoa são diversas verificações em momentos diferentes, pode acabar lagando ou crashando?

      meu OT possui uma media de 300 pessoas online.

      Script globalEvents é esse:

      function onThink(interval, lastExecution)
          local players = {}
          local timer = os.time()
          for _, pid in pairs (getPlayersOnline()) do
              local storage = getPlayerStorageValue(pid, 1231234)
              if getPlayerStorageValue(pid,888251) > 0 and getPlayerStorageValue(pid,888251) <= 9 then
                  if storage - timer <= 1  then
                      table.insert(players, pid)
                  end
              end
          end
          
          if #players > 0 then
              for i = 1, #players do
                  doPlayerSendTextMessage(players[i],22,"seu dano voltou ao normal por vc nao ter feito a quest!")
                  setPlayerStorageValue(players[i],888251,0)
              end
          end
      return true
      end

      Script do Creature é esse:
      local storage = getPlayerStorageValue(cid,1231234)
              function checkStorage(cid) local timer = os.time()
                     if not isPlayer(cid) then return true end
                     if getPlayerStorageValue(cid,888251) > 0 and getPlayerStorageValue(cid, 888251) <= 9 then
                             if storage - timer <= 1 then
                                     setPlayerStorageValue(cid,888251,0)
                             end
                   end
                   addEvent(function()
                              checkStorage(cid)
                    end, 60000)
      end
      function onLogin(cid)
              checkStorage(cid)
      return true
      end
      function onLogout(cid)
             stopEvent(checkStorage[cid])
      return true
      end


      caso os códigos nao estejam legiveis me avisem como arrumar em .lua pf

      se quiserem usar os códigos podem usar a vontade kkkkkkk
    • Por thelifeofpbion
      Existem alguns scripts que depois de matar boss abri tp para os players entrarem em uma sala de recompensa, porém (não sei se já existe) vou postar 2 scripts:

      1º Script: Todos players que der algum dano no boss é teleportado
      2º Script: Depois que o Boss for derrotado todos players de uma sala são teleportados.
       
       

       
      É Basicamente isso, tava ajudando no suporte quando pediram isso e resolvi postar para ficar mais facil de achar (e depois pra eu achar também).

      Agradeço o vodkart por ter disponibilizado a parte do script onde seleciona todos players de uma area (retirei de algum post do forum),
      e Xagah que copiei descaradamente as imagens de tópico porque achei bonito  

      Ajudei de alguma Forma? REP+.


       



×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo