O a ja sie zastanawiałem co powoduje crash ;) Nie mówcie że skryp do dupy, wystarczy gdzieniegdzie if'a dodać i będzie działac ;D
Jak coś wymyślę to podrzucę
Wersja do druku
O a ja sie zastanawiałem co powoduje crash ;) Nie mówcie że skryp do dupy, wystarczy gdzieniegdzie if'a dodać i będzie działac ;D
Jak coś wymyślę to podrzucę
I co teraz działa?
Cholera, nowymi archeologami zostaja Pimpeq i Aragornik ;x
Początek skryptu jest dobry, ale dalej to już masakra ;/ piszę od nowa kod :
W pliku game.cpp:
Pod:
Dodajemy: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:double returnDamage = 0;
Pod
dodajemyKod: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(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));
}}
I pod
DodajemyKod:std::stringstream ss;
ss << damage;
addMagicEffect(list, targetPos, hitEffect);
addAnimatedText(list, targetPos, textColor, ss.str());
Odświeżyłem temat, bo teraz gdy zdobyłem wiedzę i umiejętności, nareszcie udało mi się przepisać ten kod tak, by działał bez crashów.Kod: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());
}
}
DZIAŁA! MOŻNA DODAWAĆ.
Już dawno miałem na niego ochotę na moim ots ;]