matt070516 發表於 2016-1-17 22:32:34

請問如何讓狂怒之槍狀態下解除治癒術無法使用?

本帖最後由 matt070516 於 2016-1-19 11:32 PM 編輯

如題,看源碼看到眼都花了,R前2轉服想解除死亡引導者可以吸血的狀態,我知道R版可以在狂怒的狀態下吸血,我去看R版的源碼在這邊Flag他是用Flag2,看說明也很像就是可以解除,可是我改了之後進遊戲開狂怒變成不會滿血,不知道是否有前輩知道是要修改哪邊,感恩!//Heals a character. If flag&1 this is forced healing (otherwise stuff like Berserk can block it)
//If flag&2 when the player is healed, show the HP/SP heal effect.
int status_heal(struct block_list *bl,int hp,int sp, int flag)
{
      struct status_data *status;
      struct status_change *sc;

      status = status_get_status_data(bl);

      if (status == &dummy_status || !status->hp)
                return 0;

      sc = status_get_sc(bl);
      if (sc && !sc->count)
                sc = NULL;

      if (hp < 0) {
                if (hp == INT_MIN) hp++; //-INT_MIN == INT_MIN in some architectures!
                status_damage(NULL, bl, -hp, 0, 0, 1);
                hp = 0;
      }

      if(hp) {
                if (flag&1) && sc && sc->data)
                        hp = 0;

                if((unsigned int)hp > status->max_hp - status->hp)
                        hp = status->max_hp - status->hp;
      }

unknowname 發表於 2016-1-19 06:13:18

本帖最後由 unknowname 於 2016-1-19 06:17 AM 編輯

24-25改if( sc && sc->data ) {
   if( flag&1 )
      flag &= ~2;
   else
      hp = 0;
}

matt070516 發表於 2016-1-19 23:25:09

本帖最後由 matt070516 於 2016-1-21 09:12 PM 編輯

unknowname 發表於 2016-1-19 06:13 AM static/image/common/back.gif
24-25改感謝回答,我改好了,不過還是沒有回血效果....改好後和之前一樣狂怒狀態下不能吸血

[*]if( sc && sc->data ) {
[*]   if( flag&1 )
[*]      flag &= ~2;
[*]   else
[*]      hp = 0;
[*]}
想知道改成這樣的數據代表的意義是什麼, flag &= ~2;

unknowname 發表於 2016-1-22 10:08:16

本帖最後由 unknowname 於 2016-1-22 11:21 AM 編輯

matt070516 發表於 2016-1-19 11:25 PM static/image/common/back.gif
感謝回答,我改好了,不過還是沒有回血效果....改好後和之前一樣狂怒狀態下不能吸血
if( sc && sc->d ...你的內容好像有改過
所以是要改成可以吸血?

R前2轉服想解除死亡引導者可以吸血的狀態這段是說改成不能吸血?if ((flag&1) && sc && sc->data)
hp = 0;這樣改不會滿血
開狂怒會有補滿血的動做
當flag&1跟狂怒狀態時,hp=0不回血
原始版是以下if (!(flag&1) && sc && sc->data)
hp = 0;flag&1 類似強制補血的功能
flag&2 客戶端是否顯示恢復的數值

原始功能是
開狂怒時,會回滿血,但不顯示回血數值

吸血要從battle_drain下手
當然status_heal也要改,要不然不會吸血(hp=0)

盧卡斯 發表於 2016-1-26 23:10:14

直接把24,25行拿走就可以

flag &= ~2 的意思是 flag = flag & ~2
都是&和~都是bitwise operator. 分別代表bitwise AND 和 Not
如果flag是3, 2進制表示是 101
而Not 2 則是除了代表2的bit是0, 甚他的bit都是1. 101
101&101 就是 101

所以這實際用途是用來確保那個flag不是2, 如果不是2則不會改變那個值, 如果是2則會變0

matt070516 發表於 2016-2-1 15:43:28

感謝你們的回答,最近快過年上班很忙,然後有時候論壇都進不來,我會再多試試看。

matt070516 發表於 2016-2-1 15:43:46

本帖最後由 matt070516 於 2016-2-1 03:47 PM 編輯

多點到一次回覆....不小心多回覆了一次...自己刪不掉
頁: [1]
查看完整版本: 請問如何讓狂怒之槍狀態下解除治癒術無法使用?