Ir para conteúdo

Featured Replies

  • Respostas 47
  • Visualizações 9.6k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

Postado
  • Autor

ao que tudo indica, sim

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

  • 4 years later...
Postado

Oi, Wolf. Desculpe reviver um tópico de 2014 kkk

Eu vi seu sistema e gostei, só que uso TFS 1.3, então resolvi tentar fazer algo parecido. 
Teria basicamente as mesmas funções, só que eu quero adicionar algo para quando o jogador ser atacado voltar a ficar visível por x segundos e depois ficar invisível novamente (sem o ring ser removido)
E, bem, ao inicio do desenvolvimento do script me deparei com um pequeno problema: o modo invisível faz com que os jogadores não possam ser atacados. 
Sabe me dizer como posso resolver isso? 

Postado
  • Autor

@Eduardozim eu vou te explicar com o maior número de detalhes que eu conseguir mas não vou poder fazer o código pra você.
1. Depois que eu fiz esse sistema e fui testar num sv de verdade eu notei que realmente usando a função de ghost ele trata o jogador como gamemaster (não atacável, etc). Pra contornar isso você precisa usar somente a função de setar outfit, mas usando uma peculiaridade dela que pouca gente conhece que é a de usar lookTypeEx
(ex: setOutfit({lookType = 267})

Com o lookTypeEx você consegue passar um id de um item para que o jogador fique com a looktype do item, o 267 no caso é um id que no tibia original é um chão sem imagem, logo vc ficará invisível, contudo outros jogadores ainda poderão ver seu nome/vida. Para ficar com a vida e nome invisivel você usa a função creature:setHiddenHealth(true).

No seu caso, você precisa fazer o seguinte, qnd equipar o ring ativar o movements que seta hiddenHealth = true e deixa esse outfit no player. E aí você faz um creaturescripts onHealthChange que se o jogador tiver com hiddenHealth ele perde o hiddenHealth e remove a condition de outfit. Aí nessa mesma lógica você faz uma função recursiva (semelhante com a do tópico)

function lifesteal(cid)
	steal = addEvent(lifesteal, 1000*tempo, cid)
		if isCreature(cid) then
			doSendAnimatedText(getCreaturePos(cid), "-"..math.floor((getCreatureMaxHealth(cid) * (percent/100))), 144, cid)
			doCreatureAddHealth(cid, -math.floor(getCreatureMaxHealth(cid) * (percent/100)))
		end	
	end	 
lifesteal(cid)

só que pra checar se o jogador está com battle, ela vai ficar chamando a si mesma de 1 em 1 segundo até o jogador não ter mais battle. Assim q ele perder o battle, vc seta hidden health e o outfit dnv

 

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Postado

@xWhiteWolf, mano consegui resolver isso com a ajuda de um membro da Otland (nesse caso a ajuda foi referente a em que lugar da source eu poderia alterar para que o ghostmode identificasse que o jogador de fato deve ser atacado pois não tem acesso de gm/god

O que fiz foi o seguinte

Eu alterei a função que era para todos os players e coloquei para que somente se for god ou gm ele não possa ser atacado (em game.cpp


Na pasta src/game.cpp troque da linha 3738 até a linha 3747 por:

Spoiler

bool Game::combatBlockHit(CombatDamage& damage, Creature* attacker, Creature* target, bool checkDefense, bool checkArmor, bool field)

{

    Player* targetPlayer = target->getPlayer();

    if (damage.primary.type == COMBAT_NONE && damage.secondary.type == COMBAT_NONE) {

        return true;

    }

 

    if (target->isInGhostMode() && targetPlayer->getAccountType() < ACCOUNT_TYPE_GAMEMASTER && targetPlayer->getAccountType() < ACCOUNT_TYPE_GOD) {

        return true;

 

Passei dias mexendo para conseguir fazer essa função funcionar, espero que seja de bom uso para quem vier aqui. Já aproveito para deixar o script que criei (funciona para tfs 1.3, to usando a base do maluco)

Lembrando que o script só deixa invisível e retira a invisbilidade (on equip e deequip) porém está sem nenhuma condition (como as que você colocou no seu script.) essa parte eu ainda irei criar para o meu ot.

Espero que seja de bom uso mano, e se puder adicionar isso ao post, acho q ajudaria muita gente.

 

Spoiler

function onEquip(cid, item, slot)
local player = Player(cid)
    if isPlayer() then
        return true
    end
    
    local position = player:getPosition()
    local isGhost = not player:isInGhostMode()
        item:transform(2202)
        player:setGhostMode(isGhost)
        player:sendTextMessage(MESSAGE_INFO_DESCR, "You are invisible.")
        -- position.x = position.x + 1
        position:sendMagicEffect(67)
    return true
end

function onDeEquip(cid, item, slot)
local player = Player(cid)
    if isPlayer() then
        return true
    end

    local position = player:getPosition()
    local isGhost = not player:isInGhostMode()
        item:transform(2165)
        player:setGhostMode(isGhost)
        player:sendTextMessage(MESSAGE_INFO_DESCR, "You are visible again.")
        -- position.x = position.x + 1
        position:sendMagicEffect(67)
    return true
end

 

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

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo