Ir para conteúdo
  • Cadastre-se

Scripting Forja System Global


Ir para solução Resolvido por Pacera,

Posts Recomendados

.Qual servidor ou website você utiliza como base? 

 

Qual o motivo deste tópico? 

 

Olá, tudo bem?

Eu tenho um sistema de forja no meu servidor global 12.86. Porem a criação do item forja tier 1,2....10 só pode ser criado com o comando de GOD:  "/testtier falcon coif,10"

Eu gostaria de criar um script que se o player tiver 100 de qualquer item"ID DO ITEM" e ele clicar no item e depois usar no item que sera forjado, o item tem 50% de receber +1 de forja, ou ele pode ter 50% de chance de falahar e nao acontecer nada.

Poderia me ajudar?

Obrigado

 

Está surgindo algum erro? Se sim coloque-o aqui. 

Citar

 

 

Você tem o código disponível? Se tiver publique-o aqui: 

local tier = TalkAction("/testtier")

-- usage: /testtier item id or name, tier
-- example: /testtier falcon coif, 8
-- make sure to move the item at least 1 time to refresh item tier icon

function tier.onSay(player, words, param)
    local split = param:split(",")
    local itemType = ItemType(split[1])
    if itemType:getId() == 0 then
        itemType = ItemType(tonumber(split[1]))
        if not tonumber(split[1]) or itemType:getId() == 0 then
            player:sendCancelMessage("There is no item with that id or name.")
            return false
        end
    end
    local tier = tonumber(split[2])
 
    if tier <= 0 or tier == nil or tier > 10 then
        player:sendCancelMessage("Invalid tier count.")
        return false
    end

    player:addItem(itemType:getId(), 1):setTier(tier)
    return false
end

tier:separator(" ")
tier:register()

 

Link para o post
Compartilhar em outros sites

Primeiramente você deve verificar que a função usada será uma OnUse, ou seja, ela ativará "ao usar" um item (neste caso).

Procure a estrutura da função que iremos usar no tutorial abaixo do projeto TFS:

https://github.com/otland/forgottenserver/wiki/Revscriptsys

 

Basicamente seu script terá essa composição:
 

funcao AoUsar()
	- verificação se você tem 100x do item usado
	- verificação se o target é um item válido
	- condição para remover o item usado 100x
	- fazer um random da porcentagem de acerto
	- se o random por favorável, verificar o nível Tier do item target e somar 1 nível
fim

 

Eu poderia fazer para você, mas nenhum de nós dois ganharíamos nada com isso, portanto, procure nos scripts OnUse (actions) exemplos dessas condições, como verificar se o jogador tem X item em certa quantidade, verificar o target do item, função para verificar se tal ITEM ID é realmente um ITEM válido (no caso, creio que seja HELMET, ou ARMOR, ou LEGS, ou BOOTS, ou SHIELD?!, ou o que mais quiser ... ), condição para remover X item em certa quantidade, random de porcentagem de acerto, funções de retornar o valor atual do Tier do item e função para trocar o nível atual ... acho que é isso.
 

Link para o post
Compartilhar em outros sites

Me ajuda ae por favor. Consegui fazer algumas coisas, só que o script é bem extenso e utiliza algumas funções que nunca utilizei.

 

Falta:

1-Alterar o onuse pro item dar use no item que vai ser forjado. exemplo, clica com direito no item 37110 e usa no item que vai forjar. Ou se possível ser feito por actionID. o cara coloca o item que sera forjado em cima de algum tile e puxa uma alavanca.

2-Depois, verificar se o item é tier=0 ou maior que 0 e menor que 10(tier maximo). Caso nao seja ele mostra a mensagem que este nao é um item forjável.

3-Fazer um random da porcentagem de acerto conforme o tier do item. tier=0 sera 100% acerto. a cada tier a porcentagem cai 15% ate o tier maximo que é 10.

4-se o random por favorável, verificar o nível Tier do item target e somar 1 nível

 

Citar

local forge = Action()

