Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

====开心农场====关于升级奖励优化方法及说明

[复制链接]
liuzhly 发表于 2010-1-12 12:51:34 | 显示全部楼层 |阅读模式
本帖最后由 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楼继续!!!!
回复

使用道具 举报

 楼主| liuzhly 发表于 2010-1-12 12:51:52 | 显示全部楼层
本帖最后由 liuzhly 于 2010-01-12 13:11 编辑

同样,翻新土地地方,修改如下:

if ( $_REQUEST['mod'] == "farmlandstatus" && $_REQUEST['act'] == "scarify" ){ //[=5=]
        $query = $_SGLOBAL['db']->query( "SELECT farmlandstatus,exp,levelup FROM ".tname( "plug_newfarm" )." where uid=".$_SGLOBAL['supe_uid'] );
        while ( $value = $_SGLOBAL['db']->fetch_array( $query ) ){
                $list[] = $value;
        }
        $farm_arr = ( array )json_decode( $list[0][farmlandstatus] );
        if ( 0 < $farm_arr[farmlandstatus][$_REQUEST['place']]->a ){
                $farm_arr[farmlandstatus][$_REQUEST['place']]->a = 0;
                $farm_arr[farmlandstatus][$_REQUEST['place']]->b = 0;
                $farm_arr[farmlandstatus][$_REQUEST['place']]->f = 0;
                $farm_arr[farmlandstatus][$_REQUEST['place']]->g = 0;
                $farm_arr[farmlandstatus][$_REQUEST['place']]->h = 1;
                $farm_arr[farmlandstatus][$_REQUEST['place']]->i = array( );
                $farm_arr[farmlandstatus][$_REQUEST['place']]->j = 0;
                $farm_arr[farmlandstatus][$_REQUEST['place']]->k = 0;
                $farm_arr[farmlandstatus][$_REQUEST['place']]->l = 0;
                $farm_arr[farmlandstatus][$_REQUEST['place']]->m = 0;
                $farm_arr[farmlandstatus][$_REQUEST['place']]->n = "";
                $farm_arr[farmlandstatus][$_REQUEST['place']]->o = 0;
                $farm_arr[farmlandstatus][$_REQUEST['place']]->p = array( );
                $farm_arr[farmlandstatus][$_REQUEST['place']]->q = 0;
                $farm_arr[farmlandstatus][$_REQUEST['place']]->r = 0;
                $farm_arr[farmlandstatus][$_REQUEST['place']]->s = 0;
                $farm_arr[farmlandstatus][$_REQUEST['place']]->t = 0;
                $farm_arr[farmlandstatus][$_REQUEST['place']]->u = 0;
                $farm_arr = json_encode( $farm_arr );
                $_SGLOBAL['db']->query( "UPDATE ".tname( "plug_newfarm" )." set farmlandstatus='".$farm_arr."',exp=exp+3 where uid=".$_SGLOBAL['supe_uid'] );
                $levelup_arr = 'false';
                $list[0][exp] >= $list[0][levelup] && include_once( "levelup.php" );//升级提示
                echo stripslashes( "{\"farmlandIndex\":".$_REQUEST['place'].",\"code\":1,\"direction\":\"\",\"exp\":3,\"levelUp\":".$levelup_arr."}" );
        }else{
                echo "{\"farmlandIndex\":".$_REQUEST['place'].",\"code\":0,\"poptype\":1,\"direction\":\"\\u5df2\\u7ecf\\u9504\\u8fc7\\u8fd9\\u5757\\u5730\\u4e86\\u54df\\uff01\"}";
        }
        include_once( S_ROOT."./source/function_cp.php" );
        $icon = "farm";
        $title_template = "{actor} 去自己的 <a href=\"newfarm.php\">农场</a> 辛勤工作了一番,翻新了土地";
        $body_general = "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦!";
        if($feed_add_chk){feed_add( $icon, $title_template);}
        exit( );
}  //[=5=] 翻新土地


其他两个地方大同小异...都是通过系统已有的数据库打开,对比两个值大小进行判断升级,重复工作,这里就不多说了~~

奉劝:新手就别动了!!!复制代码肯定与你的农场不兼容,照葫芦画瓢尚可~~注意带颜色的字..

这样修改后,系统基本无负担~~~~

上午已测试代码无误...
回复

使用道具 举报

kissmahao 发表于 2010-1-12 13:00:39 | 显示全部楼层
((em:09)) LZ很强大。
回复

使用道具 举报

iamxyh 发表于 2010-1-12 13:26:40 | 显示全部楼层
levelup.php 的全文就是一楼的吗?
回复

使用道具 举报

samfs 发表于 2010-1-12 13:29:30 | 显示全部楼层
高手显身,大众实惠
回复

使用道具 举报

 楼主| liuzhly 发表于 2010-1-12 13:36:40 | 显示全部楼层
levelup.php 的全文就是一楼的吗?
iamxyh 发表于 2010-01-12 13:26



   说模糊了,重新看1楼吧,改好了!!
回复

使用道具 举报

 楼主| liuzhly 发表于 2010-1-12 14:02:36 | 显示全部楼层
刚刚1楼重新修改了,我去掉升级给狗的那个,现在加上了~~
回复

使用道具 举报

kazzak 发表于 2010-1-12 14:07:53 | 显示全部楼层
楼主还是很强大,但是确实不敢改动
回复

使用道具 举报

lazich 发表于 2010-1-12 15:44:08 | 显示全部楼层
强贴!

顶到边上去!
回复

使用道具 举报

dansui1314 发表于 2010-1-12 15:48:54 | 显示全部楼层
很强大~~~!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-10-21 18:44 , Processed in 0.128384 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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