對於十字傭兵3285版本的程式碼分析

來源:互聯網
上載者:User
轉:coronanimo

對於十字傭兵3285版本的程式碼分析

這是簡單的對服務端的分析,由於ScriptDev2隻是增加了gem和teleport和守衛漢化,大家都明白,所以就不分析了。
非常感謝xren社區的開放源碼精神。發這個文章,一方面是為了給初入mangos代碼研究的朋友一個參考。另一方面我想說,大家沒有必要去發布那麼多的版本,多做一些patch,多把代碼發到論壇上來才是王道。你編譯了的東西,給別人只能是一個娛樂。當然,我這裡並沒有考慮準備開服賺錢的朋友。
希望xren社區以後能夠作出更多更好的patch。也希望某些誤入歧途的傢伙們早點做點實在的事情。一句話,大家多交流才能進步。
發出這篇文章,我還是考慮了很長一段時間的,因為我怕因為發了這個,出現很多很多“新版本”,從而讓xren對於這種不尊重著作權的行為失去熱情。
希望大家能夠在用道這些,特別是經驗設定的時候,想到xren。因為這些代碼並不麻煩,但是可以提供一種思路,就是不需要重新編譯的情況下更改參數設定。
其實MangosCript對lua的支援很值得稱道。
羅嗦多了,下面是本文。

對於十字傭兵版本程式碼分析(服務端部分)
工具:SVN/Check Modifications.
1.Shared:
a)comment.h
-#define EXPECTED_MANGOS_CLIENT_BUILD        {5875,6005,0}
+#define EXPECTED_MANGOS_CLIENT_BUILD        {5875,6005,6141,0}
增加6141版本支援(即1.12.3)
2.realmd
改變了一些提示資訊。
3.mangosd
改變了一些提示資訊
4.game
a)creature.cpp
-m_deathTimer(0), m_respawnTime(0), m_respawnDelay(25), m_corpseDelay(60), m_respawnradius(0.0),
+m_deathTimer(0), m_respawnTime(0), m_respawnDelay(25), m_corpseDelay(sWorld.getConfig(CONFIG_CROPSE_DELAY)), m_respawnradius(0.0),
作用:從設定檔裡讀取屍體消失時間

b)forumula.h
-        inline uint32 BaseGain(uint32 pl_level, uint32 mob_level)
-        {
-            if( mob_level >= pl_level )
-                return ((pl_level*5 + 45) * (20 + mob_level - pl_level)/10 + 1)/2;
-            else
-            {
-                uint32 gray_level = GetGrayLevel(pl_level);
-                if( mob_level > gray_level )
-                {
-                    uint32 ZD = GetZeroDifference(pl_level);
-                    return (pl_level*5 + 45) * (ZD + mob_level - pl_level)/ZD;
-                }
-                return 0;
-            }
-        }
+inline uint32 BaseGain(uint32 pl_level, uint32 mob_level)
+        {
+            if( pl_level == mob_level )
+                return (pl_level*5 + 45);
+            else if( mob_level > pl_level )
+                return static_cast<uint32>(( (pl_level*5 + 45) * (1 + 0.05*(mob_level - pl_level)) ) + 0.5);
+            else
+            {
+                uint32 gray_level = GetGrayLevel(pl_level);
+                if( mob_level > gray_level )
+                {
+                    uint32 ZD = GetZeroDifference(pl_level);
+                    return ( (pl_level*5 + 45) * (1 - (pl_level - mob_level)/ZD) );
+                }
+                return 100/(pl_level-mob_level); //???return 0;
+            }
+        }
這一段的作用是更改超過5級沒有經驗。但是在最新的Mangos版本裡面已經修正了這一點。並且經驗的獲得公式更加客觀。
可以考慮根據最新的版本來變更。上述的return 0處加上自己的經驗代碼。

+                        //會員經驗翻倍 普通會員層級 
+                        if ( pl->GetSession()->GetSecurity() >=1 )
+            return (uint32)(xp_gain*sWorld.getRate(RATE_VIP_XP_KILL)*sWorld.getRate(RATE_XP_KILL));
+                        else if ( pl->getLevel() < sWorld.getConfig(RATE_USER_MAX_LEVEL) )
+                        return (uint32)(xp_gain*sWorld.getRate(RATE_XP_KILL));
+                        else
+                        return (uint32)(xp_gain*sWorld.getRate(RATE_USER_MAX_XP));

-            return (uint32)(xp_gain*sWorld.getRate(RATE_XP_KILL));
這個的作用就是增加會員經驗功能。如果超過了非會員等級那麼只能夠得到10RATE_USER_MAX_XP的經驗。 個人感覺沒有必要。

c)guild.cpp
將一些英文的提示資訊更改為UTF8中文。這裡就不一一列舉了。
在第64行和91行
d)level0.cpp
最新版本已經沒有更改。
e)player.cpp
-    InitStatsForLevel(1,false,false);
+    InitStatsForLevel(sWorld.getConfig(CONFIG_LEVEL_FIRST) ,false,false);//初始出生人物等級
出生人物等級,不解釋。

-
-    uint16 dest;
+       
+        uint16 dest;
+        SetMoney(sWorld.getConfig(CONFIG_MY_MONEY)); //初始人物金錢
348行處,出生人物金錢,不解釋

-            GiveXP( XP , NULL );
+            if ( this->GetSession()->GetSecurity() >=1 || this->getLevel() < sWorld.getConfig(RATE_USER_MAX_LEVEL))
+                        {
+                                GiveXP( XP , NULL );
+                        }
+                        else
+                        {
+                                GiveXP( 88 , NULL );
+                        }
8951行,這個地方是用來控制會員和非會員層級的。如果不是會員而且等級達到最高等級,那麼就只能夠得到88點經驗。
f)World.cpp
-
+    rate_values[RATE_VIP_XP_KILL]  = sConfig.GetFloatDefault("Rate.VIP_XP.Kill", 2); //會員經驗翻倍
+    rate_values[RATE_USER_MAX_LEVEL]  = sConfig.GetFloatDefault("Rate.user_max.level", 90); //非會員等級設定
+        rate_values[RATE_USER_MAX_XP]  = sConfig.GetFloatDefault("Rate.user_max.xp", 100); //非會員最大經驗設定
+        m_configs[CONFIG_MY_MONEY] =sConfig.GetIntDefault("mymoney", 8);//初始人物金錢
+        m_configs[CONFIG_LEVEL_FIRST] = sConfig.GetIntDefault("LevelFirst", 1);//初始出生人物等級
+        m_configs[CONFIG_CROPSE_DELAY] = sConfig.GetIntDefault("MyCropseDelay", 60);//初始怪物屍體停留時間
這裡是增加幾個配置讀取,後面來用 。
g)World.h
+        CONFIG_MY_MONEY,//初始人物金錢
+        CONFIG_LEVEL_FIRST,//初始出生人物等級
+        CONFIG_CROPSE_DELAY,//初始怪物屍體停留時間
+        RATE_VIP_XP_KILL, //會員經驗翻倍
+    RATE_USER_MAX_LEVEL, //非會員等級設定
+        RATE_USER_MAX_XP, //非會員最大經驗設定
+        MAX_RATES
這裡是對應world.cpp的 標頭檔修改。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.