Ir para conteúdo
  • Cadastre-se

Scripting Item que reduz a perda de level/skill.


Posts Recomendados

Alguém poderia me ajudar por gentilize, preciso de um script de um item que reduz a perda de level e skill quando o player estiver usando o item em x slot, no meu caso o item fica na flecha, se o item estiver equipa o player tem a proteção de x% por exemplo ( o item esta no slot então o player tem 50% de reduction lost skill.) seria como um item que reduz a penalidade de morte.

 

 

 

 

 

 

Link para o post
Compartilhar em outros sites
5 horas atrás, HomeJobs disse:

Qual source você ?

Meu servidor é 8.6 tsf 0.4, minha source tem algumas modificaçoes, se precisar que eu pegue alguma info so falar.

Link para o post
Compartilhar em outros sites
  • Moderador
5 horas atrás, Morg disse:

Meu servidor é 8.6 tsf 0.4, minha source tem algumas modificaçoes, se precisar que eu pegue alguma info so falar.

procure pelo player.lua do seu servidor procure por :

function Player:onLoseExperience(exp) return exp end

E troque essa função por essa.
 

function Player:onLoseExperience(exp) 
  local Amulets = { 
    [ITEMID] = {ExpLossProtection = 0.3, LoseAfter = true} 
    [ITEMID] = {ExpLossProtection = 0, LoseAfter = false}, 
    [ITEMID] = {ExpLossProtection = 1, LoseAfter = true } } 
  local amulet = self:getSlotItem(CONST_SLOT_NECKLACE) 
  	if Amulets[amulet.itemid] then 
    	exp = exp * Amulets[amulet.itemid].ExpLossProtection 
    if Amulets[amulet.itemid].LoseAfter 
      then 
      	charges-1 
    end 
  end 
  return exp 
end

Não sei se o código a cima funciona na tfs 0.4
no entanto é possivel fazer na tfs 0.4
CreatureScript

XML:

<event type="preparedeath" name="blessAmulet" script="script.lua"/>

 

local bless = {1, 2, 3, 4, 5}
local amulet = amulet id

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
    if (isPlayer(cid) == TRUE) then
        if (getPlayerSlotItem(cid, CONST_SLOT_NECKLACE).itemid == amulet) then
            if (getCreatureSkullType(cid) == SKULL_RED or SKULL_BLACK) then
                doCreatureSetDropLoot(cid, FALSE)       
                doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYAREA) 
            end
            if not(getPlayerBlessing(cid, bless[i])) then
                for i = 1, table.maxn(bless) do
                    doPlayerAddBlessing(cid, bless[i])
                end 
            end
        end
    end
    return TRUE
end



 

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

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites

@HomeJobs Obrigado pelo script, no caso seria para o ammo (slot da flecha) esse item me parece com o blessing amuleto que protege contra red e black skull, me corrija se eu estiver errado. 

