Ir para conteúdo
  • Cadastre-se

[RESOLVIDO] [C++] -=[TFS]=- 0.3.6 - 8.60 [BUG] Player Atravessa Player no Depot Ele Entra Dentro do Player


Posts Recomendados

@L3K0T Testei todos os códigos e continua atravessando player no depot.

 

protectionLevel = 1 quando ta 1 ele não passa através do player quando ta 2 ou 3 ele passa através do player no depot

 

o problema ta no protectionLevel

 

ja puis no pvp zone tool no tile nao adiantou

 

apareceu quantos itens tenho no depot

 

https://prnt.sc/ONinQz6oJqsK

 

mais continua atravessando player no depot

 

 <item fromid="11059" toid="11060" name="glowing switch">

Editado por Muvukaa (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Sub-Admin
1 hora atrás, Muvukaa disse:

@L3K0T Testei todos os códigos e continua atravessando player no depot.

 

protectionLevel = 1 quando ta 1 ele não passa através do player quando ta 2 ou 3 ele passa através do player no depot

 

o problema ta no protectionLevel

 

ja puis no pvp zone tool no tile nao adiantou

 

apareceu quantos itens tenho no depot

 

https://prnt.sc/ONinQz6oJqsK

 

mais continua atravessando player no depot

 

 <item fromid="11059" toid="11060" name="glowing switch">

porque n desativar então o proteção? e ativar modo pvp por nivel?

 

function onCombat(cid, target)

    -- Verificações gerais
    if not isPlayer(target) then
        return true
    end

    -- Verificações de nível para PVP
    if getPlayerLevel(target) < 80 then
        doPlayerSendTextMessage(cid, 25, "PVP é a partir do level 80.")
        return false
    end
    if getPlayerLevel(cid) < 80 then
        doPlayerSendTextMessage(cid, 25, "PVP é a partir do level 80.")
        return false
    end

    -- Verificações de skulls
    if getCreatureSkullType(cid) == 1 then
        return true
    end
	
    if getCreatureSkullType(cid) >= 3 and getCreatureSkullType(target) >= 3 then
        return true
    end


    if isPlayer(cid) then
        return true
    end
	
end

 

 

<event type="combat" name="semcombate" registerTo="semcombate" event="script" value="semcombate.lua"/>

 

login.lua:     registerCreatureEvent(cid, "semcombate")

 

assim vc desativa a proteção e o player n passar mais entro do dp

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

Link para o post
Compartilhar em outros sites

@L3K0T eu fiz adaptação porem deu certo mais ele entra dentro do player depois sai e nao da pra entra mais o problema é que ele entra dentro do player no tile id 11059 ele entra uma vez dentro depois nao entra mais

 

Esse Script *

function onCombat(cid, target)

Não deu certo eu to usando CHATGPT PRA CODIGO C++ NA SOURCE

 

TO FOCANDO AQUI NO CHATGPT:

 

bool Player::canWalkthrough(const Creature* creature) const
{
    if(creature == this || hasCustomFlag(PlayerCustomFlag_CanWalkthrough) || creature->isWalkable() ||
        (creature->getMaster() && creature->getMaster() != this && canWalkthrough(creature->getMaster())))
        return true;

    const Player* player = creature->getPlayer();
    if(!player)
        return false;

    // Verificação para o tile específico ID 11059
    if(player->getTile()->ground->getID() == 11059)
        return false;

    if((((g_game.getWorldType() == WORLD_TYPE_NO_PVP &&
        player->getVocation()->isAttackable()) || player->getTile()->hasFlag(TILESTATE_PROTECTIONZONE) || (player->getVocation()->isAttackable() &&
        player->getLevel() < (uint32_t)g_config.getNumber(ConfigManager::PROTECTION_LEVEL))) && player->getTile()->ground) &&
        (!player->hasCustomFlag(PlayerCustomFlag_GamemasterPrivileges)
        || player->getAccess() <= getAccess()))
        return true;

    return (player->isGhost() && getGhostAccess() < player->getGhostAccess())
        || (isGhost() && getGhostAccess() > player->getGhostAccess());
}

 

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

spacer.png

 

Player.cpp ::CODE:: C++

 

bool Player::canWalkthrough(const Creature* creature) const
{
    // Verificação básica para permitir travessia em casos permitidos
    if (creature == this || hasCustomFlag(PlayerCustomFlag_CanWalkthrough) || creature->isWalkable() ||
        (creature->getMaster() && creature->getMaster() != this && canWalkthrough(creature->getMaster())))
        return true;

    const Player* player = creature->getPlayer();
    if (!player)
        return false;

    // Verificação para o tile específico ID 11060
    if (this->getTile() && this->getTile()->ground && this->getTile()->ground->getID() == 11060 &&
        player->getTile() && player->getTile()->ground && player->getTile()->ground->getID() == 11060)
    {
        // Verifica se os jogadores estão exatamente na mesma posição
        if (this->getPosition() == player->getPosition()) {
            return false; // Impede a travessia se estiverem na mesma posição
        }
    }

    // Verificações adicionais para áreas de proteção e PvP
    if (((g_game.getWorldType() == WORLD_TYPE_NO_PVP && player->getVocation() && player->getVocation()->isAttackable()) ||
        (player->getTile() && player->getTile()->hasFlag(TILESTATE_PROTECTIONZONE)) ||
        (player->getVocation() && player->getVocation()->isAttackable() && player->getLevel() < (uint32_t)g_config.getNumber(ConfigManager::PROTECTION_LEVEL))) &&
        player->getTile() && player->getTile()->ground &&
        (!player->hasCustomFlag(PlayerCustomFlag_GamemasterPrivileges) || player->getAccess() <= getAccess()))
        return true;

    // Verificação se um dos jogadores é um fantasma
    return (player->isGhost() && getGhostAccess() < player->getGhostAccess())
        || (isGhost() && getGhostAccess() > player->getGhostAccess());
}

 

Link para o post
Compartilhar em outros sites

[SOURCE]: COMPILADOR DEV -C++ [C++] TFS 0.3.6 8.60 

[RESOLVIDO]

 

PRA QUEM ENFRENTA ESSE PROBLEMA É SÓ SUBSTITUI TILE 11059 POR 11060 E COLOCA ESSE CODIGO NA SOURCE Player.cpp e no items.xml

 

	</item>
	 <item id="11059" name="glowing switch">
	</item>
 <item id="11060" name="glowing switch">
<attribute key="walkStack" value="0"/>
	</item>

 

PROCURE POR 

 

bool Player::canWalkthrough(const Creature* creature) const

 

SUBSTITUI POR ESSE EM BAIXO

 

 

bool Player::canWalkthrough(const Creature* creature) const
{
    if (creature == this || hasCustomFlag(PlayerCustomFlag_CanWalkthrough) || creature->isWalkable() ||
        (creature->getMaster() && creature->getMaster() != this && canWalkthrough(creature->getMaster())))
        return true;

    const Player* player = creature->getPlayer();
    if (!player)
        return false;

    const Tile* playerTile = player->getTile();

    // Verificar se a tile do jogador de destino é 11060 e não permitir atravessar
    if (playerTile && playerTile->ground && playerTile->ground->getID() == 11060)
        return false;

    // Permitir atravessar em áreas de proteção, exceto na tile 11060
    if (playerTile && playerTile->hasFlag(TILESTATE_PROTECTIONZONE))
        return true;

    if ((((g_game.getWorldType() == WORLD_TYPE_NO_PVP &&
        player->getVocation()->isAttackable()) || (playerTile && playerTile->hasFlag(TILESTATE_PROTECTIONZONE)) || (player->getVocation()->isAttackable() &&
        player->getLevel() < (uint32_t)g_config.getNumber(ConfigManager::PROTECTION_LEVEL))) && playerTile->ground) &&
        (!player->hasCustomFlag(PlayerCustomFlag_GamemasterPrivileges)
        || player->getAccess() <= getAccess()))
        return true;

    return (player->isGhost() && getGhostAccess() < player->getGhostAccess())
        || (isGhost() && getGhostAccess() > player->getGhostAccess());
}

 

QUALQUER LEVEL NÃO ENTRA PODE DEIXA protectionLevel = 1 QUE LEVEL QUISER.

movements tiles.lua substitua seu por esse:

local config = {
	maxLevel = getConfigInfo('maximumDoorLevel')
}

local increasingItems = {[416] = 417, [426] = 425, [446] = 447, [3216] = 3217, [3202] = 3215, [11059] = 11060}
local decreasingItems = {[417] = 416, [425] = 426, [447] = 446, [3217] = 3216, [3215] = 3202, [11060] = 11059}
local depots = {2589, 2590, 2591, 2592}

local checkCreature = {isPlayer, isMonster, isNpc}
local function pushBack(cid, position, fromPosition, displayMessage)
	doTeleportThing(cid, fromPosition, false)
	doSendMagicEffect(position, CONST_ME_MAGIC_BLUE)
	if(displayMessage) then
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "The tile seems to be protected against unwanted intruders.")
	end
