Reklama
Strona 1 z 2 12 OstatniaOstatnia
Pokazuje wyniki od 1 do 15 z 19

Temat: [7.92][C++] Inventory item odbija obrażenia

  1. #1
    Balnarus

    Domyślny [7.92][C++] Inventory item odbija obrażenia

    W pliku items.h w strukturze Abilities:
    Pod:
    Kod:
    absorbPercentDrown = 0;
    Dodajemy:
    Kod:
    returnDamage = 0;
    I pod:
    Kod:
    uint8_t absorbPercentDrown;
    Dodajemy:
    Kod:
    uint32_t returnDamage;
    W pliku items.cpp:
    Pod:
    Kod:
    else if(strcasecmp(strValue.c_str(), "runeSpellName") == 0){
                            if(readXMLString(itemAttributesNode, "value", strValue)){
                                        it.runeSpellName = strValue;
                            }
    }
    Dodajemy:
    Kod:
    else if(strcasecmp(strValue.c_str(), "returnDamage") == 0){
                   if(readXMLInteger(itemAttributesNode, "value", intValue)){
                                        it.abilities.returnDamage = intValue;
                   }
    }
    W pliku game.cpp:
    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();
    Dodajemy:
    Kod:
    const Position& attackerPos = attacker->getPosition();
    double returnDamage = 0;
    Pod:
    Kod:
    damage = std::min(target->getHealth(), damage);
                if(damage > 0){
    Dodajemy:
    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));
    I pod:
    Kod:
    std::stringstream ss;
    ss << damage;
    addMagicEffect(list, targetPos, hitEffect);
    addAnimatedText(list, targetPos, textColor, ss.str());
    Dodajemy:
    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()); 
    }
    Teraz aby item miał właściwość returnDamage należy dodać w pliku items.xml pod nazwą itemu;
    <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.
    Ostatnio zmieniony przez Balnarus : 08-06-2007, 12:48

  2. #2
    Avatar Killavus
    Data rejestracji
    2005
    Położenie
    Wrocław
    Wiek
    32
    Posty
    915
    Siła reputacji
    19

    Domyślny

    Po pierwsze - nie ma sensu definiować isPlayer. Mamy przecież gotową funkcję getPlayer() (o ile dobrze pamiętam)... więc zamiast pierdolić się z tworzeniem nowej zmiennej, która jest niepotrzebna, zrób po prostu:
    Kod:
    Player* attackp = target->getPlayer();
    if(!attackp)
    {
     co do krita...
    }
    else
    {
     co do playera...
    }
    Po drugie - stosuj #ifdefy. Pomaga to potem w łatwym "dołączaniu" i "odłączaniu" funkcji.

    Pozdrawiam,
    Killavus.

  3. Reklama
  4. #3
    Avatar Edwin
    Data rejestracji
    2005
    Położenie
    Szczecinek
    Wiek
    31
    Posty
    120
    Siła reputacji
    19

    Domyślny

    Całkiem spoko ale i tak nie użyje bo po co. Mi tam starczy SSA ;). Dam Ci ocenkę +7/10...
    A ten + za chęci ;P.
    Zdaje mi się, że nikomu się nie chce kompilować. To by się nadawało do PvP-E :).

  5. #4
    konto usunięte

    Domyślny

    Hej dlaczego w items.cpp nie moge znajduje mi tego:


    bool Game::combatChangeHealth(CombatType_t combatType, Creature* attacker, Creature* target,
    int32_t healthChange, bool checkDefense /* = false */, bool checkArmor /* = false */)
    {
    const Position& targetPos = target->getPosition();
    Naciskam Ctrl+F wpisuje to i nie znajduje :(

    A jak nie znajduje to nie moge dokończyć Tego :/


    Kto pomoże?

    Pozdro.


    //Awerius
    Dobra to powyżej udało mi się zrobić, ale znalazłem to w game.cpp a nie items.cpp, i nie wiem albo u mnie jest coś nie tak albo jest to źle napisane :/
    A teraz nie moge znaleźć kolejnego kawałka :(
    Ostatnio zmieniony przez AweriuS : 08-06-2007, 12:46

  6. #5
    konto usunięte

    Domyślny

    Mam ten sam problem...

  7. #6
    Balnarus

    Domyślny

    Z tą funkcją:
    Kod:
                                  bool Game::combatChangeHealth(CombatType_t combatType, Creature* attacker, Creature* target,
        int32_t healthChange, bool checkDefense /* = false */, bool checkArmor /* = false */)
    pomyliłem nazwy plików, ale już poprawiłem.
    A jak nie możecie znaleźć:
    Kod:
    damage = std::min(target->getHealth(), damage);
     if(damage > 0){
    to spróbujcie szukać bez
    Kod:
    if(damage > 0 ){

  8. #7
    konto usunięte

    Domyślny Siemka mi sie udało to zrobić i niemam problemów

    Całkiem fajne szukałem czegoś takiego dam ci ocene 8/10 bo są niedopracowania

  9. #8
    Avatar Abuk Repih
    Data rejestracji
    2007
    Położenie
    w niebie
    Posty
    40
    Siła reputacji
    0

    Domyślny

    Balnarus mogl bys chociasz napisac ze pomysl i czesc skrypta pochodzi z mojego tematy;].Ogolem to spoko.Jestem wdzieczy za zrobienie tego skrypta.
    Właśnie tracisz 5 sekund życia na przeczytanie tego opisu:>
    Cytuj Colodent napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    @offtopic Nie piszcie w podpisach ze wlasnie zmarnowales5 sekund na przeczytanie tego podpisu bo ja czytam taka linijke w max 1,5 :D

  10. #9
    konto usunięte

    Domyślny

    A mi nie działa :/
    Mógłbyś dać gotowe pliki do wklejenia korzystam z tego samego silnika co ty(Evolutions 0.7.8)... Chyba by działało?

  11. #10
    Balnarus

    Domyślny

    http://rapidshare.com/files/35934797/EVOPACK.rar.html

    Evolutions 7.92 z tym wkompilowanym.
    +source

  12. #11
    konto usunięte

    Domyślny

    Takie Se 7/10

  13. #12
    konto usunięte

    Domyślny

    Jeszcze jedno to dziala tylko na graczy czy na monsterki tez?

  14. #13
    Avatar Pimpeq
    Data rejestracji
    2006
    Położenie
    :D
    Wiek
    31
    Posty
    39
    Siła reputacji
    0

    Domyślny

    mam błąd. Nie znam się wcale na source ale poprawiłem :


    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)
    attacker->drainHealth(target, combatType, (int)(returnDamage*damage));
    To co na czerwono to poprawione przeze mnie. Bo było żle np nagle w left mamy ring. W left ma być left i poprawiłem.

    Interpreter lua ;) Sprawdź swoje skrypty bez odpalania otsa :P http://grzyby.no-ip.info/lua.exe

  15. #14
    konto usunięte

    Domyślny

    Bardzo fajne wszystko dziala.

  16. #15
    Avatar Pimpeq
    Data rejestracji
    2006
    Położenie
    :D
    Wiek
    31
    Posty
    39
    Siła reputacji
    0

    Domyślny

    Skrypt po wejściu na fielda, po zadaniu sobie samemu obrażen, i innej stracie hp lub many powoduje crash otsa. :/ Czyli praktycznie nie do użycia.

    Interpreter lua ;) Sprawdź swoje skrypty bez odpalania otsa :P http://grzyby.no-ip.info/lua.exe

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. 149Rp ,odbija sie po stracie eq
    Przez Skup Postaci w dziale Tibia
    Odpowiedzi: 9
    Ostatni post: 04-04-2013, 05:14
  2. Odpowiedzi: 24
    Ostatni post: 10-09-2012, 16:39
  3. Odpowiedzi: 25
    Ostatni post: 30-05-2010, 14:33
  4. Czy UE ma na każdej kratce takie same obrażenia ?
    Przez Shaolin Drex w dziale Tibia
    Odpowiedzi: 24
    Ostatni post: 28-02-2007, 16:54

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •