Ir para conteúdo

Featured Replies

Postado

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/
 

  • Respostas 12
  • Visualizações 4.1k
  • Created
  • Última resposta

Top Posters In This Topic

Posted Images

Postado

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

  • 2 weeks later...
Postado
../../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

  • 1 month later...
Postado
  • Autor

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/
 

  • 1 year later...
Postado

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

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.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo