[外掛](2.08)合成系統Synthetic System

版主: 涅魂, 簫哥


涅魂
 
文章: 4463
註冊時間: 2004-01-04 11:17 am
來自: Taiwan
性別: 男生

文章涅魂 » 2005-07-04 7:45 am

kens860807 寫:我有1個問題,想請問一下

文中提及
syn_result=23
syn_ele1=1
syn_ele2=1
syn_ele3=2
syn_ele4=42
syn_ele5=55

是否1~5的結果一定要由小至大?

是不是不能設為

syn_result=23
syn_ele1=55
syn_ele2=1
syn_ele3=42
syn_ele4=1
syn_ele5=2


因為我看到上文中,特別合成的方法是使用
ele1=$_POST[][0] AND ele2=$_POST[][1]
來進行查詢,那麼ele1~5應該要由小至大,是嗎??


還有syn_view方面查詢
$temp_str=$DB_site->query("select d_id,d_df,d_mdf,d_agl,d_mstr,d_magl,d_msmart,d_money,d_name,d_at,d_mat from wog_df where d_id in ($pack[0])");

沒有加ORDER BY d_id,可能應該是預設使用d_id排列


只是一些個人意見....


不過大大還是很強.....合成系統也能寫出來....很讚

1.是的,一定要由小至大,要不然取值會變得很麻煩.... :?
2.因為在顯示可合成的裝備的時候所列出的裝備已經接過排列了(where d_id in ($pack[0])這一段),所以我想因該不必再加上order by d_id了... :wink:
這次的合成系統寫得比以前的都還久,所以程式碼會有點亂....^^||
所以有任何不足的地方歡迎各位指教 :P




涅魂
 
文章: 4463
註冊時間: 2004-01-04 11:17 am
來自: Taiwan
性別: 男生

文章涅魂 » 2005-07-04 5:06 pm

ETERNAL 寫:如果改用LV呢
每樣物品都有LV,而且不在商店內的貴重物LV都是0
這樣可以讓合成不會合到貴重物品

這因該是未來改版的方向吧^^"
目前的2.08的設定是由裝具的能力來分類的..
我在想要不要透過合成成分能力的總合來做上限,合出來的裝備的能力不能超過該上限....
不過這樣做的話必須對資料庫不斷的取值才行.... :?



林天賜
 
文章: 43
註冊時間: 2004-02-27 10:09 am

文章林天賜 » 2005-07-05 7:39 am

還有一個BUG~~~
只要在道具合成欄裡~ 合成道具時~
選兩樣東西合成…當出現:合成成功!
合成結果:XX一份取得!
按鍵盤上的←backspace或ie上的回上一頁!!
則道具可以無限合成~ = =a
要如何修正~~~~




涅魂
 
文章: 4463
註冊時間: 2004-01-04 11:17 am
來自: Taiwan
性別: 男生

文章涅魂 » 2005-07-05 8:07 am

林天賜 寫:還有一個BUG~~~
只要在道具合成欄裡~ 合成道具時~
選兩樣東西合成…當出現:合成成功!
合成結果:XX一份取得!
按鍵盤上的←backspace或ie上的回上一頁!!
則道具可以無限合成~ = =a
要如何修正~~~~

嗯....這是個討人厭的bug....不過還是可以修正 :wink:

開啟檔案wog/class/wog_act_arm.php

in syn_purify() function
尋找
代碼: 選擇全部
$items=split(",",$item[0]);

後面,加上
代碼: 選擇全部
         for($b=0;$b<count($syn);$b++)
         {
            if(!in_array($syn[$b],$items)){alertWindowMsg("錯誤操作!");}
         }

儲存,關閉所有檔案
完畢。 :wink:



林天賜
 
文章: 43
註冊時間: 2004-02-27 10:09 am

文章林天賜 » 2005-07-05 10:23 am

能否設定某些物品無法當作合成原料




涅魂
 
文章: 4463
註冊時間: 2004-01-04 11:17 am
來自: Taiwan
性別: 男生

文章涅魂 » 2005-07-05 10:34 am

林天賜 寫:能否設定某些物品無法當作合成原料

當然可以囉,只要加上一些小設定即可。 :wink:



林天賜
 
文章: 43
註冊時間: 2004-02-27 10:09 am

文章林天賜 » 2005-07-05 11:23 am

可以教一下嗎~~~
關於限定合成材料的方法




涅魂
 
文章: 4463
註冊時間: 2004-01-04 11:17 am
來自: Taiwan
性別: 男生

文章涅魂 » 2005-07-05 1:08 pm

林天賜 寫:可以教一下嗎~~~
關於限定合成材料的方法

其實...可以利用原本就已經存在的欄位..d_dbst :wink:
只要把不想要被合成的道具d_dbst設為2,然後在取得玩家裝備能力的時候加上一條d_dbst!=2即可。 :wink:



林天賜
 
文章: 43
註冊時間: 2004-02-27 10:09 am

文章林天賜 » 2005-07-05 4:04 pm

>_<~~~那就跟隱藏一樣了~~~

我想修正的是道具屋的東西
像捕捉器因為有特殊作用
所以編號固定修改麻煩
所以想將他從合成材料中剔除

至於你說的d_dbst方法,乾脆把編號加大不就行了==|||




涅魂
 
文章: 4463
註冊時間: 2004-01-04 11:17 am
來自: Taiwan
性別: 男生

文章涅魂 » 2005-07-05 8:13 pm

林天賜 寫:>_<~~~那就跟隱藏一樣了~~~

我想修正的是道具屋的東西
像捕捉器因為有特殊作用
所以編號固定修改麻煩
所以想將他從合成材料中剔除

嗯,沒注意到wog_act_shop.php的取值方式.... :oops:
這樣的話您可以在wog_df新增一個欄位,預設值為0。
然後在取值的時候若該欄位的值不為0的則跳過。
這樣因該就可以了 :wink:
林天賜 寫:至於你說的d_dbst方法,乾脆把編號加大不就行了==|||

把d_id加大的話會造成某些問題....



頭像
~木林森~
 
文章: 446
註冊時間: 2005-01-20 12:28 pm
來自: 澎湖的某一處

文章~木林森~ » 2005-07-07 10:11 pm

建議把限定合成的合成成品和合成材料的設定試著加入到New-TypeChobits的系統管理台裡~這樣可以讓一些GM也一起幫忙製作一些~


龜速吸收PHP知識中...
"新"[團結就是力量論壇]登場!歡迎大家加入
WOG Only v2.08 + else Mod (簡單的架設結合許多優秀外掛的WOG)


涅魂
 
文章: 4463
註冊時間: 2004-01-04 11:17 am
來自: Taiwan
性別: 男生

文章涅魂 » 2005-07-08 3:27 pm

~木林森~ 寫:建議把限定合成的合成成品和合成材料的設定試著加入到New-TypeChobits的系統管理台裡~這樣可以讓一些GM也一起幫忙製作一些~

個人覺得因該是不需要的,因為合成的方式基本上要算是"機密"..
要是被站長以外的人知道的話,那麼合成的方式就有可能會因而洩漏出去了....
而且身為站長的話就要多為站台服務一點,不要什麼東西都丟給GM做吧.... :lol:




涅魂
 
文章: 4463
註冊時間: 2004-01-04 11:17 am
來自: Taiwan
性別: 男生

文章涅魂 » 2005-07-13 9:01 am

NEW SYSTEM&DEBUG
這次除了將程式碼簡化之外,還將上面修正的偵測玩家持有道具的DEBUG功能更加強化。
而且還加強了合成結果的顯示。 :wink:
對了,除了舊有的因為取不到值而失敗之外,還加入了20%的失敗機率喔 :lol: :lol: :lol:
(normal synthetizer預計改用V3的道具LV來取值,所以....V3快出吧 :lol: )

開啟檔案wog/wog.js 寫:尋找
代碼: 選擇全部
function syn_end(s,end)
{
..........
..........
..........
}

改成
代碼: 選擇全部
function syn_end(s,end)
{
   var view_name=parent.wog_view;
   message_cls();
   view_name.document.write(temp_table1);
   view_name.document.write('<tr><td>在合成的途中合成爐突然發出閃閃的白光!<BR><p align=center><font size=7><b>轟隆隆隆隆隆隆隆隆隆隆!</b></p></font>');
   var timerID=setTimeout('syn_end_view("'+s+'","'+end+'")',1000);
   view_name.document.write('</td></tr>'+temp_table2+"<br>");
}
function syn_end_view(s,end)
{
   var view_name=parent.wog_view;
   view_name.document.write(temp_table1+'<tr><td>');
   if(end==1)//合成成功
   {view_name.document.write('你的眼前出現了一個閃閃發亮的物品,這次的合成似乎是成功了!<br><br>合成結果: <font color=#ffffaf>'+s+'</font> 入手!');}
   if(end==2)//編號錯誤
   {view_name.document.write('你合出了一團無法辨識的東西,或許是一團垃圾....');}
   if(end==3)//合成失敗
   {view_name.document.write('你的眼前出現了一團灰燼....。');}
   view_name.document.write('</td></tr>'+temp_table2);
}

開啟檔案wog/class/wog_act_arm.php 寫:尋找
代碼: 選擇全部
function syn_purify($user_id)
{
..........
..........
..........
}
改成
代碼: 選擇全部
   function syn_purify($user_id)
   {
      global $DB_site,$_POST,$a_id,$lang;
      if(empty($_POST["syn_way"])){alertWindowMsg('沒有選擇合成方式!');}
      if(count($_POST["syn"])<=1){alertWindowMsg('合成物品最少需要兩個!');}
      $syn=$_POST["syn"];
      check_type($_POST["syn"][0]);
      $sql="select ".$a_id." from wog_item where p_id=".$user_id."";
      $item=$DB_site->query_first($sql);
      if($item[0]=="N/A" || $item[0]=="")
      {alertWindowMsg('沒有任何裝備');}
      else
      {
         $items=split(",",$item[0]);
         $s="";
         for($j=0;$j<count($items);$j++)
         {
            for($a=0;$a<count($_POST["syn"]);$a++)
            {
               if($syn[$a]==$items[$j])
               {
                  $syn_debug++;
                  $syn[$a]=-1;
                  $items[$j]=0;
                  break;
               }
            }
            if($items[$j]!=0)
            {$s.=",".$items[$j];}
         }
         if($syn_debug!=count($_POST["syn"])){alertWindowMsg("錯誤操作!");}
         $chang_d_type=$a_id;
         $s=substr($s,1,strlen($s));
         switch($_POST["syn_way"])
         {
            case "1":##########normal synthetic##########
               $syn_tatal=0;
               for($a=0;$a<count($_POST["syn"]);$a++)
               {$syn_tatal+=$_POST["syn"][$a];}
               $syn_id=floor($syn_tatal/(count($_POST["syn"])))+rand(-5,5);
               $sql="select d_id,d_name from wog_df where d_id=".$syn_id."";
               $new_arm=$DB_site->query_first($sql);
            break;
            
            case "2":##########random synthetic##########
               $syn_num=0;
               for($a=0;$a<count($_POST["syn"]);$a++)
               {$syn_num+=$_POST["syn"][$a];}
               $get_type=$DB_site->query_first("select d_type from wog_df where d_id=".$_POST["syn"][0]."");
               $syn_id=floor(($syn_num/3)*1.1);
               $sql="select d_id,d_name from wog_df where d_id<".$syn_id." and d_dbst=0 and d_type=".$get_type[0]." ORDER BY RAND() LIMIT 1";
               $new_arm=$DB_site->query_first($sql);
            break;
            
            case "3":##########special synthetic##########
               if(count($_POST["syn"])>5){alertWindowMsg("合成物品不可超過5項。");}
               for($ch=0;$ch<5;$ch++)
               {if(!$_POST["syn"][$ch] || empty($_POST["syn"])){$_POST["syn"][$ch]=0;}}
               $new_arm=$DB_site->query_first("select a.syn_result,b.d_name from wog_syn a,wog_df b where a.syn_ele1=".$_POST["syn"][0]." and a.syn_ele2=".$_POST["syn"][1]." and a.syn_ele3=".$_POST["syn"][2]." and a.syn_ele4=".$_POST["syn"][3]." and a.syn_ele5=".$_POST["syn"][4]." and b.d_id=a.syn_result");
            break;
            
            default:##########error##########
               alertWindowMsg('合成系統錯誤!請重新確認。');
            break;
         }
         if(rand(1,5)==1)
         {   
            $DB_site->query("update wog_item set ".$chang_d_type."='".$s."' where p_id=".$user_id." ");
            showscript("parent.syn_end('no',3)");
         }elseif($new_arm[0])
         {
            check_type($new_arm[0]);
            if($a_id==$chang_d_type)
            {
               if($s && !empty($s)){$s.=",".$new_arm[0];}else{$s=$new_arm[0];}
            }else
            {
               $new_blank=$DB_site->query_first("select ".$a_id." from wog_item where p_id=".$user_id."");
               if($new_blank[0]!="N/A" && !empty($new_blank[0]))
               {$new_blank[0].=",".$new_arm[0];}
               else
               {$new_blank[0]=$new_arm[0];}
               $DB_site->query("update wog_item set ".$a_id."='".$new_blank[0]."' where p_id=".$user_id." ");
            }
            $DB_site->query("update wog_item set ".$chang_d_type."='".$s."' where p_id=".$user_id." ");
            showscript("parent.syn_end('$new_arm[1]',1)");
         }else
         {
            $DB_site->query("update wog_item set ".$chang_d_type."='".$s."' where p_id=".$user_id." ");
            showscript("parent.syn_end('no',2)");
         }
      }
   }

