偶是涛哥 发表于 2015-8-2 13:08:29

解析吸烟cleo

在GTASA里,一些帮派成员或者路人会抽烟,装上cleo合集的抽烟cleo,cj也可以抽烟。
但你想要抽烟加血,并且烟会慢慢烧完,该怎么实现呢?下面我来解析下我的吸烟cleo。

下面请看语句:

:SMOKE_1
0001: wait 0
00D6: if
   Player.Defined($PLAYER_CHAR)
jf @SMOKE_1
jump @SMOKE_2

:SMOKE_2
0001: wait 0
00D6: if
   not Actor.Driving($PLAYER_ACTOR)
jf @SMOKE_1
jump @SMOKE_3

:SMOKE_3
0001: wait 0
00D6: if
   not Actor.Dead($PLAYER_ACTOR)
jf @SMOKE_1
jump @SMOKE_4

:SMOKE_4
0001: wait 0
if
02D8:   actor $PLAYER_ACTOR current_weapon == 0
jf @SMOKE_1
jump @SMOKE_5

:SMOKE_5
0001: wait 0
if
0ADC:   test_cheat "SMOKE"
jf @SMOKE_1
jump @SMOKE_6

:SMOKE_6
wait 0
029B: 1@ = init_object 3044 at 0.0 0.0 0.0
070A: AS_actor $PLAYER_ACTOR attach_to_object 1@ offset 0.04 0.1 0.05 on_bone 6 16 perform_animation "NULL" IFP_file "NULL" time -1
10@ = 0      
jump @SMOKE_7

:SMOKE_7
wait 0
04ED: load_animation "GANGS"

:SMOKE_8
0001: wait 0
00D6: if
04EE:   animation "GANGS" loaded
jf @SMOKE_7
jump @SMOKE_9

:SMOKE_9
0001: wait 0
10@ += 1
if
0AB0:   key_pressed 2
jf @SMOKE_11
jump @SMOKE_10

:SMOKE_10
wait 0
0605: actor $PLAYER_ACTOR perform_animation "SMKCIG_PRTL" IFP "GANGS" framedelta 4.0 loop 0 lockX 0 lockY 0 lockF 0 time 2000
10@ += 100
0001: wait 900
0669: 2@ = attach_particle "EXHALE" to_actor $PLAYER_ACTOR with_offset 0.05 0.0 -0.05 type 2
0883: attach_particle 2@ to_actor $PLAYER_ACTOR mode 5
064C: make_particle 2@ visible
$HEALTH = Actor.Health($PLAYER_ACTOR)
$HEALTH += 10
Actor.Health($PLAYER_ACTOR) = $HEALTH
0001: wait 1000
0650: destroy_particle 2@
0001: wait 1000
jump @SMOKE_9

:SMOKE_11
0001: wait 0
if
0AB0:   key_pressed 70
jf @SMOKE_13
jump @SMOKE_12

:SMOKE_12
wait 0
0108: destroy_object 1@
jump @SMOKE_1

:SMOKE_13
wait 0
if
10@ > 1000
jf @SMOKE_9
jump @SMOKE_12

好了,这个语句组就可以实现烟会自己烧完了,我来给你们一句句讲解下

:SMOKE_1
0001: wait 0
00D6: if
   Player.Defined($PLAYER_CHAR)
jf @SMOKE_1
jump @SMOKE_2

:SMOKE_2
0001: wait 0
00D6: if
   not Actor.Driving($PLAYER_ACTOR)
jf @SMOKE_1
jump @SMOKE_3

:SMOKE_3
0001: wait 0
00D6: if
   not Actor.Dead($PLAYER_ACTOR)
jf @SMOKE_1
jump @SMOKE_4

:SMOKE_4
0001: wait 0
if
02D8:   actor $PLAYER_ACTOR current_weapon == 0
jf @SMOKE_1
jump @SMOKE_5

:SMOKE_5
0001: wait 0
if
0ADC:   test_cheat "SMOKE"
jf @SMOKE_1
jump @SMOKE_6

这几句是判定,当cj未死亡,不在车里,空手并且输入作弊代码"smoke"时跳转到标签smoke_6
我只是用多了几个标签,方便修改而已。你们也可以用if and

:SMOKE_6
wait 0
029B: 1@ = init_object 3044 at 0.0 0.0 0.0
070A: AS_actor $PLAYER_ACTOR attach_to_object 1@ offset 0.04 0.1 0.05 on_bone 6 16 perform_animation "NULL" IFP_file "NULL" time -1
10@ = 0   
jump @SMOKE_7

