moilg45754 發表於 2016-1-28 23:34:49

道館人數限制腳本寫法

本帖最後由 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;
            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+" 分鐘內開始比賽,否則將強制退出!",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,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,2,1,1,1,1,2; //每關刷怪數量
    setarray $@Dc_Delay,5,120,120,120,120,120,120,120,120,120,120; //開始比賽的等待時間,第一關時間,第二關時間,……,單位:分鐘
    setarray $@Dc_Space,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,$@Dc_timer-1;
    if ($@Dc_timer>0)
      end;
    set $@Dc_timer,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,$@Dc_Delay[$@Dc_Truns];
    for (set @num,0;@num<$@Dc_Mob_Num[$@Dc_Truns];set @num,@num+1)
      monster "guild_vs"+getarg(0)+".gat",50,49,"--ja--",$@Dc_Mob_Id,1,"Dc_Main_"+getarg(0)+"::OnKillMob";
    set $@Dc_Mob,$@Dc_Mob_Num[$@Dc_Truns];
    mapannounce "guild_vs"+getarg(0)+".gat","[ 道場 ] 魔物放出!第 "+$@Dc_Truns+" 關挑戰開始!",15;
    mapannounce "guild_vs"+getarg(0)+".gat","[ 道場 ] 請在 "+$@Dc_Delay[$@Dc_Truns]+" 分鐘內完成本關,否則將強制退出!",15;
    end;
}

function    script    Dc_Kill    {
    set $@Dc_Mob, $@Dc_Mob - 1;
    if( $@Dc_Mob > 0 ) end;
    mapannounce "guild_vs"+getarg(0)+".gat","[ 道場 ] "+getpartyname($@Dc_Party) +" 隊伍, 第 "+$@Dc_Truns+" 關挑戰成功!",15;
    if (!sleep2($@Dc_Space[$@Dc_Truns]*1000))
      end;
    if($@Dc_Truns == $@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,$@Dc_Truns + 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;
}




1588 發表於 2016-1-29 00:30:01

*getpartymember <組隊名>{,<類型>};請查DOC/script_commands.txt

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

直接貼腳本麻煩請用code
http://okayro.com/thread-162512-1-1.html

moilg45754 發表於 2016-1-29 00:42:55

謝謝大大回復..小弟不才看不懂..

1588 發表於 2016-1-29 01:30:29

本帖最後由 1588 於 2016-1-29 07:08 AM 編輯

moilg45754 發表於 2016-1-29 12:42 AM static/image/common/back.gif
謝謝大大回復..小弟不才看不懂..
範例: getpartymember getcharid(1);
        if ( $@partymembercount > 5 ) {
                mes "隊伍人數超過規定5人無法報名";
                close;
        }

moilg45754 發表於 2016-1-29 05:50:13

field:       
        mes "【道館★】";
      getpartymember getchar(1);
      if ( !getcharid(1) || $@partymembercount > 5 || Zeny<$@Dc_In_Zeny)
      {
                mes "隊伍人數超過規定5人無法報名";
                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;
                        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+" 分鐘內開始比賽,否則將強制退出!",15;
                        announce "請 [" + getpartyname(getcharid(1)) + "] 隊伍的隊員集合",15;
                        announce "地點在 [區域NPC傳娛樂區★] 找 [道場挑戰-管理員]",15;
                        end;
                }這樣寫對嗎..?
黑盒子會b一聲
不好意思請大大教我^^"

qk2016 發表於 2016-1-29 09:51:40

moilg45754 發表於 2016-1-29 05:50 AM static/image/common/back.gif
這樣寫對嗎..?
黑盒子會b一聲
不好意思請大大教我^^"
我看3CEAM的script_commands範例 3CEAM

寫的是

getpartymember(getcharid(1));




BOOGIEJIA 發表於 2016-1-29 14:54:37

四樓正解
解析
getpartymember = 你要找的隊伍資訊 (理當是執行該NPC的玩家所屬隊伍)
所以...
getpartymember 必須搜尋 getcharid(1)
getcharid(1)先抓到 = 角色party ID

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

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

以上。

moilg45754 發表於 2016-1-29 14:57:34

我試試看,謝謝大大們的教導

moilg45754 發表於 2016-1-29 14:58:43

BOOGIEJIA 發表於 2016-1-29 02:54 PM static/image/common/back.gif
四樓正解
解析
getpartymember = 你要找的隊伍資訊 (理當是執行該NPC的玩家所屬隊伍)


我上面這樣寫對嗎?因為他都顯示錯誤

BOOGIEJIA 發表於 2016-1-29 15:02:55

moilg45754 發表於 2016-1-29 02:58 PM static/image/common/back.gif
我上面這樣寫對嗎?因為他都顯示錯誤

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

moilg45754 發表於 2016-1-29 19:03:26

BOOGIEJIA 發表於 2016-1-29 03:02 PM static/image/common/back.gif
你把dos視窗貼出來不是比較快找到錯誤原因嗎?
發問前建議詳讀所有規定以確保保障你的問題會有人解答。

http://i.imgur.com/o5qJ4xV.png
麻煩大大了,對不起今天一整天都沒時間在電腦前面,讓您久等了

BOOGIEJIA 發表於 2016-1-29 19:06:54

moilg45754 發表於 2016-1-29 07:03 PM static/image/common/back.gif
麻煩大大了,對不起今天一整天都沒時間在電腦前面,讓您久等了

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

答案藏在這句話內。

qk2016 發表於 2016-1-29 19:55:02

moilg45754 發表於 2016-1-29 07:03 PM static/image/common/back.gif
麻煩大大了,對不起今天一整天都沒時間在電腦前面,讓您久等了

getpartymember(getcharid(1));

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

moilg45754 發表於 2016-1-29 20:24:51

qk2016 發表於 2016-1-29 07:55 PM static/image/common/back.gif
getpartymember(getcharid(1));

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

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


moilg45754 發表於 2016-1-29 20:27:25

BOOGIEJIA 發表於 2016-1-29 07:06 PM static/image/common/back.gif
恕我直言,如果說今天人家寫出來了你複製還可以寫錯那我不建議你寫腳本跟發問

答案藏在這句話內。

謝謝大大的指導,學了很多,很感謝您!
頁: [1]
查看完整版本: 道館人數限制腳本寫法