OK論壇

 找回密碼
 註冊
查看: 2621|回復: 14

道館人數限制腳本寫法

[複製鏈接]
  • TA的每日心情
    擦汗
    2023-9-26 09:18 PM
  • 簽到天數: 70 天

    連續簽到: 1 天

    [LV.6]常住居民II

    發表於 2016-1-28 23:34:49 | 顯示全部樓層 |閱讀模式
    EA
    私服版號: 3CeAM - R637 [主檔]Robe
    問題內容: 腳本問題
    本帖最後由 moilg45754 於 2016-1-29 08:27 PM 編輯

    不好意思又來打擾大家了
    小弟有找到一篇教學  ( http://okayro.com/thread-110145-1-1.html )

       if (!getcharid(1) || Zeny<$@Dc_In_Zeny)
        {
    改成
       if (@psnparty==0 || Zeny<$@Dc_In_Zeny || @partymembercount != x)
        {
    x=限制人數
    可是我這樣改之後,即使是滿足x值的隊伍人數,還是無法進入道館,請問這該怎麼寫呢?



    下面是原先還沒改過的腳本,請大家幫幫忙非常感謝^^" (要限制人數進入)

    malangdo.gat,135,281,5    script    道館挑戰員★    710,{
        mes "【道館★】";
        mes "歡迎您參加道場的挑戰";
        mes "★第五關及第十關15秒後才出王!";   
        next;
        menu "道場報名",field,"取消",piggg;

    piggg:


        close;

    field:   
        mes "【道館★】";
        if (!getcharid(1) || Zeny<$@Dc_In_Zeny)
        {
            mes "您沒有隊伍或金錢不足 "+$@Dc_In_Zeny+" Zeny";
            close;
        }
        for (set @t,1;@t<6;set @t,@t+1)
        {
            if ( getmapusers("guild_vs"+@t+".gat")==0 )
            {
                killmonster "guild_vs"+@t+".gat","Dc_Main_"+@t+"::OnKillMob";
                set Zeny,Zeny-$@Dc_In_Zeny;
                set $@Dc_Truns[@t],1;
                set $@Dc_Party[@t],getcharid(1);
                set $@Dc_timer[@t],$@Dc_Delay[0];
                enablenpc "裁判#"+@t+"";
                initnpctimer "Dc_Timer_"+@t+"";
                warpparty "guild_vs"+@t+".gat",49,47,getcharid(1);
                if (!sleep2(1000))
                end;
                mapannounce "guild_vs"+@t+".gat","[ 道場 ] 請在 "+$@Dc_Delay[0]+" 分鐘內開始比賽,否則將強制退出!",15;
                announce "請 [" + getpartyname(getcharid(1)) + "] 隊伍的隊員集合",15;
                announce "地點在 [區域NPC傳娛樂區★] 找 [道場挑戰-管理員]",15;
                end;
            }
        }
        for (set @t,1;@t<6;set @t,@t+1)
            mes "[場地"+@t+"]隊伍: ["+getpartyname($@Dc_Party[@t])+"]";
        mes "全部場地都有人在挑戰了,請稍後再試";
        close;
    OnInit:
            waitingroom "【★道場挑戰】",0;
        set $@Dc_In_Zeny,1000000; //設置入場金錢
        set $@Dc_Misson,10; //道場關數
        setarray $@Dc_Mob_Id[0],1817,1272,1373,1492,1708,1529,1779,1832,1658,1039,1038,1087,1112,1251,1511,1623,1685,1734; //設置怪物ID
        setarray $@Dc_Mob_Num[1],1,1,1,1,2,1,1,1,1,2; //每關刷怪數量
        setarray $@Dc_Delay[0],5,120,120,120,120,120,120,120,120,120,120; //開始比賽的等待時間,第一關時間,第二關時間,……,單位:分鐘
        setarray $@Dc_Space[1],5,5,5,15,5,5,5,5,15,5; //每關間隔時間,單位:秒
        end;

    }

    guild_vs1.gat,0,0,0    script    Dc_Timer_1    -1,{ OnTimer60000: callfunc "Dc_Timer",1; }
    guild_vs2.gat,0,0,0    script    Dc_Timer_2    -1,{ OnTimer60000: callfunc "Dc_Timer",2; }
    guild_vs3.gat,0,0,0    script    Dc_Timer_3    -1,{ OnTimer60000: callfunc "Dc_Timer",3; }
    guild_vs4.gat,0,0,0    script    Dc_Timer_4    -1,{ OnTimer60000: callfunc "Dc_Timer",4; }
    guild_vs5.gat,0,0,0    script    Dc_Timer_5    -1,{ OnTimer60000: callfunc "Dc_Timer",5; }

    function    script    Dc_Timer    {
        setnpctimer 0,"Dc_Timer_"+getarg(0)+"";
        set $@Dc_timer[getarg(0)],$@Dc_timer[getarg(0)]-1;
        if ($@Dc_timer[getarg(0)]>0)
            end;
        set $@Dc_timer[getarg(0)],0;
        stopnpctimer "Dc_Timer_"+getarg(0)+"";
        areawarp "guild_vs"+getarg(0)+".gat",1,1,300,300,"xams.gat",146,126;
        end;
    }

    guild_vs1.gat,0,0,0    script    Dc_Main_1    -1,{ OnMain: callfunc "Dc_Main",1; OnKillMob: callfunc "Dc_Kill",1; }
    guild_vs2.gat,0,0,0    script    Dc_Main_2    -1,{ OnMain: callfunc "Dc_Main",2; OnKillMob: callfunc "Dc_Kill",2; }
    guild_vs3.gat,0,0,0    script    Dc_Main_3    -1,{ OnMain: callfunc "Dc_Main",3; OnKillMob: callfunc "Dc_Kill",3; }
    guild_vs4.gat,0,0,0    script    Dc_Main_4    -1,{ OnMain: callfunc "Dc_Main",4; OnKillMob: callfunc "Dc_Kill",4; }
    guild_vs5.gat,0,0,0    script    Dc_Main_5    -1,{ OnMain: callfunc "Dc_Main",5; OnKillMob: callfunc "Dc_Kill",5; }

    function    script    Dc_Main    {
        stopnpctimer "Dc_Timer_"+getarg(0)+"";
        initnpctimer "Dc_Timer_"+getarg(0)+"";
        set $@Dc_timer[getarg(0)],$@Dc_Delay[$@Dc_Truns[getarg(0)]];
        for (set @num,0;@num<$@Dc_Mob_Num[$@Dc_Truns[getarg(0)]];set @num,@num+1)
            monster "guild_vs"+getarg(0)+".gat",50,49,"--ja--",$@Dc_Mob_Id[rand(getarraysize($@Dc_Mob_Id))],1,"Dc_Main_"+getarg(0)+"::OnKillMob";
        set $@Dc_Mob[getarg(0)],$@Dc_Mob_Num[$@Dc_Truns[getarg(0)]];
        mapannounce "guild_vs"+getarg(0)+".gat","[ 道場 ] 魔物放出!第 "+$@Dc_Truns[getarg(0)]+" 關挑戰開始!",15;
        mapannounce "guild_vs"+getarg(0)+".gat","[ 道場 ] 請在 "+$@Dc_Delay[$@Dc_Truns[getarg(0)]]+" 分鐘內完成本關,否則將強制退出!",15;
        end;
    }

    function    script    Dc_Kill    {
        set $@Dc_Mob[getarg(0)], $@Dc_Mob[getarg(0)] - 1;
        if( $@Dc_Mob[getarg(0)] > 0 ) end;
        mapannounce "guild_vs"+getarg(0)+".gat","[ 道場 ] "+getpartyname($@Dc_Party[getarg(0)]) +" 隊伍, 第 "+$@Dc_Truns[getarg(0)]+" 關挑戰成功!",15;
        if (!sleep2($@Dc_Space[$@Dc_Truns[getarg(0)]]*1000))
            end;
        if($@Dc_Truns[getarg(0)] == $@Dc_Misson)
        {
            stopnpctimer "Dc_Timer_"+getarg(0)+"";
            areawarp "guild_vs"+getarg(0)+".gat",1,1,300,300,"new_3-2",27,181;
        }
        else
        {
            set $@Dc_Truns[getarg(0)],$@Dc_Truns[getarg(0)] + 1;
            doevent "Dc_Main_"+getarg(0)+"::OnMain";
        }
        end;
    }

    guild_vs1.gat,50,49,4    script    裁判#1    758,{ callfunc "dc_doevent",1; }
    guild_vs2.gat,50,49,4    script    裁判#2    758,{ callfunc "dc_doevent",2; }
    guild_vs3.gat,50,49,4    script    裁判#3    758,{ callfunc "dc_doevent",3; }
    guild_vs4.gat,50,49,4    script    裁判#4    758,{ callfunc "dc_doevent",4; }
    guild_vs5.gat,50,49,4    script    裁判#5    758,{ callfunc "dc_doevent",5; }


    function    script    dc_doevent    {
        mes "[裁判]";
        mes "您準備要開始挑戰了嗎?";
        menu "是的",-;
        close2;
        doevent "Dc_Main_"+getarg(0)+"::OnMain";
        disablenpc "裁判#"+getarg(0)+"";
        end;
    }




    回復

    使用道具 舉報

  • TA的每日心情

    2016-10-9 02:36 PM
  • 簽到天數: 976 天

    連續簽到: 1 天

    [LV.10]以壇為家III

    發表於 2016-1-29 00:30:01 | 顯示全部樓層
    1. *getpartymember <組隊名>{,<類型>};
    複製代碼
    請查DOC/script_commands.txt

    --------------------------------------------------

    直接貼腳本麻煩請用code
    http://okayro.com/thread-162512-1-1.html
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    擦汗
    2023-9-26 09:18 PM
  • 簽到天數: 70 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2016-1-29 00:42:55 | 顯示全部樓層
    謝謝大大回復..小弟不才看不懂..
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情

    2016-10-9 02:36 PM
  • 簽到天數: 976 天

    連續簽到: 1 天

    [LV.10]以壇為家III

    發表於 2016-1-29 01:30:29 | 顯示全部樓層
    本帖最後由 1588 於 2016-1-29 07:08 AM 編輯
    moilg45754 發表於 2016-1-29 12:42 AM
    謝謝大大回復..小弟不才看不懂..

    範例:
    1. getpartymember getcharid(1);
    2.         if ( $@partymembercount > 5 ) {
    3.                 mes "隊伍人數超過規定5人無法報名";
    4.                 close;
    5.         }
    複製代碼
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    擦汗
    2023-9-26 09:18 PM
  • 簽到天數: 70 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2016-1-29 05:50:13 | 顯示全部樓層
    1. field:       
    2.         mes "【道館★】";
    3.         getpartymember getchar(1);
    4.         if ( !getcharid(1) || $@partymembercount > 5 || Zeny<$@Dc_In_Zeny)
    5.         {
    6.                 mes "隊伍人數超過規定5人無法報名";
    7.                 close;
    8.         }
    9.         for (set @t,1;@t<6;set @t,@t+1)
    10.         {
    11.                 if ( getmapusers("guild_vs"+@t+".gat")==0 )
    12.                 {
    13.                         killmonster "guild_vs"+@t+".gat","Dc_Main_"+@t+"::OnKillMob";
    14.                         set Zeny,Zeny-$@Dc_In_Zeny;
    15.                         set $@Dc_Truns[@t],1;
    16.                         set $@Dc_Party[@t],getcharid(1);
    17.                         set $@Dc_timer[@t],$@Dc_Delay[0];
    18.                         enablenpc "裁判#"+@t+"";
    19.                         initnpctimer "Dc_Timer_"+@t+"";
    20.                         warpparty "guild_vs"+@t+".gat",49,47,getcharid(1);
    21.                         if (!sleep2(1000))
    22.                         end;
    23.                         mapannounce "guild_vs"+@t+".gat","[ 道場 ] 請在 "+$@Dc_Delay[0]+" 分鐘內開始比賽,否則將強制退出!",15;
    24.                         announce "請 [" + getpartyname(getcharid(1)) + "] 隊伍的隊員集合",15;
    25.                         announce "地點在 [區域NPC傳娛樂區★] 找 [道場挑戰-管理員]",15;
    26.                         end;
    27.                 }
    複製代碼
    這樣寫對嗎..?
    黑盒子會b一聲
    不好意思請大大教我^^"
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情

    2017-11-30 09:19 AM
  • 簽到天數: 126 天

    連續簽到: 1 天

    [LV.7]常住居民III

    發表於 2016-1-29 09:51:40 | 顯示全部樓層
    moilg45754 發表於 2016-1-29 05:50 AM
    這樣寫對嗎..?
    黑盒子會b一聲
    不好意思請大大教我^^"

    我看3CEAM的script_commands範例 3CEAM

    寫的是

    getpartymember(getcharid(1));




    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2018-7-9 06:13 PM
  • 簽到天數: 88 天

    連續簽到: 1 天

    [LV.6]常住居民II

    發表於 2016-1-29 14:54:37 | 顯示全部樓層
    四樓正解
    解析
    getpartymember = 你要找的隊伍資訊 (理當是執行該NPC的玩家所屬隊伍)
    所以...
    getpartymember 必須搜尋 getcharid(1)
    getcharid(1)先抓到 = 角色party ID

    判斷式部分
    $@partymembercount 作為隊伍人數變數 > 或 <多少為人數限制
    建議使用 >或< 不要使用 =
    多一件事情讓SERVER端判斷負擔就更多。

    另外建議使用ra、herc、sear三種server端
    因為他版以死,建議使用活著的這三種。

    以上。
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    擦汗
    2023-9-26 09:18 PM
  • 簽到天數: 70 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2016-1-29 14:57:34 | 顯示全部樓層
    我試試看,謝謝大大們的教導
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    擦汗
    2023-9-26 09:18 PM
  • 簽到天數: 70 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2016-1-29 14:58:43 | 顯示全部樓層
    BOOGIEJIA 發表於 2016-1-29 02:54 PM
    四樓正解
    解析
    getpartymember = 你要找的隊伍資訊 (理當是執行該NPC的玩家所屬隊伍)

    我上面這樣寫對嗎?因為他都顯示錯誤
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2018-7-9 06:13 PM
  • 簽到天數: 88 天

    連續簽到: 1 天

    [LV.6]常住居民II

    發表於 2016-1-29 15:02:55 | 顯示全部樓層
    moilg45754 發表於 2016-1-29 02:58 PM
    我上面這樣寫對嗎?因為他都顯示錯誤

    你把dos視窗貼出來不是比較快找到錯誤原因嗎?
    發問前建議詳讀所有規定以確保保障你的問題會有人解答。
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    擦汗
    2023-9-26 09:18 PM
  • 簽到天數: 70 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2016-1-29 19:03:26 | 顯示全部樓層
    BOOGIEJIA 發表於 2016-1-29 03:02 PM
    你把dos視窗貼出來不是比較快找到錯誤原因嗎?
    發問前建議詳讀所有規定以確保保障你的問題會有人解答。


    麻煩大大了,對不起今天一整天都沒時間在電腦前面,讓您久等了

    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2018-7-9 06:13 PM
  • 簽到天數: 88 天

    連續簽到: 1 天

    [LV.6]常住居民II

    發表於 2016-1-29 19:06:54 | 顯示全部樓層
    moilg45754 發表於 2016-1-29 07:03 PM
    麻煩大大了,對不起今天一整天都沒時間在電腦前面,讓您久等了

    恕我直言,如果說今天人家寫出來了你複製還可以寫錯那我不建議你寫腳本跟發問

    答案藏在這句話內。

    回復 支持 反對

    使用道具 舉報

  • TA的每日心情

    2017-11-30 09:19 AM
  • 簽到天數: 126 天

    連續簽到: 1 天

    [LV.7]常住居民III

    發表於 2016-1-29 19:55:02 | 顯示全部樓層
    moilg45754 發表於 2016-1-29 07:03 PM
    麻煩大大了,對不起今天一整天都沒時間在電腦前面,讓您久等了

    getpartymember(getcharid(1));

    我上面回答改成這樣你試過了嗎...?
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    擦汗
    2023-9-26 09:18 PM
  • 簽到天數: 70 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2016-1-29 20:24:51 | 顯示全部樓層
    qk2016 發表於 2016-1-29 07:55 PM
    getpartymember(getcharid(1));

    我上面回答改成這樣你試過了嗎...?

    剛剛試了 終於成功 太感謝了!!


    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    擦汗
    2023-9-26 09:18 PM
  • 簽到天數: 70 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2016-1-29 20:27:25 | 顯示全部樓層
    BOOGIEJIA 發表於 2016-1-29 07:06 PM
    恕我直言,如果說今天人家寫出來了你複製還可以寫錯那我不建議你寫腳本跟發問

    答案藏在這句話內。

    謝謝大大的指導,學了很多,很感謝您!
    回復 支持 反對

    使用道具 舉報

    您需要登錄後才可以回帖 登錄 | 註冊

    本版積分規則

    Archiver|手機版|小黑屋|OK討論區

    GMT+8, 2024-5-5 08:26 AM , Processed in 0.060816 second(s), 21 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回復 返回頂部 返回列表