这句的意思是把obj id3044存储为 1@
然后把obj 1@ 绑在cj右手上。
10@这个变量很重要,等下要用上。
2楼继续发...

偶是涛哥 发表于 2015-8-2 13:10:49

:SMOKE_7
wait 0
04ED: load_animation "GANGS"

:SMOKE_8
0001: wait 0
00D6: if
04EE:   animation "GANGS" loaded
jf @SMOKE_7
jump @SMOKE_9

这个是加载动作"gangs"
标签8是判定动作是否加载完成,如没完成则跳转到标签7.

偶是涛哥 发表于 2015-8-2 13:14:39

:SMOKE_9
0001: wait 0
10@ += 1                  10@加1
if
0AB0:   key_pressed 2    判定按下鼠标右键
jf @SMOKE_11
jump @SMOKE_10

:SMOKE_10
wait 0
0605: actor $PLAYER_ACTOR perform_animation "SMKCIG_PRTL" IFP "GANGS" framedelta 4.0 loop 0 lockX 0 lockY 0 lockF 0 time 2000动作
10@ += 100                      10@加100
0001: wait 900
0669: 2@ = attach_particle "EXHALE" to_actor $PLAYER_ACTOR with_offset 0.05 0.0 -0.05 type 2 特效
0883: attach_particle 2@ to_actor $PLAYER_ACTOR mode 5
064C: make_particle 2@ visible
$HEALTH = Actor.Health($PLAYER_ACTOR)
$HEALTH += 10                                                      加血
Actor.Health($PLAYER_ACTOR) = $HEALTH
0001: wait 1000
0650: destroy_particle 2@    删除特效
0001: wait 1000
jump @SMOKE_9

:SMOKE_11
0001: wait 0
if
0AB0:   key_pressed 70    判定按下F
jf @SMOKE_13
jump @SMOKE_12
:SMOKE_12
wait 0
0108: destroy_object 1@ 删除香烟obj
jump @SMOKE_1

:SMOKE_13
wait 0
if
10@ > 1000
jf @SMOKE_9
jump @SMOKE_12

偶是涛哥 发表于 2015-8-2 13:19:57

那么10@有什么用呢? 10@是用来限制时间的。
开始10@ = 0
然后判定按键的时候不断的跳转,10@ += 1
10@ += 1会消耗一点时间,并且可以不断跳转判定按键,
所以到后面加个判定当10@ > 1000时
删除香烟obj,跳转到标签1(香烟烧完)
所以,你如果要修改香烟燃烧的时间,可以修改10@ > 1000
10@ += 100 也是同一个道理。
假如拿着香烟过了一小段时间,10@ = 1时
抽10口烟
100×10 = 1000
1000+1= 1001>1000
香烟就会被抽完了。



[V.S.C]萌え系爱 发表于 2015-8-2 14:31:31

{:6_154:}
表示多个 触发条件(判定)可以使用
if and 放在一起,减少不必要的 标签

偶是涛哥 发表于 2015-8-2 14:54:02

萌え系爱 发表于 2015-8-2 14:31
表示多个 触发条件(判定)可以使用
if and 放在一起,减少不必要的 标签

我怕以后会加上什么其他判定元素,为了避免麻烦弄多几个标签

七濑步 发表于 2015-8-2 14:56:21

{:5_137:}斯国一

朽木自雕 发表于 2015-8-2 15:57:23

{:7_199:}捉到楼主大神一枚,

V1D 发表于 2015-8-2 16:06:29

{:5_136:}力顶技术贴!

Shawn·Lay 发表于 2015-8-2 16:19:07

自己看懂了
不过我想提俩问题
制作特效的语句attach_particle "EXHALE"这个特效名称是在Effect.fxp中的吗?
SMKCIG_PRTL" IFP "GANGS这个IFP前面的是动画名还是后面的是动画名

偶是涛哥 发表于 2015-8-2 18:40:09

SunshineME 发表于 2015-8-2 16:19
自己看懂了
不过我想提俩问题
制作特效的语句attach_particle "EXHALE"这个特效名称是在Effect.fxp中的吗 ...

EXHALE可以在fxp里搜到,SMKCIG_PRTL是GANGS.ifp内的一个动画(一个ifp文件内可有多个动画)

ClansChen 发表于 2015-9-19 21:38:47

用32@或33@代替10@计时,这两个变量自动每秒增加1000
页: [1]
查看完整版本: 解析吸烟cleo