Ir para conteúdo
  • Cadastre-se

Programação C++ Attack speed - spells, itens e onde você quiser.


Posts Recomendados

Olá pessoa, estou aqui outra vez trazendo o código semanal, para essa semana vou apresentar uma modificação nas sources que permite que o attack speed do jogador seja modificado.

Para fazer isso, é necessário primeiro compilar as sources que permitam essa funcionalidade. Então abra o arquivo player.cpp e de CTRL + F na função uint32_t Player::getAttackSpeed() const e substitua por:
 

uint32_t Player::getAttackSpeed() const
{
    int32_t attackSpeedValue = 0;
    std::string value;
    this->getStorage("8500", value);
    if (value != "-1") {
         attackSpeedValue = atoi(value.c_str()) * 5;
    }
    int32_t vocationAttackSpeed = vocation->getAttackSpeed();
    if (attackSpeedValue > vocationAttackSpeed/2){
       attackSpeedValue = vocationAttackSpeed/2;                
    }
	return vocation->getAttackSpeed() - attackSpeedValue;
}

 

Lembrando que esse script foi feito e testado a partir das sources: tfs 0.4 rev 3884 e também tfs 0.4 rev 3777. Porém deve com poucas modificações deve funcionar em outras versões.

 

O que ele faz: ele verifica o valor da storage número 8500 do jogador e faz o seguinte cálculo:
attackSpeedDaVocacao - valorStorage * 5
Sendo que o máximo de speed attack que o jogador pode atingir é o dobro da configurada na sua vocação.

 

Após isso é só compilar e utilizar em qualquer outro script, para aumentar o speed attack do jogador. Para fazer isso é só alterar o valor da storage número 8500 do player.

 

Para utilizar isso, pode ser criada uma spell, eu fiz da seguinte maneira:

1) Na sua pasta de spells crie um arquivo e coloque isso dentro:
 

local config = { 
   time = 3, -- segundos que ira durar o efeito
   value = 100 -- quantos milisegundos / 5 que ira aumentar
} 

function onCastSpell(cid, var)
  setPlayerStorageValue(cid, 8500, config.value);
  addEvent(finishSpell, config.time, cid)
  doSendMagicEffect(getPlayerPosition(cid), 11)
  return true
end

function finishSpell(cid)
  if (isCreature(cid)) then
    setPlayerStorageValue(cid, 8500, 0)
    doSendMagicEffect(getPlayerPosition(cid), 4)
  end

end

2) Configure no spells.xml:
 

	<instant name="Nome da spell" words="exeta kor" lvl="25" manapercent="20" prem="1" aggressive="0" exhaustion="1000" needlearn="0" event="script" value="caminho de onde voce deixou o codigo">
		<vocation id="4"/>
	</instant>

 

Porém fazendo isso tem um problema, caso o jogador solte a spell e deslogue, ele ficaria para sempre com a attack speed daquela forma.. Então vamos adicionar no login.lua o seguinte:

if getPlayerStorageValue(cid, 8500) ~= 0 then
        setPlayerStorageValue(cid, 8500, 0) 
end

 

Pronto, agora você pode utilizar uma spell que aumenta o speed attack do seu personagem.

 

 

Para criar itens que deem attack speed:
1) Após compilar as sources, crie um arquivo em movements e coloque o seguinte código:

 

local items = {
	[2500] = 5, -- amazon armor, onde 2500 e o id da amazon armor e 5 e a quantidade de attack speed /5 do que vai ser aumentado
	[2499] = 10, -- amazon helmet, 2499 e o id do helmet e 10 a quantidade de attack speed/5 do que vai ser aumentado
	[2506] = 15 -- dragon scale helmet, igual aos de cima..
}


local config = { 
	storage = 8500,
} 

function onEquip(cid, item, slot)
	local quantity = (items[item.itemid]);
	setPlayerStorageValue(cid, (config.storage), quantity)
	return true
end
 
