set 部 分
前墜 @ 人物帳號不紀錄變量 (這變數,當人物登出就會消失(關機時,人物也算是登出))
無 人物帳號紀錄變量 (這變數,即使人物登出,也不會消失)
$ 伺服器紀錄變量 (這變數,即使關機,也不會消失)
$@ 伺服器不紀錄變量 (這變數,關機或使用@reloadscript 都會讓他消失)
. NPC紀錄變量(類似$@但是他只有在你執行這個NPC時後才可以使用--->只存在這個NPC上的變數)
.@ NPC不紀錄變量 (NPC停止運轉(像是被end;了) 就會消失)
# 會記錄在帳號上的變數
## 會記錄在帳號上的變數(如果私服有分流,那就是分流上,都會共用的到(你可以想成線上遊戲要買的點數,就是這個))
後標 無 那這個變數用來存數字的
$ 這變數是用來存字串(文字)的
再 延 伸
有 所 謂 的 陣 列 ( array )( 前墜(陣列名稱)後標[n] )
所 謂 的 陣 列
就 是 把 好 幾 個 變 數 的 集 合 體
舉 例 $@x[1]
$@x[2]
$@x[n] (n需小於128和大於等於0)
陣 列 通 常 是 用 在 資 料 間 有 關 係 的 時 候
比 如 說 都 是 用 來 存 取 腳 色 名 稱 的 陣 列
而 陣 列 常 常 都 配 合 迴 圈 使 用(點我)
因 為 數 據 彼 此 間
可 以 藉 由 [n] 的 不 同
做 串 接
陣 列 的 設 定 分 成 單 一 設 定
和 多 個 設 定
單 一 設 定 就 是 用 set 然 後 指 定 n
如
或 是 一 次 多 個
上 面 可 以 一 次 就 設 定 好 $@x[1] = 1
$@x[2] = 2
$@x[3] = 3
$@x[4] = 4
有 些 類 型 不 能 用 陣 列 +==========+======+=======+
|VarType | 一般 | 陣列 |
+==========+======+=======+
|$Str$ | OK! | OK! |
+----------+------+-------+
|$@Str$ | OK! | OK! |
+----------+------+-------+
|@Str$ | OK! | OK! |
+----------+------+-------+
|#Str$ | OK! | FAIL! |
+----------+------+-------+
|Str$ | OK! | FAIL! |
+----------+------+-------+
|$Int | OK! | OK! |
+----------+------+-------+
|$@Int | OK! | OK! |
+----------+------+-------+
|@Int | OK! | OK! |
+----------+------+-------+
|#Int | OK! | FAIL! |
+----------+------+-------+
|Int | OK! | FAIL! |
+----------+------+-------+
|.Str$ | OK! | OK! |
+----------+------+-------+
|.Int | OK! | OK! |
+----------+------+-------+
|.@Str$ | OK! | OK! |
+----------+------+-------+
|.@Int | OK! | OK! |
+----------+------+-------+
從 mes ""; 告 訴 你 變 數 的 一 些 使 用 規 則
如 果 @x = 1
mes "@x";
他 會 顯 示 @x 而 非 1
但 如 果
mes @x;
他 就 會 顯 示 1
那
mes "0"+@x;
他 會 顯 示 01
再 多 一 點
mes "0"+@x+"1";
他 會 顯 示 011
補 充 :
清 除 變 數 範 例
set @x,0;
set @x$,"";
第 二 種 說 明
set 相關
變數的定義 .. <儲存位子><變數名稱><資料型態>
set .@i,0;
設變數 儲存位置 變數名稱 為 0
首先先說儲存位置
@ 代表暫時存在玩家身上,當和切換腳色就會消失。
.@ 暫時存在NPC身上,對話結束才會消失。 ps.當碰到 end; close;就會不見
$ 存在伺服器會一直存在。(永遠儲存在伺服器裡面)
$@ 伺服器暫時存在,關機後就消失。 ps. @reloadscript也會使$@消失
直接存到玩家身上。
# 是角色永久變數
## 是全部帳號永久變數 ps.## 以及 # 分流會共通、$ 分流不會共通
變數名稱
不能和函數重疊,還有不能加上特殊符號並且開頭不能為數字。
資料型態
$ -> 為文字
所以$就等於字串
後面沒有東西就是數字
例如
set .@i$,"abc";
在所有語言中..字串都必須用雙引號框""起來
反之(錯誤示範)
set .@i$,cba; 不會叫
只不過.@i$會變成0
因為 變數 cba = 0
請反白上面
---以下有些例子
set .@i$,"abc"+.@i+ "cba";
Q:這樣有效嘛? A:有效。
mes .@i$;會顯示abc0cba
因為.@i你沒給他一個值,所以.@i==0
請反白上面。
-
只要是沒給過值的變數
如.
變數 == mes顯示的文字
.@i$ == "null"
null 代表 .. "" 空字串
.@i == 0
---
運算符號
+ 如果在字串和字串運算的時候、會把兩個字串相連起來
而在數字運算的時候、才會把兩個數字相加起來
所以 "A" + 1 他會把他相連起來 變成 "A1"
那如果改成 mes 1 + 1 + "A";
mes 1 + 1 + "A"; => mes 2 + "A"; => mes "2A";請反白前面
四則運算 先乘除後加減,括號裡面先運算。
ps.由左到右
所以 1 + 1 = 2
2 + A =2A
A + 1 + 1 = A+1= A1 + 1 = A11
而字串和數字不能運算、所以 如果 "A" - 1 會出錯
Q:mes "B" + (1 + 1); 會顯是什麼? A:B2 請反白前面
Q:mes "A" + "B"; 會顯是什麼? A: AB 請反白前面
Q:那為什麼mes "A" + 1 - 1; 會錯? A: () 請反白前面
Q:mes "A" + ( 1 - 2); 會顯是什麼? A: mes "A" + (1-2); => mes "A" + -1 => mes "A-1"; 請反白前面
Q:mes "A" + 1 * 3; 會顯是什麼? A: A3 請反白前面
Q:mes "A" + 1 * 2 + (3 - 1 + "B"); 會顯是什麼? A: A22B 請反白前面
% 代表求餘數
5 / 2 = 2.5
但是我們在要求餘數
所以 5 / 2 = 2餘1
可是腳本不知道你要2.5還是2..1
所以跑出一個 %
5%2 = 1
那取整數?(不取餘數)
(5 - ( 5 % 2 )) / 2 先把餘數減掉在去 除
Q:mes 10%7; 等於什麼? A: 3 請反白前面
Q:mes 100%96; 等於什麼? A: 4 請反白前面
小方法分享 ↓請反白↓
例如我們要求5 % 2的餘數
5 - 2 = 3 - 2 = 1 我們要求的數就是 1
如果換求10 % 7 的餘數
10 - 7 = 3 3不能再減了所以就是我們要的答案 3
↑請反白↑
稍微進階
% 通常用在判斷是不是倍數
例如:要判斷 .@a 是不是 300 的倍數
就會這樣用
if(.@a % 300 == 0){是倍數}else{不是倍數}
整除代表一定是他的倍數
5 / 5 = 1 ... 0 10 / 5 = 2 ... 0 整除的話才會是倍數
^ 在正常生活中常常會用到的次方、開根號。
pow(2,3) = 2 的三次方 = 8,sqrt(4) = 4 的開根號 = 2
pow() -> 次方
sqrt() -> 開根號
1^1 = 0 、 1^0 = 1 、 0^0 = 0 、 0^1 = 1
相同為 0 、 相異為 1
---
角色的變數
指令
| 說明 | Sex | 性別[0=女][1=男] | Weight | 目前負重 | MaxWeight | 最大負重 | JobLevel | 職業等級 | BaseExp | 基本經驗值 | JobExp | 職業經驗值 | NextBaseExp | 下次升級基本經驗值 | NextJobExp | 下次升級職業經驗值 | Hp | 目前HP | MaxHp | 最大HP | Sp | 目前SP | MaxSp | 最大SP | BaseJob | 職業編號,顯示直為職業編號,效果不明。 | Manner | 結婚 | Zeny | 目前Zeny | Upper | 轉生[0=未轉][1=已轉] | Class | 職業 | SkillPoint | 技能點數 | BaseLevel | 基本等級 | StatusPoint | 屬性點數 |
---
判斷式
判斷式有兩個
if(條件)指令
jump_zero(條件)標籤
if翻成中文叫做 如果
set .@i,5;
if( .@i == 5) 這是什麼意思?
如果.@i=5會執行下一階段命令
-
例
if( i == 0){ getitem 607,1; set i,1; }
如果沒領過 i 當然沒被設定所以會是 0
如果沒領過就執行裡面的內容
領過之後set i,1; 他就會改成 1 所以永遠不能再領了
-
以下是if常用到的符號
符號 | 說明
| != | 不等於 | >= | 大於等於 | <= | 小於等於 | > | 大於 | < | 小於 | && | 以及(類似AND) |
↑其實 .. == 、 != 、 >= .... 之類的
不一定要用在if() 裡面
也可以當作運算、 因該說、 他原本就是個運算
稍微進階
set .@b, 2 == 2; 這樣一來 .@b 會 = 1 、 因為他是正確的。
而如果說 set .@b, 2 != 2; 、 這樣.@b 會 = 0 、 因為他是錯誤的
如果運算是成立的會返回 1
如果運算是錯誤的會返回 0
-
countitem() 等於 檢查人物身上的某樣道具
Count = 數 、 item = 道具 、 CountItem = 數看看身上有幾個道具
假設我身上放2個天果
Q:mes countitem( 607);會顯示什麼? A: 2 請反白前面
Q:set .@i,countitem( 607 );
mes .@i; 會顯示什麼? A: 2 請反白前面
-
== 和 != 和 < 和 > 和 <= 和 >= 也可以拿數字
所以只要記得 .. 判斷成功 .. 他會顯示 1 如果你說錯 .. 他會顯示 0
Q:那 mes 1==2; 會顯是什麼? A: 0 請反白前面
Q:mes 1 == 1; 呢? A: 1 請反白前面
Q:set .@i, 1 != 1;
mes .@i; 會顯是什麼? A: 0 請反白前面
ps.只能用在數字
ps.字串不能運算!
ps.!= 不可以應用在 !> 或 !<
if簡略寫法
if( 1 ) => 會執行、 if( 0 )不會執行。
所以 if( @i ) 如果 @i 不是 0 、 就會執行
也就等於 if( @i != 0)
if( .@i != 0) 也可以寫成 if(.@i)
if( .@i == 0) 也可以寫成 if(!.@i)
想實驗的可以把下面代碼PO到腳本用用看- prontera,150,180,4 script Goddameit#1 990,{
- if(!@i){
- mes "0"; close;}
- mes "1";
- close;
- }
複製代碼 |