[GTAF进口]SCM编程常见问题解答
本帖最后由 kwanz 于 2012-5-9 21:35 编辑原帖地址 http://www.gtaforums.com/index.php?showtopic=404316SCM编程常见问题解答
原帖作者/ Dutchy3010 @GTAF 翻译/ kwanz @虚拟世界
未经许可 谢绝转载
概况类
我想学编程,我要做什么?
首先要理解你不可能在24小时内学会编程,你必须要付出时间和努力。有几份教程可以帮助你学习编程,最好的教程当属编程圣经(上篇 EN CH /下篇 EN CH)
我想编写自己的任务,如何做到?
如果你真的想编程实现,不借助其他MOD(比如DYOM Design Your Own Mission),那么看看这篇教程吧。
谁能帮我编程做东西?
首先,论坛上专门有一贴求物件。你可以在这里找。但是不要抱过高希望,因为你请求的东西多半没人会做,因为scm编程是要花时间的。如果你真心希望做出什么东西,我建议你自己学习编程。
CLEO是什么?
CLEO包含了几部分物件:
·自定义脚本外挂:用这些脚本玩家不需要开新存档
·新的opcode
·*.CLEO插件
关于CLEO的更多信息
CLEO教程 EN CH
我想同时使用两份scm程序!
总的来说,这不简单。你可以用MPACK任务包分别使用它们。但是多CLEO同时使用是可以的,只要他们不冲突。
我需要什么软件来编辑main.scm?
主要有Sanny Builder和Mission Builder。
我可以把scm编程用于IV修改吗?
不,语言是完全不同的。但是你对scm的了解可以派上用场,因为三代的opcode和四代的函数有很多相似之处。理解任务脚本是如何组合起来的,各种opcode可以做什么,参数的作用,也就理解了在四代中如何编程。
Sanny Builder错误
我在SB中遇到错误 not enough actual parameters!
你调的opcode给的参数太少了。参考opcode示例比较一下。还有检查一下语句中是否需要逗号,这也是一个常见的错误。比如说:
0100: actor $PLAYER_ACTOR in_sphere 1793.068, -1904.254, 12.3989 radius 4.0 4.0 4.0 sphere 1 in_car
结果出错了,因为不需要逗号。
编译错误 Label 'loop' redeclared.
意思是说你用的跳转标签重名了。
编译错误 Incorrect number of conditions, 9 max.
最可能的情况是你在一个判断里只有一个条件,但是却用了if or。比如说:
:MODEL_LOAD
if or
8248: not model #NRG500 available
else_jump @MODEL_LOAD
我出了个别的错误怎么办?
查看SB的解释,在报错的时候点help。
动态图演示
游戏运行中错误
游戏卡住了,我啥也动不了!
一个常见的错误是你在程序中少写了wait语句。任何循环都至少要包含一个wait。建议用窗口模式运行SA,然后你就能用Ctrl-Alt-Delete结束它。
另一个方法是用SA关闭器,在需要的时候按F7结束游戏。
求助!游戏当了!
悲剧,答案并不好说,不过你可以做些事情。首先,看看是什么时候当的。游戏启动的时候,还是满足什么条件的时候?按这样的方法逐步排除程序中的代码,查错会简单得多。当你确定出错的位置以后,你需要修复出错的opcode。先在前面打上//,再进行测试。如果游戏不挂了,说明出错的代码找到了。然后就改吧。另外有一个CLEO插件SCMLOG.cleo,可以记录opcode调用,看看游戏临终前调用的最后一个opcode就行了。
如果你还是发现不了问题,你可以把问题发到论坛上。注意求助应该这样做:
1. 标题写明问题。
2. 描述错误状况。
3. 贴上代码,标出错误的地方,不然别人哪有耐心看完。
4. 在帖子里添加scmlog.log。
5. 提供所有相关的信息。
游戏中用我的程序,毫无反应!
信息太少了。可能的原因包括忘了编译,代码因故卡在死循环里等等。
编程
我找不到想用的opcode。
用opcode搜索功能(Tools > IDE Tools > Opcode search或Ctrl+Alt+2),或者在SB里打上一个词,然后按F1。
Player_Char和Player_Actor的区别是什么?
$PLAYER_CHAR是玩家在内存核心中的名字,用于作用于玩家的opcode,如0109: player $PLAYER_CHAR money += 1000000
$PLAYER_ACTOR是玩家当前操作的角色,用于作用于人物的opcode,比如00A1: put_actor $PLAYER_ACTOR at 345.5621 306.2212 998.4484
编辑SA和VC的main.scm有区别吗?
是的,SA中添加了很多东西,比如外部程序,一些opcode和结构。
我怎么找到物件的ID?
你可以用Mapviewer或MapEditor。
如果你知道模型的名称,你可以在SB中按CTRL+ALT+H查找物品。你也可以看看这个网站。
为什么我的FXT文字没有显示?
可能是你的名称太长,或者你在名称和字符串中间多了一个空格,或者末尾多了一个空格。
用GXT editor编辑american.gxt
我用的是Hammer的SAgxtEditor。最新版本是1.3,在外面找不到的。不过thegtaplace上还有。
所有的gxt条目名称默认为数字。插入条目的话需要注入ini。Hammer发过一份,不过原始地址已经没了。点这里下载
点搜索图标(放大镜),选择String List Match,弹出窗口,点Open,选择文件类型为 所有文件,然后打开american.ini,确定。不过这还不算完。你可以手动注入,比如说在main.scm里面找到IE10。在gxtEditor里点搜索,查找IE10,你会找到插入条目和显示文字。
注意有两种搜索方式
Find Name 表示搜索scm或exe中有此名称的条目,比如fem_ok
Find Value 表示搜索文字内容
重要:如果你修改了文字,先在别的条目上点一下,然后再保存。
另外这里有一份AleX AciD做的把amercian.gxt转换为完整的文本文件
不知道哪里有得下
我传了一份
所有支持的游戏用到的gxt文本都可以在SB目录\help\GXT Strings里找到
如何获得游戏中的坐标?
你可以用这个或SB里的坐标工具。
如何修改CLEO按键?
看这篇文章 EN CH
死机相关
by James227uk
启动gta_sa.exe时崩溃。
exe版本不兼容。用这个
密码请往原帖查看。
游戏在载入图崩溃。
游戏载入时某个脚本程序不能工作。尝试删除最新添加的CLEO。如果还有问题,删除所有CLEO后重试。如果还有问题就不是CLEO的 问题了。你可能修改了别的文件导致死机。如果不死机的话,把CLEO一个个放回去,死机的那个就是出问题的。
按某键死机。
某CLEO有问题,在处理按键的那一段有错。找作者去,可以PM他。
进入某地区时死机。
可能有两个原因。可能是CLEO有错,也可能是CLEO冲突。尝试把CLEO删剩一个,看有没有问题。没有问题就是冲突,有问题的话找作者去。
欢迎指正
感谢PatrickW, Seemann, ZAZ, goin-god, james227uk, ceedj 翻譯這麼一大段教程,KWANZ辛苦了{:soso__17071571728416505002_4:}
話說如果改這個是不是有可能可以做一個新的主線任務,那不是很爽?不過貌似是大工程吧0.0
本帖最后由 Sid 于 2012-5-9 21:45 编辑
沒有純理論講解,而是換成問答模式,很不錯{:soso_e144:} 以前看英文
今天终于看上了中文 確實wait 0 都很重要,比如
if
Player.Defined($PLAYER_CHAR) 的前面必須加wait 0 不然當機幾率賊大:L
页:
[1]