function onDeEquip(cid, item, slot)
	local quantity = (items[item.itemid])
	setPlayerStorageValue(cid, (config.storage), 0)
	return true
end

2) Em movements.xml adicione:

 

	<movevent type="Equip" itemid="ID DO ITEM" slot="armor" function="onEquipItem" script="caminho do scriot" /> 
	<movevent type="DeEquip" itemid="ID DO ITEM" slot="armor" function="onDeEquipItem" script="caminho do script" />

 

Note que você precisa apenas um arquivo .lua para todas as configurações de itens..

 

É isso ai, lembrando que as TFS testadas foram 0.4 rev 3884 e 0.4 rev 3777. Qualquer modificação que vocês quiserem para tfs 0.4, deixem nos comentários.

 

Caso alguém não saiba compilar, sigam esse tutorial:
https://tibiaking.com/forums/topic/33548-dev-c-compilando-tfs-no-windows/

Toda terça-feira um tópico novo:

Descanso para curar mana (Spell): https://tibiaking.com/forums/topic/94615-spell-descanso-para-curar-mana/

Peça sua spell (Suporte):                https://tibiaking.com/forums/topic/84162-peça-sua-spell/                        

Chuva de flechas (Spell):                https://tibiaking.com/forums/topic/72232-chuva-de-flechas-spell/

Doom (Spell):                                https://tibiaking.com/forums/topic/51622-doom-spell/

Utilização do VS Code (Infra)       https://tibiaking.com/forums/topic/94463-utilizando-o-visual-studio-code-notepad-nunca-mais/

SD com Combo (Spell):                 https://tibiaking.com/forums/topic/94520-sd-modificada/

Alteração attack speed (C++):        https://tibiaking.com/forums/topic/94714-c-attack-speed-spells-itens-e-onde-você-quiser/  

Bônus de Speed (NPC)                  https://tibiaking.com/forums/topic/94809-npc-concede-bônus-aos-players/
 

Link para o post
Compartilhar em outros sites

Parabéns, seu tópico de conteúdo foi aprovado!
Muito obrigado pela sua contribuição, nós do Tibia King agradecemos.
Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.

Spoiler

Congratulations, your content has been approved!
Thank you for your contribution, we of Tibia King we are grateful.
Your content will help many other users, you received +1 REP.

 

Compre seus Scripts Agora totalmente seguro e de forma rápida, aceitamos também encomendas.

discord.gg/phJZeHa2k4

 

Projeto ATS (Naruto)

Informações Abaixo

Facebook

Youtube
Discord

 

Tutoriais / Conteúdos

Clique Aqui

Link para o post
Compartilhar em outros sites
  • 2 weeks later...
