Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Então, não sei se é o lugar certo, porém eu queria saber se dá pra quando clicar no Tibia: Set Outfit, ele executar uma talkaction (do servidor) automaticamente..

Exemplo:
Tô no char e coloco Set Outfit, ai já executa uma talkaction.
Tenho acesso as sources do servidor, ao hex editor do Client do Tibia, e pode ser utilizado qualquer coisa..

Obs: Não quero que execute quando troca outfit, apenas quando APERTA no Set Outfit.

Só utilizo Tibia Client no meu servidor. Não quero recomendação pra ot client (por enquanto)

Se puderem me ajudar, agradeço de coração!

Link para o post
Compartilhar em outros sites

Nas sources ,creio eu que se achar a função ,do set oufit,tem como fazer para aparecer um box na tela com a mensagem,mas por talkactions acho que não

 

CM13.png

 

Mais ou menos nesse estilo..

Ajudei ? Clique em GOSTEI!

Skype : neoowned
Link para o post
Compartilhar em outros sites

Não sei te dizer,mas 

CM2.png

 

essa tela pode ser como exemplo também,e no tibiaclient normal ,ela aparece

Ajudei ? Clique em GOSTEI!

Skype : neoowned
Link para o post
Compartilhar em outros sites

Dei uma vasculhada aqui nas sources e creio que é essa parte que faz a mágica:

sendOutfitWindow

Achei ela em Protocolgame.cpp e creio que é lá que meche..
Eu queria remover tudo do sendOutfitWindow e colocar pra aparecer a janela !spells
Ou seja, eu não quero que execute a talkaction, mas sim que apareça o script que está no talkaction !spells
Aí o que eu ia fazer:
Trocar no hex editor o Set Outfit para Spells e nas sources de vez aparecer a janela das outfit, aparecer a janela das spells..
Eu não uso o Set Outfit no meu servidor pois é de Naruto, então pode remover tudo..
Alguem pode me ajudar? Em progamação não sei nada, nadinha..
Tentei encachar o 

 

doCreatureExecuteTalkAction(player, "!jutsu", true) 

Mais não deu muito certo kkkk.

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

Não sei te dizer,mas 

CM2.png

 

essa tela pode ser como exemplo também,e no tibiaclient normal ,ela aparece

As dangerous não é feita a partir de source nem cliente.

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

Não.. É o seguinte:
A Opção Set Outfit do Client do Tibia pra trocar a outfit sabe?
Eu queria colocar essa opção Set Outfit pra abrir a janela !spells

Entendeu agora?

A janela !spells é uma talkaction.

Então eu não queria que a opção Set Outfit mostrasse as outfits, mas sim para que ela executasse uma talkaction que é a !spells.
 

Link para o post
Compartilhar em outros sites

Hm, em game.cpp, tenta trocar:

bool Game::playerRequestOutfit(uint32_t playerId)
{    
    Player* player = getPlayerByID(playerId);   
    if(!player || player->isRemoved())    
        return false;     
    player->sendOutfitWindow();    
    return true;
}

por:

bool Game::playerRequestOutfit(uint32_t playerId)
{   
    std::string text = "!spells";   
    Player* player = getPlayerByID(playerId); 
    if(!player || player->isRemoved())       
        return false;    
    g_talkActions->onPlayerSay(player, CHANNEL_DEFAULT, text, false);
    player->hasRequestedOutfit(true);
    return true;
}

@sxeinjected

Versões mais antigas não tem modalwindow.

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

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

Namoral zipter, posso ser seu discipulo?
Funcionou..

 

@Edit

 

Quando eu aperto na janela, aparece a talkaction tudo certo, ai eu dou ok, quando eu tento de novo não acontece nada..
Acho que após eu apertar na janela Set Outfit, quando eu tento de novo deve ta dando algum return false.
Porém eu não sei onde é..

Pode ajudar?

 

Obs: só relogando que da pra por Set Outfit de novo.

Obs²: Quando eu coloquei a função 

player->sendOutfitWindow();

e dei ok na tela da outfit deu pra ir de novo..

Então é alguma coisa dentro do sendOutfit que faz poder dar de novo..
Alguem pode me ajudar?

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

entendi @zipter98,sabia que era algo na source pra modificar,mas como ... ,ai é outra historia ,repp++,mt bom :D

Ajudei ? Clique em GOSTEI!

Skype : neoowned
Link para o post
Compartilhar em outros sites

Zipter, o código está correto.

Deixa eu explicar corretamente.

Ele usa a talkaction !spells na primeira vez.
Quando eu do OK na TALKACTION(Janela), eu tento por de novo e não vai.
Ai eu acrescentei a função:

player->sendOutfitWindow();

E quando eu coloquei lá, foi na primeira vez e a pareceu a janela pra dar OK na outfit, aí deu pra ir de novo.
Sem essa função, só vai na primeira, na segunda vez não vai..
Então na função sendOutfit, deve ter alguma função que tipo coloca: Deu ok, pode de novo, se não deu OK, deu um return false..

Entendeu? 

Eu queria modificar essa função:

