ScriptName aaaNPCrepairScript
ref tempref ;使い回しのリファレンス
short temp ;使い回しの変数
short temp1 ;使い回しの変数
short temp2 ;使い回しの変数
short temp3 ;使い回しの変数
short Armorerexp ;修理経験値
float saptimer ;自動補充の残り時間
short RepairLevel ;修理レベル(鍛冶スキルにプラスされるレベル)
begin gamemode ;時間が進んでいるモードで動作
if saptimer > 0
if IsInCombat == 1 && IsWeaponOut == 1 && GetDead
== 0 && getdistance player < 1500
set saptimer to saptimer - getSecondsPassed
;Message "saptimer = %g Armorerexp = %g ",saptimer,Armorerexp
endif
else
set saptimer to 60 ;自動補充間隔。60分になってます。
if getItemCount RepairHammer < 10 ;ハンマーが10本以下の時だけ
AddItem RepairHammer,1 ;リペアハンマーの自動補充
endif
;AddItem LL1NPCPotionRestoreHealth,1 ;リペアハンマー以外を補充したい場合はここを有効にます。
;AddItem LL1NPCPotionRestoreMagicka,1
;AddItem LL0FoodLowerClass75,1
endif
set tempref to getequippedobject 0 ;装備スロット0(ヘルメット)のIDを格納
set temp1 to getav Armorer + RepairLevel ;修理レベルと鍛冶スキルの合計を格納
set temp2 to GetEquippedCurrentHealth 0 ;装備スロット0の現在の耐久力を格納
set temp3 to (GetObjectHealth tempref) ;装備しているヘルメットの最大耐久力を格納
;Message "getav Armorer = %g GetEquippedCurrentHealth =
%g GetObjectHealth = %g ",temp1,temp2,temp3
if (tempref != 0) && (temp2 < temp3) && IsArmor
tempref == 1 && getItemCount RepairHammer > 0 &&
IsInCombat == 0 && IsWeaponOut == 0 && GetDead
== 0 && player.IsInCombat == 0 && player.IsInCombat
== 0 ;ハンマーを持っているか、戦闘をしていないかなどの判定
set temp to (temp1 / 3) +2
set temp to (rand 1 temp1) ;修理レベルが高いほど上限の大きい乱数を作る
if temp < 2 ;乱数が1か0だったら修理失敗
RemoveItem RepairHammer,1 ;修理に失敗したらハンマーを消費
;PlaySound UIArmorWeaponRepairBreak
else
if GetEnchantment tempref != 0 && temp1 < 50 ;エンチャント装備だった時にスキル50以下で結果が分岐
set temp2 to temp2 + (temp1 / 4)+1
else
set temp2 to temp2 + (temp1 / 2)+1
endif
if temp2 > temp3 ;回復後の耐久力が最大値を超えていないか判定
set temp2 to temp3 ;超えていた場合は、最大値とおなじ値にする
endif
SetEquippedCurrentHealth temp2 0 ;ヘルメットの現在の耐久力を回復
set Armorerexp to Armorerexp + 1 ;経験値+1
PlaySound UIArmorWeaponRepair ;修理のサウンドを出す
endif
endif
set tempref to getequippedobject 1 ;以降は別のスロットも同じ事の繰り返し
set temp1 to getav Armorer + RepairLevel
set temp2 to GetEquippedCurrentHealth 1
set temp3 to (GetObjectHealth tempref)
if (tempref != 0) && (temp2 < temp3) && IsArmor
tempref == 1 && getItemCount RepairHammer > 0 &&
IsInCombat == 0 && IsWeaponOut == 0 && GetDead
== 0 && player.IsInCombat == 0
set temp to (temp1 / 3) +2
set temp to (rand 1 temp1)
if temp < 2
RemoveItem RepairHammer,1
else
if GetEnchantment tempref != 0 && temp1 < 50
set temp2 to temp2 + (temp1 / 4)+1
else
set temp2 to temp2 + (temp1 / 2)+1
endif
if temp2 > temp3
set temp2 to temp3
endif
SetEquippedCurrentHealth temp2 1
set Armorerexp to Armorerexp + 1
PlaySound UIArmorWeaponRepair
endif
endif
set tempref to getequippedobject 2
set temp1 to getav Armorer + RepairLevel
set temp2 to GetEquippedCurrentHealth 2
set temp3 to (GetObjectHealth tempref)
if (tempref != 0) && (temp2 < temp3) && IsArmor
tempref == 1 && getItemCount RepairHammer > 0 &&
IsInCombat == 0 && IsWeaponOut == 0 && GetDead
== 0 && player.IsInCombat == 0
set temp to (temp1 / 3) +2
set temp to (rand 1 temp1)
if temp < 2
RemoveItem RepairHammer,1
else
if GetEnchantment tempref != 0 && temp1 < 50
set temp2 to temp2 + (temp1 / 4)+1
else
set temp2 to temp2 + (temp1 / 2)+1
endif
if temp2 > temp3
set temp2 to temp3
endif
SetEquippedCurrentHealth temp2 2
set Armorerexp to Armorerexp + 1
PlaySound UIArmorWeaponRepair
endif
endif
set tempref to getequippedobject 3
set temp1 to getav Armorer + RepairLevel
set temp2 to GetEquippedCurrentHealth 3
set temp3 to (GetObjectHealth tempref)
if (tempref != 0) && (temp2 < temp3) && IsArmor
tempref == 1 && getItemCount RepairHammer > 0 &&
IsInCombat == 0 && IsWeaponOut == 0 && GetDead
== 0 && player.IsInCombat == 0
set temp to (temp1 / 3) +2
set temp to (rand 1 temp1)
if temp < 2
RemoveItem RepairHammer,1
else
if GetEnchantment tempref != 0 && temp1 < 50
set temp2 to temp2 + (temp1 / 4)+1
else
set temp2 to temp2 + (temp1 / 2)+1
endif
if temp2 > temp3
set temp2 to temp3
endif
SetEquippedCurrentHealth temp2 3
set Armorerexp to Armorerexp + 1
PlaySound UIArmorWeaponRepair
endif
endif
set tempref to getequippedobject 4
set temp1 to getav Armorer + RepairLevel
set temp2 to GetEquippedCurrentHealth 4
set temp3 to (GetObjectHealth tempref)
if (tempref != 0) && (temp2 < temp3) && IsArmor
tempref == 1 && getItemCount RepairHammer > 0 &&
IsInCombat == 0 && IsWeaponOut == 0 && GetDead
== 0 && player.IsInCombat == 0
set temp to (temp1 / 3) +2
set temp to (rand 1 temp1)
if temp < 2
RemoveItem RepairHammer,1
else
if GetEnchantment tempref != 0 && temp1 < 50
set temp2 to temp2 + (temp1 / 4)+1
else
set temp2 to temp2 + (temp1 / 2)+1
endif
if temp2 > temp3
set temp2 to temp3
endif
SetEquippedCurrentHealth temp2 4
set Armorerexp to Armorerexp + 1
PlaySound UIArmorWeaponRepair
endif
endif
set tempref to getequippedobject 5
set temp1 to getav Armorer + RepairLevel
set temp2 to GetEquippedCurrentHealth 5
set temp3 to (GetObjectHealth tempref)
if (tempref != 0) && (temp2 < temp3) && IsArmor
tempref == 1 && getItemCount RepairHammer > 0 &&
IsInCombat == 0 && IsWeaponOut == 0 && GetDead
== 0 && player.IsInCombat == 0
set temp to (temp1 / 3) +2
set temp to (rand 1 temp1)
if temp < 2
RemoveItem RepairHammer,1
else
if GetEnchantment tempref != 0 && temp1 < 50
set temp2 to temp2 + (temp1 / 4)+1
else
set temp2 to temp2 + (temp1 / 2)+1
endif
if temp2 > temp3
set temp2 to temp3
endif
SetEquippedCurrentHealth temp2 5
set Armorerexp to Armorerexp + 1
PlaySound UIArmorWeaponRepair
endif
endif
set tempref to getequippedobject 13
set temp1 to getav Armorer + RepairLevel
set temp2 to GetEquippedCurrentHealth 13
set temp3 to (GetObjectHealth tempref)
if (tempref != 0) && (temp2 < temp3) && IsArmor
tempref == 1 && getItemCount RepairHammer > 0 &&
IsInCombat == 0 && IsWeaponOut == 0 && GetDead
== 0 && player.IsInCombat == 0
set temp to (temp1 / 3) +2
set temp to (rand 1 temp1)
if temp < 2
RemoveItem RepairHammer,1
else
if GetEnchantment tempref != 0 && temp1 < 50
set temp2 to temp2 + (temp1 / 4)+1
else
set temp2 to temp2 + (temp1 / 2)+1
endif
if temp2 > temp3
set temp2 to temp3
endif
SetEquippedCurrentHealth temp2 13
set Armorerexp to Armorerexp + 1
PlaySound UIArmorWeaponRepair
endif
endif
set tempref to getequippedobject 18
set temp1 to getav Armorer + RepairLevel
set temp2 to GetEquippedCurrentHealth 18
set temp3 to (GetObjectHealth tempref)
if (tempref != 0) && (temp2 < temp3) && IsArmor
tempref == 1 && getItemCount RepairHammer > 0 &&
IsInCombat == 0 && IsWeaponOut == 0 && GetDead
== 0 && player.IsInCombat == 0
set temp to (temp1 / 3) +2
set temp to (rand 1 temp1)
if temp < 2
RemoveItem RepairHammer,1
else
if GetEnchantment tempref != 0 && temp1 < 50
set temp2 to temp2 + (temp1 / 4)+1
else
set temp2 to temp2 + (temp1 / 2)+1
endif
if temp2 > temp3
set temp2 to temp3
endif
SetEquippedCurrentHealth temp2 18
set Armorerexp to Armorerexp + 1
PlaySound UIArmorWeaponRepair
endif
endif
set tempref to getequippedobject 16
set temp1 to getav Armorer + RepairLevel
set temp2 to GetEquippedCurrentHealth 16
set temp3 to (GetObjectHealth tempref)
if (tempref != 0) && (temp2 < temp3) && getItemCount
RepairHammer > 0 && IsInCombat == 0 && IsWeaponOut
== 0 && GetDead == 0 && player.IsInCombat ==
0
set temp to (temp1 / 3) +2
set temp to (rand 1 temp1)
if temp < 2
RemoveItem RepairHammer,1
else
if GetEnchantment tempref != 0 && temp1 < 50
set temp2 to temp2 + (temp1 / 4)+1
else
set temp2 to temp2 + (temp1 / 2)+1
endif
if temp2 > temp3
set temp2 to temp3
endif
SetEquippedCurrentHealth temp2 16
set Armorerexp to Armorerexp + 1
PlaySound UIArmorWeaponRepair
endif
endif
set temp1 to getav Armorer + RepairLevel
if Armorerexp > 100 && temp1 < 10
set Armorerexp to 0
set RepairLevel to RepairLevel + 1
set temp1 to getav Armorer + RepairLevel
Message "アレンの修理スキルは %g に上達しました。 ",temp1
elseif Armorerexp > 200 && temp1 < 20 ;修理レベルと鍛冶スキルの合計が20以下の時は経験値200ポイントで修理レベルアップ
set Armorerexp to 0
set RepairLevel to RepairLevel + 1
set temp1 to getav Armorer + RepairLevel
Message "アレンの修理スキルは %g に上達しました。 ",temp1
elseif Armorerexp > 1000 && temp1 < 30
set Armorerexp to 0
set RepairLevel to RepairLevel + 1
set temp1 to getav Armorer + RepairLevel
Message "アレンの修理スキルは %g に上達しました。 ",temp1
elseif Armorerexp > 3000 && temp1 < 50
set Armorerexp to 0
set RepairLevel to RepairLevel + 1
set temp1 to getav Armorer + RepairLevel
Message "アレンの修理スキルは %g に上達しました。 ",temp1
elseif Armorerexp > 6000 && temp1 < 80
set Armorerexp to 0
set RepairLevel to RepairLevel + 1
set temp1 to getav Armorer + RepairLevel
Message "アレンの修理スキルは %g に上達しました。 ",temp1
elseif Armorerexp > 10000 && temp1 < 100
set Armorerexp to 0
set RepairLevel to RepairLevel + 1
set temp1 to getav Armorer + RepairLevel
Message "アレンの修理スキルは %g に上達しました。 ",temp1
elseif temp1 >= 100
set Armorerexp to 0
endif
end
|