ex00089 發表於 2017-12-27 09:40:05

有關卡普拉新增收費傳送

本帖最後由 ex00089 於 2018-1-4 09:20 PM 編輯

想請問
我想在卡普拉選單裡面新增一個洞穴傳送
想把城市與洞穴分開收費與傳送
我分開後 選單 傳送服務 顯示傳送地區與金額都是正常 也能傳送
但是 選擇 洞穴服務 顯示傳送地區是 傳送服務 的城是傳送卻不是洞穴傳送的選單
傳送後只會扣錢 也不會傳送

內件卡普拉的菜單 我新增了一個(由於腳本內容長 有刪減一些掉)function      script      F_Kafra      {
      callfunc "F_ClearGarbage"; // Clear outdated, unused variables
      .@welcome = getarg(0);
      .@menu_num = getarg(1);

      switch(.@welcome){
                default:
                case 0:
                        mes "[卡普拉 職員]";
                        mes "歡迎光臨!";
                        mes "卡普拉公司永遠為您提供最優質的服務!";
                        mes "您需要什麼服務呢?";
                        break;
                case 1:
                        mes "[卡普拉 職員]";
                        mes "^666666歡迎...來到...";
                        mes "卡普拉公司...";
                        mes "我們...到死...都會繼續為您服務...^000000";
                        break;
                case 2:
                        set @GID,getcharid(2);
                        mes "[卡普拉 職員]";
                         mes "歡迎光臨. ^ff0000" + GetGuildName(@GID) + "^000000 成員們.";
                        mes "卡普拉公司永遠在各位身邊為您服務!";
                        break;
                case 3:
                        mes "[卡普拉 職員]";
                        mes "您看起來好像來自一個遙遠的地方, 是來研究我們的文化, 還是來觀光呢?";
                        mes "若兩者皆是, 為何不稍稍停留片刻?";
                        mes "在這野花香味撲鼻的國度, 相聚是緣.";
                        break;               
                case 4:
                        mes "[卡普拉 職員]";
                        mes "與許多的卡普拉服務點一樣,";
                        mes "我們會讓你感覺從未離開家鄉.";
                        break;               
                case 5:
                        break;
      }
      while (1) {
                next;
                deletearray @K_Menu0$,getarraysize(@K_Menu0$);
                if (.@welcome == 2) {
                        // Guild Kafra Menu override (free Teleport, free Storage, Free Cart)
                        setarray @K_Menu0$,"使用倉庫","租用手推車","傳送服務","結束對話";
//                        setarray @K_Menu0$,"使用倉庫","租用手推車","結束對話";
                } else {
                        switch(.@menu_num){
                              case 1:      setarray @K_Menu0$,"儲存服務","使用倉庫","結束對話"; break;
                              default: setarray @K_Menu0$,"儲存服務","使用倉庫","傳送服務","洞穴傳送","租用手推車","查詢其他信息","結束對話"; break;
                        }

                }
                set .@menu$,"";
                for (set .@i, 0; .@i < getarraysize(@K_Menu0$); set .@i, .@i + 1)
                        set .@menu$, .@menu$ + @K_Menu0$[.@i] + ":";      
                set .@j, select (.@menu$) - 1;
                if (@K_Menu0$[.@j] == "儲存服務") {
                        return;
                } else if (@K_Menu0$[.@j] == "使用倉庫") {
                        if(.@welcome == 2)
                              callfunc "F_KafStor",2,0,0;
                        else
                              callfunc "F_KafStor",0,getarg(3),.@welcome;
                } else if (@K_Menu0$[.@j] == "傳送服務") {
                        if(.@menu_num != 4) callfunc "F_KafTele",.@welcome;
                        else {
                              mes "[卡普拉 職員]";
                              mes "由於卡普拉公司與秀髮茲發德共和國";
                              mes "簽訂了 ^FF0000《限制傳送服務協議》^000000";
                              mes "所以目前無法為您提供傳送服務!";
                              next;
                              mes "[卡普拉 職員]";
                              mes "如果您想移動到其他區域, 我們推薦您使用飛空艇服務!";
                              mes "感謝您的理解與支持.";
                        }
                } else if (@K_Menu0$[.@j] == "洞穴傳送") {
                        if(.@menu_num != 4) callfunc "Fild",.@welcome;
                } else if (@K_Menu0$[.@j] == "租用手推車") {
                        callfunc "F_KafCart",.@welcome,getarg(4);
                } else if (@K_Menu0$[.@j] == "查詢其他信息") {
                        callfunc "F_KafInfo",getarg(2);
                } else if (@K_Menu0$[.@j] == "結束對話"){
                        callfunc "F_KafEnd",.@welcome,0;
                        end;
                } else if (@K_Menu0$[.@j] == "公會倉庫") {
                        callfunc "F_KafStor",1,0;
                }
      }
}
--------------------------------------------------------------------------------------------------------------
城市傳送 座標地點function      script      F_KafTele      {
      mes "[卡普拉 職員]";
      mes "請告訴我您的目的地";
      next;
      set .@menu$, "";
      for (set .@i, 0; .@i <= 6; set .@i, .@i + 1)
                set .@menu$, .@menu$ + @wrpC$[.@i] + ":";
      set .@j, select (.@menu$) - 1;
      if (@wrpC$[.@j] == "結束對話")
      {
                mes "[卡普拉 職員]";
                mes "如果想用傳送服務, 歡迎您隨時來找我!";
                close2;
                cutin "", 255;
                end;
      }
      if(countitem(7060) > 0 && getarg(0) != 2) delitem 7060,1;
      else {
                if (Zeny<@wrpP[.@j]){
                        mes "[卡普拉 職員]";
                        mes "您沒有足夠的金幣來使用傳送服務,";
                        mes "傳送到 "+@wrpD$[.@j]+" 需要 "+@wrpP[.@j]+" Zeny.";
                        close2;
                        cutin "", 255;
                        end;
                }
                set Zeny, Zeny - @wrpP[.@j];
                set RESRVPTS, RESRVPTS + (@wrpP[.@j]/16);
      }
      cutin "", 255;
      if (@wrpD$[.@j] == "運河之都 艾爾帕蘭") warp "aldebaran",168,112;
      else if (@wrpD$[.@j] == "魔法之都 吉芬") warp "geffen", 120, 39;
      end;
}------------------------------------------------------------------------------------------------------------------------
城市傳送 收費function      script      F_KafSet      {
      cleararray @wrpC$,"",getarraysize(@wrpC$);
      cleararray @wrpD$,"",getarraysize(@wrpD$);
      cleararray @wrpP$,"",getarraysize(@wrpP$);
      cleararray @viewpX,"",getarraysize(@viewpX);
      cleararray @viewpY,"",getarraysize(@viewpY);
      if (strnpcinfo(4) == "prontera") {
                setarray @wrpD$, "運河之都 艾爾帕蘭", "魔法之都 吉芬";
                setarray @wrpP, 2000, 3000;

      if (VIP_SCRIPT && !vip_status(VIP_STATUS_ACTIVE)) {
                for (set .@i, 0; .@i < getarraysize(@wrpD$); set .@i, .@i + 1)
                        setd "@wrpP["+.@i+"]",getd("@wrpP["+.@i+"]") * 2;
      }

      for (set .@i, 0; .@i < getarraysize(@wrpD$); set .@i, .@i + 1)
                setd "@wrpC$["+.@i+"]",getd("@wrpD$["+.@i+"]")+" -> "+getd("@wrpP["+.@i+"]")+" z";
      setd "@wrpC$["+getarraysize(@wrpC$)+"]","結束對話";
      return;
}---------------------------------------------------------------------------------------------------------------------
洞穴傳送 座標地點function      script      Fild      {
      mes "[卡普拉 職員]";
      mes "請告訴我您的目的地";
      next;
      set .@menu$, "";
      for (set .@i, 0; .@i <= 20; set .@i, .@i + 1)
                set .@menu$, .@menu$ + @wrpC$[.@i] + ":";
      set .@j, select (.@menu$) - 1;
      if (@wrpC$[.@j] == "結束對話")
      {
                mes "[卡普拉 職員]";
                mes "如果想用傳送服務, 歡迎您隨時來找我!";
                close2;
                cutin "", 255;
                end;
      }
      else {
                if (Zeny<@wrpP[.@j]){
                        mes "[卡普拉 職員]";
                        mes "您沒有足夠的金幣來使用傳送服務,";
                        mes "傳送到 "+@wrpD$[.@j]+" 需要 "+@wrpP[.@j]+" Zeny.";
                        close2;
                        cutin "", 255;
                        end;
                }
                set Zeny, Zeny - @wrpP[.@j];
      }
      cutin "", 255;
      if (@wrpD$[.@j] == "廢棄礦場") warp "mjolnir_02", 99, 351;
      else if (@wrpD$[.@j] == "獸人村落") warp "gef_fild10", 52, 326;
      end;
}-----------------------------------------------------------------------------------------------
洞穴傳送 收費function      script      Dun      {
      cleararray @wrpC$,"",getarraysize(@wrpC$);
      cleararray @wrpD$,"",getarraysize(@wrpD$);
      cleararray @wrpP$,"",getarraysize(@wrpP$);
      cleararray @viewpX,"",getarraysize(@viewpX);
      cleararray @viewpY,"",getarraysize(@viewpY);
      if (strnpcinfo(4) == "prontera") {
                setarray @wrpD$, "廢棄礦場","獸人村落";
                setarray @wrpP, 600, 1200;

      if (VIP_SCRIPT && !vip_status(VIP_STATUS_ACTIVE)) {
                for (set .@i, 0; .@i < getarraysize(@wrpD$); set .@i, .@i + 1)
                        setd "@wrpP["+.@i+"]",getd("@wrpP["+.@i+"]") * 2;
      }

      for (set .@i, 0; .@i < getarraysize(@wrpD$); set .@i, .@i + 1)
                setd "@wrpC$["+.@i+"]",getd("@wrpD$["+.@i+"]")+" -> "+getd("@wrpP["+.@i+"]")+" z";
      setd "@wrpC$["+getarraysize(@wrpC$)+"]","結束對話";
      return;
}

---------------------------------------------------------------------------------------------------------------------------------
卡普拉的選單我也新增了一個
fayon,100,115,4      script      卡普拉 職員::kaf_payon2      113,{
      cutin "kafra_05",2;
      callfunc "F_KafSet";
      mes "[卡普拉 職員]";
      mes "歡迎光臨, 熱情的冒險家~!";
      mes "卡普拉服務永遠在您身邊!";
      mes "您需要什麼服務呢?";
      callfunc "F_Kafra",5,0,1,60,930;
      savepoint "fayon",69,100,1,1;
      callfunc "F_KafEnd",0,1,"斐揚 城內";
      callfunc "Dun";請問該如何共存 也不會起衝突


vincent800307 發表於 2017-12-28 23:00:28

挑個小錯誤,我還沒有仔細看是不是這個原因
(@K_Menu0$[.@j] == "洞穴服務")

可是你的選單內是"洞穴傳送"
字串判定會不相等
造成If else出問題

ex00089 發表於 2017-12-29 08:32:34

vincent800307 發表於 2017-12-28 11:00 PM static/image/common/back.gif
挑個小錯誤,我還沒有仔細看是不是這個原因
(@K_Menu0$[.@j] == "洞穴服務")



並不是..照片因為是別台電腦寫的
但如果字一樣都是
洞穴傳送 就是像我說的狀況是 傳送服務



逍遙天子 發表於 2017-12-31 05:25:48

ex00089 發表於 2017-12-29 08:32 AM static/image/common/back.gif
並不是..照片因為是別台電腦寫的
但如果字一樣都是
洞穴傳送 就是像我說的狀況是 傳送服務

其實你也可以考慮抓現成的參考,參考一下語法在做修改,也是一種方法.

ex00089 發表於 2017-12-31 08:45:37

逍遙天子 發表於 2017-12-31 05:25 AM static/image/common/back.gif
其實你也可以考慮抓現成的參考,參考一下語法在做修改,也是一種方法.

指的是原碼嗎?
如果是腳本
我是參考卡普拉的

逍遙天子 發表於 2017-12-31 15:06:13

ex00089 發表於 2017-12-31 08:45 AM static/image/common/back.gif
指的是原碼嗎?
如果是腳本
我是參考卡普拉的

腳本區也有傳送npc的腳本,多參考也不吃虧.

ex00089 發表於 2017-12-31 15:15:14

逍遙天子 發表於 2017-12-31 03:06 PM static/image/common/back.gif
腳本區也有傳送npc的腳本,多參考也不吃虧.

我自己是有寫一套收費的可以用
但我想用成每個地區的卡普拉收費制度不一樣

但我發現 如果我改function        script        F_KafZ        {
        mes "[卡普拉 職員]";
        mes "請告訴我您的目的地";
        next;
        set .@menu$, "";
        for (set .@i, 0; .@i <= 20; set .@i, .@i + 1)
                set .@menu$, .@menu$ + @wrpC$[.@i] + ":";
        set .@j, select (.@menu$) - 1;
        if (@wrpC$[.@j] == "結束對話")
        {
中的
                set .@menu$, .@menu$ + @wrpC$[.@i] + ":";
改成其他
                set .@menu$, .@menu$ + @wrpX$[.@i] + ":";

就會變成 空白的




ickrc0204 發表於 2018-1-9 08:32:02

逍遙天子 發表於 2017-12-31 05:25 AM static/image/common/back.gif
其實你也可以考慮抓現成的參考,參考一下語法在做修改,也是一種方法.

他要的是收費的
腳本區全都是免費傳送!

要不然只能固定價錢了

逍遙天子 發表於 2018-1-9 09:28:00

ickrc0204 發表於 2018-1-9 08:32 AM static/image/common/back.gif
他要的是收費的
腳本區全都是免費傳送!



早期的印象是有類似收費的腳本,真的要翻,可能會翻到眼花撩亂.

z0202520 發表於 2018-1-10 17:16:43

本帖最後由 z0202520 於 2018-1-10 05:21 PM 編輯

cleararray @wrpP$,"",getarraysize(@wrpP$);
setarray @wrpP, 600, 1200;
型態不太對吧

題外話,如果沒有特別需求盡量少用點setd getd
這語法會加深閱讀難度

再者你只有收費部分有對那些地圖做初始化動作
免費部分的選單地圖那些如果沒有做初始化
就會沿用你腳色上次使用過的樣子去呈現
頁: [1]
查看完整版本: 有關卡普拉新增收費傳送