NY
pedido

Sistema de Critical REAL

Por nycholaszinhu, 30 de out. de 2013 em Scripts

critical
ot
10.10
tibia
ajuda
como
resolvido
script
6
2.3k
nycholaszinhuN
30 de outubro de 2013 às 11:38

Beleza galera?, venho aqui pedir a você um script que acredito que seja fácil.
nos servers tem aquela de sistema de Crítico que realmente não funciona HAHAHAHHAHA

 

Queria um sistema que realmente deve um dano crítico com 10% de chance do Critical e o dano fosse ampliado em 1,5x variado até 2x do dano real, e quando o dano aparecer aparecer uma msg "CRITICAL"

 

Galera conto com a ajuda de vocês muito obrigado !
Grato desde já, Valeu !!!

markindootM
30 de outubro de 2013 às 12:14

Esse sistema foi postado na otland pelo usuário VirrageS

Foi testado em um TFS 0.4 REV.3884

13108970.jpg


Vamos lá:

ITEM.CPP

Embaixo de:
case ATTR_ARTICLE:
{
std::string article;
if(!propStream.getString(article))
return ATTR_READ_ERROR;

setAttribute("article", article);
break;
}
Colocar:
case ATTR_CRITICALHITCHANCE:
{
int32_t criticalHitChance;
if(!propStream.getLong((uint32_t&)criticalHitChance))
return ATTR_READ_ERROR;

setAttribute("criticalhitchance", criticalHitChance);
break;
}
Embaixo de:

bool begin = true;
if(tmp)
{
s << " (Arm:" << tmp;
begin = false;
}
Colocar:
if(it.criticalHitChance || (item && item->getCriticalHitChance()))
{
if(begin)
{
begin = false;
s << " (";
}
else
s << ", ";

s << "Crit Chance:" << std::showpos << int32_t(item ? item->getCriticalHitChance() : it.criticalHitChance) << "%"<< std::noshowpos;
}

Embaixo de:
if(it.defense || it.extraDefense || (item && (item->getDefense() || item->getExtraDefense())))
{
if(begin)
{
begin = false;
s << " (";
}
else
s << ", ";

s << "Def:" << int32_t(item ? item->getDefense() : it.defense);
if(it.extraDefense || (item && item->getExtraDefense()))
s << " " << std::showpos << int32_t(item ? item->getExtraDefense() : it.extraDefense) << std::noshowpos;
}
Colocar:
if(it.criticalHitChance || (item && item->getCriticalHitChance()))
{
if(begin)
{
begin = false;
s << " (";
}
else
s << ", ";

s << "Crit Chance:" << std::showpos << int32_t(item ? item->getCriticalHitChance() : it.criticalHitChance) << "%"<< std::noshowpos;
}


ITEM.H

Embaixo de:
ATTR_DUALWIELD = 43,
Colocar:
ATTR_CRITICALHITCHANCE = 44,
Embaixo de:
int32_t getAttack() const;
Colocar:
int32_t getCriticalHitChance() const;
Embaixo de:
inline bool Item::isScriptProtected() const
{
const bool* v = getBooleanAttribute("scriptprotected");
if(v)
return *v;

return false;
}
Colocar:
inline int32_t Item::getCriticalHitChance() const
{
const int32_t* v = getIntegerAttribute("criticalhitchance");
if(v)
return *v;

return items[id].criticalHitChance;
}
ITEMS.CPP

Embaixo de:
attackSpeed = 0;
Colocar:
criticalHitChance = 0;
Embaixo de:
else if(tmpStrValue == "extradefense" || tmpStrValue == "extradef")
{
if(readXMLInteger(itemAttributesNode, "value", intValue))
it.extraDefense = intValue;
}

Colocar:
else if(tmpStrValue == "criticalhitchance")
{
if(readXMLInteger(itemAttributesNode, "value", intValue))
it.criticalHitChance = intValue;
}

ITEMS.H

TROCAR:
int32_t attack, extraAttack, defense, extraDefense, armor, breakChance, hitChance, maxHitChance,
POR:
int32_t attack, criticalHitChance, extraAttack, defense, extraDefense, armor, breakChance, hitChance, maxHitChance,

LUASCRIPT.CPP


Embaixo de:
setField(L, "text", item->text);
Colocar:
setField(L, "criticalHitChance", item->criticalHitChance);

PLAYER.CPP


Embaixo de:
int32_t Player::getArmor() const
{
int32_t i = SLOT_FIRST, armor = 0;
for(; i < SLOT_LAST; ++i)
{
if(Item* item = getInventoryItem((slots_t)i))
armor += item->getArmor();
}

if(vocation->getMultiplier(MULTIPLIER_ARMOR) != 1.0)
return int32_t(armor * vocation->getMultiplier(MULTIPLIER_ARMOR));

return armor;
}
Colocar:
int32_t Player::getCriticalHitChance() const
{
int32_t i = SLOT_FIRST, crit = 0;
for(; i < SLOT_LAST; ++i)
{
if(Item* item = getInventoryItem((slots_t)i))
crit += item->getCriticalHitChance();
}

return crit;
}

PLAYER.H


Embaixo de:
virtual int32_t getArmor() const;
Colocar:
virtual int32_t getCriticalHitChance() const;

WEAPONS.CPP


Substituir todos:
if(random_range(1, 100) < g_config.getNumber(ConfigManager::CRITICAL_HIT_CHANCE))
Por:
if(random_range(1, 100) < player->getCriticalHitChance() + g_config.getNumber(ConfigManager::CRITICAL_HIT_CHANCE))


A tag para se colocar no items.xml é a seguinte:

<attribute key="criticalHitChance" value="5" />


Espero que goste!

 

 

Creditos = VirrageS

Editado Outubro 30 por markindoot

nycholaszinhuN
30 de outubro de 2013 às 12:22

Valew cara, Obrigado mesmo!

Sabe se existe um sistema que eu não tenha que mexer nas sources ?

tipo creaturescript ou outro lugar?

se não tiver como coloco esse mesmo ;) Abraço

markindootM
30 de outubro de 2013 às 12:48

ai eu nao sei, peguei esse de outro forum para lhe ajudar.

 

 

Se ajudei REP+ =D

nycholaszinhuN
31 de outubro de 2013 às 00:04

Claro que me ajudou, muito obrigado !

OmegaO
31 de outubro de 2013 às 11:40

Tópico movido para a seção de dúvidas e pedidos resolvidos.