「スクリプト」の編集履歴(バックアップ)一覧はこちら
スクリプト - (2016/10/24 (月) 15:24:35) の最新版との変更点
追加された行は緑色になります。
削除された行は赤色になります。
スクリプトはこちらのページにアップロード、説明、Tips等をお書きください。
希望するアップデートのスクリプトをアップロードしていただいてもOKですが、必ず採用するわけではないのでよろしくお願いします。
で・す・が
やはりこちらの作業無しで修正されている、アップデートされているファイルがあるなら利用することに基本的に前向きですw
こちらのリアル都合や力量の具合によりプレイヤーさんにスクリプト、修正などの協力を申し出ることがあります。
協力して頂けるととても助かります。
まさかのスクリプトまで、皆で作るラピスになります^^;
----
HSアップデート前のラピスのファイルは[[こちら>http://whitecats.dip.jp/up/download/1474812080.zip/attach]]
です。
パスワードは Lapis です。
現在のラピスのバージョンのServUOは[[こちら>http://whitecats.dip.jp/up/download/1474813790.zip/attach]]
です。
パスワードは同じく Lapis です。
これらファイルは適用しているバージョンを変更した際にリンク修正します。
----
現在の修正協力要請
様々なバグ除去w
----
**[[釣り関連まとめ]]
**[[生産関連修正まとめ]]
**[[戦闘・報酬関連修正まとめ]]
** Tips
***スキル上昇判定とかしてるところ
Moblie.cs
- CheckSkill(SkillName skill, double minSkill, double maxSkill)
- CheckSkill(SkillName skill, double chance)
- CheckTargetSkill(SkillName skill, object target, double minSkill, double maxSkill)
- CheckTargetSkill(SkillName skill, object target, double chance)
*** 使用できるガンプ
ググっても一覧が見られるサイトがなかったので、
mulかuopか知らんですけどガンプを読み込んでc:\workにpng出力するようにしました。
UOFiddlerが使える環境なら不要かな?
全部のガンプを出力するのに数秒かかります。
思った以上に見たことないのが多かった。
var count = 65535;
for (var id = 0; id < count; id++)
{
try
{
Bitmap img = Ultima.Gumps.GetGump(id);
String path = "C:\\work\\";
String fileName = String.Format("{0:X4}_{1}x{2}.png", id, img.Width, img.Height);
img.Save(path + fileName);
}
catch { }
}
*** 保管系アイテムのSerialize/Deserialize
ちょっとコアな話。
保管系のアイテムのSerialize/Deserializeは
保管したアイテム自体もSerialize/Deserializeしている。
つまり内部的にオブジェクトを生成している。
これが結構メモリの無駄で、
必要な情報のみを記述したデータクラスでも作ってSerialize/Deserializeし、
取出し時にデータクラスを元にオブジェクト生成すればかなりオブジェクト削減になると思われる。
今後の課題かなあ?
花箱の動作確認してるときに思いました。
言うは易く行うは難し。
*** 自然染料が使える対象
こういうのTipsに書いとけばいいんじゃないか!と思った。
ServUOのデフォルトで自然染料が使える対象です。
-タブで染められると定義されているもの(定義はされていても弾いてる場合があります)
-本系 a bookとかです
-布で作ったもの
-リングとかブレスレットとかの宝石系
-スタチュー
-武器
-ルーンブック
-スペルブック系
-皮(色はなんでもいい)、または鉄(色はなんでもいい)で作成されており、骨ではない防具
-家具(内部処理の話になりますがFurnitureAttributeが定義されているもの)
防具のわけわからん判定文はいらないんじゃないかと思います。
なぜこうしてるのか理由が思い浮かびません。
きっと作成者は骨と木が嫌いなんだろうなあ。
このほかは個別に対応していく必要あり。
がんばってくれると思います。なるさんが。
----
**SAAFのマジックプロパティ
なんとなく諸王の墓にいるボス(名前がわかりません)で実験
例の如くプロパ付きSAAFが出ることしか確認は取ってません。
メソッド変えてるので不具合でるかも?
既存のメソッドを修正するより、モンスターのgetter/setter用意したほうが安全かなあ。
***修正箇所
BaseCreature.cs
5173行目あたり
public static void GiveSAArtifact(Mobile m) を
public static void GiveSAArtifact(Mobile m, BaseCreature monster) に変更
すぐ下あたり
Item item = Activator.CreateInstance(m_SAArtifacts[Utility.Random(m_SAArtifacts.Length)]) as Item;
の下に
RandomItemGenerator.GenerateRandomItem(item, m, monster);
を追加
5226行あたりのOnKilledByメソッド
GiveSAArtifact(mob); を
GiveSAArtifact(mob , this); に変更。
#image(auaua.png)
**DOOMパパのアーティファクトのマジックプロパティ
パパスクリプトの203行目に以下追加
RandomItemGenerator.GenerateRandomItem(i, pm, bc);
**チャンピオン系レプリカとHSAFのマジックプロパティ
★HSAFはチャンピオンレプリカと同じ処理を使って実装されているようです。
★サッシュなどに付くと強力すぎて問題ありなら、条件文内の || artifact is BaseClothing は付けない。
[Scripts\Mobiles\Bosses\BaseChampion.cs]
128行目からのpublic Item CreateArtifact(Type[] list)内
●144行目に追加
else if (artifact is BaseWeapon || artifact is BaseArmor || artifact is BaseJewel || artifact is BaseClothing) // ★追加ここから
{
if (Core.HS && RandomItemGenerator.Enabled)
{
RunicReforging.GenerateRandomItem(artifact, null, 1000, 0, ReforgedPrefix.None, ReforgedSuffix.None, null);
}
} // ★追加ここまで
本当は、RandomItemGenerator.GenerateRandomItem(artifact, null, this);を使った方が、メソッド内でアイテムの種類をチェックしてくれるので、あらかじめチェックが不要になるのですが、BaseClothingが含まれていないため「ネクロマンサーの衣」などが対象外になってしまいます。
更に、モンスターのフェイムベースでbasebudgetが自動算出されると、チャンピオンクラスはかなり高プロパが付いてしまうので、引数を使って単独で調整できるメソッドの方がいいと判断しました。
引数1000の箇所がbasebudgetなので、ここで強度調整可能です。
**イヤリングとネックレスの錬成対象化
[Scripts\Skills\Imbuing\Core\Imbuing.cs]
●76行目の条件文に追加
else if (item is BaseJewel && !(item is BaseRing) && !(item is BaseBracelet) && !(item is BaseEarrings) && !(item is BaseNecklace))
***ネックレス(銀)について
ネックレス(銀)については以下の部分も追加が必要です。
●169行目
if (item.GetType() == typeof(SilverRing) || item.GetType() == typeof(SilverBracelet) || item.GetType() == typeof(Necklace) || item.GetType() == typeof(SilverNecklace))
return false;
上記の通り条件に、|| item.GetType() == typeof(Necklace) || item.GetType() == typeof(SilverNecklace) を追加します。
★一見、NPC店売りのネックレス(銀)はSilverNecklace(0x1F08)と思ってしまいますが、(0x1085)なのでただのNecklaceなんですね。
(おそらくUO初期からある普通のネックレスで、見た目が銀なだけだったんですね。)
勤勉の首飾り(NecklaceofDiligence.cs)は、SilverNecklace(0x1F08)クラスを継承していますが、個別にアーティファクト扱いになっているので錬成不可で問題ありませんでした。
公正のアミュレット(AmuletOfRighteousness.cs)も、アーティファクト扱い&Blessなので錬成不可で問題ありませんでした。
なお、Gold系のアクセはすでに錬成可能なので、その下のforeachブロックのCraftSystem.Systemsに含まれていて、特殊アイテム=falseで返っているようです。
あと、ネックレスにはビーズタイプのSilverBeadNecklace(0x1F05)クラスもありますが、こちらもクラフトアイテム扱いですでに錬成可能でした。
***オークヘルムについて
★その他、オークヘルムなど、生産可能品「以外」は上記の169行目の部分でfalseを返してやらないとスペシャルアイテム扱いとなり、"You cannot imbue an item with such strange magical properties."のメッセージが出て錬成対象から弾かれます。
例えば、"OrcHelm"を錬成可能にするためには、
|| item.GetType() == typeof(OrcHelm)
// (実際は || item is OrcHelm という表現でよいのですがw)
を追加する形になりますが、"OrcHelm"を錬成可能にした場合、これを継承している"EvilOrcHelm"も自動的に錬成可能となりますので、"EvilOrcHelm"は錬成不可にしたい場合は、EvilOrcHelm.cs に、
public override bool IsArtifact { get { return true; } }
を追加してアーティファクト扱いにすればOKです。
**骨腕が錬成できない不具合修正 修正済
***原因
BoneArms.csが、Scripts\Items\Artifacts\Equipment\Armor\Sets\DaemonBone\内にあり、なおかつ8行目に
public override bool IsArtifact { get { return true; } }
があり、アーティファクト扱いになっている。
***修正内容
(1) Scripts\Items\Artifacts\Equipment\Armor\Sets\DaemonBone\BoneArms.csの8行目
public override bool IsArtifact { get { return true; } }
をコメントアウトして無効化する。
(ネクロ腕は独自ファイルがありちゃんとアーティファクト扱いになっています。)
(2) できれば上記のBoneArms.csを、適切な場所であるScripts\Items\Equipment\Armor\内に移動する。
(3) 逆に、Scripts\Items\Equipment\Armor\内に、DaemonArms.csとDaemonHelm.csがあるので、これらはScripts\Items\Artifacts\Equipment\Armor\Sets\DaemonBone\内に移動した方が良いかも。
**トレハン箱とSOS宝箱の品質改善 適用済
どのレベルも現在の値の10倍くらいでちょうどいい気がしますので以下に変更案を書きます。
[Scripts\Items\Containers\TreasureMapChest.cs]
●230行目あたりから
switch (level)
{
case 1:
numberItems = 32;
propsScale = 5.625; // ←★この数値に変更を提案
break;
case 2:
numberItems = 40;
propsScale = 6.875; // ←★この数値に変更を提案
break;
case 3:
numberItems = 48;
propsScale = 8.75; // ←★この数値に変更を提案
break;
case 4:
numberItems = 56;
propsScale = 10.0; // ←★行ごと追加
break;
case 5:
numberItems = 64;
propsScale = 10.0; // ←★行ごと追加 (レベル4より少し上げてもいいかも)
break;
case 6:
numberItems = 72;
propsScale = 10.0; // ←★行ごと追加 (レベル5より少し上げてもいいかも)
break;
case 7:
numberItems = 80;
propsScale = 10.0; // ←★行ごと追加 (レベル6より少し上げてもいいかも)
break;
default:
numberItems = 0;
break;
}
**パラゴン箱の品質改善
トレハン箱のランダムアイテム生成関数を再利用します。ただし、幸運は無関係です。
(Scripts\Items\Containers\TreasureMapChest.csの273行目あたりが参考になります。)
[Scripts\Items\Containers\ParagonChest.cs]
●163行目の前に追加 (なおかつ、元163行目の行頭にelse を追加)
if (item != null && Core.HS && RandomItemGenerator.Enabled) // ★ここから行追加
{
int min, max;
double propsScale = 10.0; // ★デフォルトの品質
switch (level) // ☆レベルごとに変えるならここからも追加
{
case 1:
propsScale = 5.625;
break;
case 2:
propsScale = 6.875;
break;
case 3:
propsScale = 8.75;
break;
case 4:
propsScale = 10.0;
break;
case 5:
propsScale = 10.0;
break;
case 6:
propsScale = 10.0;
break;
default:
break;
} // ☆レベルごとに変えるならここまでも追加
TreasureMapChest.GetRandomItemStat(out min, out max, propsScale); // ★propsScaleの値で品質調整可
RunicReforging.GenerateRandomItem(item, 0, min, max); // ★luck = 0 幸運ボーナスは無し
this.DropItem(item);
} // ★ここまで行追加
else if (item is BaseWeapon) // ★else を追加
{
●2行目
using Server.Mobiles; // ★行追加
ローカルのMaster Jonathで試して異常なし及びアイテム強度適正を確認しました。
☆パラゴン箱のレベルによる品質分けをしていなかったので、switch文を追加しました。これがないと、モンバットのパラゴンから出た箱でも同じ品質のものが出てしまいますねw
TreasureMapChest.cs内のswitch部分を関数化しようとも思ったのですが、トレハン箱とパラゴン箱ではアイテム数も異なるようですし、品質も個別に設定できた方が便利なので、ベタ書きにしました。
★ただ、数量がレベル×2個しか出ないので、全レベル最高品質だとしても、ゲーム内でほとんど無視されるモンバットのパラゴンなどが少しは注目されて楽しいかもしれません。
**ネガプロパ付与確率の調整 (BBSで流れそうなので覚書byNar)
ありがとうまもるん
本家をあまり知らないのですが、たしか非常に低確率ではあるものの、伝説級でもネガプロパが付かない確率はあったように思います。
ネガプロパについて、
[Scripts\Services\RunicReforging\RunicReforging.cs]
マジック最上級で50%の確率で付かないのに、その次のランクのアーティファクト低級で1%というのは随分極端なので、エミュとしてはここは20~30%くらいでいいように思います。
●1911行目
if (0.01 > chance) // ←★0.3くらいに変更を提案
return;
その下、アーティファクト&del(){中級}上級の分岐はなく、中級以上は必ずネガプロパが付くようになってしまっているので、中級&del(){と上級}に10~20%程度の確率で付かないようにして、
●1931行目のすぐ下に追加
if (0.2 > chance) return; // ←★0.2くらいで行追加を提案
上級と伝説級では5%~10%程度の確率で付かないようにするくらいでどうでしょうか?
●1948行目のすぐ下に追加 (上の追加で2行ズレたら1950行目)
if (0.1 > chance) return; // ←★0.1くらいで行追加を提案
これでもアップデート前よりは厳しい状態かもしれません。
***追伸
ServUOオリジナルの不具合として、1873~1876行が原因でbudgetが400~549の範囲で生成されるアイテムに、Prizedが付くことがないようです。
一度しか乱数を取得していないchance変数を2回連続で使っており、なおかつ1回目で0.5未満ではreturnしてしまっているのに、その下で0.4未満の場合をコーディングしてしまっています。
ソースのコメントでは「// major magic」と書いてありますが、ランク評価はアイテムの種類によって異なるため、必ずしも「マジックアイテム最上級」のものとは限らず、多少ランクが前後してPrizedが付かないものがあるようです。
** アニマルロアあがんねー
ServUOのバグ。
調教済みの動物をロアった時に上昇チェックがない。
これでいいのかわからないけどアナトミーと同じよう直接スキルを使用しての上昇はGMまでとしました。
AnimalLore.cs
protected override void OnTarget(Mobile from, object targeted)
これの
double skill = from.Skills[SkillName.AnimalLore].Value;
if(skill < 100.0)
{
if (c.Controlled)
// Rev.1(Mod S)----------------------------------------
// SendGump(from, c);
{
from.CheckTargetSkill(SkillName.AnimalLore, targeted, 0, 100);
SendGump(from, c);
}
// Rev.1(Mod E)----------------------------------------
else
from.SendLocalizedMessage(1049674); // At your skill level, you can only lore tamed creatures.
}
**アイテムのランク評価が適切でない件→適用済
***変だと思う例
(1) 強度475の指輪が「マジックアイテム (上級)」
(2) 強度562の指輪が「マジックアイテム (最上級)」
***参考記事
パブリッシュ73の記事によると
http://www.uoguide.com/Publish_73
"Lesser Artifact (this is approximately equivalent to an item Imbued to the max)"
「アーティファクト(低級)は最大まで練成したアイテムとほぼ同程度の強度」
***原因
[Scripts\Services\RunicReforging\RunicReforging.cs] 2015++行目付近
public static ItemPower GetItemPower(Item item, bool playermade) // アイテム強度評価を返す関数
●2017++行目付近
double max = Imbuing.GetMaxWeight(item) + 50; // ←★+50不要
●2021++行目付近
double preArty = (max + 50); // ←★+50不要かも?
***修正前
480~600「マジックアイテム(最上級)」
601~719「アーティファクト (低級)」
***修正後
400~500「マジックアイテム (最上級)」
501~659「アーティファクト (低級)」
なお、ちょっと変わりすぎかな?ということでしたら、2017++行目付近の方の+50だけを削除すれば、
preArty = 550 になり
440~550「マジックアイテム (最上級)」
551~689「アーティファクト (低級)」
となりますので、これくらいでもいいのかもしれません。
**神秘呪文にFC/CRが効いていない不具合修正→適用済
[Scripts\Spells\Mysticism\MysticSpell.cs]
●76行目
return TimeSpan.FromSeconds(0.5 + (0.25 * (int)Circle));
↓変更
return base.GetCastDelay();
●68行目
return TimeSpan.FromSeconds(0.75);
↓変更
return base.GetCastRecovery();
●21行目
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds(1.0); } }
↓変更
public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds(0.5 + 0.25 * (int)Circle); } }
**コロ助の召喚時間についての不具合修正→適用済
錬成スキルと集中スキルがともに0のときに一瞬でご帰還される。
[Scripts\Spells\Mysticism\SpellDefinitions\RisingColossusSpell.cs]
●46行目
TimeSpan duration = TimeSpan.FromSeconds(Caster.Skills[CastSkill].Value / 4 + Caster.Skills[DamageSkill].Value / 4);
に修正する。併せて、すぐ下のSpellHelper.Summon()の第5引数のscaleDurationをfalseに変更しておかないと、神秘スキル値によって時間を再調整されてしまいます。
●47行目
SpellHelper.Summon( new RisingColossus(), Caster, 0x216, duration, false, true, Caster.Player, CastSkill );
** 色付きコイン→一部事情を変えて導入済
昔、色が染められたらなあって話があったのでサクッと作ってみました。
新規追加アイテムとなるので、ドSGMと優しいSubGMとで協議してください。
かなりマニア向けなものです。
Zipファイルにリンク張ろうと思ったけどうまくいかないね。
[[アップロードファイルをもつページ一覧>http://www65.atwiki.jp/stygianlapis?cmd=upload]]からスクリプト→Scripts.zipになります。
というか下の添付ファイルからもいけた。
#image(coin.png)
**ステータスウィンドウのFC表示不具合修正 修正済
「騎士道スキルが70.0未満」のときのみ最大4までとなり、それ以外は最大2までとなってしまっている。
ここは、「魔法スキルが70.0未満」の間違いです。
[Scripts\Misc\AOS.cs]
●276行目
int max = from.Skills[SkillName.Chivalry].Value < 70.0 ? 4 : 2;
↓修正
int max = from.Skills[SkillName.Magery].Value < 70.0 ? 4 : 2;
変化したときに、PDのSTATUSボタンを押さないと表示更新されないのは鹿さんと遊ぶときと同じようですが、FC=4になるのをローカルで確認しました。
**10th Anniversary Sculpture(幸運壺)について
***使用してもステータスウィンドウの幸運値が上昇しない不具合の修正
[Server\Mobile.cs]
●8452行目
public virtual int LuckBonusSculpture { get { return 0; } } // ★行追加
public virtual int LuckBonusFountain { get { return 0; } } // ★行追加
[Scripts\Mobiles\PlayerMobile.cs]
●3589行目
public override int LuckBonusSculpture { get { return TenthAnniversarySculpture.GetLuckBonus(this); } } // ★行追加
public override int LuckBonusFountain { get { return FountainOfFortune.GetLuckBonus(this); } } // ★行追加
[Server\Network\Packets.cs]
●3550行目
m_Stream.Write((short)m.Luck); // Luck
↓変更
m_Stream.Write((short)(m.Luck + m.LuckBonusSculpture + m.LuckBonusFountain)); // Luck
●3664行目
m_Stream.Write((short)beheld.Luck); // Luck
↓変更
m_Stream.Write((short)(beheld.Luck + beheld.LuckBonusSculpture + beheld.LuckBonusFountain)); // Luck
★注意★
Serverプロジェクト内ソースなので、反映にはCompile.WIN.batの実行かVisualStudioでのビルドが必要です。
また、ゲーム内では鹿さんと遊んぶときと同様に、自動では表示が更新されないため、PDのSTATUSボタンを押して最新状態に表示更新して下さい。
***アカ歴による上昇値の追加(導入する場合)
[Scripts\Items\Artifacts\Decorative\TenthAnniversarySculpture.cs]
●2行目
using Server.Accounting; // ★追加
using Server.Engines.VeteranRewards; // ★追加
●新21行目
private static readonly int LuckBonus = 200; // ★新規さん含めて底上げしたいときはこの値です
●新116行目
// ★追加ここから
private static int GetLuckExtend(Mobile from)
{
Account acct = from.Account as Account;
if (acct == null) return 0;
TimeSpan totalTime = (DateTime.UtcNow - acct.Created) + TimeSpan.FromDays(RewardSystem.RewardInterval.TotalDays * RewardSystem.StartingLevel);
int luckExtend = (totalTime.Days / 30) * 50; // ★ここでアカ歴による上昇分を調整可能です
if (luckExtend > 1000) luckExtend = 1000;
return luckExtend;
}
// ★追加ここまで
●新134行目
return LuckBonus + GetLuckExtend(from); // ★ + GetLuckExtend(from)を追加
★効果継続状態で別な壺を使うと、表示されるメッセージが変なのはServUO元々のようですw
**ガーゴイル専用版のプリズムレンズがヒューマンやエルフでイヤリングとして装備できる不具合について 修正済
[Scripts\Items\Artifacts\Equipment\Glasses\GargishGlasses.cs]
以下の2行を追加します。
●8行目
public override Race RequiredRace { get { return Race.Gargoyle; } } // ★追加
public override bool CanBeWornByGargoyles { get { return true; } } // ★追加
ローカルで試した際に、これを追加してもエルフで装備できてしまったので変だなと思ったのですが、GMキャラだと一時的に装備できてしまうのでしょうか。
いったん装備して、ステータスが変化するような別の装備を外したりすると、「プリズムレンズはもう着ていられません」と出て自動的に外されました。
上記の追加だけで、きちんとヒューマンやエルフの通常キャラが着用できなくなるかは未確認ですが、とりあえずガーゴイル専用の表記は付くようになりました。
** 単一の神殿のクエストマゾいっす→2時間へ修正済み
ServUOのバグ。
よくわからんけど指摘通り24時間(リアルでの1日)になってた。
本家なら2時間(UOでの1日)だけど合わせる必要は無いと思う。
ShrineOfSingularity.cs
// Rev.1(Mod S) --------------------
//private static readonly TimeSpan FailDelay = TimeSpan.FromHours(24);
private static readonly TimeSpan FailDelay = TimeSpan.FromMinutes(1);
// Rev.1(Mod E) --------------------
削除だと動かないだの達成できないだのよろしくないことが起きそうなので時間変更で。
結局はなるさんの裁量次第だけど、1分でいいよね!
** ドーンのオルゴールが他人だと使えない
なぜかよくわからないけど内部的に2個存在する。
ラピスではどちらが採用されているかわからないので両方とも修正。
オルゴールを突っ込んだら取り外せない仕様のようなのでセキュリティ面は気にしなくてよさそう。
DawnsMusicBox
public override void OnDoubleClick(Mobile from)
{
// Rev.1(Mod S) --------------------
if (!this.IsChildOf(from.Backpack) && !this.IsLockedDown)
from.SendLocalizedMessage(1061856); // You must have the item in your backpack or locked down in order to use it.
else if (!this.IsLockedDown)
from.SendLocalizedMessage(502436); // That is not accessible.
else
{
from.CloseGump(typeof(DawnsMusicBoxGump));
from.SendGump(new DawnsMusicBoxGump(this));
}
/*
if (!this.IsChildOf(from.Backpack) && !this.IsLockedDown)
from.SendLocalizedMessage(1061856); // You must have the item in your backpack or locked down in order to use it.
else if (this.IsLockedDown && !this.HasAccces(from))
from.SendLocalizedMessage(502436); // That is not accessible.
else
{
from.CloseGump(typeof(DawnsMusicBoxGump));
from.SendGump(new DawnsMusicBoxGump(this));
}
*/
// Rev.1(Mod E) --------------------
}
RewardVersionのDawnsMusicBox.cs
public override void OnDoubleClick(Mobile from)
{
if (this.m_Tracks.Count < 1)
{
from.SendMessage("This music box is empty.");
}
// Rev.1(Del S) -------------------------
//else if (this.IsOwner(from))
//{
// Rev.1(Del E) -------------------------
if (!this.IsLockedDown)
from.SendLocalizedMessage(502692); // This must be in a house and be locked down to work.
else
{
if (from.HasGump(typeof(MusicGump)))
from.CloseGump(typeof(MusicGump));
from.SendGump(new MusicGump(this));
}
// Rev.1(Del S) -------------------------
//}
//else
//{
// from.SendLocalizedMessage(502691); // You must be the owner to use this.
//}
// Rev.1(Del E) -------------------------
}
**SAAFやDOOM AFなど追加プロパに使用しているメソッドでパーフェクションによる幸運値ボーナスが含まれていない件
[Scripts\Services\RunicReforging\RunicReforging.cs]
●1601行目あたりから
public static int GetLuckForKiller(BaseCreature dead)
{
Mobile highest = dead.GetHighestDamager();
if (highest != null)
{
int LuckBonusPerfection = 0; // ★行追加ここから
if (highest is PlayerMobile)
{
PlayerMobile pm = highest as PlayerMobile;
if (pm.SentHonorContext != null && pm.SentHonorContext.Target == dead)
{
LuckBonusPerfection = pm.SentHonorContext.PerfectionLuckBonus;
}
} // ★行追加ここまで
// ★末尾に + LuckBonusPerfection を追加
return highest.Luck + TenthAnniversarySculpture.GetLuckBonus(highest) + FountainOfFortune.GetLuckBonus(highest) + LuckBonusPerfection;
}
return 0;
}
上記の修正で、一応、幸運値には加算されます。
★ただ、先日のドロップアイテム品質改善時の調整値にもよるのですが、AFを出すようなMOBは元々フェイムが高すぎて、幸運は影響しにくい状態になっています。
(幸運は、たまたま乱数で品質が低すぎる(budget < 550)ときに品質を上げる救済措置的な処理になっているため。)
でも、ロジックとしては、やはりパーフェクションの分も幸運値には加算しておくべきと思います。
** アイテムの置かれる位置がおかしいんだが?
置かれる位置がおかしいのはServUOのバグなんだけど、
コードにバグがあるからコメントアウトされてるのか不明。
コメントアウトにより小型テーブルにアイテム置くと妙に上に置かれたり、
本来積めるはずのアイテムが積めなかったりする。
旧ソースではコードが生きてます。
Item.cs
private Point3D FindDropPoint(Point3D p, Map map, int maxZ)
の
if (myTop != -255)
{
int match = (1 << height) - 1;
bool okay = false;
for (int i = 0; i < 20; ++i)
{
if ((i + height) > 20)
{
match >>= 1;
}
okay = ((m_OpenSlots >> i) & match) == match;
if (okay)
{
z += i;
break;
}
}
if (!okay)
{
return Point3D.Zero;
}
}
こいつがコメントアウトされてるのでコメントアウトをはずす。
また、旧ソースとあわせるため
if (myTop != -255)をコメントアウトする。
中括弧もね!
**チャンピオン系AF/レプリカがドロップしない不具合
&del(){すでに修正されていると思っていましたが、出ないとの情報があるため改めて掲載します。}
★★すみません、この修正は不要かもしれません!★★
[Scripts\Services\ChampionSystem\ChampionSpawn.cs]
○524行目
if (this.m_Champion is BaseChampion)
this.AwardArtifact(((BaseChampion)this.m_Champion).GetArtifact());
こんな所をトリガにドロップしてたのか・・・?w
★以下、不要と思われますが、しばらく残しておきます。
[Scripts\Mobiles\Bosses\BaseChampion.cs]
●244++行目あたり
Item artifact; // ★追加ここから
artifact = GetArtifact();
if (artifact != null)
{
this.PlaySound(0x5B4); // ピピーの音を流すと見逃しがなくて素敵かも
c.DropItem(artifact);
} // ★追加ここまで
***&del(){上記の(またはこれに相当する)修正が既に入っていて}確率だけ調整する場合
●116行目
public virtual Item GetArtifact()
{
double random = Utility.RandomDouble(); // random には、0.0~0.9999・・・の値が返る
if (0.05 >= random) // 5%の確率で、
return this.CreateArtifact(this.UniqueList); // ユニーク系レプリカ(ねずみボスの場合はFangOfRactusのみでGauntletsOfAngerはなぜかシェアード系扱いになっている)
else if (0.15 >= random) // 10%(15%じゃない点に注意)の確率で、
return this.CreateArtifact(this.SharedList); // シェアード系レプリカ
else if (0.30 >= random) // 15%(30%じゃない点に注意)の確率で、
return this.CreateArtifact(this.DecorativeList); // 内装系アイテム
return null; // 70%の確率でドロップなし
}
ServUOオリジナルでは、上記の確率になっていますので、ここの数値を調整すればOKです。
(上記の確率配分は「数直線」を使って考えると判りやすいです。)
**&del(){アビスの沸きでAFがドロップしない件}
新悪魔(AbyssalInfernal.cs)、新リッチ(PrimevalLich.cs)から出るはずの、
DeathsHead, WallofHungryMouths, AbyssalBlade
--
BansheesCall, CastOffZombieSkin, ProtectoroftheBattleMage, ChannelersDefender
が出ない。
***&del(){前提}
&del(){上記の「チャンピオン系AF/レプリカがドロップしない不具合」が修正してあること。}
***原因
両者ともBaseChampionクラスを継承しており、チャンピオン系のUniqueListからのドロップとなっています。
&del(){OnDeath()のオーバーライド内でbase.OnDeath()を呼んでいますが、base.OnDeath()内では先頭に、}
[Scripts\Mobiles\Bosses\BaseChampion.cs]
●222++行目あたり
if (this.Map == Map.Felucca) // フェルッカのみ
&del(){の条件があるため、特別な修正をしていない限り、アビス(テルマーのファセット)ではAF類のドロップ処理が行われていません。}
&del(){実際ローカルで試したところ、フェルッカでは出ますがアビスでは出ませんでした。}
&del(){★同様に、トクノ沸き(Serado)、ツイステッド沸き(Twaulo)、ベドラム沸き(Ilhenir)などからも、フェルッカ以外のファセットではドロップしていないと思われます。}
★ChampionSpawn.csの525行目にGetArtifact()のトリガがありますが、シェアード系と内装系のリストにアイテム登録がないため、シェアード系と内装系が出ていないだけのようです。
***&del(){修正方法}
&del(){最も簡単な修正は、ここを、}
if (this.Map == Map.Felucca || this.Map == Map.TerMur)
&del(){にすることですが、注意点として、テルマーのファセット内にAF類が「出てはいけない」チャンピオン系がいないことが必要です。}
&del(){おそらくそんなものはいないですよね?}
&del(){★また、トクノ沸き、ツイステッド沸き、ベドラム沸きなどのことも考えると、ここのファセット条件文は、AF/レプリカ類のドロップの邪魔になっていると思います。}
***レプリカについてはシェアード系も内装系もリスト登録すらない
[Scripts\Mobiles\Bosses\AbyssalInfernal.cs]
●69行目から (PrimevalLich.csは111行目から)
public override Type[] SharedList
{
get
{
return new Type[] { };
}
}
public override Type[] DecorativeList
{
get
{
return new Type[] { };
}
}
★リストに追加すればいいかと思い気や、なんとこれらについては、クラス定義も見当たらず。
例えば、アークデーモン像(ArchdemonStatue)や、さらし台(Pillory)など。
ServUO側で、クラスファイルがリリースされれば追加が楽ですね・・・。
スクリプトはこちらのページにアップロード、説明、Tips等をお書きください。
希望するアップデートのスクリプトをアップロードしていただいてもOKですが、必ず採用するわけではないのでよろしくお願いします。
で・す・が
やはりこちらの作業無しで修正されている、アップデートされているファイルがあるなら利用することに基本的に前向きですw
こちらのリアル都合や力量の具合によりプレイヤーさんにスクリプト、修正などの協力を申し出ることがあります。
協力して頂けるととても助かります。
まさかのスクリプトまで、皆で作るラピスになります^^;
----
現在の修正協力要請
様々なバグ除去w
----
**[[釣り関連まとめ]]
**[[生産関連修正まとめ]]
**[[戦闘・報酬関連修正まとめ]]
**[[Tips・アイテム関連修正まとめ]]
**[[スキル関連修正まとめ]]
**[[錬成関連修正まとめ]]
**[[クエスト関連修正まとめ]]
**[[モンスター関連修正まとめ]]
**[[染料システム]]