本帖最后由 liuzhly 于 2010-01-12 15:49 编辑
目前,牧场升级代码是 include levelup.php ,只要用户 浇水、铲地等等操作,数据库就会比以往多出 查询、更新 两次操作...所以个人将其修改只有升级的时候才进行数据库查询、更新!
修改了数据库字段,levelup,将其改成:INT(10),默认值:200 ,这个主要用于判断下次升级的级别,和用户的经验对比,如果用户经验超过此值,提示升级,升级后,这个字段更新为下一级别的经验...比原来的TEXT字段,又为数据库省下了不少空间~~
1级=200 1*200
2级=600 (1+2)*200
3级=1200 (1+2+3)*200
..................
所以我将 levelup.php 修改成:(levelup.php ,增加函数:)
function toExp($num){ //用于将级别转换成经验
$toExp = 0;
for($i=1;$i<=$num;$i++){
$toExp += $i;
}
return $toExp * 200;
}
function toGrade($num){//用于将经验转换成级别
$num = floor($num / 200);
$toGrade = 0;
while($toGrade < $num){
$toGrade++;
$num -= $toGrade;
}
return $toGrade;
}
//升级提示
$levelup_exp = $list[0][levelup]; //include之前必须的查询出来levelup值
$nextExp = toExp( toGrade( $levelup_exp ) + 1 ); //下一级别的经验值
$levelup_sql = "";
$up = $_SGLOBAL['db']->query( "SELECT package,fertilizer,decorative,dog FROM ".tname( "plug_newfarm" )." where uid=".$_SGLOBAL['supe_uid'] );
while ( $value = $_SGLOBAL['db']->fetch_array( $up ) ){
$listup[] = $value;
}
$packagearr = json_decode( $listup[0][package] );
$fertilizerarr = json_decode( $listup[0][fertilizer] );
$decorativearr = ( array )json_decode( $listup[0][decorative] );
$dogarr = json_decode( $listup[0][dog] );
$levelup_arr="{\"title\":\"\\u5347\\u7ea7\\u5956\\u52b1\",\"eDesc\":\"\\u8fd9\\u4e48\\u5feb\\u5c31\\u5347\\u7ea7\\u5230".$levelups[$levelup_exp][level]."\\u7ea7\\u4e86\\u554a\\uff1f\\u771f\\u662f\\u795e\\u901f\\uff0c\\u5956\\u52b1\\u4f60".$levelups[$levelup_exp][eDesc]."\\uff0c\\u5feb\\u5230\\u80cc\\u5305\\u91cc\\u770b\\u770b\\u5427\\u3002\",\"item\":[{\"eType\":\"".$levelups[$levelup_exp][eType]."\",\"eParam\":\"".$levelups[$levelup_exp][eParam]."\",\"eNum\":\"".$levelups[$levelup_exp][eNum]."\",\"name\":\"".$levelups[$levelup_exp][name]."\"}],\"level\":".$levelups[$levelup_exp][level]."}";
if( 1 == $levelups[$levelup_exp][eType] ){
$zhongzi = $levelups[$levelup_exp][eParam];
$packagearr->$zhongzi = $packagearr->$zhongzi + $levelups[$levelup_exp][eNum];
$package_srt = json_encode( $packagearr );
$levelup_sql = ",package='{$package_srt}'";
}elseif ( 2 == $levelups[$levelup_exp][eType] ){
foreach ( $decorativearr as $itemtype => $value1 ){
foreach ( $value1 as $key1 => $value2 ){
if ( $key1 == $levelups[$levelup_exp][eParam] ){
$value2->validtime = $_SGLOBAL['timestamp'] + $decorative[$key1][itemValidTime];
}
}
}
$decorative_srt = json_encode( $decorativearr );
$levelup_sql = ",decorative='{$decorative_srt}'";
}elseif ( 3 == $levelups[$levelup_exp][eType] ){
$gongju = $levelups[$levelup_exp][eParam];
$fertilizerarr->$gongju = $fertilizerarr->$gongju + $levelups[$levelup_exp][eNum];
$fertilizer_srt = json_encode( $fertilizerarr );
$levelup_sql = ",fertilizer='{$fertilizer_srt}'";
}elseif ( 4 == $levelups[$levelup_exp][eType] ){
$chongwu = $levelups[$levelup_exp][eParam];
$dogarr->$chongwu->dogFeedTime = $_SGLOBAL['timestamp'] + 172800;
$dog_srt = json_encode( $dogarr );
$levelup_sql = ",dog='{$dog_srt}'";
}
$levelup_arr = json_encode( $levelup_arr );
$levelup_arr = str_replace(array("\"{","}\""), array("{","}"), $levelup_arr );
$levelup_arr = str_replace( "null", "false", $levelup_arr );
$_SGLOBAL['db']->query( "UPDATE ".tname( "plug_newfarm" )." set levelup={$nextExp}{$levelup_sql} where uid=".$_SGLOBAL['supe_uid'] );
//升级提示
上面代码是 levelup.php !
然后,修改newfarmjson.php里面的任务、铲地、收获、种地,利用现有的已打开数据库的查询,去掉浇水、除草、捉虫三个地方升级功能,主要考虑还得重新查询数据,增加服务器负担,所以那3处暂时不增加升级功能!
另外4处,注意橙色部分:
1、任务:
if ( $_REQUEST['mod'] == "task" && $_REQUEST['act'] == "update" ){ //[=37=]
$query = $_SGLOBAL['db']->query( "SELECT taskid,exp,levelup FROM ".tname( "plug_newfarm" )." where uid=".$_SGLOBAL['supe_uid'] );
while ( $value = $_SGLOBAL['db']->fetch_array( $query ) ){
$list[] = $value;
}
$taskid = $list[0][taskid];
if ( $taskid >= 0 && $taskid <=11 ){
$upmoney = $taskid * 50;
$_SGLOBAL['db']->query( "UPDATE ".tname( "plug_newfarm" )." set exp=exp+100,money=money+{$upmoney},taskid=taskid+1 where uid=".$_SGLOBAL['supe_uid'] );
$levelup_arr = 'false';
$list[0][exp] >= $list[0][levelup] && include_once( "levelup.php" );//升级提示,只有达到级别才调用升级
$taskFlag = 2;
if( $taskid ==11 ){
$taskFlag =0;
$taskid = 0;
}
echo stripslashes("{\"eDesc\":\"\\\\u606d\\\\u559c\\\\u60a8\\\\u5b8c\\\\u6210\\\\u4efb\\\\u52a1,\\\\u83b7\\\\u5f97100\\\\u4e2a\\\\u7ecf\\\\u9a8c\\\\u548c{$upmoney}\\\\u4e2a\\\\u91d1\\\\u5e01\",\"item\":[{\"eType\":7,\"eParam\":0,\"eNum\":100},{\"eType\":6,\"eParam\":0,\"eNum\":50}],\"levelUp\":".$levelup_arr.",\"task\":{\"taskId\":{$taskid},\"taskFlag\":{$taskFlag}}}");
}
exit( );
} //[=37=] 任务
2楼继续!!!! |