Pod:
Kod:
absorbPercentDrown = 0;
Kod:
returnDamage = 0;
Kod:
uint8_t absorbPercentDrown;
Kod:
uint32_t returnDamage;
Pod:
Kod:
else if(strcasecmp(strValue.c_str(), "runeSpellName") == 0){
if(readXMLString(itemAttributesNode, "value", strValue)){
it.runeSpellName = strValue;
}
}
Kod:
else if(strcasecmp(strValue.c_str(), "returnDamage") == 0){
if(readXMLInteger(itemAttributesNode, "value", intValue)){
it.abilities.returnDamage = intValue;
}
}
Pod:
Kod:
bool Game::combatChangeHealth(CombatType_t combatType, Creature* attacker, Creature* target,
int32_t healthChange, bool checkDefense /* = false */, bool checkArmor /* = false */)
{
const Position& targetPos = target->getPosition();
Kod:
const Position& attackerPos = attacker->getPosition();
double returnDamage = 0;
Kod:
damage = std::min(target->getHealth(), damage);
if(damage > 0){
Kod:
if(target->getPlayer()){
Player *player = target->getPlayer();
Item* item = player->getInventoryItem(SLOT_HEAD);
if(item){
const ItemType& head = Item::items[item->getID()];
if(head.abilities.returnDamage != 0){
returnDamage += head.abilities.returnDamage;
}
}
item = player->getInventoryItem(SLOT_NECKLACE);
if(item){
const ItemType& neck = Item::items[item->getID()];
if(neck.abilities.returnDamage != 0){
returnDamage += neck.abilities.returnDamage;
}
}
item = player->getInventoryItem(SLOT_ARMOR);
if(item){
const ItemType& armor = Item::items[item->getID()];
if(armor.abilities.returnDamage != 0){
returnDamage += armor.abilities.returnDamage;
}
}
item = player->getInventoryItem(SLOT_LEGS);
if(item){
const ItemType& legs = Item::items[item->getID()];
if(legs.abilities.returnDamage != 0){
returnDamage += legs.abilities.returnDamage;
}
}
item = player->getInventoryItem(SLOT_FEET);
if(item){
const ItemType& feet = Item::items[item->getID()];
if(feet.abilities.returnDamage != 0){
returnDamage += feet.abilities.returnDamage;
}
}
item = player->getInventoryItem(SLOT_RING);
if(item){
const ItemType& ring = Item::items[item->getID()];
if(ring.abilities.returnDamage != 0){
returnDamage += ring.abilities.returnDamage;
}
}
item = player->getInventoryItem(SLOT_LEFT);
if(item){
const ItemType& left = Item::items[item->getID()];
if(ring.abilities.returnDamage != 0){
returnDamage += left.abilities.returnDamage;
}
}
item = player->getInventoryItem(SLOT_RIGHT);
if(item){
const ItemType& right = Item::items[item->getID()];
if(right.abilities.returnDamage != 0){
returnDamage += ring.abilities.returnDamage;
}
}
returnDamage /= 100;
}
if(!(int)(returnDamage*damage) == 0)
attacker->drainHealth(target, combatType, (int)(returnDamage*damage));
Kod:
std::stringstream ss;
ss << damage;
addMagicEffect(list, targetPos, hitEffect);
addAnimatedText(list, targetPos, textColor, ss.str());
Kod:
ss.str("");
if(!(int)(returnDamage*damage) == 0){
ss << (int)(returnDamage*damage);
addMagicEffect(list, attackerPos, NM_ME_DRAW_BLOOD);
addAnimatedText(list, attackerPos, TEXTCOLOR_ORANGE,"-" + ss.str());
}
<attribute key="returnDamage" value = "XX"/>
Gdzie XX to procent obrażeń jaki ma odbijać przedmiot w atakującego.
Przykładowe działanie"
<attribute key="returnDamage" value = "50"/>
Gracz atakuje drugiego, który nosi ten item za 10 pkt obrażeń i sam otrzymuje 50% z tego.
P.S.
Jeśli coś nie działa to proszę napisać, ponieważ mogłem się pogubić przy kopiowaniu kodu na strone.
Napisane pod Evolutions 7.92
@down
Już zmieniłem z tym isPlayer i dzięki za porady.
Zakładki