======发一些自己写的简单实用的脚本,兼脚本入门教程~~~~8月21更新提供一些下载======
本帖最后由 bluesky404 于 2012-12-3 21:40 编辑都是一些超短的小脚本,即使刚学会用CS的童鞋也能弄明白的,高手就请忽视这些吧。本贴希望能鼓励多点人写脚本,并能自己开发自己想要的一些简单的功能。另外,这些代码我是先从自己的MOD里复制粘贴到这里然后再编辑给大家看的,所以编辑过程中可能令代码出错,望大家领会代码的意思。
12-08-17更新信息:应他人所求做了一个好用一点的防误伤脚本。由于这个功能难以只用一个脚本来实现,而且也不算简单了,再者考虑到论坛里不少童鞋可能没写过脚本,难以看懂,或者根本不打算在此花时间……o(>﹏<)o…所以我想了想…还是放出一些下载吧。下载地址一楼底部,二楼提供下载的介绍(若需下载请务必先看)
一个对理解脚本蛮有帮助的贴子: http://bbs.3dmgame.com/thread-1295535-1-1.html (遇到不懂的函数可以按Ctrl+F查找其作用,注意该贴子第二页也有内容)
想弄清楚函数的详细用法就上: http://cs.elderscrolls.com/index.php/List_of_Functions .
12-08-29更新信息:一楼底部给出一个怎么用CS写脚本的简单图示教程★如果不清楚这些脚本代码怎么用可以先到一楼底部看此图示教程★
————————————————————————这是线————————————————————————
先来一个:武器附魔按百分比当前生命值损血的脚本
脚本类型:Magic Effect Script
其它需求:写好后,给某个附魔加一个Script Effect效果,然后给某把武器附上这个附魔
--------------这也是线--------------
scn a1BFBSX ;脚本名,个人习惯以a1开头,易于排序,我下面写的脚本名都是a1开头;BFBSX=百分比损血- -!
long a ;定义一个long型变量。定义变量时整数用short或long,浮点数(即小数)用float
begin ScriptEffectStart ;"当魔法效果开始时生效",用在武器附魔上就是武器攻击到敌人时生效
set a to (getav health *.1) ;给变量a赋值,赋敌人当前生命值的10%
set a to (-a) ;给变量a赋值,a的值变成-a
modav2 health a ;敌人减少a的生命值,即减少10%当前生命值
end ;必要格式
--------------这也是线--------------
就这么几行就完成了,现在你可以有一把按敌人当前生命值损血的武器了
————————————————————————这是线————————————————————————
来第二个:当箭的数量少于10时,自动补充到50支箭;同时装备弓就自动装备箭(已解决只装备一支箭的问题),卸下弓就自动卸下箭。
脚本类型:Object Script
其它需求:一把ID名为a1bow的弓,一个ID名为a1arrow的箭,给弓加上这个脚本,箭不用
--------------这也是线--------------
scn a1BowArrow
short addArrow ;定义两个short型变量
short count
begin gameMode;"在游戏进行时生效"(非菜单时)
if (player.getequipped a1bow == 1 && player.getequipped a1arrow == 1) ;玩家装备上该弓与箭时
if player.GetItemCount a1arrow < 10 ;当箭矢数少于10时
set addArrow to (50 - player.GetItemCount a1arrow) ;对addArrow变量赋值,值为(50-当前箭矢数)
player.additem a1arrow addArrow ;增加箭矢
endif
endif
end ;至此,完成自动补充箭代码,下面的代码为弓箭同时装备和卸下。
begin onEquip ;当玩家装备该物品时生效
set count to (player.GetItemCount a1arrow - 1)
player.removeitemns a1arrow count;先将箭矢数减到1,这样做才能解决只装备一支箭的问题
player.equipitemNS a1arrow ;装备箭矢
player.additemns a1arrow 49;增加49支箭矢
end
begin onunEquip ;当玩家卸下该物品时生效
player.unequipitemns a1bow ;卸下弓。这句看似无用,实际是有用的,一试便知
player.unequipitem a1arrow
end
--------------这也是线--------------
完成
————————————————————————这是线————————————————————————
第三个:一把成长型的武器,武器能根据你的当前人物等级改变自己攻击力。稍微修改一下代码就可以令“依据人物等级”变为“依据敏捷”“依据力量”“依据人物防御力”甚至依据多个属性来决定自身攻击力
脚本类型:Object Script
其它需求:一把武器,给武器加上这个脚本,每次装备上武器时,武器会根据等级改变攻击力
--------------这也是线--------------
scn a1growweapon
short lv
float gongji
ref wuqi
begin onEquip
set lv to (player.getlevel*1.5) ;这里指武器攻击为等级数的1.5倍,若你人物30级,那么武器攻击力为45
;若想改为根据0.5倍敏捷来设定攻击的话,写为 set lv to (player.getav agility * 0.5) 以此类推
set wuqi to player.getequippedobject 16
set gongji to (lv)
SetAttackDamage gongji wuqi
end
--------------这也是线--------------
完成
————————————————————————这是线————————————————————————
第四个:召唤坐骑或宠物魔法,使用一次这个魔法坐骑召来,再用一次坐骑消失。
脚本类型:Magic Effect Script
其它需求:首先,你必须在这个MOD中有一个坐骑生物,然后你把该生物放到了世界中,比如可以放到testinghall测试大厅或者帝都市场街,然后该生物就有了个参照编辑ID,比如写为a1canzhao;然后你需要在世界中,再放一个Marker比如可以使用“门”类物品里的“MagesGuildPortal01”,可以放在测试大厅或你喜欢处,然后这个Marker就有了一个参照ID,比如写为a1marker。
--------------这也是线--------------
scn a1SummonScript
Begin ScriptEffectstart
if Player.IsRidingHorse == 1;骑马时施这个法术则无效,如果你像我一样用了某些可以在骑马时施法的MOD的话
elseif Player.GetDistance a1canzhao < 2000;若你的坐骑在你周围2000范围内,则将坐骑送到a1marker所在地
a1canzhao.moveto a1marker
else
a1canzhao.moveto player 150 0 0 ;坐骑不在你周围的话,将坐骑传送到你旁边
endif
End
--------------这也是线--------------
写好后,建一个法术,添加该Script Effect。游戏中,用一次法术,坐骑召来,再用一次,坐骑消失(实际去了测试大厅,任何召唤坐骑类MOD都是将坐骑送去某个地方的)。
————————————————————————这是线————————————————————————
第五个:物品自动入包,魔法自动学会。估计多数人都会,我姑且写一下。
脚本类型:Quest Script
其它需求:物品ID为a1wupin,魔法ID为a1mf,先在任务设置里新建个ID名为a1xixixixi的任务,写好代码后,在任务的脚本处选择a1wahahahaha并确定。
--------------这也是线--------------
scn a1wahahaha
Begin GameMode
player.additem a1wupin 1
player.addspell a1mf
stopquest a1xixixixi
end
--------------这也是线--------------
完成
————————————————————————这是线————————————————————————
第六个:拔出武器时和收起武器时,武器外表不同。常见于光剑,但我这个是改进版的,原理不同。比如一把光剑拔出来时是剑,收起时是剑柄,传统的做法是:收剑自动增加物品剑柄再自动装备剑柄,拔剑自动装备物品剑并删除剑柄。但我发现有时会导致拔剑不能一次拔出,要抽搐两下浪费两秒,不知他人是否遇到。本方法主要靠SetModelPath函数完成。当然用此法,可以做到拔剑时是剑,收剑时是扇子、是雨伞或隐藏武器显示…等等
脚本类型:Object Script
其他需求:剑&剑柄ID(如a1sword和a1hold),要知道剑&剑柄的nif文件路径,给剑加上脚本。
--------------这也是线--------------
scn a1SwitchWeaponModel
short flag
Begin Gamemode
if ( player.GetEquipped a1sword ) && ( player.isWeaponout == 1 ) && (flag==0)
SetModelPath "weapon\这里写上剑的nif路径\a1sword.nif" a1sword;拔剑时武器使用剑的nif文件
player.unequipitemNS a1sword ;此行看似无用实则必须
player.equipitemNS a1sword
set flag to 1
elseif( player.GetEquipped a1sword ) && ( player.isWeaponout == 0 ) &&(flag==1)
SetModelPath "weapon\这里写上剑柄的nif路径\a1hold.nif" a1sword;拔剑时武器使用剑柄的nif文件
player.unequipitemNS a1sword ;此行必须
player.equipitemNS a1sword
set flag to 0
endif
end
--------------这也是线--------------
这种方法好处是只有一个物品,不像传统方法有两个物品,拔剑时要删除剑柄,有可能导致不能顺利拔剑(我的游戏是这样,不知他人是否遇到,我的帧数基本40左右,不会是卡的问题),但是局限是只能用于同类物品,如果想在单手武器和双手武器中换的话就不行了,比如双持,收剑背持。那样的话可以采用下面的方法。
————————————————————————这是线————————————————————————
第七个:武器双持,收持于背,拔剑同时装备副手武器
脚本类型:Object Script
其他需求:主武器ID:a1sword(单手武器),副手物品ID:a1offhand(伪武器或盾),收持于背的武器ID:a1back(双手武器),在单手的主武器加脚本
--------------这也是线--------------
scn a1SwitchWeapon
short flag
Begin Gamemode
if ( player.GetEquipped a1back ) && ( player.isWeaponout == 1);拔剑时自动换上两手两把武器
player.equipitemns a1sword
player.equipitemNS a1offhand
elseif( player.GetEquipped a1sword ) && ( player.isWeaponout == 0 ) &&(flag==0);收剑时自动换上双手武器,即收持于背
player.additemns a1back 1
player.equipitemNS a1back
set flag to 1
elseif(player.getequipped a1back==0)&&(player.isweaponout==1)&&(flag==1);拔剑后即删除双手武器
player.removeitemns a1back 1
set flag to 0
endif
end
--------------这也是线--------------
完成。另,此代码不会出现抽搐拔剑问题
————————————————————————这是线————————————————————————
第八个:按百分比吸收属性,技能等级,生命,法力等的武器,弓箭也有效。比如击中目标减少其90%速度,自己增加这个速度值。
脚本类型:Magic Effect Script
其他需求:这是附魔效果……给某个附魔加一个Script Effect效果,然后给某把武器附上这个附魔
--------------这也是线--------------
scn a1xxx
short a
short b
begin ScriptEffectStart
set a to (getav speed *.9)
set b to -a
modav speed b
player.modav speed a
end
begin ScriptEffectFinish ;抢来的始终是要还的……
modav speed a
player.modav speed b
end
--------------这也是线--------------
如果抢生命值,法力,体力的话,那就不用还了,不过对命体法要注意函数用player.modav2不能用player.modav;属性,技能用player.modav,并记得要还。
————————————————————————这是线————————————————————————
第九个:随机伤害的附魔
脚本类型:Magic Effect Script
其他需求:这是附魔效果……
--------------这也是线--------------
scn a1xxx
short a
begin ScriptEffectStart
set a to (GetRandomPercent + 1);GetRandomPercent产生0~99随机数
set a to -(a*.5) ;随机1~50伤害
modav2 health a
end
--------------这也是线--------------
完成
————————————————————————这是线————————————————————————
第十个:删除物品或法术——在物品界面删除鼠标指向物品,在法术界面删除已选定的法术。按住右shift+delete键后弹出对话框确认删除……虽然要找删除物品/法术的MOD很好找…嗯…本代码供启发用……虽然本人就是用这个来删除物品的- -!……另外留意下messagebox和fQuestDelayTime的用法,本贴暂时只有此代码会用到messagebox,而fQuestDelayTime则在Quest Script中很常见,也很重要。
脚本类型:Quest Script
其他需求:要在任务设置里新建个任务并选中该脚本,就像自动入包代码一样。
--------------这也是线--------------
scn a1deletescript
long itemconut
ref delitem
ref delspell
short button
short flag
float fQuestDelayTime ;fQuestDelayTime是一个特殊的函数,只在Quest Script中生效,作用是设定脚本运行间隔时间
Begin MenuMode 1002;表示在物品菜单执行代码
if ( isKeyPressed2 54 && isKeyPressed2 211 );按下shift和delete键
Set delitem to GetActiveMenuSelection ;设定鼠标指向的物品
set itemconut to Player.GetItemCount delitem
if itemconut >= 1
if IsQuestItem delitem == 0
if itemconut == 1
messagebox "确定删除?", "否", "是";messagebox会弹出确认的对话框,从第二对引号开始是按钮
else
messagebox "确定删除?", "否", "删除1个", "删除全部"
endif
else
messagebox "任务物品,确定删除?", "否", "是"
endif
set flag to 1;将标志位置1,表示已经弹出过对话框了
endif
endif
end
begin Menumode 1022表示在法术菜单
if ( isKeyPressed2 54 && isKeyPressed2 211 )
set delspell to GetPlayerSpell
messagebox "确定删除已选择的法术?", "否", "是"
set flag to 2
endif
end
begin Menumode
set fQuestDelayTime to 0.15 ;将fQuestDelayTime设为0.15,这样就能令脚本每0.15秒运行一次
if flag == 1
set button to GetButtonPressed ;GetButtonPressed在MenuMode 1002/1022中不生效所以才放到此处
if button == 1 ;==0表示"否";==1表示"是"
player.removeitem delitem 1
message "已删除"
set flag to 0
elseif button == 2 ;==2表示删除全部。0,1,2按顺序表示上面messagebox的"否", "删除1个", "删除全部"
player.removeitem delitem itemconut
message "已删除"
set flag to 0
endif
elseif flag == 2
set button to GetButtonPressed
if button == 1
player.removeSpell delspell
message "已删除法术"
set flag to 0
endif
endif
end
--------------这也是线--------------
完成
————————————————————————这是线————————————————————————
第十一个:一个加强自身攻击力的BUFF法术。攻击可改为防御、属性、技能等级等等。法术持续时间内增加,增幅可根据人物等级,可根据智力或其他属性……自行修改吧。
脚本类型:Magic Effect Script
其他需求:这是法术效果…在某个法术里加Script Effect
--------------这也是线--------------
scn a1attup
short a
begin ScriptEffectStart
set a to (player.getlevel*1.5) ;提高1.5倍等级的攻击力,假如人物20级,则BUFF时效内人物攻击力加30;根据属性用player.getav,如set a to (player.getav intelligence * 0.3)
player.modav attackbonus a
end
begin ScriptEffectFinish ;时效结束,攻击要降低
set a to (-a)
player.modav attackbonus a
end
--------------这也是线--------------
完成
————————————————————————这是线————————————————————————
第十二个:自动瞄准弓————要做成真·自动瞄准可能会很复杂,所以我们不妨做一个近似的效果:拉这把弓的时候,只要准心曾瞄准过某生物,即使射出去的箭没命中,该单位也会受到伤害,这个伤害是一个额外伤害,跟箭命中本身的伤害无关,比如可以令该伤害等于这把弓基础攻击力的1倍。只有最后一个准心划过的生物会受伤害。
脚本类型:Object Script
其它需求:弓的ID为a1bow,对弓加脚本。该脚本虽然也不长,但逻辑可能稍微有点复杂,所以注释写得详细点。
--------------这也是线--------------
scn a1autobow
ref target ;准心瞄准的目标
ref target2 ;接受伤害的目标
int PickLength ;用于暂存数值
int flag ;用于确定玩家是否进行了一次攻击的标志
int flag2 ;用于确定iActivatePickLength是否更改过的标志(下详)
int flag3 ;用于确定额外伤害是否就绪的标志
float timer1 ;用于计时(下详)
float timer2 ;同上
long damage ;额外伤害值
begin gameMode
if (player.getequipped a1bow == 1 && isControlPressed 4) ;装备a1bow并按下攻击键
if (flag2 == 0)
set PickLength to getgamesetting iActivatePickLength ;iActivatePickLength是一个游戏设置值,玩家接触距离,玩家可以开门捡物的距离
setnumericgamesetting iActivatePickLength 2300 ;装备a1bow并拉弓时,暂时将接触距离增至2300,因此才能瞄准远处目标
set flag2 to 1 ;所以如果用a1bow并正在拉弓,你可以开远处的箱子- -!
endif
set target to getcrosshairref;将目标定为准心划过的单位
if (target.isactivatable && target.isactor && target.getdead == 0 && target != 0);确定目标是生物,排除箱子,花草之类的目标
set target2 to target ;设定准备接受伤害的最后一个准心划过的单位
endif
set flag to 1;开启玩家进行过一次攻击的标志
if timer1 < 1 ;这是个计时器,只有当按住攻击键1秒以上,才能启动额外伤害,防止连按攻击键,连续激活额外伤害
set timer1 to timer1 + GetSecondsPassed;连按攻击不能连续激活伤害,但连按的时间也会累加,比如连按5次攻击,每次0.2秒,也激活伤害
else
set flag3 to 1;开启目标准备接受伤害的标志
set timer1 to 0
endif
elseif (isControlPressed 4 != 1 && flag == 1);这一段表示拉弓结束,箭脱弦,目标可以准备接受伤害
set flag to 0
if (flag3 == 1)
set flag3 to 2
endif
endif
if (flag3 == 2);若伤害就绪标志开启
if timer2 < .4;延时,使额外伤害晚点触发,不至于箭一脱弦就触发,这里设为0.4秒
set timer2 to timer2 + GetSecondsPassed
else
if ( target2.getdead == 0 ) ;确定目标没死
set damage to -(GetAttackDamage a1bow * 1) ;设定额外伤害的依据,这里设为弓基础伤害的1倍。另,弓箭伤害本是弓+箭的伤害
target2.modav2 health damage ;只设弓的基础伤害的话,比确实命中目标的伤害低。喜欢的话可以改为依据人物敏捷造成额外伤害等等
endif
set timer2 to 0
set flag3 to 0
endif
endif
if (flag == 0 && flag2 == 1);不拉弓的话iActivatePickLength要改为原值
setnumericgamesetting iActivatePickLength PickLength
set flag2 to 0
endif
end
--------------这也是线--------------
完成
————————————————————————这是线————————————————————————
第十三个:自动切换视角———使用弓时,若按攻击键,自动切换至第一人称视角;若切换视角是自动切的话,则收弓放背后或换非弓武器时,自动切至第三人称。
脚本类型:Quest Script
其它需求:像物品自动入包那样,新建个任务选定该脚本。
--------------这也是线--------------
scn a1bowfirstperson
float fQuestDelayTime ;fQuestDelayTime是一个特殊的函数,只在Quest Script中生效,作用是设定脚本运行间隔时间
short flag1
short flag2
begin gamemode
set fQuestDelayTime to 0.08 ;这样就令脚本每0.08秒运行一次,若不设定,默认是每帧运行一次脚本(gamemode)。觉得0.08秒不合适的自行修改
if Player.GetWeaponAnimType == 3 ;玩家拿的是弓
if player.IsWeaponOut == 1
if isControlPressed 4
set flag1 to 1
set flag2 to 1
ToggleFirstPerson 1 ;切至第一人称
endif
elseif flag1 == 1
ToggleFirstPerson 0 ;若之前切换视角是自动的话,则收弓时自动切至第三人称
set flag1 to 0
endif
elseif flag2 == 1
ToggleFirstPerson 0 ;若之前切换视角是自动的话,则换武器时自动切至第三人称
Set flag2 to 0
endif
end
--------------这也是线--------------
完成
————————————————————————这是线————————————————————————
第十四个:界面时钟——做任务时要等时间,老是要进入任务界面看当前游戏时间,麻烦。所以…做个界面钟…但是要做真·界面时钟只有脚本可不行啊,既然基于脚本那么我们用Message""的方式每隔游戏内10分钟(现实20秒)在画面左上角显示一次当前时间。战斗时不显示
脚本类型:Quest Script
其它需求:像物品自动入包那样,新建个任务选定该脚本。另说明,这段代码是我根据ZorPrime在T网上的MOD提取出来并根据我自己的喜好改写的。
--------------这也是线--------------
scn a1timeScript
float fQuestDelayTime
short a1Day
short a1Hour
short a1Last
short a1Minute
float a1TimeStamp
begin GameMode
set fQuestDelayTime to 1.8;fQuestDelayTime的作用见上一个脚本
set a1TimeStamp to GetCurrentTime
set a1Hour to a1TimeStamp
set a1Minute to (a1TimeStamp * 60) - (a1Hour * 60) ;这几行确定时间
if ((a1Minute % 10) == 0) ;当分钟为10的倍数时,即每10分钟
if (a1Minute != a1Last)
if (Player.IsInCombat == 0) ;战斗时不显示
set a1Day to GetDayOfWeek
if (a1Day == 0)
Message "天 %02.0f:%02.0f" a1Hour a1Minute ;用Message的方式显示,“%”后面的是格式
elseif (a1Day == 1)
Message "一 %02.0f:%02.0f" a1Hour a1Minute
elseif (a1Day == 2)
Message "二 %02.0f:%02.0f" a1Hour a1Minute
elseif (a1Day == 3)
Message "三 %02.0f:%02.0f" a1Hour a1Minute
elseif (a1Day == 4)
Message "四 %02.0f:%02.0f" a1Hour a1Minute
elseif (a1Day == 5)
Message "五 %02.0f:%02.0f" a1Hour a1Minute
elseif (a1Day == 6)
Message "六 %02.0f:%02.0f" a1Hour a1Minute
endif
endif
set a1Last to a1Minute
endif
endif
end
--------------这也是线--------------
完成
————————————————————————这是线————————————————————————
第十五个:一双可以提高潜行速度的鞋子
脚本类型:Object Script
其他需求:给鞋子加脚本
--------------这也是线--------------
scn a1sneak
float a
short flag
begin onequip
set a to getgamesetting fMoveSneakMult
setnumericgamesetting fMoveSneakMult 0.9 ;改游戏设置,默认0.6,现改为0.9,基本是1.5倍的速度
set flag to 1 ;用onequip的话,这句代码和下面的 if (flag == 1) 是必须的
end
begin onunequip
if (flag == 1)
setnumericgamesetting fMoveSneakMult a ;装备卸下后,速度改为原值
set flag to 0;这句不是必须的,删了也无所谓
endif
end
--------------这也是线--------------
由于原理是改变游戏设置,所以当你穿此鞋的时候,其他NPC的潜行速度也会改变……囧……这段代码给一个思路:可以通过改变游戏设置达到某个你可能需要的效果。另外由于用的是begin onequip,不是gamemode,所以每次开始游戏时可能要脱下鞋子再穿上才有效。如果用gamemode的话,可以用 if (player.getequipped a1shoes && player.IsSneaking && flag==0)去判断,效果也许可能更好。
————————————————————————这是线————————————————————————
第十六个:提高徒手攻击力的手套。由于attackbonus只对持有武器有效,所以就用游戏设置去做这个效果吧……- -!
脚本类型:Object Script
其它需求:手套ID:a1armband,给手套加脚本
--------------这也是线--------------
scn a1handtohandx
float a
float temp
float timer
short flag
begin gamemode
if (player.GetEquipped a1armband == 1 && Player.GetWeaponAnimType == 0) ;装备a1armband且空手
set a to (player.getav personality * 0.1) ;设定a的值,用来改写fHandHealthMax。fHandHealthMax默认值15,所以只有a>15时才有提升效果
set a to (a+15+(player.getav handtohand * 0.24));设定a为15加0.1倍魅力加0.24倍徒手攻击等级。所以当魅力100徒手100时,fHandHealthMax达到49
if ( isControlPressed 4 && flag == 0 )
set temp to getgamesetting fHandHealthMax
setnumericgamesetting fHandHealthMax a;fHandHealthMax要乘以0.75才是徒手攻击的威力,0.75是力量100徒手等级100时的默认值,具体公式自行查找
set flag to 1 ;所以当fHandHealthMax为49时,徒手威力最高为37
endif
endif
if ( isControlPressed 4 != 1 && flag == 1 )
if timer < 1 ;这是延时器。如果不加延时器的话,可能攻击键按下马上松开,敌人受伤前,fHandHealthMax值就变回原值了
set timer to timer + GetSecondsPassed
else
setnumericgamesetting fHandHealthMax temp
set flag to 0
set timer to 0
endif
endif
end
--------------这也是线--------------
完成。利用类似的方法,如果将fHandReachMult改为3.0,那么就有一个可以发气功的拳套了,攻击距离是剑的3倍- -!
如果想使攻击增幅与手套护甲挂钩,可以用GetArmorAR a1armband * 0.01去获得手套护甲值。*0.01是因为如果手套护甲值为5,GetArmorAR会得到500的值,所以要乘0.01。
————————————————————————这是线————————————————————————
120817更新第十七个:由于一楼的字数快超标了,所以第十七个放在二楼o(><)o
————————————————————————这是线————————————————————————
好吧,写了这么些,应该差不多了吧……{:3_153:}
最后写几个不影响平衡性的游戏设置。在CS的游戏设置->游戏设置中(Game Setting)
fChase3rdPersonVanityXyMult 和 fChase3rdPersonXYMult 这两项若都设为99则使第三人称视角画面移动平滑。某些解决画面平滑移动的MOD其实仅仅就改了这两项设置
fArrowFOVZoom射击时按格挡视野放大程度,默认30,值越小放大越大。我自己是设了15
fArrowGravityMult箭的弧度,默认0.002,加大的话箭的路径越直,0.005就很直了。貌似0.008左右箭就不会有弧度了
iAllyHitAllowed盟友允许击中的次数,攻击对方超过这个次数对方会攻击你。盟友:比如同为战士工会成员
iFriendHitAllowed类似上面,对于召唤物之类等等生效。改大这两个数值能解决一点点误伤事故。
iMaxPlayerSummonedCreatures玩家召唤物数量,默认1,虽然调了影响平衡,不过还是调多几个好玩。
游戏设置其实很多内容,比如上面自动瞄准弓的脚本就用到iActivatePickLength,提高潜行速度鞋子脚本用到fMoveSneakMult,提高徒手攻击的手套用到fHandHealthMax等。某些MOD可能仅仅就是改了几个游戏设置值,就算一个MOD了……………
———————————————————————我是一条线———————————————————————
12-08-29更新:有人问怎么写脚本……嗯啊……首先,CS必须会一点,如果一点都不会的话请先从CS的使用学起,论坛里应该有CS基础教学贴。然后这里我以一楼第一个脚本为例(百分比损血的附魔效果)给出一个非常简陋的教程,见下图。因为此例是附魔效果所以脚本添加到附魔中,若是Quest脚本请添加到任务中,Object脚本请添加到物品中……PS.我的CS是中文版的,至于英文版…其实也是一样的╮(╯▽╰)╭
http://img13.poco.cn/mypoco/myphoto/20120829/00/66031745201208290017372503208512175_001.jpg
至此脚本写完,下面是添加脚本(到附魔效果中)
http://img13.poco.cn/mypoco/myphoto/20120829/00/66031745201208290017372503208512175_000.jpg
———————————————————————我是一条线———————————————————————
↓↓↓下载地址↓↓↓~~下载前请务必看二楼的介绍╮(╯▽╰)╭
摇摇屋网盘杯具了……华为网盘和度娘网盘
鼓励DIY
华为网盘:
**** Hidden Message ***** 本帖最后由 zhouq510 于 2013-7-14 01:10 编辑
一楼字数超标第十七个在此:应他人所求做了个防误伤的脚本。效果及原理解说:NPC有两种,无敌意与有敌意。使用该魔法后,自己得到一个BUFF状态,当你正在攻击且无敌意单位进入你的攻击范围时,会瞬间将此人置于不受伤状态(会短暂定身)。该BUFF持续时间可自定(我提供的下载中设了600秒),持续时间内选择该魔法并短按施法键可以续时,而长按施法键可以取消防误伤状态。
脚本类型:一个Object,两个Magic Effect。这个功能难以只用一个脚本实现,而且也不算简单,所以我提供了MOD下载。
其它需求:一个ID为a1fwswp的物品用来加Object Script(随意新建一个物品,比如可以用个水晶球,水壶,碗之类的做模型);一个ID为a1fwsmf的法术用来开关BUFF;一个ID为a1biaozhi1的能力型法术(Ability)
这是本贴所列脚本中最难的一个,若能完全理解此例,说明你已经有能力去理解绝大部分MOD的脚本了(若碰到作用不明的函数可以参考一楼开头给出的那两个链接),而且应该也具备了较强的脚本编写能力,可以编写出自己想要的脚本效果了:victory:
---------------下面是法术a1fwsmf的脚本用于开关BUFF---------------
scn a1fwsSwitch
short count
begin ScriptEffectStart
if (player.getitemcount a1fwswp == 0) ;没有物品a1fwswp则增加它
player.additemns a1fwswp 1 ;得到物品则,物品上的主功能代码就会生效
message "防误伤开启"
else ;有a1fwswp了就移除它使主功能代码失效
set count to player.getitemcount a1fwswp
player.removeitemns a1fwswp count
message "防误伤关闭"
endif
end
begin ScriptEffectFinish
if (player.getitemcount a1fwswp > 0 && IsControlPressed 7 == 0) ;IsControlPressed 7指按施法键。短按续时,长按取消的关键就在此
set count to player.getitemcount a1fwswp
player.removeitemns a1fwswp count
endif
end
---------------下面是物品a1fwswp的脚本即最主要功能代码---------------
scn a1fws
ref actor
short flag
long zAggression
long zDisposition
float attangle
float Nattangle
Begin Gamemode
set attangle to (getgamesetting fcombathitconeangle + 5) ;取攻击角,用于判断攻击范围
set Nattangle to -1 * attangle ;取负攻击角
set actor to getfirstref 69 ;扫描当前单元生物
while actor ;循环扫描
set zAggression to actor.getav Aggression ;取生物的恶意度
set zDisposition to actor.GetDisposition player ;取生物对玩家的友好值,如果友好值>=恶意度则该生物无敌意
if (actor != 0 && actor != player && actor.GetDead != 1 && actor.GetCombatTarget != player && zDisposition >= zAggression) ;判断生物是否无敌意
if (player.getheadingangle actor >= Nattangle && player.getheadingangle actor <= attangle && actor.getdistance player < 350) ;判断是否在攻击范围内
;这里距离设了350,若你有一把超远攻击范围的武器,请自行提高该值。
set flag to 1 ;符合防误伤条件就把标志位置1
else
set flag to 0
endif
else
set flag to 0
endif
if (IsControlPressed 4 && flag == 1) ;如果你正在攻击且标志为1
actor.addspell a1biaozhi1 ;目标生物增加Alility型法术a1biaozhi1
actor.setactorsai 0 ;关AI
actor.setghost 1 ;置ghost状态,因此可以免伤
actor.setunconscious 1 ;定身
endif
set actor to getnextref ;扫描下一个目标
loop
End
---------------下面是Ability型法术a1biaozhi1脚本用于取消无敌意单位的不受伤状态---------------
scn a1biaozhi1S
ref self1
float timer1
float timer2
Begin ScriptEffectupdate
set self1 to getself
if (self1.GetUnconscious) ;判断生物是否处于定身状态
set timer2 to 0
if timer1 < .7 ;定身状态会持续0.7秒
set timer1 to timer1 + GetSecondsPassed
else
set timer1 to 0
self1.setactorsai 1 ;开AI
self1.setunconscious 0 ;取消定身
endif
else
if timer2 < .9 ;ghost状态会持续0.9秒
set timer2 to timer2 + GetSecondsPassed
else
set timer2 to 0
self1.setghost 0 ;取消ghost状态,整个免伤状态相当于0.9+0.7=1.6秒
self1.RemoveSpell a1biaozhi1 ;移除目标生物Alility型法术a1biaozhi1
endif
endif
end
---------------这也是线---------------
这个功能虽然也不是不能只用一个脚本来完成,但我试过……效果实在不太好o(>﹏<)o另外我这里只做了防武器攻击的误伤,法术攻击没做,有志者可以自行研究一下……大致的思路差不多,只是攻击范围检测要改成法术命中的检测。
—————————————————————————————————————————————————————————
下面开始介绍一楼底部提供的下载
—————————————————————————————————————————————————————————
正如一楼开头所说,考虑到可能很多童鞋都难以自己编写功能脚本,没有修改基础的可能甚至看不懂,所以我这里放出一些下载,方便各位能直接使用。
此楼介绍提供的下载,地址都在一楼的底部。以下下载,含装备或魔法的均是自动入手。效果是根据我个人喜好设定的,不喜欢的话就打开CS自己DIY吧╮(╯▽╰)╭
其实一楼所提供的脚本,经过一点变化,可以做出很多的效果。比如结合成长武器和改变武器外观的脚本可以让每次拔出的武器都不同,也可以让弓每次射出的箭都不同;比如参考伤害类和防误伤的脚本可以做出类似献祭的效果:每秒烧伤周围的敌军;比如防误伤脚本中的ghost状态对自己使用让自己成为幽灵……很多效果都可以DIY~♪
——————————————————————————我是线——————————————————————————
Q1:防误伤——应用第十七个脚本完成——详细解析请看二楼第十七
效果:自动习得一个法术。使用法术,自己得到一个BUFF状态。BUFF持续时间内,攻击无敌意生物,其会瞬间处于无伤状态。持续时间内再次使用魔法,短按施法键的话则续时,长按施法键则取消防误伤状态。
注意:持续时间我设了600秒。攻击距离判定我设了350,如果你用的是超长范围武器(包括弓),请自行修改脚本。
截图示意:
http://img13.poco.cn/mypoco/myphoto/20120816/22/66031745201208162231516722198176335_000.jpg
——————————————————————————我是线——————————————————————————
Q2:时间提示钟——应用第十四个脚本完成——详细解析请看一楼第十四
效果:自动得到一个物品,然后每20秒(游戏内10分钟)用message的方式在左上角显示一次当前游戏时间。可以方便做任务时,不用老是进任务界面看时间。将自动得到的物品扔到箱子里然后离开当前区域则不会显示了。
截图:╮(╯▽╰)╭
——————————————————————————我是线——————————————————————————
Q3:大头猪——其中有用到第四个脚本
效果:自动习得法术:召唤飞天猪(坐骑)。使用一次法术召唤,用第二次反召唤。
PS:猪的模型取自一个“可爱坐骑”的MOD,原来是不会飞的。实在不好意思{:3_113:},由于年代久远我已经找不到源地址了。而我当初下载的分流链接早死链了(ㄒoㄒ)~~。另外飞行脚本我取自经典MOD——Akatosh Mount就是五龙王的MOD。自己写个飞行系统麻烦死了,既然有现成的就借用一下吧O(∩_∩)O
PS2:Akatosh Mount的源地址貌似也死了(ㄒoㄒ)~~
截图:
http://img13.poco.cn/mypoco/myphoto/20120816/21/66031745201208162155133571445660188_003.jpg
http://img13.poco.cn/mypoco/myphoto/20120816/21/66031745201208162155133571445660188_002.jpg
——————————————————————————我是线——————————————————————————
Q4:删除物品或法术——应用第十个脚本——这类MOD应该很好找我姑且也放出一个
效果:物品菜单—>按Shift+Delete删除鼠标指向的物品(可以是任务物品);法术菜单—>删除已选择的法术,删除后请随便按另外一个法术才会看到目标法术被删除。有确认删除的对话框。
截图:~\(≧▽≦)/~
——————————————————————————我是线——————————————————————————
Q5:自动瞄准、自动装填弓两把、随弓赠送按百分比转换敏捷或速度的箭——应用了第二、第八、第十二个脚本——详细解析请看一楼第二、八、十二
模型来源:HentaiMania2中的弓。源地址:http://oblivion.nexusmods.com/mods/34179
自动瞄准效果:拉弓时,只要准心曾瞄准过某生物,即使射出去的箭没命中,该单位也会受到伤害,这个伤害是一个额外伤害,跟箭命中本身的伤害无关。只有拉弓达1秒才有可能触发额外伤害,连按攻击键的话则累加拉弓时间,够1秒才触发。额外伤害大小与弓术,敏捷,当前体力百分比三者相关。
自动装填效果:装备对应弓与箭,箭少于20支时,自动补充到50支。另外,装备弓则自动装备箭,卸下弓则自动卸下箭。
属性转换:命中目标,按百分比转换其敏捷或速度到你身上,效果持续一小段时间。
截图:
http://img13.poco.cn/mypoco/myphoto/20120816/21/66031745201208162155133571445660188_000.jpghttp://img13.poco.cn/mypoco/myphoto/20120816/21/66031745201208162155133571445660188_001.jpg
——————————————————————————我是线——————————————————————————
Q6:为Sacred Blade增加背后收持且副手武器自动跟随主武器装备,顺便增加随机伤害——见一楼第七、九个脚本。
源地址: http://oblivion.nexusmods.com/mods/8288
截图:
http://img170.poco.cn/mypoco/myphoto/20120817/14/66031745201208171442192099328074256_008.jpghttp://img170.poco.cn/mypoco/myphoto/20120817/14/66031745201208171442192099328074256_009.jpg
——————————————————————————我是线——————————————————————————
Q7:来个跟脚本无关的好了~~~不知有没有人对武器附魔后外观改变觉得不爽…有时一把还不错的武器附魔后会变得很不好看,例如:下面是附魔前后
前:http://img170.poco.cn/mypoco/myphoto/20120817/14/66031745201208171442192099328074256_007.jpg后:http://img170.poco.cn/mypoco/myphoto/20120817/14/66031745201208171442192099328074256_006.jpg
生锈了- -b
这里给出一个修改附魔外观的方法:
http://img170.poco.cn/mypoco/myphoto/20120817/14/66031745201208171442192099328074256_002.jpg
Q7下载是一个动态效果的附魔外观,我做了红白蓝三色。红、白、蓝效果分别默认替换了火系伤害、寒系伤害、伤害生命,请自己用CS替换掉觉得不好的外观。若想删除这三项改动,可以用TES4Edit。
下面是我随便拿了把剑看附魔效果截的图:(这剑本来是蓝色的)
http://img170.poco.cn/mypoco/myphoto/20120817/14/66031745201208171442192099328074256_005.jpg…http://img170.poco.cn/mypoco/myphoto/20120817/14/66031745201208171442192099328074256_004.jpg…http://img170.poco.cn/mypoco/myphoto/20120817/14/66031745201208171442192099328074256_003.jpg
——————————————————————————我是线——————————————————————————
Q8:火炬色发光术及轮廓分明的生命探测——当初刚刚接触上古4的时候就不喜欢阴森森的发光术,那时又没有找到改色的MOD。于是我第一个自己动手做的MOD就是改发光术了,其实那真是简单得不能再简单了,就改一项物品的颜色并保存就完了。改生命探测则难一些。(附动态戒指两枚)
截图:
http://img170.poco.cn/mypoco/myphoto/20120817/14/66031745201208171442192099328074256_001.jpg
http://img170.poco.cn/mypoco/myphoto/20120817/14/66031745201208171442192099328074256_000.jpg
——————————————————————————我是线——————————————————————————
Q9:数把自改武器和原创武器合集——多个脚本和特效的应用。取得地点:帝都市场街Fighting Chance对面石像旁。
1.我很喜欢的一把动态蝴蝶特效剑。原作者:VBtan;源地址:http://oblivion.nexusmods.com/mods/39096
http://img170.poco.cn/mypoco/myphoto/20120821/09/66031745201208210921072329622849364_005.jpg
2.长枪 3.镰刀
http://img170.poco.cn/mypoco/myphoto/20120821/09/66031745201208210921072329622849364_001.jpg http://img170.poco.cn/mypoco/myphoto/20120821/09/66031745201208210921072329622849364_004.jpg
4.为Fans for Helain添加收持和跟随装备。原作者:Lanell;源地址:http://oblivion.nexusmods.com/mods/27518
http://img170.poco.cn/mypoco/myphoto/20120821/09/66031745201208210921072329622849364_003.jpghttp://img170.poco.cn/mypoco/myphoto/20120821/09/66031745201208210921072329622849364_000.jpghttp://img170.poco.cn/mypoco/myphoto/20120821/09/66031745201208210921072329622849364_002.jpg
5.长剑 6.能力成长,精灵跟随的木剑
http://img170.poco.cn/mypoco/myphoto/20120821/09/66031745201208210921072329622849364_006.jpg http://img170.poco.cn/mypoco/myphoto/20120821/09/66031745201208210921072329622849364_008.jpghttp://img170.poco.cn/mypoco/myphoto/20120821/09/66031745201208210921072329622849364_007.jpg
7.动态星光特效的剑。原作者:VBtan;源地址:http://oblivion.nexusmods.com/mods/39096
http://img170.poco.cn/mypoco/myphoto/20120817/14/66031745201208171442192099328074256_003.jpg 8.弓版AK-47乱入,打横持弓方式修正的模型。图就不截了,就是AK47
——————————————————————————我是线——————————————————————————
Q10:项链耳环臂盾
项链和耳环,修正模型。 臂盾,修正模型,添加碰撞。
原作者:Petrovich;源地址: 原作者:Gizmodian and Kogane;源地址:
http://oblivion.nexusmods.com/mods/19991 http://oblivion.nexusmods.com/mods/32969
http://img170.poco.cn/mypoco/myphoto/20120821/09/66031745201208210921072329622849364_010.jpg http://img170.poco.cn/mypoco/myphoto/20120821/09/66031745201208210921072329622849364_009.jpg
——————————————————————————我是一条线——————————————————————————
完...没有了! 前排!! 本帖最后由 zhouq510 于 2012-12-3 21:53 编辑
8月17更新
8月21更新
8月29更新
12月3更新
非常好,膜拜! 嗯 不错 基本上都是入门级别的脚本通俗易懂 有没有全面的文档 我是说教程,呵呵,没有基础看应用看不懂啊
技术帖留名 谢谢blue版主blue blue blue^_^ 谢谢楼主,楼主理解能力好强啊,居然看懂了 lz乃真高手也 这个不错谢谢分享 zhouq510 发表于 2012-7-13 14:19 static/image/common/back.gif
好吧~发妹子~~
求告知两套衣服出处!!!{:3_153:}
另外有自动入包脚本真不错哈哈···
这个脚本帝很不错 ! 看见技术帝了 好腻害=3= 还是看不太懂啊,先收藏了。 :(:(妹子不如脚本来得给力啊 发完了……若有发现BUG………………………………自行解决吧{:3_174:} http://www.moderteam.com/forum.php?mod=viewthread&tid=2628&extra=page%3D2
MOD界这位大大的隐藏武器脚本,我试着用了总是失败,求解原因? 我想要一个空的NIF... NIF路径我看了半天没发现有错误呢 技术贴支持!!!!lz真给力 保存时就失败。 技术贴。。。先收藏了先{:3_154:} 非常实用的代码,到时候去试试 看不懂啊 但是回帖是美德啊 本帖最后由 zhouq510 于 2012-7-19 21:19 编辑
改正了两个小问题{:3_167:} 技术贴,支持一下