3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 360|回复: 6
打印 上一主题 下一主题

[原创] 脚本demo范例

[复制链接]

5

主题

55

帖子

296

积分

高级玩家

Rank: 4

贡献度
18
金元
2242
积分
296
精华
0
注册时间
2015-9-9
QQ
跳转到指定楼层
主题
发表于 2024-1-18 21:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个帖子用来发布我在编写脚本时用到的一些脚本块。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

5

主题

55

帖子

296

积分

高级玩家

Rank: 4

贡献度
18
金元
2242
积分
296
精华
0
注册时间
2015-9-9
QQ
舒服的沙发
 楼主| 发表于 2024-1-18 21:39 | 只看该作者
本帖最后由 1610109605 于 2024-1-18 21:43 编辑

这段代码用来获取当前玩家背包内的所有物品的索引,及其form对象。

ref ritemint aaaa
int ikey
set aaaa to (player.GetNumItems)
        set ikey to 0
        printc "当前玩家拥有的物品数量是%G" aaaa
        Label 4
        if ikey<aaaa
                set ritem to player.GetInventoryObject ikey
                printc "当前是%G循环,对象formId:%i,对象名:%n" ikey ritem ritem
                set ikey to (1+ikey)
                goto 4
        endif




回复 支持 反对

使用道具 举报

5

主题

55

帖子

296

积分

高级玩家

Rank: 4

贡献度
18
金元
2242
积分
296
精华
0
注册时间
2015-9-9
QQ
硬硬的板凳
 楼主| 发表于 2024-1-18 21:47 | 只看该作者
这段代码是获取8个热键槽中的装备信息。

代码:
int ikey
ref ritem
int iindex
set ikey to 1
        label 1
        if ikey<=8
                printc "当前循环%G" ikey
                set ritem to GetHotkeyItem ikey
                SET iindex TO IsReference ritem
                printc "当前baseform:%G" iindex
                ListAddForm aaaEquipAndHotKeyList ritem;永久添加到列表中,这里是不ref。
                set iindex to ListGetCount aaaEquipAndHotKeyList
;-------------set iindex to ListAddForm aaaEquipAndHotKeyList ritem -2
;-------------iindex=ritem.ListAddRef aaaEquipAndHotKeyList ikey-1
                printc "这是%G号热键槽,对象formId:%i,对象名:%n,表单索引:%G" ikey ritem ritem iindex
                set ikey to 1+ikey
                goto 1
        endif

回复 支持 反对

使用道具 举报

5

主题

55

帖子

296

积分

高级玩家

Rank: 4

贡献度
18
金元
2242
积分
296
精华
0
注册时间
2015-9-9
QQ
冰凉的地板
 楼主| 发表于 2024-1-18 21:57 | 只看该作者
获取头戴物品,及身穿的物品。注释不影响代码编译。

---------------------------------------
code 代码。

        set rEquipNow to player.GetEquippedObject 0    ;这是注释:获取当前头带的装备。
        SET iindex TO IsReference rEquipNow              ;这是注释:判断当前返回值是否是ref,是ref返回1不是返回0
        printc "当前baseform:%G" iindex                   ;这是注释:在控制台中打印ref判断结果。
        ListAddForm aaaEquipAndHotKeyList rEquipNow;永久添加到列表中,这里是不ref。
        set rEquipNow to player.GetEquippedObject 2    ;这是注释:获取当前身穿装备。
        SET iindex TO IsReference rEquipNow               ;这是注释:判断当前返回值是否是ref,是返回1不是返回0
        printc "当前baseform:%G" (IsReference iindex) ;这是注释:输出到控制台中。
        ListAddForm aaaEquipAndHotKeyList rEquipNow  ;永久添加到列表中,这里是不ref。


回复 支持 反对

使用道具 举报

5

主题

55

帖子

296

积分

高级玩家

Rank: 4

贡献度
18
金元
2242
积分
296
精华
0
注册时间
2015-9-9
QQ
5#
 楼主| 发表于 2024-1-18 23:56 | 只看该作者
坑 gettype正确用法
ref Something
if (GetType Something) == 41 ; ammo
   ; do something appropriate for ammo
endif
错误:这个用法返回值全是0
ref Something
if (Something.GetType) == 41 ; ammo
   ; do something appropriate for ammo
endif
回复 支持 反对