Editado por Morg
. (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Moderador
Em 15/12/2021 em 07:54, Morg disse:

@HomeJobs Obrigado pelo script, no caso seria para o ammo (slot da flecha) esse item me parece com o blessing amuleto que protege contra red e black skull, me corrija se eu estiver errado. 

Ele verifica se o jogador esta black ou red e caso estiver seta o drop loot para false, para dropar o item mude para true

doCreatureSetDropLoot(cid, FALSE)

Vou deixar aqui uma lista organizada das lua functions até a versão 0.3.6 da TFS pode te ajudar a implementar o sistema.
Espero que te ajude.

 

 

 

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

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites
Em 14/12/2021 em 22:34, HomeJobs disse:

procure pelo player.lua do seu servidor procure por :


function Player:onLoseExperience(exp) return exp end

E troque essa função por essa.
 


function Player:onLoseExperience(exp) 
  local Amulets = { 
    [ITEMID] = {ExpLossProtection = 0.3, LoseAfter = true} 
    [ITEMID] = {ExpLossProtection = 0, LoseAfter = false}, 
    [ITEMID] = {ExpLossProtection = 1, LoseAfter = true } } 
  local amulet = self:getSlotItem(CONST_SLOT_NECKLACE) 
  	if Amulets[amulet.itemid] then 
    	exp = exp * Amulets[amulet.itemid].ExpLossProtection 
    if Amulets[amulet.itemid].LoseAfter 
      then 
      	charges-1 
    end 
  end 
  return exp 
end

Não sei se o código a cima funciona na tfs 0.4
no entanto é possivel fazer na tfs 0.4
CreatureScript

XML:


<event type="preparedeath" name="blessAmulet" script="script.lua"/>

 


local bless = {1, 2, 3, 4, 5}
local amulet = amulet id

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
    if (isPlayer(cid) == TRUE) then
        if (getPlayerSlotItem(cid, CONST_SLOT_NECKLACE).itemid == amulet) then
            if (getCreatureSkullType(cid) == SKULL_RED or SKULL_BLACK) then
                doCreatureSetDropLoot(cid, FALSE)       
                doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYAREA) 
            end
            if not(getPlayerBlessing(cid, bless[i])) then
                for i = 1, table.maxn(bless) do
                    doPlayerAddBlessing(cid, bless[i])
                end 
            end
        end
    end
    return TRUE
end



 

tem como fazer um que não seja usado em slot, e sim dentro da backpack?

Link para o post
Compartilhar em outros sites
  • Moderador

@ApacheBom dia! tenta este por favor, caso não funcione abre um tópico com seu pedido que te ajudo por la!

local item_id,amount = 7721,1

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
    if (isPlayer(cid) == TRUE) then
        if (getPlayerItemCount(cid,item_id,amount) then
            if (getCreatureSkullType(cid) == SKULL_RED or SKULL_BLACK) then
                doCreatureSetDropLoot(cid, FALSE)       
                doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYAREA) 
            end
            if not(getPlayerBlessing(cid, bless[i])) then
                for i = 1, table.maxn(bless) do
                    doPlayerAddBlessing(cid, bless[i])
                end 
            end
        end
    end
    return TRUE
end

 

 

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites
19 horas atrás, HomeJobs disse:

@ApacheBom dia! tenta este por favor, caso não funcione abre um tópico com seu pedido que te ajudo por la!


local item_id,amount = 7721,1

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
    if (isPlayer(cid) == TRUE) then
        if (getPlayerItemCount(cid,item_id,amount) then
            if (getCreatureSkullType(cid) == SKULL_RED or SKULL_BLACK) then
                doCreatureSetDropLoot(cid, FALSE)       
                doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYAREA) 
            end
            if not(getPlayerBlessing(cid, bless[i])) then
                for i = 1, table.maxn(bless) do
                    doPlayerAddBlessing(cid, bless[i])
                end 
            end
        end
    end
    return TRUE
end

 

 

peço desculpas por não explicar direito, mas quero um item que ao estar dentro da backpack do jogador, ele perca 50% a menos de level ao morrer.

Link para o post
Compartilhar em outros sites
  • Moderador
7 horas atrás, Apache disse:

peço desculpas por não explicar direito, mas quero um item que ao estar dentro da backpack do jogador, ele perca 50% a menos de level ao morrer.

Aqui pequeno gafanhoto. No caso o script a baixo não remove o item quando o player morrer... era isso?
Te aconselho a usar o sistema de bless para isso que é oque os cript esta fazendo aqui em baixo, se estiver um item id,quantidade e o player não estiver com a bless as blesses serão adicionadas.

 

