看到论坛这个板块里N多人都在说VC的“加分”机制不厚道,“强烈要求去掉”云云。本人电驴子新手,总觉得“凡事总需研究,才会明白”,“加分”到底对不对,拿源代码说话。
OK,废话少说,先上代码:
代码
//VeryCD版,积分调整 added by kernel1983 2006.08.01
CString strBuffer = this->GetUserName(); //获得对方的Nick
if (
// strBuffer.Find(_T(”[VeryCD")) != -1 || strBuffer.Find(_T("[CHN]“)) != -1 ||
(thePrefs.UseCreditSystem() && credits->GetScoreRatio(GetIP())!=1) ||
(currequpfile->GetUpPriority() == PR_VERYHIGH) ||
(IsEmuleClient() && (GetAvailablePartCount() > 0) || (m_nDownloadState == DS_DOWNLOADING))||
IsFriend()
)
{
fBaseValue += 19900; //增加积分
}
这段代码是VC加到官版 CUpDownClient::GetScore() 方法里的,用做积分调整。顺便说一下,电驴里的“得分”和“评分”都是用这个方法来计算,用调用参数来区别。
这段代码很简单,主要的就是那个if语句,里面一共有6个互为“或”关系的逻辑语句,一一解释下:
1、strBuffer.Find(_T(”[VeryCD")) != -1
这个一看就知道,判断对方的nickname里是否有“[VeryCD”的tag,这也是网友们批评VC最多的地方2、strBuffer.Find(_T("[CHN]“)) != -1
道理同上,不过是判断对方的nickname里是否有“[CHN]”,也就是说,如果对方名字里只有[CHN],也能获得“加分”3、thePrefs.UseCreditSystem() && credits->GetScoreRatio(GetIP())!=1
判断对方是否使用信用系统,并且对自己有上传(上传下载比例不再是1)4、currequpfile->GetUpPriority() == PR_VERYHIGH
看共享的文件是不是“发布”级别,如果是“发布”就给对方“加分”5、IsEmuleClient() && (GetAvailablePartCount() > 0) || (m_nDownloadState == DS_DOWNLOADING)
这个还不是太明白,好像是说如果对方对于我要下载的文件,如果拥有超过1个文件分块,就给对方“加分”,或者如果我正在下载对方的文件,也给对方“加分”6、IsFriend()
既然我们是朋友,就加点分吧……上面简单分析了一下“加分”规则。
3、5两条是鼓励上传的,这没问题。
4、6两条见仁见智,我认为给朋友和发布级别的文件加分也是可以接受的,算是一种“偷懒”的解决方法。当然我知道,对于不同共享级别文件的排队顺序有更好的算法,对于朋友,xt的mod也有朋友通道这一方法。
问题出在1、2两条,nickname里只要有[VeryCD]或者[CHN]就有加分,这对于其他mod是不公平的,估计这也是VC被国外评做community mod的原因。
说下我的看法:
1、论坛上很多人说VC只给VC的mod加分,这种说法是片面的。VC的加分规则是在鼓励上传,同时也鼓励使用[VeryCD]或者[CHN]这两种tag,并没有限制只能用VC的mod。
2、关于community mod,我认为VC并不是只给自己的mod上传,不算严格的community mod。也不能因此就说VC是leecher。我比较同意某大虾的说法:只有吸血的人,没有吸血的mod.
3、VC作为一个商业公司,能够坚持开放源码,在国内这个大环境下,是值得表扬的(顺便BS一下国内某个不愿意开源的驴子)。
好了,大家都看明白了吧,其实很简单,如果还有不明白的可以相互交流一下。