level 9
volcanic
楼主
有的童鞋会问了,我写了脚本了,那么什么时候引擎会执行我的脚本呢?
答案就在事件。
OpenBOR支持各种事件,你可以在事件中编写自己的逻辑以便干预引擎的执行。
请注意,OpenBOR的事件脚本必须存放在data\scripts\下。
注意,内置变量用getlocalvar("内置变量名")来得到,
比如
void self=getlocalvar("self");
(一)全局事件
全局事件是在任何特定的场合都可以执行的时间。它不会附属于任何载体。
*loading.c
当引擎Loading的时候执行
内置变量
value:当前Loading的进度
max:最大需要Loading的Entity的数量
*endlevel.c
当关卡结束时执行
内置变量
无
*join#.c
当Player#加入时执行
比如join1.c
内置变量
无
*key#.c
当Player#(1-4)按键时执行
内置变量
无
*keyall.c
只要有Player按键时执行
内置变量
player: 索引(0-3)分别对应player1-4
*level.c
当关卡开始前执行,可以用于关卡的初始化
内置变量
无
*pdie#.c
当Player死去时执行
内置变量
无
*respawn#.c
当Player重生时执行(就是死了之后,再次重生)
内置变量
无
*score#.c
当Player分数发生变化时执行
内置变量
无
*timetick.c
游戏计时器每个循环都执行,最好不要将大量代码写在这里,会影响运行效率。
内置变量
time: 当前计时器的值
*update.c
引擎每个更新周期开始前执行,最好不要将大量代码写在这里,会影响运行效率。
内置变量
无
*updated.c
引擎每个更新周期结束时执行,最好不要将大量代码写在这里,会影响运行效率。
内置变量
无
(二)关卡事件
关卡事件是只有在关卡里才能执行的事件。它的执行需要关卡作为载体。只有在关卡内有效。
*keyscript#
同全局事件
*spawnscript
当一个Entity被Spawn时执行
内置变量
self: Entity自身。
*levelupdatescript
引擎每个更新周期开始前执行,最好不要将大量代码写在这里,会影响运行效率。
内置变量
无
*levelupdatedscript
引擎每个更新周期结束时执行,最好不要将大量代码写在这里,会影响运行效率。
内置变量
无
(三)
Entity事件
Entity事件适合特定Entity联系在一起的,它只会在这个Entity里有效,不会影响其他的Entity,Level。如果这个Entity被消除了,依赖它的脚本也不会执行
了。
*animationscript
当Entity动画帧发生变化时执行
内置变量
self: Entity自身
animnum: 动画的ID.
frame: 当前动画的帧数。
例如
anim freespecial#
frame data/chars/model/exam0001.png
@script
这里写的代码会在该动画的每帧都执行。
@script_script
frame data/chars/model/exam0002.png
frame data/chars/model/exam0003.png
@cmd {name} {argument1} {argument2}... #这个函数只在当前帧执行,可以多个
@cmd {name} {argument1} {argument2}... #这个函数只在当前帧执行,可以多个
frame data/chars/model/exam0004.png
注意:参数之间用空格隔开,如果是字符串类型,用”“引起来。例如@cmd spawn01 "火花" 1 1 1
*didblockscript
当执行防御,并且收到攻击时执行
内置变量
self: Entity自身
attacker: 攻击者Entity
damage: 收到的伤害(原始伤害,不是防御后的伤害)
attacktype: 攻击的类型
drop: 是否击倒攻击
noblock: 该攻击是否是不可防御的。
pauseadd: 攻击的Pause延迟
*didhitscript
当攻击到对方时执行。或者一个Item被捡起来时,Item的didhitscript也会执行。
内置变量
self: Entity自身
damagetaker: 被攻击到的Entity
damage: 收到的伤害(原始伤害,不是防御后的伤害)
attacktype: 攻击的类型
drop: 是否击倒攻击
noblock: 该攻击是否是不可防御的。
pauseadd: 攻击的Pause延迟
*keyscript
当控制这个Entity的玩家按下按键或者松开按键时。
Player controlling this entity presses or releases a key.
内置变量
self: Entity自身
player: 玩家索引(0-3)
*onblockascript
当Entity向上方移动却被阻挡时触发。
内置变量
self: Entity自身
obstacle: 阻挡Entity的Obstacle的引用
*onblockzscript
当Entity向Z轴移动却关卡的边界阻挡时触发。
内置变量
self: Entity自身
*onblockoscript
Entity被Obstacle阻挡时触发
内置变量
self: Entity自身
obstacle: 阻挡Entity的Obstacle的引用
*onblocksscript
当Entity移动时被屏幕阻挡时触发
内置变量
self: Entity自身
*onblockwscript
当Entity移动时被墙壁阻挡时触发
内置变量
self: Entity自身
plane: 方向
1 = X 方向
2 = Z 方向
height: 高度低于Entity阻挡
*ondeathscript
改Entity死亡时立刻触发。
内置变量
self: Entity自身
attacker:攻击者
damage: 收到的伤害(原始伤害,不是防御后的伤害)
attacktype: 攻击的类型
drop: 是否击倒攻击
noblock: 该攻击是否是不可防御的。
pauseadd: 攻击的Pause延迟
*onfallscript
当Entity处于fall状态是触发。
内置变量
self: Entity自身
attacker:攻击者
damage: 收到的伤害(原始伤害,不是防御后的伤害)
attacktype: 攻击的类型
drop: 是否击倒攻击
noblock: 该攻击是否是不可防御的。
pauseadd: 攻击的Pause延迟
*onmovexscript
Entity在X轴移动时触发
内置变量
self: Entity自身
*onmovezscript
Entity在Z轴移动时触发
内置变量
self: Entity自身
*onmoveascript
Entity在A轴,即高度变化时触发
内置变量
self: Entity自身
*onspawnscript
Entity被Spawn时触发
内置变量
self: Entity自身
*thinkscript
当AI思考时触发
内置变量
self: Entity自身
*script
当每个引擎循环周期处理这个Entity时触发
内置变量
self: Entity自身
*takedamagescript
当这个Entity被攻击并受到伤害(非Block)时触发。
内置变量
self: Entity自身
attacker:攻击者
damage: 收到的伤害(原始伤害,不是防御后的伤害)
attacktype: 攻击的类型
drop: 是否击倒攻击
noblock: 该攻击是否是不可防御的。
pauseadd: 攻击的Pause延迟
差不多就这些吧,累死了。
这一讲就到此,下次再见。
2014年04月21日 06点04分
1
答案就在事件。
OpenBOR支持各种事件,你可以在事件中编写自己的逻辑以便干预引擎的执行。
请注意,OpenBOR的事件脚本必须存放在data\scripts\下。
注意,内置变量用getlocalvar("内置变量名")来得到,
比如
void self=getlocalvar("self");
(一)全局事件
全局事件是在任何特定的场合都可以执行的时间。它不会附属于任何载体。
*loading.c
当引擎Loading的时候执行
内置变量
value:当前Loading的进度
max:最大需要Loading的Entity的数量
*endlevel.c
当关卡结束时执行
内置变量
无
*join#.c
当Player#加入时执行
比如join1.c
内置变量
无
*key#.c
当Player#(1-4)按键时执行
内置变量
无
*keyall.c
只要有Player按键时执行
内置变量
player: 索引(0-3)分别对应player1-4
*level.c
当关卡开始前执行,可以用于关卡的初始化
内置变量
无
*pdie#.c
当Player死去时执行
内置变量
无
*respawn#.c
当Player重生时执行(就是死了之后,再次重生)
内置变量
无
*score#.c
当Player分数发生变化时执行
内置变量
无
*timetick.c
游戏计时器每个循环都执行,最好不要将大量代码写在这里,会影响运行效率。
内置变量
time: 当前计时器的值
*update.c
引擎每个更新周期开始前执行,最好不要将大量代码写在这里,会影响运行效率。
内置变量
无
*updated.c
引擎每个更新周期结束时执行,最好不要将大量代码写在这里,会影响运行效率。
内置变量
无
(二)关卡事件
关卡事件是只有在关卡里才能执行的事件。它的执行需要关卡作为载体。只有在关卡内有效。
*keyscript#
同全局事件
*spawnscript
当一个Entity被Spawn时执行
内置变量
self: Entity自身。
*levelupdatescript
引擎每个更新周期开始前执行,最好不要将大量代码写在这里,会影响运行效率。
内置变量
无
*levelupdatedscript
引擎每个更新周期结束时执行,最好不要将大量代码写在这里,会影响运行效率。
内置变量
无
(三)
Entity事件
Entity事件适合特定Entity联系在一起的,它只会在这个Entity里有效,不会影响其他的Entity,Level。如果这个Entity被消除了,依赖它的脚本也不会执行
了。
*animationscript
当Entity动画帧发生变化时执行
内置变量
self: Entity自身
animnum: 动画的ID.
frame: 当前动画的帧数。
例如
anim freespecial#
frame data/chars/model/exam0001.png
@script
这里写的代码会在该动画的每帧都执行。
@script_script
frame data/chars/model/exam0002.png
frame data/chars/model/exam0003.png
@cmd {name} {argument1} {argument2}... #这个函数只在当前帧执行,可以多个
@cmd {name} {argument1} {argument2}... #这个函数只在当前帧执行,可以多个
frame data/chars/model/exam0004.png
注意:参数之间用空格隔开,如果是字符串类型,用”“引起来。例如@cmd spawn01 "火花" 1 1 1
*didblockscript
当执行防御,并且收到攻击时执行
内置变量
self: Entity自身
attacker: 攻击者Entity
damage: 收到的伤害(原始伤害,不是防御后的伤害)
attacktype: 攻击的类型
drop: 是否击倒攻击
noblock: 该攻击是否是不可防御的。
pauseadd: 攻击的Pause延迟
*didhitscript
当攻击到对方时执行。或者一个Item被捡起来时,Item的didhitscript也会执行。
内置变量
self: Entity自身
damagetaker: 被攻击到的Entity
damage: 收到的伤害(原始伤害,不是防御后的伤害)
attacktype: 攻击的类型
drop: 是否击倒攻击
noblock: 该攻击是否是不可防御的。
pauseadd: 攻击的Pause延迟
*keyscript
当控制这个Entity的玩家按下按键或者松开按键时。
Player controlling this entity presses or releases a key.
内置变量
self: Entity自身
player: 玩家索引(0-3)
*onblockascript
当Entity向上方移动却被阻挡时触发。
内置变量
self: Entity自身
obstacle: 阻挡Entity的Obstacle的引用
*onblockzscript
当Entity向Z轴移动却关卡的边界阻挡时触发。
内置变量
self: Entity自身
*onblockoscript
Entity被Obstacle阻挡时触发
内置变量
self: Entity自身
obstacle: 阻挡Entity的Obstacle的引用
*onblocksscript
当Entity移动时被屏幕阻挡时触发
内置变量
self: Entity自身
*onblockwscript
当Entity移动时被墙壁阻挡时触发
内置变量
self: Entity自身
plane: 方向
1 = X 方向
2 = Z 方向
height: 高度低于Entity阻挡
*ondeathscript
改Entity死亡时立刻触发。
内置变量
self: Entity自身
attacker:攻击者
damage: 收到的伤害(原始伤害,不是防御后的伤害)
attacktype: 攻击的类型
drop: 是否击倒攻击
noblock: 该攻击是否是不可防御的。
pauseadd: 攻击的Pause延迟
*onfallscript
当Entity处于fall状态是触发。
内置变量
self: Entity自身
attacker:攻击者
damage: 收到的伤害(原始伤害,不是防御后的伤害)
attacktype: 攻击的类型
drop: 是否击倒攻击
noblock: 该攻击是否是不可防御的。
pauseadd: 攻击的Pause延迟
*onmovexscript
Entity在X轴移动时触发
内置变量
self: Entity自身
*onmovezscript
Entity在Z轴移动时触发
内置变量
self: Entity自身
*onmoveascript
Entity在A轴,即高度变化时触发
内置变量
self: Entity自身
*onspawnscript
Entity被Spawn时触发
内置变量
self: Entity自身
*thinkscript
当AI思考时触发
内置变量
self: Entity自身
*script
当每个引擎循环周期处理这个Entity时触发
内置变量
self: Entity自身
*takedamagescript
当这个Entity被攻击并受到伤害(非Block)时触发。
内置变量
self: Entity自身
attacker:攻击者
damage: 收到的伤害(原始伤害,不是防御后的伤害)
attacktype: 攻击的类型
drop: 是否击倒攻击
noblock: 该攻击是否是不可防御的。
pauseadd: 攻击的Pause延迟
差不多就这些吧,累死了。
这一讲就到此,下次再见。