搜索
查看: 11641|回复: 16

[AMXX 带源码] CS魔兽插件等级修改教程

[复制链接]
发表于 2012-2-18 19:06:49 | 显示全部楼层 |阅读模式 来自 中国–广东–惠州
其实不会太难的,本文转WC3.MOD论坛  有改动

在 constants.inl 查找

代码:选择全部
#define MAX_LEVELS   10  这里就是等级,改成你想要的等级- -该太多你看完后面你会后悔的。。。

在 war3ft.inl 查找

代码:选择全部
         // User is under level 10
         else if ( p_data[id][P_LEVEL] < 10 )
         {
            pos += formatex( szRaceInfo[pos], 255, "%s %L: %d   XP: %d/%d ", szShortRaceName, id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1) );
            formatex( szXPInfo, 31, "%L: %d   XP: %d/%d", id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1 ) );
         }

替换为

代码:选择全部
         // User is under level 10
         else if ( p_data[id][P_LEVEL] < MAX_LEVELS )
         {
            pos += formatex( szRaceInfo[pos], 255, "%s %L: %d   XP: %d/%d ", szShortRaceName, id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1) );
            formatex( szXPInfo, 31, "%L: %d   XP: %d/%d", id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1 ) );
         }

然后在同一文件中找到

代码:选择全部
         // User is under level 10
         else if ( p_data[id][P_LEVEL] < 10 )
         {
            pos += formatex( szRaceInfo[pos], 255, "%s %L: %d^nXP: %d/%d^n", szShortRaceName, id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1) );
         
         }

替换为

代码:选择全部
         // User is under level 10
         else if ( p_data[id][P_LEVEL] < MAX_LEVELS )
         {
            pos += formatex( szRaceInfo[pos], 255, "%s %L: %d^nXP: %d/%d^n", szShortRaceName, id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1) );
         
         }

在相同的文件查找

代码:选择全部
   // User is under level 10
   else if ( p_data[iTargetID][P_LEVEL] < 10 )
   {
      iMsgPos += formatex( szMsg, 511, "%s %L: %d   XP: %d/%d", szRaceName, id, "WORD_LEVEL", p_data[iTargetID][P_LEVEL], p_data[iTargetID][P_XP], XP_GetByLevel( p_data[iTargetID][P_LEVEL]+1 ) );
   }

替换为

代码:选择全部
   // User is under level 10
   else if ( p_data[iTargetID][P_LEVEL] < MAX_LEVELS-1 )
   {
      iMsgPos += formatex( szMsg, 511, "%s %L: %d   XP: %d/%d", szRaceName, id, "WORD_LEVEL", p_data[iTargetID][P_LEVEL], p_data[iTargetID][P_XP], XP_GetByLevel( p_data[iTargetID][P_LEVEL]+1 ) );
   }
在相同的文件查找