儲存,關閉所有檔案
完畢。 :wink:




涅魂
 
文章: 4463
註冊時間: 2004-01-04 11:17 am
來自: Taiwan
性別: 男生

文章涅魂 » 2005-07-18 1:23 pm

NEW SYSTEM
這次將NORMAL SYNTHETIC的計算方式從原本的以d_id的總合來計算的方式改由裝備的能力來計算~
如此應該可以防止利用高編號低能力的道具合出低編號高能力的道具 :wink:
※目前考慮將隨機合成改用其他的合成方式替代..因為隨機合成似乎沒有什麼用處可言... :?

開啟檔案wog/class/wog_act_arm.php
尋找
代碼: 選擇全部
case "1":##########normal synthetic##########
..........
..........
..........
break;

改成
代碼: 選擇全部
                     case "1":##########normal synthetic##########
               $syn_tatal=array();
               $syn_tatal[at_max]=0;$syn_tatal[at_min]=0;
               $syn_tatal[mat_max]=0;$syn_tatal[mat_min]=0;
               $syn_tatal[df_max]=0;$syn_tatal[df_min]=0;
               $syn_tatal[mdf_max]=0;$syn_tatal[mdf_min]=0;
               for($n=0;$n<count($_POST[syn]);$n++)
               {
                  $eq=$DB_site->query_first('select d_at,d_mat,d_df,d_mdf from wog_df where d_id='.$_POST[syn][$n].'');
                  $syn_tatal[at_max]+=$eq[d_at];
                  $syn_tatal[at_min]=abs($syn_tatal[at_min]-$eq[d_at]);
                  $syn_tatal[mat_max]+=$eq[d_mat];
                  $syn_tatal[mat_min]=abs($syn_tatal[mat_min]-$eq[d_mat]);
                  $syn_tatal[df_max]+=$eq[d_df];
                  $syn_tatal[df_min]=abs($syn_tatal[df_min]-$eq[d_df]);
                  $syn_tatal[mdf_max]+=$eq[d_mdf];
                  $syn_tatal[mdf_min]=abs($syn_tatal[mdf_min]-$eq[d_mdf]);
               }
               $DB_site->free_result($eq);
               if($syn_tatal[at_max]>$syn_tatal[mat_max])
               {$ele1="d_at<".round($syn_tatal[at_max]*0.8)." and d_at>".round($syn_tatal[at_min]*1.2);}
               elseif($syn_tatal[at_max]==0 && $syn_tatal[mat_max]==0)
               {$ele1="d_at=0 and d_mat=0";}
               else
               {$ele1="d_mat<".round($syn_tatal[mat_max]*0.8)." and d_mat>".round($syn_tatal[mat_min]*1.2);}
               
               if($syn_tatal[df_max]>$syn_tatal[mdf_max])
               {$ele2="d_df<".round($syn_tatal[df_max]*0.8)." and d_df>".round($syn_tatal[df_min]*1.2);}
               elseif($syn_tatal[df_max]==0 && $syn_tatal[mdf_max]==0)
               {$ele2="d_df=0 and d_mdf=0";}
               else
               {$ele2="d_mdf<".round($syn_tatal[mdf_max]*0.8)." and d_mdf>".round($syn_tatal[mdf_min]*1.2);}
               $sql="SELECT d_id,d_name FROM wog_df WHERE (".$ele1.") and (".$ele2.") ORDER BY rand()";
               $new_arm=$DB_site->query_first($sql);
               //alertWindowMsg($new_arm[0]);
            break;