end

function onStepIn(cid, item, position, fromPosition)
	if(not increasingItems[item.itemid]) then
		return false
	end

	if(not isPlayerGhost(cid)) then
		doTransformItem(item.uid, increasingItems[item.itemid])
	end

	if(item.actionid >= 194 and item.actionid <= 196) then
		local f = checkCreature[item.actionid - 193]
		if(f(cid)) then
			pushBack(cid, position, fromPosition, false)
		end

		return true
	end

	if(item.actionid >= 191 and item.actionid <= 193) then
		local f = checkCreature[item.actionid - 190]
		if(not f(cid)) then
			pushBack(cid, position, fromPosition, false)
		end

		return true
	end

	if(not isPlayer(cid)) then
		return true
	end

	if(item.actionid == 189 and not isPremium(cid)) then
		pushBack(cid, position, fromPosition, true)
		return true
	end

	local gender = item.actionid - 186
	if(isInArray({PLAYERSEX_FEMALE,  PLAYERSEX_MALE, PLAYERSEX_GAMEMASTER}, gender)) then
		if(gender ~= getPlayerSex(cid)) then
			pushBack(cid, position, fromPosition, true)
		end

		return true
	end

	local skull = item.actionid - 180
	if(skull >= SKULL_NONE and skull <= SKULL_BLACK) then
		if(skull ~= getCreatureSkullType(cid)) then
			pushBack(cid, position, fromPosition, true)
		end

		return true
	end

	local group = item.actionid - 150
	if(group >= 0 and group < 30) then
		if(group > getPlayerGroupId(cid)) then
			pushBack(cid, position, fromPosition, true)
		end

		return true
	end

	local vocation = item.actionid - 100
	if(vocation >= 0 and vocation < 50) then
		local playerVocationInfo = getVocationInfo(getPlayerVocation(cid))
		if(playerVocationInfo.id ~= vocation and playerVocationInfo.fromVocation ~= vocation) then
			pushBack(cid, position, fromPosition, true)
		end

		return true
	end

	if(item.actionid >= 1000 and item.actionid <= config.maxLevel) then
		if(getPlayerLevel(cid) < item.actionid - 1000) then
			pushBack(cid, position, fromPosition, true)
		end

		return true
	end

	if(item.actionid ~= 0 and getPlayerStorageValue(cid, item.actionid) <= 0) then
		pushBack(cid, position, fromPosition, true)
		return true
	end

	if(getTileInfo(position).protection) then
		local depotPos, depot = getCreatureLookPosition(cid), {}
		depotPos.stackpos = STACKPOS_GROUND
		while(true) do
			if(not getTileInfo(depotPos).depot) then
				break
			end

			depotPos.stackpos = depotPos.stackpos + 1
			depot = getThingFromPos(depotPos)
			if(depot.uid == 0) then
				break
			end

			if(isInArray(depots, depot.itemid)) then
				local depotItems = getPlayerDepotItems(cid, getDepotId(depot.uid))
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, "Your depot contains " .. depotItems .. " item" .. (depotItems > 1 and "s" or "") .. ".")
				break
			end
		end

		return true
	end

	return false
end

function onStepOut(cid, item, position, fromPosition)
	if(not decreasingItems[item.itemid]) then
		return false
	end

	if(not isPlayerGhost(cid)) then
		doTransformItem(item.uid, decreasingItems[item.itemid])
		return true
	end

	return false
end

 

Link para o post
Compartilhar em outros sites
  • Muvukaa mudou o título para [RESOLVIDO] [C++] -=[TFS]=- 0.3.6 - 8.60 [BUG] Player Atravessa Player no Depot Ele Entra Dentro do Player

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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo