[v3]公會技能&公會等級

提供WOG各方面的技術問題,並提供最新path更新。

版主: 涅魂, 簫哥, 10度C~

stu6707
 
文章: 162
註冊時間: 2008-10-26 1:00 pm

[v3]公會技能&公會等級

文章stu6707 » 2011-04-30 5:57 am

v3個公會功能太少了,v4的又太複雜... 很難改成v3

加上有人建議一些公會功能,所以就產生了這功能 :)

修改步驟蠻多的,不便之處請見諒

發現bug請回報~ 謝謝~



名稱:公會技能&公會等級

說明:
p_g_skill - 儲存技能時間,共8個空位,第一個0無用,不用管它。如要擴充技能,需要技能總數+1的空位。10技能需要11空位
p_g_expctrb - 1為確定貢獻經驗,0反之亦然
skill_id - 技能id,必須為連貫數字,必須從1開始,對應p_g_skill的位置
skill_name - 技能名稱
skill_effect - 技能效果
duration - 技能時間,單位為秒
reqd_lv - 技能需求公會等級
g_id - 學會該技能之公會id

公會升級經驗為前一級的2倍
第0級為1兆

p_g_skill中的字串是對應技能資料表中的技能的號碼
explode p_g_skill後,第一個值是無用的([0]),只是用來把陣列的key往後推一個
所以[1]是技能一的時間,[3]式技能二的時間,以此類推

function group_skills(&$p)中的switch的case的數字(好多的 @@)是對應skill_id也是對應p_g_skill的時間,必須要對準!

wog_fight_m.php中的$g_exp=floor($exp*0.1);為貢獻公會10%的戰勝經驗,如要修改請把0.1改成其它數字

wog_act_store.php的些改也是一樣,如要改住宿的打折請把0.1改成其它數字

安裝步驟:
資料庫
ALTER TABLE `wog_player` ADD `p_g_skill` VARCHAR( 80 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '0,0,0,0,0,0,0,0' AFTER `p_g_number` ,
ADD `p_g_expctrb` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `p_g_skill` ;

ALTER TABLE `wog_group_main` CHANGE `g_exp` `g_exp` BIGINT( 13 ) UNSIGNED NOT NULL DEFAULT '0'

CREATE TABLE `wog_group_skills` (
`skill_id` tinyint(3) unsigned NOT NULL,
`skill_name` varchar(20) character set utf8 collate utf8_unicode_ci NOT NULL,
`skill_effect` varchar(30) character set utf8 collate utf8_unicode_ci NOT NULL,
`duration` smallint(5) unsigned NOT NULL default '0',
`reqd_lv` tinyint(1) NOT NULL default '0',
`g_id` varchar(250) character set utf8 collate utf8_unicode_ci NOT NULL
)

INSERT INTO `wog_group_skills` VALUES (1, '魔法屏障', '魔法防禦+3000', 1800, 1, '3');
INSERT INTO `wog_group_skills` VALUES (2, '金剛不壞', '物理防禦+3000', 1800, 1, '3');
INSERT INTO `wog_group_skills` VALUES (3, '電光石火', '速度+3000', 1800, 2, '');
INSERT INTO `wog_group_skills` VALUES (4, '精神爆發', '魔法攻擊+3000', 1800, 3, '');
INSERT INTO `wog_group_skills` VALUES (5, '天罡正氣', '物理攻擊+3000', 1800, 3, '');
INSERT INTO `wog_group_skills` VALUES (6, '精打細算', '住宿費用-10%', 1800, 4, '');
INSERT INTO `wog_group_skills` VALUES (7, '天神之賜福', '防禦與攻擊+3000', 1800, 5, '');


wog_fight_select.php

代碼: 選擇全部
,g.d_s,a.p_bag,a.p_attempts

後加
代碼: 選擇全部
,a.p_g_id,a.p_g_skill,a.p_g_expctrb


代碼: 選擇全部
if($p[p_img_set]==1)

上加
代碼: 選擇全部
$this->group_skills($p);

隨便放
代碼: 選擇全部
   function group_skills(&$p)
   {
      global $DB_site;
      $time=explode(",",$p[p_g_skill]);
      foreach($time as $key => $value)
      {
         if($value > time())
         {
            switch($key)
            {
               default:
               break;
               case 1:
                  $p[p_mdf]+=3000;
               break;
               case 2:
                  $p[p_df]+=3000;
               break;
               case 3:
                  $p[p_agl]+=3000;
               break;
               case 4:
                  $p[p_mat]+=3000;
               break;
               case 5:
                  $p[p_at]+=3000;
               break;
               case 7:
                  $p[p_mdf]+=3000;
                  $p[p_df]+=3000;
                  $p[p_mat]+=3000;
                  $p[p_at]+=3000;
               break;
            }
         }
      }
   }


wog_fight_m.php

代碼: 選擇全部
$exp=round($exp);

上加
代碼: 選擇全部
      if($p[p_g_id] != 0 && $p[p_g_expctrb]==1)
      {
         $g_exp=floor($exp*0.1);
         $exp-=$g_exp;
         $DB_site->query("UPDATE wog_group_main SET g_exp=g_exp+".$g_exp." WHERE g_id=".$p[p_g_id]);
      }


wog_act.php

代碼: 選擇全部
         case "save_book":
            $wog_act_class->group_book_save($HTTP_COOKIE_VARS["wog_cookie"]);
         break;

下加
代碼: 選擇全部
         case "skill_view":
            $wog_act_class->group_skill_view($HTTP_COOKIE_VARS["wog_cookie"]);
         break;
         case "skill_learn":
            $wog_act_class->group_skill_learn($HTTP_COOKIE_VARS["wog_cookie"]);
         break;
         case "skill_use":
            $wog_act_class->group_skill_use($HTTP_COOKIE_VARS["wog_cookie"]);
         break;
         case "exp_ctrb":
            $wog_act_class->group_exp_ctrb($HTTP_COOKIE_VARS["wog_cookie"]);
         break;
         case "lv_up":
            $wog_act_class->group_lv_up($HTTP_COOKIE_VARS["wog_cookie"]);
         break;


wog_act_chara.php
找兩次
代碼: 選擇全部
,w.p_lost,w.p_url,w.p_homename

後加
代碼: 選擇全部
,w.p_g_skill


代碼: 選擇全部
if($s==1)

上加
代碼: 選擇全部
      $time=explode(",",$p['p_g_skill']);
      $skill_id="";
      foreach($time as $key => $value)
      {
         if($value > time())
         {
            $skill_id.=",".$key;
         }
      }
      $skill_id=substr($skill_id,1,strlen($skill_id));
      $skill="";
      if($skill_id != "")
      {
         $s_name=$DB_site->query("SELECT skill_id,skill_name FROM wog_group_skills WHERE skill_id IN ($skill_id)");
         while($s_names=$DB_site->fetch_array($s_name))
         {
            $skill.="<br>".$s_names['skill_name']." ".floor(($time[$s_names[skill_id]]-time())/60)."分鐘";
         }
      }


代碼: 選擇全部
,$p[p_birth],$p[p_cdate],'$bbs_id'

後加
代碼: 選擇全部
,'$skill'


代碼: 選擇全部
,'$p[p_mat]','$p[p_df]','$p[p_mdf]',$p[p_place]

後加
代碼: 選擇全部
,'$skill'


wog_act_group.php
隨便放
代碼: 選擇全部
   function group_skill_view($user_id)
   {
      global $DB_site,$_POST,$lang;
      $group=$DB_site->query_first("SELECT a.g_id,a.g_exp,a.g_lv FROM wog_group_main a,wog_player b WHERE a.g_id=b.p_g_id AND b.p_id=".$user_id);
      if(!$group)
      {
         alertWindowMsg($lang['wog_act_group_nogroup']);
      }
      $skill=$DB_site->query("SELECT skill_id,skill_name,skill_effect,duration,reqd_lv,g_id FROM wog_group_skills");
      $s="";
      while($skills=$DB_site->fetch_array($skill))
      {
         $learned=preg_match("/".$group['g_id']."/",$skills['g_id'])?1:0;
         $s.=";".$skills['skill_id'].",".$skills['skill_name'].",".$skills['skill_effect'].",".$skills['duration'].",".$skills['reqd_lv'].",".$skills['g_id'];
      }
      $s=substr($s,1,strlen($s));
      showscript("parent.group_skill_view('$s',".$group[g_exp].",".$group[g_lv].")");
   }

   function group_skill_learn($user_id)
   {
      global $DB_site,$_POST,$lang;
      if(empty($_POST["skill_id"]))
      {
         alertWindowMsg("沒有選擇技能");
      }
      $skill=$DB_site->query_first("SELECT a.reqd_lv,a.g_id as learned,b.g_id,b.g_lv FROM wog_group_skills a,wog_group_main b,wog_player c WHERE a.skill_id=".$_POST["skill_id"]." AND b.g_id=c.p_g_id AND c.p_id=".$user_id);
      if(!$skill)
      {
         alertWindowMsg($lang['wog_act_group_nogroup']);
      }
      if(preg_match("/".$skill['g_id']."/",$skill['learned']))
      {
         alertWindowMsg("技能已學習");
      }
      if($skill['reqd_lv'] > $skill['g_lv'])
      {
         alertWindowMsg("等級不足以學習技能");
      }
      $g_id=array();
      if(!empty($skill['learned']))
      {
         $g_id=explode(",",$skill['learned']);
      }
      $g_id[]=$skill['g_id'];
      $DB_site->query("UPDATE wog_group_skills SET g_id='".implode(',',$g_id)."' WHERE skill_id=".$_POST["skill_id"]);
      showscript("parent.job_end(15)");
   }

   function group_skill_use($user_id)
   {
      global $DB_site,$_POST;
      if(empty($_POST["temp_id"]))
      {
         alertWindowMsg("沒有選擇技能");
      }
      $skill=$DB_site->query_first("SELECT a.duration,a.g_id,b.p_g_id,b.p_g_skill FROM wog_group_skills a,wog_player b WHERE a.skill_id=".$_POST["temp_id"]." AND b.p_id=".$user_id);
      if(!preg_match("/".$skill['p_g_id']."/",$skill['g_id']))
      {
         alertWindowMsg("公會還未學習該技能");
      }
      $time=explode(",",$skill['p_g_skill']);
      $time[$_POST["temp_id"]]=(time()+$skill['duration']);
      $DB_site->query("UPDATE wog_player SET p_g_skill='".implode(',',$time)."' WHERE p_id=".$user_id);
      showscript("parent.job_end(15)");
   }

   function group_exp_ctrb($user_id)
   {
      global $DB_site,$_POST;
      if(!is_numeric($_POST["temp_id"]))
      {
         alertWindowMsg("發生錯誤");
      }
      $DB_site->query("UPDATE wog_player SET p_g_expctrb=".$_POST["temp_id"]." WHERE p_id=".$user_id);
      showscript("parent.job_end(3)");
   }

   function group_lv_up($user_id)
   {
      global $DB_site,$_POST;
      $group=$DB_site->query_first("SELECT a.g_id,a.g_exp,a.g_lv FROM wog_group_main a,wog_player b WHERE a.g_adm_id1=".$user_id." AND a.g_id=b.p_g_id AND b.p_id=".$user_id);
      if($group)
      {
         if($group['g_lv'] >= 5)
         {
            alertWindowMsg("公會等級已到五級");
         }
         $g_exp=1000000000000*pow(2,$group['g_lv']);
         if($g_exp > $group['g_exp'])
         {
            alertWindowMsg("經驗不夠");
         }
         $DB_site->query("UPDATE wog_group_main SET g_lv=(".$group['g_lv']."+1),g_exp=g_exp-".$g_exp." WHERE g_id=".$group[g_id]);
         showscript("parent.job_end(3)");
      }else
      {
         alertWindowMsg("您不是公會會長");
      }
   }


wog_act_store.php

代碼: 選擇全部
,p_win,p_lost,p_au

後加
代碼: 選擇全部
,p_g_skill


代碼: 選擇全部
if($have_price['p_money'] < $mmoney)

上加
代碼: 選擇全部
         $time=explode(",",$have_price['p_g_skill']);
         if($time[5] > time())
         {
            $mmoney=round($mmoney*0.9);
         }


wog.js
隨便放
代碼: 選擇全部
function group_skill_view(s,exp,lv)
{
   var f=parent.wog_view.document;
   message_cls();
   var next_exp=1000000000000*Math.pow(2,lv);
   f.write(temp_table1);
   f.write('<tr><td>當前等級: '+lv+'</td></tr>');
   f.write('<tr><td>當前經驗: '+exp+'</td></tr>');
   f.write('<tr><td>需要經驗: '+next_exp+'</td></tr>');
   f.write('<tr><td><input type="button" value="貢獻經驗" onclick="parent.act_click(\'group\',\'exp_ctrb\',1)"> ');
   f.write('<input type="button" value="取消貢獻" onclick="parent.act_click(\'group\',\'exp_ctrb\',0)"> ');
   f.write('<input type="button" value="公會升級" onclick="parent.act_click(\'group\',\'lv_up\')"></td></tr>');
   f.write('</table>');
   f.write('<form action="wog_act.php" method="post" target="mission">');
   f.write(temp_table1);
   f.write('<tr><td>選擇</td><td>技能名稱</td><td>技能效果</td><td>技能時間</td><td>需求等級</td><td>狀態</td></tr>');
   var s1=s.split(";");
   for(var i=0,l=s1.length;i<l;i++)
   {
      var s2=s1[i].split(",");
      f.write('<tr><td><input type="radio" name="skill_id" value="'+s2[0]+'"></td><td>'+s2[1]+'</td><td>'+s2[2]+'</td><td>'+s2[3]/60+'分鐘</td><td>'+s2[4]+'</td><td>'+(s2[5]==0?'<input type="submit" value="學習">':'<input type="button" value="使用" onclick="parent.act_click(\'group\',\'skill_use\',\''+s2[0]+'\')">')+'</td></tr>');
   }
   f.write('</table>');
   f.write('<input type="hidden" name="f" value="group"><input type="hidden" name="act" value="skill_learn"></form>');
}


代碼: 選擇全部
   f.write('<tr><td><input type="button" value="認領會員" onClick="parent.act_click(\'group\',\'get_member\')"></td><td class=b1><--核准入會申請<會長專用></td></tr>');

下加
代碼: 選擇全部
   f.write('<tr><td><input type="button" value="公會技能" onclick="parent.act_click(\'group\',\'skill_view\')"></td><td class="b1"><--公會技能</td></tr>');


代碼: 選擇全部
,p_sat_name,p_place,p_birth,p_cdate,bbsid

後加
代碼: 選擇全部
,skill

找4次
代碼: 選擇全部
,p_mat,p_df,p_mdf,p_place

後加
代碼: 選擇全部
,skill


status_view()

代碼: 選擇全部
f.write('<br>'+d_s_ch_name+'奧義');
      }
   }

下加
代碼: 選擇全部
   if(skill.length > 0)
   f.write(skill);


儲存關閉




ETERNAL
 
文章: 2937
註冊時間: 2003-12-03 11:08 pm
性別: 男生

Re: [v3]公會技能&公會等級

文章ETERNAL » 2011-04-30 7:51 pm

我覺得蠻好的阿 繼續加油 :D


水色論壇 http://www.et99.net
簡恩峻分享

stu6707
 
文章: 162
註冊時間: 2008-10-26 1:00 pm

Re: [v3]公會技能&公會等級

文章stu6707 » 2011-05-01 6:10 am

謝謝ET的鼓勵~

我會繼續努力開發v3的公會




回到 Online FF Battle-WOG官方聯盟推廣處

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 5 位訪客