儲存,關閉所有檔案。
完畢。 :wink:




涅魂
 
文章: 4463
註冊時間: 2004-01-04 11:17 am
來自: Taiwan
性別: 男生

文章涅魂 » 2005-12-09 9:33 pm

修正安裝新系統後用道具合成依舊可以用補血劑合出敏捷>0而其他能力=0的物品~

開啟檔案wog/class/wog_act_arm.php
尋找
代碼: 選擇全部
case "1":##########normal synthetic##########
..........
..........
..........
break;

改成
代碼: 選擇全部
            case "1":##########normal synthetic##########
               $syn_tatal=array();
               $syn_tatal[at_max]=0;$syn_tatal[at_min]=0;
               $syn_tatal[mat_max]=0;$syn_tatal[mat_min]=0;
               $syn_tatal[df_max]=0;$syn_tatal[df_min]=0;
               $syn_tatal[mdf_max]=0;$syn_tatal[mdf_min]=0;
               [color=red]$syn_tatal[agl_max]=0;$syn_tatal[agl_min]=0;[/color]
               for($n=0;$n<count($_POST[syn]);$n++)
               {
                  $eq=$DB_site->query_first('select d_at,d_mat,d_df,d_mdf[color=red],d_agl[/color] from wog_df where d_id='.$_POST[syn][$n].'');
                  $syn_tatal[at_max]+=$eq[d_at];
                  $syn_tatal[at_min]=abs($syn_tatal[at_min]-$eq[d_at]);
                  $syn_tatal[mat_max]+=$eq[d_mat];
                  $syn_tatal[mat_min]=abs($syn_tatal[mat_min]-$eq[d_mat]);
                  $syn_tatal[df_max]+=$eq[d_df];
                  $syn_tatal[df_min]=abs($syn_tatal[df_min]-$eq[d_df]);
                  $syn_tatal[mdf_max]+=$eq[d_mdf];
                  $syn_tatal[mdf_min]=abs($syn_tatal[mdf_min]-$eq[d_mdf]);
                  [color=red]$syn_tatal[agl_max]+=$eq[d_agl];
                  $syn_tatal[agl_min]=abs($syn_tatal[agl_min]-$eq[d_agl]);[/color]
               }
               $DB_site->free_result($eq);
               
               if($syn_tatal[at_max]>$syn_tatal[mat_max])
               {$ele1="d_at<".round($syn_tatal[at_max]*0.8)." and d_at>".round($syn_tatal[at_min]*1.2);}
               elseif($syn_tatal[at_max]==0 && $syn_tatal[mat_max]==0)
               {$ele1="d_at=0 and d_mat=0";}
               else
               {$ele1="d_mat<".round($syn_tatal[mat_max]*0.8)." and d_mat>".round($syn_tatal[mat_min]*1.2);}
               
               if($syn_tatal[df_max]>$syn_tatal[mdf_max])
               {$ele2="d_df<".round($syn_tatal[df_max]*0.8)." and d_df>".round($syn_tatal[df_min]*1.2);}
               elseif($syn_tatal[df_max]==0 && $syn_tatal[mdf_max]==0)
               {$ele2="d_df=0 and d_mdf=0";}
               else
               {$ele2="d_mdf<".round($syn_tatal[mdf_max]*0.8)." and d_mdf>".round($syn_tatal[mdf_min]*1.2);}
               [color=red]if($syn_tatal[agl_max]!=0 && $syn_tatal[agl_min]!=0)
               {$ele3="d_agl<".round($syn_tatal[agl_max]*0.8)." and d_agl>".round($syn_tatal[agl_min]*1.2);}
               else
               {$ele3="d_agl=0 and d_agl=0";}[/color]
               $sql="SELECT d_id,d_name FROM wog_df WHERE (".$ele1.") and (".$ele2.") [color=red]and (".$ele3.")[/color] ORDER BY rand()";
               $new_arm=$DB_site->query_first($sql);
            break;



圖檔

上一頁

回到 外掛區

誰在線上

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