local item_id,amount = 7721,1

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
    if (isPlayer(cid) == TRUE) then
        if (getPlayerItemCount(cid,item_id,amount) then
            if not(getPlayerBlessing(cid, bless[i])) then
                for i = 1, table.maxn(bless) do
                    doPlayerAddBlessing(cid, bless[i])
                end 
            end
        end
    end
    return TRUE
end

 

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites
24 minutos atrás, HomeJobs disse:

Aqui pequeno gafanhoto. No caso o script a baixo não remove o item quando o player morrer... era isso?
Te aconselho a usar o sistema de bless para isso que é oque os cript esta fazendo aqui em baixo, se estiver um item id,quantidade e o player não estiver com a bless as blesses serão adicionadas.

 



local item_id,amount = 7721,1

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
    if (isPlayer(cid) == TRUE) then
        if (getPlayerItemCount(cid,item_id,amount) then
            if not(getPlayerBlessing(cid, bless[i])) then
                for i = 1, table.maxn(bless) do
                    doPlayerAddBlessing(cid, bless[i])
                end 
            end
        end
    end
    return TRUE
end

 

O Item que ele quer creio que seja um item que quando o player morrer mesmo que ele tenha bless ele irá perder 50% a menos doq os demais players que n tem o item, exemplo Toddy tem o item ele vai perder 1 level e meio , nescau não tem o item ele vai perder 3 leveis.  isso é um item que existe no baiak ilusion que da menos 50% de perca de level e skill para o player que estiver usando o item no caso ele vai reduzir a penalidade de morte mesmo estando com ou sem bless.

Editado por Morg (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
2 horas atrás, Morg disse:

O Item que ele quer creio que seja um item que quando o player morrer mesmo que ele tenha bless ele irá perder 50% a menos doq os demais players que n tem o item, exemplo Toddy tem o item ele vai perder 1 level e meio , nescau não tem o item ele vai perder 3 leveis.  isso é um item que existe no baiak ilusion que da menos 50% de perca de level e skill para o player que estiver usando o item no caso ele vai reduzir a penalidade de morte mesmo estando com ou sem bless.

Exatamente, mesmo com bless o jogador perderia 50% a menos de level e skills.

Link para o post
Compartilhar em outros sites
  • Moderador
3 horas atrás, HomeJobs disse:

Aqui pequeno gafanhoto. No caso o script a baixo não remove o item quando o player morrer... era isso?
Te aconselho a usar o sistema de bless para isso que é oque os cript esta fazendo aqui em baixo, se estiver um item id,quantidade e o player não estiver com a bless as blesses serão adicionadas.

 


local item_id,amount = 7721,1

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
    if (isPlayer(cid) == TRUE) then
        if (getPlayerItemCount(cid,item_id,amount) then
            if (getPlayerBlessing(cid, bless[1,2,3,4,5])) then
			doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, loss * 50)
                end 
            end
        end
    end
    return TRUE
end

 

@Morg vlw agora entendi haha

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites
5 horas atrás, HomeJobs disse:

@Morg vlw agora entendi haha

testei aqui

[Error - Event::checkScript] Cannot load script (data/creaturescripts/scripts/percentbless.lua)
data/creaturescripts/scripts/percentbless.lua:5: ')' expected near 'then'

 

 

Editado por Apache (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Moderador
4 horas atrás, Apache disse:

testei aqui

[Error - Event::checkScript] Cannot load script (data/creaturescripts/scripts/percentbless.lua)
data/creaturescripts/scripts/percentbless.lua:5: ')' expected near 'then'

 

 

local item_id,amount = 7721,1

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
    if (isPlayer(cid) == TRUE) then
        if (getPlayerItemCount(cid,item_id,amount) then
            if not(getPlayerBlessing(cid, bless[i]) then
                for i = 1, table.maxn(bless) do
                    doPlayerAddBlessing(cid, bless[i])
                end 
            end
        end
    end
    return TRUE
end

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

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

local item_id,amount = 7721,1

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
    if (isPlayer(cid) == TRUE) then
        if (getPlayerItemCount(cid,item_id,amount) then
            if not(getPlayerBlessing(cid, bless[i]) then
                for i = 1, table.maxn(bless) do
                    doPlayerAddBlessing(cid, bless[i])
                end 
            end
        end
    end
    return TRUE
end

[Error - Event::checkScript] Cannot load script (data/creaturescripts/scripts/percentbless.lua)
data/creaturescripts/scripts/percentbless.lua:5: ')' expected near 'then'

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

[Error - Event::checkScript] Cannot load script (data/creaturescripts/scripts/percentbless.lua)
data/creaturescripts/scripts/percentbless.lua:5: ')' expected near 'then'

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
    if (isPlayer(cid) == TRUE) then
        if (getPlayerItemCount(cid,item_id,amount) || not(getPlayerBlessing(cid, bless[1,2,3,4,5]) then
                 doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, loss * 50)
                end 
            end
	return true
end

 

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

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites
45 minutos atrás, HomeJobs disse:


function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
    if (isPlayer(cid) == TRUE) then
        if (getPlayerItemCount(cid,item_id,amount) || not(getPlayerBlessing(cid, bless[1,2,3,4,5]) then
                 doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, loss * 50)
                end 
            end
	return true
end

 

[Error - Event::checkScript] Cannot load script (data/creaturescripts/scripts/percentbless.lua)
data/creaturescripts/scripts/percentbless.lua:5: ')' expected near '|'

 

Spoiler

function onSay(cid, words, param)

     if(not checkExhausted(cid, 666, 5)) then
        return true
    end

    if getPlayerBlessing(cid, 1) or getPlayerBlessing(cid, 2) or getPlayerBlessing(cid, 3) or getPlayerBlessing(cid, 4) or getPlayerBlessing(cid, 5) then
        doPlayerSendCancel(cid,'You have already got one or more blessings!')
    else
    if doPlayerRemoveMoney(cid, 50000) == TRUE then
        doPlayerAddBlessing(cid, 1)
        doPlayerAddBlessing(cid, 2)
        doPlayerAddBlessing(cid, 3)
        doPlayerAddBlessing(cid, 4)
        doPlayerAddBlessing(cid, 5)
        doSendMagicEffect(getPlayerPosition(cid), 49)
        doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE, 'You have been blessed by the gods!')
    else
        doPlayerSendCancel(cid, "You need 50.000 gold coins to get blessed!")
    end
end
    ret

 

Editado por Apache (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Moderador
30 minutos atrás, Apache disse:

[Error - Event::checkScript] Cannot load script (data/creaturescripts/scripts/percentbless.lua)
data/creaturescripts/scripts/percentbless.lua:5: ')' expected near '|'

 

  Ocultar conteúdo

function onSay(cid, words, param)

     if(not checkExhausted(cid, 666, 5)) then
        return true
    end

    if getPlayerBlessing(cid, 1) or getPlayerBlessing(cid, 2) or getPlayerBlessing(cid, 3) or getPlayerBlessing(cid, 4) or getPlayerBlessing(cid, 5) then
        doPlayerSendCancel(cid,'You have already got one or more blessings!')
    else
    if doPlayerRemoveMoney(cid, 50000) == TRUE then
        doPlayerAddBlessing(cid, 1)
        doPlayerAddBlessing(cid, 2)
        doPlayerAddBlessing(cid, 3)
        doPlayerAddBlessing(cid, 4)
        doPlayerAddBlessing(cid, 5)
        doSendMagicEffect(getPlayerPosition(cid), 49)
        doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE, 'You have been blessed by the gods!')
    else
        doPlayerSendCancel(cid, "You need 50.000 gold coins to get blessed!")
    end
end
    ret

 

Foi mal confundi as linguagens lua nao usa pipe
 

function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
    if (isPlayer(cid) == TRUE) then
        if (getPlayerItemCount(cid,item_id,amount) and not(getPlayerBlessing(cid, bless[1,2,3,4,5]) then
                 doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, loss * 50)
                end 
            end
	return true
end

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites
26 minutos atrás, HomeJobs disse:

Foi mal confundi as linguagens lua nao usa pipe
 


function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
    if (isPlayer(cid) == TRUE) then
        if (getPlayerItemCount(cid,item_id,amount) and not(getPlayerBlessing(cid, bless[1,2,3,4,5]) then
                 doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, loss * 50)
                end 
            end
	return true
end

[Error - LuaInterface::loadFile] data/creaturescripts/scripts/percentbless.lua:5: ']' expected near ','
[Error - Event::checkScript] Cannot load script (data/creaturescripts/scripts/percentbless.lua)
data/creaturescripts/scripts/percentbless.lua:5: ']' expected near ','

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 cloudrun2023
      CloudRun - Sua Melhor Escolha para Hospedagem de OTServer!
      Você está procurando a solução definitiva para hospedar seu OTServer com desempenho imbatível e segurança inigualável? Não procure mais! Apresentamos a CloudRun, sua parceira confiável em serviços de hospedagem na nuvem.
       
      Recursos Exclusivos - Proteção DDoS Avançada:
      Mantenha seu OTServer online e seguro com nossa robusta proteção DDoS, garantindo uma experiência de jogo ininterrupta para seus jogadores.
       
      Servidores Ryzen 7 Poderosos: Desfrute do poder de processamento superior dos servidores Ryzen 7 para garantir um desempenho excepcional do seu OTServer. Velocidade e estabilidade garantidas!
       
      Armazenamento NVMe de Alta Velocidade:
      Reduza o tempo de carregamento do jogo com nosso armazenamento NVMe ultrarrápido. Seus jogadores vão adorar a rapidez com que podem explorar o mundo do seu OTServer.
       
      Uplink de até 1GB:
      Oferecemos uma conexão de alta velocidade com até 1GB de largura de banda, garantindo uma experiência de jogo suave e livre de lag para todos os seus jogadores, mesmo nos momentos de pico.
       
      Suporte 24 Horas:
      Estamos sempre aqui para você! Nossa equipe de suporte está disponível 24 horas por dia, 7 dias por semana, para resolver qualquer problema ou responder a qualquer pergunta que você possa ter. Sua satisfação é a nossa prioridade.
       
      Fácil e Rápido de Começar:
      Configurar seu OTServer na CloudRun é simples e rápido. Concentre-se no desenvolvimento do seu jogo enquanto cuidamos da hospedagem.
       
      Entre em Contato Agora!
      Website: https://central.cloudrun.com.br/index.php?rp=/store/cloud-ryzen-brasil
      Email: [email protected]
      Telefone: (47) 99902-5147

      Não comprometa a qualidade da hospedagem do seu OTServer. Escolha a CloudRun e ofereça aos seus jogadores a melhor experiência de jogo possível. Visite nosso site hoje mesmo para conhecer nossos planos e começar!
       
      https://central.cloudrun.com.br/index.php?rp=/store/cloud-ryzen-brasil
       
      CloudRun - Onde a Velocidade Encontra a Confiabilidade!
       

    • Por FeeTads
      SALVE rapaziada do TK, esses dias vim pensando em novos scripts pro meu OT, e em um deles eu precisava que determinada area não contasse frag pro player que matasse outros, PORÉM eu precisava que os players que morressem nessa area ainda assim tivessem as penalidades da sua morte, procurei por ai, achei alguns scripts que apenas tiravam o SKULL e não realmente o FRAG do player.

      **script atualizado 22/10/2023** - melhorado e otimizado, levei o script pra puxar as infos por .lua / creatureScripts

      vou disponibilizar o code aqui, e o que fazer pra determinada area não contar frag.

      SOURCE OTX 2 / TFS 0.x, Funciona em TFS 1.x mudando as tags e ajeitando as sintaxes.

      vá em creatureevent.cpp

      procure por:
      else if(type == "preparedeath") _type = CREATURE_EVENT_PREPAREDEATH;
      Adiciona abaixo:
      else if(type == "nocountfrag") _type = CREATURE_EVENT_NOCOUNTFRAG;

      procure por:
      case CREATURE_EVENT_PREPAREDEATH: return "onPrepareDeath";  
      Adicione abaixo: 
      case CREATURE_EVENT_NOCOUNTFRAG: return "noCountFragArea";

      procure por:
      case CREATURE_EVENT_PREPAREDEATH: return "cid, deathList";
      Adicione abaixo:
      case CREATURE_EVENT_NOCOUNTFRAG: return "cid, target";

      agora no mesmo arquivo, vá até o final do arquivo e adicione essa função:
      uint32_t CreatureEvent::executeNoCountFragArea(Creature* creature, Creature* target) { //noCountFragArea(cid, target) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(creature->getPosition()); std::ostringstream scriptstream; scriptstream << "local cid = " << env->addThing(creature) << std::endl; scriptstream << "local target = " << env->addThing(target) << std::endl; if(m_scriptData) scriptstream << *m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ std::ostringstream desc; desc << creature->getName(); env->setEvent(desc.str()); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(creature->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(creature)); lua_pushnumber(L, env->addThing(target)); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::noCountFragArea] Call stack overflow." << std::endl; return 0; } }

      agora vá em creatureevent.h

      procure por:
      CREATURE_EVENT_PREPAREDEATH
      adicione abaixo:
      CREATURE_EVENT_NOCOUNTFRAG

      procure por:
      uint32_t executePrepareDeath(Creature* creature, DeathList deathList);
      Adicione abaixo:
      uint32_t executeNoCountFragArea(Creature* creature, Creature* target);

      agora vá em player.cpp

      procure por:
      bool Player::onKilledCreature(Creature* target, DeathEntry& entry)
      abaixo de:
      War_t enemy; if(targetPlayer->getEnemy(this, enemy)) { if(entry.isLast()) IOGuild::getInstance()->updateWar(enemy); entry.setWar(enemy); }
      Adicione o seguinte código:
      if (targetPlayer){ CreatureEventList killEvents = getCreatureEvents(CREATURE_EVENT_NOCOUNTFRAG); for (const auto &event : killEvents) { if (!event->executeNoCountFragArea(this, target)) { return true; } } }

      //

      Feito isso, tudo completo na sua source, agora é necessário adicionar o creaturescript dentro do servidor

      vá até creaturescripts/scripts
      crie um arquivo chamado, "noCountFragInArea.lua"
      e dentro dele cole o código:
       
      --[[ script feito por feetads / TibiaKing ]]-- --[[ discord: feetads / FeeTads#0246 ]]-- -- Add positions here for which you do not want to count frags local areas = { [1] = {from = {x = 91, y = 122, z = 7}, to = {x = 98, y = 127, z = 7}}, -- from = area superior esquerda / to = area inferior direita (formando um quadrado) } local onlyKillerInArea = false -- only killer need to be in area? function noCountFragArea(cid, target) if not isCreature(cid) or not isCreature(target) then return true end local posKiller = getPlayerPosition(cid) local posTarget = getPlayerPosition(target) for i = 1, #areas do local area = areas[i] if isInArea(posKiller, area.from, area.to) then if onlyKillerInArea then return false elseif isInArea(posTarget, area.from, area.to) then return false end end end return true end
      agora em creaturescripts.xml
      <event type="nocountfrag" name="fragarea" event="script" value="noCountFragInArea.lua"/>
      agora em creaturescripts/scripts/login.lua
       procure por OU semelhante a esse:
      registerCreatureEvent(cid, "AdvanceSave")
      e abaixo adicione:
      registerCreatureEvent(cid, "fragarea")

      //


      Agora tudo certo, quando quiser adiciona uma area que não pega frag, vá até o script e apenas coloque a area, igual o demonstrado no script

      Exemplo:
      local areas = { [1] = {from = {x = 91, y = 122, z = 7}, to = {x = 98, y = 127, z = 7}}, [2] = {from = {x = 1000, y = 1000, z = 7}, to = {x = 1100, y = 1100, z = 7}}, }
      assim somente colocando a area no script e abrindo o server ou dando /reload, já funcionará a area como não pegar frag.
      Esse sistema pode ser bom pra areas de pvp ativo, onde você ainda quer que o player que morrer perca os atributos, como se fosse uma morte normal, porém não conta frag pra quem matar.
      Bom pra sistemas tipo castle 48h (guild war), onde há diversas mortes e risco de pegar red, atrapalhando a war.

      Façam bom proveito dos scripts, e deixem os créditos no script rsrs

      **Eu fiz as alterações e o simples código por isso vim disponibilizar, créditos meus**
    • Por Muvuka
      Abri canal a força creaturescript acho que funcione no creaturescript cria script creaturescript
       
      <channel id="9" name="HELP" logged="yes"/>
      <channel id="12" name="Report Bugs" logged="yes"/>
      <channel id="13" name="Loot" logged="yes"/>
      <channel id="14" name="Report Character Rules Tibia Rules" logged="yes"/>
      <channel id="15" name="Death Channel"/>
      <channel id="6548" name="DexSoft" level="1"/>
      <channel id="7" name="Reports" logged="yes"/>
       
      antes de 
              if(lastLogin > 0) then adicione isso:
                      doPlayerOpenChannel(cid, CHANNEL_HELP) doPlayerOpenChannel(cid, 1,  2, 3) = 1,2 ,3 Channels, entendeu? NÃO FUNCIONA EU QUERO UM MEIO DE ABRI SEM USA A SOURCE
       
      EU NÃO CONSEGUI ABRI EU NÃO TENHO SOURCE
       
       
    • Por bolachapancao
      Rapaziada seguinte preciso de um script que ao utilizar uma alavanca para até 4 jogadores.
      Os jogadores serão teleportados para hunt durante uma hora e depois de uma hora os jogadores serão teleportados de volta para o templo.
       
      Observação: caso o jogador morra ou saia da hunt o evento hunt é cancelado.

      Estou a base canary
      GitHub - opentibiabr/canary: Canary Server 13.x for OpenTibia community.
       
    • Por RAJADAO
      .Qual servidor ou website você utiliza como base? 
      Sabrehaven 8.0
      Qual o motivo deste tópico? 
      Ajuda com novos efeitos
       
      Olá amigos, gostaria de ajuda para introduzir os seguintes efeitos no meu servidor (usando o Sabrehaven 8.0 como base), adicionei algumas runas novas (avalanche, icicle, míssil sagrado, stoneshower & Thunderstorm) e alguns novos feitiços (exevo mas san, exori san, exori tera, exori frigo, exevo gran mas frigo, exevo gran mas tera, exevo tera hur, exevo frigo hur) mas nenhum dos efeitos dessas magias parece existir no servidor, alguém tem um link para um tutorial ou algo assim para que eu possa fazer isso funcionar?
      Desculpe pelo mau inglês, sou brasileiro.

      Obrigado!


      AVALANCHE RUNE id:3161 \/
      (COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
      (COMBAT_PARAM_EFFECT, CONST_ME_ICEAREA)
      (COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ICE)

      STONESHOWER RUNE id:3175 \/
      (COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE)
      (COMBAT_PARAM_EFFECT, CONST_ME_STONES)
      (COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_EARTH)

      THUNDERSTORM RUNE id:3202 \/
      (COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
      (COMBAT_PARAM_EFFECT, CONST_ME_E NERGYHIT)
      (COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGYBALL)

      ICICLE RUNE id:3158 \/
      COMBAT_ICEDAMAGE
      CONST_ME_ICEAREA
      CONST_ANI_ICE

      SANTO MÍSSIL RUNA id:3182 \/
      (COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
      (COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE)
      (COMBAT_PARAM_EFFECT, CONST_ME_HOLYAREA)
      (COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_HOLY)

      CONST_ME_PLANTATTACK (exevo gran mas tera)
      CONST_ME_ICETORNADO (exevo gran mas frigo)
      CONST_ME_SMALLPLANTS (exevo tera hur)
      CONST_ME_ICEAREA (exevo frigo hur)
      CONST_ME_ICEATTACK (exori frigo)
      CONST_ME_CARNIPHILA (exori tera)

      EXORI SAN \/
      (COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLHOLY)
      CONST_ME_HOLYDAM IDADE

      EXEVO MAS SAN \/
      CONST_ME_HOLYAREA
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo