宠物成长

//下面这个方法是宠物升级的函数
int CHAR_PetTakeLevelUp( int petindex, int lv)//强制宠物升级
{
int k;
//下面可以看出lv代表 这个宠物生几级,然后循环级数 比如 你的宠物一下跳了10级,这里就是循环10次升级
//简单来说 宠物跳级 是没有影响的 升一级就是循环一次,生10级就是循环10次
for( k = 1; k < lv; k ++ ){
CHAR_PetLevelUp( petindex );//这个是宠物升级四围的函数
CHAR_PetAddVariableAi( petindex, AI_FIX_PETLEVELUP );
CHAR_setInt( petindex, CHAR_LV, CHAR_getInt( petindex, CHAR_LV) +1 );
}


CHAR_complianceParameter( petindex );
return k;
}


//宠物四围升级的主要函数 这是主要的地方
int CHAR_PetLevelUp( int petindex )
{
struct _RankRandTbl{
int min;
int max;
}RankRandTbl[] = {
{ 450, 500 },
{ 470, 520 },
{ 490, 540 },
{ 510, 560 },
{ 530, 580 },
{ 550, 600 },
};

float Param[4] = { 0.0, 0.0, 0.0, 0.0 };
int LevelUpPoint, petrank;
float str, vital, dex, tgh, fRand, i;
// 娄醒民尼永弁
if( CHAR_CHECKINDEX( petindex ) == FALSE )return -1;
if( CHAR_getInt( petindex, CHAR_WHICHTYPE ) != CHAR_TYPEPET )return -1;

LevelUpPoint = CHAR_getInt( petindex, CHAR_ALLOCPOINT );

// 矢永玄及仿件弁
petrank = CHAR_getInt( petindex, CHAR_PETRANK );
if( petrank < 0 || petrank > 5 ) petrank = 0;

// 潸 
vital = (float)(( LevelUpPoint >> 24 ) & 0xFF);
str = (float)(( LevelUpPoint >> 16 ) & 0xFF);
tgh = (float)(( LevelUpPoint >> 8 ) & 0xFF);
dex = (float)(( LevelUpPoint >> 0 ) & 0xFF);

// ㄠㄟ荚ㄣ 扔奶戊夫毛蕊匀化备嫩 卞ㄠ箫允
for( i = 0; i < 10; i ++ ){
Param[RAND( 0, 3 )] += 1.0;
}

// 这里是一个主要数值(这里是从上面的数组里拿一个petrank【是在随机宠物排名(宠物排名其实就是宠物分类的排名)】下标的最大值,和最小值,然后在这区间内随机抽取一个数然后乘以0.01) 这是一个影响成长的不确定因素
fRand = (float)RAND( RankRandTbl[petrank].min, RankRandTbl[petrank].max )
* 0.01;

//下面这四行是四围成长 基础成长值*随机数+随机基础增长值乘以随机值,这里就是四围的成长了,在往下我就没仔细看了
vital = (float)vital * fRand + Param[0] * fRand;
str = (float)str * fRand + Param[1] * fRand;
tgh = (float)tgh * fRand + Param[2] * fRand;
dex = (float)dex * fRand + Param[3] * fRand;

// 煌遥
CHAR_setInt( petindex, CHAR_VITAL,
CHAR_getInt( petindex, CHAR_VITAL ) + (int)vital );
CHAR_setInt( petindex, CHAR_STR,
CHAR_getInt( petindex, CHAR_STR ) + (int)str );
CHAR_setInt( petindex, CHAR_TOUGH,
CHAR_getInt( petindex, CHAR_TOUGH ) + (int)tgh );
CHAR_setInt( petindex, CHAR_DEX,
CHAR_getInt( petindex, CHAR_DEX ) + (int)dex );

// CoolFish: 饲育家族声望更新
{
int level = CHAR_getInt(petindex, CHAR_LV);

int exp1 = 0, exp2 = 0;
if (level > 30){
chartmpbuf[128];
int ownerindex = CHAR_getWorkInt(petindex, CHAR_WORKPLAYERINDEX);
#ifdef _FMVER21
#else
if (CHAR_getInt(ownerindex, CHAR_FMINDEX) < 0)return0;
if (CHAR_getInt(ownerindex, CHAR_FMLEADERFLAG) <= 0 ) return 0;
if (strcmp(CHAR_getChar(ownerindex, CHAR_FMNAME), "") == 0)return0;
#endif 
if (CHAR_CHECKINDEX(ownerindex)){
exp1 = CHAR_GetLevelExp( petindex, level);
exp2 = CHAR_GetLevelExp( petindex, level - 1);

//#ifdef _PERSONAL_FAME// Arminius 8.30: 家族个人声望
//feedpoint = (exp1 - exp2) / 20000;// 减半
//#else
//feedpoint = (exp1 - exp2) / 10000;
//#endif
if ( exp1 - exp2 > 0){
int feedpoint;
// CoolFish: 2001/10/03
int fd = getfdFromCharaIndex(ownerindex);
#ifdef _PERSONAL_FAME// Arminius 8.30: 家族个人声望
CHAR_earnFame(ownerindex, exp2 / 20000);
sprintf(tmpbuf, "%d", exp2 / 20000);
#endif
feedpoint=exp2 / 20000;
#ifdef _FMVER21
if (CHAR_getInt(ownerindex, CHAR_FMLEADERFLAG) > 0
&& CHAR_getInt(ownerindex, CHAR_FMLEADERFLAG) != FMMEMBER_APPLY){
saacproto_ACFixFMData_send(acfd,
CHAR_getChar(ownerindex, CHAR_FMNAME),
CHAR_getInt(ownerindex, CHAR_FMINDEX),
CHAR_getWorkInt(ownerindex, CHAR_WORKFMINDEXI),
FM_FIX_FMFEED, tmpbuf,
"",
CHAR_getWorkInt(ownerindex, CHAR_WORKFMCHARINDEX),
CONNECT_getFdid(fd));
}
#else
saacproto_ACFixFMData_send(acfd,
CHAR_getChar(ownerindex, CHAR_FMNAME),
CHAR_getInt(ownerindex, CHAR_FMINDEX),
CHAR_getWorkInt(ownerindex, CHAR_WORKFMINDEXI),
FM_FIX_FMFEED, tmpbuf, "",
CHAR_getWorkInt(ownerindex, CHAR_WORKFMCHARINDEX), 0);
#endif
}
}
}
}

return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值