local craft = {
    items = {
        [1] = {item = 37110, count = 100}-- item necessário para forjar
    }
    

function forget.onUse(player, item, fromPosition, target, itemEx, toPosition)
    for k, v in pairs(craft.items) do
        if player:getItemCount(v.item) < v.count then
            player:sendTextMessage(MESSAGE_STATUS_SMALL, "Voce não tem a quantidade de items necessária para forjar")
            player:getPosition():sendMagicEffect(CONST_ME_POFF)
            return true
        end
    end

    for k, v in pairs(craft.items) do
        player:removeItem(v.item, v.count)
    end

    player:addItem(??????????)
    player:removeItem(item.itemid, 1)
    player:sendTextMessage(MESSAGE_STATUS_DEFAULT, "Sucesso o item foi forjado")
    player:getPosition():sendMagicEffect(50)
    
    return true
end

forge:id(37110)
forge:register()

 

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

Me ajuda ae por favor. Consegui fazer algumas coisas, só que o script é bem extenso e utiliza algumas funções que nunca utilizei.

 

Falta:

1-Alterar o onuse pro item dar use no item que vai ser forjado. exemplo, clica com direito no item 37110 e usa no item que vai forjar. Ou se possível ser feito por actionID. o cara coloca o item que sera forjado em cima de algum tile e puxa uma alavanca.

2-Depois, verificar se o item é tier=0 ou maior que 0 e menor que 10(tier maximo). Caso nao seja ele mostra a mensagem que este nao é um item forjável.

3-Fazer um random da porcentagem de acerto conforme o tier do item. tier=0 sera 100% acerto. a cada tier a porcentagem cai 15% ate o tier maximo que é 10.

4-se o random por favorável, verificar o nível Tier do item target e somar 1 nível

 

- Você não precisar fazer uma lista dos items usados na forja (local craft.items = {}) pq no caso ele será o item usado: function forget.onUse(player, item, fromPosition, target, itemEx, toPosition)
- Você precisa usar um item que abre a opção de "targetar" outro item (aquela setinha quando clica com o botão direito), isso é de cada item e ele fica definido dentro do cliente e só pode ser alterado pelo object builder, caso seu cliente seja customizado.

- Antes de remover o item 100x usado na forja, você precisa verificar se o item é válido para forjar.
 

3 horas atrás, Pacera disse:

player:addItem(itemType:getId(), 1):setTier(tier)


Aqui no primeiro script que você colocou não tem a verificação de é um item válido para forjar, e particularmente, não sei como funciona o sistema ... também não sei se as suas sources faz essa verificação ... (faça um teste, tente criar um item "meat" tier 10, por exemplo)

 

Link para o post
Compartilhar em outros sites

Bom dia, poderia dar uma olhada pra mim se tem algo errado por favor?

Nao consegui achar a função de alterar item, coloquei de adicionar, mas acho que esta errado e nao vai dar certo.

 

Citar

local forge = Action()

local count = 1
local item = 24963
local porcentagem = 100 -- porcentagem de chance de forjar
local chance = { -- cada id significa 10% de chance de acerto
    { id = 10},
    { id = 20},
    { id = 30},
    { id = 40},
    { id = 50},
    { id = 60},
    { id = 70},
    { id = 80},
    { id = 90},
    { id = 100}  
}

    
function forge.onUse(player, item, fromPosition, target, toPosition, isHotkey)
   local randId = math.random(1, #chance)
   local rewardItem = chance[randId]


        if item:getCount(item) < (count) then                        
            player:sendTextMessage(MESSAGE_STATUS_SMALL, "Voce nao tem a quantidade de items necessaria para forjar")
            player:getPosition():sendMagicEffect(CONST_ME_POFF)
            return
        end
          
   local split = param:split(",")
   local itemType = ItemType(split[1])


    if target.itemType:getId() == 0 then
        porcentagem = 100
    else
    if target.itemType:getId() == 1 then
        porcentagem = 90
    else
    if target.itemType:getId() == 2 then
        porcentagem = 80
    else
    if target.itemType:getId() == 3 then
        porcentagem = 70
    else
    if target.itemType:getId() == 4 then
        porcentagem = 60
    else
    if target.itemType:getId() == 5 then
        porcentagem = 50
    else
    if target.itemType:getId() == 6 then
        porcentagem = 40
    else
    if target.itemType:getId() == 7 then
        porcentagem = 30
    else
    if target.itemType:getId() == 8 then
        porcentagem = 20
    else
    if target.itemType:getId() == 9 then
        porcentagem = 10
    else
    if target.itemType:getId() == nil  then
        player:sendTextMessage(MESSAGE_STATUS_SMALL, "Este nao e um item Forjavel.")
        player:getPosition():sendMagicEffect(CONST_ME_POFF)
        return
    end
    end    
    end
    end
    end
    end
    end
    end
    end
    end
    end

   
    
    if chance.id <= (porcentagem) then
        itemType:remove(count)
        player:addItem(target.itemType:getId(), 1):setTier(tier)
        player:sendTextMessage(MESSAGE_STATUS_DEFAULT, "Parabens, o item foi forjado.")
        player:getPosition():sendMagicEffect(50)
    else
        itemType:remove(count)
        player:sendTextMessage(MESSAGE_STATUS_SMALL, "Sua forja falhou. Voce perdeu os items de forja.")
        player:getPosition():sendMagicEffect(CONST_ME_POFF)

                return
    end    
                
                


    
end


forge:id(24963)
forge:register()


 

 

Editado por Pacera (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
local forge = Action()

local count = 1
local porcentagem = 100 -- porcentagem de chance de forjar
local chance = { -- cada id significa 10% de chance de acerto
	[1] = 100,
	[2] = 90,
    [3] = 80,
    [4] = 70,
    [5] = 60,
    [6] = 50,
    [7] = 40,
    [8] = 30,
    [9] = 20,
    [10] = 10  
}
    
function forge.onUse(player, item, fromPosition, target, toPosition, isHotkey)
	if not target or not target:isItem() then
		return false
	end

	local targetId = target:getId()

	local targetTier = target:getTier()
	if not targetTier then
		player:sendTextMessage(MESSAGE_STATUS_SMALL, "Este nao e um item Forjavel.")
		player:getPosition():sendMagicEffect(CONST_ME_POFF)
		return true
	end

	if not target:remove(count) then
		player:sendTextMessage(MESSAGE_STATUS_SMALL, "Voce nao tem a quantidade de items necessaria para forjar")
		player:getPosition():sendMagicEffect(CONST_ME_POFF)
		return true
	end

	local rand = math.random(100)
	local chanceTier = target:getTier() and target:getTier() or 0
	if rand > chance[chanceTier] then
		player:sendTextMessage(MESSAGE_STATUS_SMALL, "Voce forja falhou")
		player:getPosition():sendMagicEffect(CONST_ME_POFF)
		return true
	end	

	if target:setTier(targetTier + 1) then
		player:sendTextMessage(MESSAGE_STATUS_DEFAULT, "Parabens, o item foi forjado.")
		player:getPosition():sendMagicEffect(50)
	end
	
	return true
end


forge:id(24963)
forge:register()

 

Link para o post
Compartilhar em outros sites

Obrigado

Ola, estou tendo erro na source ao usar em items como: potions, runas, gold coin ou items nao forjaveis. qd o item é tier 0 da o mesmo erro.

[error] Lua script error:
scriptInterface: [Scripts Interface]
scriptId: [C:\Program Files (x86)\canary-global-windows-x64-full\data\scripts\custom\forja.lua:callback]
timerEvent: []
 callbackId:[]
function: []
error [...ry-global-windows-x64-full\data\scripts\custom\forja.lua:49: attempt to compare nil with number
stack traceback:
        [C]: in function '__lt'
        ...ry-global-windows-x64-full\data\scripts\custom\forja.lua:49: in function <...ry-global-windows-x64-full\data\scripts\custom\forja.lua:18>]
Editado por Pacera (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

É o que eu disse aqui: 

Em 15/06/2022 em 15:50, luanluciano93 disse:

- verificação se o target é um item válido

Você tem que ver uma forma de como fazer isso ... quais os tipos de itens aceitar ou não, eu não conheço o sistema, já te dei quase tudo pronto.

Link para o post
Compartilhar em outros sites

Eu uso esse talkactions pra criar item. talvez por ele voce consiga achar a solução.

Citar
local itemwithtier = TalkAction("/itemwithtier")
     
    -- usage: /itemwithtier item id or name, tier
    -- example: /itemwithtier falcon coif, 8
    -- make sure to move the item at least 1 time to refresh item tier icon
     
    function itemwithtier.onSay(player, words, param)
    local split = param:split(",")
    local itemType = ItemType(split[1])
    if itemType:getId() == 0 then
    itemType = ItemType(tonumber(split[1]))
    if not tonumber(split[1]) or itemType:getId() == 0 then
    player:sendCancelMessage("There is no item with that id or name.")
    return false
    end
    end
    local tier = tonumber(split[2])
    if tier <= 0 or tier == nil or tier > 10 then
    player:sendCancelMessage("Invalid tier count.")
    return false
    end
     
    player:addItem(itemType:getId(), 1?setTier(tier)
    return false
    end
     
    itemwithtier:separator(" ")
    itemwithtier:register()

 

Editado por Pacera (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
local forge = Action()

local count = 1
local porcentagem = 100 -- porcentagem de chance de forjar
local chance = { -- cada id significa 10% de chance de acerto
	[1] = 100,
	[2] = 90,
	[3] = 80,
	[4] = 70,
	[5] = 60,
	[6] = 50,
	[7] = 40,
	[8] = 30,
	[9] = 20,
	[10] = 10  
}
	
function forge.onUse(player, item, fromPosition, target, toPosition, isHotkey)
	if not target or not target:isItem() then
		return false
	end

	if not target:remove(count) then
		player:sendTextMessage(MESSAGE_STATUS_SMALL, "Voce nao tem a quantidade de items necessaria para forjar.")
		player:getPosition():sendMagicEffect(CONST_ME_POFF)
		return false
	end

	local rand = math.random(100)
	local targetTier = target:getTier() and target:getTier() or 0
	if rand > chance[targetTier] then
		player:sendTextMessage(MESSAGE_STATUS_SMALL, "Voce forja falhou.")
		player:getPosition():sendMagicEffect(CONST_ME_POFF)
		return false
	end	

	if targetTier > 0 then
		if target:setTier(targetTier + 1) then
			player:sendTextMessage(MESSAGE_STATUS_DEFAULT, "Parabens, o item foi forjado.")
			player:getPosition():sendMagicEffect(50)
		else
			player:sendTextMessage(MESSAGE_STATUS_SMALL, "Este item nao pode ser forjado.")
			player:getPosition():sendMagicEffect(CONST_ME_POFF)
			return false
		end
	else
		if target:setTier(1) then
			player:sendTextMessage(MESSAGE_STATUS_DEFAULT, "Parabens, o item foi forjado.")
			player:getPosition():sendMagicEffect(50)
		else
			player:sendTextMessage(MESSAGE_STATUS_SMALL, "Este item nao pode ser forjado.")
			player:getPosition():sendMagicEffect(CONST_ME_POFF)
			return false
		end
	end

	return true
end


forge:id(24963)
forge:register()

 

Link para o post
Compartilhar em outros sites

Bom dia, ele retorna mesmo erro ainda:

Citar

[error] Lua script error:
scriptInterface: [Scripts Interface]
scriptId: [C:\Program Files (x86)\canary-global-windows-x64-full\data\scripts\custom\forja.lua:callback]
timerEvent: []
 callbackId:[]
function: []
error [...ry-global-windows-x64-full\data\scripts\custom\forja.lua:27: attempt to compare nil with number
stack traceback:
        [C]: in function '__lt'
        ...ry-global-windows-x64-full\data\scripts\custom\forja.lua:27: in function <...ry-global-windows-x64-full\data\scripts\custom\forja.lua:18>]

 

Link para o post
Compartilhar em outros sites
olá eu instalei os arquivos mas ao usar o item me dá um erro você pode explicar um pouco mais obrigado

https://i.ibb.co/Zhf8hDQ/errorforge.png

 

local forge = Action()

local count = 1
local porcentagem = 100 -- porcentagem de chance de forjar
local chance = { -- cada id significa 10% de chance de acerto
	[1] = 100,
	[2] = 90,
	[3] = 80,
	[4] = 70,
	[5] = 60,
	[6] = 50,
	[7] = 40,
	[8] = 30,
	[9] = 20,
	[10] = 10  
}
	
function forge.onUse(player, item, fromPosition, target, toPosition, isHotkey)
	if not target or not target:isItem() then
		return false
	end

	if not target:remove(count) then
		player:sendTextMessage(MESSAGE_STATUS_SMALL, "Voce nao tem a quantidade de items necessaria para forjar.")
		player:getPosition():sendMagicEffect(CONST_ME_POFF)
		return false
	end

	local rand = math.random(100)
	local targetTier = target:getTier() and target:getTier() or 0
	if rand > chance[targetTier] then
		player:sendTextMessage(MESSAGE_STATUS_SMALL, "Voce forja falhou.")
		player:getPosition():sendMagicEffect(CONST_ME_POFF)
		return false
	end	

	if targetTier > 0 then
		if target:setTier(targetTier + 1) then
			player:sendTextMessage(MESSAGE_STATUS_DEFAULT, "Parabens, o item foi forjado.")
			player:getPosition():sendMagicEffect(50)
		else
			player:sendTextMessage(MESSAGE_STATUS_SMALL, "Este item nao pode ser forjado.")
			player:getPosition():sendMagicEffect(CONST_ME_POFF)
			return false
		end
	else
		if target:setTier(1) then
			player:sendTextMessage(MESSAGE_STATUS_DEFAULT, "Parabens, o item foi forjado.")
			player:getPosition():sendMagicEffect(50)
		else
			player:sendTextMessage(MESSAGE_STATUS_SMALL, "Este item nao pode ser forjado.")
			player:getPosition():sendMagicEffect(CONST_ME_POFF)
			return false
		end
	end

	return true
end


forge:id(24963)
forge:register()

 

 

Eu coloquei esse código em scripts/custom e deletei a linha 19 e o substituí por isso

 

if targetTier > 0 and rand > chance[targetTier] then

 

pd: Muito obrigado

Link para o post
Compartilhar em outros sites
  • 1 month later...

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