脚本demo范例
这个帖子用来发布我在编写脚本时用到的一些脚本块。static/image/hrline/5.gif
本帖最后由 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
这段代码是获取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
获取头戴物品,及身穿的物品。注释不影响代码编译。
---------------------------------------
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。
坑 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: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 这段代码是获取玩家背包内的未装备的武器,未穿的衣服,然后移到指定的物品箱中。
需要自己建一个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]