找回密码
 点一下
查看: 3908|回复: 19

[已解决]ai脚本中怎样判断收到的命令

[复制链接]
发表于 2008-10-16 14:56:41 | 显示全部楼层 |阅读模式
就是在触发器中发送ai命令
ai脚本中根据收到的命令,执行相应的代码,应该怎么写?
发表于 2008-10-16 17:56:59 | 显示全部楼层
当前的命令id
回复

使用道具 举报

发表于 2008-10-16 23:37:50 | 显示全部楼层
[codes=jass]
//是否命令状态
function IsOrdering takes unit TheUnit returns boolean
local integer OID
local string TheOrder
set OID=GetUnitCurrentOrder(TheUnit)
set TheOrder=OrderId2String(OID)
return (OID!=0)and(OID!=851974)and((TheOrder!="smart")and(TheOrder!="stop")and(TheOrder!="attack")and(TheOrder!="move")and(TheOrder!="AImove")and(TheOrder!="holdposition")and(TheOrder!="patrol")and(TheOrder!="attackonce")and(TheOrder!="poisonarrows")and(TheOrder!="unpoisonarrows"))
endfunction
[/codes]
回复

使用道具 举报

发表于 2008-10-17 00:00:34 | 显示全部楼层
全错~~你们哪~~对AI jass几乎可说是毫无了解~~楼主问的是AI和触发之间的通讯问题呢~~

正确方法是用以下几个函数接受触发指令~~

[jass]
native CommandsWaiting      takes nothing                               returns integer
native GetLastCommand       takes nothing                               returns integer
native GetLastData          takes nothing                               returns integer
native PopLastCommand       takes nothing                               returns nothing
[/jass]
CommandsWaiting()获得队列中的指令条数~~GetLastCommand()获得队列中最新一条指令~~GetLastData()获得队列中最新一条指令的数据~~PopLastCommand()将最新指令踢出队列~~
回复

使用道具 举报

恶声恶气 该用户已被删除
发表于 2008-10-17 07:21:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2008-10-17 09:59:36 | 显示全部楼层
谢谢3L,问题已解决

以前见过common.ai中这几个函数,不过不了解怎么用法

另外发现一个问题了,ai脚本中ms不能用I2S
我试了半天
DisplayTimedTextToPlayer(Player(0),0,0,2,I2S(GetLastCommand())+","+I2S(GetLastData()))
它就只显示一个逗号
试了下
DisplayTimedTextToPlayer(Player(0),0,0,2,I2S(1))
居然显示(null)
不知道怎么回事饿。。。
回复

使用道具 举报

发表于 2008-10-17 20:34:03 | 显示全部楼层
mb.
收藏了
回复

使用道具 举报

发表于 2008-10-19 14:09:21 | 显示全部楼层
引用第5楼匿名匿名匿名于2008-10-17 09:59发表的  :
谢谢3L,问题已解决

以前见过common.ai中这几个函数,不过不了解怎么用法

另外发现一个问题了,ai脚本中ms不能用I2S
.......

在AI的线程中确实有一些.j函数无法正常工作~~Substring也不行~~并不都只是关于返回一个新字符串的~~

你要显示integer的话可以用DebugFI和DisplayTextIII~~具体写法跟c语言的printf差不多~~都是需要%d之类的占位符的~~
回复

使用道具 举报

发表于 2008-10-19 14:15:07 | 显示全部楼层
忘了说了~~跟c里面一样~~行末也是要加\\n的~~
回复

使用道具 举报

 楼主| 发表于 2008-10-19 16:24:16 | 显示全部楼层
能举个例子么,比如显示一个整数i
回复

使用道具 举报

发表于 2008-10-19 21:36:04 | 显示全部楼层
[jass]
call DisplayTextIII(GetAiPlayer(),"Player %d have %d heros and %d buildings\\n",1,2,3)
[/jass]

显示结果就是Player 1 have 2 heros and 3 buildings
回复

使用道具 举报

 楼主| 发表于 2008-10-20 01:05:15 | 显示全部楼层
如果要让它显示在玩家1的屏幕上应该怎么写,
试了下
call DisplayText(0,"hello\\n")
什么都不显示。。。
common.ai的函数还真复杂。。。

还有如果显示给aiplayer,怎么才能看到,ai脚本不是只能对电脑玩家启用么
回复

使用道具 举报

发表于 2008-10-20 13:17:43 | 显示全部楼层
引用第11楼匿名匿名匿名于2008-10-20 01:05发表的  :
如果要让它显示在玩家1的屏幕上应该怎么写,
试了下
call DisplayText(0,"hellon")
什么都不显示。。。
common.ai的函数还真复杂。。。
.......

打个比方,你和别人对战,你发的信息当然能在你的屏幕上显示,也能在他的屏幕上显示,但是在他屏幕上是如何显示的,你是看不到的。
那么AI 也就是电脑玩家,他和你共用一台电脑(当你和电脑对战),你所发的信息你能看到,但是对AI显示的信息理论上AI应该能看到,但是AI不会向你反馈他看到的信息,因此你无法得知AI是否看到了你发的信息。
如果想让信息显示在1号玩家屏幕上应该是这样的:
call DisplayTextToPlayer(Player(0),0,0,"string")

PS:"string"前面的0,0是坐标,其实我试了一下,无论这个坐标是多少,他总是显示在玩家屏幕的左下角,我也不知道是为什么,还请高人指点。
回复

使用道具 举报

 楼主| 发表于 2008-10-20 13:30:57 | 显示全部楼层
LS。。。
回复

使用道具 举报

发表于 2008-10-20 13:38:37 | 显示全部楼层
引用第13楼匿名匿名匿名于2008-10-20 13:30发表的  :
LS。。。
怎么了有何不妥?
回复

使用道具 举报

 楼主| 发表于 2008-10-20 13:44:54 | 显示全部楼层
我问的是DisplayText这个函数。。。
回复

使用道具 举报

发表于 2008-10-20 13:52:59 | 显示全部楼层
引用第15楼匿名匿名匿名于2008-10-20 13:44发表的  :
我问的是DisplayText这个函数。。。

呃,这个函数没仔细看他的定义,嗯,待我研究研究,就当我前面说的是路人甲说的吧。
回复

使用道具 举报

 楼主| 发表于 2008-10-20 14:09:39 | 显示全部楼层
Quote:
PS:"string"前面的0,0是坐标,其实我试了一下,无论这个坐标是多少,他总是显示在玩家屏幕的左下角,我也不知道是为什么,还请高人指点。

我指点你。。。
设为0.几试下就知道了
回复

使用道具 举报

发表于 2008-10-20 17:13:52 | 显示全部楼层
引用第11楼匿名匿名匿名于2008-10-20 01:05发表的  :
如果要让它显示在玩家1的屏幕上应该怎么写,
试了下
call DisplayText(0,"hellon")
什么都不显示。。。
common.ai的函数还真复杂。。。
.......

或许是0这个参数的问题呢,不晓得GetAiPlayer这个函数返回的是什么额
回复

使用道具 举报

 楼主| 发表于 2008-10-20 18:11:18 | 显示全部楼层
难道要按一定的格式表示0

我给玩家2运行的ai,试了下
if GetAiPlayer()==1 then
call DisplayTimedTextToPlayer(Player(0),0,0,2,“yes”)
endif
屏幕上会显示yes
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-22 00:33 , Processed in 0.092984 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表