很多人都或多或少的接觸過傳奇服務器端腳本文件,也很想自己制作一點腳本來試試,但又不敢亂碰生怕改壞一點東西造成不能運行服務器端,其實“腳本語言“(我們暫且稱他為一種語言)和C語言等等程序語言比起來那真是不值得一提。看完我給大家寫的這篇文章后,你就自己偷著*吧...可以說傳奇服務器端所有的重點都集中在\mir200\envir\中,這里面記載著所有服務器要在游戲中表現的東西。在游戲中的npc信息也在其中,npcs.txt文件和merchant.txt文件中記載著npc的名稱、出現的地圖、坐標、范圍和形象代碼。你要問兩個記載的npc有什么不同?為什么不和在一起算了?我來告訴你,npcs.txt中記載的npc是對話型npc,在進入游戲后,不能夠使用@reloadnpc刷新信息的npc。而merchant.txt是交易型和任務型npc,可以使用@reloadnpc刷新信息。但我也做過試驗,兩種npc互換后也可以使用,好像沒有太大的限制。npcs.txt對應的文件在.\npc_def\文件夾中merchant.txt對應的文件在.\market_def\文件夾中。你如果要添加npc的時候,要注意npc的文件名,例如你要
創建一個超級商人的npc要他出現在比奇省330:330的坐標。首先你要在.\market_def\文件夾中創建一個文本文件命名為“超級商人-0“(這里你可以使用英文,也可以使用中文,但后面的數字必須要是這個npc出現的地圖代碼!),然后把你寫好的腳本粘貼在里面。再打開merchant.txt文件,添加以下信息:;調用的文件 地圖 坐標x 坐標y 范圍 人物代碼 刷新時間超級商人 0 330 330 0 5 0相信大家可以看懂吧,這里面的空格不要緊,沒有規定信息之間必須空幾格。人物代碼自己換吧,現在的npc有46種模樣。和腳本的規則一樣,這兩個文件里面以;開頭的行就當作注釋部分不做編譯。
第2節
現在步入正題,談談腳本的制作。npc腳本分為兩種,一種是不做交易的npc,一種是與之交易的npc。我們先來講不做交易的npc這類腳本的開頭一般以[@main]開頭,但并不是必須以他開頭,main的英文意思是“主體,主要部分”的意思,所以用他這是個好習慣。接著就是條件語句#if,和他對應的#act,就是說如果...那么...,我在之前的《腳本語言之不完全公略》一文中提到了一系列的測試語句。#if后面可以跟這個測試語句,比如測試金錢checkgold,測試級別checklevel等等,這些測試語句可以連用,挑選滿足這所有值的人。如果你想不要任何條件的話就把他留空,后面直接接#act.接著就是#act,如果有人滿足了上述條件,那么...我們可以使用一些命令應用于他,比如take拿走他身上的什么東西,mapmove把他移動到什么地圖,set賦予他什么函數值等等。這些語句你也可以連著使用。后面也可以跟文字,那么就在傳奇里面顯示為對話。下面是#ELSEACT,如果沒有滿足#if條件的,就不再運行#act后面的指令,直接運行#ELSEACT后面的指令。后面也可以跟文字,那么就在傳奇里面顯示為對話。#say和#elsesay的用法和#act#elsesay的用法相同。
范例:
----------------------------
;傳送豬7的npc腳本
[@main]
#if
checkgold 10000
checklevel 30
#act
take 金幣 10000
map d717
break
#elsesay
你有10000個金幣嗎?要不然就是你沒有30級。我不能把你傳送到豬7了!自己跑吧。
<關 閉/@exit>
----------------------------
這就是一個極其簡單的傳送腳本。我們下一節講稍微復雜的段落腳本。
第三節
這一節我們來講段落腳本。
復雜的腳本需要有數個[@main][@main-1]等等組成,從[@main]到[@main-1]之間稱為一個段落,他們之間是由goto命令來銜接的,#if滿足條件的話,#act就執行goto @main-1命令,轉向[@main-1]段落。值得一提的是goto是腳本自動做出轉換段落的命令,還有一種轉換段落的方式,那就是要玩家自己選擇段落。<go to main-1/@main-1>這部分將在游戲中顯示為黃色可以點選的信息,玩家鼠標選擇后轉向main-1段落。
范例:
----------------------------
;贈送回城卷腳本
[@main]
#if
checkpkpoint 2
#act
goto @main-1
#elseact
give 回城卷 1
[@main-1]
你是紅名啊!別想讓我可憐你,你是個十足的惡魔!什么?怒視著我干嗎?信不信我現在就讓你去死?<相信,我很害怕,我現在就走./@exit>
<不信,我殺人不眨眼,還怕你?/@main-2>
[@main-2]
#if
#act
Param1 t131
Param2 10
Param3 10
MonGen 弓箭守衛 10 10
mapmove T131
;T131這個地圖是賭場的審判間,20*20的房間內有10個弓箭手。50級的紅名進去也是死...
-----------------------------
這個腳本如果不是紅名的話就會得到一個回城卷,是紅名的話就會有上述對話,選“相信”就關閉窗口離開,選“不信”就被傳送到t131地圖,受到10個弓箭手的優待,HOHO~~~這一節我們接觸了“<>”和“\”符號, 如果是“<選擇/@xuanze>”定義了要指向的段落,在游戲中就顯示黃色可點選的“選擇”字樣,如果“<選擇>”沒有定義要指向的段落,在游戲中就顯示紅色的“選擇”字樣。“\”是換行符號,文本文件和可以在游戲對話框中顯示的信息都可以用“\”符號來換行。不可以用回車來代替。
第四節
這一節我們來研究一下設置函數的屬性和概率問題我覺得腳本里面最難的也就是這個啦,其實我也沒有真正搞清其中的奧秘,只知道其中的一些使用的方法。現在如果想制作腳本最主要的也就是做任務了吧,我看了盛大的命運之刃和制作煉獄的任務,其中都要定義一些函數值,就拿肉店任務來說,check [301] 1如果測試到某人[301]函數的值是1的話,那么#act goto @Q301否則#elseact goto @normal,那么如何定義某人[301]函數呢?用set [301] 1命令。但是現在我還沒有弄清楚[]中所能定義的數字到底都有多少個,也不能亂定義數字的值,那樣將會打亂原有任務。而且在盛大取消的賭場腳本里面有equal、mov好像也是檢查函數定義函數的命令,但是只有在玩骰子的npc里面出現,像是專么測試骰子點數的函數,有待研究。還有一種概率命令,那就是random,我們來看一個范例。
范例:
----------------
[@main]
#IF
random 2
#ACT
goto @QUEST
#ELSEACT
goto @normal
[@normal]
你好,歡迎你來自由自在論壇<關 閉/@exit>
[@quest]
我們的網址是:黑鳥網絡<關 閉/@exit>
----------------
這樣一個腳本就牽扯一個概率問題,你在和這個npc對話的時候,看到2種信息的幾率各有百分之50,也就是說每次你看到的信息都是隨機的其中一個。注意這里面是2選1的時候,random的值就取2。在顯示文本的時候,還存在一些隨服務器或不同玩家而自動變換的信息,這里我們就不得不提起沙巴克城。我們知道,沙巴克的npc總要顯示“該城堡的主人是xxx,我們對xxx行會的成員提供20%的折扣”那么不可能在每次沙巴克換主人后更改npc腳本,于是就有了這些隨服務器變換的文本信息,<$LORD>顯示為沙巴克城主的姓名,<$OWNERGUILD>顯示為占領沙巴克的行會名稱,<$CASTLEGOLD>顯示沙巴克城堡的金錢,<$TODAYINCOME>顯示為沙巴克今天的收入,<$CASTLEDOORSTATE>沙巴克城門的狀態等等...另外還有現實不同玩家信息的命令<$USERNAME>,你手中的兵器<$USERWEAPON>。這些都用于加載在文本信息當中顯示。
第五節
這一節我們來介紹交易類型npc
交易類型的npc于普通npc腳本大同小異,但是文件頭部需要定義npc的屬性。拿土城武器店npc做例子。
開頭有個%100的字樣,在石墓陣武器店的開頭是%200,有什么區別呢?原來這是定義這個npc物價的語句。%200就是普通物價的2倍。那么接下來的+5、+6、+43是什么意思呢?這就定義了這個npc只能和你交易武器,也就是說你在鐵匠那里不能賣手鐲。具體什么數字的組合代表什么npc,我在先前的《腳本語言之不完全公略》一文中有詳解。你要是想要npc萬能的話,可以在開頭把要+的數字都給它+上好了。接下來就是腳本正文,和我們前幾講的差不多,但其中用到了一些固定含義的語言,不能
當作他用。
@s_repair 特殊修理
@buy 購買東西
@sell 出售東西
@repair 普通修理
@makedrug 制作毒藥
@storage 保管物品
@getback 取回物品
@exit 關閉窗口
@upgradenow 升級武器
@getbackupgnow 取回武器
交易型npc的結尾會有[goods]段落,這就是npc庫存物品的顯示欄,下面的寫物品有一定的規則:
;名稱 數量 時間
木劍 10 10
八荒 10 10
凝霜 10 10
煉獄 10 10
;屠龍 10 10
還是那句話,不想顯示的物品前面你就打上";"號。如果你想讓武器店里面賣藥,不改上面"+數字"的情況下,強行在[goods]里面加強效金創藥 10 10 反正我沒有試過,刷不刷的出來你自己試嘍...
范例:
;武器店,帶特修,帶倉庫
%100
+5
+6
+43
; -------------(這里必須空一行)
[@main]
#if
#act
hello,<$USERNAME>,歡迎光臨自由自在論壇我們將提供給你最優惠的服務。
<買/@buy><賣/@sell><修理/@repair><特殊修理/@s_repair><保管/@storage>東西
<找回/@getback>東西<關閉/@exit>
[@buy]
您想買些什么武器?\ \ <返 回/@Main>
[@sell]
給我您要賣的武器.\ \ <返 回/@Main>
[@repair]
您要修理武器嗎?給我您要修理的武器.\ <返 回/@Main>
;物品修理前的對話框
[~@repair]
看起來修好了,歡迎下次再來.\ <返 回/@Main>
;物品修理后的對話框,注意這里的[~@repair]
;特修不需要添加類似對應段落,只在開頭有<特殊修理/@s_repair>就可以,
其對應段落寫在m2server.exe中。
[@storage]
需要保管什么東西?\ \ <返 回/@Main>
[@getback]
請看目錄決定找什么東西。\ \ <返 回/@Main>
[goods]
;名稱 數量 時間
煉獄 10 10
銀蛇 10 10
魔杖 10 10
無極棍 10 10
井中月 10 10
血飲 10 10
命運之刃 10 10
裁決之杖 10 10
龍紋劍 10 10
骨玉權杖 10 10
赤血魔劍 10 10
嗜魂法杖 10 10
屠龍 10 10
超級銀蛇 10 10
第六節
談到交易類型npc腳本,我們不得不提倉庫捆東西的腳本,看了才知道如此簡單,就是用到了checkitem、take、give這幾個命令。先檢查你的包裹里面是否有這類物品,有了就拿取它們,給你一樣東西。捆金條和現在很多人自己制作的"武器升級"腳本也是這種原理,我看過一些"武器升級"的腳本,她和盛大的武器升級系統相比簡直就是小兒科的玩藝,就是你拿一些東西去換另一種東西的腳本。我們來看個范例。
范例:
------------------
%100
[@main]
你好,歡迎光臨自由自在論壇,我們會竭誠為您服務。您想<捆/@mbind>東西
<關 閉/@exit>
[@mbind]
#if
#say
你具體想捆什么東西?目前我能捆的就這些啦,捆一次手工費100塊。
<捆/@ch_bind1>強效金創藥<返 回/@main>
[@ch_bind1]
#if
checkitem 強效金創藥 6
#act
goto @ch_bind1_1
#elsesay
你沒有帶齊東西啊,我沒有辦法幫你捆。<離 開/@exit>
[@ch_bind1_1]
#if
checkgold 100
checkitem 強效金創藥 6
#ACT
take 金幣 100
take 強效金創藥 6
give 超級金創藥 1
#SAY
已經捆好了... 我的技術不錯吧.. 還有要捆的就拿給我吧..
<繼續捆/@mbind> <離 開/@exit>
#ELSESAY
你都沒有錢捆東西,還捆什么? 快走吧.... <離 開/@exit>
[@main]
#if
check [099] 1
#say
<$USERNAME>如果你剛才已經下過線了,\那請到監獄長那里重新登記吧!\要不你是出不去的!<好的/@cxsz> 我喜歡<呆在這里/@exit> <我沒有下過線/@exit>
#elseact
goto @cd
[@cd]
<$USERNAME>你是來看望你朋友的嗎?你要回去了?<回土城/@yes> <再等會吧/@exit>
[@cxsz]
#act
set [099] 0
mapmove 0128
break
[@yes]
#act
mapmove 3 320 320
break
監獄長-0128.txt內容如下:
[@main]
#if
check [099] 0
#say
<$USERNAME>你將被重新送往監獄!\時間將重新開始計算!誰叫你中途下線的呀,活該!<好的/@cxsz> 我喜歡<呆在這里/@exit>
[@cxsz]
#act
set [099] 1
timerecall 120
mapmove 0162
break
#elseact
goto @cd
[@cd]
<$USERNAME>希望下次不要再見到你了哦<回土城/@bye> 我還想<再呆會兒/@exit>
[@bye]
#act
set [099] 0
mapmove 3 320 320
break
再在Npcs.txt里加入兩行:
監獄長 0 0128 3 5 0 8
地牢看管員 0 0162 6 15 0 15
|
|