Ir para conteúdo

Featured Replies

Postado
  • Autor
3 hours ago, Eduardozim said:

@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:

  Hide contents

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.

 

  Hide contents

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

 

 

obrigado pela contribuição!
Outra forma sem incluir source editing poderia ser setar a outfit como a de algum item invisivel (procura algum no object builder) e dar setHiddenHealth, tem o mesmo efeito!

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)

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

Top Posters In This Topic

Most Popular Posts

Postado

@Eduardozim 

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

Tá estranho essa verificação, no caso, você está bloqueando hit para todos os players que não são GOD (e estão invisível - detalhe: targetPlayer não foi instanciado na função), não acha? Posso está enganado, mas... se quer que o hit seja bloqueado apenas para GM para cima e que estejam invisíveis, seria mais ou menos assim:

if (target->getPlayer() && target->isInGhostMode() && target->getPlayer()->getAccountType() > ACCOUNT_TYPE_SENIORTUTOR) {



 

Feliz daquele que ensina o que sabe, e aprende o que ensina.

 

               

star-wars-animated-gif-23.gif

Postado

@lordzetros 
Como eu postei funcionou normalmente, verifica se o jogador é god ou gm, se for então não poderá ser atacado, se for player vai poder ser atacado.

Salvo engano "target"(que foi iniciada dentro do bool) leva a "getPlayer()"

Tentei mais ou menos da maneira que você falou, mas não funcionou. 

O uso dessa função eu peguei dentro do próprio game.cpp, mas em outra linha, então só repliquei e coloquei a "player * targetPlayer = ..."

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

  • 5 weeks later...
Postado

O meu nao deu certo, podem me ajudar? uso 8.6

 

Edit 1: quero usar a primeira opçao que da 3% de dado a cada segundo

Edit 2: consegui usar, configurei tudo certinho, mas queria saber se tem como fazer o player que fica invisivel não pode atacar nada e nem usar skill

Editado por fritsche2002
Informaçoes faltando (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.6k

Informação Importante

Confirmação de Termo