原帖地址 http://www.gtaforums.com/index.php?showtopic=378203 任务编写基础理解指引
原帖作者/ spaceeinstein @GTAF 翻译/ kwanz @虚拟世界
未经许可 谢绝转载
Opcode
SB包含最新编译的opcode列表,位于程序的Opcode Search Tool内。这些opcode包含了海量的功能,如果你能把整个列表扫一眼,对有什么东西好用有个概念,那就最好了。你知道得越多,编程时能用的就越多。想要理解每个opcode是如何工作的,你可以翻看网上流传的文档,也可以自己测试,从试验和失败中理解。这是最好的学习方法了。你也可以研究游戏的原始脚本(main.scm)来看看开发者是如何在程序中应用opcode的。
创建一个线程
此节内容请参阅作者在GTAModding上发布的同主题页面。
EN - Create a thread
CH - 线程的创建,中止和结构
创建一个任务
写一个任务是很困难的。总体思路和创建一个线程没有差别,所以建议你首先从创建简单线程开始练习,而不是一开始就尝试写一个任务。写任务有很多方法,为了简化方便初学者起见,下文会讲解写一个任务的基本结构。以下的讲解是SB格式的,对3/VC和SA适用。
定义你的任务
首先定义你的任务。找到
把任务数目加1。拉下来直到最后一个任务的定义句,在下面定义你的任务
- DEFINE MISSION ### AT @MissionStart
复制代码
插入任务触发点
接着创建触发任务开始的线程。找到
在前面写上
- 004F: create_thread @MissionTrigger
复制代码
找到
- //-------------Mission 0---------------
复制代码
这是脚本的MAIN分节结束,第一个任务开始的地方。把触发线程插入到其间。
- :MissionTrigger
- 0001: wait 0 ms
- 00D6: if
- 0256: player $PLAYER_CHAR defined
- 004D: jump_if_false @MissionTriggerEnd
- 00D6: if
- 0038: $ONMISSION == 0
- 004D: jump_if_false @MissionTriggerEnd
- 00D6: if
- // 在此写上任务的触发条件
- 004D: jump_if_false @MissionTriggerEnd
- 0417: start_mission ###
- 0004: $ONMISSION = 1
- :MissionTriggerEnd
- jump @MissionTrigger
复制代码
插入你的任务
最后,插入任务。如果你写的是3/VC,拉到最下面插入你的任务。如果你写的是SA,找到
- //-------------External script 0 (PLAYER_PARACHUTE)---------------
复制代码
这是最后一个任务结束,第一段外部程序开始的地方。把你的任务插入它们之间。
- :MissionStart
- 03A4: name_thread 'NAME'
- 0050: gosub @MissionBegin
- 00D6: if
- 0112: wasted_or_busted
- 004D: jump_if_false @MissionEnd
- 0050: gosub @MissionFailed
- :MissionEnd
- 0050: gosub @MissionCleanup
- 004E: end_thread
- ::MissionBegin
- // 这里写上任务的内容
- 0051: return
- :MissionFailed
- // 这里写上进医院或被捕后发生的动作
- 0051: return
- :MissionCleanup
- // 这里写上结束任务之前的变量和数据清理代码
- 0004: $ONMISSION = 0
- 00D8: mission_cleanup
- 0051: return
复制代码
注
用这种方式修改需要你开新存档才能正常玩游戏。 |