Esse sistema foi postado na otland pelo usuário VirrageS
Foi testado em um TFS 0.4 REV.3884
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






info
Grupo: Campones
Registrado: 24/12/07
Posts: 69
Reputação: +4
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 !!!