代码:选择全部
   // Do we need to give this user XP?
   new iStartLevel = get_pcvar_num( CVAR_wc3_start_level );
   if ( p_data[id][P_XP] < XP_GetByLevel( iStartLevel ) && iStartLevel > 0 && iStartLevel <= 10 )
   {

替换为

代码:选择全部
   // Do we need to give this user XP?
   new iStartLevel = get_pcvar_num( CVAR_wc3_start_level );
   if ( p_data[id][P_XP] < XP_GetByLevel( iStartLevel ) && iStartLevel > 0 && iStartLevel <= MAX_LEVELS )
   {

在相同的文件查找

代码:选择全部
   // Store level sprite names
   for ( i = 0; i < 11; i++ )
   {
      formatex( g_szLevelSprites, 63, "sprites/warcraft3/level/a_level_%d.spr", i );
   }

替换为

代码:选择全部
   // Store level sprite names
   for ( i = 0; i < MAX_LEVELS+1; i++ )
   {
      formatex( g_szLevelSprites, 63, "sprites/warcraft3/level/a_level_%d.spr", i );
   }

然后在 xp.inl 中找到

代码:选择全部
new Float:iLevelMultiplier = ( fCurrentLevel / 10.0 ) + 1.0;

替换为

代码:选择全部
new Float:iLevelMultiplier = ( fCurrentLevel / float(MAX_LEVELS) ) + 1.0;

在相同的文件查找

代码:选择全部
XP_GetByLevel( iLevel )
{
   if ( iLevel < 0 || iLevel > 10 )
   {
      return 0;
   }

替换为

代码:选择全部
XP_GetByLevel( iLevel )
{
   if ( iLevel < 0 || iLevel > MAX_LEVELS )
   {
      return 0;
   }

在相同的文件查找

代码:选择全部
XP_GivenByLevel( iLevel )
{
   if ( iLevel < 0 || iLevel > 10 )
   {
      return 0;
   }

替换为

代码:选择全部
XP_GivenByLevel( iLevel )
{
   if ( iLevel < 0 || iLevel > MAX_LEVELS )
   {
      return 0;
   }

在 admin.inl 查找

代码:选择全部
      new iLevel = str_to_num( szArg2 );

      if ( iLevel < 0 || iLevel >= 11 )
      {
         ADMIN_Print( id, "%s Error, level must be in between (or equal to) 0 and 17", g_MODclient );

         return PLUGIN_HANDLED;
      }

替换为

代码:选择全部
      new iLevel = str_to_num( szArg2 );

      if ( iLevel < 0 || iLevel >= MAX_LEVELS+1 )
      {
         ADMIN_Print( id, "%s Error, level must be in between (or equal to) 0 and 17", g_MODclient );

         return PLUGIN_HANDLED;
      }





这些只是改了等级罢了,经验。技能等级那些还没改到得,请看下面- -



在 xp.h 查找

代码:选择全部
// Amount of XP needed to gain a level
new iXPLevelShortTerm[11]            = {0,150,300,600,1000,1500,2100,2800,3400,4500,5500};
new iXPLevelSaved[11]               = {0,100,200,400,800,1600,3200,6400,12800,25600,51200};

// Amount of XP awarded when killing a user of this level
new iXPGivenShortTerm[11]            = {10,15,25,35,40,50,60,70,80,90,95};
new iXPGivenSaved[11]               = {6,8,10,12,14,16,18,20,24,28,32};


并将其更改为

代码:选择全部
// Amount of XP needed to gain a level
new iXPLevelShortTerm[MAX_LEVELS+1]            = {0,150,300,600,1000,1500,2100,2800,3400,4500,5500};
new iXPLevelSaved[MAX_LEVELS+1]               = {0,100,200,400,800,1600,3200,6400,12800,25600,51200};

// Amount of XP awarded when killing a user of this level
new iXPGivenShortTerm[MAX_LEVELS+1]            = {10,15,25,35,40,50,60,70,80,90,95};
new iXPGivenSaved[MAX_LEVELS+1]               = {6,8,10,12,14,16,18,20,24,28,32};


解说下怎么自定义修改:

// XP 的金额需要获得一个级别
new iXPLevelShortTerm [MAX_LEVELS + 1] = {0,150,300,600,1000,1500,2100,2800,3400,4500,5500} ;<<<不保存 xp 他们需要每个级别的 new iXPLevelSaved [MAX_LEVELS + 1] = {0,100,200,400,800,1600,3200,6400,12800,25600,51200} ;<< 保存他们需要为每个级别的 xp 的 xp
// XP 时批出的量杀这一级别的用户
new iXPGivenShortTerm [MAX_LEVELS + 1] = {10,15,25,35,40,50,60,70,80,90,95} ;<< 多少给 xp 如果不是储蓄 xp
new iXPGivenSaved [MAX_LEVELS + 1] = {6,8,10,12,14,16,18,20,24,28,32} ;<< 如果保存 xp 给多少 xp


如何读取这现在是

代码:选择全部
new iXPLevelSaved[MAX_LEVELS+1]               = {0,100,200,400,800,1600,3200,6400,12800,25600,51200};

0 级有 xp 是 0
级别 1 有 xp 是 100
对第 2 级有 xp 是 200
3 级别有 xp 是 400 等 … …注意:0代表0等级,不是1等级哦
0,100,200,400,800,1600,3200,6400,12800,25600,51200 这里的数值有10等级,当你修改20等级后面自己添加经验- -很麻烦。后面更麻烦的

如果您添加 x 金额水平,然后 51200 后,您将需要添加的级别,例如添加量 x

代码:选择全部
new iXPLevelSaved[MAX_LEVELS+1]               = {0,100,200,400,800,1600,3200,6400,12800,25600,51200,60000,70000,80000};

这是一个示范,我改了13个等级。。
  

这个是经验修改

在 constants.inl 查找

代码:选择全部
#define MAX_SKILL_LEVEL


这是修改技能等级的。找到文件 skill_manager.inl,并找到

代码:选择全部
   // Technically we shouldn't have a skill level EVER greater than 3 right?
   if ( iLevel > 3 )
   {
      WC3_Log( false, "Setting skill %d to %d wtf?? (%d)", skill_id, iLevel, iDebugID );

      log_error( AMX_ERR_NATIVE, "Setting skill %d to %d wtf?? (%d)", skill_id, iLevel, iDebugID );

      return;
   }


并将其更改为

代码:选择全部
   // Technically we shouldn't have a skill level EVER greater than 3 right?
   if ( iLevel > MAX_SKILL_LEVEL )
   {
      WC3_Log( false, "Setting skill %d to %d wtf?? (%d)", skill_id, iLevel, iDebugID );

      log_error( AMX_ERR_NATIVE, "Setting skill %d to %d wtf?? (%d)", skill_id, iLevel, iDebugID );

      return;
   }

这个是技能等级

这个大意都是转WC3论坛,但是我修改编译成功无法游戏,我研究了下,解决方法找到了。。

首先,是因为缺少等级的SPR
打开SPR的warcraft3/level/
这里面我们分别看到0等级到10等级的SPR,所以说,你打开看看就知道了,然后你修改了20等级自己做多10个SPR放进去就解决了。。。

当然,文件名要跟着循环,类似a_level_0.spr这个是0等级的,你做好11等级的SPR改名为a_level_11.spr,一直循环下去你懂得。。


申精啊。。我要升级,,汉化+修改哈哈~~

还有什么不懂得可以找我,别加我Q,我邮箱留言即可 178480849@qq.com
发表于 2012-2-18 19:53:05 | 显示全部楼层 来自 中国–内蒙古–呼和浩特
顶起!支持LZ
回复

使用道具 举报

 楼主| 发表于 2012-2-18 22:31:27 | 显示全部楼层 来自 中国–广东–惠州
呵呵,顶起把,哈哈。。
回复

使用道具 举报

 楼主| 发表于 2012-2-18 22:33:17 | 显示全部楼层 来自 中国–广东–惠州
Village 发表于 2012-2-18 19:53
顶起!支持LZ

你的魔兽论坛不错,。。。
回复

使用道具 举报

发表于 2012-2-18 22:50:30 | 显示全部楼层 来自 中国–内蒙古–呼和浩特
哈哈!是在讽刺我吧?
回复

使用道具 举报

发表于 2012-2-18 23:14:00 | 显示全部楼层 来自 中国–安徽–宿州
支持高手。。
回复

使用道具 举报

发表于 2012-4-26 07:27:42 | 显示全部楼层 来自 中国–湖北–武汉
好东西就是要拿出来分享。
学习中……
回复

使用道具 举报

发表于 2012-10-25 23:33:26 | 显示全部楼层 来自 中国–重庆–重庆

看看吧 怎么样

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注个册吧

×
回复

使用道具 举报

发表于 2012-10-26 13:24:26 | 显示全部楼层 来自 中国–浙江–杭州
。。 上面我看了。。 技能等级修改了。。 技能的效果呢。。 例如不死族 吸血。。 那个百分比也要像经验那样来添加?



                                借号发的帖。。
回复

使用道具 举报

发表于 2012-10-27 20:19:55 | 显示全部楼层 来自 中国–重庆–重庆
lanmao 发表于 2012-10-26 13:24
。。 上面我看了。。 技能等级修改了。。 技能的效果呢。。 例如不死族 吸血。。 那个百分比也要像经验那样 ...

比如你设定技能为19个 加大觉
那么可以这么设定
第一个技能 9级
第二个    5级
第三个    4级
外加大决  1级
必须是19级
然后就修改升级的百分比
9级就必须设定9次
5级就5次
比如吸血
1级  0.1
2级 0.12
同上 到9级 0.9都可以
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

快速回复 返回顶部 返回列表