Jump to content
Close
Sign in to follow this  
Reds

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

Recommended Posts

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/
 

Share this post


Link to post
Share on other 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.

 


Share this post


Link to post
Share on other sites
../../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


Share this post


Link to post
Share on other sites

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/
 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

×
×
  • Create New...