Jump to content
  • 0

Sistema de Critical REAL


nycholaszinhu

Question

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 !!!

Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

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

Edited by markindoot
Link to comment
Share on other sites

×
×
  • Create New...