../../src/player.cpp:4116: error: prototype for 'uint32_t Player::getAttackSpeed() const' does not match any in class 'Player'
../../src/player.h:670: error: candidate is: uint32_t Player::getAttackSpeed()
mingw32-make: *** [obj//player.o] Error 1

Tentando compilar em 0.3.6 8.54

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

opa, só vi hoje, manda ai o seu método que calcula attack speed por favor

Toda terça-feira um tópico novo:

Descanso para curar mana (Spell): https://tibiaking.com/forums/topic/94615-spell-descanso-para-curar-mana/

Peça sua spell (Suporte):                https://tibiaking.com/forums/topic/84162-peça-sua-spell/                        

Chuva de flechas (Spell):                https://tibiaking.com/forums/topic/72232-chuva-de-flechas-spell/

Doom (Spell):                                https://tibiaking.com/forums/topic/51622-doom-spell/

Utilização do VS Code (Infra)       https://tibiaking.com/forums/topic/94463-utilizando-o-visual-studio-code-notepad-nunca-mais/

SD com Combo (Spell):                 https://tibiaking.com/forums/topic/94520-sd-modificada/

Alteração attack speed (C++):        https://tibiaking.com/forums/topic/94714-c-attack-speed-spells-itens-e-onde-você-quiser/  

Bônus de Speed (NPC)                  https://tibiaking.com/forums/topic/94809-npc-concede-bônus-aos-players/
 

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

@Reds 

a source que uso já existe modificações na uint32_t Player::getAttackSpeed() const

uint32_t Player::getAttackSpeed() const
{

int32_t SpeedAttack;
	SpeedAttack = getSkill(SKILL_FIST, SKILL_LEVEL);
  
  if(SpeedAttack < 10)
	SpeedAttack = 3000;
 else if(SpeedAttack >= 10 && SpeedAttack < 20)
    SpeedAttack = 2800;
 else if(SpeedAttack >= 20 && SpeedAttack < 30)
    SpeedAttack = 2600;
 else if(SpeedAttack >= 30 && SpeedAttack < 40)
    SpeedAttack = 2400;
 else if(SpeedAttack >= 40 && SpeedAttack < 50)
    SpeedAttack = 2200;
 else if(SpeedAttack >= 50 && SpeedAttack < 60)
    SpeedAttack = 2000;
 else if(SpeedAttack >= 60 && SpeedAttack < 70)
    SpeedAttack = 1800;
 else if(SpeedAttack >= 70 && SpeedAttack < 80)
    SpeedAttack = 1600;
 else if(SpeedAttack >= 80 && SpeedAttack < 90)
    SpeedAttack = 1400;
 else if(SpeedAttack >= 90 && SpeedAttack < 100)
    SpeedAttack = 1200;
 else if(SpeedAttack >= 100 && SpeedAttack < 110)
    SpeedAttack = 1000;
 else if(SpeedAttack >= 110 && SpeedAttack < 120)
    SpeedAttack = 800;
 else if(SpeedAttack >= 120 && SpeedAttack < 130)
    SpeedAttack = 600;
  else
    SpeedAttack = 400;   
    
  return SpeedAttack;
}

existe alguma forma de conciliar as duas?

Link para o post
Compartilhar em outros sites

Você alterou algo no nome da função?

uint32_t Player::getAttackSpeed() const

 

nessa parte?

Toda terça-feira um tópico novo:

Descanso para curar mana (Spell): https://tibiaking.com/forums/topic/94615-spell-descanso-para-curar-mana/

Peça sua spell (Suporte):                https://tibiaking.com/forums/topic/84162-peça-sua-spell/                        

Chuva de flechas (Spell):                https://tibiaking.com/forums/topic/72232-chuva-de-flechas-spell/

Doom (Spell):                                https://tibiaking.com/forums/topic/51622-doom-spell/

Utilização do VS Code (Infra)       https://tibiaking.com/forums/topic/94463-utilizando-o-visual-studio-code-notepad-nunca-mais/

SD com Combo (Spell):                 https://tibiaking.com/forums/topic/94520-sd-modificada/

Alteração attack speed (C++):        https://tibiaking.com/forums/topic/94714-c-attack-speed-spells-itens-e-onde-você-quiser/  

Bônus de Speed (NPC)                  https://tibiaking.com/forums/topic/94809-npc-concede-bônus-aos-players/
 

Link para o post
Compartilhar em outros sites

@Reds

 Então, eu testei dessa forma.

uint32_t Player::getAttackSpeed() const
{

	int32_t SpeedAttack;
	SpeedAttack = getSkill(SKILL_FIST, SKILL_LEVEL);

	if (SpeedAttack < 10)
		SpeedAttack = 2800;
	else if (SpeedAttack >= 10 && SpeedAttack < 20)
		SpeedAttack = 2600;
	else if (SpeedAttack >= 20 && SpeedAttack < 30)
		SpeedAttack = 2400;
	else if (SpeedAttack >= 30 && SpeedAttack < 40)
		SpeedAttack = 2200;
	else if (SpeedAttack >= 40 && SpeedAttack < 50)
		SpeedAttack = 2000;
	else if (SpeedAttack >= 50 && SpeedAttack < 60)
		SpeedAttack = 1800;
	else if (SpeedAttack >= 60 && SpeedAttack < 70)
		SpeedAttack = 1600;
	else if (SpeedAttack >= 70 && SpeedAttack < 80)
		SpeedAttack = 1400;
	else if (SpeedAttack >= 80 && SpeedAttack < 90)
		SpeedAttack = 1200;
	else if (SpeedAttack >= 90 && SpeedAttack < 100)
		SpeedAttack = 1100;
	else if (SpeedAttack >= 100 && SpeedAttack < 110)
		SpeedAttack = 900;
	else if (SpeedAttack >= 110 && SpeedAttack < 120)
		SpeedAttack = 800;
	else if (SpeedAttack >= 120 && SpeedAttack < 130)
		SpeedAttack = 700;
	else if (SpeedAttack >= 130 && SpeedAttack < 140)
	    SpeedAttack = 600;
	else if (SpeedAttack >= 140 && SpeedAttack < 150)
		SpeedAttack = 500;
	else
		SpeedAttack = 300;

	return SpeedAttack;
	
	int32_t attackSpeedValue = 0;
    std::string value;
    this->getStorage("8500", value);
    if (value != "-1") {
         attackSpeedValue = atoi(value.c_str()) * 5;
    }
    int32_t vocationAttackSpeed = vocation->getAttackSpeed();
    if (attackSpeedValue > vocationAttackSpeed/2){
       attackSpeedValue = vocationAttackSpeed/2;                
    }
	return vocation->getAttackSpeed() - attackSpeedValue;
}

Não dá nenhum erro mas não funcionou, não aumentou a velocidade.

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

Olá, adicione como você indicou e ao compilá-lo me lança este erro
4320 ? \ Users \ HP \ Desktop \ trunk.r3884 \ player.cpp esperado unqualified-id antes do token '{'
4320 ? \ Users \ HP \ Desktop \ trunk.r3884 \ player.cpp *** [obj // player.o] Erro 1

Alguma solução?

error.png

Link para o post
Compartilhar em outros sites
Em 24/08/2020 em 04:49, piikedu disse:

Olá, adicione como você indicou e ao compilá-lo me lança este erro
4320 ? \ Users \ HP \ Desktop \ trunk.r3884 \ player.cpp esperado unqualified-id antes do token '{'
4320 ? \ Users \ HP \ Desktop \ trunk.r3884 \ player.cpp *** [obj // player.o] Erro 1

Alguma solução?

error.png

Tenta apagar esse {

e compila novamente.

Link para o post
Compartilhar em outros sites
Em 24/08/2020 em 04:49, piikedu disse:

Olá, adicione como você indicou e ao compilá-lo me lança este erro
4320 ? \ Users \ HP \ Desktop \ trunk.r3884 \ player.cpp esperado unqualified-id antes do token '{'
4320 ? \ Users \ HP \ Desktop \ trunk.r3884 \ player.cpp *** [obj // player.o] Erro 1

Alguma solução?

error.png

tenta apagar a tudo da pasta obj e tenta compilar

Link para o post
Compartilhar em outros sites

Olá, tentei compilar com outras fontes porque as fontes de tronco me deram problemas e agora me lança este erro

 

depois tente remover isso também

{
    return ((weapon && weapon->getAttackSpeed() != 0) ? weapon->getAttackSpeed() : (vocation->getAttackSpeed() / std::max((size_t)1, getWeapons().size())));
}

 

e lança o seguinte erro

 

 

 

 

aprecio sua ajuda

error.png

error1.png

Link para o post
Compartilhar em outros sites
  • 11 months later...
Em 25/08/2020 em 15:27, piikedu disse:

Olá, tentei compilar com outras fontes porque as fontes de tronco me deram problemas e agora me lança este erro

 

depois tente remover isso também

{
    return ((weapon && weapon->getAttackSpeed() != 0) ? weapon->getAttackSpeed() : (vocation->getAttackSpeed() / std::max((size_t)1, getWeapons().size())));
}

 

e lança o seguinte erro

 

 

 

 

aprecio sua ajuda

error.png

error1.png

 

Bom dia, parece que a sua versão espera um inteiro, não uma string, troque essa linha 4405 por isso:

this->getStorage(8500, value);

Toda terça-feira um tópico novo:

Descanso para curar mana (Spell): https://tibiaking.com/forums/topic/94615-spell-descanso-para-curar-mana/

Peça sua spell (Suporte):                https://tibiaking.com/forums/topic/84162-peça-sua-spell/                        

Chuva de flechas (Spell):                https://tibiaking.com/forums/topic/72232-chuva-de-flechas-spell/

Doom (Spell):                                https://tibiaking.com/forums/topic/51622-doom-spell/

Utilização do VS Code (Infra)       https://tibiaking.com/forums/topic/94463-utilizando-o-visual-studio-code-notepad-nunca-mais/

SD com Combo (Spell):                 https://tibiaking.com/forums/topic/94520-sd-modificada/

Alteração attack speed (C++):        https://tibiaking.com/forums/topic/94714-c-attack-speed-spells-itens-e-onde-você-quiser/  

Bônus de Speed (NPC)                  https://tibiaking.com/forums/topic/94809-npc-concede-bônus-aos-players/
 

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

    uint32_t getAttackSpeed() const {
            return vocation->getAttackSpeed();
        }

 

Estou usando tfs 1.0 na pasta player.h

Possivel sr me ajudar com o code?

"Antes de morrer, viva!"

 


 
http://fast-baiak.com
BAIAK 8.60 MAIS COMPLETO DA ATUALIDADE!

Se leu eh viado!

 

 

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 Muvuka
      Alguem tem anti-nuker igual a esse 
       

       
    • Por Muvuka
      [SQLite] -=[TFS]=- 0.4 8.60 Alguem faz apk mobile pra mim ip: dexsoft.ddns.net
       
      pra mim
       
      https://www.mediafire.com/file/5klqnyy6k7jda0u/OTClientV8.rar/file
       
      TA TUDO AI
    • Por yuriowns
      Salve rapazes, estou precisando de um client próprio para o meu servidor 7.4, preciso que algum programador experiente e com referências faça um client do jeito que eu procuro. Responda aqui para fazermos um orçamento, obrigado!

      Não sei se estou no lugar certo, se não me desculpem e peço que movam por gentileza!
    • Por paulo thush
      Pessoal to com um grande problema, estou com um servidor TFS 1.4x 10.98, recentemente começou dar um problema, sempre quando falava "trade" com o npc dava um erros, com qual quer npc, o erro e o seguinte.
       
       
      me falaram que o problema e nas sourcer que precisava mudar umas coisas me passaram um link no github esse aqui 
      https://github.com/otland/forgottenserver/pull/3996/files
       
      porem eu vi vídeos no youtube ensinando a compilar, já vi muitos tópicos como compilar a sourcer, ai quando vou compilar da esse erro
      já tentei instalar, desinstala muitas coisas, alterar também não vai, minha sourcer e essa 
      https://github.com/otland/forgottenserver
       
       
      Alguém poderia me ajuda com esse erro, ou ate compilar 100% as sourcer. os Tópicos que eu tentei para compilar e esse daqui, se não poder o link me desculpe.
      https://forums.otserv.com.br/index.php?/forums/topic/169234-windowsvc2019-compilando-sources-tfs-14-vcpkg/
       
      alguém me da uma luz por favor kkk
    • Por Ryzek
      Uso tfs 0.4 trunk3884 bem simples.
      Queria acrescentar magic effects para 255 pois o meu só vai até 69. Encontrei um tópico que falava sobre porém parece ter sido removido, não consigo acessar!
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo