【新手資源】貓大版紋樣系統-動畫代碼解析
本帖最後由 bobo8771 於 2025-1-24 21:31 編輯延續前一篇【新手資源】善用AI資源 理解源碼原理範例中相同思路
使用核心版本同為3.81貓大版。
以下純粹是個人研究代碼實際學習過程,如有錯誤請各位不吝指正,謝謝
當我嘗試複製相同概念測試新增格蘭肯紋樣時,對點擊開始強化後,對話檔中紋樣跑點數的動畫產生好奇
如下圖(請無視沙哈為什麼是顯示馬普勒,純粹圖檔錯亂)
這到底是如何產生的?難道對話檔也可以使用gif?:o
馬上去尋找源碼看看到底是如何實現
檢視了一下對話檔(wenyangsh-c.html)
<body>
沙哈紋樣<font fg=00DD00><var src="#0"><font fg=ffffff> </font><img src="#5995"></img></font><var src="#1"></font><br>
<var img src="#2"></img><br>
<var src="#3"><br>
<br>
<img src="#5998" tooltip="更改機率^更改機率" action="shjilv"></font><var img src="#4" tooltip="開始強化^開始強化" action="shstart"></img><br>
</body><br>點擊開始強化會執行action="shstart"
也就是說伺服器端會收到shstart這個字串去執行該做的行為
至於為什麼,一樣請服用J.J. Huang 天堂私服 | 執行行動分析<強化魔法師篇>先
對應核心源碼後(L1Shaha),以下都只貼出部份代碼
public static boolean shaha(String cmd, L1PcInstance pc) {
try {
if (cmd.equalsIgnoreCase("wenyangsh")) {
L1Shaha.WenyangUp(pc);
} else if (cmd.equalsIgnoreCase("shjilv")) {
L1Shaha.WenyangRnd(pc);
} else if (cmd.equalsIgnoreCase("shstart")) {
L1Shaha.WenyangLevel(pc);
}
}
catch (Exception e) {
_log.error((Object)e.getLocalizedMessage(), (Throwable)e);
}
return false;
}可以看到接收到shstart會執行
L1Shaha.WenyangLevel(pc);繼續往下看代碼,WenyangLevel()中某部份代碼中又執行了WenyangD()。看似是紋樣動畫?不清楚命名標準
switch (pc.getshaha()) {
case 0: {
L1Shaha.WenyangD(pc);
break;
}
case 1: {
L1Shaha.WenyangD(pc);
break;
}
case 2: {
L1Shaha.WenyangD(pc);
break;
}
case 3: {
L1Shaha.WenyangD(pc);
break;
}持續深挖,發現WenyangD() method有將近4000多行?!
不要慌張,把部份code收起來之後發現原來是由於紋樣總共有33階,每一階內都是執行一樣的code(約130行)但 x 33:L
在針對第0階都代碼進行整理會發現,變動的數字就只有5510, 5511, 5512, 5510, 5511, 5512
這6個神秘數字是什麼呢?可以看到它們是被存在
data對應到對話檔中,發現原來這幾個數字就是圖檔編號
<var img src="#2">結論就是,透過代碼讓圖檔變換以達到動圖的效果,結案!
謝謝觀看
Thank You. : > Good 天啊~剖析得太專業了!!
感謝大大無私專業分享~學習了!! :):):):):):) 挺有意思的講解方式 謝謝分享 感謝分享 謝謝分享 感謝分享
6666666666 專業分享 天啊~剖析得太專業了!!
感謝大大無私專業分享~學習了! Cool 感謝分享~ 挺有意思的講解方式 謝謝分享 感謝大大無私分享
感謝大大無私分享 :lol:lol:lol:lol:lol:lol:lol 好人1生平安~ 厲害的思路讚喔!感謝分享
頁:
[1]