void ProtocolGame::sendOutfitWindow()
{
	NetworkMessage_ptr msg = getOutputBuffer();
	if(msg)
	{
		TRACK_MESSAGE(msg);
		msg->put<char>(0xC8);
		AddCreatureOutfit(msg, player, player->getDefaultOutfit(), true);

		std::list<Outfit> outfitList;
		for(OutfitMap::iterator it = player->outfits.begin(); it != player->outfits.end(); ++it)
		{
			if(player->canWearOutfit(it->first, it->second.addons))
				outfitList.push_back(it->second);
		}

 		if(outfitList.size())
		{
			msg->put<char>((size_t)std::min((size_t)OUTFITS_MAX_NUMBER, outfitList.size()));
			std::list<Outfit>::iterator it = outfitList.begin();
			for(int32_t i = 0; it != outfitList.end() && i < OUTFITS_MAX_NUMBER; ++it, ++i)
			{
				msg->put<uint16_t>(it->lookType);
				msg->putString(it->name);
				if(player->hasCustomFlag(PlayerCustomFlag_CanWearAllAddons))
					msg->put<char>(0x03);
				else if(!g_config.getBool(ConfigManager::ADDONS_PREMIUM) || player->isPremium())
					msg->put<char>(it->addons);
				else
					msg->put<char>(0x00);
			}
		}
		else
		{
			msg->put<char>(1);
			msg->put<uint16_t>(player->getDefaultOutfit().lookType);
			msg->putString("Your outfit");
			msg->put<char>(player->getDefaultOutfit().lookAddons);
		}

		player->hasRequestedOutfit(true);
	}



Pois assim eu posso deixar lá no Script a função player->sendOutfitWindow
E nessa função de vez por tudo isso, só fazer nada..
Só que se eu apago a função toda nessa ai em cima em spoiler, o negocio não funciona..
Quando der, se você poder me ajudar eu agradeço..
Não precisa ter muita pressa, nas suas horas vagas..
Obrigado :)

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

Ah, compreendo. Nesse caso, tente assim:

bool Game::playerRequestOutfit(uint32_t playerId)
{   
    std::string text = "!spells";   
    Player* player = getPlayerByID(playerId); 
    if(!player || player->isRemoved())       
        return false;    
    g_talkActions->onPlayerSay(player, CHANNEL_DEFAULT, text, false);
    player->hasRequestedOutfit(true);
    return true;
}

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites
  • 3 months later...

tenta assim

 

bool Game::playerRequestOutfit(uint32_t playerId)
{   
    std::string text = "!spells";   
    Player* player = getPlayerByID(playerId); 
    if(!player || player->isRemoved())       
        return false;    
    g_talkActions->onPlayerSay(player, CHANNEL_DEFAULT, text, false);
    return true;
}

Link para o post
Compartilhar em outros sites
  • 6 years later...

desculpa por abrir o tópico novamente, mais como seria se eu fizesse isso no TFS 1.3 ?

 

 

void Game::playerRequestOutfit(uint32_t playerId)
{
    if (!g_config.getBoolean(ConfigManager::ALLOW_CHANGEOUTFIT)) {
        return;
    }

    Player* player = getPlayerByID(playerId);
    if (!player) {
        return;
    }
    
    player->sendOutfitWindow();
}

Editado por Damatio (veja o histórico de edições)
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 amoxicilina
      Olá Kings, venho aqui trazer uma TalkAction pra você comprar premium account, sei que pode ser algo meio inútil por existir a store.
      Então vamos script:
       
       
    • Por RankerS
      Hoje estarei disponibilizando um outfit criado por mim para vocês do TK .
      sakuraskin_1915.obd
    • Por CoachLord
      Opa, tudo bom? 
      Eu estou adicionando novas outfit no servidor aqui, elas sao maiores e necessitam de deslocamento, porem quando eu edito o deslocamento no Object Builder, ele nao funciona no game.
      Versão 12.64 
    • Por Erimyth
      Fala galerinha eu estava e um amigo meu me pediu um script de health e mana por talkaction por MSN, fiz ele e resolvi postar-lo aqui no TK para a galera usar-lo.

      Vá em data > talkactions > talkactions.xml e adicione a seguinte tag:

      <talkaction words="!buyhealth;!buymana" event="script" value="buylife.lua">
      Agora vá até a pasta scripts dentro de talkactions, crie um arquivo chamado buylife.lua com isto dentro:
      -- [( Script created by Matheus for TibiaKing.com )] -- function onSay(cid, words, param) local health = 1000 -- Vida que será adicionada ao player após ele usar o comando! local mana = 1000 -- Mana que será adicionada ao player após ele usar o comando! local cost = 10000 -- Preço para você comprar mana ou health! if (words == "!buymana") then if (doPlayerRemoveMoney(cid, cost) == TRUE) then doCreatureAddMana(cid, mana) doSendMagicEffect(getCreaturePosition(cid), 12) else doPlayerSendCancel(cid, "Sorry, you need "..cost.." gold coins to buy mana.") return TRUE end elseif (words == "!buyhealth") then if (doPlayerRemoveMoney(cid, cost) == TRUE) then doCreatureAddHealth(cid, health) doSendMagicEffect(getCreaturePosition(cid), 12) else doPlayerSendCancel(cid, "Sorry, you need "..cost.." gold coins to buy mana.") end return TRUE end end
      Prontinho, espero que gostem, é um script bem simples mas pode ser útil para alguns.  
        Você gostou deste conteúdo!? Este conteúdo te ajudou!? Isso será realmente útil pra você!? Então, se possível, faça uma doação (de qualquer valor) que estará me ajudando também!  
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo