1610109605 发表于 2024-1-18 21:38

脚本demo范例

这个帖子用来发布我在编写脚本时用到的一些脚本块。
static/image/hrline/5.gif


1610109605 发表于 2024-1-18 21:39

本帖最后由 1610109605 于 2024-1-18 21:43 编辑

这段代码用来获取当前玩家背包内的所有物品的索引,及其form对象。
static/image/hrline/line2.png
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




1610109605 发表于 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

1610109605 发表于 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。


1610109605 发表于 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

1610109605 发表于 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

1610109605 发表于 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
页: [1]
查看完整版本: 脚本demo范例