
標題: AI函式及指令教學 [打印本頁]
作者: nashcyl283 時間: 2010-4-4 10:50 標題: AI函式及指令教學
轉自國家之寶http://powergbj.110mb.com/index.php
//註解
語法
//註解內容
功用
設定此行為註解,不必執行.
範例:
//設定A值
int a = 0;
/* */註解
語法
/*註解內容*/
功用
設定兩個符號內的全是註解
範例:
/* 國寶對抗劍少皇
劍少皇太強打不敗
*/
變數宣告
int a; 宣告a值為整數數值
string a; 宣告a值為字串數值
陣列宣告
int a[10]; 宣告a陣列為整數數值
string a[10]; 宣告a陣列為字串數值
FOR指令
語法
for(運算式){執行內容}
功用
重覆增值執行一段程序
範例:
int a;
for (a = 2;a <= 16;a++)
{
ChangeBehavior(a, "patrol", Rand(40), Rand(40), Rand(40));
}
這段程序可讓NPC們全數修正行為
#include指令
語法
#include "file name"
功用
載入另一個檔案一起執行.
範例:
#include "gbj.ai"
載入gbj.ai一起執行
次程序
語法
function name(傳遞數值){程序內容}
功用
自定一個獨立程序.
範例: SaySub(int id,int s,string say1,string say2,string say3,string say4,string say5)
{
if (s == 0)
{
Say(id,say1);
}
if (s == 1)
{
Say(id,say2);
}
if (s == 2)
{
Say(id,say3);
}
if (s == 3)
{
Say(id,say4);
}
if (s == 4)
{
Say(id,say5);
}
}
int a;
OnUpdate()
{
int a = GetChar("國寶");
SaySub(a,Rand(5), "劍少皇為啥砍文呀!?","大家安安","大家來玩流星吧!", "各位大大安安","再砍就翻臉了");
}
這就簡單的副程序構成,及呼叫方式
函式教學文件
GetChar()函式
語法
GetChar(string name)
功用
得到目標ID
用法
GetChar("player"); 得到第一位玩家的ID(這是沒用的指令,因為第一位玩家一定是1號)
GetChar("vip");得到己方首領編號,這個指令在SN檔中使用會容易得到-1(不存在)的值,僅能用在NPC檔中才能正確啟用。
GetChar("enemyvip");得到敵方VIP編號,這個指令在SN檔中會不易指定,用在NPC檔中就能正確啟用。
GetChar("flag ");得到持鏢者編號,沒有持鏢者值一定是-1.
GetChar("XXX ");得到指定人物的編號,遊戲中沒有這個人物值一定是-1. 範例:
int a;
a = GetChar("國寶");
如果國寶不存在
a的值為-1
如果國寶存在
a就等於國寶的當前ID
GetAnyChar()函式
語法
GetAnyChar (string name)
功用
得到任一目標ID
用法
GetAnyChar("player"); 得到第一位玩家的ID(這是沒用的指令,因為第一位玩家一定是1號)
GetAnyChar("vip");得到己方首領編號,這個指令在SN檔中使用會容易得到-1(不存在)的值,僅能用在NPC檔中才能正確啟用。
GetAnyChar("enemyvip");得到敵方VIP編號,這個指令在SN檔中會不易指定,用在NPC檔中就能正確啟用。
GetAnyChar("flag ");得到持鏢者編號,沒有持鏢者值一定是-1.
GetAnyChar("XXX ");得到指定人物的編號,遊戲中沒有這個人物值一定是-1
範例:
int a;
a = GetAnyChar("國寶");
如果國寶不存在
a的值為-1
如果國寶存在
a就等於國寶的當前ID
這個指令基本上跟GetChar()一樣,但不一樣的是它可以在NPC檔中偵測HP<=0的人物,NPC檔中只要NPC的HP=0, GetChar()將不再運作.如果你用NPC集合檔則需用上這個指令.SN檔只要用GetChar()即可
GetHP()函式
語法
GetHP (int ID)
功用
得到任一ID目標的目前生命值
範例:
int a;
int b;
a = GetChar("國寶");
b = GetHP (a);
如果國寶不存在
b的值為-1
如果國寶存在
b就等於國寶的當前生命值
GetMaxHP()函式
語法
GetMaxHP (int ID)
功用
得到任一ID目標的最大生命值,(經我測試應該說是初始值才對,這個值不會因吃華陀而改變…所以我的結論是得到初始值)
範例:
int a;
int b;
a = GetChar("國寶");
b = GetMaxHP(a);
如果國寶不存在
b的值為-1
如果國寶存在
b就等於國寶的初始生命值
GetTeam()函式
語法
GetTeam (int ID)
功用
得到任一ID目標的所在隊伍.
範例:
int a;
int b;
a = GetChar("國寶");
b = GetTeam(a);
如果國寶不存在或國寶並沒有分隊b的值為0
如果國寶在流星,b的值為1
如果國寶在蝴蝶,b的值為2
GetEnemy()函式
語法
GetEnemy(int ID)
功用
得到任一ID目標他當前的目標敵手ID.
範例:
int a;
int b;
a = GetChar("國寶");
b = GetEnemy(a);
如果國寶不存在或國寶目前並沒有鎖定對手b的值為-1
如果國寶沒有分隊已鎖定預設對手,b的值為1(就是玩家)
如果國寶已鎖定對手,b的值為對手的ID
如果b值等於-1但不是國寶不存在照成的,那麼NPC可能會站著發呆.
GetGameTime()函數
語法
GetGameTime()
功用
得到入遊戲後所過的秒數.
範例:
int a;
a = GetGameTime() + 30;
Say(2, "已經過了",a,"秒")
由ID 編號2號的NPC計算目前時間並說出來.
作者: nashcyl283 時間: 2010-4-4 10:50
ChangeBehavior()函式
語法
ChangeBehavior(int id, string behavior, ...)
功用
給予AI行動控制
用法
ChangeBehavior(int id, "wait");NPC在原地做警戒.
ChangeBehavior(int id, "idle");NPC在原地不動.
ChangeBehavior(int id, "run");NPC在出生點附近亂跑(大多是繞圈圈)。
ChangeBehavior(int id, "follow", string name/ int id); NPC跟隨到指定人物[人物參照GetChar()函式]或是指定ID人物.
ChangeBehavior(int id, "patrol", int waypoint1, int waypoint2..); NPC在所規定的巡邏點實施巡邏.
ChangeBehavior(int id, "attacktarget", int idx, int a);// NPC不顧一切的跑到IDX的目標位置,若a為不存在則為跑到目標位置,a值大於0則到目標位置實施攻擊.
ChangeBehavior(int id, "Kill", string name/ int id);//NPC追殺指定人物[人物參照GetChar()函式]或是指定ID人物,若為同隊則同於"follow"副指令.
範例:
int a;
SetTarget(1, "char","劍少皇");
a = GetChar("國寶");
ChangeBehavior(a, "wait");//國寶在原地做警戒,看到敵人就跑去攻擊.
ChangeBehavior(a, "idle");//國寶啥事情都不做.
ChangeBehavior(a, "run");//國寶在出生點附近亂跑.
ChangeBehavior(a, "follow", "player");//國寶跟著玩家行動
ChangeBehavior(a, "patrol", 1, 3, 5, 7, 9);//國寶在1,3,5,7,9的巡邏點巡邏
ChangeBehavior(a, "attacktarget", 1, 1);//國寶不顧一切的跑到劍少皇旁邊不管他是不是同隊先海扁一下再說
ChangeBehavior(int id, "Kill", "劍少皇");//國寶追殺劍少皇如果是同隊則死命跟著劍少皇.
Perform()函式
語法
Perform(int id, string pose, ...)
功用
叫NPC做指定動作
用法
Perform (int id1, "faceto", int id2);id1的NPC面朝著id2
Perform (int id, "say",string say);NPC送出交談內容.
Perform (int id, "pause",int min);NPC做出上個動作後過了幾秒再做下個指定動作,但程序仍然在執行中。
Perform (int id, "aggress");NPC做出挑釁的動作.
Perform (int id, "jump");NPC做出跳躍的動作.
Perform (int id, "attack");NPC做出攻擊的動作.
Perform (int id, "guard", int min);NPC做出防禦動作幾秒鐘.
Perform (int id, "crouch", int min); NPC做出蹲下動作幾秒鐘.
Perform (int id, "use", int itemID);NPC使用編號道具.
範例:
int a = GetChar("國寶");
int b = GetChar("劍少皇");
Perform (b, "attack");//劍少皇做攻擊了一下.
Perform (b, "say", "放棄吧!你是打不贏我的");
Perform (a, "say", "哇哈哈!去死吧");
Perform (a, "use", 8);//國寶使用了氣元氣力全滿
Perform (a, "use", 7);//國寶使用了風水隱身
Perform (a, "use", 4);//國寶使用了嗜戰最大生命+50.
Perform (a, "use", 3);//國寶使用了銅皮防禦上昇
Perform (a, "use", 1);//國寶使用了肉包生命回復30.
Perform (a, "use", 2);//國寶使用了華陀最大生命+50.
Perform (a, "say", "看我的厲害!哈哈");
Perform (a, "crouch", 1);//國寶怕被跳殺蹲下1秒鐘.
Perform (a, "guard", 1);//國寶做出防禦動作1秒鐘.
Perform (a, "jump");//國寶跳了一下
Perform (a, "aggress");//國寶做出了挑釁動作
Perform (a, "pause",1);//國寶等待了1秒鐘
Perform (a, "say", "你上次砍我文章,覺悟吧!");//國寶送出了交談內容
Perform (a, "faceto", b);//國寶面對劍少皇
...國寶使出了大絕...被躲掉了==!!..被修理了!
Perform (a, "use", 8);//國寶使用了氣元氣力全滿
Perform (a, "use", 40);//國寶使用了金鐘罩防禦上昇
Perform (a, "use", 23);//國寶使用了火屬練化武器
Perform (a, "use", 34);//國寶使用了嗜血攻擊力再提昇.
Perform (a, "use", 19);//國寶使用了爆怒攻擊力大幅提昇
Perform (a, "use", 15);//國寶使用了神靈生命回復1/2.
Perform (a, "use", 20);//國寶使用了神骨最大生命到達999.
Perform (a, "say", "該死!怎麼會這樣?");
...國寶再度使出了大絕...又被躲掉了==!!..又被修理了!
Perform (b, "say", "= =!!");
Perform (a, "say", "啍!放你一馬...");
Perform (a, "use", 27);//國寶使用了蛋糕變身雪人
Perform (a, "use", 29);//國寶使用了圍巾防禦上昇
Perform (a, "use", 30);//國寶使用了手套攻擊提昇
Perform (a, "use", 31);//國寶使用了長靴速度提昇.
Perform (a, "use", 32);//國寶使用了頭套自動回血
Perform (a, "use", 5);//國寶使用了貓足速度提昇
Perform (a, "use", 41);//國寶使用了豹靈速度大幅提昇
...國寶以超快的速度繞跑了....
注意命令串會倒著執行!
PlayerPerform()函式
語法
PlayerPerform(int id, string pose, ...)
功用
叫玩家做指定動作,這個指令區網沒有作用.
用法
PlayerPerform ( "say",string say);
送出孟星魂交談內容(這是電腦會設定玩家名稱為孟星魂)
PlayerPerform ("pause",int min);//孟星魂做出上個動作後過了幾秒再做下個指定動作,但程序仍然在執行中。
PlayerPerform ("aggress");孟星魂做出挑釁的動作.
PlayerPerform ("jump");孟星魂做出跳躍的動作.
PlayerPerform ("crouch", int min); 孟星魂做出蹲下動作幾秒鐘.
PlayerPerform (int id, "use", int itemID);孟星魂使用編號道具.
PlayerPerform (int id, "block", 0&1);//孟星魂暫時不能操控開關1為不能控制0為可以
範例:
可參考Perform ()函數
StopPerform()函數
語法
StopPerform(int id);
功用
停止AI的指定動作.
範例:
int a;
a = GetChar("國寶");
Perform (a, "guard", 1);//國寶做出防禦動作1秒鐘.
StopPerform(a);//取消剛才指定的動作.
SetTarget()函式
語法
SetTarget(int idx, string type, ...)
功用
設定IDX編號所代表物
用法
SetTarget(int idx, "char", string name);設定IDX編號物件為某一玩家或NPC
SetTarget(int idx, "waypoint", int waypoint);設定IDX編號物件為某一路徑點
範例:
可參考ChangeBehavior()函式的範例
Distance()函式
語法
Distance(int idx1, int idx2);
功用
計算IDX1及IDX2之間的距離
範例:
SetTarget(0, "char", "國寶");
SetTarget(1, "char", "劍少皇");
int a = Distance(0, 1);
a的值為座標值,倘若國寶的座標在1202,111,0劍少皇的座標為-101,111,0,那麼a值即為1202+101的數值,300以內的數值幾乎就算是面對面了.
Rand()函式
語法
Rand(int n);
功用
得到亂數值
範例:
int a = Rand(10);
a的值即為0-9的其中一值
AddNPC()函式
語法
AddNPC(string npc);
功用
加入NPC
範例:
AddNPC("npc13_01");
加入冷燕到流星隊
RemoveNPC()函式
語法
RemoveNPC(int id)
功用
指定NPC離開
範例:
int a = GetChar("國寶");
RemoveNPC(a);
指定國寶離開遊戲中
Say()函式
語法
Say(id, a, b, c, ...);
功用
送出組合式談話內容
範例:
int a = GetChar("國寶");
int h = GetHP(a);
Say(a, "我現在有", h,"滴的血");
通報自己尚有多少血.
[ 本帖最後由 nashcyl283 於 2010-4-4 10:51 編輯 ]
作者: nashcyl283 時間: 2010-4-4 10:52
AI指令1.08版
以下指令僅支援1.08以上版本
GetWeaponType(int id)
這個指令是用來偵測目標ID的武器類型(傳回值為武器類別)
| 傳回值 | 0 | 1 | 2 | 3 | 4 | 5 |
| 武器種類 | 輕劍 | 匕首 | 火鎗 | 飛鏢 | 大鎚 | 大刀 |
| 傳回值 | 6 | 7 | 8 | 9 | 10 | 11 |
| 武器種類 | 飛輪 | 長槍 | 雙刺 | 乾坤 | 指虎 | 忍刀 |
GetWeapon(int id)
這個指令是用來偵測目標ID的武器編號(傳回值為武器編號)
武器編號請參考武器資料表
GetAnger(int id)
這個指令是用來偵測目標ID的氣元值,100=氣滿,0-目前沒氣
int fileID = OpenFile("files name",command);
這個指令是用來開啟一個資料存取檔
command為w即為輸入檔,r即為輸出檔
CloseFile(int fileID);
這個指令是用來關閉一個指定的資料存取檔
WriteFile(int fileID, int a);
這個指令是用來將資料寫入檔案中
int a = ReadFile(int fileID);
這個指令是用來將資料從檔案中讀出來!
作者: peter2137 時間: 2010-4-4 11:09
完全睇唔明- -
有冇人睇得明..~
作者: 中目黑善樹 時間: 2010-4-17 15:20
正!
雖然樓主係轉貼,但都值得一讚
| 歡迎光臨 IPvE vLan 遊戲平台|網吧系統 (https://www.ipve.com/bbs/) |
Powered by Discuz! 6.0.0 |