• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

[C++] Change script

silenty

New Member
Joined
Aug 14, 2010
Messages
3
Reaction score
0
Hello i have script to very old server hmm dead touch ..
This is return damage script yy.. i have armor with return damage
player attack is PLAYER he hit me 100, I lost 80 hp and PLAYER lost 20hp
Sorry for my english ;//

This is script for it for old servers:

game.cpp

under

PHP:
bool Game::combatChangeHealth(CombatType_t combatType, Creature* attacker, Creature* target,
    int32_t healthChange, bool checkDefense /* = false */, bool checkArmor /* = false */)
{
    const Position& targetPos = target->getPosition();

add :

PHP:
double returnDamage = 0;

under:

PHP:
damage = std::min(target->getHealth(), damage);
            if(damage > 0){

add:

PHP:
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(left.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 += right.abilities.returnDamage;                    
                          }                                                                         
                     }    
                returnDamage /= 100;                 
}
                if(!(int)(returnDamage*damage) == 0){
if(attacker){
                        attacker->drainHealth(target, combatType, (int)(returnDamage*damage));
}}

and under:

PHP:
std::stringstream ss;
ss << damage;
addMagicEffect(list, targetPos, hitEffect);
addAnimatedText(list, targetPos, textColor, ss.str());

add:
PHP:
if(attacker){
ss.str("");            
if(!(int)(returnDamage*damage) == 0){
        ss << (int)(returnDamage*damage); 
const Position& attackerPos = attacker->getPosition();

        addMagicEffect(list, attackerPos, NM_ME_DRAW_BLOOD);
        addAnimatedText(list, attackerPos, TEXTCOLOR_ORANGE,"-" + ss.str()); 
}

}

I need this script for tfs 0.3.6

Need help and SORRY AGAIN FOR MY ENGLISH.
 
in tfs 0.3.6 are a feature named "reflect" (in 0.3.6 is buggy but useable) try to find in items.cpp, vocations.cpp... you can put these attribute to a item to "reflect" damages

some like this:

XML:
<attribute key="reflectpercentelements" value="10" /> <! -- percentage value: 10 = 10% to reflect the damage taken -->

and you can configure the chance to make the "reflection damage" combining with this:
XML:
<attribute key="reflectchanceelements" value="10" /> <! -- percentage value: 10 = 10% to make the reflection function when take damage -->

if you search in sourcers you must find another "keys" of reflect like: reflectchancemagic, reflectchancefire, reflectchancelifedrain, etc...
 
Ok this is good but i create demon.. Demon hit me and demon lost hp. OK work but after minute server is crashed.
Can you repair this? rep+
 
Back
Top