使用道具 举报

5

主题

55

帖子

296

积分

高级玩家

Rank: 4

贡献度
18
金元
2242
积分
296
精华
0
注册时间
2015-9-9
QQ
6#
 楼主| 发表于 2024-1-19 00:23 | 只看该作者
本帖最后由 1610109605 于 2024-1-19 00:24 编辑


ListGetFormIndex正确用法
注意正确用法是在表与查询物品之间加个“,”符号。
正确 right:
if (GetType ritem) ==41||40||24;如果等于这几个就进来。
if (ListGetFormIndex aaaEquipAndHotKeyList,ritem) > -1;当前对象在表单中。
printc "当前进来了%G循环,物品ID是%i,物品名是%n" ikey ritem ritem
set ikey to (1+ikey)
GOTO 2
endif
错误:
if (GetType ritem) ==41||40||24;如果等于这几个就进来。
if (ListGetFormIndex aaaEquipAndHotKeyList ritem) > -1;当前对象在表单中。
    printc "当前进来了%G循环,物品ID是%i,物品名是%n" ikey ritem ritem
    set ikey to (1+ikey)
    GOTO 2
endif
回复 支持 反对

使用道具 举报

5

主题

55

帖子

296

积分

高级玩家

Rank: 4

贡献度
18
金元
2242
积分
296
精华
0
注册时间
2015-9-9
QQ
7#
 楼主| 发表于 2024-1-20 20:50 | 只看该作者
这段代码是获取玩家背包内的未装备的武器,未穿的衣服,然后移到指定的物品箱中。
需要自己建一个list。

--------------------------------------------------------------
scn aaArrangeWeaponScript
int rNextCount;存放应当加1的结果。
ref ritem;得到的ref结果
int ikey;用于循环的变量。
int iCount;存放所有物品返回值。
ref rEquipNow;当前装备。
begin GameMode
        set ikey to 1
        label 1
        if ikey<=8
               
                set ritem to GetHotkeyItem ikey;获取当前热键的装备内容。
                ListAddForm aaaEquipAndHotKeyList ritem;永久添加到自定义列表中,这里是不ref。
                set ritem to GetWeaponAmmo ritem;获取该武器的弹药。
                if        (GetType ritem) == 41
                        ListAddForm aaaEquipAndHotKeyList ritem;将当前弹药添加到列表中。
                endif
                set ikey to 1+ikey;读下一个热键。
                goto 1;循环。
        endif
        set rEquipNow to player.GetEquippedObject 0;获取头戴物品。
        ListAddForm aaaEquipAndHotKeyList rEquipNow;添加头戴物品到列表。
        set rEquipNow to player.GetEquippedObject 2;获取身穿物品。
        ListAddForm aaaEquipAndHotKeyList rEquipNow;添加身穿物品到列表。
        set iCount to (player.GetNumItems);获取玩家身上所有物品数量。
        set iCount to (iCount - 1);重置索引。
        Label 2
        if iCount>=0;循环。
                set ritem to player.GetInventoryObject iCount;获取当前对象。
                if (GetType ritem) ==41||(GetType ritem) ==40||(GetType ritem) ==24;如果等于这几个就进来。
                        if (IsQuestItem ritem ==0) && (ListGetFormIndex aaaEquipAndHotKeyList,ritem == -1);不是任务物品且不是表格中的物品。the ritem is not questItem and not in the list。
                                        if (GetType ritem) ==41||(GetType ritem) ==40;是武器或者弹药进来。
                                                SET IKEY TO (Player.GetItemCount ritem);获取当前物品的数量。
                                                aaaMyWeaponBoxref.additem ritem IKEY 1 ;添加该物品到指定的箱子里。
                                                player.RemoveItem ritem IKEY 1; 从玩家背包移除物品。
                                        elseif (GetType ritem) == 24;是服装进来。
                                                SET IKEY TO (Player.GetItemCount ritem)
                                                aaaMyClothingBoxref.additem ritem IKEY 1
                                                player.RemoveItem ritem IKEY 1
                                        endif
                        endif
                endif
                set iCount to (iCount - 1);索引减1。
                goto 2
        endif
        stopquest aaArrangeWeaponQuest
end
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|咖绿茵|求知网|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2024-9-29 19:35 , Processed in 0.093061 second(s), 14 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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