he01204046 發表於 2015-6-30 20:32:02

關於自定義狀態,其中客戶端的stateiconinfo編寫疑問

目前發現伺服端發送狀態封包資料時,除了狀態的持續時間,還有發送該狀態的val值                        WBUFW(buf,0)=0x196;
WBUFW(buf,2)=type;
WBUFL(buf,4)=bl->id;
WBUFB(buf,8)=flag;
WBUFL(buf,9)=tick;//MaxMS
                        WBUFL(buf,13)=tick;//RemainMS
                        WBUFL(buf,17)=val1; //這邊
                        WBUFL(buf,21)=val2; //還有這裡
                        WBUFL(buf,25)=val3; //跟這裡
這邊想請問,如果要在狀態說明中添加該值的顯示要怎麼辦到呢?

這是我自定義的狀態說明StateIconList =               
{               
        haveTimeLimit = 1,       
        posTimeLimitStr = 2,       
        descript =        
        {       
                {"生命", COLOR_TITLE_BUFF },
                {"%s", COLOR_TIME },
                {"剩餘生命數:", COLOR_TITLE_TOGGLE },
        }       
}        其中有一行剩餘生命數,我希望後頭可以讓他顯示val1的值,這有辦法做的到嗎?請各位高手幫我解惑一下,感激不盡。

sense 發表於 2015-7-1 00:40:53

自定義的stateiconinfo是以SI表示嗎?

src/map/status.h
SI那邊也定義了嗎?

SC 必須對應 SI 應該就可以了,還沒嘗試這麼做過....!

he01204046 發表於 2015-7-1 07:29:15

sense 發表於 2015-7-1 12:40 AM static/image/common/back.gif
自定義的stateiconinfo是以SI表示嗎?

src/map/status.h


有,SI都有定義了

進遊戲可以正常看到狀態圖示、說明、剩餘時間的顯示,但是現在就是希望可以看到狀態的VAL值。

goddameit 發表於 2015-7-1 09:20:51

直接新增一個%d 或%s 會如何?

he01204046 發表於 2015-7-1 19:24:38

goddameit 發表於 2015-7-1 09:20 AM static/image/common/back.gif
直接新增一個%d 或%s 會如何?

遊戲中的狀態說明就會直接出現 %d 或 %s

he01204046 發表於 2015-7-3 09:08:26

沒有人有解決辦法嗎?

推一下避免閒置問題。

sense 發表於 2015-7-3 09:50:18

he01204046 發表於 2015-7-3 09:08 AM static/image/common/back.gif
沒有人有解決辦法嗎?

推一下避免閒置問題。

看了一下攜帶箭矢的那狀態(SI_CLIENT_ONLY_EQUIP_ARROW)
是直接送封包給客戶端,貌似跟SC的val沒太大的關係,如果真是這樣技術上有點難度 .... !


he01204046 發表於 2015-7-3 19:55:10

本帖最後由 he01204046 於 2015-7-3 07:56 PM 編輯

sense 發表於 2015-7-3 09:50 AM static/image/common/back.gif
看了一下攜帶箭矢的那狀態(SI_CLIENT_ONLY_EQUIP_ARROW)
是直接送封包給客戶端,貌似跟SC的val沒太大的關 ...
不知道是不是服務器不同,我使用的3CEAM『SI_CLIENT_ONLY_EQUIP_ARROW』是被註解掉的狀態,另外去找了ra確實有該狀態和相關程式存在。void clif_arrowequip(struct map_session_data *sd,int val)
{
      int fd;

      nullpo_retv(sd);

#if PACKETVER >= 20121128 //這裡是ra新增的,3ceam則沒有
      clif_status_change(&sd->bl, SI_CLIENT_ONLY_EQUIP_ARROW, 1, INVALID_TIMER, 0, 0, 0);
#endif //至此
      fd=sd->fd;
      WFIFOHEAD(fd, packet_len(0x013c));
      WFIFOW(fd,0)=0x013c;
      WFIFOW(fd,2)=val+2; //Item ID of the arrow
      WFIFOSET(fd,packet_len(0x013c));
}搜尋 efstids.lua 有該代碼存在EFST_CLIENT_ONLY_EQUIP_ARROW        = 695,但是搜尋 stateiconinfo.lua 卻沒有相關的說明文字,箭矢部份應該是直接寫在登入器裡面了。

另外狀態的封包0x983跟箭矢的封包0x013c也不一致,所以箭矢可能無法用來參考。

goddameit 發表於 2015-7-4 14:54:45

http://goo.gl/vgaiPB
尚未有人回應.

我看了許多lua lub, 也沒見到有使用到這功能的存在.

he01204046 發表於 2015-7-4 20:03:49

goddameit 發表於 2015-7-4 02:54 PM static/image/common/back.gif
http://goo.gl/vgaiPB
尚未有人回應.



感謝壇主還特地跑到別的論壇幫我發問。

現在只能看看懂lua的高手有沒有解答了。

頁: [1]
查看完整版本: 關於自定義狀態,其中客戶端的stateiconinfo編寫疑問